diff --git a/packages/plugins/EVM/src/state/Connection/interceptors/MaskWallet.ts b/packages/plugins/EVM/src/state/Connection/interceptors/MaskWallet.ts index a02f43c56d75..a89665c4d2cd 100644 --- a/packages/plugins/EVM/src/state/Connection/interceptors/MaskWallet.ts +++ b/packages/plugins/EVM/src/state/Connection/interceptors/MaskWallet.ts @@ -1,13 +1,11 @@ import { toHex } from 'web3-utils' import { EthereumMethodType } from '@masknet/web3-shared-evm' import type { Context, Middleware } from '../types' -import { SharedContextSettings, Web3StateSettings } from '../../../settings' +import { SharedContextSettings } from '../../../settings' export class MaskWallet implements Middleware { async fn(context: Context, next: () => Promise) { - const { Connection } = Web3StateSettings.value - const { hasNativeAPI, send, account, chainId, signTransaction, signPersonalMessage, signTypedData } = - SharedContextSettings.value + const { hasNativeAPI, send, account, chainId } = SharedContextSettings.value // redirect to native app if (hasNativeAPI) { diff --git a/packages/plugins/EVM/src/state/Connection/interceptors/None.ts b/packages/plugins/EVM/src/state/Connection/interceptors/None.ts new file mode 100644 index 000000000000..2b814920b119 --- /dev/null +++ b/packages/plugins/EVM/src/state/Connection/interceptors/None.ts @@ -0,0 +1,11 @@ +import { isRiskMethod } from '@masknet/web3-shared-evm' +import type { Context, Middleware } from '../types' + +export class NoneWallet implements Middleware { + async fn(context: Context, next: () => Promise) { + if (isRiskMethod(context.method)) { + context.abort(new Error('No allowed.')) + } + await next() + } +} diff --git a/packages/plugins/EVM/src/state/Connection/middleware/Interceptor.ts b/packages/plugins/EVM/src/state/Connection/middleware/Interceptor.ts index 52ac8a888f1e..d3be9c5b1365 100644 --- a/packages/plugins/EVM/src/state/Connection/middleware/Interceptor.ts +++ b/packages/plugins/EVM/src/state/Connection/middleware/Interceptor.ts @@ -1,11 +1,13 @@ import { ProviderType } from '@masknet/web3-shared-evm' import type { Context, Middleware } from '../types' +import { NoneWallet } from '../interceptors/None' import { MaskWallet } from '../interceptors/MaskWallet' import { WalletConnect } from '../interceptors/WalletConnect' import { MetaMask } from '../interceptors/MetaMask' export class Interceptor implements Middleware { private interceptors: Partial>> = { + [ProviderType.None]: new NoneWallet(), [ProviderType.MaskWallet]: new MaskWallet(), [ProviderType.MetaMask]: new MetaMask(), [ProviderType.WalletConnect]: new WalletConnect(), diff --git a/packages/plugins/EVM/src/state/Connection/provider.ts b/packages/plugins/EVM/src/state/Connection/provider.ts index 055ed653cdc4..d3d5ff0d5fbc 100644 --- a/packages/plugins/EVM/src/state/Connection/provider.ts +++ b/packages/plugins/EVM/src/state/Connection/provider.ts @@ -1,5 +1,5 @@ import { ProviderType } from '@masknet/web3-shared-evm' -import { BaseProvider } from './providers/Base' +import type { BaseProvider } from './providers/Base' import { CustomNetworkProvider } from './providers/CustomNetwork' import { MaskWalletProvider } from './providers/MaskWallet' import { MetaMaskProvider } from './providers/MetaMask' @@ -9,12 +9,13 @@ import { Coin98Provider } from './providers/Coin98' import { MathWalletProvider } from './providers/MathWallet' import FortmaticProvider from './providers/Fortmatic' import TorusProvider from './providers/Torus' +import { NoneProvider } from './providers/None' /** * Register all supported providers */ export const Providers: Record = { - [ProviderType.None]: new BaseProvider(), + [ProviderType.None]: new NoneProvider(), [ProviderType.MaskWallet]: new MaskWalletProvider(), [ProviderType.MetaMask]: new MetaMaskProvider(), [ProviderType.WalletConnect]: new WalletConnectProvider(), diff --git a/packages/plugins/EVM/src/state/Connection/providers/None.ts b/packages/plugins/EVM/src/state/Connection/providers/None.ts new file mode 100644 index 000000000000..11b70c3fe961 --- /dev/null +++ b/packages/plugins/EVM/src/state/Connection/providers/None.ts @@ -0,0 +1,19 @@ +import type { RequestArguments } from 'web3-core' +import type { ProviderOptions } from '@masknet/web3-shared-base' +import { ChainId, createPayload } from '@masknet/web3-shared-evm' +import { BaseProvider } from './Base' +import type { EVM_Provider } from '../types' +import { SharedContextSettings } from '../../../settings' + +export class NoneProvider extends BaseProvider implements EVM_Provider { + override async request( + requestArguments: RequestArguments, + options?: ProviderOptions, + ): Promise { + const response = await SharedContextSettings.value.send( + createPayload(0, requestArguments.method, requestArguments.params), + options, + ) + return response?.result as T + } +}