From 301d32b90f14c5e0e4e5355ff1ffa1220b0635c0 Mon Sep 17 00:00:00 2001 From: mikesposito Date: Thu, 2 Jul 2026 21:49:31 +0200 Subject: [PATCH 1/2] fix: `AccountActivityService` subscribes to all supported scopes --- packages/core-backend/CHANGELOG.md | 4 ++ packages/core-backend/package.json | 1 + .../src/ws/AccountActivityService.ts | 57 +++++++++++++++---- packages/core-backend/tsconfig.build.json | 1 + packages/core-backend/tsconfig.json | 3 + 5 files changed, 56 insertions(+), 10 deletions(-) diff --git a/packages/core-backend/CHANGELOG.md b/packages/core-backend/CHANGELOG.md index 903819fb3f..4209d5c0b9 100644 --- a/packages/core-backend/CHANGELOG.md +++ b/packages/core-backend/CHANGELOG.md @@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +### Fixed + +- `AccountActivityService` subscribes to all supported scopes for a given account ([#0000](https://github.com/MetaMask/core/pull/0000)) + ## [6.5.0] ### Added diff --git a/packages/core-backend/package.json b/packages/core-backend/package.json index eaa214951b..57d3e8db97 100644 --- a/packages/core-backend/package.json +++ b/packages/core-backend/package.json @@ -57,6 +57,7 @@ "@metamask/controller-utils": "^12.3.0", "@metamask/keyring-controller": "^27.1.0", "@metamask/messenger": "^1.2.0", + "@metamask/multichain-account-service": "^10.0.3", "@metamask/profile-sync-controller": "^28.2.0", "@metamask/utils": "^11.11.0", "@tanstack/query-core": "^5.62.16", diff --git a/packages/core-backend/src/ws/AccountActivityService.ts b/packages/core-backend/src/ws/AccountActivityService.ts index 88b97f1729..590f3ecee5 100644 --- a/packages/core-backend/src/ws/AccountActivityService.ts +++ b/packages/core-backend/src/ws/AccountActivityService.ts @@ -9,6 +9,7 @@ import type { AccountsControllerGetSelectedAccountAction, AccountsControllerSelectedAccountChangeEvent, } from '@metamask/accounts-controller'; +import type { MultichainAccountServiceGetMultichainAccountGroupAction } from '@metamask/multichain-account-service'; import type { TraceCallback } from '@metamask/controller-utils'; import type { InternalAccount } from '@metamask/keyring-internal-api'; import type { Messenger } from '@metamask/messenger'; @@ -52,6 +53,8 @@ const MESSENGER_EXPOSED_METHODS = ['subscribe', 'unsubscribe'] as const; const SUBSCRIPTION_NAMESPACE = 'account-activity.v1'; +const SUPPORTED_CHAIN_PREFIXES = ['eip155', 'solana'] as const; + /** * Account subscription options */ @@ -88,6 +91,7 @@ export const ACCOUNT_ACTIVITY_SERVICE_ALLOWED_ACTIONS = [ 'BackendWebSocketService:findSubscriptionsByChannelPrefix', 'BackendWebSocketService:addChannelCallback', 'BackendWebSocketService:removeChannelCallback', + 'MultichainAccountService:getMultichainAccountGroup', ] as const; // Allowed events that AccountActivityService can listen to @@ -98,7 +102,8 @@ export const ACCOUNT_ACTIVITY_SERVICE_ALLOWED_EVENTS = [ export type AllowedActions = | AccountsControllerGetSelectedAccountAction - | BackendWebSocketServiceMethodActions; + | BackendWebSocketServiceMethodActions + | MultichainAccountServiceGetMultichainAccountGroupAction; // Event types for the messaging system @@ -404,14 +409,15 @@ export class AccountActivityService { } try { - // Convert new account to CAIP-10 format - const newAddress = this.#convertToCaip10Address(newAccount); - // First, unsubscribe from all current account activity subscriptions to avoid multiple subscriptions await this.#unsubscribeFromAllAccountActivity(); - // Then, subscribe to the new selected account - await this.subscribe({ address: newAddress }); + for (const address of this.#getSupportedMultichainCaip10Addresses( + newAccount, + )) { + // Subscribe to the new selected account in CAIP-10 format + await this.subscribe({ address }); + } } catch (error) { log('Account change failed', { error }); } @@ -514,9 +520,11 @@ export class AccountActivityService { return; } - // Convert to CAIP-10 format and subscribe - const address = this.#convertToCaip10Address(selectedAccount); - await this.subscribe({ address }); + for (const address of this.#getSupportedMultichainCaip10Addresses( + selectedAccount, + )) { + await this.subscribe({ address }); + } } /** @@ -543,9 +551,14 @@ export class AccountActivityService { * Convert an InternalAccount address to CAIP-10 format or raw address * * @param account - The internal account to convert + * @param account.address - The raw address of the account + * @param account.scopes - The scopes of the account (used to determine chain type) * @returns The CAIP-10 formatted address or raw address */ - #convertToCaip10Address(account: InternalAccount): string { + #convertToCaip10Address(account: { + address: InternalAccount['address']; + scopes: InternalAccount['scopes']; + }): string { // Check if account has EVM scopes if (account.scopes.some((scope) => scope.startsWith('eip155:'))) { // CAIP-10 format: eip155:0:address (subscribe to all EVM chains) @@ -562,6 +575,30 @@ export class AccountActivityService { return account.address; } + /** + * Get all supported multichain CAIP-10 addresses for a given account + * This is used to determine which accounts to subscribe to for activity updates + * + * @param account - The internal account to get supported addresses for + * @returns An array of CAIP-10 formatted addresses that are supported for subscription + */ + #getSupportedMultichainCaip10Addresses(account: InternalAccount): string[] { + const multichainAccounts = + account.options.entropy?.type === 'mnemonic' + ? this.#messenger + .call('MultichainAccountService:getMultichainAccountGroup', { + entropySource: account.options.entropy.id, + groupIndex: account.options.entropy.groupIndex, + }) + .getAccounts() + : [account]; + return multichainAccounts + .map((acct) => this.#convertToCaip10Address(acct)) + .filter((address) => + SUPPORTED_CHAIN_PREFIXES.some((prefix) => address.startsWith(prefix)), + ); + } + /** * Force WebSocket reconnection to clean up subscription state */ diff --git a/packages/core-backend/tsconfig.build.json b/packages/core-backend/tsconfig.build.json index e386c7a5ec..e765fd37f2 100644 --- a/packages/core-backend/tsconfig.build.json +++ b/packages/core-backend/tsconfig.build.json @@ -10,6 +10,7 @@ { "path": "../controller-utils/tsconfig.build.json" }, { "path": "../keyring-controller/tsconfig.build.json" }, { "path": "../messenger/tsconfig.build.json" }, + { "path": "../multichain-account-service/tsconfig.build.json" }, { "path": "../profile-sync-controller/tsconfig.build.json" } ], "include": ["../../types", "./src"] diff --git a/packages/core-backend/tsconfig.json b/packages/core-backend/tsconfig.json index b44a91d630..f9dfd1a0df 100644 --- a/packages/core-backend/tsconfig.json +++ b/packages/core-backend/tsconfig.json @@ -20,6 +20,9 @@ }, { "path": "../profile-sync-controller" + }, + { + "path": "../multichain-account-service" } ], "include": ["../../types", "./src"] From 73ced335f147ab8394d736489af96e4e4e10f805 Mon Sep 17 00:00:00 2001 From: mikesposito Date: Thu, 2 Jul 2026 21:55:40 +0200 Subject: [PATCH 2/2] feat: `MultichainTransactionsController` subscribes to websocket updates --- .../CHANGELOG.md | 2 + .../package.json | 1 + .../MultichainTransactionsController.test.ts | 61 ++++++ .../src/MultichainTransactionsController.ts | 86 +++++++- .../tsconfig.build.json | 1 + .../tsconfig.json | 1 + yarn.lock | 190 +++++++++++++++++- 7 files changed, 336 insertions(+), 6 deletions(-) diff --git a/packages/multichain-transactions-controller/CHANGELOG.md b/packages/multichain-transactions-controller/CHANGELOG.md index edfc30a405..2cb452d6c6 100644 --- a/packages/multichain-transactions-controller/CHANGELOG.md +++ b/packages/multichain-transactions-controller/CHANGELOG.md @@ -9,6 +9,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed +- **BREAKING:** `MultichainTransactionController` now requires a messenger with the `AccountActivityService:transactionUpdated` delegate event ([#0000](https://github.com/MetaMask/core/pull/0000)] + - The `MultichainTransactionsController` now relies on the `AccountActivityService:transactionUpdated` event to receive transaction updates. - Bump `@metamask/utils` from `^11.9.0` to `^11.11.0` ([#9074](https://github.com/MetaMask/core/pull/9074)) - Bump `@metamask/accounts-controller` from `^39.0.0` to `^39.0.4` ([#9058](https://github.com/MetaMask/core/pull/9058), [#9218](https://github.com/MetaMask/core/pull/9218), [#9231](https://github.com/MetaMask/core/pull/9231), [#9349](https://github.com/MetaMask/core/pull/9349)) - Bump `@metamask/polling-controller` from `^16.0.6` to `^16.0.8` ([#9218](https://github.com/MetaMask/core/pull/9218), [#9349](https://github.com/MetaMask/core/pull/9349)) diff --git a/packages/multichain-transactions-controller/package.json b/packages/multichain-transactions-controller/package.json index a5b038f122..daa41d5513 100644 --- a/packages/multichain-transactions-controller/package.json +++ b/packages/multichain-transactions-controller/package.json @@ -55,6 +55,7 @@ "dependencies": { "@metamask/accounts-controller": "^39.0.4", "@metamask/base-controller": "^9.1.0", + "@metamask/core-backend": "^6.3.3", "@metamask/keyring-api": "^23.3.0", "@metamask/keyring-internal-api": "^11.0.1", "@metamask/keyring-snap-client": "^9.0.2", diff --git a/packages/multichain-transactions-controller/src/MultichainTransactionsController.test.ts b/packages/multichain-transactions-controller/src/MultichainTransactionsController.test.ts index cf1ac2319d..0a533d4fb1 100644 --- a/packages/multichain-transactions-controller/src/MultichainTransactionsController.test.ts +++ b/packages/multichain-transactions-controller/src/MultichainTransactionsController.test.ts @@ -197,6 +197,7 @@ const setupController = ({ 'AccountsController:accountAdded', 'AccountsController:accountRemoved', 'AccountsController:accountTransactionsUpdated', + 'AccountActivityService:transactionUpdated', ], }); @@ -615,6 +616,66 @@ describe('MultichainTransactionsController', () => { }); }); + it('flips a pending non-EVM transaction to terminal on AccountActivityService:transactionUpdated', async () => { + const accountId = 'sol-account-id'; + const chain = + 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp' as unknown as CaipChainId; + const pending = { + id: 'sig-1', + account: accountId, + chain, + type: 'send' as const, + status: 'submitted' as const, + timestamp: 1, + from: [{ address: 'a', asset: null }], + to: [], + fees: [], + events: [{ status: 'submitted' as const, timestamp: 1 }], + }; + const { controller, rootMessenger } = setupController({ + state: { + nonEvmTransactions: { + [accountId]: { + [chain]: { + transactions: [pending], + next: null, + lastUpdated: Date.now(), + }, + }, + }, + }, + }); + + // Non-terminal / unknown updates are ignored. + rootMessenger.publish('AccountActivityService:transactionUpdated', { + id: 'sig-1', + chain, + status: 'submitted', + }); + rootMessenger.publish('AccountActivityService:transactionUpdated', { + id: 'does-not-exist', + chain, + status: 'confirmed', + }); + await waitForAllPromises(); + expect( + controller.state.nonEvmTransactions[accountId][chain].transactions[0] + .status, + ).toBe('submitted'); + + // A terminal update for a known pending tx flips its status. + rootMessenger.publish('AccountActivityService:transactionUpdated', { + id: 'sig-1', + chain, + status: 'confirmed', + }); + await waitForAllPromises(); + expect( + controller.state.nonEvmTransactions[accountId][chain].transactions[0] + .status, + ).toBe('confirmed'); + }); + it('initializes new accounts with empty transactions array when receiving updates', async () => { const { chain } = mockTransactionResult.data[0]; diff --git a/packages/multichain-transactions-controller/src/MultichainTransactionsController.ts b/packages/multichain-transactions-controller/src/MultichainTransactionsController.ts index d51575beb8..f13db9435e 100644 --- a/packages/multichain-transactions-controller/src/MultichainTransactionsController.ts +++ b/packages/multichain-transactions-controller/src/MultichainTransactionsController.ts @@ -9,6 +9,10 @@ import type { ControllerGetStateAction, ControllerStateChangeEvent, } from '@metamask/base-controller'; +import { + AccountActivityServiceTransactionUpdatedEvent, + Transaction as BackendTransactionUpdate, +} from '@metamask/core-backend'; import { isEvmAccountType, TransactionStatus } from '@metamask/keyring-api'; import type { Transaction, @@ -30,6 +34,24 @@ const controllerName = 'MultichainTransactionsController'; const MESSENGER_EXPOSED_METHODS = ['updateTransactionsForAccount'] as const; +/** + * Maps a backend WebSocket status string to a terminal keyring status, or + * `undefined` for non-terminal / unknown statuses (which are ignored). + * + * @param status - The status reported by the account-activity WebSocket. + * @returns The terminal {@link TransactionStatus}, or `undefined`. + */ +function toTerminalStatus(status: string): TransactionStatus | undefined { + const normalized = status.toLowerCase(); + if (normalized === TransactionStatus.Confirmed) { + return TransactionStatus.Confirmed; + } + if (normalized === TransactionStatus.Failed) { + return TransactionStatus.Failed; + } + return undefined; +} + /** * PaginationOptions * @@ -136,7 +158,8 @@ type AllowedActions = type AllowedEvents = | AccountsControllerAccountAddedEvent | AccountsControllerAccountRemovedEvent - | AccountsControllerAccountTransactionsUpdatedEvent; + | AccountsControllerAccountTransactionsUpdatedEvent + | AccountActivityServiceTransactionUpdatedEvent; /** * {@link MultichainTransactionsController}'s metadata. @@ -217,6 +240,13 @@ export class MultichainTransactionsController extends BaseController< (transactionsUpdate: AccountTransactionsUpdatedEventPayload) => this.#handleOnAccountTransactionsUpdated(transactionsUpdate), ); + // Client-owned terminal tracking: flip pending (Submitted) non-EVM entries to + // Confirmed/Failed from the account-activity WebSocket, replacing the snap's + // former confirmation tracking (see snap-transactions offload, ticket 5). + this.messenger.subscribe( + 'AccountActivityService:transactionUpdated', + (update) => this.#handleOnBackendTransactionUpdated(update), + ); } /** @@ -471,6 +501,60 @@ export class MultichainTransactionsController extends BaseController< }); } + /** + * Handles a transaction status update from the account-activity WebSocket. + * + * Finds the matching pending entry (by chain-specific id) and flips it to the + * reported terminal status. Non-terminal updates and unknown transactions are + * ignored. + * + * @param update - The backend transaction update. + */ + #handleOnBackendTransactionUpdated(update: BackendTransactionUpdate): void { + const terminalStatus = toTerminalStatus(update.status); + if (!terminalStatus) { + return; + } + + let location: + | { accountId: string; chain: CaipChainId; existing: Transaction } + | undefined; + for (const [accountId, chains] of Object.entries( + this.state.nonEvmTransactions, + )) { + for (const [chain, entry] of Object.entries(chains)) { + const existing = entry.transactions.find((tx) => tx.id === update.id); + if (existing) { + location = { accountId, chain: chain as CaipChainId, existing }; + break; + } + } + if (location) { + break; + } + } + + if (!location || location.existing.status === terminalStatus) { + return; + } + + const { accountId, chain } = location; + const updatedTransaction: Transaction = { + ...location.existing, + status: terminalStatus, + }; + + this.update((state) => { + const entry = state.nonEvmTransactions[accountId][chain]; + entry.transactions = entry.transactions.map((tx) => + tx.id === update.id ? updatedTransaction : tx, + ); + entry.lastUpdated = Date.now(); + }); + + this.#publishTransactionUpdateEvent(updatedTransaction); + } + /** * Gets a `KeyringClient` for a Snap. * diff --git a/packages/multichain-transactions-controller/tsconfig.build.json b/packages/multichain-transactions-controller/tsconfig.build.json index 695c01cd3d..53ae13938f 100644 --- a/packages/multichain-transactions-controller/tsconfig.build.json +++ b/packages/multichain-transactions-controller/tsconfig.build.json @@ -8,6 +8,7 @@ "references": [ { "path": "../accounts-controller/tsconfig.build.json" }, { "path": "../base-controller/tsconfig.build.json" }, + { "path": "../core-backend/tsconfig.build.json" }, { "path": "../keyring-controller/tsconfig.build.json" }, { "path": "../polling-controller/tsconfig.build.json" }, { "path": "../messenger/tsconfig.build.json" } diff --git a/packages/multichain-transactions-controller/tsconfig.json b/packages/multichain-transactions-controller/tsconfig.json index ce215a7394..a56f71cb08 100644 --- a/packages/multichain-transactions-controller/tsconfig.json +++ b/packages/multichain-transactions-controller/tsconfig.json @@ -6,6 +6,7 @@ "references": [ { "path": "../accounts-controller" }, { "path": "../base-controller" }, + { "path": "../core-backend" }, { "path": "../keyring-controller" }, { "path": "../polling-controller" }, { "path": "../messenger" } diff --git a/yarn.lock b/yarn.lock index 9e514a392f..ba1cd22f29 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5419,7 +5419,7 @@ __metadata: languageName: node linkType: hard -"@metamask/account-tree-controller@npm:^7.5.3, @metamask/account-tree-controller@workspace:packages/account-tree-controller": +"@metamask/account-tree-controller@npm:^7.5.2, @metamask/account-tree-controller@npm:^7.5.3, @metamask/account-tree-controller@workspace:packages/account-tree-controller": version: 0.0.0-use.local resolution: "@metamask/account-tree-controller@workspace:packages/account-tree-controller" dependencies: @@ -5456,7 +5456,7 @@ __metadata: languageName: unknown linkType: soft -"@metamask/accounts-controller@npm:^39.0.4, @metamask/accounts-controller@workspace:packages/accounts-controller": +"@metamask/accounts-controller@npm:^39.0.1, @metamask/accounts-controller@npm:^39.0.4, @metamask/accounts-controller@workspace:packages/accounts-controller": version: 0.0.0-use.local resolution: "@metamask/accounts-controller@workspace:packages/accounts-controller" dependencies: @@ -6297,7 +6297,7 @@ __metadata: languageName: unknown linkType: soft -"@metamask/core-backend@npm:^6.5.0, @metamask/core-backend@workspace:packages/core-backend": +"@metamask/core-backend@npm:^6.3.3, @metamask/core-backend@npm:^6.5.0, @metamask/core-backend@workspace:packages/core-backend": version: 0.0.0-use.local resolution: "@metamask/core-backend@workspace:packages/core-backend" dependencies: @@ -6306,6 +6306,7 @@ __metadata: "@metamask/controller-utils": "npm:^12.3.0" "@metamask/keyring-controller": "npm:^27.1.0" "@metamask/messenger": "npm:^1.2.0" + "@metamask/multichain-account-service": "npm:^10.0.3" "@metamask/profile-sync-controller": "npm:^28.2.0" "@metamask/utils": "npm:^11.11.0" "@tanstack/query-core": "npm:^5.62.16" @@ -6814,6 +6815,32 @@ __metadata: languageName: node linkType: hard +"@metamask/eth-snap-keyring@npm:^22.0.1": + version: 22.4.0 + resolution: "@metamask/eth-snap-keyring@npm:22.4.0" + dependencies: + "@ethereumjs/tx": "npm:^5.4.0" + "@metamask/eth-sig-util": "npm:^8.2.0" + "@metamask/keyring-internal-api": "npm:^11.0.1" + "@metamask/keyring-internal-snap-client": "npm:^10.0.4" + "@metamask/keyring-sdk": "npm:^2.2.0" + "@metamask/keyring-snap-sdk": "npm:^9.1.0" + "@metamask/keyring-utils": "npm:^3.3.1" + "@metamask/messenger": "npm:^1.1.1" + "@metamask/snaps-controllers": "npm:^19.0.1" + "@metamask/snaps-sdk": "npm:^11.0.0" + "@metamask/snaps-utils": "npm:^12.2.1" + "@metamask/superstruct": "npm:^3.1.0" + "@metamask/utils": "npm:^11.11.0" + "@types/uuid": "npm:^9.0.8" + async-mutex: "npm:^0.5.0" + uuid: "npm:^9.0.1" + peerDependencies: + "@metamask/keyring-api": ^23.0.0 + checksum: 10/16cdf47083d5feed3346ae19a507ff491e4d9c53e15c943670b25441bdcfc71ff8d99f25c6bdb56035942e65fec77087582ee1fdf786cc2380de3144a5fa41b0 + languageName: node + linkType: hard + "@metamask/eth-snap-keyring@npm:^22.3.0": version: 22.3.0 resolution: "@metamask/eth-snap-keyring@npm:22.3.0" @@ -7190,7 +7217,19 @@ __metadata: languageName: node linkType: hard -"@metamask/keyring-controller@npm:^27.1.0, @metamask/keyring-controller@workspace:packages/keyring-controller": +"@metamask/keyring-api@npm:^23.4.0": + version: 23.4.0 + resolution: "@metamask/keyring-api@npm:23.4.0" + dependencies: + "@metamask/keyring-utils": "npm:^3.3.1" + "@metamask/superstruct": "npm:^3.1.0" + "@metamask/utils": "npm:^11.11.0" + bitcoin-address-validation: "npm:^2.2.3" + checksum: 10/2a8152faac3076e12254c74c2e92931a3ecb22b3772985b6e4967aa42be1aa1f294ef56476e3ef6f16c430ee35ab2de38159a2516af01d231bdee9974187ddbf + languageName: node + linkType: hard + +"@metamask/keyring-controller@npm:^27.0.0, @metamask/keyring-controller@npm:^27.1.0, @metamask/keyring-controller@workspace:packages/keyring-controller": version: 0.0.0-use.local resolution: "@metamask/keyring-controller@workspace:packages/keyring-controller" dependencies: @@ -7254,6 +7293,19 @@ __metadata: languageName: node linkType: hard +"@metamask/keyring-internal-snap-client@npm:^10.0.4": + version: 10.0.4 + resolution: "@metamask/keyring-internal-snap-client@npm:10.0.4" + dependencies: + "@metamask/keyring-api": "npm:^23.4.0" + "@metamask/keyring-internal-api": "npm:^11.0.1" + "@metamask/keyring-snap-client": "npm:^9.1.0" + "@metamask/keyring-utils": "npm:^3.3.1" + "@metamask/messenger": "npm:^1.1.1" + checksum: 10/6718176b1e24ca575eb351252b5246804eb2030bcce2f48c03df63b43ad9da86019ec3cd957c70d08a7ee8624c27ab8355dcc3eaca6b3e97073599ee604e1697 + languageName: node + linkType: hard + "@metamask/keyring-sdk@npm:^2.0.2, @metamask/keyring-sdk@npm:^2.2.0": version: 2.2.0 resolution: "@metamask/keyring-sdk@npm:2.2.0" @@ -7288,6 +7340,38 @@ __metadata: languageName: node linkType: hard +"@metamask/keyring-snap-client@npm:^9.1.0": + version: 9.1.0 + resolution: "@metamask/keyring-snap-client@npm:9.1.0" + dependencies: + "@metamask/keyring-api": "npm:^23.4.0" + "@metamask/keyring-utils": "npm:^3.3.1" + "@metamask/superstruct": "npm:^3.1.0" + "@types/uuid": "npm:^9.0.8" + uuid: "npm:^9.0.1" + webextension-polyfill: "npm:^0.12.0" + peerDependencies: + "@metamask/providers": ^19.0.0 + checksum: 10/af1aff0318ee6380b2d3f01439df13cfcfe8892df13eb0aaf294eea50ddcfb739d4e10975493ff50a1e79fa413797457bb6eb7063ef108ea62b4a732b73a15e8 + languageName: node + linkType: hard + +"@metamask/keyring-snap-sdk@npm:^9.0.1, @metamask/keyring-snap-sdk@npm:^9.1.0": + version: 9.1.0 + resolution: "@metamask/keyring-snap-sdk@npm:9.1.0" + dependencies: + "@metamask/keyring-utils": "npm:^3.3.1" + "@metamask/snaps-sdk": "npm:^11.0.0" + "@metamask/superstruct": "npm:^3.1.0" + "@metamask/utils": "npm:^11.11.0" + webextension-polyfill: "npm:^0.12.0" + peerDependencies: + "@metamask/keyring-api": ^23.0.0 + "@metamask/providers": ^19.0.0 + checksum: 10/aefa41c793e7323eed6e508c636580d66f3ba0d593f633bb52d686d29e26d858d9a676b1377eeca92cb6092bbfa9a4a26a44474f0384104f65d109dd7cc03918 + languageName: node + linkType: hard + "@metamask/keyring-snap-sdk@npm:^9.0.2": version: 9.0.2 resolution: "@metamask/keyring-snap-sdk@npm:9.0.2" @@ -7304,7 +7388,7 @@ __metadata: languageName: node linkType: hard -"@metamask/keyring-utils@npm:^3.2.0, @metamask/keyring-utils@npm:^3.3.1": +"@metamask/keyring-utils@npm:^3.2.0, @metamask/keyring-utils@npm:^3.2.1, @metamask/keyring-utils@npm:^3.3.1": version: 3.3.1 resolution: "@metamask/keyring-utils@npm:3.3.1" dependencies: @@ -7520,6 +7604,37 @@ __metadata: languageName: unknown linkType: soft +"@metamask/multichain-account-service@npm:^10.0.3": + version: 10.0.3 + resolution: "@metamask/multichain-account-service@npm:10.0.3" + dependencies: + "@ethereumjs/util": "npm:^9.1.0" + "@metamask/accounts-controller": "npm:^39.0.1" + "@metamask/base-controller": "npm:^9.1.0" + "@metamask/eth-snap-keyring": "npm:^22.0.1" + "@metamask/key-tree": "npm:^10.1.1" + "@metamask/keyring-api": "npm:^23.1.0" + "@metamask/keyring-controller": "npm:^27.0.0" + "@metamask/keyring-internal-api": "npm:^11.0.1" + "@metamask/keyring-snap-client": "npm:^9.0.2" + "@metamask/keyring-utils": "npm:^3.2.1" + "@metamask/messenger": "npm:^1.2.0" + "@metamask/snap-account-service": "npm:^0.3.1" + "@metamask/snaps-controllers": "npm:^19.0.0" + "@metamask/snaps-sdk": "npm:^11.0.0" + "@metamask/snaps-utils": "npm:^12.1.2" + "@metamask/superstruct": "npm:^3.1.0" + "@metamask/utils": "npm:^11.9.0" + async-mutex: "npm:^0.5.0" + lodash: "npm:^4.17.21" + peerDependencies: + "@metamask/account-api": ^1.0.4 + "@metamask/providers": ^22.0.0 + webextension-polyfill: ^0.10.0 || ^0.11.0 || ^0.12.0 + checksum: 10/ed945f17e571b96baab959c29e5bdc68573de6e613d79834fbd9eb55025e7c85d3e92ae4cf8454ccefdb45e6331ecfe9f859feb4217cbe1b3083086166128057 + languageName: node + linkType: hard + "@metamask/multichain-account-service@npm:^11.1.0, @metamask/multichain-account-service@workspace:packages/multichain-account-service": version: 0.0.0-use.local resolution: "@metamask/multichain-account-service@workspace:packages/multichain-account-service" @@ -7639,6 +7754,7 @@ __metadata: "@metamask/accounts-controller": "npm:^39.0.4" "@metamask/auto-changelog": "npm:^6.1.0" "@metamask/base-controller": "npm:^9.1.0" + "@metamask/core-backend": "npm:^6.3.3" "@metamask/keyring-api": "npm:^23.3.0" "@metamask/keyring-controller": "npm:^27.1.0" "@metamask/keyring-internal-api": "npm:^11.0.1" @@ -8508,6 +8624,25 @@ __metadata: languageName: unknown linkType: soft +"@metamask/snap-account-service@npm:^0.3.1": + version: 0.3.1 + resolution: "@metamask/snap-account-service@npm:0.3.1" + dependencies: + "@metamask/account-api": "npm:^1.0.4" + "@metamask/account-tree-controller": "npm:^7.5.2" + "@metamask/eth-snap-keyring": "npm:^22.0.1" + "@metamask/keyring-api": "npm:^23.1.0" + "@metamask/keyring-controller": "npm:^27.0.0" + "@metamask/keyring-snap-sdk": "npm:^9.0.1" + "@metamask/messenger": "npm:^1.2.0" + "@metamask/snaps-controllers": "npm:^19.0.0" + "@metamask/snaps-sdk": "npm:^11.0.0" + "@metamask/utils": "npm:^11.9.0" + lodash: "npm:^4.17.21" + checksum: 10/de442502dd59910e991dd57b0c107bdc8fd5b027a2190350f2d6a1a68913f0e65d0e46a3f3cc47aee8a824c5e6dc8062a9f5ecadb4f8b62b92efe71cb4404094 + languageName: node + linkType: hard + "@metamask/snap-account-service@npm:^1.0.0, @metamask/snap-account-service@workspace:packages/snap-account-service": version: 0.0.0-use.local resolution: "@metamask/snap-account-service@workspace:packages/snap-account-service" @@ -8623,6 +8758,20 @@ __metadata: languageName: node linkType: hard +"@metamask/snaps-sdk@npm:^11.1.1": + version: 11.1.1 + resolution: "@metamask/snaps-sdk@npm:11.1.1" + dependencies: + "@metamask/key-tree": "npm:^10.1.1" + "@metamask/providers": "npm:^22.1.1" + "@metamask/rpc-errors": "npm:^7.0.3" + "@metamask/superstruct": "npm:^3.2.1" + "@metamask/utils": "npm:^11.11.0" + luxon: "npm:^3.5.0" + checksum: 10/8419625775b83045d98c4ed920002ad884471e2303f6650104c97457c238f095ff35030663ddf111ebb6ce8f4cd915f57b7b9a5597d00288093701dbb79e787c + languageName: node + linkType: hard + "@metamask/snaps-utils@npm:^12.1.2, @metamask/snaps-utils@npm:^12.1.3, @metamask/snaps-utils@npm:^12.2.0": version: 12.2.0 resolution: "@metamask/snaps-utils@npm:12.2.0" @@ -8654,6 +8803,37 @@ __metadata: languageName: node linkType: hard +"@metamask/snaps-utils@npm:^12.2.1": + version: 12.2.1 + resolution: "@metamask/snaps-utils@npm:12.2.1" + dependencies: + "@babel/core": "npm:^7.23.2" + "@babel/types": "npm:^7.23.0" + "@metamask/key-tree": "npm:^10.1.1" + "@metamask/messenger": "npm:^1.2.0" + "@metamask/permission-controller": "npm:^13.1.1" + "@metamask/rpc-errors": "npm:^7.0.3" + "@metamask/slip44": "npm:^4.4.0" + "@metamask/snaps-registry": "npm:^4.0.0" + "@metamask/snaps-sdk": "npm:^11.1.1" + "@metamask/superstruct": "npm:^3.2.1" + "@metamask/utils": "npm:^11.11.0" + "@scure/base": "npm:^1.1.1" + chalk: "npm:^4.1.2" + cron-parser: "npm:^4.5.0" + fast-deep-equal: "npm:^3.1.3" + fast-json-stable-stringify: "npm:^2.1.0" + fast-xml-parser: "npm:^5.5.6" + luxon: "npm:^3.5.0" + marked: "npm:^12.0.1" + rfdc: "npm:^1.3.0" + semver: "npm:^7.5.4" + ses: "npm:^1.15.0" + validate-npm-package-name: "npm:^5.0.0" + checksum: 10/fda8caefa414d9755a2305b345b5bbbf30ee614215a49070449f314d5d906c645457cf0d7f4881a82f69d398aff5ad2fe9c648bbb2a5003c29c2d01e2f42f199 + languageName: node + linkType: hard + "@metamask/social-controllers@workspace:packages/social-controllers": version: 0.0.0-use.local resolution: "@metamask/social-controllers@workspace:packages/social-controllers"