From b443e3e5442b52c93bb24ba1a5f86383eafa3f8d Mon Sep 17 00:00:00 2001 From: Lantt Date: Mon, 14 Mar 2022 19:18:09 +0800 Subject: [PATCH 01/39] feat: go plus security plugin setup --- .i18n-codegen.json | 12 +++++++ cspell.json | 1 + packages/mask/.webpack/config.ts | 1 + packages/mask/package.json | 1 + packages/mask/src/plugin-infra/register.js | 1 + packages/plugin-infra/src/types.ts | 1 + packages/plugins/GoPlusSecurity/package.json | 14 ++++++++ .../GoPlusSecurity/src/Dashboard/index.tsx | 9 +++++ .../src/SNSAdaptor/CheckSecurityDialog.tsx | 36 +++++++++++++++++++ .../GoPlusSecurity/src/SNSAdaptor/index.tsx | 13 +++++++ .../GoPlusSecurity/src/Worker/index.ts | 9 +++++ packages/plugins/GoPlusSecurity/src/base.ts | 18 ++++++++++ .../plugins/GoPlusSecurity/src/constants.ts | 6 ++++ packages/plugins/GoPlusSecurity/src/env.d.ts | 1 + packages/plugins/GoPlusSecurity/src/index.ts | 23 ++++++++++++ .../GoPlusSecurity/src/locales/en-US.json | 3 ++ .../GoPlusSecurity/src/locales/index.ts | 6 ++++ .../GoPlusSecurity/src/locales/ja-JP.json | 1 + .../GoPlusSecurity/src/locales/ko-KR.json | 1 + .../GoPlusSecurity/src/locales/languages.ts | 34 ++++++++++++++++++ .../GoPlusSecurity/src/locales/qya-AA.json | 1 + .../GoPlusSecurity/src/locales/zh-CN.json | 1 + .../GoPlusSecurity/src/locales/zh-TW.json | 1 + .../plugins/GoPlusSecurity/src/messages.ts | 13 +++++++ packages/plugins/GoPlusSecurity/tsconfig.json | 10 ++++++ pnpm-lock.yaml | 18 ++++++++++ tsconfig.json | 1 + 27 files changed, 236 insertions(+) create mode 100644 packages/plugins/GoPlusSecurity/package.json create mode 100644 packages/plugins/GoPlusSecurity/src/Dashboard/index.tsx create mode 100644 packages/plugins/GoPlusSecurity/src/SNSAdaptor/CheckSecurityDialog.tsx create mode 100644 packages/plugins/GoPlusSecurity/src/SNSAdaptor/index.tsx create mode 100644 packages/plugins/GoPlusSecurity/src/Worker/index.ts create mode 100644 packages/plugins/GoPlusSecurity/src/base.ts create mode 100644 packages/plugins/GoPlusSecurity/src/constants.ts create mode 100644 packages/plugins/GoPlusSecurity/src/env.d.ts create mode 100644 packages/plugins/GoPlusSecurity/src/index.ts create mode 100644 packages/plugins/GoPlusSecurity/src/locales/en-US.json create mode 100644 packages/plugins/GoPlusSecurity/src/locales/index.ts create mode 100644 packages/plugins/GoPlusSecurity/src/locales/ja-JP.json create mode 100644 packages/plugins/GoPlusSecurity/src/locales/ko-KR.json create mode 100644 packages/plugins/GoPlusSecurity/src/locales/languages.ts create mode 100644 packages/plugins/GoPlusSecurity/src/locales/qya-AA.json create mode 100644 packages/plugins/GoPlusSecurity/src/locales/zh-CN.json create mode 100644 packages/plugins/GoPlusSecurity/src/locales/zh-TW.json create mode 100644 packages/plugins/GoPlusSecurity/src/messages.ts create mode 100644 packages/plugins/GoPlusSecurity/tsconfig.json diff --git a/.i18n-codegen.json b/.i18n-codegen.json index 0e88dbae02d2..64473f7480eb 100644 --- a/.i18n-codegen.json +++ b/.i18n-codegen.json @@ -181,6 +181,18 @@ "trans": "Translate", "sourceMap": "inline" } + }, + { + "input": "./packages/plugins/GoPlusSecurity/src/locales/en-US.json", + "output": "./packages/plugins/GoPlusSecurity/src/locales/i18n_generated", + "parser": "i18next", + "generator": { + "type": "i18next/react-hooks", + "hooks": "useI18N", + "namespace": "__template__", + "trans": "Translate", + "sourceMap": "inline" + } } ] } diff --git a/cspell.json b/cspell.json index a95e6fc19fa4..19f626715652 100644 --- a/cspell.json +++ b/cspell.json @@ -309,6 +309,7 @@ "gamification", "getdodoroute", "getx", + "gopluslabs", "gorli", "gusd", "gwapj", diff --git a/packages/mask/.webpack/config.ts b/packages/mask/.webpack/config.ts index e5a143627592..8fe5fbdd2ac9 100644 --- a/packages/mask/.webpack/config.ts +++ b/packages/mask/.webpack/config.ts @@ -88,6 +88,7 @@ export function createConfiguration(rawFlags: BuildFlags): Configuration { '@masknet/plugin-wallet': join(__dirname, '../../plugins/Wallet/src/'), '@masknet/plugin-file-service': join(__dirname, '../../plugins/FileService/src/'), '@masknet/plugin-cyberconnect': join(__dirname, '../../plugins/CyberConnect/src/'), + '@masknet/plugin-go-plus-security': join(__dirname, '../../plugins/GoPlusSecurity/src/'), '@masknet/external-plugin-previewer': join(__dirname, '../../external-plugin-previewer/src/'), '@masknet/public-api': join(__dirname, '../../public-api/src/'), '@masknet/sdk': join(__dirname, '../../mask-sdk/server/'), diff --git a/packages/mask/package.json b/packages/mask/package.json index 46985cd97798..a209f3631107 100644 --- a/packages/mask/package.json +++ b/packages/mask/package.json @@ -29,6 +29,7 @@ "@masknet/plugin-rss3": "workspace:*", "@masknet/plugin-solana": "workspace:*", "@masknet/plugin-wallet": "workspace:*", + "@masknet/plugin-go-plus-security": "workspace:*", "@masknet/public-api": "workspace:*", "@masknet/sdk": "workspace:*", "@masknet/shared": "workspace:*", diff --git a/packages/mask/src/plugin-infra/register.js b/packages/mask/src/plugin-infra/register.js index 46f4973e183a..5cbbf531805e 100644 --- a/packages/mask/src/plugin-infra/register.js +++ b/packages/mask/src/plugin-infra/register.js @@ -10,6 +10,7 @@ import '@masknet/plugin-rss3' import '@masknet/plugin-dao' import '@masknet/plugin-solana' import '@masknet/plugin-cyberconnect' +import '@masknet/plugin-go-plus-security' import '../plugins/Wallet' import '../plugins/EVM' import '../plugins/RedPacket' diff --git a/packages/plugin-infra/src/types.ts b/packages/plugin-infra/src/types.ts index 9b2209b1bf7d..e0bc35cd42ec 100644 --- a/packages/plugin-infra/src/types.ts +++ b/packages/plugin-infra/src/types.ts @@ -688,6 +688,7 @@ export enum PluginId { UnlockProtocol = 'com.maskbook.unlockprotocol', FileService = 'com.maskbook.fileservice', CyberConnect = 'me.cyberconnect.app', + GoPlusSecurity = 'io.gopluslabs.security', // @masknet/scripts: insert-here } diff --git a/packages/plugins/GoPlusSecurity/package.json b/packages/plugins/GoPlusSecurity/package.json new file mode 100644 index 000000000000..b0871a2f04d7 --- /dev/null +++ b/packages/plugins/GoPlusSecurity/package.json @@ -0,0 +1,14 @@ +{ + "name": "@masknet/plugin-go-plus-security", + "private": true, + "main": "./dist/index.js", + "types": "./dist/index.d.ts", + "dependencies": { + "@masknet/icons": "workspace:*", + "@masknet/plugin-infra": "workspace:*", + "@masknet/shared": "workspace:*", + "@masknet/shared-base": "workspace:*", + "@masknet/theme": "workspace:*", + "react-use": "^17.3.2" + } +} diff --git a/packages/plugins/GoPlusSecurity/src/Dashboard/index.tsx b/packages/plugins/GoPlusSecurity/src/Dashboard/index.tsx new file mode 100644 index 000000000000..c11379ee47db --- /dev/null +++ b/packages/plugins/GoPlusSecurity/src/Dashboard/index.tsx @@ -0,0 +1,9 @@ +import type { Plugin } from '@masknet/plugin-infra' +import { base } from '../base' + +const dashboard: Plugin.Dashboard.Definition = { + ...base, + init(signal) {}, +} + +export default dashboard diff --git a/packages/plugins/GoPlusSecurity/src/SNSAdaptor/CheckSecurityDialog.tsx b/packages/plugins/GoPlusSecurity/src/SNSAdaptor/CheckSecurityDialog.tsx new file mode 100644 index 000000000000..5938a7e4d09a --- /dev/null +++ b/packages/plugins/GoPlusSecurity/src/SNSAdaptor/CheckSecurityDialog.tsx @@ -0,0 +1,36 @@ +import { useRemoteControlledDialog } from '@masknet/shared' +import { DialogContent } from '@mui/material' +import { makeStyles, MaskDialog, useStylesExtends } from '@masknet/theme' +import { PluginGoPlusSecurityMessages } from '../messages' +import { useI18N } from '../locales' + +const useStyles = makeStyles()((theme) => ({ + root: { + width: '600px', + }, + content: { + width: '552px', + }, +})) + +export interface BuyTokenDialogProps extends withClasses {} + +export function CheckSecurityDialog(props: BuyTokenDialogProps) { + const t = useI18N() + const classes = useStylesExtends(useStyles(), props) + + // #region remote controlled buy token dialog + const { open, closeDialog } = useRemoteControlledDialog( + PluginGoPlusSecurityMessages.checkSecurityDialogEvent, + (ev) => { + if (!ev.open) return + }, + ) + // #endregion + + return ( + + Plugin + + ) +} diff --git a/packages/plugins/GoPlusSecurity/src/SNSAdaptor/index.tsx b/packages/plugins/GoPlusSecurity/src/SNSAdaptor/index.tsx new file mode 100644 index 000000000000..7d6d216eecfb --- /dev/null +++ b/packages/plugins/GoPlusSecurity/src/SNSAdaptor/index.tsx @@ -0,0 +1,13 @@ +import type { Plugin } from '@masknet/plugin-infra' +import { base } from '../base' +import { CheckSecurityDialog } from './CheckSecurityDialog' + +const sns: Plugin.SNSAdaptor.Definition = { + ...base, + init(signal) {}, + GlobalInjection() { + return + }, +} + +export default sns diff --git a/packages/plugins/GoPlusSecurity/src/Worker/index.ts b/packages/plugins/GoPlusSecurity/src/Worker/index.ts new file mode 100644 index 000000000000..6c436f1cb4fb --- /dev/null +++ b/packages/plugins/GoPlusSecurity/src/Worker/index.ts @@ -0,0 +1,9 @@ +import type { Plugin } from '@masknet/plugin-infra' +import { base } from '../base' + +const worker: Plugin.Worker.Definition = { + ...base, + init(signal, context) {}, +} + +export default worker diff --git a/packages/plugins/GoPlusSecurity/src/base.ts b/packages/plugins/GoPlusSecurity/src/base.ts new file mode 100644 index 000000000000..1229267e92c9 --- /dev/null +++ b/packages/plugins/GoPlusSecurity/src/base.ts @@ -0,0 +1,18 @@ +import type { Plugin } from '@masknet/plugin-infra' +import { PLUGIN_DESCRIPTION, PLUGIN_ID, PLUGIN_NAME } from './constants' +import { languages } from './locales/languages' + +export const base: Plugin.Shared.Definition = { + ID: PLUGIN_ID, + icon: '', + name: { fallback: PLUGIN_NAME }, + description: { fallback: PLUGIN_DESCRIPTION }, + publisher: { name: { fallback: 'Mask Network' }, link: 'https://mask.io/' }, + enableRequirement: { + architecture: { app: false, web: true }, + networks: { type: 'opt-out', networks: {} }, + target: 'insider', + }, + experimentalMark: true, + i18n: languages, +} diff --git a/packages/plugins/GoPlusSecurity/src/constants.ts b/packages/plugins/GoPlusSecurity/src/constants.ts new file mode 100644 index 000000000000..e21d938564c7 --- /dev/null +++ b/packages/plugins/GoPlusSecurity/src/constants.ts @@ -0,0 +1,6 @@ +import { PluginId } from '@masknet/plugin-infra' + +export const PLUGIN_ID = PluginId.GoPlusSecurity +export const PLUGIN_META_KEY = `${PluginId.GoPlusSecurity}:1` +export const PLUGIN_DESCRIPTION = 'Go+ Security Engine' +export const PLUGIN_NAME = 'GoPlusSecurity' diff --git a/packages/plugins/GoPlusSecurity/src/env.d.ts b/packages/plugins/GoPlusSecurity/src/env.d.ts new file mode 100644 index 000000000000..868322d5ff30 --- /dev/null +++ b/packages/plugins/GoPlusSecurity/src/env.d.ts @@ -0,0 +1 @@ +/// diff --git a/packages/plugins/GoPlusSecurity/src/index.ts b/packages/plugins/GoPlusSecurity/src/index.ts new file mode 100644 index 000000000000..ec9b1a34e7af --- /dev/null +++ b/packages/plugins/GoPlusSecurity/src/index.ts @@ -0,0 +1,23 @@ +import { registerPlugin } from '@masknet/plugin-infra' +import { base } from './base' + +export * from './constants' + +registerPlugin({ + ...base, + SNSAdaptor: { + load: () => import('./SNSAdaptor'), + hotModuleReload: (hot) => + import.meta.webpackHot && import.meta.webpackHot.accept('./SNSAdaptor', () => hot(import('./SNSAdaptor'))), + }, + Dashboard: { + load: () => import('./Dashboard'), + hotModuleReload: (hot) => + import.meta.webpackHot && import.meta.webpackHot.accept('./Dashboard', () => hot(import('./Dashboard'))), + }, + Worker: { + load: () => import('./Worker'), + hotModuleReload: (hot) => + import.meta.webpackHot && import.meta.webpackHot.accept('./Worker', () => hot(import('./Worker'))), + }, +}) diff --git a/packages/plugins/GoPlusSecurity/src/locales/en-US.json b/packages/plugins/GoPlusSecurity/src/locales/en-US.json new file mode 100644 index 000000000000..b73126bbafe0 --- /dev/null +++ b/packages/plugins/GoPlusSecurity/src/locales/en-US.json @@ -0,0 +1,3 @@ +{ + "dialog_title": "Check Security" +} diff --git a/packages/plugins/GoPlusSecurity/src/locales/index.ts b/packages/plugins/GoPlusSecurity/src/locales/index.ts new file mode 100644 index 000000000000..d6ead60252e4 --- /dev/null +++ b/packages/plugins/GoPlusSecurity/src/locales/index.ts @@ -0,0 +1,6 @@ +// This file is auto generated. DO NOT EDIT +// Run `npx gulp sync-languages` to regenerate. +// Default fallback language in a family of languages are chosen by the alphabet order +// To overwrite this, please overwrite packages/scripts/src/locale-kit-next/index.ts + +export * from './i18n_generated' diff --git a/packages/plugins/GoPlusSecurity/src/locales/ja-JP.json b/packages/plugins/GoPlusSecurity/src/locales/ja-JP.json new file mode 100644 index 000000000000..0967ef424bce --- /dev/null +++ b/packages/plugins/GoPlusSecurity/src/locales/ja-JP.json @@ -0,0 +1 @@ +{} diff --git a/packages/plugins/GoPlusSecurity/src/locales/ko-KR.json b/packages/plugins/GoPlusSecurity/src/locales/ko-KR.json new file mode 100644 index 000000000000..0967ef424bce --- /dev/null +++ b/packages/plugins/GoPlusSecurity/src/locales/ko-KR.json @@ -0,0 +1 @@ +{} diff --git a/packages/plugins/GoPlusSecurity/src/locales/languages.ts b/packages/plugins/GoPlusSecurity/src/locales/languages.ts new file mode 100644 index 000000000000..8d0cd55c479a --- /dev/null +++ b/packages/plugins/GoPlusSecurity/src/locales/languages.ts @@ -0,0 +1,34 @@ +// This file is auto generated. DO NOT EDIT +// Run `npx gulp sync-languages` to regenerate. +// Default fallback language in a family of languages are chosen by the alphabet order +// To overwrite this, please overwrite packages/scripts/src/locale-kit-next/index.ts +import en_US from './en-US.json' +import ja_JP from './ja-JP.json' +import ko_KR from './ko-KR.json' +import qya_AA from './qya-AA.json' +import zh_CN from './zh-CN.json' +import zh_TW from './zh-TW.json' +export const languages = { + en: en_US, + ja: ja_JP, + ko: ko_KR, + qy: qya_AA, + 'zh-CN': zh_CN, + zh: zh_TW, +} +// @ts-ignore +if (import.meta.webpackHot) { + // @ts-ignore + import.meta.webpackHot.accept( + ['./en-US.json', './ja-JP.json', './ko-KR.json', './qya-AA.json', './zh-CN.json', './zh-TW.json'], + () => + globalThis.dispatchEvent?.( + new CustomEvent('MASK_I18N_HMR', { + detail: [ + 'io.mask.debugger', + { en: en_US, ja: ja_JP, ko: ko_KR, qy: qya_AA, 'zh-CN': zh_CN, zh: zh_TW }, + ], + }), + ), + ) +} diff --git a/packages/plugins/GoPlusSecurity/src/locales/qya-AA.json b/packages/plugins/GoPlusSecurity/src/locales/qya-AA.json new file mode 100644 index 000000000000..0967ef424bce --- /dev/null +++ b/packages/plugins/GoPlusSecurity/src/locales/qya-AA.json @@ -0,0 +1 @@ +{} diff --git a/packages/plugins/GoPlusSecurity/src/locales/zh-CN.json b/packages/plugins/GoPlusSecurity/src/locales/zh-CN.json new file mode 100644 index 000000000000..0967ef424bce --- /dev/null +++ b/packages/plugins/GoPlusSecurity/src/locales/zh-CN.json @@ -0,0 +1 @@ +{} diff --git a/packages/plugins/GoPlusSecurity/src/locales/zh-TW.json b/packages/plugins/GoPlusSecurity/src/locales/zh-TW.json new file mode 100644 index 000000000000..0967ef424bce --- /dev/null +++ b/packages/plugins/GoPlusSecurity/src/locales/zh-TW.json @@ -0,0 +1 @@ +{} diff --git a/packages/plugins/GoPlusSecurity/src/messages.ts b/packages/plugins/GoPlusSecurity/src/messages.ts new file mode 100644 index 000000000000..0c4bc0b6e72a --- /dev/null +++ b/packages/plugins/GoPlusSecurity/src/messages.ts @@ -0,0 +1,13 @@ +import { createPluginMessage, PluginMessageEmitter } from '@masknet/plugin-infra' +import { PLUGIN_ID } from './constants' + +type CheckSecurityDialogEvent = { open: boolean } + +interface PluginGoPlusSecurityMessage { + checkSecurityDialogEvent: CheckSecurityDialogEvent + rpc: unknown +} + +if (import.meta.webpackHot) import.meta.webpackHot.accept() +export const PluginGoPlusSecurityMessages: PluginMessageEmitter = + createPluginMessage(PLUGIN_ID) diff --git a/packages/plugins/GoPlusSecurity/tsconfig.json b/packages/plugins/GoPlusSecurity/tsconfig.json new file mode 100644 index 000000000000..304e3db49e75 --- /dev/null +++ b/packages/plugins/GoPlusSecurity/tsconfig.json @@ -0,0 +1,10 @@ +{ + "extends": "../tsconfig.json", + "compilerOptions": { + "rootDir": "src", + "outDir": "dist", + "tsBuildInfoFile": "dist/.tsbuildinfo" + }, + "include": ["src", "src/**/*.json"], + "references": [{ "path": "../../plugin-infra" }] +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c344b0f33007..a309640d5dc8 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -313,6 +313,7 @@ importers: '@masknet/plugin-example': workspace:* '@masknet/plugin-file-service': workspace:* '@masknet/plugin-flow': workspace:* + '@masknet/plugin-go-plus-security': workspace:* '@masknet/plugin-infra': workspace:* '@masknet/plugin-rss3': workspace:* '@masknet/plugin-solana': workspace:* @@ -451,6 +452,7 @@ importers: '@masknet/plugin-example': link:../plugins/example '@masknet/plugin-file-service': link:../plugins/FileService '@masknet/plugin-flow': link:../plugins/Flow + '@masknet/plugin-go-plus-security': link:../plugins/GoPlusSecurity '@masknet/plugin-infra': link:../plugin-infra '@masknet/plugin-rss3': link:../plugins/RSS3 '@masknet/plugin-solana': link:../plugins/Solana @@ -754,6 +756,22 @@ importers: bignumber.js: 9.0.2 react-use: 17.3.2_react-dom@18.0.0+react@18.0.0 + packages/plugins/GoPlusSecurity: + specifiers: + '@masknet/icons': workspace:* + '@masknet/plugin-infra': workspace:* + '@masknet/shared': workspace:* + '@masknet/shared-base': workspace:* + '@masknet/theme': workspace:* + react-use: ^17.3.2 + dependencies: + '@masknet/icons': link:../../icons + '@masknet/plugin-infra': link:../../plugin-infra + '@masknet/shared': link:../../shared + '@masknet/shared-base': link:../../shared-base + '@masknet/theme': link:../../theme + react-use: 17.3.2_bc22c48adf1a4e34a005159413cd72b5 + packages/plugins/RSS3: specifiers: '@masknet/icons': workspace:* diff --git a/tsconfig.json b/tsconfig.json index 9d256fb75970..79afc1ef69a4 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -99,6 +99,7 @@ "@masknet/plugin-solana": ["./packages/plugins/Solana/src"], "@masknet/plugin-template": ["./packages/plugins/template/src"], "@masknet/plugin-cyberconnect": ["./packages/plugins/CyberConnect/src"], + "@masknet/plugin-go-plus-security": ["./packages/plugins/GoPlusSecurity/src"], // @masknet/scripts: insert-here 3 "@masknet/plugin-wallet": ["./packages/plugins/Wallet/src"] }, From e750608063a55eb7b5c6a213017ddb7d1e4f44e9 Mon Sep 17 00:00:00 2001 From: Lantt Date: Mon, 14 Mar 2022 19:35:41 +0800 Subject: [PATCH 02/39] feat: add get supported chain for go plus lab --- packages/web3-providers/src/gopluslabs/index.ts | 11 +++++++++++ packages/web3-providers/src/index.ts | 3 +++ packages/web3-providers/src/types.ts | 6 ++++++ 3 files changed, 20 insertions(+) diff --git a/packages/web3-providers/src/gopluslabs/index.ts b/packages/web3-providers/src/gopluslabs/index.ts index a8f1c605b9d4..b8d74d43a410 100644 --- a/packages/web3-providers/src/gopluslabs/index.ts +++ b/packages/web3-providers/src/gopluslabs/index.ts @@ -20,4 +20,15 @@ export class GoPlusLabsAPI implements SecurityAPI.Provider { if (response.code !== 1) return return response.result } + + async getSupportedChain(): Promise { + const { code, result } = await fetchJSON<{ + code: 0 | 1 + message: 'OK' | string + result: SecurityAPI.SupportedChain[] + }>(urlcat(GO_PLUS_LABS_ROOT_URL, 'api/v1/supported_chains')) + + if (code !== 1) return [] + return result + } } diff --git a/packages/web3-providers/src/index.ts b/packages/web3-providers/src/index.ts index d3989c5950fc..c4c82395773f 100644 --- a/packages/web3-providers/src/index.ts +++ b/packages/web3-providers/src/index.ts @@ -10,6 +10,7 @@ import { TwitterAPI } from './twitter' import { TokenListAPI } from './token-list' import { TokenPriceAPI } from './token-price' import { InstagramAPI } from './instagram' +import { GoPlusLabsAPI } from './gopluslabs' export * from './types' export * from './hooks' @@ -26,6 +27,8 @@ export const RSS3 = new RSS3API() export const KeyValue = new KeyValueAPI() export const Twitter = new TwitterAPI() export const Instagram = new InstagramAPI() +export const GoPlusLabs = new GoPlusLabsAPI() + export const TokenList = new TokenListAPI() export const TokenPrice = new TokenPriceAPI() diff --git a/packages/web3-providers/src/types.ts b/packages/web3-providers/src/types.ts index 5e4a0def0320..419d9475f83e 100644 --- a/packages/web3-providers/src/types.ts +++ b/packages/web3-providers/src/types.ts @@ -340,11 +340,17 @@ export namespace SecurityAPI { is_airdrop_scam?: 0 | 1 } + export interface SupportedChain { + id: ChainId + name: string + } + export interface Provider { getTokenSecurity( chainId: number, listOfAddress: string[], ): Promise | void> + getSupportedChain(): Promise } } From 98b483367786a4da812f14994d1f9c1d71d71736 Mon Sep 17 00:00:00 2001 From: Lantt Date: Thu, 17 Mar 2022 15:07:00 +0800 Subject: [PATCH 03/39] feat: plugin frame step 1 --- .i18n-codegen.json | 2 +- packages/plugins/GoPlusSecurity/package.json | 2 + .../src/SNSAdaptor/CheckSecurityDialog.tsx | 30 ++++- .../src/SNSAdaptor/components/Conmmon.tsx | 12 ++ .../components/DefaultPlaceholder.tsx | 17 +++ .../src/SNSAdaptor/components/Footer.tsx | 15 +++ .../src/SNSAdaptor/components/NotFound.tsx | 17 +++ .../src/SNSAdaptor/components/SearchBox.tsx | 77 +++++++++++++ .../src/SNSAdaptor/components/Searching.tsx | 3 + .../src/SNSAdaptor/components/TokenCard.tsx | 109 ++++++++++++++++++ .../src/SNSAdaptor/icons/Logo.tsx | 30 +++++ .../src/SNSAdaptor/icons/SecurityIcon.tsx | 54 +++++++++ .../GoPlusSecurity/src/locales/en-US.json | 18 ++- packages/plugins/GoPlusSecurity/tsconfig.json | 2 +- packages/web3-providers/src/types.ts | 1 + 15 files changed, 384 insertions(+), 5 deletions(-) create mode 100644 packages/plugins/GoPlusSecurity/src/SNSAdaptor/components/Conmmon.tsx create mode 100644 packages/plugins/GoPlusSecurity/src/SNSAdaptor/components/DefaultPlaceholder.tsx create mode 100644 packages/plugins/GoPlusSecurity/src/SNSAdaptor/components/Footer.tsx create mode 100644 packages/plugins/GoPlusSecurity/src/SNSAdaptor/components/NotFound.tsx create mode 100644 packages/plugins/GoPlusSecurity/src/SNSAdaptor/components/SearchBox.tsx create mode 100644 packages/plugins/GoPlusSecurity/src/SNSAdaptor/components/Searching.tsx create mode 100644 packages/plugins/GoPlusSecurity/src/SNSAdaptor/components/TokenCard.tsx create mode 100644 packages/plugins/GoPlusSecurity/src/SNSAdaptor/icons/Logo.tsx create mode 100644 packages/plugins/GoPlusSecurity/src/SNSAdaptor/icons/SecurityIcon.tsx diff --git a/.i18n-codegen.json b/.i18n-codegen.json index 64473f7480eb..cb999243cc8d 100644 --- a/.i18n-codegen.json +++ b/.i18n-codegen.json @@ -189,7 +189,7 @@ "generator": { "type": "i18next/react-hooks", "hooks": "useI18N", - "namespace": "__template__", + "namespace": "io.gopluslabs.security", "trans": "Translate", "sourceMap": "inline" } diff --git a/packages/plugins/GoPlusSecurity/package.json b/packages/plugins/GoPlusSecurity/package.json index b0871a2f04d7..2ebb5ecb372f 100644 --- a/packages/plugins/GoPlusSecurity/package.json +++ b/packages/plugins/GoPlusSecurity/package.json @@ -4,11 +4,13 @@ "main": "./dist/index.js", "types": "./dist/index.d.ts", "dependencies": { + "react-feather": "^2.0.9", "@masknet/icons": "workspace:*", "@masknet/plugin-infra": "workspace:*", "@masknet/shared": "workspace:*", "@masknet/shared-base": "workspace:*", "@masknet/theme": "workspace:*", + "@masknet/web3-providers": "workspace:*", "react-use": "^17.3.2" } } diff --git a/packages/plugins/GoPlusSecurity/src/SNSAdaptor/CheckSecurityDialog.tsx b/packages/plugins/GoPlusSecurity/src/SNSAdaptor/CheckSecurityDialog.tsx index 5938a7e4d09a..8c1651471c00 100644 --- a/packages/plugins/GoPlusSecurity/src/SNSAdaptor/CheckSecurityDialog.tsx +++ b/packages/plugins/GoPlusSecurity/src/SNSAdaptor/CheckSecurityDialog.tsx @@ -1,8 +1,17 @@ import { useRemoteControlledDialog } from '@masknet/shared' -import { DialogContent } from '@mui/material' +import { DialogContent, Stack } from '@mui/material' import { makeStyles, MaskDialog, useStylesExtends } from '@masknet/theme' import { PluginGoPlusSecurityMessages } from '../messages' import { useI18N } from '../locales' +import { SearchBox } from './components/SearchBox' +import { useAsyncFn } from 'react-use' +import { GoPlusLabs } from '@masknet/web3-providers' +import { Searching } from './components/Searching' +import { TokenCard } from './components/TokenCard' +import { Footer } from './components/Footer' +import type { TokenSecurity } from './components/Conmmon' +import { DefaultPlaceholder } from './components/DefaultPlaceholder' +import { NotFound } from './components/NotFound' const useStyles = makeStyles()((theme) => ({ root: { @@ -28,9 +37,26 @@ export function CheckSecurityDialog(props: BuyTokenDialogProps) { ) // #endregion + const [{ value, loading: searching, error }, onSearch] = useAsyncFn(async (chainId: number, content: string) => { + const values = await GoPlusLabs.getTokenSecurity(chainId, [content]) + if (!Object.keys(values ?? {}).length) throw new Error() + return Object.entries(values ?? {}).map((x) => ({ ...x[1], contract: x[0] }))[0] as TokenSecurity | undefined + }, []) + return ( - Plugin + + + + + {searching && } + {error && } + {!error && !searching && value && } + {!error && !searching && !value && } + +