diff --git a/packages/starknet-snap/src/index.tsx b/packages/starknet-snap/src/index.tsx
index 9d07b189..adc9731e 100644
--- a/packages/starknet-snap/src/index.tsx
+++ b/packages/starknet-snap/src/index.tsx
@@ -4,7 +4,12 @@ import type {
OnInstallHandler,
OnUpdateHandler,
} from '@metamask/snaps-sdk';
-import { SnapError, MethodNotFoundError } from '@metamask/snaps-sdk';
+import {
+ SnapError,
+ MethodNotFoundError,
+ panel,
+ text,
+} from '@metamask/snaps-sdk';
import {
Box,
Text,
@@ -62,7 +67,12 @@ import type {
} from './types/snapApi';
import type { SnapState } from './types/snapState';
import { upgradeAccContract } from './upgradeAccContract';
-import { getDappUrl, isSnapRpcError } from './utils';
+import {
+ getDappUrl,
+ getStateData,
+ isSnapRpcError,
+ setStateData,
+} from './utils';
import {
CAIRO_VERSION_LEGACY,
ETHER_MAINNET,
@@ -308,27 +318,52 @@ export const onRpcRequest: OnRpcRequestHandler = async ({ request }) => {
};
export const onInstall: OnInstallHandler = async () => {
- const content = (
-
- Your MetaMask wallet is now compatible with Starknet!
-
- To manage your Starknet account and send and receive funds, visit the{' '}
- companion dapp for Starknet.
-
-
- );
+ try {
+ const content = (
+
+ Your MetaMask wallet is now compatible with Starknet!
+
+ To manage your Starknet account and send and receive funds, visit the{' '}
+ companion dapp for Starknet.
+
+
+ );
- await snap.request({
- method: 'snap_dialog',
- params: {
- type: 'alert',
- content,
- },
- });
+ await snap.request({
+ method: 'snap_dialog',
+ params: {
+ type: 'alert',
+ content,
+ },
+ });
+ } catch (error) {
+ const state = (await getStateData()) as SnapState;
+ state.requireMMUpgrade = true;
+ await setStateData(state);
+ await snap.request({
+ method: 'snap_dialog',
+ params: {
+ type: 'alert',
+ content: panel([
+ text(
+ 'You need to update your MetaMask to latest version to use this snap.',
+ ),
+ ]),
+ },
+ });
+ }
};
export const onUpdate: OnUpdateHandler = async () => {
- const content = (
+ const { requireMMUpgrade } = (await getStateData()) as SnapState;
+
+ const content = requireMMUpgrade ? (
+ panel([
+ text(
+ 'You need to update your MetaMask to latest version to use this snap.',
+ ),
+ ])
+ ) : (
Features released with this update:
Cairo contract upgrade support.
@@ -346,12 +381,7 @@ export const onUpdate: OnUpdateHandler = async () => {
export const onHomePage: OnHomePageHandler = async () => {
try {
- const state: SnapState = await snap.request({
- method: 'snap_manageState',
- params: {
- operation: 'get',
- },
- });
+ const state: SnapState = (await getStateData()) as SnapState;
if (!state) {
throw new Error('State not found.');
@@ -390,7 +420,13 @@ export const onHomePage: OnHomePageHandler = async () => {
);
return {
- content: (
+ content: state.requireMMUpgrade ? (
+ panel([
+ text(
+ 'You need to update your MetaMask to latest version to use this snap.',
+ ),
+ ])
+ ) : (
Address
diff --git a/packages/starknet-snap/src/types/snapState.ts b/packages/starknet-snap/src/types/snapState.ts
index a1ae56e7..25359318 100644
--- a/packages/starknet-snap/src/types/snapState.ts
+++ b/packages/starknet-snap/src/types/snapState.ts
@@ -7,6 +7,7 @@ export type SnapState = {
networks: Network[];
transactions: Transaction[];
currentNetwork?: Network;
+ requireMMUpgrade?: boolean;
};
export type AccContract = {