From 297f707b14e8e5f1def15d1eca6888d735f4ff61 Mon Sep 17 00:00:00 2001 From: guanbinrui Date: Sat, 4 Sep 2021 18:56:31 +0800 Subject: [PATCH 1/8] chore: add SurfaceIdentityProviderTwitter --- packages/dashboard/src/web3/context.ts | 1 + .../components/DataSource/useActivatedUI.ts | 9 +++- .../InjectedComponents/SetupGuide.tsx | 2 +- .../maskbook/src/database/Persona/types.ts | 1 + .../src/plugins/Gitcoin/SNSAdaptor/index.tsx | 32 ++++++++++- .../maskbook/src/plugins/Wallet/apis/ens.ts | 39 ++++++++++++++ .../src/plugins/Wallet/services/domain.ts | 22 ++++++++ .../src/plugins/Wallet/services/index.ts | 1 + .../facebook.com/collecting/identity.ts | 4 +- .../facebook.com/ui-provider.ts | 2 +- .../collecting/identity-provider.ts | 4 +- .../minds.com/collecting/identity.ts | 6 +-- .../minds.com/ui-provider.ts | 2 +- .../twitter.com/collecting/identity.ts | 54 +++++++++++++++++-- .../twitter.com/ui-provider.ts | 5 +- .../twitter.com/utils/selector.ts | 4 ++ .../twitter.com/utils/user.ts | 10 +++- packages/maskbook/src/social-network/types.ts | 6 ++- packages/maskbook/src/social-network/ui.ts | 8 ++- packages/maskbook/src/social-network/utils.ts | 5 +- packages/maskbook/src/utils/native-rpc/Web.ts | 2 +- packages/maskbook/src/web3/context.ts | 1 + packages/web3-shared/src/context/type.ts | 3 ++ packages/web3-shared/src/hooks/index.ts | 1 + .../web3-shared/src/hooks/useENSDomains.ts | 10 ++++ packages/web3-shared/src/types/index.ts | 14 +++++ 26 files changed, 222 insertions(+), 26 deletions(-) create mode 100644 packages/maskbook/src/plugins/Wallet/apis/ens.ts create mode 100644 packages/maskbook/src/plugins/Wallet/services/domain.ts create mode 100644 packages/web3-shared/src/hooks/useENSDomains.ts diff --git a/packages/dashboard/src/web3/context.ts b/packages/dashboard/src/web3/context.ts index 3edcea813c35..72e47eca7275 100644 --- a/packages/dashboard/src/web3/context.ts +++ b/packages/dashboard/src/web3/context.ts @@ -70,6 +70,7 @@ export const Web3Context: Web3ProviderType = { ), getAssetsList: PluginServices.Wallet.getAssetsList, getAssetsListNFT: PluginServices.Wallet.getAssetsListNFT, + getDomainsList: PluginServices.Wallet.getDomainsByTwitterId, getERC721TokensPaged, getTransactionList: PluginServices.Wallet.getTransactionList, fetchERC20TokensFromTokenLists: Services.Ethereum.fetchERC20TokensFromTokenLists, diff --git a/packages/maskbook/src/components/DataSource/useActivatedUI.ts b/packages/maskbook/src/components/DataSource/useActivatedUI.ts index d06dadeb237e..0e89101282af 100644 --- a/packages/maskbook/src/components/DataSource/useActivatedUI.ts +++ b/packages/maskbook/src/components/DataSource/useActivatedUI.ts @@ -1,6 +1,6 @@ +import { useMemo } from 'react' import { ValueRef } from '@dimensiondev/holoflows-kit' import { ProfileIdentifier, useValueRef } from '@masknet/shared' -import { useMemo } from 'react' import type { Profile } from '../../database' import { currentSelectedIdentity } from '../../settings/settings' import type { SocialNetworkUI } from '../../social-network' @@ -14,7 +14,12 @@ export function useFriendsList() { const default_ = new ValueRef({ identifier: ProfileIdentifier.unknown }) export function useLastRecognizedIdentity() { return useValueRef( - activatedSocialNetworkUI.collecting.identityProvider?.lastRecognized || default_, + activatedSocialNetworkUI.collecting.identityProvider?.recognized || default_, + ) +} +export function useSurfaceRecognizedIdentity() { + return useValueRef( + activatedSocialNetworkUI.collecting.surfaceIdentityProvider?.recognized || default_, ) } export function useMyIdentities() { diff --git a/packages/maskbook/src/components/InjectedComponents/SetupGuide.tsx b/packages/maskbook/src/components/InjectedComponents/SetupGuide.tsx index 87fcb348d455..871aeb871622 100644 --- a/packages/maskbook/src/components/InjectedComponents/SetupGuide.tsx +++ b/packages/maskbook/src/components/InjectedComponents/SetupGuide.tsx @@ -551,7 +551,7 @@ function SetupGuideUI(props: SetupGuideUIProps) { const [username, setUsername] = useState(getUsername) useEffect( () => - activatedSocialNetworkUI.collecting.identityProvider?.lastRecognized.addListener((val) => { + activatedSocialNetworkUI.collecting.identityProvider?.recognized.addListener((val) => { if (username === '' && !val.identifier.isUnknown) setUsername(val.identifier.userId) }), [username], diff --git a/packages/maskbook/src/database/Persona/types.ts b/packages/maskbook/src/database/Persona/types.ts index aaa81e9980ff..0182ac7048fc 100644 --- a/packages/maskbook/src/database/Persona/types.ts +++ b/packages/maskbook/src/database/Persona/types.ts @@ -6,6 +6,7 @@ type TypedOmit = Omit export interface Profile extends Readonly> { readonly linkedPersona?: Persona readonly avatar?: string + readonly bio?: string } export interface Persona extends TypedOmit { diff --git a/packages/maskbook/src/plugins/Gitcoin/SNSAdaptor/index.tsx b/packages/maskbook/src/plugins/Gitcoin/SNSAdaptor/index.tsx index 54bc1bfa1032..2bbca634eedc 100644 --- a/packages/maskbook/src/plugins/Gitcoin/SNSAdaptor/index.tsx +++ b/packages/maskbook/src/plugins/Gitcoin/SNSAdaptor/index.tsx @@ -1,5 +1,6 @@ import { Suspense, useMemo } from 'react' import type { Plugin } from '@masknet/plugin-infra' +import { useENSDomains } from '@masknet/web3-shared' import { SnackbarContent } from '@material-ui/core' import MaskbookPluginWrapper from '../../MaskbookPluginWrapper' import { extractTextFromTypedMessage } from '../../../protocols/typed-message' @@ -9,6 +10,7 @@ import { base } from '../base' import { PLUGIN_NAME, PLUGIN_META_KEY } from '../constants' import { DonateDialog } from './DonateDialog' import { parseURL } from '../../../utils/utils' +import { useLastRecognizedIdentity, useSurfaceRecognizedIdentity } from '../../../components/DataSource/useActivatedUI' const isGitcoin = (x: string): boolean => /^https:\/\/gitcoin.co\/grants\/\d+/.test(x) @@ -24,7 +26,35 @@ const sns: Plugin.SNSAdaptor.Definition = { }, CompositionDialogMetadataBadgeRender: new Map([[PLUGIN_META_KEY, () => PLUGIN_NAME]]), GlobalInjection() { - return + const lastRecognizedIdentity = useLastRecognizedIdentity() + const surfaceRecognizedIdentity = useSurfaceRecognizedIdentity() + const userId = lastRecognizedIdentity.identifier.userId + const surfaceUserId = surfaceRecognizedIdentity.identifier.userId + const surfaceUserBio = surfaceRecognizedIdentity.bio + + const { value: domains = [] } = useENSDomains('theyisiliu') + return ( + <> + +
+

The last recognized id is {userId}.

+

The surface recognized id is {surfaceUserId}.

+

The surface recognized bio is {surfaceUserBio}.

+
    + {domains.map((x) => ( +
  • {x.ownerAddress}
  • + ))} +
+
+ + ) }, PostInspector() { const link = usePostInfoDetails diff --git a/packages/maskbook/src/plugins/Wallet/apis/ens.ts b/packages/maskbook/src/plugins/Wallet/apis/ens.ts new file mode 100644 index 000000000000..9dd4caefa034 --- /dev/null +++ b/packages/maskbook/src/plugins/Wallet/apis/ens.ts @@ -0,0 +1,39 @@ +import stringify from 'json-stable-stringify' + +async function fetchFromENSTextResolverSubgraph(query: string) { + const subgraphURL = 'https://api.thegraph.com/subgraphs/name/dimensiondev/ens-text-resolver-subgraph' + if (!subgraphURL) return null + const response = await fetch(subgraphURL, { + method: 'POST', + mode: 'cors', + body: stringify({ query }), + }) + const { data } = (await response.json()) as { + data: T + } + return data +} + +export async function fetchDomainsByTwitterId(twitterId: string) { + const data = await fetchFromENSTextResolverSubgraph<{ + twitterHandle?: { + domains: { + id: string + owner: string + }[] + } + }>(` + query twitterHandle { + twitterHandle(id: "${twitterId}") { + id + raw + domains { + id + owner + } + } + } + `) + if (!data?.twitterHandle) return [] + return data.twitterHandle.domains +} diff --git a/packages/maskbook/src/plugins/Wallet/services/domain.ts b/packages/maskbook/src/plugins/Wallet/services/domain.ts new file mode 100644 index 000000000000..529699d7de98 --- /dev/null +++ b/packages/maskbook/src/plugins/Wallet/services/domain.ts @@ -0,0 +1,22 @@ +import { memoizePromise, unreachable } from '@dimensiondev/kit' +import { DomainType, Domain } from '@masknet/web3-shared' +import * as ENS from '../apis/ens' + +const fetchDomainsByTwitterIdCached = memoizePromise(ENS.fetchDomainsByTwitterId, (twitterId) => twitterId) + +export async function getDomainsByTwitterId(twitterId: string, domainType: DomainType): Promise { + switch (domainType) { + case DomainType.ENS: + return (await fetchDomainsByTwitterIdCached(twitterId)).map((x) => ({ + label: '', + ownerAddress: x.owner, + resolvedAddress: x.owner, + })) + case DomainType.UNS: + throw new Error('To be implemennted.') + case DomainType.DNS: + throw new Error('To be implemennted.') + default: + unreachable(domainType) + } +} diff --git a/packages/maskbook/src/plugins/Wallet/services/index.ts b/packages/maskbook/src/plugins/Wallet/services/index.ts index a9a87c546e1c..896048f1afad 100644 --- a/packages/maskbook/src/plugins/Wallet/services/index.ts +++ b/packages/maskbook/src/plugins/Wallet/services/index.ts @@ -11,5 +11,6 @@ export * from './recentTransactions' export * from './rpc' export * from './keystore' export * from './chain' +export * from './domain' export * from './cloud' export { decryptWallet, createEncryptedWalletStore } from '../database/decrypt' diff --git a/packages/maskbook/src/social-network-adaptor/facebook.com/collecting/identity.ts b/packages/maskbook/src/social-network-adaptor/facebook.com/collecting/identity.ts index fa4a3953f8f5..a7c6853e4cde 100644 --- a/packages/maskbook/src/social-network-adaptor/facebook.com/collecting/identity.ts +++ b/packages/maskbook/src/social-network-adaptor/facebook.com/collecting/identity.ts @@ -7,9 +7,9 @@ import { ProfileIdentifier } from '../../../database/type' export const IdentityProviderFacebook: SocialNetworkUI.CollectingCapabilities.IdentityResolveProvider = { hasDeprecatedPlaceholderName: true, - lastRecognized: creator.IdentityResolveProviderLastRecognized(), + recognized: creator.IdentityResolveProviderLastRecognized(), start(signal) { - resolveLastRecognizedIdentityFacebookInner(this.lastRecognized, signal) + resolveLastRecognizedIdentityFacebookInner(this.recognized, signal) }, } diff --git a/packages/maskbook/src/social-network-adaptor/facebook.com/ui-provider.ts b/packages/maskbook/src/social-network-adaptor/facebook.com/ui-provider.ts index c3a426fc9be8..ed322c1a3e6f 100644 --- a/packages/maskbook/src/social-network-adaptor/facebook.com/ui-provider.ts +++ b/packages/maskbook/src/social-network-adaptor/facebook.com/ui-provider.ts @@ -100,7 +100,7 @@ const facebookUI: SocialNetworkUI.Definition = { // ! Change this might be a breaking change ! return new ProfileIdentifier( 'facebook.com', - ProfileIdentifier.getUserName(IdentityProviderFacebook.lastRecognized.value.identifier) || + ProfileIdentifier.getUserName(IdentityProviderFacebook.recognized.value.identifier) || ProfileIdentifier.getUserName(currentSelectedIdentity[facebookBase.networkIdentifier].value) || ProfileIdentifier.getUserName(globalUIState.profiles.value[0].identifier) || unreachable('Cannot figure out password' as never), diff --git a/packages/maskbook/src/social-network-adaptor/instagram.com/collecting/identity-provider.ts b/packages/maskbook/src/social-network-adaptor/instagram.com/collecting/identity-provider.ts index 9b42008206d4..d0fe524134b7 100644 --- a/packages/maskbook/src/social-network-adaptor/instagram.com/collecting/identity-provider.ts +++ b/packages/maskbook/src/social-network-adaptor/instagram.com/collecting/identity-provider.ts @@ -4,7 +4,7 @@ import { instagramBase } from '../base' import { openDB } from 'idb' export const IdentityProviderInstagram: SocialNetworkUI.CollectingCapabilities.IdentityResolveProvider = { async start(signal) { - const ref = this.lastRecognized + const ref = this.recognized update() async function update() { @@ -14,7 +14,7 @@ export const IdentityProviderInstagram: SocialNetworkUI.CollectingCapabilities.I setTimeout(update, 10 * 1000) } }, - lastRecognized: creator.IdentityResolveProviderLastRecognized(), + recognized: creator.IdentityResolveProviderLastRecognized(), } async function query(): Promise { diff --git a/packages/maskbook/src/social-network-adaptor/minds.com/collecting/identity.ts b/packages/maskbook/src/social-network-adaptor/minds.com/collecting/identity.ts index d1d6015c5390..fbb52e34041e 100644 --- a/packages/maskbook/src/social-network-adaptor/minds.com/collecting/identity.ts +++ b/packages/maskbook/src/social-network-adaptor/minds.com/collecting/identity.ts @@ -5,7 +5,7 @@ import { mindsBase } from '../base' import { handleSelector, selfInfoSelectors } from '../utils/selector' async function resolveLastRecognizedIdentityInner( - ref: Next.CollectingCapabilities.IdentityResolveProvider['lastRecognized'], + ref: Next.CollectingCapabilities.IdentityResolveProvider['recognized'], cancel: AbortSignal, ) { await untilDocumentReady() @@ -36,8 +36,8 @@ async function resolveLastRecognizedIdentityInner( export const IdentityProviderMinds: Next.CollectingCapabilities.IdentityResolveProvider = { hasDeprecatedPlaceholderName: false, - lastRecognized: creator.IdentityResolveProviderLastRecognized(), + recognized: creator.IdentityResolveProviderLastRecognized(), start(cancel) { - resolveLastRecognizedIdentityInner(this.lastRecognized, cancel) + resolveLastRecognizedIdentityInner(this.recognized, cancel) }, } diff --git a/packages/maskbook/src/social-network-adaptor/minds.com/ui-provider.ts b/packages/maskbook/src/social-network-adaptor/minds.com/ui-provider.ts index e58e89e7e240..7b808c50c299 100644 --- a/packages/maskbook/src/social-network-adaptor/minds.com/ui-provider.ts +++ b/packages/maskbook/src/social-network-adaptor/minds.com/ui-provider.ts @@ -92,7 +92,7 @@ const mindsUI: SocialNetworkUI.Definition = { // ! Change this might be a breaking change ! return new ProfileIdentifier( 'minds.com', - ProfileIdentifier.getUserName(IdentityProviderMinds.lastRecognized.value.identifier) || + ProfileIdentifier.getUserName(IdentityProviderMinds.recognized.value.identifier) || ProfileIdentifier.getUserName(currentSelectedIdentity[mindsBase.networkIdentifier].value) || ProfileIdentifier.getUserName(globalUIState.profiles.value[0].identifier) || unreachable('Cannot figure out password' as never), diff --git a/packages/maskbook/src/social-network-adaptor/twitter.com/collecting/identity.ts b/packages/maskbook/src/social-network-adaptor/twitter.com/collecting/identity.ts index ce786d2efdab..aea0215ac6f1 100644 --- a/packages/maskbook/src/social-network-adaptor/twitter.com/collecting/identity.ts +++ b/packages/maskbook/src/social-network-adaptor/twitter.com/collecting/identity.ts @@ -1,12 +1,14 @@ -import { selfInfoSelectors } from '../utils/selector' +import { isNil } from 'lodash-es' import { MutationObserverWatcher } from '@dimensiondev/holoflows-kit' +import { selfInfoSelectors, searchProfileTabListSelector } from '../utils/selector' import { ProfileIdentifier } from '../../../database/type' -import { isNil } from 'lodash-es' import { creator, SocialNetworkUI as Next } from '../../../social-network' import { twitterBase } from '../base' +import { getAvatar, getBioDescription, getNickname, getTwitterId } from '../utils/user' +import { delay } from '@masknet/shared-base' function resolveLastRecognizedIdentityInner( - ref: Next.CollectingCapabilities.IdentityResolveProvider['lastRecognized'], + ref: Next.CollectingCapabilities.IdentityResolveProvider['recognized'], cancel: AbortSignal, ) { const selfSelector = selfInfoSelectors().handle @@ -32,10 +34,52 @@ function resolveLastRecognizedIdentityInner( cancel.addEventListener('abort', () => watcher.stopWatch()) } +function resolveSurfaceRecognizedIdentityInner( + ref: Next.CollectingCapabilities.IdentityResolveProvider['recognized'], + cancel: AbortSignal, +) { + const headerPhotoSelector = searchProfileTabListSelector() + const assign = async () => { + await delay(500) + const bio = getBioDescription() + const nickname = getNickname() + const handle = getTwitterId() + const avatar = getAvatar() + ref.value = { + identifier: new ProfileIdentifier(twitterBase.networkIdentifier, handle), + nickname, + avatar, + bio, + } + } + + const watcher = new MutationObserverWatcher(headerPhotoSelector) + .addListener('onAdd', () => assign()) + .addListener('onChange', () => assign()) + .startWatch({ + childList: true, + subtree: true, + }) + + window.addEventListener('locationchange', assign) + cancel.addEventListener('abort', () => { + window.removeEventListener('locationchange', assign) + watcher.stopWatch() + }) +} + export const IdentityProviderTwitter: Next.CollectingCapabilities.IdentityResolveProvider = { hasDeprecatedPlaceholderName: false, - lastRecognized: creator.IdentityResolveProviderLastRecognized(), + recognized: creator.IdentityResolveProviderLastRecognized(), + start(cancel) { + resolveLastRecognizedIdentityInner(this.recognized, cancel) + }, +} + +export const SurfaceIdentityProviderTwitter: Next.CollectingCapabilities.IdentityResolveProvider = { + hasDeprecatedPlaceholderName: false, + recognized: creator.IdentityResolveProviderSurfaceRecognized(), start(cancel) { - resolveLastRecognizedIdentityInner(this.lastRecognized, cancel) + resolveSurfaceRecognizedIdentityInner(this.recognized, cancel) }, } diff --git a/packages/maskbook/src/social-network-adaptor/twitter.com/ui-provider.ts b/packages/maskbook/src/social-network-adaptor/twitter.com/ui-provider.ts index 92d2c4df7204..056c73854631 100644 --- a/packages/maskbook/src/social-network-adaptor/twitter.com/ui-provider.ts +++ b/packages/maskbook/src/social-network-adaptor/twitter.com/ui-provider.ts @@ -8,7 +8,7 @@ import { openComposeBoxTwitter } from './automation/openComposeBox' import { pasteTextToCompositionTwitter } from './automation/pasteTextToComposition' import { gotoNewsFeedPageTwitter } from './automation/gotoNewsFeedPage' import { gotoProfilePageTwitter } from './automation/gotoProfilePage' -import { IdentityProviderTwitter } from './collecting/identity' +import { IdentityProviderTwitter, SurfaceIdentityProviderTwitter } from './collecting/identity' import { PostProviderTwitter } from './collecting/post' import { PaletteModeProviderTwitter, useThemeTwitterVariant } from './customization/custom' import { injectToolboxHintAtTwitter } from './injection/ToolboxHint' @@ -118,6 +118,7 @@ const twitterUI: SocialNetworkUI.Definition = { }, collecting: { identityProvider: IdentityProviderTwitter, + surfaceIdentityProvider: SurfaceIdentityProviderTwitter, postsProvider: PostProviderTwitter, getSearchedKeyword: getSearchedKeywordAtTwitter, }, @@ -168,7 +169,7 @@ const twitterUI: SocialNetworkUI.Definition = { // ! Change this might be a breaking change ! return new ProfileIdentifier( 'twitter.com', - ProfileIdentifier.getUserName(IdentityProviderTwitter.lastRecognized.value.identifier) || + ProfileIdentifier.getUserName(IdentityProviderTwitter.recognized.value.identifier) || ProfileIdentifier.getUserName(currentSelectedIdentity[twitterBase.networkIdentifier].value) || ProfileIdentifier.getUserName(globalUIState.profiles.value[0].identifier) || unreachable('Cannot figure out password' as never), diff --git a/packages/maskbook/src/social-network-adaptor/twitter.com/utils/selector.ts b/packages/maskbook/src/social-network-adaptor/twitter.com/utils/selector.ts index f7b9c8ac855a..2141eea79344 100644 --- a/packages/maskbook/src/social-network-adaptor/twitter.com/utils/selector.ts +++ b/packages/maskbook/src/social-network-adaptor/twitter.com/utils/selector.ts @@ -42,6 +42,10 @@ export const searchNewTweetButtonSelector: () => LiveSelector = () => querySelector('[data-testid="SideNav_NewTweet_Button"]') export const searchNickNameSelector: () => LiveSelector = () => querySelector('[data-testid="UserProfileHeader_Items"]') +export const searchAvatarSelector: () => LiveSelector = () => + querySelector('[data-testid="primaryColumn"] a[role="link"][href$="/photo"] img') +export const searchHeaderPhotoSelector: () => LiveSelector = () => + querySelector('[data-testid="primaryColumn"] a[role="link"][href$=/header_photo] img') export const bioCardSelector = (singleMode = true) => querySelector( [ diff --git a/packages/maskbook/src/social-network-adaptor/twitter.com/utils/user.ts b/packages/maskbook/src/social-network-adaptor/twitter.com/utils/user.ts index afa74e3f37cb..fdd39e4be5a5 100644 --- a/packages/maskbook/src/social-network-adaptor/twitter.com/utils/user.ts +++ b/packages/maskbook/src/social-network-adaptor/twitter.com/utils/user.ts @@ -1,6 +1,6 @@ import { isNull } from 'lodash-es' import type { SocialNetwork } from '../../../social-network' -import { bioDescriptionSelector, searchNickNameSelector } from './selector' +import { bioDescriptionSelector, searchAvatarSelector, searchNickNameSelector } from './selector' /** * @link https://help.twitter.com/en/managing-your-account/twitter-username-rules @@ -40,3 +40,11 @@ export const getBioDescription = () => { const node = bioDescriptionSelector().evaluate() return node?.innerText ?? '' } + +export const getAvatar = () => { + const node = searchAvatarSelector().evaluate() as HTMLImageElement + if (!node) return '' + + const imageURL = node.getAttribute('src') ?? '' + return imageURL.trim() +} diff --git a/packages/maskbook/src/social-network/types.ts b/packages/maskbook/src/social-network/types.ts index deae7cd4aca3..b772cdd26888 100644 --- a/packages/maskbook/src/social-network/types.ts +++ b/packages/maskbook/src/social-network/types.ts @@ -183,13 +183,15 @@ export namespace SocialNetworkUI { export interface Define { /** Resolve the information of who am I on the current network. */ identityProvider?: IdentityResolveProvider + /** Resolve the information of identity on the current page which has been browsing. */ + surfaceIdentityProvider?: IdentityResolveProvider /** Maintain all the posts up-to-date. */ postsProvider?: PostsProvider /** Get searched keyword */ getSearchedKeyword?(): string } export type ProfileUI = { bioContent: string } - export type IdentityResolved = Pick + export type IdentityResolved = Pick /** Resolve the information of who am I on the current network. */ export interface IdentityResolveProvider { @@ -200,7 +202,7 @@ export namespace SocialNetworkUI { /** * The account that user is using (may not in the database) */ - readonly lastRecognized: ValueRef + readonly recognized: ValueRef /** * Start to maintain the posts. * It should add new seen posts and remove gone posts. diff --git a/packages/maskbook/src/social-network/ui.ts b/packages/maskbook/src/social-network/ui.ts index 14d476261270..0bc35a85a396 100644 --- a/packages/maskbook/src/social-network/ui.ts +++ b/packages/maskbook/src/social-network/ui.ts @@ -68,6 +68,7 @@ export async function activateSocialNetworkUIInner(ui_deferred: SocialNetworkUI. ui.customization.paletteMode?.start(signal) startIntermediateSetupGuide() $unknownIdentityResolution() + surfaceIdentityResolution() ui.collecting.postsProvider?.start(signal) startPostListener() @@ -104,7 +105,7 @@ export async function activateSocialNetworkUIInner(ui_deferred: SocialNetworkUI. const provider = ui.collecting.identityProvider provider?.start(signal) if (provider?.hasDeprecatedPlaceholderName) { - provider.lastRecognized.addListener((id) => { + provider.recognized.addListener((id) => { if (signal.aborted) return if (id.identifier.isUnknown) return Services.Identity.resolveIdentity(id.identifier) @@ -112,6 +113,11 @@ export async function activateSocialNetworkUIInner(ui_deferred: SocialNetworkUI. } } + function surfaceIdentityResolution() { + const provider = ui.collecting.surfaceIdentityProvider + provider?.start(signal) + } + function startPostListener() { const posts = ui.collecting.postsProvider?.posts if (!posts) return diff --git a/packages/maskbook/src/social-network/utils.ts b/packages/maskbook/src/social-network/utils.ts index 09343b6ce3b6..66967a48f691 100644 --- a/packages/maskbook/src/social-network/utils.ts +++ b/packages/maskbook/src/social-network/utils.ts @@ -23,7 +23,10 @@ export function managedStateCreator(): SocialNetworkUI.ManagedState { } export const creator = { IdentityResolveProviderLastRecognized: - (): SocialNetworkUI.CollectingCapabilities.IdentityResolveProvider['lastRecognized'] => + (): SocialNetworkUI.CollectingCapabilities.IdentityResolveProvider['recognized'] => + new ValueRef({ identifier: ProfileIdentifier.unknown }), + IdentityResolveProviderSurfaceRecognized: + (): SocialNetworkUI.CollectingCapabilities.IdentityResolveProvider['recognized'] => new ValueRef({ identifier: ProfileIdentifier.unknown }), PostProviderStore: (): SocialNetworkUI.CollectingCapabilities.PostsProvider['posts'] => new ObservableWeakMap(), } diff --git a/packages/maskbook/src/utils/native-rpc/Web.ts b/packages/maskbook/src/utils/native-rpc/Web.ts index 3c95a34f91c8..b33cacb68eab 100644 --- a/packages/maskbook/src/utils/native-rpc/Web.ts +++ b/packages/maskbook/src/utils/native-rpc/Web.ts @@ -214,7 +214,7 @@ export const MaskNetworkAPI: MaskNetworkAPIs = { }, async SNSAdaptor_getCurrentDetectedProfile() { const { activatedSocialNetworkUI } = await import('../../social-network') - return activatedSocialNetworkUI.collecting.identityProvider?.lastRecognized.value.identifier.toText() + return activatedSocialNetworkUI.collecting.identityProvider?.recognized.value.identifier.toText() }, } diff --git a/packages/maskbook/src/web3/context.ts b/packages/maskbook/src/web3/context.ts index e4ec66be00de..663dab3238fc 100644 --- a/packages/maskbook/src/web3/context.ts +++ b/packages/maskbook/src/web3/context.ts @@ -50,6 +50,7 @@ export const Web3Context: Web3ProviderType = { portfolioProvider: createSubscriptionFromSettings(currentPortfolioDataProviderSettings), getAssetsList: WalletRPC.getAssetsList, getAssetsListNFT: WalletRPC.getAssetsListNFT, + getDomainsList: WalletRPC.getDomainsByTwitterId, getERC721TokensPaged, fetchERC20TokensFromTokenLists: Services.Ethereum.fetchERC20TokensFromTokenLists, getTransactionList: WalletRPC.getTransactionList, diff --git a/packages/web3-shared/src/context/type.ts b/packages/web3-shared/src/context/type.ts index f3bfe2641873..4b14ed190a91 100644 --- a/packages/web3-shared/src/context/type.ts +++ b/packages/web3-shared/src/context/type.ts @@ -11,6 +11,8 @@ import type { Asset, CollectibleProvider, Transaction, + Domain, + DomainType, } from '../types' export interface Web3ProviderType { @@ -38,6 +40,7 @@ export interface Web3ProviderType { page?: number, size?: number, ) => Promise<{ assets: ERC721TokenDetailed[]; hasNextPage: boolean }> + getDomainsList: (twitterId: string, domainType: DomainType) => Promise getERC721TokensPaged: (index: number, count: number, query?: string) => Promise getTransactionList: ( address: string, diff --git a/packages/web3-shared/src/hooks/index.ts b/packages/web3-shared/src/hooks/index.ts index 73abbd4774ac..cc7b18f25d14 100644 --- a/packages/web3-shared/src/hooks/index.ts +++ b/packages/web3-shared/src/hooks/index.ts @@ -10,6 +10,7 @@ export * from './useNonce' export * from './useGasPrice' export * from './useEtherPrice' export * from './useENSLabel' +export * from './useENSDomains' export * from './useERC1155TokenAssetDetailed' export * from './useERC165' export * from './useERC20TokenAllowance' diff --git a/packages/web3-shared/src/hooks/useENSDomains.ts b/packages/web3-shared/src/hooks/useENSDomains.ts new file mode 100644 index 000000000000..f3691526d953 --- /dev/null +++ b/packages/web3-shared/src/hooks/useENSDomains.ts @@ -0,0 +1,10 @@ +import { useAsyncRetry } from 'react-use' +import { DomainType, useWeb3Context } from '..' + +export function useENSDomains(twitterId: string) { + const { getDomainsList } = useWeb3Context() + + return useAsyncRetry(async () => { + return getDomainsList(twitterId, DomainType.ENS) + }, [twitterId]) +} diff --git a/packages/web3-shared/src/types/index.ts b/packages/web3-shared/src/types/index.ts index 155e30500c6c..b05e2b272d97 100644 --- a/packages/web3-shared/src/types/index.ts +++ b/packages/web3-shared/src/types/index.ts @@ -501,3 +501,17 @@ export interface Transaction { gasFee: TransactionGasFee | undefined transactionType: string } + +//#region domain +export enum DomainType { + ENS = 'ENS', + UNS = 'UNS', + DNS = 'DNS', +} + +export interface Domain { + label: string + ownerAddress: string + resolvedAddress?: string +} +//#endregion From fe3cdf1adaefea790919d5bd5d19f6a6c25d835a Mon Sep 17 00:00:00 2001 From: guanbinrui Date: Sun, 5 Sep 2021 22:04:46 +0800 Subject: [PATCH 2/8] fix: asset url --- packages/maskbook/src/plugins/Wallet/services/assets.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/maskbook/src/plugins/Wallet/services/assets.ts b/packages/maskbook/src/plugins/Wallet/services/assets.ts index 77b7747932d5..2731255cd8c1 100644 --- a/packages/maskbook/src/plugins/Wallet/services/assets.ts +++ b/packages/maskbook/src/plugins/Wallet/services/assets.ts @@ -62,7 +62,7 @@ export async function getAssetsListNFT( { name: x.name, description: x.description, - image: x.image_url ?? x.image_preview_url ?? '', + image: x.image_url ?? x.image_preview_url ? x.asset_contract.image_url ?? '', }, x.token_id, ), From 3b18dfb2a4d7cf903adf2ae5bbdc7b31201a90dc Mon Sep 17 00:00:00 2001 From: guanbinrui Date: Sun, 5 Sep 2021 22:06:15 +0800 Subject: [PATCH 3/8] fix: filter NFT or semi-NFT tokens --- packages/maskbook/src/plugins/Wallet/services/assets.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/maskbook/src/plugins/Wallet/services/assets.ts b/packages/maskbook/src/plugins/Wallet/services/assets.ts index 2731255cd8c1..85335c45901c 100644 --- a/packages/maskbook/src/plugins/Wallet/services/assets.ts +++ b/packages/maskbook/src/plugins/Wallet/services/assets.ts @@ -47,7 +47,7 @@ export async function getAssetsListNFT( assets: assets .filter( (x) => - x.asset_contract.asset_contract_type === 'non-fungible' || + ['non-fungible', 'semi-fungible'].includes(x.asset_contract.asset_contract_type) || ['ERC721', 'ERC1155'].includes(x.asset_contract.schema_name), ) .map((x) => @@ -62,7 +62,7 @@ export async function getAssetsListNFT( { name: x.name, description: x.description, - image: x.image_url ?? x.image_preview_url ? x.asset_contract.image_url ?? '', + image: x.image_url ?? x.image_preview_url ?? x.asset_contract.image_url ?? '', }, x.token_id, ), From c985cfa94596433dc457fb5d59004316645ddbbc Mon Sep 17 00:00:00 2001 From: guanbinrui Date: Mon, 6 Sep 2021 11:21:33 +0800 Subject: [PATCH 4/8] refactor: remove demo code --- .../src/plugins/Gitcoin/SNSAdaptor/index.tsx | 32 +------------------ 1 file changed, 1 insertion(+), 31 deletions(-) diff --git a/packages/maskbook/src/plugins/Gitcoin/SNSAdaptor/index.tsx b/packages/maskbook/src/plugins/Gitcoin/SNSAdaptor/index.tsx index 2bbca634eedc..54bc1bfa1032 100644 --- a/packages/maskbook/src/plugins/Gitcoin/SNSAdaptor/index.tsx +++ b/packages/maskbook/src/plugins/Gitcoin/SNSAdaptor/index.tsx @@ -1,6 +1,5 @@ import { Suspense, useMemo } from 'react' import type { Plugin } from '@masknet/plugin-infra' -import { useENSDomains } from '@masknet/web3-shared' import { SnackbarContent } from '@material-ui/core' import MaskbookPluginWrapper from '../../MaskbookPluginWrapper' import { extractTextFromTypedMessage } from '../../../protocols/typed-message' @@ -10,7 +9,6 @@ import { base } from '../base' import { PLUGIN_NAME, PLUGIN_META_KEY } from '../constants' import { DonateDialog } from './DonateDialog' import { parseURL } from '../../../utils/utils' -import { useLastRecognizedIdentity, useSurfaceRecognizedIdentity } from '../../../components/DataSource/useActivatedUI' const isGitcoin = (x: string): boolean => /^https:\/\/gitcoin.co\/grants\/\d+/.test(x) @@ -26,35 +24,7 @@ const sns: Plugin.SNSAdaptor.Definition = { }, CompositionDialogMetadataBadgeRender: new Map([[PLUGIN_META_KEY, () => PLUGIN_NAME]]), GlobalInjection() { - const lastRecognizedIdentity = useLastRecognizedIdentity() - const surfaceRecognizedIdentity = useSurfaceRecognizedIdentity() - const userId = lastRecognizedIdentity.identifier.userId - const surfaceUserId = surfaceRecognizedIdentity.identifier.userId - const surfaceUserBio = surfaceRecognizedIdentity.bio - - const { value: domains = [] } = useENSDomains('theyisiliu') - return ( - <> - -
-

The last recognized id is {userId}.

-

The surface recognized id is {surfaceUserId}.

-

The surface recognized bio is {surfaceUserBio}.

-
    - {domains.map((x) => ( -
  • {x.ownerAddress}
  • - ))} -
-
- - ) + return }, PostInspector() { const link = usePostInfoDetails From 3693675f309acbfd225cc5fd5354940a9c3b1110 Mon Sep 17 00:00:00 2001 From: guanbinrui Date: Mon, 6 Sep 2021 11:23:13 +0800 Subject: [PATCH 5/8] refactor: code style & typo --- packages/maskbook/src/plugins/Wallet/apis/ens.ts | 1 - packages/maskbook/src/plugins/Wallet/services/domain.ts | 4 ++-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/packages/maskbook/src/plugins/Wallet/apis/ens.ts b/packages/maskbook/src/plugins/Wallet/apis/ens.ts index 9dd4caefa034..5457e96f02bc 100644 --- a/packages/maskbook/src/plugins/Wallet/apis/ens.ts +++ b/packages/maskbook/src/plugins/Wallet/apis/ens.ts @@ -2,7 +2,6 @@ import stringify from 'json-stable-stringify' async function fetchFromENSTextResolverSubgraph(query: string) { const subgraphURL = 'https://api.thegraph.com/subgraphs/name/dimensiondev/ens-text-resolver-subgraph' - if (!subgraphURL) return null const response = await fetch(subgraphURL, { method: 'POST', mode: 'cors', diff --git a/packages/maskbook/src/plugins/Wallet/services/domain.ts b/packages/maskbook/src/plugins/Wallet/services/domain.ts index 529699d7de98..905f0334d957 100644 --- a/packages/maskbook/src/plugins/Wallet/services/domain.ts +++ b/packages/maskbook/src/plugins/Wallet/services/domain.ts @@ -13,9 +13,9 @@ export async function getDomainsByTwitterId(twitterId: string, domainType: Domai resolvedAddress: x.owner, })) case DomainType.UNS: - throw new Error('To be implemennted.') + throw new Error('To be implemented.') case DomainType.DNS: - throw new Error('To be implemennted.') + throw new Error('To be implemented.') default: unreachable(domainType) } From 2e1dd58bcc9238e9b99902d1f23b6a5363f50d6c Mon Sep 17 00:00:00 2001 From: Jack Works Date: Mon, 6 Sep 2021 13:43:54 +0800 Subject: [PATCH 6/8] refactor: rename api --- .../src/components/DataSource/useActivatedUI.ts | 4 ++-- .../facebook.com/collecting/identity.ts | 2 +- .../facebook.com/collecting/posts.tsx | 2 +- .../instagram.com/collecting/identity-provider.ts | 2 +- .../instagram.com/collecting/posts.ts | 2 +- .../minds.com/collecting/identity.ts | 2 +- .../minds.com/collecting/post.ts | 2 +- .../twitter.com/collecting/identity.ts | 10 +++++----- .../twitter.com/collecting/post.ts | 2 +- .../social-network-adaptor/twitter.com/ui-provider.ts | 4 ++-- packages/maskbook/src/social-network/types.ts | 2 +- packages/maskbook/src/social-network/ui.ts | 7 +------ packages/maskbook/src/social-network/utils.ts | 8 +++----- 13 files changed, 21 insertions(+), 28 deletions(-) diff --git a/packages/maskbook/src/components/DataSource/useActivatedUI.ts b/packages/maskbook/src/components/DataSource/useActivatedUI.ts index 0e89101282af..e3bce67c8066 100644 --- a/packages/maskbook/src/components/DataSource/useActivatedUI.ts +++ b/packages/maskbook/src/components/DataSource/useActivatedUI.ts @@ -17,9 +17,9 @@ export function useLastRecognizedIdentity() { activatedSocialNetworkUI.collecting.identityProvider?.recognized || default_, ) } -export function useSurfaceRecognizedIdentity() { +export function useCurrentVisitingIdentity() { return useValueRef( - activatedSocialNetworkUI.collecting.surfaceIdentityProvider?.recognized || default_, + activatedSocialNetworkUI.collecting.currentVisitingIdentityProvider?.recognized || default_, ) } export function useMyIdentities() { diff --git a/packages/maskbook/src/social-network-adaptor/facebook.com/collecting/identity.ts b/packages/maskbook/src/social-network-adaptor/facebook.com/collecting/identity.ts index a7c6853e4cde..f428d7185aa7 100644 --- a/packages/maskbook/src/social-network-adaptor/facebook.com/collecting/identity.ts +++ b/packages/maskbook/src/social-network-adaptor/facebook.com/collecting/identity.ts @@ -7,7 +7,7 @@ import { ProfileIdentifier } from '../../../database/type' export const IdentityProviderFacebook: SocialNetworkUI.CollectingCapabilities.IdentityResolveProvider = { hasDeprecatedPlaceholderName: true, - recognized: creator.IdentityResolveProviderLastRecognized(), + recognized: creator.EmptyIdentityResolveProviderState(), start(signal) { resolveLastRecognizedIdentityFacebookInner(this.recognized, signal) }, diff --git a/packages/maskbook/src/social-network-adaptor/facebook.com/collecting/posts.tsx b/packages/maskbook/src/social-network-adaptor/facebook.com/collecting/posts.tsx index 75e49d2338da..1ec3e8555870 100644 --- a/packages/maskbook/src/social-network-adaptor/facebook.com/collecting/posts.tsx +++ b/packages/maskbook/src/social-network-adaptor/facebook.com/collecting/posts.tsx @@ -22,7 +22,7 @@ const posts = new LiveSelector().querySelectorAll( ) export const PostProviderFacebook: Next.CollectingCapabilities.PostsProvider = { - posts: creator.PostProviderStore(), + posts: creator.EmptyPostProviderState(), start(signal) { collectPostsFacebookInner(this.posts, signal) }, diff --git a/packages/maskbook/src/social-network-adaptor/instagram.com/collecting/identity-provider.ts b/packages/maskbook/src/social-network-adaptor/instagram.com/collecting/identity-provider.ts index d0fe524134b7..5335411a1c44 100644 --- a/packages/maskbook/src/social-network-adaptor/instagram.com/collecting/identity-provider.ts +++ b/packages/maskbook/src/social-network-adaptor/instagram.com/collecting/identity-provider.ts @@ -14,7 +14,7 @@ export const IdentityProviderInstagram: SocialNetworkUI.CollectingCapabilities.I setTimeout(update, 10 * 1000) } }, - recognized: creator.IdentityResolveProviderLastRecognized(), + recognized: creator.EmptyIdentityResolveProviderState(), } async function query(): Promise { diff --git a/packages/maskbook/src/social-network-adaptor/instagram.com/collecting/posts.ts b/packages/maskbook/src/social-network-adaptor/instagram.com/collecting/posts.ts index 5fb699711609..5f7fdb8221be 100644 --- a/packages/maskbook/src/social-network-adaptor/instagram.com/collecting/posts.ts +++ b/packages/maskbook/src/social-network-adaptor/instagram.com/collecting/posts.ts @@ -13,7 +13,7 @@ const posts = new LiveSelector().querySelectorAll( ) export const PostProviderInstagram: SocialNetworkUI.CollectingCapabilities.PostsProvider = { - posts: creator.PostProviderStore(), + posts: creator.EmptyPostProviderState(), start(signal) { collectPostsInstagramInner(this.posts, signal) }, diff --git a/packages/maskbook/src/social-network-adaptor/minds.com/collecting/identity.ts b/packages/maskbook/src/social-network-adaptor/minds.com/collecting/identity.ts index fbb52e34041e..4cd7247fea4a 100644 --- a/packages/maskbook/src/social-network-adaptor/minds.com/collecting/identity.ts +++ b/packages/maskbook/src/social-network-adaptor/minds.com/collecting/identity.ts @@ -36,7 +36,7 @@ async function resolveLastRecognizedIdentityInner( export const IdentityProviderMinds: Next.CollectingCapabilities.IdentityResolveProvider = { hasDeprecatedPlaceholderName: false, - recognized: creator.IdentityResolveProviderLastRecognized(), + recognized: creator.EmptyIdentityResolveProviderState(), start(cancel) { resolveLastRecognizedIdentityInner(this.recognized, cancel) }, diff --git a/packages/maskbook/src/social-network-adaptor/minds.com/collecting/post.ts b/packages/maskbook/src/social-network-adaptor/minds.com/collecting/post.ts index 1e253c427067..dd2411b8e468 100644 --- a/packages/maskbook/src/social-network-adaptor/minds.com/collecting/post.ts +++ b/packages/maskbook/src/social-network-adaptor/minds.com/collecting/post.ts @@ -18,7 +18,7 @@ import { postParser } from '../utils/fetch' import { postContentSelector } from '../utils/selector' export const PostProviderMinds: Next.CollectingCapabilities.PostsProvider = { - posts: creator.PostProviderStore(), + posts: creator.EmptyPostProviderState(), start(signal) { collectPostsMindsInner(this.posts, signal) }, diff --git a/packages/maskbook/src/social-network-adaptor/twitter.com/collecting/identity.ts b/packages/maskbook/src/social-network-adaptor/twitter.com/collecting/identity.ts index aea0215ac6f1..1d8f88b6a45a 100644 --- a/packages/maskbook/src/social-network-adaptor/twitter.com/collecting/identity.ts +++ b/packages/maskbook/src/social-network-adaptor/twitter.com/collecting/identity.ts @@ -34,7 +34,7 @@ function resolveLastRecognizedIdentityInner( cancel.addEventListener('abort', () => watcher.stopWatch()) } -function resolveSurfaceRecognizedIdentityInner( +function resolveCurrentVisitingIdentityInner( ref: Next.CollectingCapabilities.IdentityResolveProvider['recognized'], cancel: AbortSignal, ) { @@ -70,16 +70,16 @@ function resolveSurfaceRecognizedIdentityInner( export const IdentityProviderTwitter: Next.CollectingCapabilities.IdentityResolveProvider = { hasDeprecatedPlaceholderName: false, - recognized: creator.IdentityResolveProviderLastRecognized(), + recognized: creator.EmptyIdentityResolveProviderState(), start(cancel) { resolveLastRecognizedIdentityInner(this.recognized, cancel) }, } -export const SurfaceIdentityProviderTwitter: Next.CollectingCapabilities.IdentityResolveProvider = { +export const CurrentVisitingIdentityProviderTwitter: Next.CollectingCapabilities.IdentityResolveProvider = { hasDeprecatedPlaceholderName: false, - recognized: creator.IdentityResolveProviderSurfaceRecognized(), + recognized: creator.EmptyIdentityResolveProviderState(), start(cancel) { - resolveSurfaceRecognizedIdentityInner(this.recognized, cancel) + resolveCurrentVisitingIdentityInner(this.recognized, cancel) }, } diff --git a/packages/maskbook/src/social-network-adaptor/twitter.com/collecting/post.ts b/packages/maskbook/src/social-network-adaptor/twitter.com/collecting/post.ts index 691a840ae03c..f4907db7e43a 100644 --- a/packages/maskbook/src/social-network-adaptor/twitter.com/collecting/post.ts +++ b/packages/maskbook/src/social-network-adaptor/twitter.com/collecting/post.ts @@ -115,7 +115,7 @@ function registerPostCollectorInner( } export const PostProviderTwitter: Next.CollectingCapabilities.PostsProvider = { - posts: creator.PostProviderStore(), + posts: creator.EmptyPostProviderState(), start(cancel) { registerPostCollectorInner(this.posts, cancel) }, diff --git a/packages/maskbook/src/social-network-adaptor/twitter.com/ui-provider.ts b/packages/maskbook/src/social-network-adaptor/twitter.com/ui-provider.ts index 056c73854631..afb8263c8336 100644 --- a/packages/maskbook/src/social-network-adaptor/twitter.com/ui-provider.ts +++ b/packages/maskbook/src/social-network-adaptor/twitter.com/ui-provider.ts @@ -8,7 +8,7 @@ import { openComposeBoxTwitter } from './automation/openComposeBox' import { pasteTextToCompositionTwitter } from './automation/pasteTextToComposition' import { gotoNewsFeedPageTwitter } from './automation/gotoNewsFeedPage' import { gotoProfilePageTwitter } from './automation/gotoProfilePage' -import { IdentityProviderTwitter, SurfaceIdentityProviderTwitter } from './collecting/identity' +import { IdentityProviderTwitter, CurrentVisitingIdentityProviderTwitter } from './collecting/identity' import { PostProviderTwitter } from './collecting/post' import { PaletteModeProviderTwitter, useThemeTwitterVariant } from './customization/custom' import { injectToolboxHintAtTwitter } from './injection/ToolboxHint' @@ -118,7 +118,7 @@ const twitterUI: SocialNetworkUI.Definition = { }, collecting: { identityProvider: IdentityProviderTwitter, - surfaceIdentityProvider: SurfaceIdentityProviderTwitter, + currentVisitingIdentityProvider: CurrentVisitingIdentityProviderTwitter, postsProvider: PostProviderTwitter, getSearchedKeyword: getSearchedKeywordAtTwitter, }, diff --git a/packages/maskbook/src/social-network/types.ts b/packages/maskbook/src/social-network/types.ts index b772cdd26888..d2aee5cea1d0 100644 --- a/packages/maskbook/src/social-network/types.ts +++ b/packages/maskbook/src/social-network/types.ts @@ -184,7 +184,7 @@ export namespace SocialNetworkUI { /** Resolve the information of who am I on the current network. */ identityProvider?: IdentityResolveProvider /** Resolve the information of identity on the current page which has been browsing. */ - surfaceIdentityProvider?: IdentityResolveProvider + currentVisitingIdentityProvider?: IdentityResolveProvider /** Maintain all the posts up-to-date. */ postsProvider?: PostsProvider /** Get searched keyword */ diff --git a/packages/maskbook/src/social-network/ui.ts b/packages/maskbook/src/social-network/ui.ts index 0bc35a85a396..6371d673f77a 100644 --- a/packages/maskbook/src/social-network/ui.ts +++ b/packages/maskbook/src/social-network/ui.ts @@ -68,11 +68,11 @@ export async function activateSocialNetworkUIInner(ui_deferred: SocialNetworkUI. ui.customization.paletteMode?.start(signal) startIntermediateSetupGuide() $unknownIdentityResolution() - surfaceIdentityResolution() ui.collecting.postsProvider?.start(signal) startPostListener() + ui.collecting.currentVisitingIdentityProvider?.start(signal) ui.injection.pageInspector?.(signal) if (Flags.toolbox_enabled) ui.injection.toolBoxInNavBar?.(signal) ui.injection.setupPrompt?.(signal) @@ -113,11 +113,6 @@ export async function activateSocialNetworkUIInner(ui_deferred: SocialNetworkUI. } } - function surfaceIdentityResolution() { - const provider = ui.collecting.surfaceIdentityProvider - provider?.start(signal) - } - function startPostListener() { const posts = ui.collecting.postsProvider?.posts if (!posts) return diff --git a/packages/maskbook/src/social-network/utils.ts b/packages/maskbook/src/social-network/utils.ts index 66967a48f691..f04f7935c327 100644 --- a/packages/maskbook/src/social-network/utils.ts +++ b/packages/maskbook/src/social-network/utils.ts @@ -22,11 +22,9 @@ export function managedStateCreator(): SocialNetworkUI.ManagedState { return {} } export const creator = { - IdentityResolveProviderLastRecognized: + EmptyIdentityResolveProviderState: (): SocialNetworkUI.CollectingCapabilities.IdentityResolveProvider['recognized'] => new ValueRef({ identifier: ProfileIdentifier.unknown }), - IdentityResolveProviderSurfaceRecognized: - (): SocialNetworkUI.CollectingCapabilities.IdentityResolveProvider['recognized'] => - new ValueRef({ identifier: ProfileIdentifier.unknown }), - PostProviderStore: (): SocialNetworkUI.CollectingCapabilities.PostsProvider['posts'] => new ObservableWeakMap(), + EmptyPostProviderState: (): SocialNetworkUI.CollectingCapabilities.PostsProvider['posts'] => + new ObservableWeakMap(), } From 342c5038c14ab49c46ceeea0181341c39b338e12 Mon Sep 17 00:00:00 2001 From: guanbinrui Date: Mon, 6 Sep 2021 17:12:52 +0800 Subject: [PATCH 7/8] refactor: better naming --- packages/dashboard/src/web3/context.ts | 2 +- .../maskbook/src/plugins/Wallet/apis/ens.ts | 2 +- .../src/plugins/Wallet/services/domain.ts | 18 +++++++++--------- packages/maskbook/src/web3/context.ts | 2 +- packages/web3-shared/src/context/type.ts | 6 +++--- .../web3-shared/src/hooks/useENSDomains.ts | 8 ++++---- packages/web3-shared/src/types/index.ts | 6 +++--- 7 files changed, 22 insertions(+), 22 deletions(-) diff --git a/packages/dashboard/src/web3/context.ts b/packages/dashboard/src/web3/context.ts index 72e47eca7275..7734886bb3c9 100644 --- a/packages/dashboard/src/web3/context.ts +++ b/packages/dashboard/src/web3/context.ts @@ -70,7 +70,7 @@ export const Web3Context: Web3ProviderType = { ), getAssetsList: PluginServices.Wallet.getAssetsList, getAssetsListNFT: PluginServices.Wallet.getAssetsListNFT, - getDomainsList: PluginServices.Wallet.getDomainsByTwitterId, + getAddressNamesList: PluginServices.Wallet.getAddressNames, getERC721TokensPaged, getTransactionList: PluginServices.Wallet.getTransactionList, fetchERC20TokensFromTokenLists: Services.Ethereum.fetchERC20TokensFromTokenLists, diff --git a/packages/maskbook/src/plugins/Wallet/apis/ens.ts b/packages/maskbook/src/plugins/Wallet/apis/ens.ts index 5457e96f02bc..c16b9d2694b4 100644 --- a/packages/maskbook/src/plugins/Wallet/apis/ens.ts +++ b/packages/maskbook/src/plugins/Wallet/apis/ens.ts @@ -13,7 +13,7 @@ async function fetchFromENSTextResolverSubgraph(query: string) { return data } -export async function fetchDomainsByTwitterId(twitterId: string) { +export async function fetchAddressNamesByTwitterId(twitterId: string) { const data = await fetchFromENSTextResolverSubgraph<{ twitterHandle?: { domains: { diff --git a/packages/maskbook/src/plugins/Wallet/services/domain.ts b/packages/maskbook/src/plugins/Wallet/services/domain.ts index 905f0334d957..5d17f9ba7581 100644 --- a/packages/maskbook/src/plugins/Wallet/services/domain.ts +++ b/packages/maskbook/src/plugins/Wallet/services/domain.ts @@ -1,22 +1,22 @@ import { memoizePromise, unreachable } from '@dimensiondev/kit' -import { DomainType, Domain } from '@masknet/web3-shared' +import { AddressNameType, AddressName } from '@masknet/web3-shared' import * as ENS from '../apis/ens' -const fetchDomainsByTwitterIdCached = memoizePromise(ENS.fetchDomainsByTwitterId, (twitterId) => twitterId) +const fetchAddressNamesByTwitterIdCached = memoizePromise(ENS.fetchAddressNamesByTwitterId, (twitterId) => twitterId) -export async function getDomainsByTwitterId(twitterId: string, domainType: DomainType): Promise { - switch (domainType) { - case DomainType.ENS: - return (await fetchDomainsByTwitterIdCached(twitterId)).map((x) => ({ +export async function getAddressNames(twitterId: string, addressNameType: AddressNameType): Promise { + switch (addressNameType) { + case AddressNameType.ENS: + return (await fetchAddressNamesByTwitterIdCached(twitterId)).map((x) => ({ label: '', ownerAddress: x.owner, resolvedAddress: x.owner, })) - case DomainType.UNS: + case AddressNameType.UNS: throw new Error('To be implemented.') - case DomainType.DNS: + case AddressNameType.DNS: throw new Error('To be implemented.') default: - unreachable(domainType) + unreachable(addressNameType) } } diff --git a/packages/maskbook/src/web3/context.ts b/packages/maskbook/src/web3/context.ts index 663dab3238fc..a82cc7fa8e90 100644 --- a/packages/maskbook/src/web3/context.ts +++ b/packages/maskbook/src/web3/context.ts @@ -50,7 +50,7 @@ export const Web3Context: Web3ProviderType = { portfolioProvider: createSubscriptionFromSettings(currentPortfolioDataProviderSettings), getAssetsList: WalletRPC.getAssetsList, getAssetsListNFT: WalletRPC.getAssetsListNFT, - getDomainsList: WalletRPC.getDomainsByTwitterId, + getAddressNamesList: WalletRPC.getAddressNames, getERC721TokensPaged, fetchERC20TokensFromTokenLists: Services.Ethereum.fetchERC20TokensFromTokenLists, getTransactionList: WalletRPC.getTransactionList, diff --git a/packages/web3-shared/src/context/type.ts b/packages/web3-shared/src/context/type.ts index 4b14ed190a91..230d18ca0217 100644 --- a/packages/web3-shared/src/context/type.ts +++ b/packages/web3-shared/src/context/type.ts @@ -11,8 +11,8 @@ import type { Asset, CollectibleProvider, Transaction, - Domain, - DomainType, + AddressName, + AddressNameType, } from '../types' export interface Web3ProviderType { @@ -40,7 +40,7 @@ export interface Web3ProviderType { page?: number, size?: number, ) => Promise<{ assets: ERC721TokenDetailed[]; hasNextPage: boolean }> - getDomainsList: (twitterId: string, domainType: DomainType) => Promise + getAddressNamesList: (twitterId: string, addressNameType: AddressNameType) => Promise getERC721TokensPaged: (index: number, count: number, query?: string) => Promise getTransactionList: ( address: string, diff --git a/packages/web3-shared/src/hooks/useENSDomains.ts b/packages/web3-shared/src/hooks/useENSDomains.ts index f3691526d953..d8e7bb495c8a 100644 --- a/packages/web3-shared/src/hooks/useENSDomains.ts +++ b/packages/web3-shared/src/hooks/useENSDomains.ts @@ -1,10 +1,10 @@ import { useAsyncRetry } from 'react-use' -import { DomainType, useWeb3Context } from '..' +import { AddressNameType, useWeb3Context } from '..' -export function useENSDomains(twitterId: string) { - const { getDomainsList } = useWeb3Context() +export function useAddressNames(twitterId: string) { + const { getAddressNamesList } = useWeb3Context() return useAsyncRetry(async () => { - return getDomainsList(twitterId, DomainType.ENS) + return getAddressNamesList(twitterId, AddressNameType.ENS) }, [twitterId]) } diff --git a/packages/web3-shared/src/types/index.ts b/packages/web3-shared/src/types/index.ts index b05e2b272d97..0bc88ed0858c 100644 --- a/packages/web3-shared/src/types/index.ts +++ b/packages/web3-shared/src/types/index.ts @@ -502,14 +502,14 @@ export interface Transaction { transactionType: string } -//#region domain -export enum DomainType { +//#region address name +export enum AddressNameType { ENS = 'ENS', UNS = 'UNS', DNS = 'DNS', } -export interface Domain { +export interface AddressName { label: string ownerAddress: string resolvedAddress?: string From b03570428f4158a96c850ac9227a068882cda700 Mon Sep 17 00:00:00 2001 From: guanbinrui Date: Mon, 6 Sep 2021 17:54:16 +0800 Subject: [PATCH 8/8] fix: font weight --- .../twitter.com/injection/EnhancedProfileTab.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/maskbook/src/social-network-adaptor/twitter.com/injection/EnhancedProfileTab.tsx b/packages/maskbook/src/social-network-adaptor/twitter.com/injection/EnhancedProfileTab.tsx index fbdd484bf69a..dc7e217e87be 100644 --- a/packages/maskbook/src/social-network-adaptor/twitter.com/injection/EnhancedProfileTab.tsx +++ b/packages/maskbook/src/social-network-adaptor/twitter.com/injection/EnhancedProfileTab.tsx @@ -49,7 +49,7 @@ const useStyles = makeStyles()((theme, props) => ({ color: props.color, font: props.font, fontSize: props.fontSize, - fontWeight: 700, + fontWeight: 500, '&:hover': { color: props.color, },