Skip to content

Commit e979b00

Browse files
authored
Merge branch 'main' into cryptodev-2s/messenger/core-backend
2 parents baefa07 + a3e4c0b commit e979b00

File tree

12 files changed

+335
-236
lines changed

12 files changed

+335
-236
lines changed

.yarnrc.yml

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,3 +15,13 @@ nodeLinker: node-modules
1515
plugins:
1616
- path: .yarn/plugins/@yarnpkg/plugin-allow-scripts.cjs
1717
spec: "https://raw.githubusercontent.com/LavaMoat/LavaMoat/main/packages/yarn-plugin-allow-scripts/bundles/@yarnpkg/plugin-allow-scripts.js"
18+
19+
# Configure the NPM minimal age gate to 3 days, meaning packages must be at
20+
# least 3 days old to be installed.
21+
npmMinimalAgeGate: 4320 # 3 days (in minutes)
22+
23+
# Override the minimal age gate, allowing certain packages to be installed
24+
# regardless of their publish age.
25+
npmPreapprovedPackages:
26+
- "@metamask/*"
27+
- "@lavamoat/*"

package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@metamask/core-monorepo",
3-
"version": "628.0.0",
3+
"version": "629.0.0",
44
"private": true,
55
"description": "Monorepo for packages shared between MetaMask clients",
66
"repository": {
@@ -104,7 +104,7 @@
104104
"typescript-eslint": "^8.7.0",
105105
"yargs": "^17.7.2"
106106
},
107-
"packageManager": "yarn@4.2.2",
107+
"packageManager": "yarn@4.10.3",
108108
"engines": {
109109
"node": "^18.18 || >=20"
110110
},

packages/assets-controllers/CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
1212
- Add multicall addresses in `MULTICALL_CONTRACT_BY_CHAINID` ([#6896](https://github.com/MetaMask/core/pull/6896))
1313
- Add multicall address for Chains: `Injective`, `Hemi`, `Plasma`, `Nonmia`, `XRPL`, `Soneium`, `Genesys`, `EDU`, `Abstract`, `Berachain`, `MegaETH Testnet`, `Apechain`, `Matchain`, `Monad Testnet`, `Monad`, `Katana`, `Lens`, `Plume`, `XDC`
1414

15+
### Changed
16+
17+
- Batch `OnAssetConversion` and `OnAssetsMarketData` requests to non-EVM account Snaps ([#6886](https://github.com/MetaMask/core/pull/6886))
18+
1519
## [81.0.1]
1620

1721
### Fixed

packages/assets-controllers/src/MultichainAssetsRatesController/MultichainAssetsRatesController.test.ts

Lines changed: 65 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,20 @@ const fakeEvmAccountWithoutMetadata: InternalAccount = {
7171
methods: [],
7272
};
7373

74+
const fakeNonEvmAccount2: InternalAccount = {
75+
id: 'account5',
76+
type: 'solana:data-account',
77+
address: '0x123',
78+
metadata: {
79+
name: 'Test Account',
80+
// @ts-expect-error-next-line
81+
snap: { id: 'test-snap-2', enabled: true },
82+
},
83+
scopes: ['solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp'],
84+
options: {},
85+
methods: [],
86+
};
87+
7488
const fakeMarketData = {
7589
price: 202.11,
7690
priceChange: 0,
@@ -127,6 +141,9 @@ const setupController = ({
127141
account1: ['solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp/slip44:501'],
128142
account2: ['solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp/slip44:501'],
129143
account3: ['solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp/slip44:501'],
144+
account5: [
145+
'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp/token:EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v',
146+
],
130147
},
131148
assetsMetadata: {
132149
'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp/slip44:501': {
@@ -136,6 +153,14 @@ const setupController = ({
136153
iconUrl: 'https://example.com/solana.png',
137154
units: [{ symbol: 'SOL', name: 'Solana', decimals: 9 }],
138155
},
156+
'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp/token:EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v':
157+
{
158+
name: 'USDC',
159+
symbol: 'USDC',
160+
fungible: true,
161+
iconUrl: 'https://example.com/usdc.png',
162+
units: [{ symbol: 'USDC', name: 'USDC', decimals: 2 }],
163+
},
139164
},
140165
}),
141166
);
@@ -356,8 +381,8 @@ describe('MultichainAssetsRatesController', () => {
356381
type: KeyringTypes.snap,
357382
},
358383
snap: {
359-
id: 'mock-sol-snap',
360-
name: 'mock-sol-snap',
384+
id: 'mock-sol-snap-1',
385+
name: 'mock-sol-snap-1',
361386
enabled: true,
362387
},
363388
lastSelected: 0,
@@ -377,8 +402,8 @@ describe('MultichainAssetsRatesController', () => {
377402
type: KeyringTypes.snap,
378403
},
379404
snap: {
380-
id: 'mock-sol-snap',
381-
name: 'mock-sol-snap',
405+
id: 'mock-sol-snap-2',
406+
name: 'mock-sol-snap-2',
382407
enabled: true,
383408
},
384409
lastSelected: 0,
@@ -393,42 +418,49 @@ describe('MultichainAssetsRatesController', () => {
393418
accountsAssets: testAccounts,
394419
});
395420

396-
const snapSpy = jest
397-
.fn()
398-
.mockResolvedValueOnce({
399-
conversionRates: {
400-
'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp/slip44:501': {
401-
'swift:0/iso4217:USD': {
402-
rate: '100',
403-
conversionTime: 1738539923277,
421+
const mockResponses = {
422+
onAssetsConversion: [
423+
{
424+
conversionRates: {
425+
'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp/slip44:501': {
426+
'swift:0/iso4217:USD': {
427+
rate: '100',
428+
conversionTime: 1738539923277,
429+
},
404430
},
405431
},
406432
},
407-
})
408-
.mockResolvedValueOnce({
409-
marketData: {
410-
'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp/slip44:501': {
411-
'swift:0/iso4217:USD': fakeMarketData,
433+
{
434+
conversionRates: {
435+
'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp/token1:501': {
436+
'swift:0/iso4217:USD': {
437+
rate: '200',
438+
conversionTime: 1738539923277,
439+
},
440+
},
412441
},
413442
},
414-
})
415-
.mockResolvedValueOnce({
416-
conversionRates: {
417-
'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp/token1:501': {
418-
'swift:0/iso4217:USD': {
419-
rate: '200',
420-
conversionTime: 1738539923277,
421-
},
443+
],
444+
onAssetsMarketData: [
445+
{
446+
marketData: {
447+
'swift:0/iso4217:USD': fakeMarketData,
422448
},
423449
},
424-
})
425-
.mockResolvedValueOnce({
426-
marketData: {
427-
'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp/token1:501': {
450+
{
451+
marketData: {
428452
'swift:0/iso4217:USD': fakeMarketData,
429453
},
430454
},
431-
});
455+
],
456+
};
457+
458+
const snapSpy = jest.fn().mockImplementation((args) => {
459+
const { handler } = args;
460+
return Promise.resolve(
461+
mockResponses[handler as keyof typeof mockResponses].shift(),
462+
);
463+
});
432464
messenger.registerActionHandler('SnapController:handleRequest', snapSpy);
433465

434466
messenger.publish('MultichainAssetsController:accountAssetListUpdated', {
@@ -443,6 +475,7 @@ describe('MultichainAssetsRatesController', () => {
443475
},
444476
},
445477
});
478+
446479
// Wait for the asynchronous subscriber to run.
447480
await Promise.resolve();
448481
await advanceTime({ clock, duration: 10 });
@@ -625,7 +658,7 @@ describe('MultichainAssetsRatesController', () => {
625658

626659
it('handles mixed success and failure scenarios', async () => {
627660
const { controller, messenger } = setupController({
628-
accountsAssets: [fakeNonEvmAccount, fakeEvmAccount2],
661+
accountsAssets: [fakeNonEvmAccount, fakeNonEvmAccount2],
629662
});
630663

631664
const consoleErrorSpy = jest.spyOn(console, 'error').mockImplementation();
@@ -957,7 +990,7 @@ describe('MultichainAssetsRatesController', () => {
957990
const snapHandler = jest.fn().mockResolvedValue({
958991
conversionRates: {
959992
'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp/slip44:501': {
960-
USD: {
993+
'swift:0/iso4217:USD': {
961994
rate: '100.50',
962995
conversionTime: Date.now(),
963996
},

0 commit comments

Comments
 (0)