diff --git a/package.json b/package.json index fea8423229c8..6618ca026986 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "mask-network", "packageManager": "pnpm@6.30.1", - "version": "2.5.2", + "version": "2.5.3", "private": true, "license": "AGPL-3.0-or-later", "scripts": { diff --git a/packages/mask/src/manifest.json b/packages/mask/src/manifest.json index 9b58620646e5..4172e4f18817 100644 --- a/packages/mask/src/manifest.json +++ b/packages/mask/src/manifest.json @@ -1,6 +1,6 @@ { "name": "Mask Network", - "version": "2.5.2", + "version": "2.5.3", "manifest_version": 2, "permissions": ["storage", "downloads", "webNavigation", "activeTab"], "optional_permissions": ["", "notifications", "clipboardRead"], diff --git a/packages/mask/src/social-network-adaptor/twitter.com/collecting/identity.ts b/packages/mask/src/social-network-adaptor/twitter.com/collecting/identity.ts index d31724838889..677587084267 100644 --- a/packages/mask/src/social-network-adaptor/twitter.com/collecting/identity.ts +++ b/packages/mask/src/social-network-adaptor/twitter.com/collecting/identity.ts @@ -47,7 +47,6 @@ function resolveCurrentVisitingIdentityInner( const nickname = getNickname() const handle = getTwitterId() const avatar = getAvatar() - ref.value = { identifier: new ProfileIdentifier(twitterBase.networkIdentifier, handle), nickname, diff --git a/packages/mask/src/social-network-adaptor/twitter.com/utils/fetch.ts b/packages/mask/src/social-network-adaptor/twitter.com/utils/fetch.ts index ce6fcc543261..c955b6051e45 100644 --- a/packages/mask/src/social-network-adaptor/twitter.com/utils/fetch.ts +++ b/packages/mask/src/social-network-adaptor/twitter.com/utils/fetch.ts @@ -1,6 +1,5 @@ import { regexMatch } from '../../../utils/utils' import { defaultTo, flattenDeep } from 'lodash-unified' -import { nthChild } from '../../../utils/dom' import { canonifyImgUrl } from './url' import { makeTypedMessageText, @@ -13,25 +12,6 @@ import { } from '@masknet/shared-base' import { collectNodeText, collectTwitterEmoji } from '../../../utils' -/** - * @example - * parseNameArea("nickname@handle") - */ -const parseNameArea = (nameArea: string) => { - const atIndex = nameArea.lastIndexOf('@') - const name = nameArea.slice(0, atIndex).replace(/\n+/g, '') - const handle = nameArea.slice(atIndex + 1).replace(/\n+/g, '') - return name && handle - ? { - name, - handle, - } - : { - name: '', - handle: '', - } -} - const parseId = (t: string) => { return regexMatch(t, /status\/(\d+)/, 1)! } @@ -52,20 +32,34 @@ export const postIdParser = (node: HTMLElement) => { export const postNameParser = (node: HTMLElement) => { const tweetElement = node.querySelector('[data-testid="tweet"]') ?? node - const nameElement = collectNodeText(tweetElement.querySelector('a[role] div[id]')) - - const nameElementInQuoted = nthChild(tweetElement, 0, 0, 0, 0, 0) - const nameInQuoteTweet = nameElementInQuoted ? collectNodeText(nameElementInQuoted) : '' + const name = collectNodeText( + tweetElement.querySelector('a:not([target]) > div > div[dir="auto"] > span'), + ) + const handle = collectNodeText(tweetElement.querySelector('a[tabindex="-1"] span')) - return ( - [nameElement, nameInQuoteTweet] - .filter((x) => x?.includes('@')) - .map(parseNameArea) - .find((r) => r.name && r.handle) ?? { - name: '', - handle: '', + if (name && handle) { + return { + name, + handle: handle.slice(1), } + } + const quotedTweetName = collectNodeText( + tweetElement.querySelector('div[role="link"] div[dir="auto"] > span'), + ) + const quotedTweetHandle = collectNodeText( + tweetElement.querySelector('div[role="link"] div[dir="ltr"] > span'), ) + + if (quotedTweetName && quotedTweetHandle) { + return { + name: quotedTweetName, + handle: quotedTweetHandle.slice(1), + } + } + return { + name: '', + handle: '', + } } export const postAvatarParser = (node: HTMLElement) => { diff --git a/packages/mask/src/social-network-adaptor/twitter.com/utils/selector.ts b/packages/mask/src/social-network-adaptor/twitter.com/utils/selector.ts index 962a569ee7ab..b92728c626a0 100644 --- a/packages/mask/src/social-network-adaptor/twitter.com/utils/selector.ts +++ b/packages/mask/src/social-network-adaptor/twitter.com/utils/selector.ts @@ -48,7 +48,7 @@ export const searchNewTweetButtonSelector: () => LiveSelector = () => { } export const searchNickNameSelector: () => LiveSelector = () => - querySelector('[data-testid="UserProfileHeader_Items"]') + querySelector('[data-testid="tweet"] a:not([target]) > div > div[dir="auto"] > span > span') export const searchAvatarSelector = () => querySelector('[data-testid="primaryColumn"] a[href$="/photo"] img[src*="profile_images"]') export const searchNFTAvatarSelector = () => diff --git a/packages/mask/src/social-network-adaptor/twitter.com/utils/user.ts b/packages/mask/src/social-network-adaptor/twitter.com/utils/user.ts index fbf9ee76f8b1..1fab6ced45c1 100644 --- a/packages/mask/src/social-network-adaptor/twitter.com/utils/user.ts +++ b/packages/mask/src/social-network-adaptor/twitter.com/utils/user.ts @@ -23,24 +23,13 @@ export const usernameValidator: NonNullable { - const node = searchNickNameSelector().evaluate()?.parentElement?.parentElement?.firstChild - ?.nextSibling as HTMLDivElement + const node = searchNickNameSelector().evaluate()?.querySelector('span span') if (!node) return '' - const nicknameNode = node.querySelector('div span') - if (!nicknameNode) return '' - - return collectNodeText(nicknameNode) + return collectNodeText(node) } export const getTwitterId = () => { - const node = searchNickNameSelector().evaluate()?.parentElement?.parentElement?.firstChild?.nextSibling?.firstChild - ?.firstChild?.lastChild as HTMLDivElement - if (node) { - const twitterIdNode = node.querySelector('div span') - if (twitterIdNode) return twitterIdNode.innerHTML.trim().replace('@', '') - } - const ele = searchAvatarSelector().evaluate()?.closest('a') || searchNFTAvatarSelector().evaluate()?.closest('a') if (ele) { const link = ele.getAttribute('href')