Skip to content

Commit 45c127c

Browse files
chore: refactor showAccountRequireUpgradeOrDeployModal (#311)
1 parent ad12592 commit 45c127c

24 files changed

+291
-547
lines changed

packages/starknet-snap/src/declareContract.ts

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,11 @@ import { toJson } from './utils/serializer';
99
import {
1010
getNetworkFromChainId,
1111
getDeclareSnapTxt,
12-
showAccountRequireUpgradeOrDeployModal,
12+
verifyIfAccountNeedUpgradeOrDeploy,
1313
} from './utils/snapUtils';
1414
import {
1515
getKeysFromAddress,
1616
declareContract as declareContractUtil,
17-
validateAccountRequireUpgradeOrDeploy,
1817
} from './utils/starknetUtils';
1918

2019
/**
@@ -38,16 +37,7 @@ export async function declareContract(params: ApiParamsWithKeyDeriver) {
3837
senderAddress,
3938
);
4039

41-
try {
42-
await validateAccountRequireUpgradeOrDeploy(
43-
network,
44-
senderAddress,
45-
publicKey,
46-
);
47-
} catch (validateError) {
48-
await showAccountRequireUpgradeOrDeployModal(wallet, validateError);
49-
throw validateError;
50-
}
40+
await verifyIfAccountNeedUpgradeOrDeploy(network, senderAddress, publicKey);
5141

5242
const snapComponents = getDeclareSnapTxt(
5343
senderAddress,

packages/starknet-snap/src/estimateFee.ts

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,11 @@ import type {
88
import { ACCOUNT_CLASS_HASH } from './utils/constants';
99
import { logger } from './utils/logger';
1010
import { toJson } from './utils/serializer';
11-
import { getNetworkFromChainId } from './utils/snapUtils';
1211
import {
13-
validateAccountRequireUpgradeOrDeploy,
12+
getNetworkFromChainId,
13+
verifyIfAccountNeedUpgradeOrDeploy,
14+
} from './utils/snapUtils';
15+
import {
1416
validateAndParseAddress,
1517
getKeysFromAddress,
1618
getCallDataArray,
@@ -64,10 +66,11 @@ export async function estimateFee(params: ApiParamsWithKeyDeriver) {
6466
const { privateKey: senderPrivateKey, publicKey } =
6567
await getKeysFromAddress(keyDeriver, network, state, senderAddress);
6668

67-
await validateAccountRequireUpgradeOrDeploy(
69+
await verifyIfAccountNeedUpgradeOrDeploy(
6870
network,
6971
senderAddress,
7072
publicKey,
73+
false,
7174
);
7275

7376
const txnInvocation = {

packages/starknet-snap/src/executeTxn.ts

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import {
1414
getNetworkFromChainId,
1515
getTxnSnapTxt,
1616
addDialogTxt,
17-
showAccountRequireUpgradeOrDeployModal,
17+
verifyIfAccountNeedUpgradeOrDeploy,
1818
} from './utils/snapUtils';
1919
import {
2020
getKeysFromAddress,
@@ -23,7 +23,6 @@ import {
2323
estimateFeeBulk,
2424
getAccContractAddressAndCallData,
2525
addFeesFromAllTransactions,
26-
validateAccountRequireUpgradeOrDeploy,
2726
} from './utils/starknetUtils';
2827

2928
/**
@@ -42,16 +41,7 @@ export async function executeTxn(params: ApiParamsWithKeyDeriver) {
4241
addressIndex,
4342
} = await getKeysFromAddress(keyDeriver, network, state, senderAddress);
4443

45-
try {
46-
await validateAccountRequireUpgradeOrDeploy(
47-
network,
48-
senderAddress,
49-
publicKey,
50-
);
51-
} catch (validateError) {
52-
await showAccountRequireUpgradeOrDeployModal(wallet, validateError);
53-
throw validateError;
54-
}
44+
await verifyIfAccountNeedUpgradeOrDeploy(network, senderAddress, publicKey);
5545

5646
const txnInvocationArray = Array.isArray(requestParamsObj.txnInvocation)
5747
? requestParamsObj.txnInvocation

packages/starknet-snap/src/extractPrivateKey.ts

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,14 @@ import type {
66
} from './types/snapApi';
77
import { logger } from './utils/logger';
88
import { toJson } from './utils/serializer';
9-
import { getNetworkFromChainId } from './utils/snapUtils';
9+
import {
10+
getNetworkFromChainId,
11+
verifyIfAccountNeedUpgradeOrDeploy,
12+
} from './utils/snapUtils';
1013
import {
1114
validateAndParseAddress,
1215
getKeysFromAddress,
13-
validateAccountRequireUpgradeOrDeploy,
1416
} from './utils/starknetUtils';
15-
1617
/**
1718
*
1819
* @param params
@@ -43,10 +44,12 @@ export async function extractPrivateKey(params: ApiParamsWithKeyDeriver) {
4344
state,
4445
userAddress,
4546
);
46-
await validateAccountRequireUpgradeOrDeploy(
47+
48+
await verifyIfAccountNeedUpgradeOrDeploy(
4749
network,
4850
userAddress,
4951
publicKey,
52+
false,
5053
);
5154

5255
const response = await wallet.request({

packages/starknet-snap/src/extractPublicKey.ts

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,13 @@ import type {
66
} from './types/snapApi';
77
import { logger } from './utils/logger';
88
import { toJson } from './utils/serializer';
9-
import { getAccount, getNetworkFromChainId } from './utils/snapUtils';
9+
import {
10+
getAccount,
11+
getNetworkFromChainId,
12+
verifyIfAccountNeedUpgradeOrDeploy,
13+
} from './utils/snapUtils';
1014
import {
1115
validateAndParseAddress,
12-
validateAccountRequireUpgradeOrDeploy,
1316
getKeysFromAddress,
1417
} from './utils/starknetUtils';
1518

@@ -48,10 +51,12 @@ export async function extractPublicKey(params: ApiParamsWithKeyDeriver) {
4851
state,
4952
userAddress,
5053
);
51-
await validateAccountRequireUpgradeOrDeploy(
54+
55+
await verifyIfAccountNeedUpgradeOrDeploy(
5256
network,
5357
userAddress,
5458
publicKey,
59+
false,
5560
);
5661

5762
let userPublicKey;

packages/starknet-snap/src/signDeclareTransaction.ts

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,11 @@ import { toJson } from './utils/serializer';
1010
import {
1111
getNetworkFromChainId,
1212
getSignTxnTxt,
13-
showAccountRequireUpgradeOrDeployModal,
13+
verifyIfAccountNeedUpgradeOrDeploy,
1414
} from './utils/snapUtils';
1515
import {
1616
getKeysFromAddress,
1717
signDeclareTransaction as signDeclareTransactionUtil,
18-
validateAccountRequireUpgradeOrDeploy,
1918
} from './utils/starknetUtils';
2019

2120
/**
@@ -38,16 +37,7 @@ export async function signDeclareTransaction(
3837
signerAddress,
3938
);
4039

41-
try {
42-
await validateAccountRequireUpgradeOrDeploy(
43-
network,
44-
signerAddress,
45-
publicKey,
46-
);
47-
} catch (validateError) {
48-
await showAccountRequireUpgradeOrDeployModal(wallet, validateError);
49-
throw validateError;
50-
}
40+
await verifyIfAccountNeedUpgradeOrDeploy(network, signerAddress, publicKey);
5141

5242
logger.log(
5343
`signDeclareTransaction params: ${toJson(

packages/starknet-snap/src/signDeployAccountTransaction.ts

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,11 @@ import { toJson } from './utils/serializer';
1010
import {
1111
getNetworkFromChainId,
1212
getSignTxnTxt,
13-
showAccountRequireUpgradeOrDeployModal,
13+
verifyIfAccountNeedUpgradeOrDeploy,
1414
} from './utils/snapUtils';
1515
import {
1616
getKeysFromAddress,
1717
signDeployAccountTransaction as signDeployAccountTransactionUtil,
18-
validateAccountRequireUpgradeOrDeploy,
1918
} from './utils/starknetUtils';
2019

2120
/**
@@ -38,16 +37,7 @@ export async function signDeployAccountTransaction(
3837
signerAddress,
3938
);
4039

41-
try {
42-
await validateAccountRequireUpgradeOrDeploy(
43-
network,
44-
signerAddress,
45-
publicKey,
46-
);
47-
} catch (validateError) {
48-
await showAccountRequireUpgradeOrDeployModal(wallet, validateError);
49-
throw validateError;
50-
}
40+
await verifyIfAccountNeedUpgradeOrDeploy(network, signerAddress, publicKey);
5141

5242
logger.log(
5343
`signDeployAccountTransaction params: ${toJson(

packages/starknet-snap/src/signMessage.ts

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,12 @@ import { toJson } from './utils/serializer';
99
import {
1010
getNetworkFromChainId,
1111
addDialogTxt,
12-
showAccountRequireUpgradeOrDeployModal,
12+
verifyIfAccountNeedUpgradeOrDeploy,
1313
} from './utils/snapUtils';
1414
import {
1515
signMessage as signMessageUtil,
1616
getKeysFromAddress,
1717
validateAndParseAddress,
18-
validateAccountRequireUpgradeOrDeploy,
1918
} from './utils/starknetUtils';
2019

2120
/**
@@ -52,16 +51,7 @@ export async function signMessage(params: ApiParamsWithKeyDeriver) {
5251
);
5352
}
5453

55-
try {
56-
await validateAccountRequireUpgradeOrDeploy(
57-
network,
58-
signerAddress,
59-
publicKey,
60-
);
61-
} catch (validateError) {
62-
await showAccountRequireUpgradeOrDeployModal(wallet, validateError);
63-
throw validateError;
64-
}
54+
await verifyIfAccountNeedUpgradeOrDeploy(network, signerAddress, publicKey);
6555

6656
const components = [];
6757
addDialogTxt(components, 'Message', toJson(typedDataMessage));

packages/starknet-snap/src/signTransaction.ts

Lines changed: 3 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,9 @@ import { toJson } from './utils/serializer';
1010
import {
1111
getNetworkFromChainId,
1212
getSignTxnTxt,
13-
showAccountRequireUpgradeOrDeployModal,
13+
verifyIfAccountNeedUpgradeOrDeploy,
1414
} from './utils/snapUtils';
15-
import {
16-
getKeysFromAddress,
17-
signTransactions,
18-
validateAccountRequireUpgradeOrDeploy,
19-
} from './utils/starknetUtils';
15+
import { getKeysFromAddress, signTransactions } from './utils/starknetUtils';
2016

2117
/**
2218
*
@@ -37,16 +33,7 @@ export async function signTransaction(
3733
signerAddress,
3834
);
3935

40-
try {
41-
await validateAccountRequireUpgradeOrDeploy(
42-
network,
43-
signerAddress,
44-
publicKey,
45-
);
46-
} catch (validateError) {
47-
await showAccountRequireUpgradeOrDeployModal(wallet, validateError);
48-
throw validateError;
49-
}
36+
await verifyIfAccountNeedUpgradeOrDeploy(network, signerAddress, publicKey);
5037

5138
logger.log(
5239
`signTransaction params: ${toJson(requestParamsObj.transactions, 2)}}`,

packages/starknet-snap/src/utils/__mocks__/snap.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ export const getBip44Deriver = jest.fn();
44

55
export const confirmDialog = jest.fn();
66

7+
export const alertDialog = jest.fn();
8+
79
export const getStateData = jest.fn();
810

911
export const setStateData = jest.fn();
Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,17 @@
1-
export class UpgradeRequiredError extends Error {}
1+
import { SnapError } from '@metamask/snaps-sdk';
22

3-
export class DeployRequiredError extends Error {}
3+
// Extend SnapError to allow error message visible to client
4+
export class UpgradeRequiredError extends SnapError {
5+
constructor(message?: string) {
6+
super(message ?? 'Upgrade required');
7+
}
8+
}
9+
10+
export class DeployRequiredError extends SnapError {
11+
constructor(message?: string) {
12+
super(
13+
message ??
14+
'Cairo 0 contract address balance is not empty, deploy required',
15+
);
16+
}
17+
}

packages/starknet-snap/src/utils/snap.test.ts

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,30 @@ describe('confirmDialog', () => {
4646
});
4747
});
4848

49+
describe('alertDialog', () => {
50+
it('calls snap_dialog', async () => {
51+
const spy = jest.spyOn(snapUtil.getProvider(), 'request');
52+
const components: Component[] = [
53+
heading('header'),
54+
text('subHeader'),
55+
divider(),
56+
row('Label1', text('Value1')),
57+
text('**Label2**:'),
58+
row('SubLabel1', text('SubValue1')),
59+
];
60+
61+
await snapUtil.alertDialog(components);
62+
63+
expect(spy).toHaveBeenCalledWith({
64+
method: 'snap_dialog',
65+
params: {
66+
type: 'alert',
67+
content: panel(components),
68+
},
69+
});
70+
});
71+
});
72+
4973
describe('getStateData', () => {
5074
it('gets state data', async () => {
5175
const spy = jest.spyOn(snapUtil.getProvider(), 'request');

packages/starknet-snap/src/utils/snap.ts

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import type { BIP44AddressKeyDeriver } from '@metamask/key-tree';
22
import { getBIP44AddressKeyDeriver } from '@metamask/key-tree';
33
import type { Component, DialogResult, Json } from '@metamask/snaps-sdk';
4-
import { panel, type SnapsProvider } from '@metamask/snaps-sdk';
4+
import { DialogType, panel, type SnapsProvider } from '@metamask/snaps-sdk';
55

66
declare const snap: SnapsProvider;
77

@@ -41,7 +41,25 @@ export async function confirmDialog(
4141
return snap.request({
4242
method: 'snap_dialog',
4343
params: {
44-
type: 'confirmation',
44+
type: DialogType.Confirmation,
45+
content: panel(components),
46+
},
47+
});
48+
}
49+
50+
/**
51+
* Displays a alert dialog with the specified components.
52+
*
53+
* @param components - An array of components to display in the dialog.
54+
* @returns A Promise that resolves to the result of the dialog.
55+
*/
56+
export async function alertDialog(
57+
components: Component[],
58+
): Promise<DialogResult> {
59+
return snap.request({
60+
method: 'snap_dialog',
61+
params: {
62+
type: DialogType.Alert,
4563
content: panel(components),
4664
},
4765
});

0 commit comments

Comments
 (0)