diff --git a/packages/mask/src/plugins/Avatar/Application/NFTAvatarsDialog.tsx b/packages/mask/src/plugins/Avatar/Application/NFTAvatarsDialog.tsx index 16f7941a6fbe..392bcf93a8e0 100644 --- a/packages/mask/src/plugins/Avatar/Application/NFTAvatarsDialog.tsx +++ b/packages/mask/src/plugins/Avatar/Application/NFTAvatarsDialog.tsx @@ -80,6 +80,7 @@ export function NFTAvatarDialog(props: NFTAvatarsDialogProps) { ? t.application_edit_profile_dialog_title() : t.application_dialog_title() } + isOnBack={step !== CreateNFTAvatarStep.Persona} open={props.open} onClose={onBack}> diff --git a/packages/mask/src/plugins/ITO/SNSAdaptor/CompositionDialog.tsx b/packages/mask/src/plugins/ITO/SNSAdaptor/CompositionDialog.tsx index 3956b2050515..30186309a94f 100644 --- a/packages/mask/src/plugins/ITO/SNSAdaptor/CompositionDialog.tsx +++ b/packages/mask/src/plugins/ITO/SNSAdaptor/CompositionDialog.tsx @@ -197,10 +197,11 @@ export function CompositionDialog(props: CompositionDialogProps) { const onClose = useCallback(() => { const [, setValue] = state setStep(ITOCreateFormPageStep.NewItoPage) + if (step === ITOCreateFormPageStep.ConfirmItoPage) return setPoolSettings(undefined) setValue(DialogTabs.create) props.onClose() - }, [props, state]) + }, [props, state, step]) const tabProps: AbstractTabProps = { tabs: [ @@ -234,6 +235,7 @@ export function CompositionDialog(props: CompositionDialogProps) { diff --git a/packages/mask/src/plugins/RedPacket/SNSAdaptor/RedPacket/index.tsx b/packages/mask/src/plugins/RedPacket/SNSAdaptor/RedPacket/index.tsx index 7ce2df4920d3..a322d1715fe3 100644 --- a/packages/mask/src/plugins/RedPacket/SNSAdaptor/RedPacket/index.tsx +++ b/packages/mask/src/plugins/RedPacket/SNSAdaptor/RedPacket/index.tsx @@ -181,7 +181,7 @@ export function RedPacket(props: RedPacketProps) { {listOfStatus.includes(RedPacketStatus.empty) ? null : ( setStep(CreateRedPacketPageStep.NewRedPacketPage)} + isOnBack={!isCreateStep} disableTitleBorder> {step === CreateRedPacketPageStep.NewRedPacketPage ? ( diff --git a/packages/mask/src/plugins/Tips/SNSAdaptor/TipsEntranceDialog.tsx b/packages/mask/src/plugins/Tips/SNSAdaptor/TipsEntranceDialog.tsx index 37f02d5eb945..745fadfc1eeb 100644 --- a/packages/mask/src/plugins/Tips/SNSAdaptor/TipsEntranceDialog.tsx +++ b/packages/mask/src/plugins/Tips/SNSAdaptor/TipsEntranceDialog.tsx @@ -248,6 +248,7 @@ export function TipsEntranceDialog({ open, onClose }: TipsEntranceDialogProps) { { 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 + } +} diff --git a/packages/shared/src/contexts/components/InjectedDialog.tsx b/packages/shared/src/contexts/components/InjectedDialog.tsx index fcefeb66cf53..59fea1cde5d1 100644 --- a/packages/shared/src/contexts/components/InjectedDialog.tsx +++ b/packages/shared/src/contexts/components/InjectedDialog.tsx @@ -76,6 +76,7 @@ export interface InjectedDialogProps extends Omit + onClick={!props.isOnBack ? closeBothCompositionDialog : onClose}>