Skip to content

Commit b0e8fc6

Browse files
[Release] Hotfix 2.26.8 => 2.26.9 (patch) (#11784)
* chore: bump version to 2.26.9 * fix(Twitter): reuse query (#11783) * fix(Twitter): update features options * refactor: align query keys * fix: improve query user by user identity (#11787) * refactor(Twitter): get user info via Firefly (#11788) * fix(Twitter): disable refetchOnWindowFocus * fix: increase stale time * refactor(Twitter): get user info via Firefly * fix: prettier --------- Co-authored-by: swkatmask <[email protected]> * fix(Twitter): skip empty screen name (#11789) --------- Co-authored-by: Wukong Sun <[email protected]> Co-authored-by: swkatmask <[email protected]>
1 parent 02a5f25 commit b0e8fc6

File tree

18 files changed

+218
-78
lines changed

18 files changed

+218
-78
lines changed

cspell.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -265,6 +265,7 @@
265265
"ronin",
266266
"roninchain",
267267
"rpid",
268+
"rweb",
268269
"sablier",
269270
"savm",
270271
"sbch",
@@ -302,6 +303,7 @@
302303
"thegraph",
303304
"timelock",
304305
"timelocked",
306+
"tipjar",
305307
"titlebar",
306308
"tlos",
307309
"tokenid",
@@ -326,6 +328,7 @@
326328
"unstoppabledomains",
327329
"unstyled",
328330
"urlcat",
331+
"userinfo",
329332
"usermenu",
330333
"vcent",
331334
"venomswap",

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
"yarn": ">=999.0.0",
99
"npm": ">=999.0.0"
1010
},
11-
"version": "2.26.8",
11+
"version": "2.26.9",
1212
"private": true,
1313
"license": "AGPL-3.0-or-later",
1414
"scripts": {

packages/mask/content-script/components/InjectedComponents/ProfileCard/AvatarDecoration.tsx

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { Twitter } from '@masknet/web3-providers'
1+
import { FireflyTwitter, Twitter } from '@masknet/web3-providers'
22
import { NFTBadgeTimeline } from '@masknet/plugin-avatar'
33
import { useQuery } from '@tanstack/react-query'
44

@@ -9,12 +9,13 @@ interface Props {
99
}
1010
export function AvatarDecoration({ userId, className, size }: Props) {
1111
const { data: user } = useQuery({
12-
queryKey: ['twitter', 'profile', 'check-nft-avatar', userId],
13-
staleTime: 60_000,
12+
queryKey: ['twitter', 'profile', userId],
1413
retry: 0,
14+
staleTime: 3600_000,
15+
refetchOnWindowFocus: false,
1516
queryFn: () => {
1617
if (!userId) return null
17-
return Twitter.getUserByScreenName(userId, true)
18+
return FireflyTwitter.getUserInfo(userId)
1819
},
1920
})
2021

@@ -24,7 +25,7 @@ export function AvatarDecoration({ userId, className, size }: Props) {
2425
<NFTBadgeTimeline
2526
classes={{ root: className }}
2627
userId={userId}
27-
avatarId={Twitter.getAvatarId(user.avatarURL)}
28+
avatarId={Twitter.getAvatarId(user.legacy.profile_image_url_https)}
2829
height={size}
2930
width={size}
3031
/>

packages/mask/content-script/site-adaptors/twitter.com/collecting/identity.ts

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import { delay } from '@masknet/kit'
55
import { ProfileIdentifier } from '@masknet/shared-base'
66
import { queryClient } from '@masknet/shared-base-ui'
77
import type { SiteAdaptorUI } from '@masknet/types'
8-
import { Twitter } from '@masknet/web3-providers'
8+
import { FireflyTwitter } from '@masknet/web3-providers'
99
import { creator } from '../../../site-adaptor-infra/index.js'
1010
import { twitterBase } from '../base.js'
1111
import {
@@ -98,28 +98,29 @@ function resolveCurrentVisitingIdentityInner(
9898
ownerRef: SiteAdaptorUI.CollectingCapabilities.IdentityResolveProvider['recognized'],
9999
cancel: AbortSignal,
100100
) {
101-
const update = async (twitterId: string) => {
101+
const update = async (screenName: string) => {
102102
const user = await queryClient.fetchQuery({
103103
retry: 0,
104-
staleTime: 60_000,
105-
queryKey: ['twitter', 'profile', twitterId],
106-
queryFn: () => Twitter.getUserByScreenName(twitterId),
104+
staleTime: 3600_000,
105+
queryKey: ['twitter', 'profile', screenName],
106+
queryFn: () => FireflyTwitter.getUserInfo(screenName),
107107
})
108108
if (process.env.NODE_ENV === 'development') {
109-
console.assert(user, `Can't get get user by screen name ${twitterId}`)
109+
console.assert(user, `Can't get get user by screen name ${screenName}`)
110110
}
111111
if (!user) return
112112

113-
const handle = user.screenName
113+
const legacy = user.legacy
114+
const handle = legacy.screen_name
114115
const ownerHandle = ownerRef.value.identifier?.userId
115116
const isOwner = !!ownerHandle && handle.toLowerCase() === ownerHandle.toLowerCase()
116-
const avatar = user.avatarURL
117-
const bio = user.bio
118-
const homepage = user.homepage
117+
const avatar = legacy.profile_image_url_https
118+
const bio = legacy.profile_image_url_https
119+
const homepage = legacy.entities.url?.urls?.[0]?.expanded_url
119120

120121
ref.value = {
121122
identifier: ProfileIdentifier.of(twitterBase.networkIdentifier, handle).unwrapOr(undefined),
122-
nickname: user.nickname,
123+
nickname: legacy.name,
123124
avatar,
124125
bio,
125126
homepage,

packages/mask/content-script/site-adaptors/twitter.com/injection/ProfileCard/index.tsx

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
11
import { CrossIsolationMessages, ProfileIdentifier, stopPropagation, type SocialIdentity } from '@masknet/shared-base'
22
import { AnchorProvider } from '@masknet/shared-base-ui'
33
import { ShadowRootPopper, makeStyles } from '@masknet/theme'
4-
import { Twitter } from '@masknet/web3-providers'
5-
import type { TwitterBaseAPI } from '@masknet/web3-providers/types'
4+
import { FireflyTwitter } from '@masknet/web3-providers'
65
import { Fade } from '@mui/material'
76
import { useQuery } from '@tanstack/react-query'
87
import { useEffect, useMemo, useRef, useState } from 'react'
@@ -48,15 +47,18 @@ function ProfileCardHolder() {
4847

4948
const { data: identity } = useQuery({
5049
queryKey: ['twitter', 'profile', twitterId],
51-
queryFn: () => Twitter.getUserByScreenName(twitterId),
52-
select: (user: TwitterBaseAPI.User | null) => {
50+
staleTime: 3600_000,
51+
refetchOnWindowFocus: false,
52+
queryFn: () => FireflyTwitter.getUserInfo(twitterId),
53+
select: (user) => {
5354
if (!user) return null
55+
const legacy = user.legacy
5456
return {
55-
identifier: ProfileIdentifier.of(twitterBase.networkIdentifier, user.screenName).unwrapOr(undefined),
56-
nickname: user.nickname,
57-
avatar: user.avatarURL,
58-
bio: user.bio,
59-
homepage: user.homepage,
57+
identifier: ProfileIdentifier.of(twitterBase.networkIdentifier, legacy.screen_name).unwrapOr(undefined),
58+
nickname: legacy.name,
59+
avatar: legacy.profile_image_url_https,
60+
bio: legacy.description,
61+
homepage: legacy.entities.url?.urls?.[0]?.expanded_url,
6062
} as SocialIdentity
6163
},
6264
})

packages/mask/content-script/site-adaptors/twitter.com/utils/user.ts

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
1-
import { isNull } from 'lodash-es'
21
import { ProfileIdentifier, type SocialIdentity } from '@masknet/shared-base'
3-
import { Twitter } from '@masknet/web3-providers'
2+
import { queryClient } from '@masknet/shared-base-ui'
3+
import { FireflyTwitter } from '@masknet/web3-providers'
4+
import { isNull } from 'lodash-es'
45
import { twitterBase } from '../base.js'
56

67
/**
@@ -16,16 +17,22 @@ export function usernameValidator(name: string) {
1617
return true
1718
}
1819

19-
export async function getUserIdentity(twitterId: string): Promise<SocialIdentity | undefined> {
20-
const user = await Twitter.getUserByScreenName(twitterId)
20+
export async function getUserIdentity(screenName: string): Promise<SocialIdentity | undefined> {
21+
const user = await queryClient.fetchQuery({
22+
queryKey: ['twitter', 'profile', screenName],
23+
queryFn: () => FireflyTwitter.getUserInfo(screenName),
24+
retry: 0,
25+
staleTime: 3600_000,
26+
})
2127
if (!user) return
2228

29+
const legacy = user.legacy
2330
return {
24-
identifier: ProfileIdentifier.of(twitterBase.networkIdentifier, user.screenName).unwrapOr(undefined),
25-
nickname: user.nickname,
26-
avatar: user.avatarURL,
27-
bio: user.bio,
28-
homepage: user.homepage,
31+
identifier: ProfileIdentifier.of(twitterBase.networkIdentifier, screenName).unwrapOr(undefined),
32+
nickname: legacy.name,
33+
avatar: legacy.profile_image_url_https,
34+
bio: legacy.description,
35+
homepage: legacy.entities.url?.urls?.[0]?.expanded_url,
2936
}
3037
}
3138

packages/plugins/Savings/src/SiteAdaptor/SavingsDialog.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ export function SavingsDialog({ open, onClose }: SavingsDialogProps) {
9696
return [token[1], aTokens?.find((f) => f[0].toUpperCase() === `a${token[0]}`.toUpperCase())?.[1]]
9797
})
9898
},
99-
staleTime: 300_000,
99+
staleTime: 3600_000,
100100
})
101101

102102
const { value: detailedAaveTokens = EMPTY_LIST, loading: loadingAAveDetails } = useFungibleTokens(

packages/plugins/Web3Profile/src/SiteAdaptor/components/ProfileCard.tsx

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import { Icons } from '@masknet/icons'
44
import { PlatformAvatar, WalletSettingsCard } from '@masknet/shared'
55
import { type BindingProof, EMPTY_LIST } from '@masknet/shared-base'
66
import { makeStyles } from '@masknet/theme'
7-
import { Twitter } from '@masknet/web3-providers'
7+
import { FireflyTwitter } from '@masknet/web3-providers'
88
import {
99
Card,
1010
CardContent,
@@ -126,14 +126,17 @@ export const ProfileCard = memo(function ProfileCard({
126126
const { classes, cx } = useStyles()
127127
const t = useWeb3ProfileTrans()
128128
const [expanded, setExpanded] = useState(initialExpanded)
129+
const identity = profile.identity
129130
const { data: user } = useQuery({
130-
queryKey: ['twitter', 'profile', profile.identity],
131-
queryFn: () => Twitter.getUserByScreenName(profile.identity),
131+
queryKey: ['twitter', 'profile', identity],
132+
staleTime: 3600_000,
133+
refetchOnWindowFocus: false,
134+
queryFn: () => FireflyTwitter.getUserInfo(identity),
132135
})
133-
const nickname = user?.nickname || profile.name || profile.identity
136+
const nickname = user?.legacy.name || profile.name || profile.identity
134137
// Identities of Twitter proof get lowered case. Prefer handle from Twitter API.
135-
const handle = user?.screenName || profile.identity
136-
const avatarUrl = user?.avatarURL || avatar
138+
const handle = user?.legacy.screen_name || profile.identity
139+
const avatarUrl = user?.legacy.profile_image_url_https || avatar
137140
const handleSwitch = useCallback(
138141
(address: string) => {
139142
onToggle?.(profile.identity, address)
Lines changed: 21 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,28 @@
1-
import { useQuery } from '@tanstack/react-query'
2-
import { FireflyConfig, Twitter } from '@masknet/web3-providers'
1+
import { skipToken, useQuery } from '@tanstack/react-query'
2+
import { FireflyConfig, FireflyTwitter } from '@masknet/web3-providers'
33
import { EMPTY_LIST } from '@masknet/shared-base'
44

5-
export function useFireflyFarcasterAccounts(userId?: string) {
5+
export function useFireflyFarcasterAccounts(identity?: string) {
6+
const { data: user } = useQuery({
7+
queryKey: ['twitter', 'profile', identity],
8+
staleTime: 3600_000,
9+
refetchOnWindowFocus: false,
10+
queryFn: identity ? () => FireflyTwitter.getUserInfo(identity) : skipToken,
11+
})
12+
const id = user?.rest_id
13+
614
return useQuery({
7-
queryKey: ['union-profile', 'by-twitter-id', userId],
15+
queryKey: ['union-profile', 'by-twitter-id', id],
816
retry: 0,
917
staleTime: 60_000,
10-
queryFn: async () => {
11-
if (!userId) return EMPTY_LIST
12-
const user = await Twitter.getUserByScreenName(userId)
13-
if (!user?.userId) return
14-
const unionProfile = await FireflyConfig.getUnionProfile({
15-
twitterId: user?.userId,
16-
})
17-
return unionProfile.farcasterProfiles ?? EMPTY_LIST
18-
},
18+
queryFn:
19+
id ?
20+
async () => {
21+
const unionProfile = await FireflyConfig.getUnionProfile({
22+
twitterId: id,
23+
})
24+
return unionProfile.farcasterProfiles ?? EMPTY_LIST
25+
}
26+
: skipToken,
1927
})
2028
}

packages/web3-providers/src/Firefly/Config.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
1-
import urlcat from 'urlcat'
21
import { EMPTY_LIST } from '@masknet/shared-base'
3-
import { fetchJSON } from '../helpers/fetchJSON.js'
2+
import urlcat from 'urlcat'
43
import type { FireflyConfigAPI } from '../entry-types.js'
4+
import { fetchJSON } from '../helpers/fetchJSON.js'
5+
import { FIREFLY_BASE_URL } from './constants.js'
56

67
const BASE_URL = 'https://api.dimension.im/v1'
78
const TWITTER_HANDLER_VERIFY_URL = 'https://twitter-handler-proxy.r2d2.to'
8-
const FIREFLY_BASE_URL = 'https://api.firefly.land'
99

1010
export class FireflyConfig {
1111
static async getLensByTwitterId(

0 commit comments

Comments
 (0)