From 780d2bdf409ce32979c043802bf61ecf91182e21 Mon Sep 17 00:00:00 2001 From: Charly Chevalier Date: Mon, 12 Jan 2026 14:39:39 +0100 Subject: [PATCH 01/11] feat: add KeyringInternalFeature{,s} support --- packages/keyring-internal-api/CHANGELOG.md | 10 +++++++ packages/keyring-internal-api/src/versions.ts | 12 ++++---- packages/keyring-snap-bridge/CHANGELOG.md | 6 ++++ .../keyring-snap-bridge/src/SnapKeyring.ts | 30 ++++++++++--------- .../keyring-snap-bridge/src/versions.test.ts | 26 ++++++++-------- packages/keyring-snap-bridge/src/versions.ts | 25 ++++++++-------- 6 files changed, 65 insertions(+), 44 deletions(-) diff --git a/packages/keyring-internal-api/CHANGELOG.md b/packages/keyring-internal-api/CHANGELOG.md index 9adb0d738..55cd46a03 100644 --- a/packages/keyring-internal-api/CHANGELOG.md +++ b/packages/keyring-internal-api/CHANGELOG.md @@ -7,6 +7,16 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +### Added + +- Add `KeyringInternalFeature` and `KeyringInternalFeatures` support ([#TODO](https://github.com/MetaMask/accounts/pull/TODO)) + - They can be used to describe the internal feature supported by a keyring (for internal use). + +### Removed + +- **BREAKING:** Remove `KeyringVersion` support ([#TODO](https://github.com/MetaMask/accounts/pull/TODO)) + - Use `KeyringInternalFeature` and `KeyringInternalFeatures` instead. + ## [9.1.1] ### Changed diff --git a/packages/keyring-internal-api/src/versions.ts b/packages/keyring-internal-api/src/versions.ts index 4a42f19cd..02cb07cd7 100644 --- a/packages/keyring-internal-api/src/versions.ts +++ b/packages/keyring-internal-api/src/versions.ts @@ -1,12 +1,14 @@ -export enum KeyringVersion { - /** Default. */ - V1 = 'v1', - +export enum KeyringInternalFeature { /** * Introduction of `KeyringRequest.origin`. * * Snap will now receive the `origin` as part of a `KeyringRequest` when `submitRequest` is invoked. * We also expect Snaps to display this `origin` in their confirmation screens (if any). */ - V2 = 'v2', + UseOrigin = 'use-origin', } + +/** + * Type representing a set of keyring internal features. + */ +export type KeyringInternalFeatures = Set; diff --git a/packages/keyring-snap-bridge/CHANGELOG.md b/packages/keyring-snap-bridge/CHANGELOG.md index 30baa95b1..d3284f780 100644 --- a/packages/keyring-snap-bridge/CHANGELOG.md +++ b/packages/keyring-snap-bridge/CHANGELOG.md @@ -7,6 +7,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +### Removed + +- **BREAKING:** Remove `KeyringVersion` support ([#TODO](https://github.com/MetaMask/accounts/pull/TODO)) + - Both `getKeyringVersionFromPlatform`, `PLATFORM_VERSION_TO_KEYRING_VERSION` got removed too. + - Use `KeyringInternalFeature` instead. + ### Changed - Bump `@metamask/snaps-controllers` from `^14.0.1` to `^17.2.0` ([#422](https://github.com/MetaMask/accounts/pull/422)) diff --git a/packages/keyring-snap-bridge/src/SnapKeyring.ts b/packages/keyring-snap-bridge/src/SnapKeyring.ts index 5e20ef214..a4795115a 100644 --- a/packages/keyring-snap-bridge/src/SnapKeyring.ts +++ b/packages/keyring-snap-bridge/src/SnapKeyring.ts @@ -28,8 +28,9 @@ import { AccountTransactionsUpdatedEventStruct, AnyAccountType, } from '@metamask/keyring-api'; -import { - KeyringVersion, +import type { + KeyringInternalFeatures, + KeyringInternalFeature, toKeyringRequestV1, type InternalAccount, } from '@metamask/keyring-internal-api'; @@ -84,7 +85,7 @@ import { toJson, unique, } from './util'; -import { getKeyringVersionFromPlatform } from './versions'; +import { getKeyringFeaturesFromPlatform } from './versions'; export const SNAP_KEYRING_TYPE = 'Snap Keyring'; @@ -248,13 +249,13 @@ export class SnapKeyring { } /** - * Gets keyring's version for a given Snap. + * Gets keyring's features for a given Snap. * * @param snapId - The Snap ID. - * @returns The Snap's keyring version. + * @returns The Snap's keyring features. */ - #getKeyringVersion(snapId: SnapId): KeyringVersion { - return getKeyringVersionFromPlatform((version: SemVerVersion) => { + #getKeyringFeatures(snapId: SnapId): KeyringInternalFeatures { + return getKeyringFeaturesFromPlatform((version: SemVerVersion) => { return this.#messenger.call( 'SnapController:isMinimumPlatformVersion', snapId, @@ -1019,21 +1020,22 @@ export class SnapKeyring { * @param options.version - The supported keyring version for the Snap. * @param options.snapId - The Snap ID to submit the request to. * @param options.request - The Snap request. + * @param options.features * @returns A promise that resolves to the keyring response from the Snap. */ - async #submitSnapRequestForVersion({ + async #submitSnapRequestForFeatures({ snapId, - version, + features, request, }: { snapId: SnapId; - version: KeyringVersion; + features: KeyringInternalFeatures; request: KeyringRequest; }): Promise { // Get specific client for that Snap. const client = this.#snapClient.withSnapId(snapId); - if (version === KeyringVersion.V1) { + if (!features.has(KeyringInternalFeature.UseOrigin)) { return await client.submitRequestV1(toKeyringRequestV1(request)); } @@ -1093,7 +1095,7 @@ export class SnapKeyring { ); try { - const version = this.#getKeyringVersion(snapId); + const features = this.#getKeyringFeatures(snapId); const request = { id: requestId, @@ -1108,8 +1110,8 @@ export class SnapKeyring { log('Submit Snap request: ', request); - const response = await this.#submitSnapRequestForVersion({ - version, + const response = await this.#submitSnapRequestForFeatures({ + features, snapId, request, }); diff --git a/packages/keyring-snap-bridge/src/versions.test.ts b/packages/keyring-snap-bridge/src/versions.test.ts index 0c39b1579..fe039a752 100644 --- a/packages/keyring-snap-bridge/src/versions.test.ts +++ b/packages/keyring-snap-bridge/src/versions.test.ts @@ -1,35 +1,35 @@ -import { KeyringVersion } from '@metamask/keyring-internal-api'; +import { KeyringInternalFeature } from '@metamask/keyring-internal-api'; import { isValidSemVerVersion, type SemVerVersion } from '@metamask/utils'; import { - getKeyringVersionFromPlatform, - PLATFORM_VERSION_TO_KEYRING_VERSION, + getKeyringFeaturesFromPlatform, + PLATFORM_VERSION_TO_KEYRING_FEATURES, } from './versions'; -describe('getKeyringVersionFromPlatform', () => { - it('gets the keyring version v1 as default', () => { +describe('getKeyringFeaturesFromPlatform', () => { + it('gets an empty feature set as default', () => { const isSupportedVersion = (): boolean => false; - expect(getKeyringVersionFromPlatform(isSupportedVersion)).toBe( - KeyringVersion.V1, + expect(getKeyringFeaturesFromPlatform(isSupportedVersion)).toStrictEqual( + new Set(), ); }); - it('gets the keyring version v2 if the platform version is 7.0.0', () => { + it('gets the UseOrigin feature if the platform version is 7.0.0', () => { const isSupportedVersion = (version: SemVerVersion): boolean => { return version === '7.0.0'; }; - expect(getKeyringVersionFromPlatform(isSupportedVersion)).toBe( - KeyringVersion.V2, + expect(getKeyringFeaturesFromPlatform(isSupportedVersion)).toStrictEqual( + new Set([KeyringInternalFeature.UseOrigin]), ); }); }); -describe('PLATFORM_VERSION_TO_KEYRING_VERSION', () => { - it.each(PLATFORM_VERSION_TO_KEYRING_VERSION)( +describe('PLATFORM_VERSION_TO_KEYRING_FEATURES', () => { + it.each(PLATFORM_VERSION_TO_KEYRING_FEATURES)( 'is a valid semver version: %s', - // `PLATFORM_VERSION_TO_KEYRING_VERSION` items are flattened by `it.each`, no need + // `PLATFORM_VERSION_TO_KEYRING_FEATURES` items are flattened by `it.each`, no need // to destructure the tuple here. (version) => { expect(isValidSemVerVersion(version)).toBe(true); diff --git a/packages/keyring-snap-bridge/src/versions.ts b/packages/keyring-snap-bridge/src/versions.ts index b09c783e6..553127a54 100644 --- a/packages/keyring-snap-bridge/src/versions.ts +++ b/packages/keyring-snap-bridge/src/versions.ts @@ -1,36 +1,37 @@ -import { KeyringVersion } from '@metamask/keyring-internal-api'; +import type { KeyringInternalFeatures } from '@metamask/keyring-internal-api'; +import { KeyringInternalFeature } from '@metamask/keyring-internal-api'; import type { SemVerVersion } from '@metamask/utils'; /** - * Mapping of the Snap platform version to its `KeyringVersion` equivalent. + * Mapping of the Snap platform version to its `KeyringInternalFeatures` equivalent. * * NOTE: We use an array here to preserve ordering of each versions. */ -export const PLATFORM_VERSION_TO_KEYRING_VERSION = [ +export const PLATFORM_VERSION_TO_KEYRING_FEATURES = [ // ! NOTE: This versions needs to be sorted in a descending order (highest platform version first). // Introduction of `KeyringRequest.origin`. - ['7.0.0', KeyringVersion.V2], + ['7.0.0', new Set([KeyringInternalFeature.UseOrigin])], ] as const; /** - * Gets keyring's version for a given Snap. + * Gets keyring's features for a given Snap. * * @param isSupportedVersion - Predicate to check if the version is supported. - * @returns The Snap's keyring version. + * @returns The Snap's keyring features. */ -export function getKeyringVersionFromPlatform( +export function getKeyringFeaturesFromPlatform( isSupportedVersion: (version: SemVerVersion) => boolean, -): KeyringVersion { +): KeyringInternalFeatures { for (const [ platformVersion, - keyringVersion, - ] of PLATFORM_VERSION_TO_KEYRING_VERSION) { + keyringFeatures, + ] of PLATFORM_VERSION_TO_KEYRING_FEATURES) { // NOTE: We are type-casting, but we have a unit tests that make sure all // versions are following the semver spec. if (isSupportedVersion(platformVersion as SemVerVersion)) { - return keyringVersion; + return keyringFeatures; } } - return KeyringVersion.V1; + return new Set(); } From e83cacc664c30ed6842d3b66fb8b247378a6c38c Mon Sep 17 00:00:00 2001 From: Charly Chevalier Date: Mon, 12 Jan 2026 14:41:55 +0100 Subject: [PATCH 02/11] chore: remove use of TODO --- packages/keyring-internal-api/CHANGELOG.md | 4 ++-- packages/keyring-snap-bridge/CHANGELOG.md | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/keyring-internal-api/CHANGELOG.md b/packages/keyring-internal-api/CHANGELOG.md index 55cd46a03..5b26da765 100644 --- a/packages/keyring-internal-api/CHANGELOG.md +++ b/packages/keyring-internal-api/CHANGELOG.md @@ -9,12 +9,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added -- Add `KeyringInternalFeature` and `KeyringInternalFeatures` support ([#TODO](https://github.com/MetaMask/accounts/pull/TODO)) +- Add `KeyringInternalFeature` and `KeyringInternalFeatures` support ([#423](https://github.com/MetaMask/accounts/pull/423)) - They can be used to describe the internal feature supported by a keyring (for internal use). ### Removed -- **BREAKING:** Remove `KeyringVersion` support ([#TODO](https://github.com/MetaMask/accounts/pull/TODO)) +- **BREAKING:** Remove `KeyringVersion` support ([#423](https://github.com/MetaMask/accounts/pull/423)) - Use `KeyringInternalFeature` and `KeyringInternalFeatures` instead. ## [9.1.1] diff --git a/packages/keyring-snap-bridge/CHANGELOG.md b/packages/keyring-snap-bridge/CHANGELOG.md index d3284f780..1da17b437 100644 --- a/packages/keyring-snap-bridge/CHANGELOG.md +++ b/packages/keyring-snap-bridge/CHANGELOG.md @@ -9,7 +9,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Removed -- **BREAKING:** Remove `KeyringVersion` support ([#TODO](https://github.com/MetaMask/accounts/pull/TODO)) +- **BREAKING:** Remove `KeyringVersion` support ([#423](https://github.com/MetaMask/accounts/pull/423)) - Both `getKeyringVersionFromPlatform`, `PLATFORM_VERSION_TO_KEYRING_VERSION` got removed too. - Use `KeyringInternalFeature` instead. From f90b12359c82a008262b8f6111516ba75d5c1b70 Mon Sep 17 00:00:00 2001 From: Charly Chevalier Date: Mon, 12 Jan 2026 14:59:35 +0100 Subject: [PATCH 03/11] fix: fix build --- packages/keyring-snap-bridge/src/SnapKeyring.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/keyring-snap-bridge/src/SnapKeyring.ts b/packages/keyring-snap-bridge/src/SnapKeyring.ts index a4795115a..284ee17b5 100644 --- a/packages/keyring-snap-bridge/src/SnapKeyring.ts +++ b/packages/keyring-snap-bridge/src/SnapKeyring.ts @@ -30,9 +30,11 @@ import { } from '@metamask/keyring-api'; import type { KeyringInternalFeatures, + InternalAccount, +} from '@metamask/keyring-internal-api'; +import { KeyringInternalFeature, toKeyringRequestV1, - type InternalAccount, } from '@metamask/keyring-internal-api'; import { KeyringInternalSnapClient } from '@metamask/keyring-internal-snap-client'; import { From 113fa5b50b6b898673c5566211bdc4eb0d4f8e53 Mon Sep 17 00:00:00 2001 From: Charly Chevalier Date: Mon, 12 Jan 2026 15:31:16 +0100 Subject: [PATCH 04/11] refactor: simplify + lint --- .../keyring-snap-bridge/src/SnapKeyring.ts | 44 +++++-------------- 1 file changed, 10 insertions(+), 34 deletions(-) diff --git a/packages/keyring-snap-bridge/src/SnapKeyring.ts b/packages/keyring-snap-bridge/src/SnapKeyring.ts index 284ee17b5..e0cb9532d 100644 --- a/packages/keyring-snap-bridge/src/SnapKeyring.ts +++ b/packages/keyring-snap-bridge/src/SnapKeyring.ts @@ -1015,35 +1015,6 @@ export class SnapKeyring { }); } - /** - * Submits a request to a Snap and fix-up the payload depending on the version currently supported. - * - * @param options - The options for the Snap request. - * @param options.version - The supported keyring version for the Snap. - * @param options.snapId - The Snap ID to submit the request to. - * @param options.request - The Snap request. - * @param options.features - * @returns A promise that resolves to the keyring response from the Snap. - */ - async #submitSnapRequestForFeatures({ - snapId, - features, - request, - }: { - snapId: SnapId; - features: KeyringInternalFeatures; - request: KeyringRequest; - }): Promise { - // Get specific client for that Snap. - const client = this.#snapClient.withSnapId(snapId); - - if (!features.has(KeyringInternalFeature.UseOrigin)) { - return await client.submitRequestV1(toKeyringRequestV1(request)); - } - - return await client.submitRequest(request); - } - /** * Submits a request to a Snap. * @@ -1112,11 +1083,16 @@ export class SnapKeyring { log('Submit Snap request: ', request); - const response = await this.#submitSnapRequestForFeatures({ - features, - snapId, - request, - }); + // Get specific client for that Snap. + const client = this.#snapClient.withSnapId(snapId); + + let response: KeyringResponse; + if (features.has(KeyringInternalFeature.UseOrigin)) { + response = await client.submitRequest(request); + } else { + // V1 keyring request did not support the `origin` field. + response = await client.submitRequestV1(toKeyringRequestV1(request)); + } // Some methods, like the ones used to prepare and patch user operations, // require the Snap to answer synchronously in order to work with the From ca83954b15deb1519f2846bad45062292280d2fb Mon Sep 17 00:00:00 2001 From: Charly Chevalier Date: Mon, 12 Jan 2026 15:49:33 +0100 Subject: [PATCH 05/11] chore: lint --- packages/keyring-snap-bridge/src/SnapKeyring.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/keyring-snap-bridge/src/SnapKeyring.ts b/packages/keyring-snap-bridge/src/SnapKeyring.ts index e0cb9532d..45fb29fd9 100644 --- a/packages/keyring-snap-bridge/src/SnapKeyring.ts +++ b/packages/keyring-snap-bridge/src/SnapKeyring.ts @@ -13,7 +13,6 @@ import type { ResolvedAccountAddress, CaipChainId, MetaMaskOptions, - KeyringRequest, KeyringResponse, } from '@metamask/keyring-api'; import { From 4910212830050ea858bf241f62742c8966b28f4d Mon Sep 17 00:00:00 2001 From: Charly Chevalier Date: Mon, 12 Jan 2026 15:57:31 +0100 Subject: [PATCH 06/11] chore: fix changelog --- packages/keyring-snap-bridge/CHANGELOG.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/keyring-snap-bridge/CHANGELOG.md b/packages/keyring-snap-bridge/CHANGELOG.md index 1da17b437..6564ad042 100644 --- a/packages/keyring-snap-bridge/CHANGELOG.md +++ b/packages/keyring-snap-bridge/CHANGELOG.md @@ -7,18 +7,18 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] -### Removed - -- **BREAKING:** Remove `KeyringVersion` support ([#423](https://github.com/MetaMask/accounts/pull/423)) - - Both `getKeyringVersionFromPlatform`, `PLATFORM_VERSION_TO_KEYRING_VERSION` got removed too. - - Use `KeyringInternalFeature` instead. - ### Changed - Bump `@metamask/snaps-controllers` from `^14.0.1` to `^17.2.0` ([#422](https://github.com/MetaMask/accounts/pull/422)) - Bump `@metamask/snaps-sdk` from `^9.0.0` to `^10.3.0` ([#422](https://github.com/MetaMask/accounts/pull/422)) - Bump `@metamask/snaps-utils` from `^11.0.0` to `^11.7.0` ([#422](https://github.com/MetaMask/accounts/pull/422)) +### Removed + +- **BREAKING:** Remove `KeyringVersion` support ([#423](https://github.com/MetaMask/accounts/pull/423)) + - Both `getKeyringVersionFromPlatform`, `PLATFORM_VERSION_TO_KEYRING_VERSION` got removed too. + - Use `KeyringInternalFeature` instead. + ## [18.0.2] ### Fixed From 63d35c7b921c641622f0b4f1c9255044aa76fed6 Mon Sep 17 00:00:00 2001 From: Charly Chevalier Date: Mon, 12 Jan 2026 16:31:06 +0100 Subject: [PATCH 07/11] refactor: v1 -> legacy --- .../keyring-internal-api/src/compatibility/index.ts | 2 +- .../src/compatibility/{v1.test.ts => legacy.test.ts} | 6 +++--- .../src/compatibility/{v1.ts => legacy.ts} | 12 ++++++------ .../src/KeyringInternalSnapClient.test.ts | 4 ++-- .../src/KeyringInternalSnapClient.ts | 6 +++--- packages/keyring-snap-bridge/src/SnapKeyring.ts | 4 ++-- 6 files changed, 17 insertions(+), 17 deletions(-) rename packages/keyring-internal-api/src/compatibility/{v1.test.ts => legacy.test.ts} (73%) rename packages/keyring-internal-api/src/compatibility/{v1.ts => legacy.ts} (52%) diff --git a/packages/keyring-internal-api/src/compatibility/index.ts b/packages/keyring-internal-api/src/compatibility/index.ts index 5b98253d9..630b8e4eb 100644 --- a/packages/keyring-internal-api/src/compatibility/index.ts +++ b/packages/keyring-internal-api/src/compatibility/index.ts @@ -1 +1 @@ -export * from './v1'; +export * from './legacy'; diff --git a/packages/keyring-internal-api/src/compatibility/v1.test.ts b/packages/keyring-internal-api/src/compatibility/legacy.test.ts similarity index 73% rename from packages/keyring-internal-api/src/compatibility/v1.test.ts rename to packages/keyring-internal-api/src/compatibility/legacy.test.ts index b4d1fc4b9..000b22d1d 100644 --- a/packages/keyring-internal-api/src/compatibility/v1.test.ts +++ b/packages/keyring-internal-api/src/compatibility/legacy.test.ts @@ -1,9 +1,9 @@ import { EthMethod, EthScope } from '@metamask/keyring-api'; -import { toKeyringRequestV1 } from './v1'; +import { toLegacyKeyringRequest } from './legacy'; describe('v1', () => { - describe('toKeyringRequestV1', () => { + describe('toLegacyKeyringRequest', () => { const request = { id: 'mock-request-id', scope: EthScope.Mainnet, @@ -17,7 +17,7 @@ describe('v1', () => { const { origin, ...requestV1 } = request; it('converts a keyring request to a keyring request v1', () => { - expect(toKeyringRequestV1(request)).toStrictEqual(requestV1); + expect(toLegacyKeyringRequest(request)).toStrictEqual(requestV1); }); }); }); diff --git a/packages/keyring-internal-api/src/compatibility/v1.ts b/packages/keyring-internal-api/src/compatibility/legacy.ts similarity index 52% rename from packages/keyring-internal-api/src/compatibility/v1.ts rename to packages/keyring-internal-api/src/compatibility/legacy.ts index d51a09463..5f07809e1 100644 --- a/packages/keyring-internal-api/src/compatibility/v1.ts +++ b/packages/keyring-internal-api/src/compatibility/legacy.ts @@ -8,18 +8,18 @@ import { omit, type Infer } from '@metamask/superstruct'; /** * Keyring request (v1). */ -export const KeyringRequestV1Struct = omit(KeyringRequestStruct, ['origin']); +export const LegacyKeyringRequestStruct = omit(KeyringRequestStruct, ['origin']); -export type KeyringRequestV1 = Infer; +export type LegacyKeyringRequest = Infer; /** * Response to a call to `submitRequest` (v1). */ -export const KeyringResponseV1Struct = KeyringResponseStruct; +export const LegacyKeyringResponseStruct = KeyringResponseStruct; -export type KeyringResponseV1 = Infer; +export type LegacyKeyringResponse = Infer; -export const SubmitRequestResponseV1Struct = KeyringResponseV1Struct; +export const SubmitRequestResponseV1Struct = LegacyKeyringResponseStruct; /** * Converts a keyring request to a keyring request v1. @@ -27,7 +27,7 @@ export const SubmitRequestResponseV1Struct = KeyringResponseV1Struct; * @param request - A keyring request. * @returns A keyring request v1. */ -export function toKeyringRequestV1(request: KeyringRequest): KeyringRequestV1 { +export function toLegacyKeyringRequest(request: KeyringRequest): LegacyKeyringRequest { const { origin, ...requestV1 } = request; return requestV1; diff --git a/packages/keyring-internal-snap-client/src/KeyringInternalSnapClient.test.ts b/packages/keyring-internal-snap-client/src/KeyringInternalSnapClient.test.ts index 525ec0f56..56f2c7192 100644 --- a/packages/keyring-internal-snap-client/src/KeyringInternalSnapClient.test.ts +++ b/packages/keyring-internal-snap-client/src/KeyringInternalSnapClient.test.ts @@ -3,7 +3,7 @@ import { EthScope, type KeyringAccount, } from '@metamask/keyring-api'; -import type { KeyringRequestV1 } from '@metamask/keyring-internal-api'; +import type { LegacyKeyringRequest } from '@metamask/keyring-internal-api'; import type { SnapId } from '@metamask/snaps-sdk'; import { @@ -88,7 +88,7 @@ describe('KeyringInternalSnapClient', () => { }); describe('submitRequestV1', () => { - const keyringRequest: KeyringRequestV1 = { + const keyringRequest: LegacyKeyringRequest = { id: 'mock-request-id', scope: EthScope.Mainnet, account: MOCK_ACCOUNT.id, diff --git a/packages/keyring-internal-snap-client/src/KeyringInternalSnapClient.ts b/packages/keyring-internal-snap-client/src/KeyringInternalSnapClient.ts index 49b2c7917..b5dcba652 100644 --- a/packages/keyring-internal-snap-client/src/KeyringInternalSnapClient.ts +++ b/packages/keyring-internal-snap-client/src/KeyringInternalSnapClient.ts @@ -1,7 +1,7 @@ import { KeyringRpcMethod } from '@metamask/keyring-api'; import type { - KeyringRequestV1, - KeyringResponseV1, + LegacyKeyringRequest, + LegacyKeyringResponse, } from '@metamask/keyring-internal-api'; import { SubmitRequestResponseV1Struct } from '@metamask/keyring-internal-api'; import { KeyringClient, type Sender } from '@metamask/keyring-snap-client'; @@ -131,7 +131,7 @@ export class KeyringInternalSnapClient extends KeyringClient { * @param request - Keyring request. * @returns Keyring request's response. */ - async submitRequestV1(request: KeyringRequestV1): Promise { + async submitRequestV1(request: LegacyKeyringRequest): Promise { return strictMask( await this.send({ method: KeyringRpcMethod.SubmitRequest, diff --git a/packages/keyring-snap-bridge/src/SnapKeyring.ts b/packages/keyring-snap-bridge/src/SnapKeyring.ts index 45fb29fd9..ce837007f 100644 --- a/packages/keyring-snap-bridge/src/SnapKeyring.ts +++ b/packages/keyring-snap-bridge/src/SnapKeyring.ts @@ -33,7 +33,7 @@ import type { } from '@metamask/keyring-internal-api'; import { KeyringInternalFeature, - toKeyringRequestV1, + toLegacyKeyringRequest, } from '@metamask/keyring-internal-api'; import { KeyringInternalSnapClient } from '@metamask/keyring-internal-snap-client'; import { @@ -1090,7 +1090,7 @@ export class SnapKeyring { response = await client.submitRequest(request); } else { // V1 keyring request did not support the `origin` field. - response = await client.submitRequestV1(toKeyringRequestV1(request)); + response = await client.submitRequestV1(toLegacyKeyringRequest(request)); } // Some methods, like the ones used to prepare and patch user operations, From 4a3c1340bd1bc41c24965deb7383b31eb4f0ccd6 Mon Sep 17 00:00:00 2001 From: Charly Chevalier Date: Tue, 13 Jan 2026 16:40:58 +0100 Subject: [PATCH 08/11] fix: rename to legacy --- packages/keyring-internal-snap-client/CHANGELOG.md | 4 ++++ .../src/KeyringInternalSnapClient.test.ts | 6 +++--- .../src/KeyringInternalSnapClient.ts | 2 +- packages/keyring-snap-bridge/CHANGELOG.md | 1 + packages/keyring-snap-bridge/src/SnapKeyring.ts | 2 +- 5 files changed, 10 insertions(+), 5 deletions(-) diff --git a/packages/keyring-internal-snap-client/CHANGELOG.md b/packages/keyring-internal-snap-client/CHANGELOG.md index 91cef694e..bfaed21fa 100644 --- a/packages/keyring-internal-snap-client/CHANGELOG.md +++ b/packages/keyring-internal-snap-client/CHANGELOG.md @@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +### Removed + +- **BREAKING:** Rename `submitRequestV1` method to `submitLegacyRequest` ([#423](https://github.com/MetaMask/accounts/pull/423)) + ### Changed - Bump `@metamask/snaps-controllers` from `^14.0.1` to `^17.2.0` ([#422](https://github.com/MetaMask/accounts/pull/422)) diff --git a/packages/keyring-internal-snap-client/src/KeyringInternalSnapClient.test.ts b/packages/keyring-internal-snap-client/src/KeyringInternalSnapClient.test.ts index 56f2c7192..7a19e947e 100644 --- a/packages/keyring-internal-snap-client/src/KeyringInternalSnapClient.test.ts +++ b/packages/keyring-internal-snap-client/src/KeyringInternalSnapClient.test.ts @@ -87,7 +87,7 @@ describe('KeyringInternalSnapClient', () => { }); }); - describe('submitRequestV1', () => { + describe('submitLegacyRequest', () => { const keyringRequest: LegacyKeyringRequest = { id: 'mock-request-id', scope: EthScope.Mainnet, @@ -109,7 +109,7 @@ describe('KeyringInternalSnapClient', () => { }, }; - it('calls the submitRequestV1 method', async () => { + it('calls the submitLegacyRequest method', async () => { const client = new KeyringInternalSnapClient({ messenger: messenger as unknown as KeyringInternalSnapClientMessenger, snapId, @@ -119,7 +119,7 @@ describe('KeyringInternalSnapClient', () => { pending: false, result: null, }); - await client.submitRequestV1(keyringRequest); + await client.submitLegacyRequest(keyringRequest); expect(messenger.call).toHaveBeenCalledWith( 'SnapController:handleRequest', request, diff --git a/packages/keyring-internal-snap-client/src/KeyringInternalSnapClient.ts b/packages/keyring-internal-snap-client/src/KeyringInternalSnapClient.ts index b5dcba652..d1914bdc5 100644 --- a/packages/keyring-internal-snap-client/src/KeyringInternalSnapClient.ts +++ b/packages/keyring-internal-snap-client/src/KeyringInternalSnapClient.ts @@ -131,7 +131,7 @@ export class KeyringInternalSnapClient extends KeyringClient { * @param request - Keyring request. * @returns Keyring request's response. */ - async submitRequestV1(request: LegacyKeyringRequest): Promise { + async submitLegacyRequest(request: LegacyKeyringRequest): Promise { return strictMask( await this.send({ method: KeyringRpcMethod.SubmitRequest, diff --git a/packages/keyring-snap-bridge/CHANGELOG.md b/packages/keyring-snap-bridge/CHANGELOG.md index 6564ad042..08bf9903d 100644 --- a/packages/keyring-snap-bridge/CHANGELOG.md +++ b/packages/keyring-snap-bridge/CHANGELOG.md @@ -18,6 +18,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - **BREAKING:** Remove `KeyringVersion` support ([#423](https://github.com/MetaMask/accounts/pull/423)) - Both `getKeyringVersionFromPlatform`, `PLATFORM_VERSION_TO_KEYRING_VERSION` got removed too. - Use `KeyringInternalFeature` instead. +- **BREAKING:** Rename `submitRequestV1` method to `submitLegacyRequest` ([#423](https://github.com/MetaMask/accounts/pull/423)) ## [18.0.2] diff --git a/packages/keyring-snap-bridge/src/SnapKeyring.ts b/packages/keyring-snap-bridge/src/SnapKeyring.ts index ce837007f..1d3a1b0b0 100644 --- a/packages/keyring-snap-bridge/src/SnapKeyring.ts +++ b/packages/keyring-snap-bridge/src/SnapKeyring.ts @@ -1090,7 +1090,7 @@ export class SnapKeyring { response = await client.submitRequest(request); } else { // V1 keyring request did not support the `origin` field. - response = await client.submitRequestV1(toLegacyKeyringRequest(request)); + response = await client.submitLegacyRequest(toLegacyKeyringRequest(request)); } // Some methods, like the ones used to prepare and patch user operations, From 7d6614099c140e1365e72adbe3e814f53aaf6363 Mon Sep 17 00:00:00 2001 From: Charly Chevalier Date: Tue, 13 Jan 2026 16:42:38 +0100 Subject: [PATCH 09/11] chore: fix comment --- packages/keyring-snap-bridge/src/SnapKeyring.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/keyring-snap-bridge/src/SnapKeyring.ts b/packages/keyring-snap-bridge/src/SnapKeyring.ts index 1d3a1b0b0..b0059b1aa 100644 --- a/packages/keyring-snap-bridge/src/SnapKeyring.ts +++ b/packages/keyring-snap-bridge/src/SnapKeyring.ts @@ -1089,8 +1089,10 @@ export class SnapKeyring { if (features.has(KeyringInternalFeature.UseOrigin)) { response = await client.submitRequest(request); } else { - // V1 keyring request did not support the `origin` field. - response = await client.submitLegacyRequest(toLegacyKeyringRequest(request)); + // LegacyV1 keyring request did not support the `origin` field. + response = await client.submitLegacyRequest( + toLegacyKeyringRequest(request), + ); } // Some methods, like the ones used to prepare and patch user operations, From 2cf57482208ae6497f1d7d59fd5bf74494d1ed86 Mon Sep 17 00:00:00 2001 From: Charly Chevalier Date: Tue, 13 Jan 2026 18:25:10 +0100 Subject: [PATCH 10/11] chore: lint --- packages/keyring-internal-api/src/compatibility/legacy.ts | 8 ++++++-- .../src/KeyringInternalSnapClient.ts | 4 +++- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/packages/keyring-internal-api/src/compatibility/legacy.ts b/packages/keyring-internal-api/src/compatibility/legacy.ts index 5f07809e1..3a866926b 100644 --- a/packages/keyring-internal-api/src/compatibility/legacy.ts +++ b/packages/keyring-internal-api/src/compatibility/legacy.ts @@ -8,7 +8,9 @@ import { omit, type Infer } from '@metamask/superstruct'; /** * Keyring request (v1). */ -export const LegacyKeyringRequestStruct = omit(KeyringRequestStruct, ['origin']); +export const LegacyKeyringRequestStruct = omit(KeyringRequestStruct, [ + 'origin', +]); export type LegacyKeyringRequest = Infer; @@ -27,7 +29,9 @@ export const SubmitRequestResponseV1Struct = LegacyKeyringResponseStruct; * @param request - A keyring request. * @returns A keyring request v1. */ -export function toLegacyKeyringRequest(request: KeyringRequest): LegacyKeyringRequest { +export function toLegacyKeyringRequest( + request: KeyringRequest, +): LegacyKeyringRequest { const { origin, ...requestV1 } = request; return requestV1; diff --git a/packages/keyring-internal-snap-client/src/KeyringInternalSnapClient.ts b/packages/keyring-internal-snap-client/src/KeyringInternalSnapClient.ts index d1914bdc5..65586350b 100644 --- a/packages/keyring-internal-snap-client/src/KeyringInternalSnapClient.ts +++ b/packages/keyring-internal-snap-client/src/KeyringInternalSnapClient.ts @@ -131,7 +131,9 @@ export class KeyringInternalSnapClient extends KeyringClient { * @param request - Keyring request. * @returns Keyring request's response. */ - async submitLegacyRequest(request: LegacyKeyringRequest): Promise { + async submitLegacyRequest( + request: LegacyKeyringRequest, + ): Promise { return strictMask( await this.send({ method: KeyringRpcMethod.SubmitRequest, From 713d8c39bd084e70f6c74ccb66a99dd582aeee36 Mon Sep 17 00:00:00 2001 From: Charly Chevalier Date: Tue, 13 Jan 2026 18:35:26 +0100 Subject: [PATCH 11/11] chore: fix changelog --- packages/keyring-internal-snap-client/CHANGELOG.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/keyring-internal-snap-client/CHANGELOG.md b/packages/keyring-internal-snap-client/CHANGELOG.md index bfaed21fa..1dcc1fc42 100644 --- a/packages/keyring-internal-snap-client/CHANGELOG.md +++ b/packages/keyring-internal-snap-client/CHANGELOG.md @@ -7,16 +7,16 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] -### Removed - -- **BREAKING:** Rename `submitRequestV1` method to `submitLegacyRequest` ([#423](https://github.com/MetaMask/accounts/pull/423)) - ### Changed - Bump `@metamask/snaps-controllers` from `^14.0.1` to `^17.2.0` ([#422](https://github.com/MetaMask/accounts/pull/422)) - Bump `@metamask/snaps-sdk` from `^9.0.0` to `^10.3.0` ([#422](https://github.com/MetaMask/accounts/pull/422)) - Bump `@metamask/snaps-utils` from `^11.0.0` to `^11.7.0` ([#422](https://github.com/MetaMask/accounts/pull/422)) +### Removed + +- **BREAKING:** Rename `submitRequestV1` method to `submitLegacyRequest` ([#423](https://github.com/MetaMask/accounts/pull/423)) + ## [8.0.1] ### Changed