Skip to content

Commit

Permalink
ci(release): publish latest release
Browse files Browse the repository at this point in the history
  • Loading branch information
hello-happy-puppy committed Jan 8, 2025
1 parent 7bda198 commit cd72490
Show file tree
Hide file tree
Showing 609 changed files with 11,679 additions and 8,606 deletions.
82 changes: 75 additions & 7 deletions RELEASE
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
IPFS hash of the deployment:
- CIDv0: `QmWaBTFEnY4LqKBdeyyRBmwhCuphBhe3p3CKmxnnuNhY5z`
- CIDv1: `bafybeid2kthnxmhk5tcm2ogpsjzooeo3dj6bt2oh6tk3vbrsqf4sc2ogju`
- CIDv0: `Qma3xNtyKF992ESqe25eV3JTR8LGZwuLLx2HyfJ2LwcGRw`
- CIDv1: `bafybeifoavmpqbbjcli2mn7q35itqfnsuiitrvfxvxkikguokyij7cqbhi`

The latest release is always mirrored at [app.uniswap.org](https://app.uniswap.org).

Expand All @@ -10,15 +10,83 @@ You can also access the Uniswap Interface from an IPFS gateway.
Your Uniswap settings are never remembered across different URLs.

IPFS gateways:
- https://bafybeid2kthnxmhk5tcm2ogpsjzooeo3dj6bt2oh6tk3vbrsqf4sc2ogju.ipfs.dweb.link/
- https://bafybeid2kthnxmhk5tcm2ogpsjzooeo3dj6bt2oh6tk3vbrsqf4sc2ogju.ipfs.cf-ipfs.com/
- [ipfs://QmWaBTFEnY4LqKBdeyyRBmwhCuphBhe3p3CKmxnnuNhY5z/](ipfs://QmWaBTFEnY4LqKBdeyyRBmwhCuphBhe3p3CKmxnnuNhY5z/)
- https://bafybeifoavmpqbbjcli2mn7q35itqfnsuiitrvfxvxkikguokyij7cqbhi.ipfs.dweb.link/
- https://bafybeifoavmpqbbjcli2mn7q35itqfnsuiitrvfxvxkikguokyij7cqbhi.ipfs.cf-ipfs.com/
- [ipfs://Qma3xNtyKF992ESqe25eV3JTR8LGZwuLLx2HyfJ2LwcGRw/](ipfs://Qma3xNtyKF992ESqe25eV3JTR8LGZwuLLx2HyfJ2LwcGRw/)

### 5.63.4 (2025-01-02)
## 5.64.0 (2025-01-08)


### Features

* **web:** add pagination to the positions page (#14478) 69771b0
* **web:** add recommended tooltip (#14574) 7a763dc
* **web:** allow users to add with eth/weth (#14461) 4740134
* **web:** allowing users to remove with eth (#14519) 344c6a4
* **web:** disable clicking on FOR activity until confirmed on chain (#14605) f8c541a
* **web:** Enable GPU acceleration and layout containment on AppBody (#14710) 6f0b0ca


### Bug Fixes

* **web:** set duped events as executed to prevent retry - prod (#14781) 35193b4
* **web:** 01 07 fix web re add images prop to portfoliologo and use split logo staging (#14876) 02a3013
* **web:** 01 08 fix web fix double logo on doublecurrencyandchainlogo staging (#14948) 1b606bb
* **web:** add analyze mode to build script (#14610) c9f9392
* **web:** add monad testnet rpc to web env (#14563) 649d925
* **web:** add white bgs to images and use universe token logos (#14604) c8ac0c9
* **web:** Adrian/direct t fixes staging (#14941) 58f2954
* **web:** bring back network logo on logoless placeholder (#14803) 97bda9d
* **web:** early return isRNDev (#14685) fb77d3a
* **web:** enable unitag search with suffix (#14711) 993cbd6
* **web:** fix alignment of liquidity header modal (#14682) b39d879
* **web:** fix conversion event success handler (#14532) e81947b
* **web:** fix crash on positions page (#14562) 2ba514a
* **web:** fix disabled swap button for previously-dismissed warning tokens (#14553) 5a987f5
* **web:** fix miniP truncated closed positions + testnet mode in pools tab (#14666) 69c50a7
* **web:** fix missing mweb swap (#14567) 0eab28e
* **web:** fix responsive walletconnect pane expando line (#14661) 81fd2ea
* **web:** fix v2 lp networks dropdown (#14576) a4f41d9
* **web:** fix v2 position page crash (#14792) af9dd17
* **web:** info text should be heading3 variant (#14739) 1dbc971
* **web:** input focus state on press (#14759) e090f25
* **web:** landing page translations line break (#14649) c1fb00f
* **web:** modal height fix (#14538) c7eac8b
* **web:** open LP learn more links in new tabs (#14568) 57c0752
* **web:** overflow issues in chart header (#14744) 1de24a8
* **web:** polish sprint nits (#14624) 2849220
* **web:** set duped events as executed to prevent retry (#14771) 6dcb3ef
* **web:** show more button hiding (#14742) a5edb7a
* **web:** some rich link previews broken bc their logo is a webp (#14638) 350a2d6
* **web:** submit conversion events to amplitude (#14497) e172586
* **web:** switch to new marketing events (#14700) 35d9d4f
* **web:** theme value transition for explore page tabs (#14609) 5bb4160
* **web:** tree-shake wagmi chains (#14566) 2c3d079
* **web:** truncation issue on max price position text (#14573) f137c41
* **web:** update global preferences menu (#14636) 38d5f38
* **web:** update tdp default input currency (#14699) d7147af
* **web:** URL prefill param without ?chain should use default chain instead of wallet chain (#14227) a8c57d6
* **web): Revert "feat(web:** Enable GPU acceleration and layout containment on AppBody (#14710)" (#14788) a5b4976


### Continuous Integration

* **web:** update sitemaps 77b75a6


### Styles

* **web:** all networks icon in explore page dropdown (#14639) bf1a42b
* **web:** decrease font size for Learn More link (#14626) 6ea86c2
* **web:** fix helper icon alignment in search dropdown (#14680) 237e505
* **web:** fix hover on active explore tabs (#14646) b1180ea
* **web:** fix some style nits in explore token page mobile action tabs (#14743) 9100557


### Code Refactoring

* **web:** refactor use is x page part 2 (#14652) aa54d69
* **web:** refactor use X page into reusable hook (#14651) f53fa2b
* **web:** refactor useIsNfts hook (#14653) 0132ff0
* **web:** use default match types and include optional override (#14704) edf95e9


2 changes: 1 addition & 1 deletion VERSION
Original file line number Diff line number Diff line change
@@ -1 +1 @@
web/5.63.4
web/5.64.0
16 changes: 4 additions & 12 deletions apps/extension/jest-setup.js
Original file line number Diff line number Diff line change
@@ -1,17 +1,14 @@
import 'utilities/src/logger/mocks'
import 'utilities/jest-package-mocks'
import 'uniswap/jest-package-mocks'
import 'wallet/jest-package-mocks'
import 'ui/jest-package-mocks'

import { chrome } from 'jest-chrome'
import { AppearanceSettingType } from 'wallet/src/features/appearance/slice'
import { TextEncoder, TextDecoder } from 'util'
import { mockSharedPersistQueryClientProvider } from 'uniswap/src/test/mocks/mockSharedPersistQueryClientProvider'
import { mockUIAssets } from 'ui/src/test/mocks/mockUIAssets'
import { mockLocalizationContext } from 'uniswap/src/test/mocks/locale'

process.env.IS_UNISWAP_EXTENSION = true

global.TextEncoder = TextEncoder;
global.TextDecoder = TextDecoder;

const ignoreLogs = {
error: [
// We need to use _persist property to ensure that the state is properly
Expand Down Expand Up @@ -73,8 +70,3 @@ jest.mock('wallet/src/features/appearance/hooks', () => {
}
})

jest.mock('uniswap/src/features/language/LocalizationContext', () => mockLocalizationContext({}))

jest.mock('uniswap/src/data/apiClients/SharedPersistQueryClientProvider', () => mockSharedPersistQueryClientProvider)

mockUIAssets()
2 changes: 1 addition & 1 deletion apps/extension/src/app/OnboardingApp.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ import Trace from 'uniswap/src/features/telemetry/Trace'
import { ExtensionEventName } from 'uniswap/src/features/telemetry/constants'
import { sendAnalyticsEvent } from 'uniswap/src/features/telemetry/send'
import { UnitagUpdaterContextProvider } from 'uniswap/src/features/unitags/context'
import i18n from 'uniswap/src/i18n/i18n'
import i18n from 'uniswap/src/i18n'
import { ExtensionOnboardingFlow } from 'uniswap/src/types/screens/extension'
import { ErrorBoundary } from 'wallet/src/components/ErrorBoundary/ErrorBoundary'
import { SharedWalletProvider } from 'wallet/src/providers/SharedWalletProvider'
Expand Down
2 changes: 1 addition & 1 deletion apps/extension/src/app/PopupApp.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ import { syncAppWithDeviceLanguage } from 'uniswap/src/features/settings/slice'
import Trace from 'uniswap/src/features/telemetry/Trace'
import { ElementName } from 'uniswap/src/features/telemetry/constants'
import { UnitagUpdaterContextProvider } from 'uniswap/src/features/unitags/context'
import i18n from 'uniswap/src/i18n/i18n'
import i18n from 'uniswap/src/i18n'
import { ExtensionScreens } from 'uniswap/src/types/screens/extension'
import { getUniqueId } from 'utilities/src/device/getUniqueId'
import { logger } from 'utilities/src/logger/logger'
Expand Down
2 changes: 1 addition & 1 deletion apps/extension/src/app/SidebarApp.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ import Trace from 'uniswap/src/features/telemetry/Trace'
import { ExtensionEventName } from 'uniswap/src/features/telemetry/constants'
import { sendAnalyticsEvent } from 'uniswap/src/features/telemetry/send'
import { UnitagUpdaterContextProvider, useUnitagUpdater } from 'uniswap/src/features/unitags/context'
import i18n from 'uniswap/src/i18n/i18n'
import i18n from 'uniswap/src/i18n'
import { getUniqueId } from 'utilities/src/device/getUniqueId'
import { isDevEnv } from 'utilities/src/environment/env'
import { logger } from 'utilities/src/logger/logger'
Expand Down
2 changes: 1 addition & 1 deletion apps/extension/src/app/UnitagClaimApp.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ import { BlankUrlProvider } from 'uniswap/src/contexts/UrlContext'
import { LocalizationContextProvider } from 'uniswap/src/features/language/LocalizationContext'
import Trace from 'uniswap/src/features/telemetry/Trace'
import { UnitagUpdaterContextProvider } from 'uniswap/src/features/unitags/context'
import i18n from 'uniswap/src/i18n/i18n'
import i18n from 'uniswap/src/i18n'
import { getUniqueId } from 'utilities/src/device/getUniqueId'
import { logger } from 'utilities/src/logger/logger'
import { usePrevious } from 'utilities/src/react/hooks'
Expand Down
2 changes: 2 additions & 0 deletions apps/extension/src/app/apollo.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import { ApolloProvider } from '@apollo/client'
import { PropsWithChildren } from 'react'
import { localStorage } from 'redux-persist-webextension-storage'
import { getReduxStore } from 'src/store/store'
// eslint-disable-next-line no-restricted-imports
import { usePersistedApolloClient } from 'wallet/src/data/apollo/usePersistedApolloClient'

Expand All @@ -11,6 +12,7 @@ export function GraphqlProvider({ children }: PropsWithChildren<unknown>): JSX.E
const apolloClient = usePersistedApolloClient({
storageWrapper: localStorage,
maxCacheSizeInBytes: MAX_CACHE_SIZE_IN_BYTES,
reduxStore: getReduxStore(),
})

if (!apolloClient) {
Expand Down
4 changes: 3 additions & 1 deletion apps/extension/src/app/components/PasswordInput.tsx
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import { forwardRef } from 'react'
import { useTranslation } from 'react-i18next'
import { TextInput } from 'react-native'
import { Input, InputProps } from 'src/app/components/Input'
import { Button, Flex, FlexProps, IconProps, Text } from 'ui/src'
Expand Down Expand Up @@ -50,11 +51,12 @@ export const PasswordInput = forwardRef<TextInput, PasswordInputProps>(function
})

function StrengthIndicator({ strength }: { strength: PasswordStrength }): JSX.Element | null {
const { t } = useTranslation()
if (strength === PasswordStrength.NONE) {
return null
}

const { text, color } = getPasswordStrengthTextAndColor(strength)
const { text, color } = getPasswordStrengthTextAndColor(t, strength)

return (
<Flex position="absolute" right="$spacing24">
Expand Down
18 changes: 18 additions & 0 deletions apps/extension/src/app/datadog.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,14 @@ import { datadogLogs } from '@datadog/browser-logs'
import { datadogRum } from '@datadog/browser-rum'
import { getDatadogEnvironment } from 'src/app/version'
import { config } from 'uniswap/src/config'
import {
DatadogIgnoredErrorsConfigKey,
DatadogIgnoredErrorsValType,
DynamicConfigs,
} from 'uniswap/src/features/gating/configs'
import { Experiments } from 'uniswap/src/features/gating/experiments'
import { FeatureFlags, WALLET_FEATURE_FLAG_NAMES, getFeatureFlagName } from 'uniswap/src/features/gating/flags'
import { getDynamicConfigValue } from 'uniswap/src/features/gating/hooks'
import { Statsig } from 'uniswap/src/features/gating/sdk/statsig'
import { getUniqueId } from 'utilities/src/device/getUniqueId'
import { logger } from 'utilities/src/logger/logger'
Expand Down Expand Up @@ -39,12 +45,24 @@ export async function initializeDatadog(appName: string): Promise<void> {
if (event.error.source === 'console') {
return false
}
const ignoredErrors = getDynamicConfigValue<
DynamicConfigs.DatadogIgnoredErrors,
DatadogIgnoredErrorsConfigKey,
DatadogIgnoredErrorsValType
>(DynamicConfigs.DatadogIgnoredErrors, DatadogIgnoredErrorsConfigKey.Errors, [])

const ignoredError = ignoredErrors.find(({ messageContains }) => event.error?.message.includes(messageContains))
if (ignoredError && Math.random() > ignoredError.sampleRate) {
return false
}

Object.defineProperty(event.error, 'stack', {
value: event.error.stack?.replace(/chrome-extension:\/\/[a-z]{32}/gi, ''),
writable: false,
configurable: true,
})
}

return true
},
})
Expand Down
46 changes: 39 additions & 7 deletions apps/extension/src/app/features/appRating/AppRatingModal.tsx
Original file line number Diff line number Diff line change
@@ -1,12 +1,14 @@
import { useEffect, useState } from 'react'
import { useDispatch } from 'react-redux'
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, zIndices } from 'ui/src/theme'
import { Modal } from 'uniswap/src/components/modals/Modal'
import { uniswapUrls } from 'uniswap/src/constants/urls'
import { ModalName } from 'uniswap/src/features/telemetry/constants'
import { useTranslation } from 'uniswap/src/i18n'
import { ModalName, WalletEventName } from 'uniswap/src/features/telemetry/constants'
import { sendAnalyticsEvent } from 'uniswap/src/features/telemetry/send'
import { appRatingPromptedMsSelector, appRatingProvidedMsSelector } from 'wallet/src/features/wallet/selectors'
import { setAppRating } from 'wallet/src/features/wallet/slice'

interface AppRatingModalProps {
Expand All @@ -23,6 +25,26 @@ export default function AppRatingModal({ onClose }: AppRatingModalProps): JSX.El
const { t } = useTranslation()
const [state, setState] = useState(State.Initial)
const dispatch = useDispatch()
const appRatingPromptedMs = useSelector(appRatingPromptedMsSelector)
const appRatingProvidedMs = useSelector(appRatingProvidedMsSelector)

const close = (): void => {
sendAnalyticsEvent(WalletEventName.AppRating, {
type: 'close',
appRatingPromptedMs,
appRatingProvidedMs,
})
onClose()
}

const onRemindLater = (): void => {
sendAnalyticsEvent(WalletEventName.AppRating, {
type: 'remind',
appRatingPromptedMs,
appRatingProvidedMs,
})
onClose()
}

const stateConfig = {
[State.Initial]: {
Expand All @@ -42,11 +64,16 @@ export default function AppRatingModal({ onClose }: AppRatingModalProps): JSX.El
primaryButtonText: t('appRating.feedback.button.send'),
Icon: MessageText,
iconSize: '$icon.18' as IconSizeTokens,
onSecondaryButtonPress: () => onClose(),
onSecondaryButtonPress: onRemindLater,
onPrimaryButtonPress: (): void => {
// eslint-disable-next-line security/detect-non-literal-fs-filename
window.open(uniswapUrls.walletFeedbackForm)
dispatch(setAppRating({ feedbackProvided: true }))
sendAnalyticsEvent(WalletEventName.AppRating, {
type: 'feedback-form',
appRatingPromptedMs,
appRatingProvidedMs,
})
onClose()
},
},
Expand All @@ -57,11 +84,16 @@ export default function AppRatingModal({ onClose }: AppRatingModalProps): JSX.El
primaryButtonText: t('common.button.review'),
Icon: Feedback,
iconSize: '$icon.24' as IconSizeTokens,
onSecondaryButtonPress: () => onClose(),
onSecondaryButtonPress: onRemindLater,
onPrimaryButtonPress: (): void => {
// eslint-disable-next-line security/detect-non-literal-fs-filename
window.open(`https://chromewebstore.google.com/detail/uniswap-extension/${chrome.runtime.id}/reviews`)
dispatch(setAppRating({ ratingProvided: true }))
sendAnalyticsEvent(WalletEventName.AppRating, {
type: 'store-review',
appRatingPromptedMs,
appRatingProvidedMs: Date.now(), // to avoid race condition with updates from redux
})
onClose()
},
},
Expand All @@ -84,8 +116,8 @@ export default function AppRatingModal({ onClose }: AppRatingModalProps): JSX.El
}, [dispatch])

return (
<Modal isDismissible isModalOpen name={ModalName.TokenWarningModal} backgroundColor="$surface1" onClose={onClose}>
<TouchableArea p="$spacing16" position="absolute" right={0} top={0} zIndex={zIndices.default} onPress={onClose}>
<Modal isDismissible isModalOpen name={ModalName.TokenWarningModal} backgroundColor="$surface1" onClose={close}>
<TouchableArea p="$spacing16" position="absolute" right={0} top={0} zIndex={zIndices.default} onPress={close}>
<X color="$neutral2" size="$icon.20" />
</TouchableArea>
<Flex alignItems="center" gap="$spacing8" pt="$spacing16">
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import { useTranslation } from 'react-i18next'
import { OnboardingScreenProps } from 'src/app/features/onboarding/OnboardingScreenProps'
import { Button, Flex, Text, TouchableArea } from 'ui/src'
import { BackArrow } from 'ui/src/components/icons'
import i18n from 'uniswap/src/i18n/i18n'
import i18n from 'uniswap/src/i18n'

export function OnboardingScreenFrame({
Icon,
Expand Down
2 changes: 1 addition & 1 deletion apps/extension/src/app/features/settings/DevMenuScreen.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import { Settings } from 'ui/src/components/icons'
import { Language, WALLET_SUPPORTED_LANGUAGES } from 'uniswap/src/features/language/constants'
import { getLanguageInfo, useCurrentLanguageInfo } from 'uniswap/src/features/language/hooks'
import { setCurrentLanguage } from 'uniswap/src/features/settings/slice'
import i18n from 'uniswap/src/i18n/i18n'
import i18n from 'uniswap/src/i18n'
import { GatingOverrides } from 'wallet/src/components/gating/GatingOverrides'

export function DevMenuScreen(): JSX.Element {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { t } from 'i18next'
import { useState } from 'react'
import { useTranslation } from 'react-i18next'
import { ScreenHeader } from 'src/app/components/layout/ScreenHeader'
import { ChangePasswordForm } from 'src/app/features/settings/password/ChangePasswordForm'
import { EnterPasswordForm } from 'src/app/features/settings/password/EnterPasswordForm'
Expand All @@ -12,6 +12,7 @@ enum Step {
}

export function SettingsChangePasswordScreen(): JSX.Element {
const { t } = useTranslation()
const [currentStep, setCurrentStep] = useState(Step.EnterPassword)
const { navigateBack } = useExtensionNavigation()

Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { t } from 'i18next'
import { useCallback, useEffect } from 'react'
import { useTranslation } from 'react-i18next'
import { OnboardingScreen } from 'src/app/features/onboarding/OnboardingScreen'
import { useOnboardingSteps } from 'src/app/features/onboarding/OnboardingStepsContext'
import { useUnitagClaimContext } from 'src/app/features/unitags/UnitagClaimContext'
Expand All @@ -16,6 +16,7 @@ import { UnitagChooseProfilePicContent } from 'wallet/src/features/unitags/Unita
import { useAccountAddressFromUrlWithThrow } from 'wallet/src/features/wallet/hooks'

export function UnitagChooseProfilePicScreen(): JSX.Element {
const { t } = useTranslation()
const { goToNextStep, goToPreviousStep } = useOnboardingSteps()
const { unitag, entryPoint, setProfilePicUri } = useUnitagClaimContext()
const address = useAccountAddressFromUrlWithThrow()
Expand Down
Loading

0 comments on commit cd72490

Please sign in to comment.