Skip to content

Commit 05cf84b

Browse files
committed
feat: add KeyringVersion + versions in KeyringCapabilites
1 parent 59347b0 commit 05cf84b

7 files changed

Lines changed: 37 additions & 0 deletions

File tree

packages/keyring-api/CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
1616
- Add `EthKeyringWrapper` abstract class for Ethereum-based `KeyringV2` implementations ([#404](https://github.com/MetaMask/accounts/pull/404))
1717
- Provides common Ethereum signing method routing (`submitRequest`) for all Ethereum-based keyrings.
1818
- Add `KeyringWrapper` base class to adapt legacy keyrings to `KeyringV2` ([#398](https://github.com/MetaMask/accounts/pull/398)), ([#410](https://github.com/MetaMask/accounts/pull/410))
19+
- Add `KeyringVersion` enum and required `versions` field to `KeyringCapabilities` ([#TODO](https://github.com/MetaMask/accounts/pull/TODO))
20+
- `KeyringVersion` enum represents keyring API versions: `V1 = 1`, `V2 = 2`.
21+
- Keyrings must now declare which API versions they support via the `versions` field.
22+
- The `versions` field is a non-empty array of `KeyringVersion` values.
1923

2024
### Changed
2125

packages/keyring-api/src/api/v2/keyring-capabilities.ts

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import {
22
array,
33
boolean,
4+
enums,
45
exactOptional,
56
nonempty,
67
object,
@@ -14,10 +15,31 @@ import {
1415
} from './private-key';
1516
import { CaipChainIdStruct } from '../caip';
1617

18+
/**
19+
* Enum representing keyring API versions.
20+
*/
21+
export enum KeyringVersion {
22+
/**
23+
* Initial Keyring API.
24+
*/
25+
V1 = 1,
26+
27+
/**
28+
* Unified keyring API introducing the new capabilities system.
29+
*
30+
* Requires Snap platform: TBD (TODO)
31+
*/
32+
V2 = 2,
33+
}
34+
1735
/**
1836
* Struct for {@link KeyringCapabilities}.
1937
*/
2038
export const KeyringCapabilitiesStruct = object({
39+
/**
40+
* List of keyring API versions that this keyring supports.
41+
*/
42+
versions: nonempty(array(enums([KeyringVersion.V1, KeyringVersion.V2]))),
2143
/**
2244
* List of CAIP-2 chain IDs that this keyring supports.
2345
*/
@@ -78,6 +100,7 @@ export const KeyringCapabilitiesStruct = object({
78100
* @example
79101
* ```ts
80102
* const capabilities: KeyringCapabilities = {
103+
* versions: [KeyringVersion.V2],
81104
* scopes: ['bip122:_'],
82105
* bip44: {
83106
* derivePath: true,

packages/keyring-api/src/api/v2/wrapper/keyring-wrapper.test.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import { v4 as uuidv4 } from 'uuid';
55
import { KeyringWrapper } from './keyring-wrapper';
66
import type { KeyringAccount } from '../../account';
77
import type { KeyringCapabilities } from '../keyring-capabilities';
8+
import { KeyringVersion } from '../keyring-capabilities';
89
import { KeyringType } from '../keyring-type';
910

1011
class TestKeyringWrapper extends KeyringWrapper<TestKeyring> {
@@ -127,6 +128,7 @@ class TestKeyring implements Keyring {
127128
}
128129

129130
const capabilities: KeyringCapabilities = {
131+
versions: [KeyringVersion.V2],
130132
scopes: ['eip155:10'],
131133
};
132134

packages/keyring-eth-hd/src/hd-keyring-v2.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import {
1313
type KeyringCapabilities,
1414
type KeyringV2,
1515
KeyringType,
16+
KeyringVersion,
1617
PrivateKeyEncoding,
1718
type EntropySourceId,
1819
} from '@metamask/keyring-api';
@@ -39,6 +40,7 @@ const HD_KEYRING_METHODS = [
3940
];
4041

4142
const hdKeyringV2Capabilities: KeyringCapabilities = {
43+
versions: [KeyringVersion.V2],
4244
scopes: [EthScope.Eoa],
4345
bip44: {
4446
deriveIndex: true,

packages/keyring-eth-ledger-bridge/src/ledger-keyring-v2.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import {
1010
type KeyringCapabilities,
1111
type KeyringV2,
1212
KeyringType,
13+
KeyringVersion,
1314
type EntropySourceId,
1415
} from '@metamask/keyring-api';
1516
import type { AccountId, EthKeyring } from '@metamask/keyring-utils';
@@ -28,6 +29,7 @@ const LEDGER_KEYRING_METHODS = [
2829
];
2930

3031
const ledgerKeyringV2Capabilities: KeyringCapabilities = {
32+
versions: [KeyringVersion.V2],
3133
scopes: [EthScope.Eoa],
3234
bip44: {
3335
deriveIndex: true,

packages/keyring-eth-simple/src/simple-keyring-v2.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import {
1212
type KeyringCapabilities,
1313
type KeyringV2,
1414
KeyringType,
15+
KeyringVersion,
1516
PrivateKeyEncoding,
1617
} from '@metamask/keyring-api';
1718
import type { AccountId } from '@metamask/keyring-utils';
@@ -38,6 +39,7 @@ const SIMPLE_KEYRING_METHODS = [
3839
];
3940

4041
const simpleKeyringV2Capabilities: KeyringCapabilities = {
42+
versions: [KeyringVersion.V2],
4143
scopes: [EthScope.Eoa],
4244
privateKey: {
4345
importFormats: [

packages/keyring-eth-trezor/src/trezor-keyring-v2.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import {
1010
type KeyringCapabilities,
1111
type KeyringV2,
1212
KeyringType,
13+
KeyringVersion,
1314
type EntropySourceId,
1415
} from '@metamask/keyring-api';
1516
import type { AccountId, EthKeyring } from '@metamask/keyring-utils';
@@ -29,6 +30,7 @@ const TREZOR_KEYRING_METHODS = [
2930
];
3031

3132
const trezorKeyringV2Capabilities: KeyringCapabilities = {
33+
versions: [KeyringVersion.V2],
3234
scopes: [EthScope.Eoa],
3335
bip44: {
3436
deriveIndex: true,

0 commit comments

Comments
 (0)