Skip to content

Commit 19edb84

Browse files
authored
Merge branch 'main' into feature/core-backend-platform
2 parents bc80f5a + 11cfe34 commit 19edb84

File tree

15 files changed

+120
-57
lines changed

15 files changed

+120
-57
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@metamask/core-monorepo",
3-
"version": "603.0.0",
3+
"version": "605.0.0",
44
"private": true,
55
"description": "Monorepo for packages shared between MetaMask clients",
66
"repository": {

packages/assets-controllers/CHANGELOG.md

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,16 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
77

88
## [Unreleased]
99

10+
## [78.0.1]
11+
1012
### Changed
1113

1214
- Bump `@metamask/multichain-account-service` from `^1.5.0` to `^1.6.0` ([#6786](https://github.com/MetaMask/core/pull/6786))
1315

16+
### Fixed
17+
18+
- Fix duplicate native token entries in `AccountsApiBalanceFetcher` by ensuring consistent address checksumming ([#6794](https://github.com/MetaMask/core/pull/6794))
19+
1420
## [78.0.0]
1521

1622
### Added
@@ -2067,7 +2073,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
20672073
20682074
- Use Ethers for AssetsContractController ([#845](https://github.com/MetaMask/core/pull/845))
20692075
2070-
[Unreleased]: https://github.com/MetaMask/core/compare/@metamask/assets-controllers@78.0.0...HEAD
2076+
[Unreleased]: https://github.com/MetaMask/core/compare/@metamask/assets-controllers@78.0.1...HEAD
2077+
[78.0.1]: https://github.com/MetaMask/core/compare/@metamask/assets-controllers@78.0.0...@metamask/assets-controllers@78.0.1
20712078
[78.0.0]: https://github.com/MetaMask/core/compare/@metamask/assets-controllers@77.0.2...@metamask/assets-controllers@78.0.0
20722079
[77.0.2]: https://github.com/MetaMask/core/compare/@metamask/assets-controllers@77.0.1...@metamask/assets-controllers@77.0.2
20732080
[77.0.1]: https://github.com/MetaMask/core/compare/@metamask/assets-controllers@77.0.0...@metamask/assets-controllers@77.0.1

packages/assets-controllers/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@metamask/assets-controllers",
3-
"version": "78.0.0",
3+
"version": "78.0.1",
44
"description": "Controllers which manage interactions involving ERC-20, ERC-721, and ERC-1155 tokens (including NFTs)",
55
"keywords": [
66
"MetaMask",

packages/assets-controllers/src/multi-chain-accounts-service/api-balance-fetcher.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -296,10 +296,11 @@ export class AccountsApiBalanceFetcher implements BalanceFetcher {
296296
// Process regular API balances
297297
if (balances) {
298298
const apiBalances = balances.flatMap((b) => {
299-
const account = b.accountAddress?.split(':')[2] as ChecksumAddress;
300-
if (!account) {
299+
const addressPart = b.accountAddress?.split(':')[2];
300+
if (!addressPart) {
301301
return [];
302302
}
303+
const account = checksum(addressPart);
303304
const token = checksum(b.address);
304305
const chainId = toHex(b.chainId) as ChainIdHex;
305306

packages/bridge-controller/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@
6666
},
6767
"devDependencies": {
6868
"@metamask/accounts-controller": "^33.1.0",
69-
"@metamask/assets-controllers": "^78.0.0",
69+
"@metamask/assets-controllers": "^78.0.1",
7070
"@metamask/auto-changelog": "^3.4.4",
7171
"@metamask/eth-json-rpc-provider": "^5.0.0",
7272
"@metamask/network-controller": "^24.2.0",

packages/shield-controller/CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
1414
### Changed
1515

1616
- Bump `@metamask/utils` from `^11.8.0` to `^11.8.1` ([#6708](https://github.com/MetaMask/core/pull/6708))
17+
- **Breaking:** Change `checkCoverage` API to accept `coverageId` and skip `/init` if `coverageId` is provided ([#6792](https://github.com/MetaMask/core/pull/6792))
1718

1819
## [0.2.0]
1920

packages/shield-controller/src/ShieldController.test.ts

Lines changed: 23 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,12 @@ import {
1111
} from '@metamask/transaction-controller';
1212

1313
import { ShieldController } from './ShieldController';
14-
import { createMockBackend } from '../tests/mocks/backend';
14+
import { createMockBackend, MOCK_COVERAGE_ID } from '../tests/mocks/backend';
1515
import { createMockMessenger } from '../tests/mocks/messenger';
1616
import {
1717
generateMockSignatureRequest,
1818
generateMockTxMeta,
19+
setupCoverageResultReceived,
1920
} from '../tests/utils';
2021

2122
/**
@@ -68,7 +69,7 @@ describe('ShieldController', () => {
6869
undefined as never,
6970
);
7071
expect(await coverageResultReceived).toBeUndefined();
71-
expect(backend.checkCoverage).toHaveBeenCalledWith(txMeta);
72+
expect(backend.checkCoverage).toHaveBeenCalledWith({ txMeta });
7273
});
7374

7475
it('should no longer trigger checkCoverage when controller is stopped', async () => {
@@ -126,12 +127,7 @@ describe('ShieldController', () => {
126127
it('should check coverage when a transaction is simulated', async () => {
127128
const { baseMessenger, backend } = setup();
128129
const txMeta = generateMockTxMeta();
129-
const coverageResultReceived = new Promise<void>((resolve) => {
130-
baseMessenger.subscribe(
131-
'ShieldController:coverageResultReceived',
132-
(_coverageResult) => resolve(),
133-
);
134-
});
130+
const coverageResultReceived = setupCoverageResultReceived(baseMessenger);
135131

136132
// Add transaction.
137133
baseMessenger.publish(
@@ -140,19 +136,25 @@ describe('ShieldController', () => {
140136
undefined as never,
141137
);
142138
expect(await coverageResultReceived).toBeUndefined();
143-
expect(backend.checkCoverage).toHaveBeenCalledWith(txMeta);
139+
expect(backend.checkCoverage).toHaveBeenCalledWith({ txMeta });
144140

145141
// Simulate transaction.
146-
txMeta.simulationData = {
142+
const txMeta2 = { ...txMeta };
143+
txMeta2.simulationData = {
147144
tokenBalanceChanges: [],
148145
};
146+
const coverageResultReceived2 =
147+
setupCoverageResultReceived(baseMessenger);
149148
baseMessenger.publish(
150149
'TransactionController:stateChange',
151-
{ transactions: [txMeta] } as TransactionControllerState,
150+
{ transactions: [txMeta2] } as TransactionControllerState,
152151
undefined as never,
153152
);
154-
expect(await coverageResultReceived).toBeUndefined();
155-
expect(backend.checkCoverage).toHaveBeenCalledWith(txMeta);
153+
expect(await coverageResultReceived2).toBeUndefined();
154+
expect(backend.checkCoverage).toHaveBeenCalledWith({
155+
coverageId: MOCK_COVERAGE_ID,
156+
txMeta: txMeta2,
157+
});
156158
});
157159

158160
it('throws an error when the coverage ID has changed', async () => {
@@ -189,9 +191,9 @@ describe('ShieldController', () => {
189191
undefined as never,
190192
);
191193
expect(await coverageResultReceived).toBeUndefined();
192-
expect(backend.checkSignatureCoverage).toHaveBeenCalledWith(
194+
expect(backend.checkSignatureCoverage).toHaveBeenCalledWith({
193195
signatureRequest,
194-
);
196+
});
195197
});
196198
});
197199

@@ -214,9 +216,9 @@ describe('ShieldController', () => {
214216
undefined as never,
215217
);
216218
expect(await coverageResultReceived1).toBeUndefined();
217-
expect(backend.checkSignatureCoverage).toHaveBeenCalledWith(
218-
signatureRequest1,
219-
);
219+
expect(backend.checkSignatureCoverage).toHaveBeenCalledWith({
220+
signatureRequest: signatureRequest1,
221+
});
220222

221223
const signatureRequest2 = generateMockSignatureRequest();
222224
const coverageResultReceived2 = new Promise<void>((resolve) => {
@@ -236,9 +238,9 @@ describe('ShieldController', () => {
236238
);
237239

238240
expect(await coverageResultReceived2).toBeUndefined();
239-
expect(backend.checkSignatureCoverage).toHaveBeenCalledWith(
240-
signatureRequest2,
241-
);
241+
expect(backend.checkSignatureCoverage).toHaveBeenCalledWith({
242+
signatureRequest: signatureRequest2,
243+
});
242244
});
243245

244246
describe('logSignature', () => {

packages/shield-controller/src/ShieldController.ts

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -291,7 +291,11 @@ export class ShieldController extends BaseController<
291291
*/
292292
async checkCoverage(txMeta: TransactionMeta): Promise<CoverageResult> {
293293
// Check coverage
294-
const coverageResult = await this.#backend.checkCoverage(txMeta);
294+
const coverageId = this.#getLatestCoverageId(txMeta.id);
295+
const coverageResult = await this.#backend.checkCoverage({
296+
txMeta,
297+
coverageId,
298+
});
295299

296300
// Publish coverage result
297301
this.messagingSystem.publish(
@@ -315,8 +319,11 @@ export class ShieldController extends BaseController<
315319
signatureRequest: SignatureRequest,
316320
): Promise<CoverageResult> {
317321
// Check coverage
318-
const coverageResult =
319-
await this.#backend.checkSignatureCoverage(signatureRequest);
322+
const coverageId = this.#getLatestCoverageId(signatureRequest.id);
323+
const coverageResult = await this.#backend.checkSignatureCoverage({
324+
signatureRequest,
325+
coverageId,
326+
});
320327

321328
// Publish coverage result
322329
this.messagingSystem.publish(

packages/shield-controller/src/backend.test.ts

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ describe('ShieldRemoteBackend', () => {
6363
} as unknown as Response);
6464

6565
const txMeta = generateMockTxMeta();
66-
const coverageResult = await backend.checkCoverage(txMeta);
66+
const coverageResult = await backend.checkCoverage({ txMeta });
6767
expect(coverageResult).toStrictEqual({ coverageId, status });
6868
expect(fetchMock).toHaveBeenCalledTimes(2);
6969
expect(getAccessToken).toHaveBeenCalledTimes(2);
@@ -95,7 +95,7 @@ describe('ShieldRemoteBackend', () => {
9595
} as unknown as Response);
9696

9797
const txMeta = generateMockTxMeta();
98-
const coverageResult = await backend.checkCoverage(txMeta);
98+
const coverageResult = await backend.checkCoverage({ txMeta });
9999
expect(coverageResult).toStrictEqual({ coverageId, status });
100100
expect(fetchMock).toHaveBeenCalledTimes(3);
101101
expect(getAccessToken).toHaveBeenCalledTimes(2);
@@ -113,7 +113,7 @@ describe('ShieldRemoteBackend', () => {
113113
} as unknown as Response);
114114

115115
const txMeta = generateMockTxMeta();
116-
await expect(backend.checkCoverage(txMeta)).rejects.toThrow(
116+
await expect(backend.checkCoverage({ txMeta })).rejects.toThrow(
117117
`Failed to init coverage check: ${status}`,
118118
);
119119
expect(fetchMock).toHaveBeenCalledTimes(1);
@@ -139,7 +139,7 @@ describe('ShieldRemoteBackend', () => {
139139
} as unknown as Response);
140140

141141
const txMeta = generateMockTxMeta();
142-
await expect(backend.checkCoverage(txMeta)).rejects.toThrow(
142+
await expect(backend.checkCoverage({ txMeta })).rejects.toThrow(
143143
'Timeout waiting for coverage result',
144144
);
145145

@@ -167,8 +167,9 @@ describe('ShieldRemoteBackend', () => {
167167
} as unknown as Response);
168168

169169
const signatureRequest = generateMockSignatureRequest();
170-
const coverageResult =
171-
await backend.checkSignatureCoverage(signatureRequest);
170+
const coverageResult = await backend.checkSignatureCoverage({
171+
signatureRequest,
172+
});
172173
expect(coverageResult).toStrictEqual({ coverageId, status });
173174
expect(fetchMock).toHaveBeenCalledTimes(2);
174175
expect(getAccessToken).toHaveBeenCalledTimes(2);
@@ -180,7 +181,7 @@ describe('ShieldRemoteBackend', () => {
180181
const signatureRequest = generateMockSignatureRequest();
181182
signatureRequest.messageParams.data = [];
182183
await expect(
183-
backend.checkSignatureCoverage(signatureRequest),
184+
backend.checkSignatureCoverage({ signatureRequest }),
184185
).rejects.toThrow('Signature data must be a string');
185186
});
186187
});

packages/shield-controller/src/backend.ts

Lines changed: 20 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ import type { SignatureRequest } from '@metamask/signature-controller';
22
import type { TransactionMeta } from '@metamask/transaction-controller';
33

44
import type {
5+
CheckCoverageRequest,
6+
CheckSignatureCoverageRequest,
57
CoverageResult,
68
CoverageStatus,
79
LogSignatureRequest,
@@ -74,27 +76,31 @@ export class ShieldRemoteBackend implements ShieldBackend {
7476
this.#fetch = fetchFn;
7577
}
7678

77-
async checkCoverage(txMeta: TransactionMeta): Promise<CoverageResult> {
78-
const reqBody = makeInitCoverageCheckBody(txMeta);
79-
80-
const { coverageId } = await this.#initCoverageCheck(
81-
'v1/transaction/coverage/init',
82-
reqBody,
83-
);
79+
async checkCoverage(req: CheckCoverageRequest): Promise<CoverageResult> {
80+
let { coverageId } = req;
81+
if (!coverageId) {
82+
const reqBody = makeInitCoverageCheckBody(req.txMeta);
83+
({ coverageId } = await this.#initCoverageCheck(
84+
'v1/transaction/coverage/init',
85+
reqBody,
86+
));
87+
}
8488

8589
const coverageResult = await this.#getCoverageResult(coverageId);
8690
return { coverageId, status: coverageResult.status };
8791
}
8892

8993
async checkSignatureCoverage(
90-
signatureRequest: SignatureRequest,
94+
req: CheckSignatureCoverageRequest,
9195
): Promise<CoverageResult> {
92-
const reqBody = makeInitSignatureCoverageCheckBody(signatureRequest);
93-
94-
const { coverageId } = await this.#initCoverageCheck(
95-
'v1/signature/coverage/init',
96-
reqBody,
97-
);
96+
let { coverageId } = req;
97+
if (!coverageId) {
98+
const reqBody = makeInitSignatureCoverageCheckBody(req.signatureRequest);
99+
({ coverageId } = await this.#initCoverageCheck(
100+
'v1/signature/coverage/init',
101+
reqBody,
102+
));
103+
}
98104

99105
const coverageResult = await this.#getCoverageResult(coverageId);
100106
return { coverageId, status: coverageResult.status };

0 commit comments

Comments
 (0)