@metamask/keyring-sdk 2.3.0 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -7,6 +7,19 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [3.0.0]
11
+
12
+ ### Added
13
+
14
+ - Add new entropy support ([#603](https://github.com/MetaMask/accounts/pull/603))
15
+ - Add `encodeMnemonicWords` ([#606](https://github.com/MetaMask/accounts/pull/606))
16
+
17
+ ### Changed
18
+
19
+ - **BREAKING:** Drop support for Node.js v18 and v20; minimum version is now v22 ([#593](https://github.com/MetaMask/accounts/pull/593))
20
+ - Bump `@metamask/keyring-api` from `^23.6.0` to `^24.0.0` ([#604](https://github.com/MetaMask/accounts/pull/604), [#611](https://github.com/MetaMask/accounts/pull/611))
21
+ - Bump `@metamask/keyring-utils` from `^4.0.0` to `^5.0.0` ([#611](https://github.com/MetaMask/accounts/pull/611))
22
+
10
23
  ## [2.3.0]
11
24
 
12
25
  ### Added
@@ -17,7 +30,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
17
30
  ### Changed
18
31
 
19
32
  - Bump `@metamask/keyring-api` from `^23.2.0` to `^23.6.0` ([#569](https://github.com/MetaMask/accounts/pull/569), [#583](https://github.com/MetaMask/accounts/pull/583), [#587](https://github.com/MetaMask/accounts/pull/587), [#600](https://github.com/MetaMask/accounts/pull/600))
20
- - Bump `@metamask/superstruct` from `^3.1.0` to `^3.4.1` ([#580](https://github.com/MetaMask/accounts/pull/580)), ([#577](https://github.com/MetaMask/accounts/pull/577))
33
+ - Bump `@metamask/superstruct` from `^3.1.0` to `^3.4.1` ([#580](https://github.com/MetaMask/accounts/pull/580), [#577](https://github.com/MetaMask/accounts/pull/577))
21
34
  - Bump `@metamask/keyring-utils` from `^3.3.1` to `^4.0.0` ([#600](https://github.com/MetaMask/accounts/pull/600))
22
35
 
23
36
  ## [2.2.0]
@@ -101,7 +114,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
101
114
 
102
115
  - Initial release, extracted from `@metamask/keyring-api` ([#478](https://github.com/MetaMask/accounts/pull/478), [#482](https://github.com/MetaMask/accounts/pull/482))
103
116
 
104
- [Unreleased]: https://github.com/MetaMask/accounts/compare/@metamask/keyring-sdk@2.3.0...HEAD
117
+ [Unreleased]: https://github.com/MetaMask/accounts/compare/@metamask/keyring-sdk@3.0.0...HEAD
118
+ [3.0.0]: https://github.com/MetaMask/accounts/compare/@metamask/keyring-sdk@2.3.0...@metamask/keyring-sdk@3.0.0
105
119
  [2.3.0]: https://github.com/MetaMask/accounts/compare/@metamask/keyring-sdk@2.2.0...@metamask/keyring-sdk@2.3.0
106
120
  [2.2.0]: https://github.com/MetaMask/accounts/compare/@metamask/keyring-sdk@2.1.1...@metamask/keyring-sdk@2.2.0
107
121
  [2.1.1]: https://github.com/MetaMask/accounts/compare/@metamask/keyring-sdk@2.1.0...@metamask/keyring-sdk@2.1.1
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.toEntropySourceId = exports.fingerprint = void 0;
4
+ const hmac_1 = require("@noble/hashes/hmac");
5
+ const sha2_1 = require("@noble/hashes/sha2");
6
+ const uuid_1 = require("uuid");
7
+ /**
8
+ * Computes a deterministic, non-reversible fingerprint for a piece of entropy.
9
+ *
10
+ * The fingerprint is a UUID v4 seeded from the first 16 bytes of
11
+ * `HMAC-SHA256(key=material, msg='metamask:fingerprint')`.
12
+ *
13
+ * @param material - The raw entropy bytes (e.g. BIP-39 mnemonic bytes).
14
+ * @returns A deterministic UUID v4 string that uniquely identifies the entropy
15
+ * without exposing it.
16
+ */
17
+ async function fingerprint(material) {
18
+ const message = new TextEncoder().encode('metamask:fingerprint');
19
+ // `@noble/hashes` is synchronous today, but the async signature is kept as a
20
+ // forward-compatible seam: a future migration to the Web Crypto API (or any
21
+ // other async primitive) won't require changes at every call site.
22
+ const digest = (0, hmac_1.hmac)(sha2_1.sha256, material, message);
23
+ return (0, uuid_1.v4)({ random: digest.slice(0, 16) });
24
+ }
25
+ exports.fingerprint = fingerprint;
26
+ /**
27
+ * Computes a stable {@link EntropySourceId} for an entropy source.
28
+ *
29
+ * The ID is formatted as `entropy:{type}:{uuid}`, where
30
+ * the UUID segment is the {@link fingerprint} of `material` when provided, or
31
+ * `'_'` for entropy sources whose secret never leaves the device (e.g. hardware
32
+ * wallets).
33
+ *
34
+ * @param type - The entropy source type (e.g. `'mnemonic'`,
35
+ * `'ledger'`, `'private-key'`).
36
+ * @param material - The raw entropy bytes. Omit for hardware wallets or any
37
+ * entropy source where the secret is not directly accessible.
38
+ * @returns A stable {@link EntropySourceId} string.
39
+ */
40
+ async function toEntropySourceId(type, material) {
41
+ const entropyFingerprint = material ? await fingerprint(material) : '_';
42
+ return `entropy:${type}:${entropyFingerprint}`;
43
+ }
44
+ exports.toEntropySourceId = toEntropySourceId;
45
+ //# sourceMappingURL=entropy.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entropy.cjs","sourceRoot":"","sources":["../src/entropy.ts"],"names":[],"mappings":";;;AAAA,6CAA0C;AAC1C,6CAA4C;AAC5C,+BAAkC;AAsBlC;;;;;;;;;GASG;AACI,KAAK,UAAU,WAAW,CAAC,QAAoB;IACpD,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,sBAAsB,CAAC,CAAC;IACjE,6EAA6E;IAC7E,4EAA4E;IAC5E,mEAAmE;IACnE,MAAM,MAAM,GAAG,IAAA,WAAI,EAAC,aAAM,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC/C,OAAO,IAAA,SAAI,EAAC,EAAE,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAC/C,CAAC;AAPD,kCAOC;AAED;;;;;;;;;;;;;GAaG;AACI,KAAK,UAAU,iBAAiB,CACrC,IAAuB,EACvB,QAAqB;IAErB,MAAM,kBAAkB,GAAG,QAAQ,CAAC,CAAC,CAAC,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IACxE,OAAO,WAAW,IAAI,IAAI,kBAAkB,EAAE,CAAC;AACjD,CAAC;AAND,8CAMC","sourcesContent":["import { hmac } from '@noble/hashes/hmac';\nimport { sha256 } from '@noble/hashes/sha2';\nimport { v4 as uuid } from 'uuid';\n\n/**\n * The type of an entropy source.\n */\nexport type EntropySourceType =\n | 'mnemonic'\n | 'ledger'\n | 'trezor'\n | 'qr'\n | 'private-key'\n | 'mpc';\n\n/**\n * Unique identifier for an entropy source.\n *\n * Format: `entropy:{type}:{uuid}` where the UUID is a\n * deterministic fingerprint of the underlying secret, or `'_'` for entropies\n * that cannot be uniquely identified.\n */\nexport type EntropySourceId = `entropy:${EntropySourceType}:${string}`;\n\n/**\n * Computes a deterministic, non-reversible fingerprint for a piece of entropy.\n *\n * The fingerprint is a UUID v4 seeded from the first 16 bytes of\n * `HMAC-SHA256(key=material, msg='metamask:fingerprint')`.\n *\n * @param material - The raw entropy bytes (e.g. BIP-39 mnemonic bytes).\n * @returns A deterministic UUID v4 string that uniquely identifies the entropy\n * without exposing it.\n */\nexport async function fingerprint(material: Uint8Array): Promise<string> {\n const message = new TextEncoder().encode('metamask:fingerprint');\n // `@noble/hashes` is synchronous today, but the async signature is kept as a\n // forward-compatible seam: a future migration to the Web Crypto API (or any\n // other async primitive) won't require changes at every call site.\n const digest = hmac(sha256, material, message);\n return uuid({ random: digest.slice(0, 16) });\n}\n\n/**\n * Computes a stable {@link EntropySourceId} for an entropy source.\n *\n * The ID is formatted as `entropy:{type}:{uuid}`, where\n * the UUID segment is the {@link fingerprint} of `material` when provided, or\n * `'_'` for entropy sources whose secret never leaves the device (e.g. hardware\n * wallets).\n *\n * @param type - The entropy source type (e.g. `'mnemonic'`,\n * `'ledger'`, `'private-key'`).\n * @param material - The raw entropy bytes. Omit for hardware wallets or any\n * entropy source where the secret is not directly accessible.\n * @returns A stable {@link EntropySourceId} string.\n */\nexport async function toEntropySourceId(\n type: EntropySourceType,\n material?: Uint8Array,\n): Promise<EntropySourceId> {\n const entropyFingerprint = material ? await fingerprint(material) : '_';\n return `entropy:${type}:${entropyFingerprint}`;\n}\n"]}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * The type of an entropy source.
3
+ */
4
+ export type EntropySourceType = 'mnemonic' | 'ledger' | 'trezor' | 'qr' | 'private-key' | 'mpc';
5
+ /**
6
+ * Unique identifier for an entropy source.
7
+ *
8
+ * Format: `entropy:{type}:{uuid}` where the UUID is a
9
+ * deterministic fingerprint of the underlying secret, or `'_'` for entropies
10
+ * that cannot be uniquely identified.
11
+ */
12
+ export type EntropySourceId = `entropy:${EntropySourceType}:${string}`;
13
+ /**
14
+ * Computes a deterministic, non-reversible fingerprint for a piece of entropy.
15
+ *
16
+ * The fingerprint is a UUID v4 seeded from the first 16 bytes of
17
+ * `HMAC-SHA256(key=material, msg='metamask:fingerprint')`.
18
+ *
19
+ * @param material - The raw entropy bytes (e.g. BIP-39 mnemonic bytes).
20
+ * @returns A deterministic UUID v4 string that uniquely identifies the entropy
21
+ * without exposing it.
22
+ */
23
+ export declare function fingerprint(material: Uint8Array): Promise<string>;
24
+ /**
25
+ * Computes a stable {@link EntropySourceId} for an entropy source.
26
+ *
27
+ * The ID is formatted as `entropy:{type}:{uuid}`, where
28
+ * the UUID segment is the {@link fingerprint} of `material` when provided, or
29
+ * `'_'` for entropy sources whose secret never leaves the device (e.g. hardware
30
+ * wallets).
31
+ *
32
+ * @param type - The entropy source type (e.g. `'mnemonic'`,
33
+ * `'ledger'`, `'private-key'`).
34
+ * @param material - The raw entropy bytes. Omit for hardware wallets or any
35
+ * entropy source where the secret is not directly accessible.
36
+ * @returns A stable {@link EntropySourceId} string.
37
+ */
38
+ export declare function toEntropySourceId(type: EntropySourceType, material?: Uint8Array): Promise<EntropySourceId>;
39
+ //# sourceMappingURL=entropy.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entropy.d.cts","sourceRoot":"","sources":["../src/entropy.ts"],"names":[],"mappings":"AAIA;;GAEG;AACH,MAAM,MAAM,iBAAiB,GACzB,UAAU,GACV,QAAQ,GACR,QAAQ,GACR,IAAI,GACJ,aAAa,GACb,KAAK,CAAC;AAEV;;;;;;GAMG;AACH,MAAM,MAAM,eAAe,GAAG,WAAW,iBAAiB,IAAI,MAAM,EAAE,CAAC;AAEvE;;;;;;;;;GASG;AACH,wBAAsB,WAAW,CAAC,QAAQ,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAOvE;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,iBAAiB,EACvB,QAAQ,CAAC,EAAE,UAAU,GACpB,OAAO,CAAC,eAAe,CAAC,CAG1B"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * The type of an entropy source.
3
+ */
4
+ export type EntropySourceType = 'mnemonic' | 'ledger' | 'trezor' | 'qr' | 'private-key' | 'mpc';
5
+ /**
6
+ * Unique identifier for an entropy source.
7
+ *
8
+ * Format: `entropy:{type}:{uuid}` where the UUID is a
9
+ * deterministic fingerprint of the underlying secret, or `'_'` for entropies
10
+ * that cannot be uniquely identified.
11
+ */
12
+ export type EntropySourceId = `entropy:${EntropySourceType}:${string}`;
13
+ /**
14
+ * Computes a deterministic, non-reversible fingerprint for a piece of entropy.
15
+ *
16
+ * The fingerprint is a UUID v4 seeded from the first 16 bytes of
17
+ * `HMAC-SHA256(key=material, msg='metamask:fingerprint')`.
18
+ *
19
+ * @param material - The raw entropy bytes (e.g. BIP-39 mnemonic bytes).
20
+ * @returns A deterministic UUID v4 string that uniquely identifies the entropy
21
+ * without exposing it.
22
+ */
23
+ export declare function fingerprint(material: Uint8Array): Promise<string>;
24
+ /**
25
+ * Computes a stable {@link EntropySourceId} for an entropy source.
26
+ *
27
+ * The ID is formatted as `entropy:{type}:{uuid}`, where
28
+ * the UUID segment is the {@link fingerprint} of `material` when provided, or
29
+ * `'_'` for entropy sources whose secret never leaves the device (e.g. hardware
30
+ * wallets).
31
+ *
32
+ * @param type - The entropy source type (e.g. `'mnemonic'`,
33
+ * `'ledger'`, `'private-key'`).
34
+ * @param material - The raw entropy bytes. Omit for hardware wallets or any
35
+ * entropy source where the secret is not directly accessible.
36
+ * @returns A stable {@link EntropySourceId} string.
37
+ */
38
+ export declare function toEntropySourceId(type: EntropySourceType, material?: Uint8Array): Promise<EntropySourceId>;
39
+ //# sourceMappingURL=entropy.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entropy.d.mts","sourceRoot":"","sources":["../src/entropy.ts"],"names":[],"mappings":"AAIA;;GAEG;AACH,MAAM,MAAM,iBAAiB,GACzB,UAAU,GACV,QAAQ,GACR,QAAQ,GACR,IAAI,GACJ,aAAa,GACb,KAAK,CAAC;AAEV;;;;;;GAMG;AACH,MAAM,MAAM,eAAe,GAAG,WAAW,iBAAiB,IAAI,MAAM,EAAE,CAAC;AAEvE;;;;;;;;;GASG;AACH,wBAAsB,WAAW,CAAC,QAAQ,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAOvE;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,iBAAiB,EACvB,QAAQ,CAAC,EAAE,UAAU,GACpB,OAAO,CAAC,eAAe,CAAC,CAG1B"}
@@ -0,0 +1,40 @@
1
+ import { hmac } from "@noble/hashes/hmac";
2
+ import { sha256 } from "@noble/hashes/sha2";
3
+ import { v4 as uuid } from "uuid";
4
+ /**
5
+ * Computes a deterministic, non-reversible fingerprint for a piece of entropy.
6
+ *
7
+ * The fingerprint is a UUID v4 seeded from the first 16 bytes of
8
+ * `HMAC-SHA256(key=material, msg='metamask:fingerprint')`.
9
+ *
10
+ * @param material - The raw entropy bytes (e.g. BIP-39 mnemonic bytes).
11
+ * @returns A deterministic UUID v4 string that uniquely identifies the entropy
12
+ * without exposing it.
13
+ */
14
+ export async function fingerprint(material) {
15
+ const message = new TextEncoder().encode('metamask:fingerprint');
16
+ // `@noble/hashes` is synchronous today, but the async signature is kept as a
17
+ // forward-compatible seam: a future migration to the Web Crypto API (or any
18
+ // other async primitive) won't require changes at every call site.
19
+ const digest = hmac(sha256, material, message);
20
+ return uuid({ random: digest.slice(0, 16) });
21
+ }
22
+ /**
23
+ * Computes a stable {@link EntropySourceId} for an entropy source.
24
+ *
25
+ * The ID is formatted as `entropy:{type}:{uuid}`, where
26
+ * the UUID segment is the {@link fingerprint} of `material` when provided, or
27
+ * `'_'` for entropy sources whose secret never leaves the device (e.g. hardware
28
+ * wallets).
29
+ *
30
+ * @param type - The entropy source type (e.g. `'mnemonic'`,
31
+ * `'ledger'`, `'private-key'`).
32
+ * @param material - The raw entropy bytes. Omit for hardware wallets or any
33
+ * entropy source where the secret is not directly accessible.
34
+ * @returns A stable {@link EntropySourceId} string.
35
+ */
36
+ export async function toEntropySourceId(type, material) {
37
+ const entropyFingerprint = material ? await fingerprint(material) : '_';
38
+ return `entropy:${type}:${entropyFingerprint}`;
39
+ }
40
+ //# sourceMappingURL=entropy.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entropy.mjs","sourceRoot":"","sources":["../src/entropy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,2BAA2B;AAC1C,OAAO,EAAE,MAAM,EAAE,2BAA2B;AAC5C,OAAO,EAAE,EAAE,IAAI,IAAI,EAAE,aAAa;AAsBlC;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,QAAoB;IACpD,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,sBAAsB,CAAC,CAAC;IACjE,6EAA6E;IAC7E,4EAA4E;IAC5E,mEAAmE;IACnE,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC/C,OAAO,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAC/C,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,IAAuB,EACvB,QAAqB;IAErB,MAAM,kBAAkB,GAAG,QAAQ,CAAC,CAAC,CAAC,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IACxE,OAAO,WAAW,IAAI,IAAI,kBAAkB,EAAE,CAAC;AACjD,CAAC","sourcesContent":["import { hmac } from '@noble/hashes/hmac';\nimport { sha256 } from '@noble/hashes/sha2';\nimport { v4 as uuid } from 'uuid';\n\n/**\n * The type of an entropy source.\n */\nexport type EntropySourceType =\n | 'mnemonic'\n | 'ledger'\n | 'trezor'\n | 'qr'\n | 'private-key'\n | 'mpc';\n\n/**\n * Unique identifier for an entropy source.\n *\n * Format: `entropy:{type}:{uuid}` where the UUID is a\n * deterministic fingerprint of the underlying secret, or `'_'` for entropies\n * that cannot be uniquely identified.\n */\nexport type EntropySourceId = `entropy:${EntropySourceType}:${string}`;\n\n/**\n * Computes a deterministic, non-reversible fingerprint for a piece of entropy.\n *\n * The fingerprint is a UUID v4 seeded from the first 16 bytes of\n * `HMAC-SHA256(key=material, msg='metamask:fingerprint')`.\n *\n * @param material - The raw entropy bytes (e.g. BIP-39 mnemonic bytes).\n * @returns A deterministic UUID v4 string that uniquely identifies the entropy\n * without exposing it.\n */\nexport async function fingerprint(material: Uint8Array): Promise<string> {\n const message = new TextEncoder().encode('metamask:fingerprint');\n // `@noble/hashes` is synchronous today, but the async signature is kept as a\n // forward-compatible seam: a future migration to the Web Crypto API (or any\n // other async primitive) won't require changes at every call site.\n const digest = hmac(sha256, material, message);\n return uuid({ random: digest.slice(0, 16) });\n}\n\n/**\n * Computes a stable {@link EntropySourceId} for an entropy source.\n *\n * The ID is formatted as `entropy:{type}:{uuid}`, where\n * the UUID segment is the {@link fingerprint} of `material` when provided, or\n * `'_'` for entropy sources whose secret never leaves the device (e.g. hardware\n * wallets).\n *\n * @param type - The entropy source type (e.g. `'mnemonic'`,\n * `'ledger'`, `'private-key'`).\n * @param material - The raw entropy bytes. Omit for hardware wallets or any\n * entropy source where the secret is not directly accessible.\n * @returns A stable {@link EntropySourceId} string.\n */\nexport async function toEntropySourceId(\n type: EntropySourceType,\n material?: Uint8Array,\n): Promise<EntropySourceId> {\n const entropyFingerprint = material ? await fingerprint(material) : '_';\n return `entropy:${type}:${entropyFingerprint}`;\n}\n"]}
package/dist/index.cjs CHANGED
@@ -17,5 +17,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
17
17
  __exportStar(require("./keyring-account-registry.cjs"), exports);
18
18
  __exportStar(require("./migration.cjs"), exports);
19
19
  __exportStar(require("./mnemonic.cjs"), exports);
20
+ __exportStar(require("./entropy.cjs"), exports);
20
21
  __exportStar(require("./eth/index.cjs"), exports);
21
22
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,iEAA2C;AAC3C,kDAA4B;AAC5B,iDAA2B;AAC3B,kDAAsB","sourcesContent":["export * from './keyring-account-registry';\nexport * from './migration';\nexport * from './mnemonic';\nexport * from './eth';\n"]}
1
+ {"version":3,"file":"index.cjs","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,iEAA2C;AAC3C,kDAA4B;AAC5B,iDAA2B;AAC3B,gDAA0B;AAC1B,kDAAsB","sourcesContent":["export * from './keyring-account-registry';\nexport * from './migration';\nexport * from './mnemonic';\nexport * from './entropy';\nexport * from './eth';\n"]}
package/dist/index.d.cts CHANGED
@@ -1,5 +1,6 @@
1
1
  export * from "./keyring-account-registry.cjs";
2
2
  export * from "./migration.cjs";
3
3
  export * from "./mnemonic.cjs";
4
+ export * from "./entropy.cjs";
4
5
  export * from "./eth/index.cjs";
5
6
  //# sourceMappingURL=index.d.cts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.cts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,+CAA2C;AAC3C,gCAA4B;AAC5B,+BAA2B;AAC3B,gCAAsB"}
1
+ {"version":3,"file":"index.d.cts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,+CAA2C;AAC3C,gCAA4B;AAC5B,+BAA2B;AAC3B,8BAA0B;AAC1B,gCAAsB"}
package/dist/index.d.mts CHANGED
@@ -1,5 +1,6 @@
1
1
  export * from "./keyring-account-registry.mjs";
2
2
  export * from "./migration.mjs";
3
3
  export * from "./mnemonic.mjs";
4
+ export * from "./entropy.mjs";
4
5
  export * from "./eth/index.mjs";
5
6
  //# sourceMappingURL=index.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.mts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,+CAA2C;AAC3C,gCAA4B;AAC5B,+BAA2B;AAC3B,gCAAsB"}
1
+ {"version":3,"file":"index.d.mts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,+CAA2C;AAC3C,gCAA4B;AAC5B,+BAA2B;AAC3B,8BAA0B;AAC1B,gCAAsB"}
package/dist/index.mjs CHANGED
@@ -1,5 +1,6 @@
1
1
  export * from "./keyring-account-registry.mjs";
2
2
  export * from "./migration.mjs";
3
3
  export * from "./mnemonic.mjs";
4
+ export * from "./entropy.mjs";
4
5
  export * from "./eth/index.mjs";
5
6
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,+CAA2C;AAC3C,gCAA4B;AAC5B,+BAA2B;AAC3B,gCAAsB","sourcesContent":["export * from './keyring-account-registry';\nexport * from './migration';\nexport * from './mnemonic';\nexport * from './eth';\n"]}
1
+ {"version":3,"file":"index.mjs","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,+CAA2C;AAC3C,gCAA4B;AAC5B,+BAA2B;AAC3B,8BAA0B;AAC1B,gCAAsB","sourcesContent":["export * from './keyring-account-registry';\nexport * from './migration';\nexport * from './mnemonic';\nexport * from './entropy';\nexport * from './eth';\n"]}
package/dist/mnemonic.cjs CHANGED
@@ -1,21 +1,30 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.encodeMnemonic = void 0;
3
+ exports.encodeMnemonic = exports.encodeMnemonicWords = void 0;
4
4
  const english_1 = require("@metamask/scure-bip39/dist/wordlists/english.js");
5
5
  /**
6
- * Encodes a mnemonic as an array of bytes (UTF-8).
6
+ * Encodes a mnemonic as a string of words.
7
7
  *
8
8
  * @param mnemonicIndicesBytes - An array of bytes (16-bit unsigned integers) representing the indices of the words in the mnemonic.
9
- * @returns An array of bytes (UTF-8) representing the mnemonic.
9
+ * @returns A string representing the mnemonic.
10
10
  */
11
- function encodeMnemonic(mnemonicIndicesBytes) {
11
+ function encodeMnemonicWords(mnemonicIndicesBytes) {
12
12
  const mnemonicIndices = Array.from(
13
13
  // Create a new `Uint8Array` to ensure we have a proper view on the buffer
14
14
  // without having to worry about `byteOffset` and `byteLength` of
15
15
  // the inner buffer.
16
16
  new Uint16Array(new Uint8Array(mnemonicIndicesBytes).buffer));
17
- const mnemonic = mnemonicIndices.map((i) => english_1.wordlist[i]).join(' ');
18
- return Array.from(new TextEncoder().encode(mnemonic));
17
+ return mnemonicIndices.map((i) => english_1.wordlist[i]).join(' ');
18
+ }
19
+ exports.encodeMnemonicWords = encodeMnemonicWords;
20
+ /**
21
+ * Encodes a mnemonic as an array of bytes (UTF-8).
22
+ *
23
+ * @param mnemonicIndicesBytes - An array of bytes (16-bit unsigned integers) representing the indices of the words in the mnemonic.
24
+ * @returns An array of bytes (UTF-8) representing the mnemonic.
25
+ */
26
+ function encodeMnemonic(mnemonicIndicesBytes) {
27
+ return Array.from(new TextEncoder().encode(encodeMnemonicWords(mnemonicIndicesBytes)));
19
28
  }
20
29
  exports.encodeMnemonic = encodeMnemonic;
21
30
  //# sourceMappingURL=mnemonic.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"mnemonic.cjs","sourceRoot":"","sources":["../src/mnemonic.ts"],"names":[],"mappings":";;;AAAA,6EAAwE;AAExE;;;;;GAKG;AACH,SAAgB,cAAc,CAAC,oBAAgC;IAC7D,MAAM,eAAe,GAAG,KAAK,CAAC,IAAI;IAChC,0EAA0E;IAC1E,iEAAiE;IACjE,oBAAoB;IACpB,IAAI,WAAW,CAAC,IAAI,UAAU,CAAC,oBAAoB,CAAC,CAAC,MAAM,CAAC,CAC7D,CAAC;IACF,MAAM,QAAQ,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,kBAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACnE,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;AACxD,CAAC;AATD,wCASC","sourcesContent":["import { wordlist } from '@metamask/scure-bip39/dist/wordlists/english';\n\n/**\n * Encodes a mnemonic as an array of bytes (UTF-8).\n *\n * @param mnemonicIndicesBytes - An array of bytes (16-bit unsigned integers) representing the indices of the words in the mnemonic.\n * @returns An array of bytes (UTF-8) representing the mnemonic.\n */\nexport function encodeMnemonic(mnemonicIndicesBytes: Uint8Array): number[] {\n const mnemonicIndices = Array.from(\n // Create a new `Uint8Array` to ensure we have a proper view on the buffer\n // without having to worry about `byteOffset` and `byteLength` of\n // the inner buffer.\n new Uint16Array(new Uint8Array(mnemonicIndicesBytes).buffer),\n );\n const mnemonic = mnemonicIndices.map((i) => wordlist[i]).join(' ');\n return Array.from(new TextEncoder().encode(mnemonic));\n}\n"]}
1
+ {"version":3,"file":"mnemonic.cjs","sourceRoot":"","sources":["../src/mnemonic.ts"],"names":[],"mappings":";;;AAAA,6EAAwE;AAExE;;;;;GAKG;AACH,SAAgB,mBAAmB,CAAC,oBAAgC;IAClE,MAAM,eAAe,GAAG,KAAK,CAAC,IAAI;IAChC,0EAA0E;IAC1E,iEAAiE;IACjE,oBAAoB;IACpB,IAAI,WAAW,CAAC,IAAI,UAAU,CAAC,oBAAoB,CAAC,CAAC,MAAM,CAAC,CAC7D,CAAC;IACF,OAAO,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,kBAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC3D,CAAC;AARD,kDAQC;AAED;;;;;GAKG;AACH,SAAgB,cAAc,CAAC,oBAAgC;IAC7D,OAAO,KAAK,CAAC,IAAI,CACf,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,mBAAmB,CAAC,oBAAoB,CAAC,CAAC,CACpE,CAAC;AACJ,CAAC;AAJD,wCAIC","sourcesContent":["import { wordlist } from '@metamask/scure-bip39/dist/wordlists/english';\n\n/**\n * Encodes a mnemonic as a string of words.\n *\n * @param mnemonicIndicesBytes - An array of bytes (16-bit unsigned integers) representing the indices of the words in the mnemonic.\n * @returns A string representing the mnemonic.\n */\nexport function encodeMnemonicWords(mnemonicIndicesBytes: Uint8Array): string {\n const mnemonicIndices = Array.from(\n // Create a new `Uint8Array` to ensure we have a proper view on the buffer\n // without having to worry about `byteOffset` and `byteLength` of\n // the inner buffer.\n new Uint16Array(new Uint8Array(mnemonicIndicesBytes).buffer),\n );\n return mnemonicIndices.map((i) => wordlist[i]).join(' ');\n}\n\n/**\n * Encodes a mnemonic as an array of bytes (UTF-8).\n *\n * @param mnemonicIndicesBytes - An array of bytes (16-bit unsigned integers) representing the indices of the words in the mnemonic.\n * @returns An array of bytes (UTF-8) representing the mnemonic.\n */\nexport function encodeMnemonic(mnemonicIndicesBytes: Uint8Array): number[] {\n return Array.from(\n new TextEncoder().encode(encodeMnemonicWords(mnemonicIndicesBytes)),\n );\n}\n"]}
@@ -1,3 +1,10 @@
1
+ /**
2
+ * Encodes a mnemonic as a string of words.
3
+ *
4
+ * @param mnemonicIndicesBytes - An array of bytes (16-bit unsigned integers) representing the indices of the words in the mnemonic.
5
+ * @returns A string representing the mnemonic.
6
+ */
7
+ export declare function encodeMnemonicWords(mnemonicIndicesBytes: Uint8Array): string;
1
8
  /**
2
9
  * Encodes a mnemonic as an array of bytes (UTF-8).
3
10
  *
@@ -1 +1 @@
1
- {"version":3,"file":"mnemonic.d.cts","sourceRoot":"","sources":["../src/mnemonic.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,oBAAoB,EAAE,UAAU,GAAG,MAAM,EAAE,CASzE"}
1
+ {"version":3,"file":"mnemonic.d.cts","sourceRoot":"","sources":["../src/mnemonic.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,oBAAoB,EAAE,UAAU,GAAG,MAAM,CAQ5E;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,oBAAoB,EAAE,UAAU,GAAG,MAAM,EAAE,CAIzE"}
@@ -1,3 +1,10 @@
1
+ /**
2
+ * Encodes a mnemonic as a string of words.
3
+ *
4
+ * @param mnemonicIndicesBytes - An array of bytes (16-bit unsigned integers) representing the indices of the words in the mnemonic.
5
+ * @returns A string representing the mnemonic.
6
+ */
7
+ export declare function encodeMnemonicWords(mnemonicIndicesBytes: Uint8Array): string;
1
8
  /**
2
9
  * Encodes a mnemonic as an array of bytes (UTF-8).
3
10
  *
@@ -1 +1 @@
1
- {"version":3,"file":"mnemonic.d.mts","sourceRoot":"","sources":["../src/mnemonic.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,oBAAoB,EAAE,UAAU,GAAG,MAAM,EAAE,CASzE"}
1
+ {"version":3,"file":"mnemonic.d.mts","sourceRoot":"","sources":["../src/mnemonic.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,oBAAoB,EAAE,UAAU,GAAG,MAAM,CAQ5E;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,oBAAoB,EAAE,UAAU,GAAG,MAAM,EAAE,CAIzE"}
package/dist/mnemonic.mjs CHANGED
@@ -1,17 +1,25 @@
1
1
  import { wordlist } from "@metamask/scure-bip39/dist/wordlists/english.js";
2
2
  /**
3
- * Encodes a mnemonic as an array of bytes (UTF-8).
3
+ * Encodes a mnemonic as a string of words.
4
4
  *
5
5
  * @param mnemonicIndicesBytes - An array of bytes (16-bit unsigned integers) representing the indices of the words in the mnemonic.
6
- * @returns An array of bytes (UTF-8) representing the mnemonic.
6
+ * @returns A string representing the mnemonic.
7
7
  */
8
- export function encodeMnemonic(mnemonicIndicesBytes) {
8
+ export function encodeMnemonicWords(mnemonicIndicesBytes) {
9
9
  const mnemonicIndices = Array.from(
10
10
  // Create a new `Uint8Array` to ensure we have a proper view on the buffer
11
11
  // without having to worry about `byteOffset` and `byteLength` of
12
12
  // the inner buffer.
13
13
  new Uint16Array(new Uint8Array(mnemonicIndicesBytes).buffer));
14
- const mnemonic = mnemonicIndices.map((i) => wordlist[i]).join(' ');
15
- return Array.from(new TextEncoder().encode(mnemonic));
14
+ return mnemonicIndices.map((i) => wordlist[i]).join(' ');
15
+ }
16
+ /**
17
+ * Encodes a mnemonic as an array of bytes (UTF-8).
18
+ *
19
+ * @param mnemonicIndicesBytes - An array of bytes (16-bit unsigned integers) representing the indices of the words in the mnemonic.
20
+ * @returns An array of bytes (UTF-8) representing the mnemonic.
21
+ */
22
+ export function encodeMnemonic(mnemonicIndicesBytes) {
23
+ return Array.from(new TextEncoder().encode(encodeMnemonicWords(mnemonicIndicesBytes)));
16
24
  }
17
25
  //# sourceMappingURL=mnemonic.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"mnemonic.mjs","sourceRoot":"","sources":["../src/mnemonic.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,wDAAqD;AAExE;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAAC,oBAAgC;IAC7D,MAAM,eAAe,GAAG,KAAK,CAAC,IAAI;IAChC,0EAA0E;IAC1E,iEAAiE;IACjE,oBAAoB;IACpB,IAAI,WAAW,CAAC,IAAI,UAAU,CAAC,oBAAoB,CAAC,CAAC,MAAM,CAAC,CAC7D,CAAC;IACF,MAAM,QAAQ,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACnE,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;AACxD,CAAC","sourcesContent":["import { wordlist } from '@metamask/scure-bip39/dist/wordlists/english';\n\n/**\n * Encodes a mnemonic as an array of bytes (UTF-8).\n *\n * @param mnemonicIndicesBytes - An array of bytes (16-bit unsigned integers) representing the indices of the words in the mnemonic.\n * @returns An array of bytes (UTF-8) representing the mnemonic.\n */\nexport function encodeMnemonic(mnemonicIndicesBytes: Uint8Array): number[] {\n const mnemonicIndices = Array.from(\n // Create a new `Uint8Array` to ensure we have a proper view on the buffer\n // without having to worry about `byteOffset` and `byteLength` of\n // the inner buffer.\n new Uint16Array(new Uint8Array(mnemonicIndicesBytes).buffer),\n );\n const mnemonic = mnemonicIndices.map((i) => wordlist[i]).join(' ');\n return Array.from(new TextEncoder().encode(mnemonic));\n}\n"]}
1
+ {"version":3,"file":"mnemonic.mjs","sourceRoot":"","sources":["../src/mnemonic.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,wDAAqD;AAExE;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CAAC,oBAAgC;IAClE,MAAM,eAAe,GAAG,KAAK,CAAC,IAAI;IAChC,0EAA0E;IAC1E,iEAAiE;IACjE,oBAAoB;IACpB,IAAI,WAAW,CAAC,IAAI,UAAU,CAAC,oBAAoB,CAAC,CAAC,MAAM,CAAC,CAC7D,CAAC;IACF,OAAO,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC3D,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAAC,oBAAgC;IAC7D,OAAO,KAAK,CAAC,IAAI,CACf,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,mBAAmB,CAAC,oBAAoB,CAAC,CAAC,CACpE,CAAC;AACJ,CAAC","sourcesContent":["import { wordlist } from '@metamask/scure-bip39/dist/wordlists/english';\n\n/**\n * Encodes a mnemonic as a string of words.\n *\n * @param mnemonicIndicesBytes - An array of bytes (16-bit unsigned integers) representing the indices of the words in the mnemonic.\n * @returns A string representing the mnemonic.\n */\nexport function encodeMnemonicWords(mnemonicIndicesBytes: Uint8Array): string {\n const mnemonicIndices = Array.from(\n // Create a new `Uint8Array` to ensure we have a proper view on the buffer\n // without having to worry about `byteOffset` and `byteLength` of\n // the inner buffer.\n new Uint16Array(new Uint8Array(mnemonicIndicesBytes).buffer),\n );\n return mnemonicIndices.map((i) => wordlist[i]).join(' ');\n}\n\n/**\n * Encodes a mnemonic as an array of bytes (UTF-8).\n *\n * @param mnemonicIndicesBytes - An array of bytes (16-bit unsigned integers) representing the indices of the words in the mnemonic.\n * @returns An array of bytes (UTF-8) representing the mnemonic.\n */\nexport function encodeMnemonic(mnemonicIndicesBytes: Uint8Array): number[] {\n return Array.from(\n new TextEncoder().encode(encodeMnemonicWords(mnemonicIndicesBytes)),\n );\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@metamask/keyring-sdk",
3
- "version": "2.3.0",
3
+ "version": "3.0.0",
4
4
  "description": "MetaMask Keyring SDK",
5
5
  "keywords": [
6
6
  "keyring",
@@ -68,11 +68,12 @@
68
68
  "dependencies": {
69
69
  "@ethereumjs/tx": "^5.4.0",
70
70
  "@metamask/eth-sig-util": "^8.2.0",
71
- "@metamask/keyring-api": "^23.6.0",
72
- "@metamask/keyring-utils": "^4.0.0",
71
+ "@metamask/keyring-api": "^24.0.0",
72
+ "@metamask/keyring-utils": "^5.0.0",
73
73
  "@metamask/scure-bip39": "^2.1.1",
74
74
  "@metamask/superstruct": "^3.4.1",
75
75
  "@metamask/utils": "^11.11.0",
76
+ "@noble/hashes": "^1.8.0",
76
77
  "async-mutex": "^0.5.0",
77
78
  "ethereum-cryptography": "^2.2.1",
78
79
  "uuid": "^9.0.1"
@@ -103,7 +104,7 @@
103
104
  "directory": "src"
104
105
  },
105
106
  "engines": {
106
- "node": "^18.18 || >=20"
107
+ "node": ">=22"
107
108
  },
108
109
  "lavamoat": {
109
110
  "allowScripts": {