From 0e022a8a7c329a8772e77ac34b6cc593517cb6d6 Mon Sep 17 00:00:00 2001 From: lelenei Date: Tue, 4 Jan 2022 10:44:18 +0800 Subject: [PATCH 1/2] refactor: rss3 api --- .../mask/src/plugins/Avatar/Services/index.ts | 1 - .../mask/src/plugins/Avatar/Services/rss3.ts | 51 ++++++------------- packages/mask/src/plugins/Avatar/constants.ts | 1 - .../plugins/Avatar/hooks/useGetAddresses.ts | 25 --------- 4 files changed, 15 insertions(+), 63 deletions(-) delete mode 100644 packages/mask/src/plugins/Avatar/hooks/useGetAddresses.ts diff --git a/packages/mask/src/plugins/Avatar/Services/index.ts b/packages/mask/src/plugins/Avatar/Services/index.ts index de7511f874c1..f7099f436b50 100644 --- a/packages/mask/src/plugins/Avatar/Services/index.ts +++ b/packages/mask/src/plugins/Avatar/Services/index.ts @@ -33,7 +33,6 @@ export async function getAddress(userId: string) { export { getNFTContractVerifiedFromJSON } from './verified' export { getUserAddresses } from './gun' -export { getRSSNode } from './rss3' export async function getImage(image: string): Promise { const response = await globalThis.fetch(image) diff --git a/packages/mask/src/plugins/Avatar/Services/rss3.ts b/packages/mask/src/plugins/Avatar/Services/rss3.ts index 6f2efb7c36ee..5c23bd5af209 100644 --- a/packages/mask/src/plugins/Avatar/Services/rss3.ts +++ b/packages/mask/src/plugins/Avatar/Services/rss3.ts @@ -1,26 +1,15 @@ import Web3 from 'web3' -import RSS3 from 'rss3-next' import { isSameAddress } from '@masknet/web3-shared-evm' import { personalSign } from '../../../extension/background-script/EthereumService' -import { RSS3_APP } from '../constants' import type { AvatarMetaDB } from '../types' import addSeconds from 'date-fns/addSeconds' +import { RSS3 } from '@masknet/web3-providers' interface NFTRSSNode { signature: string nft: AvatarMetaDB } -export async function createRSS3(address: string) { - return new RSS3({ - endpoint: RSS3_APP, - address, - sign: async (message: string) => { - return personalSign(message, address) - }, - }) -} - const cache = new Map< string, [Promise<{ type: string; nfts: Record | NFTRSSNode } | undefined>, number] @@ -54,33 +43,32 @@ export async function getNFTAvatarFromRSS(userId: string, address: string) { async function _getNFTAvatarFromRSS( address: string, ): Promise<{ type: string; nfts: Record | NFTRSSNode } | undefined> { - const rss = await createRSS3(address) - const file = await rss.files.get(rss.account.address) + const rss = RSS3.createRSS3(address, async (message: string) => { + return personalSign(message, address) + }) - const nfts = Object.getOwnPropertyDescriptor(file, '_nfts') - if (nfts?.value) { + const nfts = await RSS3.getFileData>(rss, address, '_nfts') + if (nfts) { return { type: 'NFTS', - nfts: nfts.value as Record, + nfts, } } else { - const nft = Object.getOwnPropertyDescriptor(file, '_nft') - if (!nft || !nft?.value) return + const nft = await RSS3.getFileData(rss, address, '_nft') + if (!nft) return return { type: 'NFT', - nfts: nft.value as NFTRSSNode, + nfts: nft, } } } export async function saveNFTAvatarToRSS(address: string, nft: AvatarMetaDB, signature: string) { - const rss = await createRSS3(address) - if (!rss) return - - const file = await rss.files.get(rss.account.address) - if (!file) throw new Error('The account was not found.') + const rss = RSS3.createRSS3(address, async (message: string) => { + return personalSign(message, address) + }) - let _nfts = Object.getOwnPropertyDescriptor(file, '_nfts')?.value as Record | undefined + let _nfts = await RSS3.getFileData>(rss, address, '_nfts') if (!_nfts) { _nfts = { [nft.userId]: { signature, nft }, @@ -92,19 +80,10 @@ export async function saveNFTAvatarToRSS(address: string, nft: AvatarMetaDB, sig } } - rss.files.set(Object.assign(file, { _nfts })) - await rss.files.sync() + await RSS3.setFileData(rss, address, '_nfts', _nfts) // clear cache if (cache.has(address)) cache.delete(address) return nft } - -export async function getRSSNode(address: string) { - const rss = await createRSS3(address) - const file = await rss.files.get(rss.account.address) - const nft = Object.getOwnPropertyDescriptor(file, '_nfts') - if (!nft?.value) return - return file -} diff --git a/packages/mask/src/plugins/Avatar/constants.ts b/packages/mask/src/plugins/Avatar/constants.ts index 0df380e10ee7..a367a3274058 100644 --- a/packages/mask/src/plugins/Avatar/constants.ts +++ b/packages/mask/src/plugins/Avatar/constants.ts @@ -1,6 +1,5 @@ import { PluginId } from '@masknet/plugin-infra' -export const RSS3_APP = 'https://hub.pass3.me' export const NFT_AVATAR_JSON_SERVER = 'https://configuration.r2d2.to/com.maskbook.avatar.json' export const NFT_AVATAR_GUN_SERVER = 'com.maskbook.user' diff --git a/packages/mask/src/plugins/Avatar/hooks/useGetAddresses.ts b/packages/mask/src/plugins/Avatar/hooks/useGetAddresses.ts deleted file mode 100644 index ed35b5d93b29..000000000000 --- a/packages/mask/src/plugins/Avatar/hooks/useGetAddresses.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { PluginNFTAvatarRPC } from '../messages' -import { useAsync } from 'react-use' -import type { AsyncState } from 'react-use/lib/useAsyncFn' -import type { RSS3Content } from 'rss3-next/types/rss3' - -export function useGetAddresses(): AsyncState< - { - file: RSS3Content | undefined - address: any - }[] -> { - return useAsync(async () => { - const addresses = await PluginNFTAvatarRPC.getUserAddresses() - const result = await Promise.all( - addresses.map(async (address) => { - return { - file: await PluginNFTAvatarRPC.getRSSNode(address), - address, - } - }), - ) - - return result - }, []) -} From 4bf60825976ea3b92abf708310c6e039a15d1636 Mon Sep 17 00:00:00 2001 From: lelenei Date: Tue, 4 Jan 2022 11:10:46 +0800 Subject: [PATCH 2/2] fix: set avatar --- .../src/social-network-adaptor/twitter.com/utils/selector.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 874d4b16ca67..400dd9abd114 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 @@ -222,7 +222,7 @@ export const searchAvatarSelectorImage = () => export const searchAvatarOpenFileSelector = () => querySelectorAll('[data-testid="fileInput"]').at(1) export const searchProfileSaveSelector = () => querySelector('[data-testid="Profile_Save_Button"]') -export const searchProfessionalButtonSelector = () => querySelector('a[href="/settings/professional_profile"]') +export const searchProfessionalButtonSelector = () => querySelector('[data-testid*="ProfessionalButton"]') export const searchProfileSetAvatarSelector = () => isMobileTwitter