@metamask-previews/account-api 0.2.0-77f7003 → 0.3.0-9522cc5
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 +14 -1
- package/dist/api/group.cjs +13 -1
- package/dist/api/group.cjs.map +1 -1
- package/dist/api/group.d.cts +15 -0
- package/dist/api/group.d.cts.map +1 -1
- package/dist/api/group.d.mts +15 -0
- package/dist/api/group.d.mts.map +1 -1
- package/dist/api/group.mjs +12 -0
- package/dist/api/group.mjs.map +1 -1
- package/dist/api/multichain/account.cjs +22 -13
- package/dist/api/multichain/account.cjs.map +1 -1
- package/dist/api/multichain/account.d.cts +7 -0
- package/dist/api/multichain/account.d.cts.map +1 -1
- package/dist/api/multichain/account.d.mts +7 -0
- package/dist/api/multichain/account.d.mts.map +1 -1
- package/dist/api/multichain/account.mjs +23 -14
- package/dist/api/multichain/account.mjs.map +1 -1
- package/dist/api/multichain/wallet.cjs +5 -5
- package/dist/api/multichain/wallet.cjs.map +1 -1
- package/dist/api/multichain/wallet.d.cts +5 -5
- package/dist/api/multichain/wallet.d.cts.map +1 -1
- package/dist/api/multichain/wallet.d.mts +5 -5
- package/dist/api/multichain/wallet.d.mts.map +1 -1
- package/dist/api/multichain/wallet.mjs +6 -6
- package/dist/api/multichain/wallet.mjs.map +1 -1
- package/dist/api/wallet.cjs +19 -17
- package/dist/api/wallet.cjs.map +1 -1
- package/dist/api/wallet.d.cts +15 -13
- package/dist/api/wallet.d.cts.map +1 -1
- package/dist/api/wallet.d.mts +15 -13
- package/dist/api/wallet.d.mts.map +1 -1
- package/dist/api/wallet.mjs +18 -16
- package/dist/api/wallet.mjs.map +1 -1
- package/package.json +3 -3
package/CHANGELOG.md
CHANGED
|
@@ -9,6 +9,18 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
9
9
|
|
|
10
10
|
### Added
|
|
11
11
|
|
|
12
|
+
- Add `AccountGroupType` + `AccountGroup.type` ([#329](https://github.com/MetaMask/accounts/pull/329))
|
|
13
|
+
|
|
14
|
+
### Changed
|
|
15
|
+
|
|
16
|
+
- **BREAKING:** Rename `AccountWalletCategory` to `AccountWalletType` + `category` to `type` ([#328](https://github.com/MetaMask/accounts/pull/328))
|
|
17
|
+
- This name better reflects other patterns we already have in place elsewhere.
|
|
18
|
+
|
|
19
|
+
## [0.3.0]
|
|
20
|
+
|
|
21
|
+
### Added
|
|
22
|
+
|
|
23
|
+
- Add `Bip44Account<Account>` type + `isBip44Account` helper ([#319](https://github.com/MetaMask/accounts/pull/319))
|
|
12
24
|
- Add `MultichainAccountWallet.sync` method ([#321](https://github.com/MetaMask/accounts/pull/321))
|
|
13
25
|
- This can be used to force wallet synchronization if new accounts are available on the account providers.
|
|
14
26
|
|
|
@@ -35,6 +47,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
35
47
|
|
|
36
48
|
- Add `AccountGroup` and `AccountWallet` ([#307](https://github.com/MetaMask/accounts/pull/307))
|
|
37
49
|
|
|
38
|
-
[Unreleased]: https://github.com/MetaMask/accounts/compare/@metamask/account-api@0.
|
|
50
|
+
[Unreleased]: https://github.com/MetaMask/accounts/compare/@metamask/account-api@0.3.0...HEAD
|
|
51
|
+
[0.3.0]: https://github.com/MetaMask/accounts/compare/@metamask/account-api@0.2.0...@metamask/account-api@0.3.0
|
|
39
52
|
[0.2.0]: https://github.com/MetaMask/accounts/compare/@metamask/account-api@0.1.0...@metamask/account-api@0.2.0
|
|
40
53
|
[0.1.0]: https://github.com/MetaMask/accounts/releases/tag/@metamask/account-api@0.1.0
|
package/dist/api/group.cjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.DEFAULT_ACCOUNT_GROUP_UNIQUE_ID = void 0;
|
|
3
|
+
exports.AccountGroupType = exports.DEFAULT_ACCOUNT_GROUP_UNIQUE_ID = void 0;
|
|
4
4
|
exports.toAccountGroupId = toAccountGroupId;
|
|
5
5
|
exports.toDefaultAccountGroupId = toDefaultAccountGroupId;
|
|
6
6
|
/**
|
|
@@ -10,6 +10,18 @@ exports.toDefaultAccountGroupId = toDefaultAccountGroupId;
|
|
|
10
10
|
* an account wallet.
|
|
11
11
|
*/
|
|
12
12
|
exports.DEFAULT_ACCOUNT_GROUP_UNIQUE_ID = 'default';
|
|
13
|
+
/**
|
|
14
|
+
* Account group object.
|
|
15
|
+
*
|
|
16
|
+
* Each group types groups accounts using different criterias.
|
|
17
|
+
*/
|
|
18
|
+
var AccountGroupType;
|
|
19
|
+
(function (AccountGroupType) {
|
|
20
|
+
/** Group that represents a multichain account. */
|
|
21
|
+
AccountGroupType["MultichainAccount"] = "multichain-account";
|
|
22
|
+
/** Group that represents a single account. */
|
|
23
|
+
AccountGroupType["Account"] = "account";
|
|
24
|
+
})(AccountGroupType || (exports.AccountGroupType = AccountGroupType = {}));
|
|
13
25
|
/**
|
|
14
26
|
* Convert a wallet ID and a unique ID, to a group ID.
|
|
15
27
|
*
|
package/dist/api/group.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"group.cjs","sourceRoot":"","sources":["../../src/api/group.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"group.cjs","sourceRoot":"","sources":["../../src/api/group.ts"],"names":[],"mappings":";;;AAyEA,4CAKC;AAQD,0DAIC;AArFD;;;;;GAKG;AACU,QAAA,+BAA+B,GAAW,SAAS,CAAC;AAEjE;;;;GAIG;AACH,IAAY,gBAMX;AAND,WAAY,gBAAgB;IAC1B,kDAAkD;IAClD,4DAAwC,CAAA;IAExC,8CAA8C;IAC9C,uCAAmB,CAAA;AACrB,CAAC,EANW,gBAAgB,gCAAhB,gBAAgB,QAM3B;AA0CD;;;;;;GAMG;AACH,SAAgB,gBAAgB,CAC9B,QAAyB,EACzB,EAAU;IAEV,OAAO,GAAG,QAAQ,IAAI,EAAE,EAAE,CAAC;AAC7B,CAAC;AAED;;;;;GAKG;AACH,SAAgB,uBAAuB,CACrC,QAAyB;IAEzB,OAAO,gBAAgB,CAAC,QAAQ,EAAE,uCAA+B,CAAC,CAAC;AACrE,CAAC","sourcesContent":["import type { KeyringAccount } from '@metamask/keyring-api';\n\n// Circular import are allowed when using `import type`.\nimport type { AccountWallet, AccountWalletId } from './wallet';\n\n/**\n * Default account group unique ID.\n *\n * This constant can be used to reference the \"default\" group from\n * an account wallet.\n */\nexport const DEFAULT_ACCOUNT_GROUP_UNIQUE_ID: string = 'default';\n\n/**\n * Account group object.\n *\n * Each group types groups accounts using different criterias.\n */\nexport enum AccountGroupType {\n /** Group that represents a multichain account. */\n MultichainAccount = 'multichain-account',\n\n /** Group that represents a single account. */\n Account = 'account',\n}\n\n/**\n * Account group ID.\n */\nexport type AccountGroupId = `${AccountWalletId}/${string}`;\n\n/**\n * Account group that can hold multiple accounts.\n */\nexport type AccountGroup<Account extends KeyringAccount> = {\n /**\n * Account group ID.\n */\n get id(): AccountGroupId;\n\n /**\n * Account group type.\n */\n get type(): AccountGroupType;\n\n /**\n * Account wallet (parent).\n */\n get wallet(): AccountWallet<Account>;\n\n /**\n * Gets the accounts for this account group.\n *\n * @returns The accounts.\n */\n getAccounts(): Account[];\n\n /**\n * Gets the account for a given account ID.\n *\n * @param id - Account ID.\n * @returns The account or undefined if not found.\n */\n getAccount(id: Account['id']): Account | undefined;\n};\n\n/**\n * Convert a wallet ID and a unique ID, to a group ID.\n *\n * @param walletId - A wallet ID.\n * @param id - A unique ID.\n * @returns A group ID.\n */\nexport function toAccountGroupId(\n walletId: AccountWalletId,\n id: string,\n): AccountGroupId {\n return `${walletId}/${id}`;\n}\n\n/**\n * Convert a wallet ID to the default group ID.\n *\n * @param walletId - A wallet ID.\n * @returns The default group ID.\n */\nexport function toDefaultAccountGroupId(\n walletId: AccountWalletId,\n): AccountGroupId {\n return toAccountGroupId(walletId, DEFAULT_ACCOUNT_GROUP_UNIQUE_ID);\n}\n"]}
|
package/dist/api/group.d.cts
CHANGED
|
@@ -7,6 +7,17 @@ import type { AccountWallet, AccountWalletId } from "./wallet.cjs";
|
|
|
7
7
|
* an account wallet.
|
|
8
8
|
*/
|
|
9
9
|
export declare const DEFAULT_ACCOUNT_GROUP_UNIQUE_ID: string;
|
|
10
|
+
/**
|
|
11
|
+
* Account group object.
|
|
12
|
+
*
|
|
13
|
+
* Each group types groups accounts using different criterias.
|
|
14
|
+
*/
|
|
15
|
+
export declare enum AccountGroupType {
|
|
16
|
+
/** Group that represents a multichain account. */
|
|
17
|
+
MultichainAccount = "multichain-account",
|
|
18
|
+
/** Group that represents a single account. */
|
|
19
|
+
Account = "account"
|
|
20
|
+
}
|
|
10
21
|
/**
|
|
11
22
|
* Account group ID.
|
|
12
23
|
*/
|
|
@@ -19,6 +30,10 @@ export type AccountGroup<Account extends KeyringAccount> = {
|
|
|
19
30
|
* Account group ID.
|
|
20
31
|
*/
|
|
21
32
|
get id(): AccountGroupId;
|
|
33
|
+
/**
|
|
34
|
+
* Account group type.
|
|
35
|
+
*/
|
|
36
|
+
get type(): AccountGroupType;
|
|
22
37
|
/**
|
|
23
38
|
* Account wallet (parent).
|
|
24
39
|
*/
|
package/dist/api/group.d.cts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"group.d.cts","sourceRoot":"","sources":["../../src/api/group.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,8BAA8B;AAG5D,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,qBAAiB;AAE/D;;;;;GAKG;AACH,eAAO,MAAM,+BAA+B,EAAE,MAAkB,CAAC;AAEjE;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,GAAG,eAAe,IAAI,MAAM,EAAE,CAAC;AAE5D;;GAEG;AACH,MAAM,MAAM,YAAY,CAAC,OAAO,SAAS,cAAc,IAAI;IACzD;;OAEG;IACH,IAAI,EAAE,IAAI,cAAc,CAAC;IAEzB;;OAEG;IACH,IAAI,MAAM,IAAI,aAAa,CAAC,OAAO,CAAC,CAAC;IAErC;;;;OAIG;IACH,WAAW,IAAI,OAAO,EAAE,CAAC;IAEzB;;;;;OAKG;IACH,UAAU,CAAC,EAAE,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,GAAG,SAAS,CAAC;CACpD,CAAC;AAEF;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,eAAe,EACzB,EAAE,EAAE,MAAM,GACT,cAAc,CAEhB;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,eAAe,GACxB,cAAc,CAEhB"}
|
|
1
|
+
{"version":3,"file":"group.d.cts","sourceRoot":"","sources":["../../src/api/group.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,8BAA8B;AAG5D,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,qBAAiB;AAE/D;;;;;GAKG;AACH,eAAO,MAAM,+BAA+B,EAAE,MAAkB,CAAC;AAEjE;;;;GAIG;AACH,oBAAY,gBAAgB;IAC1B,kDAAkD;IAClD,iBAAiB,uBAAuB;IAExC,8CAA8C;IAC9C,OAAO,YAAY;CACpB;AAED;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,GAAG,eAAe,IAAI,MAAM,EAAE,CAAC;AAE5D;;GAEG;AACH,MAAM,MAAM,YAAY,CAAC,OAAO,SAAS,cAAc,IAAI;IACzD;;OAEG;IACH,IAAI,EAAE,IAAI,cAAc,CAAC;IAEzB;;OAEG;IACH,IAAI,IAAI,IAAI,gBAAgB,CAAC;IAE7B;;OAEG;IACH,IAAI,MAAM,IAAI,aAAa,CAAC,OAAO,CAAC,CAAC;IAErC;;;;OAIG;IACH,WAAW,IAAI,OAAO,EAAE,CAAC;IAEzB;;;;;OAKG;IACH,UAAU,CAAC,EAAE,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,GAAG,SAAS,CAAC;CACpD,CAAC;AAEF;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,eAAe,EACzB,EAAE,EAAE,MAAM,GACT,cAAc,CAEhB;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,eAAe,GACxB,cAAc,CAEhB"}
|
package/dist/api/group.d.mts
CHANGED
|
@@ -7,6 +7,17 @@ import type { AccountWallet, AccountWalletId } from "./wallet.mjs";
|
|
|
7
7
|
* an account wallet.
|
|
8
8
|
*/
|
|
9
9
|
export declare const DEFAULT_ACCOUNT_GROUP_UNIQUE_ID: string;
|
|
10
|
+
/**
|
|
11
|
+
* Account group object.
|
|
12
|
+
*
|
|
13
|
+
* Each group types groups accounts using different criterias.
|
|
14
|
+
*/
|
|
15
|
+
export declare enum AccountGroupType {
|
|
16
|
+
/** Group that represents a multichain account. */
|
|
17
|
+
MultichainAccount = "multichain-account",
|
|
18
|
+
/** Group that represents a single account. */
|
|
19
|
+
Account = "account"
|
|
20
|
+
}
|
|
10
21
|
/**
|
|
11
22
|
* Account group ID.
|
|
12
23
|
*/
|
|
@@ -19,6 +30,10 @@ export type AccountGroup<Account extends KeyringAccount> = {
|
|
|
19
30
|
* Account group ID.
|
|
20
31
|
*/
|
|
21
32
|
get id(): AccountGroupId;
|
|
33
|
+
/**
|
|
34
|
+
* Account group type.
|
|
35
|
+
*/
|
|
36
|
+
get type(): AccountGroupType;
|
|
22
37
|
/**
|
|
23
38
|
* Account wallet (parent).
|
|
24
39
|
*/
|
package/dist/api/group.d.mts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"group.d.mts","sourceRoot":"","sources":["../../src/api/group.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,8BAA8B;AAG5D,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,qBAAiB;AAE/D;;;;;GAKG;AACH,eAAO,MAAM,+BAA+B,EAAE,MAAkB,CAAC;AAEjE;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,GAAG,eAAe,IAAI,MAAM,EAAE,CAAC;AAE5D;;GAEG;AACH,MAAM,MAAM,YAAY,CAAC,OAAO,SAAS,cAAc,IAAI;IACzD;;OAEG;IACH,IAAI,EAAE,IAAI,cAAc,CAAC;IAEzB;;OAEG;IACH,IAAI,MAAM,IAAI,aAAa,CAAC,OAAO,CAAC,CAAC;IAErC;;;;OAIG;IACH,WAAW,IAAI,OAAO,EAAE,CAAC;IAEzB;;;;;OAKG;IACH,UAAU,CAAC,EAAE,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,GAAG,SAAS,CAAC;CACpD,CAAC;AAEF;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,eAAe,EACzB,EAAE,EAAE,MAAM,GACT,cAAc,CAEhB;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,eAAe,GACxB,cAAc,CAEhB"}
|
|
1
|
+
{"version":3,"file":"group.d.mts","sourceRoot":"","sources":["../../src/api/group.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,8BAA8B;AAG5D,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,qBAAiB;AAE/D;;;;;GAKG;AACH,eAAO,MAAM,+BAA+B,EAAE,MAAkB,CAAC;AAEjE;;;;GAIG;AACH,oBAAY,gBAAgB;IAC1B,kDAAkD;IAClD,iBAAiB,uBAAuB;IAExC,8CAA8C;IAC9C,OAAO,YAAY;CACpB;AAED;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,GAAG,eAAe,IAAI,MAAM,EAAE,CAAC;AAE5D;;GAEG;AACH,MAAM,MAAM,YAAY,CAAC,OAAO,SAAS,cAAc,IAAI;IACzD;;OAEG;IACH,IAAI,EAAE,IAAI,cAAc,CAAC;IAEzB;;OAEG;IACH,IAAI,IAAI,IAAI,gBAAgB,CAAC;IAE7B;;OAEG;IACH,IAAI,MAAM,IAAI,aAAa,CAAC,OAAO,CAAC,CAAC;IAErC;;;;OAIG;IACH,WAAW,IAAI,OAAO,EAAE,CAAC;IAEzB;;;;;OAKG;IACH,UAAU,CAAC,EAAE,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,GAAG,SAAS,CAAC;CACpD,CAAC;AAEF;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,eAAe,EACzB,EAAE,EAAE,MAAM,GACT,cAAc,CAEhB;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,eAAe,GACxB,cAAc,CAEhB"}
|
package/dist/api/group.mjs
CHANGED
|
@@ -5,6 +5,18 @@
|
|
|
5
5
|
* an account wallet.
|
|
6
6
|
*/
|
|
7
7
|
export const DEFAULT_ACCOUNT_GROUP_UNIQUE_ID = 'default';
|
|
8
|
+
/**
|
|
9
|
+
* Account group object.
|
|
10
|
+
*
|
|
11
|
+
* Each group types groups accounts using different criterias.
|
|
12
|
+
*/
|
|
13
|
+
export var AccountGroupType;
|
|
14
|
+
(function (AccountGroupType) {
|
|
15
|
+
/** Group that represents a multichain account. */
|
|
16
|
+
AccountGroupType["MultichainAccount"] = "multichain-account";
|
|
17
|
+
/** Group that represents a single account. */
|
|
18
|
+
AccountGroupType["Account"] = "account";
|
|
19
|
+
})(AccountGroupType || (AccountGroupType = {}));
|
|
8
20
|
/**
|
|
9
21
|
* Convert a wallet ID and a unique ID, to a group ID.
|
|
10
22
|
*
|
package/dist/api/group.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"group.mjs","sourceRoot":"","sources":["../../src/api/group.ts"],"names":[],"mappings":"AAKA;;;;;GAKG;AACH,MAAM,CAAC,MAAM,+BAA+B,GAAW,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"group.mjs","sourceRoot":"","sources":["../../src/api/group.ts"],"names":[],"mappings":"AAKA;;;;;GAKG;AACH,MAAM,CAAC,MAAM,+BAA+B,GAAW,SAAS,CAAC;AAEjE;;;;GAIG;AACH,MAAM,CAAN,IAAY,gBAMX;AAND,WAAY,gBAAgB;IAC1B,kDAAkD;IAClD,4DAAwC,CAAA;IAExC,8CAA8C;IAC9C,uCAAmB,CAAA;AACrB,CAAC,EANW,gBAAgB,KAAhB,gBAAgB,QAM3B;AA0CD;;;;;;GAMG;AACH,MAAM,UAAU,gBAAgB,CAC9B,QAAyB,EACzB,EAAU;IAEV,OAAO,GAAG,QAAQ,IAAI,EAAE,EAAE,CAAC;AAC7B,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,uBAAuB,CACrC,QAAyB;IAEzB,OAAO,gBAAgB,CAAC,QAAQ,EAAE,+BAA+B,CAAC,CAAC;AACrE,CAAC","sourcesContent":["import type { KeyringAccount } from '@metamask/keyring-api';\n\n// Circular import are allowed when using `import type`.\nimport type { AccountWallet, AccountWalletId } from './wallet';\n\n/**\n * Default account group unique ID.\n *\n * This constant can be used to reference the \"default\" group from\n * an account wallet.\n */\nexport const DEFAULT_ACCOUNT_GROUP_UNIQUE_ID: string = 'default';\n\n/**\n * Account group object.\n *\n * Each group types groups accounts using different criterias.\n */\nexport enum AccountGroupType {\n /** Group that represents a multichain account. */\n MultichainAccount = 'multichain-account',\n\n /** Group that represents a single account. */\n Account = 'account',\n}\n\n/**\n * Account group ID.\n */\nexport type AccountGroupId = `${AccountWalletId}/${string}`;\n\n/**\n * Account group that can hold multiple accounts.\n */\nexport type AccountGroup<Account extends KeyringAccount> = {\n /**\n * Account group ID.\n */\n get id(): AccountGroupId;\n\n /**\n * Account group type.\n */\n get type(): AccountGroupType;\n\n /**\n * Account wallet (parent).\n */\n get wallet(): AccountWallet<Account>;\n\n /**\n * Gets the accounts for this account group.\n *\n * @returns The accounts.\n */\n getAccounts(): Account[];\n\n /**\n * Gets the account for a given account ID.\n *\n * @param id - Account ID.\n * @returns The account or undefined if not found.\n */\n getAccount(id: Account['id']): Account | undefined;\n};\n\n/**\n * Convert a wallet ID and a unique ID, to a group ID.\n *\n * @param walletId - A wallet ID.\n * @param id - A unique ID.\n * @returns A group ID.\n */\nexport function toAccountGroupId(\n walletId: AccountWalletId,\n id: string,\n): AccountGroupId {\n return `${walletId}/${id}`;\n}\n\n/**\n * Convert a wallet ID to the default group ID.\n *\n * @param walletId - A wallet ID.\n * @returns The default group ID.\n */\nexport function toDefaultAccountGroupId(\n walletId: AccountWalletId,\n): AccountGroupId {\n return toAccountGroupId(walletId, DEFAULT_ACCOUNT_GROUP_UNIQUE_ID);\n}\n"]}
|
|
@@ -10,15 +10,16 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
|
|
|
10
10
|
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
11
11
|
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
12
12
|
};
|
|
13
|
-
var _MultichainAccount_id, _MultichainAccount_wallet, _MultichainAccount_index, _MultichainAccount_providers,
|
|
13
|
+
var _MultichainAccount_id, _MultichainAccount_wallet, _MultichainAccount_index, _MultichainAccount_providers, _MultichainAccount_providerToAccounts, _MultichainAccount_accountToProvider;
|
|
14
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
15
|
exports.MultichainAccount = void 0;
|
|
16
16
|
exports.toMultichainAccountId = toMultichainAccountId;
|
|
17
17
|
exports.isMultichainAccountId = isMultichainAccountId;
|
|
18
18
|
exports.getGroupIndexFromMultichainAccountId = getGroupIndexFromMultichainAccountId;
|
|
19
19
|
const keyring_utils_1 = require("@metamask/keyring-utils");
|
|
20
|
+
const group_1 = require("../group.cjs");
|
|
20
21
|
const wallet_1 = require("../wallet.cjs");
|
|
21
|
-
const MULTICHAIN_ACCOUNT_ID_REGEX = new RegExp(`^${wallet_1.
|
|
22
|
+
const MULTICHAIN_ACCOUNT_ID_REGEX = new RegExp(`^${wallet_1.AccountWalletType.Entropy}:.*/(?<groupIndex>\\d+)$`, 'u');
|
|
22
23
|
/**
|
|
23
24
|
* A multichain account that holds multiple accounts.
|
|
24
25
|
*/
|
|
@@ -28,14 +29,14 @@ class MultichainAccount {
|
|
|
28
29
|
_MultichainAccount_wallet.set(this, void 0);
|
|
29
30
|
_MultichainAccount_index.set(this, void 0);
|
|
30
31
|
_MultichainAccount_providers.set(this, void 0);
|
|
31
|
-
|
|
32
|
-
|
|
32
|
+
_MultichainAccount_providerToAccounts.set(this, void 0);
|
|
33
|
+
_MultichainAccount_accountToProvider.set(this, void 0);
|
|
33
34
|
__classPrivateFieldSet(this, _MultichainAccount_id, toMultichainAccountId(wallet.id, groupIndex), "f");
|
|
34
35
|
__classPrivateFieldSet(this, _MultichainAccount_index, groupIndex, "f");
|
|
35
36
|
__classPrivateFieldSet(this, _MultichainAccount_wallet, wallet, "f");
|
|
36
37
|
__classPrivateFieldSet(this, _MultichainAccount_providers, providers, "f");
|
|
37
|
-
__classPrivateFieldSet(this,
|
|
38
|
-
__classPrivateFieldSet(this,
|
|
38
|
+
__classPrivateFieldSet(this, _MultichainAccount_providerToAccounts, new Map(), "f");
|
|
39
|
+
__classPrivateFieldSet(this, _MultichainAccount_accountToProvider, new Map(), "f");
|
|
39
40
|
this.sync();
|
|
40
41
|
}
|
|
41
42
|
/**
|
|
@@ -47,7 +48,7 @@ class MultichainAccount {
|
|
|
47
48
|
sync() {
|
|
48
49
|
// Clear reverse mapping and re-construct it entirely based on the refreshed
|
|
49
50
|
// list of accounts from each providers.
|
|
50
|
-
__classPrivateFieldGet(this,
|
|
51
|
+
__classPrivateFieldGet(this, _MultichainAccount_accountToProvider, "f").clear();
|
|
51
52
|
for (const provider of __classPrivateFieldGet(this, _MultichainAccount_providers, "f")) {
|
|
52
53
|
// Filter account only for that index.
|
|
53
54
|
const accounts = [];
|
|
@@ -58,10 +59,10 @@ class MultichainAccount {
|
|
|
58
59
|
accounts.push(account.id);
|
|
59
60
|
}
|
|
60
61
|
}
|
|
61
|
-
__classPrivateFieldGet(this,
|
|
62
|
+
__classPrivateFieldGet(this, _MultichainAccount_providerToAccounts, "f").set(provider, accounts);
|
|
62
63
|
// Reverse-mapping for fast indexing.
|
|
63
64
|
for (const id of accounts) {
|
|
64
|
-
__classPrivateFieldGet(this,
|
|
65
|
+
__classPrivateFieldGet(this, _MultichainAccount_accountToProvider, "f").set(id, provider);
|
|
65
66
|
}
|
|
66
67
|
}
|
|
67
68
|
}
|
|
@@ -73,6 +74,14 @@ class MultichainAccount {
|
|
|
73
74
|
get id() {
|
|
74
75
|
return __classPrivateFieldGet(this, _MultichainAccount_id, "f");
|
|
75
76
|
}
|
|
77
|
+
/**
|
|
78
|
+
* Gets the multichain account type.
|
|
79
|
+
*
|
|
80
|
+
* @returns The multichain account type.
|
|
81
|
+
*/
|
|
82
|
+
get type() {
|
|
83
|
+
return group_1.AccountGroupType.MultichainAccount;
|
|
84
|
+
}
|
|
76
85
|
/**
|
|
77
86
|
* Gets the multichain account's wallet reference (parent).
|
|
78
87
|
*
|
|
@@ -96,7 +105,7 @@ class MultichainAccount {
|
|
|
96
105
|
*/
|
|
97
106
|
hasAccounts() {
|
|
98
107
|
// If there's anything in the reverse-map, it means we have some accounts.
|
|
99
|
-
return __classPrivateFieldGet(this,
|
|
108
|
+
return __classPrivateFieldGet(this, _MultichainAccount_accountToProvider, "f").size > 0;
|
|
100
109
|
}
|
|
101
110
|
/**
|
|
102
111
|
* Gets the accounts for this multichain account.
|
|
@@ -105,7 +114,7 @@ class MultichainAccount {
|
|
|
105
114
|
*/
|
|
106
115
|
getAccounts() {
|
|
107
116
|
const allAccounts = [];
|
|
108
|
-
for (const [provider, accounts] of __classPrivateFieldGet(this,
|
|
117
|
+
for (const [provider, accounts] of __classPrivateFieldGet(this, _MultichainAccount_providerToAccounts, "f").entries()) {
|
|
109
118
|
for (const id of accounts) {
|
|
110
119
|
const account = provider.getAccount(id);
|
|
111
120
|
if (account) {
|
|
@@ -125,7 +134,7 @@ class MultichainAccount {
|
|
|
125
134
|
* @returns The account or undefined if not found.
|
|
126
135
|
*/
|
|
127
136
|
getAccount(id) {
|
|
128
|
-
const provider = __classPrivateFieldGet(this,
|
|
137
|
+
const provider = __classPrivateFieldGet(this, _MultichainAccount_accountToProvider, "f").get(id);
|
|
129
138
|
// If there's nothing in the map, it means we tried to get an account
|
|
130
139
|
// that does not belong to this multichain account.
|
|
131
140
|
if (!provider) {
|
|
@@ -183,7 +192,7 @@ class MultichainAccount {
|
|
|
183
192
|
}
|
|
184
193
|
}
|
|
185
194
|
exports.MultichainAccount = MultichainAccount;
|
|
186
|
-
_MultichainAccount_id = new WeakMap(), _MultichainAccount_wallet = new WeakMap(), _MultichainAccount_index = new WeakMap(), _MultichainAccount_providers = new WeakMap(),
|
|
195
|
+
_MultichainAccount_id = new WeakMap(), _MultichainAccount_wallet = new WeakMap(), _MultichainAccount_index = new WeakMap(), _MultichainAccount_providers = new WeakMap(), _MultichainAccount_providerToAccounts = new WeakMap(), _MultichainAccount_accountToProvider = new WeakMap();
|
|
187
196
|
/**
|
|
188
197
|
* Gets the multichain account ID from its multichain account wallet ID and its index.
|
|
189
198
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"account.cjs","sourceRoot":"","sources":["../../../src/api/multichain/account.ts"],"names":[],"mappings":"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","sourcesContent":["import { type KeyringAccount } from '@metamask/keyring-api';\nimport { isScopeEqualToAny } from '@metamask/keyring-utils';\n\nimport type {\n MultichainAccountWallet,\n MultichainAccountWalletId,\n} from './wallet';\nimport type { Bip44Account } from '../bip44';\nimport type { AccountGroup } from '../group';\nimport type { AccountProvider } from '../provider';\nimport type { AccountSelector } from '../selector';\nimport { AccountWalletCategory } from '../wallet';\n\nconst MULTICHAIN_ACCOUNT_ID_REGEX = new RegExp(\n `^${AccountWalletCategory.Entropy}:.*/(?<groupIndex>\\\\d+)$`,\n 'u',\n);\n\n/**\n * Multichain account ID.\n */\nexport type MultichainAccountId = `${MultichainAccountWalletId}/${number}`; // Use number for the account group index.\n\n/**\n * A multichain account that holds multiple accounts.\n */\nexport class MultichainAccount<Account extends Bip44Account<KeyringAccount>>\n implements AccountGroup<Account>\n{\n readonly #id: MultichainAccountId;\n\n readonly #wallet: MultichainAccountWallet<Account>;\n\n readonly #index: number;\n\n readonly #providers: AccountProvider<Account>[];\n\n readonly #accounts: Map<AccountProvider<Account>, Account['id'][]>;\n\n readonly #reverse: Map<Account['id'], AccountProvider<Account>>;\n\n constructor({\n groupIndex,\n wallet,\n providers,\n }: {\n groupIndex: number;\n wallet: MultichainAccountWallet<Account>;\n providers: AccountProvider<Account>[];\n }) {\n this.#id = toMultichainAccountId(wallet.id, groupIndex);\n this.#index = groupIndex;\n this.#wallet = wallet;\n this.#providers = providers;\n this.#accounts = new Map();\n this.#reverse = new Map();\n\n this.sync();\n }\n\n /**\n * Force multichain account synchronization.\n *\n * This can be used if account providers got new accounts that the multichain\n * account doesn't know about.\n */\n sync(): void {\n // Clear reverse mapping and re-construct it entirely based on the refreshed\n // list of accounts from each providers.\n this.#reverse.clear();\n\n for (const provider of this.#providers) {\n // Filter account only for that index.\n const accounts = [];\n for (const account of provider.getAccounts()) {\n if (\n account.options.entropy.id === this.wallet.entropySource &&\n account.options.entropy.groupIndex === this.index\n ) {\n // We only use IDs to always fetch the latest version of accounts.\n accounts.push(account.id);\n }\n }\n this.#accounts.set(provider, accounts);\n\n // Reverse-mapping for fast indexing.\n for (const id of accounts) {\n this.#reverse.set(id, provider);\n }\n }\n }\n\n /**\n * Gets the multichain account ID.\n *\n * @returns The multichain account ID.\n */\n get id(): MultichainAccountId {\n return this.#id;\n }\n\n /**\n * Gets the multichain account's wallet reference (parent).\n *\n * @returns The multichain account's wallet.\n */\n get wallet(): MultichainAccountWallet<Account> {\n return this.#wallet;\n }\n\n /**\n * Gets the multichain account group index.\n *\n * @returns The multichain account group index.\n */\n get index(): number {\n return this.#index;\n }\n\n /**\n * Checks if there's any underlying accounts for this multichain accounts.\n *\n * @returns True if there's any underlying accounts, false otherwise.\n */\n hasAccounts(): boolean {\n // If there's anything in the reverse-map, it means we have some accounts.\n return this.#reverse.size > 0;\n }\n\n /**\n * Gets the accounts for this multichain account.\n *\n * @returns The accounts.\n */\n getAccounts(): Account[] {\n const allAccounts: Account[] = [];\n\n for (const [provider, accounts] of this.#accounts.entries()) {\n for (const id of accounts) {\n const account = provider.getAccount(id);\n\n if (account) {\n // If for some reason we cannot get this account from the provider, it\n // might means it has been deleted or something, so we just filter it\n // out.\n allAccounts.push(account);\n }\n }\n }\n\n return allAccounts;\n }\n\n /**\n * Gets the account for a given account ID.\n *\n * @param id - Account ID.\n * @returns The account or undefined if not found.\n */\n getAccount(id: Account['id']): Account | undefined {\n const provider = this.#reverse.get(id);\n\n // If there's nothing in the map, it means we tried to get an account\n // that does not belong to this multichain account.\n if (!provider) {\n return undefined;\n }\n return provider.getAccount(id);\n }\n\n /**\n * Query an account matching the selector.\n *\n * @param selector - Query selector.\n * @returns The account matching the selector or undefined if not matching.\n * @throws If multiple accounts match the selector.\n */\n get(selector: AccountSelector<Account>): Account | undefined {\n const accounts = this.select(selector);\n\n if (accounts.length > 1) {\n throw new Error(\n `Too many account candidates, expected 1, got: ${accounts.length}`,\n );\n }\n\n if (accounts.length === 0) {\n return undefined;\n }\n\n return accounts[0]; // This is safe, see checks above.\n }\n\n /**\n * Query accounts matching the selector.\n *\n * @param selector - Query selector.\n * @returns The accounts matching the selector.\n */\n select(selector: AccountSelector<Account>): Account[] {\n return this.getAccounts().filter((account) => {\n let selected = true;\n\n if (selector.id) {\n selected &&= account.id === selector.id;\n }\n if (selector.address) {\n selected &&= account.address === selector.address;\n }\n if (selector.type) {\n selected &&= account.type === selector.type;\n }\n if (selector.methods !== undefined) {\n selected &&= selector.methods.some((method) =>\n account.methods.includes(method),\n );\n }\n if (selector.scopes !== undefined) {\n selected &&= selector.scopes.some((scope) => {\n return (\n // This will cover specific EVM EOA scopes as well.\n isScopeEqualToAny(scope, account.scopes)\n );\n });\n }\n\n return selected;\n });\n }\n}\n\n/**\n * Gets the multichain account ID from its multichain account wallet ID and its index.\n *\n * @param walletId - Multichain account wallet ID.\n * @param groupIndex - Index of that multichain account.\n * @returns The multichain account ID.\n */\nexport function toMultichainAccountId(\n walletId: MultichainAccountWalletId,\n groupIndex: number,\n): MultichainAccountId {\n return `${walletId}/${groupIndex}`;\n}\n\n/**\n * Checks if the given value is {@link MultichainAccountId}.\n *\n * @param value - The value to check.\n * @returns Whether the value is a {@link MultichainAccountId}.\n */\nexport function isMultichainAccountId(\n value: string,\n): value is MultichainAccountId {\n return MULTICHAIN_ACCOUNT_ID_REGEX.test(value);\n}\n\n/**\n * Gets the multichain account index from an account group ID.\n *\n * @param id - Multichain account ID.\n * @returns The multichain account index if extractable, undefined otherwise.\n */\nexport function getGroupIndexFromMultichainAccountId(\n id: MultichainAccountId,\n): number {\n const matched = id.match(MULTICHAIN_ACCOUNT_ID_REGEX);\n if (matched?.groups?.groupIndex === undefined) {\n // Unable to extract group index, even though, type wise, this should not\n // be possible!\n throw new Error('Unable to extract group index');\n }\n\n return Number(matched.groups.groupIndex);\n}\n"]}
|
|
1
|
+
{"version":3,"file":"account.cjs","sourceRoot":"","sources":["../../../src/api/multichain/account.ts"],"names":[],"mappings":"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","sourcesContent":["import { type KeyringAccount } from '@metamask/keyring-api';\nimport { isScopeEqualToAny } from '@metamask/keyring-utils';\n\nimport type {\n MultichainAccountWallet,\n MultichainAccountWalletId,\n} from './wallet';\nimport type { Bip44Account } from '../bip44';\nimport type { AccountGroup } from '../group';\nimport { AccountGroupType } from '../group';\nimport type { AccountProvider } from '../provider';\nimport type { AccountSelector } from '../selector';\nimport { AccountWalletType } from '../wallet';\n\nconst MULTICHAIN_ACCOUNT_ID_REGEX = new RegExp(\n `^${AccountWalletType.Entropy}:.*/(?<groupIndex>\\\\d+)$`,\n 'u',\n);\n\n/**\n * Multichain account ID.\n */\nexport type MultichainAccountId = `${MultichainAccountWalletId}/${number}`; // Use number for the account group index.\n\n/**\n * A multichain account that holds multiple accounts.\n */\nexport class MultichainAccount<Account extends Bip44Account<KeyringAccount>>\n implements AccountGroup<Account>\n{\n readonly #id: MultichainAccountId;\n\n readonly #wallet: MultichainAccountWallet<Account>;\n\n readonly #index: number;\n\n readonly #providers: AccountProvider<Account>[];\n\n readonly #providerToAccounts: Map<AccountProvider<Account>, Account['id'][]>;\n\n readonly #accountToProvider: Map<Account['id'], AccountProvider<Account>>;\n\n constructor({\n groupIndex,\n wallet,\n providers,\n }: {\n groupIndex: number;\n wallet: MultichainAccountWallet<Account>;\n providers: AccountProvider<Account>[];\n }) {\n this.#id = toMultichainAccountId(wallet.id, groupIndex);\n this.#index = groupIndex;\n this.#wallet = wallet;\n this.#providers = providers;\n this.#providerToAccounts = new Map();\n this.#accountToProvider = new Map();\n\n this.sync();\n }\n\n /**\n * Force multichain account synchronization.\n *\n * This can be used if account providers got new accounts that the multichain\n * account doesn't know about.\n */\n sync(): void {\n // Clear reverse mapping and re-construct it entirely based on the refreshed\n // list of accounts from each providers.\n this.#accountToProvider.clear();\n\n for (const provider of this.#providers) {\n // Filter account only for that index.\n const accounts = [];\n for (const account of provider.getAccounts()) {\n if (\n account.options.entropy.id === this.wallet.entropySource &&\n account.options.entropy.groupIndex === this.index\n ) {\n // We only use IDs to always fetch the latest version of accounts.\n accounts.push(account.id);\n }\n }\n this.#providerToAccounts.set(provider, accounts);\n\n // Reverse-mapping for fast indexing.\n for (const id of accounts) {\n this.#accountToProvider.set(id, provider);\n }\n }\n }\n\n /**\n * Gets the multichain account ID.\n *\n * @returns The multichain account ID.\n */\n get id(): MultichainAccountId {\n return this.#id;\n }\n\n /**\n * Gets the multichain account type.\n *\n * @returns The multichain account type.\n */\n get type(): AccountGroupType.MultichainAccount {\n return AccountGroupType.MultichainAccount;\n }\n\n /**\n * Gets the multichain account's wallet reference (parent).\n *\n * @returns The multichain account's wallet.\n */\n get wallet(): MultichainAccountWallet<Account> {\n return this.#wallet;\n }\n\n /**\n * Gets the multichain account group index.\n *\n * @returns The multichain account group index.\n */\n get index(): number {\n return this.#index;\n }\n\n /**\n * Checks if there's any underlying accounts for this multichain accounts.\n *\n * @returns True if there's any underlying accounts, false otherwise.\n */\n hasAccounts(): boolean {\n // If there's anything in the reverse-map, it means we have some accounts.\n return this.#accountToProvider.size > 0;\n }\n\n /**\n * Gets the accounts for this multichain account.\n *\n * @returns The accounts.\n */\n getAccounts(): Account[] {\n const allAccounts: Account[] = [];\n\n for (const [provider, accounts] of this.#providerToAccounts.entries()) {\n for (const id of accounts) {\n const account = provider.getAccount(id);\n\n if (account) {\n // If for some reason we cannot get this account from the provider, it\n // might means it has been deleted or something, so we just filter it\n // out.\n allAccounts.push(account);\n }\n }\n }\n\n return allAccounts;\n }\n\n /**\n * Gets the account for a given account ID.\n *\n * @param id - Account ID.\n * @returns The account or undefined if not found.\n */\n getAccount(id: Account['id']): Account | undefined {\n const provider = this.#accountToProvider.get(id);\n\n // If there's nothing in the map, it means we tried to get an account\n // that does not belong to this multichain account.\n if (!provider) {\n return undefined;\n }\n return provider.getAccount(id);\n }\n\n /**\n * Query an account matching the selector.\n *\n * @param selector - Query selector.\n * @returns The account matching the selector or undefined if not matching.\n * @throws If multiple accounts match the selector.\n */\n get(selector: AccountSelector<Account>): Account | undefined {\n const accounts = this.select(selector);\n\n if (accounts.length > 1) {\n throw new Error(\n `Too many account candidates, expected 1, got: ${accounts.length}`,\n );\n }\n\n if (accounts.length === 0) {\n return undefined;\n }\n\n return accounts[0]; // This is safe, see checks above.\n }\n\n /**\n * Query accounts matching the selector.\n *\n * @param selector - Query selector.\n * @returns The accounts matching the selector.\n */\n select(selector: AccountSelector<Account>): Account[] {\n return this.getAccounts().filter((account) => {\n let selected = true;\n\n if (selector.id) {\n selected &&= account.id === selector.id;\n }\n if (selector.address) {\n selected &&= account.address === selector.address;\n }\n if (selector.type) {\n selected &&= account.type === selector.type;\n }\n if (selector.methods !== undefined) {\n selected &&= selector.methods.some((method) =>\n account.methods.includes(method),\n );\n }\n if (selector.scopes !== undefined) {\n selected &&= selector.scopes.some((scope) => {\n return (\n // This will cover specific EVM EOA scopes as well.\n isScopeEqualToAny(scope, account.scopes)\n );\n });\n }\n\n return selected;\n });\n }\n}\n\n/**\n * Gets the multichain account ID from its multichain account wallet ID and its index.\n *\n * @param walletId - Multichain account wallet ID.\n * @param groupIndex - Index of that multichain account.\n * @returns The multichain account ID.\n */\nexport function toMultichainAccountId(\n walletId: MultichainAccountWalletId,\n groupIndex: number,\n): MultichainAccountId {\n return `${walletId}/${groupIndex}`;\n}\n\n/**\n * Checks if the given value is {@link MultichainAccountId}.\n *\n * @param value - The value to check.\n * @returns Whether the value is a {@link MultichainAccountId}.\n */\nexport function isMultichainAccountId(\n value: string,\n): value is MultichainAccountId {\n return MULTICHAIN_ACCOUNT_ID_REGEX.test(value);\n}\n\n/**\n * Gets the multichain account index from an account group ID.\n *\n * @param id - Multichain account ID.\n * @returns The multichain account index if extractable, undefined otherwise.\n */\nexport function getGroupIndexFromMultichainAccountId(\n id: MultichainAccountId,\n): number {\n const matched = id.match(MULTICHAIN_ACCOUNT_ID_REGEX);\n if (matched?.groups?.groupIndex === undefined) {\n // Unable to extract group index, even though, type wise, this should not\n // be possible!\n throw new Error('Unable to extract group index');\n }\n\n return Number(matched.groups.groupIndex);\n}\n"]}
|
|
@@ -2,6 +2,7 @@ import { type KeyringAccount } from "@metamask/keyring-api";
|
|
|
2
2
|
import type { MultichainAccountWallet, MultichainAccountWalletId } from "./wallet.cjs";
|
|
3
3
|
import type { Bip44Account } from "../bip44.cjs";
|
|
4
4
|
import type { AccountGroup } from "../group.cjs";
|
|
5
|
+
import { AccountGroupType } from "../group.cjs";
|
|
5
6
|
import type { AccountProvider } from "../provider.cjs";
|
|
6
7
|
import type { AccountSelector } from "../selector.cjs";
|
|
7
8
|
/**
|
|
@@ -31,6 +32,12 @@ export declare class MultichainAccount<Account extends Bip44Account<KeyringAccou
|
|
|
31
32
|
* @returns The multichain account ID.
|
|
32
33
|
*/
|
|
33
34
|
get id(): MultichainAccountId;
|
|
35
|
+
/**
|
|
36
|
+
* Gets the multichain account type.
|
|
37
|
+
*
|
|
38
|
+
* @returns The multichain account type.
|
|
39
|
+
*/
|
|
40
|
+
get type(): AccountGroupType.MultichainAccount;
|
|
34
41
|
/**
|
|
35
42
|
* Gets the multichain account's wallet reference (parent).
|
|
36
43
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"account.d.cts","sourceRoot":"","sources":["../../../src/api/multichain/account.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAAE,8BAA8B;AAG5D,OAAO,KAAK,EACV,uBAAuB,EACvB,yBAAyB,EAC1B,qBAAiB;AAClB,OAAO,KAAK,EAAE,YAAY,EAAE,qBAAiB;AAC7C,OAAO,KAAK,EAAE,YAAY,EAAE,qBAAiB;AAC7C,OAAO,KAAK,EAAE,eAAe,EAAE,wBAAoB;AACnD,OAAO,KAAK,EAAE,eAAe,EAAE,wBAAoB;AAQnD;;GAEG;AACH,MAAM,MAAM,mBAAmB,GAAG,GAAG,yBAAyB,IAAI,MAAM,EAAE,CAAC;AAE3E;;GAEG;AACH,qBAAa,iBAAiB,CAAC,OAAO,SAAS,YAAY,CAAC,cAAc,CAAC,CACzE,YAAW,YAAY,CAAC,OAAO,CAAC;;gBAcpB,EACV,UAAU,EACV,MAAM,EACN,SAAS,GACV,EAAE;QACD,UAAU,EAAE,MAAM,CAAC;QACnB,MAAM,EAAE,uBAAuB,CAAC,OAAO,CAAC,CAAC;QACzC,SAAS,EAAE,eAAe,CAAC,OAAO,CAAC,EAAE,CAAC;KACvC;IAWD;;;;;OAKG;IACH,IAAI,IAAI,IAAI;IA0BZ;;;;OAIG;IACH,IAAI,EAAE,IAAI,mBAAmB,CAE5B;IAED;;;;OAIG;IACH,IAAI,MAAM,IAAI,uBAAuB,CAAC,OAAO,CAAC,CAE7C;IAED;;;;OAIG;IACH,IAAI,KAAK,IAAI,MAAM,CAElB;IAED;;;;OAIG;IACH,WAAW,IAAI,OAAO;IAKtB;;;;OAIG;IACH,WAAW,IAAI,OAAO,EAAE;IAmBxB;;;;;OAKG;IACH,UAAU,CAAC,EAAE,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,GAAG,SAAS;IAWlD;;;;;;OAMG;IACH,GAAG,CAAC,QAAQ,EAAE,eAAe,CAAC,OAAO,CAAC,GAAG,OAAO,GAAG,SAAS;IAgB5D;;;;;OAKG;IACH,MAAM,CAAC,QAAQ,EAAE,eAAe,CAAC,OAAO,CAAC,GAAG,OAAO,EAAE;CA8BtD;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,yBAAyB,EACnC,UAAU,EAAE,MAAM,GACjB,mBAAmB,CAErB;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,MAAM,GACZ,KAAK,IAAI,mBAAmB,CAE9B;AAED;;;;;GAKG;AACH,wBAAgB,oCAAoC,CAClD,EAAE,EAAE,mBAAmB,GACtB,MAAM,CASR"}
|
|
1
|
+
{"version":3,"file":"account.d.cts","sourceRoot":"","sources":["../../../src/api/multichain/account.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAAE,8BAA8B;AAG5D,OAAO,KAAK,EACV,uBAAuB,EACvB,yBAAyB,EAC1B,qBAAiB;AAClB,OAAO,KAAK,EAAE,YAAY,EAAE,qBAAiB;AAC7C,OAAO,KAAK,EAAE,YAAY,EAAE,qBAAiB;AAC7C,OAAO,EAAE,gBAAgB,EAAE,qBAAiB;AAC5C,OAAO,KAAK,EAAE,eAAe,EAAE,wBAAoB;AACnD,OAAO,KAAK,EAAE,eAAe,EAAE,wBAAoB;AAQnD;;GAEG;AACH,MAAM,MAAM,mBAAmB,GAAG,GAAG,yBAAyB,IAAI,MAAM,EAAE,CAAC;AAE3E;;GAEG;AACH,qBAAa,iBAAiB,CAAC,OAAO,SAAS,YAAY,CAAC,cAAc,CAAC,CACzE,YAAW,YAAY,CAAC,OAAO,CAAC;;gBAcpB,EACV,UAAU,EACV,MAAM,EACN,SAAS,GACV,EAAE;QACD,UAAU,EAAE,MAAM,CAAC;QACnB,MAAM,EAAE,uBAAuB,CAAC,OAAO,CAAC,CAAC;QACzC,SAAS,EAAE,eAAe,CAAC,OAAO,CAAC,EAAE,CAAC;KACvC;IAWD;;;;;OAKG;IACH,IAAI,IAAI,IAAI;IA0BZ;;;;OAIG;IACH,IAAI,EAAE,IAAI,mBAAmB,CAE5B;IAED;;;;OAIG;IACH,IAAI,IAAI,IAAI,gBAAgB,CAAC,iBAAiB,CAE7C;IAED;;;;OAIG;IACH,IAAI,MAAM,IAAI,uBAAuB,CAAC,OAAO,CAAC,CAE7C;IAED;;;;OAIG;IACH,IAAI,KAAK,IAAI,MAAM,CAElB;IAED;;;;OAIG;IACH,WAAW,IAAI,OAAO;IAKtB;;;;OAIG;IACH,WAAW,IAAI,OAAO,EAAE;IAmBxB;;;;;OAKG;IACH,UAAU,CAAC,EAAE,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,GAAG,SAAS;IAWlD;;;;;;OAMG;IACH,GAAG,CAAC,QAAQ,EAAE,eAAe,CAAC,OAAO,CAAC,GAAG,OAAO,GAAG,SAAS;IAgB5D;;;;;OAKG;IACH,MAAM,CAAC,QAAQ,EAAE,eAAe,CAAC,OAAO,CAAC,GAAG,OAAO,EAAE;CA8BtD;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,yBAAyB,EACnC,UAAU,EAAE,MAAM,GACjB,mBAAmB,CAErB;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,MAAM,GACZ,KAAK,IAAI,mBAAmB,CAE9B;AAED;;;;;GAKG;AACH,wBAAgB,oCAAoC,CAClD,EAAE,EAAE,mBAAmB,GACtB,MAAM,CASR"}
|
|
@@ -2,6 +2,7 @@ import { type KeyringAccount } from "@metamask/keyring-api";
|
|
|
2
2
|
import type { MultichainAccountWallet, MultichainAccountWalletId } from "./wallet.mjs";
|
|
3
3
|
import type { Bip44Account } from "../bip44.mjs";
|
|
4
4
|
import type { AccountGroup } from "../group.mjs";
|
|
5
|
+
import { AccountGroupType } from "../group.mjs";
|
|
5
6
|
import type { AccountProvider } from "../provider.mjs";
|
|
6
7
|
import type { AccountSelector } from "../selector.mjs";
|
|
7
8
|
/**
|
|
@@ -31,6 +32,12 @@ export declare class MultichainAccount<Account extends Bip44Account<KeyringAccou
|
|
|
31
32
|
* @returns The multichain account ID.
|
|
32
33
|
*/
|
|
33
34
|
get id(): MultichainAccountId;
|
|
35
|
+
/**
|
|
36
|
+
* Gets the multichain account type.
|
|
37
|
+
*
|
|
38
|
+
* @returns The multichain account type.
|
|
39
|
+
*/
|
|
40
|
+
get type(): AccountGroupType.MultichainAccount;
|
|
34
41
|
/**
|
|
35
42
|
* Gets the multichain account's wallet reference (parent).
|
|
36
43
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"account.d.mts","sourceRoot":"","sources":["../../../src/api/multichain/account.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAAE,8BAA8B;AAG5D,OAAO,KAAK,EACV,uBAAuB,EACvB,yBAAyB,EAC1B,qBAAiB;AAClB,OAAO,KAAK,EAAE,YAAY,EAAE,qBAAiB;AAC7C,OAAO,KAAK,EAAE,YAAY,EAAE,qBAAiB;AAC7C,OAAO,KAAK,EAAE,eAAe,EAAE,wBAAoB;AACnD,OAAO,KAAK,EAAE,eAAe,EAAE,wBAAoB;AAQnD;;GAEG;AACH,MAAM,MAAM,mBAAmB,GAAG,GAAG,yBAAyB,IAAI,MAAM,EAAE,CAAC;AAE3E;;GAEG;AACH,qBAAa,iBAAiB,CAAC,OAAO,SAAS,YAAY,CAAC,cAAc,CAAC,CACzE,YAAW,YAAY,CAAC,OAAO,CAAC;;gBAcpB,EACV,UAAU,EACV,MAAM,EACN,SAAS,GACV,EAAE;QACD,UAAU,EAAE,MAAM,CAAC;QACnB,MAAM,EAAE,uBAAuB,CAAC,OAAO,CAAC,CAAC;QACzC,SAAS,EAAE,eAAe,CAAC,OAAO,CAAC,EAAE,CAAC;KACvC;IAWD;;;;;OAKG;IACH,IAAI,IAAI,IAAI;IA0BZ;;;;OAIG;IACH,IAAI,EAAE,IAAI,mBAAmB,CAE5B;IAED;;;;OAIG;IACH,IAAI,MAAM,IAAI,uBAAuB,CAAC,OAAO,CAAC,CAE7C;IAED;;;;OAIG;IACH,IAAI,KAAK,IAAI,MAAM,CAElB;IAED;;;;OAIG;IACH,WAAW,IAAI,OAAO;IAKtB;;;;OAIG;IACH,WAAW,IAAI,OAAO,EAAE;IAmBxB;;;;;OAKG;IACH,UAAU,CAAC,EAAE,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,GAAG,SAAS;IAWlD;;;;;;OAMG;IACH,GAAG,CAAC,QAAQ,EAAE,eAAe,CAAC,OAAO,CAAC,GAAG,OAAO,GAAG,SAAS;IAgB5D;;;;;OAKG;IACH,MAAM,CAAC,QAAQ,EAAE,eAAe,CAAC,OAAO,CAAC,GAAG,OAAO,EAAE;CA8BtD;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,yBAAyB,EACnC,UAAU,EAAE,MAAM,GACjB,mBAAmB,CAErB;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,MAAM,GACZ,KAAK,IAAI,mBAAmB,CAE9B;AAED;;;;;GAKG;AACH,wBAAgB,oCAAoC,CAClD,EAAE,EAAE,mBAAmB,GACtB,MAAM,CASR"}
|
|
1
|
+
{"version":3,"file":"account.d.mts","sourceRoot":"","sources":["../../../src/api/multichain/account.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAAE,8BAA8B;AAG5D,OAAO,KAAK,EACV,uBAAuB,EACvB,yBAAyB,EAC1B,qBAAiB;AAClB,OAAO,KAAK,EAAE,YAAY,EAAE,qBAAiB;AAC7C,OAAO,KAAK,EAAE,YAAY,EAAE,qBAAiB;AAC7C,OAAO,EAAE,gBAAgB,EAAE,qBAAiB;AAC5C,OAAO,KAAK,EAAE,eAAe,EAAE,wBAAoB;AACnD,OAAO,KAAK,EAAE,eAAe,EAAE,wBAAoB;AAQnD;;GAEG;AACH,MAAM,MAAM,mBAAmB,GAAG,GAAG,yBAAyB,IAAI,MAAM,EAAE,CAAC;AAE3E;;GAEG;AACH,qBAAa,iBAAiB,CAAC,OAAO,SAAS,YAAY,CAAC,cAAc,CAAC,CACzE,YAAW,YAAY,CAAC,OAAO,CAAC;;gBAcpB,EACV,UAAU,EACV,MAAM,EACN,SAAS,GACV,EAAE;QACD,UAAU,EAAE,MAAM,CAAC;QACnB,MAAM,EAAE,uBAAuB,CAAC,OAAO,CAAC,CAAC;QACzC,SAAS,EAAE,eAAe,CAAC,OAAO,CAAC,EAAE,CAAC;KACvC;IAWD;;;;;OAKG;IACH,IAAI,IAAI,IAAI;IA0BZ;;;;OAIG;IACH,IAAI,EAAE,IAAI,mBAAmB,CAE5B;IAED;;;;OAIG;IACH,IAAI,IAAI,IAAI,gBAAgB,CAAC,iBAAiB,CAE7C;IAED;;;;OAIG;IACH,IAAI,MAAM,IAAI,uBAAuB,CAAC,OAAO,CAAC,CAE7C;IAED;;;;OAIG;IACH,IAAI,KAAK,IAAI,MAAM,CAElB;IAED;;;;OAIG;IACH,WAAW,IAAI,OAAO;IAKtB;;;;OAIG;IACH,WAAW,IAAI,OAAO,EAAE;IAmBxB;;;;;OAKG;IACH,UAAU,CAAC,EAAE,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,GAAG,SAAS;IAWlD;;;;;;OAMG;IACH,GAAG,CAAC,QAAQ,EAAE,eAAe,CAAC,OAAO,CAAC,GAAG,OAAO,GAAG,SAAS;IAgB5D;;;;;OAKG;IACH,MAAM,CAAC,QAAQ,EAAE,eAAe,CAAC,OAAO,CAAC,GAAG,OAAO,EAAE;CA8BtD;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,yBAAyB,EACnC,UAAU,EAAE,MAAM,GACjB,mBAAmB,CAErB;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,MAAM,GACZ,KAAK,IAAI,mBAAmB,CAE9B;AAED;;;;;GAKG;AACH,wBAAgB,oCAAoC,CAClD,EAAE,EAAE,mBAAmB,GACtB,MAAM,CASR"}
|
|
@@ -9,10 +9,11 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
|
|
|
9
9
|
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
10
10
|
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
11
11
|
};
|
|
12
|
-
var _MultichainAccount_id, _MultichainAccount_wallet, _MultichainAccount_index, _MultichainAccount_providers,
|
|
12
|
+
var _MultichainAccount_id, _MultichainAccount_wallet, _MultichainAccount_index, _MultichainAccount_providers, _MultichainAccount_providerToAccounts, _MultichainAccount_accountToProvider;
|
|
13
13
|
import { isScopeEqualToAny } from "@metamask/keyring-utils";
|
|
14
|
-
import {
|
|
15
|
-
|
|
14
|
+
import { AccountGroupType } from "../group.mjs";
|
|
15
|
+
import { AccountWalletType } from "../wallet.mjs";
|
|
16
|
+
const MULTICHAIN_ACCOUNT_ID_REGEX = new RegExp(`^${AccountWalletType.Entropy}:.*/(?<groupIndex>\\d+)$`, 'u');
|
|
16
17
|
/**
|
|
17
18
|
* A multichain account that holds multiple accounts.
|
|
18
19
|
*/
|
|
@@ -22,14 +23,14 @@ export class MultichainAccount {
|
|
|
22
23
|
_MultichainAccount_wallet.set(this, void 0);
|
|
23
24
|
_MultichainAccount_index.set(this, void 0);
|
|
24
25
|
_MultichainAccount_providers.set(this, void 0);
|
|
25
|
-
|
|
26
|
-
|
|
26
|
+
_MultichainAccount_providerToAccounts.set(this, void 0);
|
|
27
|
+
_MultichainAccount_accountToProvider.set(this, void 0);
|
|
27
28
|
__classPrivateFieldSet(this, _MultichainAccount_id, toMultichainAccountId(wallet.id, groupIndex), "f");
|
|
28
29
|
__classPrivateFieldSet(this, _MultichainAccount_index, groupIndex, "f");
|
|
29
30
|
__classPrivateFieldSet(this, _MultichainAccount_wallet, wallet, "f");
|
|
30
31
|
__classPrivateFieldSet(this, _MultichainAccount_providers, providers, "f");
|
|
31
|
-
__classPrivateFieldSet(this,
|
|
32
|
-
__classPrivateFieldSet(this,
|
|
32
|
+
__classPrivateFieldSet(this, _MultichainAccount_providerToAccounts, new Map(), "f");
|
|
33
|
+
__classPrivateFieldSet(this, _MultichainAccount_accountToProvider, new Map(), "f");
|
|
33
34
|
this.sync();
|
|
34
35
|
}
|
|
35
36
|
/**
|
|
@@ -41,7 +42,7 @@ export class MultichainAccount {
|
|
|
41
42
|
sync() {
|
|
42
43
|
// Clear reverse mapping and re-construct it entirely based on the refreshed
|
|
43
44
|
// list of accounts from each providers.
|
|
44
|
-
__classPrivateFieldGet(this,
|
|
45
|
+
__classPrivateFieldGet(this, _MultichainAccount_accountToProvider, "f").clear();
|
|
45
46
|
for (const provider of __classPrivateFieldGet(this, _MultichainAccount_providers, "f")) {
|
|
46
47
|
// Filter account only for that index.
|
|
47
48
|
const accounts = [];
|
|
@@ -52,10 +53,10 @@ export class MultichainAccount {
|
|
|
52
53
|
accounts.push(account.id);
|
|
53
54
|
}
|
|
54
55
|
}
|
|
55
|
-
__classPrivateFieldGet(this,
|
|
56
|
+
__classPrivateFieldGet(this, _MultichainAccount_providerToAccounts, "f").set(provider, accounts);
|
|
56
57
|
// Reverse-mapping for fast indexing.
|
|
57
58
|
for (const id of accounts) {
|
|
58
|
-
__classPrivateFieldGet(this,
|
|
59
|
+
__classPrivateFieldGet(this, _MultichainAccount_accountToProvider, "f").set(id, provider);
|
|
59
60
|
}
|
|
60
61
|
}
|
|
61
62
|
}
|
|
@@ -67,6 +68,14 @@ export class MultichainAccount {
|
|
|
67
68
|
get id() {
|
|
68
69
|
return __classPrivateFieldGet(this, _MultichainAccount_id, "f");
|
|
69
70
|
}
|
|
71
|
+
/**
|
|
72
|
+
* Gets the multichain account type.
|
|
73
|
+
*
|
|
74
|
+
* @returns The multichain account type.
|
|
75
|
+
*/
|
|
76
|
+
get type() {
|
|
77
|
+
return AccountGroupType.MultichainAccount;
|
|
78
|
+
}
|
|
70
79
|
/**
|
|
71
80
|
* Gets the multichain account's wallet reference (parent).
|
|
72
81
|
*
|
|
@@ -90,7 +99,7 @@ export class MultichainAccount {
|
|
|
90
99
|
*/
|
|
91
100
|
hasAccounts() {
|
|
92
101
|
// If there's anything in the reverse-map, it means we have some accounts.
|
|
93
|
-
return __classPrivateFieldGet(this,
|
|
102
|
+
return __classPrivateFieldGet(this, _MultichainAccount_accountToProvider, "f").size > 0;
|
|
94
103
|
}
|
|
95
104
|
/**
|
|
96
105
|
* Gets the accounts for this multichain account.
|
|
@@ -99,7 +108,7 @@ export class MultichainAccount {
|
|
|
99
108
|
*/
|
|
100
109
|
getAccounts() {
|
|
101
110
|
const allAccounts = [];
|
|
102
|
-
for (const [provider, accounts] of __classPrivateFieldGet(this,
|
|
111
|
+
for (const [provider, accounts] of __classPrivateFieldGet(this, _MultichainAccount_providerToAccounts, "f").entries()) {
|
|
103
112
|
for (const id of accounts) {
|
|
104
113
|
const account = provider.getAccount(id);
|
|
105
114
|
if (account) {
|
|
@@ -119,7 +128,7 @@ export class MultichainAccount {
|
|
|
119
128
|
* @returns The account or undefined if not found.
|
|
120
129
|
*/
|
|
121
130
|
getAccount(id) {
|
|
122
|
-
const provider = __classPrivateFieldGet(this,
|
|
131
|
+
const provider = __classPrivateFieldGet(this, _MultichainAccount_accountToProvider, "f").get(id);
|
|
123
132
|
// If there's nothing in the map, it means we tried to get an account
|
|
124
133
|
// that does not belong to this multichain account.
|
|
125
134
|
if (!provider) {
|
|
@@ -176,7 +185,7 @@ export class MultichainAccount {
|
|
|
176
185
|
});
|
|
177
186
|
}
|
|
178
187
|
}
|
|
179
|
-
_MultichainAccount_id = new WeakMap(), _MultichainAccount_wallet = new WeakMap(), _MultichainAccount_index = new WeakMap(), _MultichainAccount_providers = new WeakMap(),
|
|
188
|
+
_MultichainAccount_id = new WeakMap(), _MultichainAccount_wallet = new WeakMap(), _MultichainAccount_index = new WeakMap(), _MultichainAccount_providers = new WeakMap(), _MultichainAccount_providerToAccounts = new WeakMap(), _MultichainAccount_accountToProvider = new WeakMap();
|
|
180
189
|
/**
|
|
181
190
|
* Gets the multichain account ID from its multichain account wallet ID and its index.
|
|
182
191
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"account.mjs","sourceRoot":"","sources":["../../../src/api/multichain/account.ts"],"names":[],"mappings":"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","sourcesContent":["import { type KeyringAccount } from '@metamask/keyring-api';\nimport { isScopeEqualToAny } from '@metamask/keyring-utils';\n\nimport type {\n MultichainAccountWallet,\n MultichainAccountWalletId,\n} from './wallet';\nimport type { Bip44Account } from '../bip44';\nimport type { AccountGroup } from '../group';\nimport type { AccountProvider } from '../provider';\nimport type { AccountSelector } from '../selector';\nimport { AccountWalletCategory } from '../wallet';\n\nconst MULTICHAIN_ACCOUNT_ID_REGEX = new RegExp(\n `^${AccountWalletCategory.Entropy}:.*/(?<groupIndex>\\\\d+)$`,\n 'u',\n);\n\n/**\n * Multichain account ID.\n */\nexport type MultichainAccountId = `${MultichainAccountWalletId}/${number}`; // Use number for the account group index.\n\n/**\n * A multichain account that holds multiple accounts.\n */\nexport class MultichainAccount<Account extends Bip44Account<KeyringAccount>>\n implements AccountGroup<Account>\n{\n readonly #id: MultichainAccountId;\n\n readonly #wallet: MultichainAccountWallet<Account>;\n\n readonly #index: number;\n\n readonly #providers: AccountProvider<Account>[];\n\n readonly #accounts: Map<AccountProvider<Account>, Account['id'][]>;\n\n readonly #reverse: Map<Account['id'], AccountProvider<Account>>;\n\n constructor({\n groupIndex,\n wallet,\n providers,\n }: {\n groupIndex: number;\n wallet: MultichainAccountWallet<Account>;\n providers: AccountProvider<Account>[];\n }) {\n this.#id = toMultichainAccountId(wallet.id, groupIndex);\n this.#index = groupIndex;\n this.#wallet = wallet;\n this.#providers = providers;\n this.#accounts = new Map();\n this.#reverse = new Map();\n\n this.sync();\n }\n\n /**\n * Force multichain account synchronization.\n *\n * This can be used if account providers got new accounts that the multichain\n * account doesn't know about.\n */\n sync(): void {\n // Clear reverse mapping and re-construct it entirely based on the refreshed\n // list of accounts from each providers.\n this.#reverse.clear();\n\n for (const provider of this.#providers) {\n // Filter account only for that index.\n const accounts = [];\n for (const account of provider.getAccounts()) {\n if (\n account.options.entropy.id === this.wallet.entropySource &&\n account.options.entropy.groupIndex === this.index\n ) {\n // We only use IDs to always fetch the latest version of accounts.\n accounts.push(account.id);\n }\n }\n this.#accounts.set(provider, accounts);\n\n // Reverse-mapping for fast indexing.\n for (const id of accounts) {\n this.#reverse.set(id, provider);\n }\n }\n }\n\n /**\n * Gets the multichain account ID.\n *\n * @returns The multichain account ID.\n */\n get id(): MultichainAccountId {\n return this.#id;\n }\n\n /**\n * Gets the multichain account's wallet reference (parent).\n *\n * @returns The multichain account's wallet.\n */\n get wallet(): MultichainAccountWallet<Account> {\n return this.#wallet;\n }\n\n /**\n * Gets the multichain account group index.\n *\n * @returns The multichain account group index.\n */\n get index(): number {\n return this.#index;\n }\n\n /**\n * Checks if there's any underlying accounts for this multichain accounts.\n *\n * @returns True if there's any underlying accounts, false otherwise.\n */\n hasAccounts(): boolean {\n // If there's anything in the reverse-map, it means we have some accounts.\n return this.#reverse.size > 0;\n }\n\n /**\n * Gets the accounts for this multichain account.\n *\n * @returns The accounts.\n */\n getAccounts(): Account[] {\n const allAccounts: Account[] = [];\n\n for (const [provider, accounts] of this.#accounts.entries()) {\n for (const id of accounts) {\n const account = provider.getAccount(id);\n\n if (account) {\n // If for some reason we cannot get this account from the provider, it\n // might means it has been deleted or something, so we just filter it\n // out.\n allAccounts.push(account);\n }\n }\n }\n\n return allAccounts;\n }\n\n /**\n * Gets the account for a given account ID.\n *\n * @param id - Account ID.\n * @returns The account or undefined if not found.\n */\n getAccount(id: Account['id']): Account | undefined {\n const provider = this.#reverse.get(id);\n\n // If there's nothing in the map, it means we tried to get an account\n // that does not belong to this multichain account.\n if (!provider) {\n return undefined;\n }\n return provider.getAccount(id);\n }\n\n /**\n * Query an account matching the selector.\n *\n * @param selector - Query selector.\n * @returns The account matching the selector or undefined if not matching.\n * @throws If multiple accounts match the selector.\n */\n get(selector: AccountSelector<Account>): Account | undefined {\n const accounts = this.select(selector);\n\n if (accounts.length > 1) {\n throw new Error(\n `Too many account candidates, expected 1, got: ${accounts.length}`,\n );\n }\n\n if (accounts.length === 0) {\n return undefined;\n }\n\n return accounts[0]; // This is safe, see checks above.\n }\n\n /**\n * Query accounts matching the selector.\n *\n * @param selector - Query selector.\n * @returns The accounts matching the selector.\n */\n select(selector: AccountSelector<Account>): Account[] {\n return this.getAccounts().filter((account) => {\n let selected = true;\n\n if (selector.id) {\n selected &&= account.id === selector.id;\n }\n if (selector.address) {\n selected &&= account.address === selector.address;\n }\n if (selector.type) {\n selected &&= account.type === selector.type;\n }\n if (selector.methods !== undefined) {\n selected &&= selector.methods.some((method) =>\n account.methods.includes(method),\n );\n }\n if (selector.scopes !== undefined) {\n selected &&= selector.scopes.some((scope) => {\n return (\n // This will cover specific EVM EOA scopes as well.\n isScopeEqualToAny(scope, account.scopes)\n );\n });\n }\n\n return selected;\n });\n }\n}\n\n/**\n * Gets the multichain account ID from its multichain account wallet ID and its index.\n *\n * @param walletId - Multichain account wallet ID.\n * @param groupIndex - Index of that multichain account.\n * @returns The multichain account ID.\n */\nexport function toMultichainAccountId(\n walletId: MultichainAccountWalletId,\n groupIndex: number,\n): MultichainAccountId {\n return `${walletId}/${groupIndex}`;\n}\n\n/**\n * Checks if the given value is {@link MultichainAccountId}.\n *\n * @param value - The value to check.\n * @returns Whether the value is a {@link MultichainAccountId}.\n */\nexport function isMultichainAccountId(\n value: string,\n): value is MultichainAccountId {\n return MULTICHAIN_ACCOUNT_ID_REGEX.test(value);\n}\n\n/**\n * Gets the multichain account index from an account group ID.\n *\n * @param id - Multichain account ID.\n * @returns The multichain account index if extractable, undefined otherwise.\n */\nexport function getGroupIndexFromMultichainAccountId(\n id: MultichainAccountId,\n): number {\n const matched = id.match(MULTICHAIN_ACCOUNT_ID_REGEX);\n if (matched?.groups?.groupIndex === undefined) {\n // Unable to extract group index, even though, type wise, this should not\n // be possible!\n throw new Error('Unable to extract group index');\n }\n\n return Number(matched.groups.groupIndex);\n}\n"]}
|
|
1
|
+
{"version":3,"file":"account.mjs","sourceRoot":"","sources":["../../../src/api/multichain/account.ts"],"names":[],"mappings":";;;;;;;;;;;;AACA,OAAO,EAAE,iBAAiB,EAAE,gCAAgC;AAQ5D,OAAO,EAAE,gBAAgB,EAAE,qBAAiB;AAG5C,OAAO,EAAE,iBAAiB,EAAE,sBAAkB;AAE9C,MAAM,2BAA2B,GAAG,IAAI,MAAM,CAC5C,IAAI,iBAAiB,CAAC,OAAO,0BAA0B,EACvD,GAAG,CACJ,CAAC;AAOF;;GAEG;AACH,MAAM,OAAO,iBAAiB;IAe5B,YAAY,EACV,UAAU,EACV,MAAM,EACN,SAAS,GAKV;QApBQ,wCAAyB;QAEzB,4CAA0C;QAE1C,2CAAe;QAEf,+CAAuC;QAEvC,wDAAoE;QAEpE,uDAAiE;QAWxE,uBAAA,IAAI,yBAAO,qBAAqB,CAAC,MAAM,CAAC,EAAE,EAAE,UAAU,CAAC,MAAA,CAAC;QACxD,uBAAA,IAAI,4BAAU,UAAU,MAAA,CAAC;QACzB,uBAAA,IAAI,6BAAW,MAAM,MAAA,CAAC;QACtB,uBAAA,IAAI,gCAAc,SAAS,MAAA,CAAC;QAC5B,uBAAA,IAAI,yCAAuB,IAAI,GAAG,EAAE,MAAA,CAAC;QACrC,uBAAA,IAAI,wCAAsB,IAAI,GAAG,EAAE,MAAA,CAAC;QAEpC,IAAI,CAAC,IAAI,EAAE,CAAC;IACd,CAAC;IAED;;;;;OAKG;IACH,IAAI;QACF,4EAA4E;QAC5E,wCAAwC;QACxC,uBAAA,IAAI,4CAAmB,CAAC,KAAK,EAAE,CAAC;QAEhC,KAAK,MAAM,QAAQ,IAAI,uBAAA,IAAI,oCAAW,EAAE,CAAC;YACvC,sCAAsC;YACtC,MAAM,QAAQ,GAAG,EAAE,CAAC;YACpB,KAAK,MAAM,OAAO,IAAI,QAAQ,CAAC,WAAW,EAAE,EAAE,CAAC;gBAC7C,IACE,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,KAAK,IAAI,CAAC,MAAM,CAAC,aAAa;oBACxD,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,KAAK,IAAI,CAAC,KAAK,EACjD,CAAC;oBACD,kEAAkE;oBAClE,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;gBAC5B,CAAC;YACH,CAAC;YACD,uBAAA,IAAI,6CAAoB,CAAC,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;YAEjD,qCAAqC;YACrC,KAAK,MAAM,EAAE,IAAI,QAAQ,EAAE,CAAC;gBAC1B,uBAAA,IAAI,4CAAmB,CAAC,GAAG,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;YAC5C,CAAC;QACH,CAAC;IACH,CAAC;IAED;;;;OAIG;IACH,IAAI,EAAE;QACJ,OAAO,uBAAA,IAAI,6BAAI,CAAC;IAClB,CAAC;IAED;;;;OAIG;IACH,IAAI,IAAI;QACN,OAAO,gBAAgB,CAAC,iBAAiB,CAAC;IAC5C,CAAC;IAED;;;;OAIG;IACH,IAAI,MAAM;QACR,OAAO,uBAAA,IAAI,iCAAQ,CAAC;IACtB,CAAC;IAED;;;;OAIG;IACH,IAAI,KAAK;QACP,OAAO,uBAAA,IAAI,gCAAO,CAAC;IACrB,CAAC;IAED;;;;OAIG;IACH,WAAW;QACT,0EAA0E;QAC1E,OAAO,uBAAA,IAAI,4CAAmB,CAAC,IAAI,GAAG,CAAC,CAAC;IAC1C,CAAC;IAED;;;;OAIG;IACH,WAAW;QACT,MAAM,WAAW,GAAc,EAAE,CAAC;QAElC,KAAK,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,IAAI,uBAAA,IAAI,6CAAoB,CAAC,OAAO,EAAE,EAAE,CAAC;YACtE,KAAK,MAAM,EAAE,IAAI,QAAQ,EAAE,CAAC;gBAC1B,MAAM,OAAO,GAAG,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;gBAExC,IAAI,OAAO,EAAE,CAAC;oBACZ,sEAAsE;oBACtE,qEAAqE;oBACrE,OAAO;oBACP,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBAC5B,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,WAAW,CAAC;IACrB,CAAC;IAED;;;;;OAKG;IACH,UAAU,CAAC,EAAiB;QAC1B,MAAM,QAAQ,GAAG,uBAAA,IAAI,4CAAmB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAEjD,qEAAqE;QACrE,mDAAmD;QACnD,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,OAAO,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;IACjC,CAAC;IAED;;;;;;OAMG;IACH,GAAG,CAAC,QAAkC;QACpC,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAEvC,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxB,MAAM,IAAI,KAAK,CACb,iDAAiD,QAAQ,CAAC,MAAM,EAAE,CACnE,CAAC;QACJ,CAAC;QAED,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,kCAAkC;IACxD,CAAC;IAED;;;;;OAKG;IACH,MAAM,CAAC,QAAkC;QACvC,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE;YAC3C,IAAI,QAAQ,GAAG,IAAI,CAAC;YAEpB,IAAI,QAAQ,CAAC,EAAE,EAAE,CAAC;gBAChB,QAAQ,KAAR,QAAQ,GAAK,OAAO,CAAC,EAAE,KAAK,QAAQ,CAAC,EAAE,EAAC;YAC1C,CAAC;YACD,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC;gBACrB,QAAQ,KAAR,QAAQ,GAAK,OAAO,CAAC,OAAO,KAAK,QAAQ,CAAC,OAAO,EAAC;YACpD,CAAC;YACD,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC;gBAClB,QAAQ,KAAR,QAAQ,GAAK,OAAO,CAAC,IAAI,KAAK,QAAQ,CAAC,IAAI,EAAC;YAC9C,CAAC;YACD,IAAI,QAAQ,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;gBACnC,QAAQ,KAAR,QAAQ,GAAK,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAC5C,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CACjC,EAAC;YACJ,CAAC;YACD,IAAI,QAAQ,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;gBAClC,QAAQ,KAAR,QAAQ,GAAK,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE;oBAC1C,OAAO;oBACL,mDAAmD;oBACnD,iBAAiB,CAAC,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,CACzC,CAAC;gBACJ,CAAC,CAAC,EAAC;YACL,CAAC;YAED,OAAO,QAAQ,CAAC;QAClB,CAAC,CAAC,CAAC;IACL,CAAC;CACF;;AAED;;;;;;GAMG;AACH,MAAM,UAAU,qBAAqB,CACnC,QAAmC,EACnC,UAAkB;IAElB,OAAO,GAAG,QAAQ,IAAI,UAAU,EAAE,CAAC;AACrC,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,qBAAqB,CACnC,KAAa;IAEb,OAAO,2BAA2B,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACjD,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,oCAAoC,CAClD,EAAuB;IAEvB,MAAM,OAAO,GAAG,EAAE,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC;IACtD,IAAI,OAAO,EAAE,MAAM,EAAE,UAAU,KAAK,SAAS,EAAE,CAAC;QAC9C,yEAAyE;QACzE,eAAe;QACf,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;IACnD,CAAC;IAED,OAAO,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;AAC3C,CAAC","sourcesContent":["import { type KeyringAccount } from '@metamask/keyring-api';\nimport { isScopeEqualToAny } from '@metamask/keyring-utils';\n\nimport type {\n MultichainAccountWallet,\n MultichainAccountWalletId,\n} from './wallet';\nimport type { Bip44Account } from '../bip44';\nimport type { AccountGroup } from '../group';\nimport { AccountGroupType } from '../group';\nimport type { AccountProvider } from '../provider';\nimport type { AccountSelector } from '../selector';\nimport { AccountWalletType } from '../wallet';\n\nconst MULTICHAIN_ACCOUNT_ID_REGEX = new RegExp(\n `^${AccountWalletType.Entropy}:.*/(?<groupIndex>\\\\d+)$`,\n 'u',\n);\n\n/**\n * Multichain account ID.\n */\nexport type MultichainAccountId = `${MultichainAccountWalletId}/${number}`; // Use number for the account group index.\n\n/**\n * A multichain account that holds multiple accounts.\n */\nexport class MultichainAccount<Account extends Bip44Account<KeyringAccount>>\n implements AccountGroup<Account>\n{\n readonly #id: MultichainAccountId;\n\n readonly #wallet: MultichainAccountWallet<Account>;\n\n readonly #index: number;\n\n readonly #providers: AccountProvider<Account>[];\n\n readonly #providerToAccounts: Map<AccountProvider<Account>, Account['id'][]>;\n\n readonly #accountToProvider: Map<Account['id'], AccountProvider<Account>>;\n\n constructor({\n groupIndex,\n wallet,\n providers,\n }: {\n groupIndex: number;\n wallet: MultichainAccountWallet<Account>;\n providers: AccountProvider<Account>[];\n }) {\n this.#id = toMultichainAccountId(wallet.id, groupIndex);\n this.#index = groupIndex;\n this.#wallet = wallet;\n this.#providers = providers;\n this.#providerToAccounts = new Map();\n this.#accountToProvider = new Map();\n\n this.sync();\n }\n\n /**\n * Force multichain account synchronization.\n *\n * This can be used if account providers got new accounts that the multichain\n * account doesn't know about.\n */\n sync(): void {\n // Clear reverse mapping and re-construct it entirely based on the refreshed\n // list of accounts from each providers.\n this.#accountToProvider.clear();\n\n for (const provider of this.#providers) {\n // Filter account only for that index.\n const accounts = [];\n for (const account of provider.getAccounts()) {\n if (\n account.options.entropy.id === this.wallet.entropySource &&\n account.options.entropy.groupIndex === this.index\n ) {\n // We only use IDs to always fetch the latest version of accounts.\n accounts.push(account.id);\n }\n }\n this.#providerToAccounts.set(provider, accounts);\n\n // Reverse-mapping for fast indexing.\n for (const id of accounts) {\n this.#accountToProvider.set(id, provider);\n }\n }\n }\n\n /**\n * Gets the multichain account ID.\n *\n * @returns The multichain account ID.\n */\n get id(): MultichainAccountId {\n return this.#id;\n }\n\n /**\n * Gets the multichain account type.\n *\n * @returns The multichain account type.\n */\n get type(): AccountGroupType.MultichainAccount {\n return AccountGroupType.MultichainAccount;\n }\n\n /**\n * Gets the multichain account's wallet reference (parent).\n *\n * @returns The multichain account's wallet.\n */\n get wallet(): MultichainAccountWallet<Account> {\n return this.#wallet;\n }\n\n /**\n * Gets the multichain account group index.\n *\n * @returns The multichain account group index.\n */\n get index(): number {\n return this.#index;\n }\n\n /**\n * Checks if there's any underlying accounts for this multichain accounts.\n *\n * @returns True if there's any underlying accounts, false otherwise.\n */\n hasAccounts(): boolean {\n // If there's anything in the reverse-map, it means we have some accounts.\n return this.#accountToProvider.size > 0;\n }\n\n /**\n * Gets the accounts for this multichain account.\n *\n * @returns The accounts.\n */\n getAccounts(): Account[] {\n const allAccounts: Account[] = [];\n\n for (const [provider, accounts] of this.#providerToAccounts.entries()) {\n for (const id of accounts) {\n const account = provider.getAccount(id);\n\n if (account) {\n // If for some reason we cannot get this account from the provider, it\n // might means it has been deleted or something, so we just filter it\n // out.\n allAccounts.push(account);\n }\n }\n }\n\n return allAccounts;\n }\n\n /**\n * Gets the account for a given account ID.\n *\n * @param id - Account ID.\n * @returns The account or undefined if not found.\n */\n getAccount(id: Account['id']): Account | undefined {\n const provider = this.#accountToProvider.get(id);\n\n // If there's nothing in the map, it means we tried to get an account\n // that does not belong to this multichain account.\n if (!provider) {\n return undefined;\n }\n return provider.getAccount(id);\n }\n\n /**\n * Query an account matching the selector.\n *\n * @param selector - Query selector.\n * @returns The account matching the selector or undefined if not matching.\n * @throws If multiple accounts match the selector.\n */\n get(selector: AccountSelector<Account>): Account | undefined {\n const accounts = this.select(selector);\n\n if (accounts.length > 1) {\n throw new Error(\n `Too many account candidates, expected 1, got: ${accounts.length}`,\n );\n }\n\n if (accounts.length === 0) {\n return undefined;\n }\n\n return accounts[0]; // This is safe, see checks above.\n }\n\n /**\n * Query accounts matching the selector.\n *\n * @param selector - Query selector.\n * @returns The accounts matching the selector.\n */\n select(selector: AccountSelector<Account>): Account[] {\n return this.getAccounts().filter((account) => {\n let selected = true;\n\n if (selector.id) {\n selected &&= account.id === selector.id;\n }\n if (selector.address) {\n selected &&= account.address === selector.address;\n }\n if (selector.type) {\n selected &&= account.type === selector.type;\n }\n if (selector.methods !== undefined) {\n selected &&= selector.methods.some((method) =>\n account.methods.includes(method),\n );\n }\n if (selector.scopes !== undefined) {\n selected &&= selector.scopes.some((scope) => {\n return (\n // This will cover specific EVM EOA scopes as well.\n isScopeEqualToAny(scope, account.scopes)\n );\n });\n }\n\n return selected;\n });\n }\n}\n\n/**\n * Gets the multichain account ID from its multichain account wallet ID and its index.\n *\n * @param walletId - Multichain account wallet ID.\n * @param groupIndex - Index of that multichain account.\n * @returns The multichain account ID.\n */\nexport function toMultichainAccountId(\n walletId: MultichainAccountWalletId,\n groupIndex: number,\n): MultichainAccountId {\n return `${walletId}/${groupIndex}`;\n}\n\n/**\n * Checks if the given value is {@link MultichainAccountId}.\n *\n * @param value - The value to check.\n * @returns Whether the value is a {@link MultichainAccountId}.\n */\nexport function isMultichainAccountId(\n value: string,\n): value is MultichainAccountId {\n return MULTICHAIN_ACCOUNT_ID_REGEX.test(value);\n}\n\n/**\n * Gets the multichain account index from an account group ID.\n *\n * @param id - Multichain account ID.\n * @returns The multichain account index if extractable, undefined otherwise.\n */\nexport function getGroupIndexFromMultichainAccountId(\n id: MultichainAccountId,\n): number {\n const matched = id.match(MULTICHAIN_ACCOUNT_ID_REGEX);\n if (matched?.groups?.groupIndex === undefined) {\n // Unable to extract group index, even though, type wise, this should not\n // be possible!\n throw new Error('Unable to extract group index');\n }\n\n return Number(matched.groups.groupIndex);\n}\n"]}
|
|
@@ -78,12 +78,12 @@ class MultichainAccountWallet {
|
|
|
78
78
|
return __classPrivateFieldGet(this, _MultichainAccountWallet_id, "f");
|
|
79
79
|
}
|
|
80
80
|
/**
|
|
81
|
-
* Gets the multichain account wallet
|
|
81
|
+
* Gets the multichain account wallet type, which is always {@link AccountWalletType.Entropy}.
|
|
82
82
|
*
|
|
83
|
-
* @returns The multichain account wallet
|
|
83
|
+
* @returns The multichain account wallet type.
|
|
84
84
|
*/
|
|
85
|
-
get
|
|
86
|
-
return wallet_1.
|
|
85
|
+
get type() {
|
|
86
|
+
return wallet_1.AccountWalletType.Entropy;
|
|
87
87
|
}
|
|
88
88
|
/**
|
|
89
89
|
* Gets the multichain account wallet entropy source.
|
|
@@ -148,6 +148,6 @@ _MultichainAccountWallet_id = new WeakMap(), _MultichainAccountWallet_providers
|
|
|
148
148
|
* @returns The multichain account wallet ID.
|
|
149
149
|
*/
|
|
150
150
|
function toMultichainAccountWalletId(entropySource) {
|
|
151
|
-
return `${wallet_1.
|
|
151
|
+
return `${wallet_1.AccountWalletType.Entropy}:${entropySource}`;
|
|
152
152
|
}
|
|
153
153
|
//# sourceMappingURL=wallet.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wallet.cjs","sourceRoot":"","sources":["../../../src/api/multichain/wallet.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAuLA,kEAIC;AAtLD,2CAImB;AAGnB,wCAAmD;AAGnD,
|
|
1
|
+
{"version":3,"file":"wallet.cjs","sourceRoot":"","sources":["../../../src/api/multichain/wallet.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n type EntropySourceId,\n type KeyringAccount,\n} from '@metamask/keyring-api';\n\nimport {\n getGroupIndexFromMultichainAccountId,\n isMultichainAccountId,\n MultichainAccount,\n} from './account';\nimport type { Bip44Account } from '../bip44';\nimport type { AccountGroupId } from '../group';\nimport { toDefaultAccountGroupId } from '../group';\nimport type { AccountProvider } from '../provider';\nimport type { AccountWallet } from '../wallet';\nimport { AccountWalletType } from '../wallet';\n\n/**\n * Multichain account wallet ID.\n */\nexport type MultichainAccountWalletId =\n `${AccountWalletType.Entropy}:${EntropySourceId}`;\n\n/**\n * A multichain account wallet that holds multiple multichain accounts (one multichain account per\n * group index).\n */\nexport class MultichainAccountWallet<\n Account extends Bip44Account<KeyringAccount>,\n> implements AccountWallet<Account>\n{\n readonly #id: MultichainAccountWalletId;\n\n readonly #providers: AccountProvider<Account>[];\n\n readonly #entropySource: EntropySourceId;\n\n readonly #accounts: Map<number, MultichainAccount<Account>>;\n\n constructor({\n providers,\n entropySource,\n }: {\n providers: AccountProvider<Account>[];\n entropySource: EntropySourceId;\n }) {\n this.#id = toMultichainAccountWalletId(entropySource);\n this.#providers = providers;\n this.#entropySource = entropySource;\n this.#accounts = new Map();\n\n // Initial synchronization.\n this.sync();\n }\n\n /**\n * Force wallet synchronization.\n *\n * This can be used if account providers got new accounts that the wallet\n * doesn't know about.\n */\n sync(): void {\n for (const provider of this.#providers) {\n for (const account of provider.getAccounts()) {\n const { entropy } = account.options;\n\n // Filter for this wallet only.\n if (entropy.id !== this.entropySource) {\n continue;\n }\n\n // This multichain account might exists already.\n let multichainAccount = this.#accounts.get(entropy.groupIndex);\n if (!multichainAccount) {\n multichainAccount = new MultichainAccount<Account>({\n groupIndex: entropy.groupIndex,\n wallet: this,\n providers: this.#providers,\n });\n\n this.#accounts.set(entropy.groupIndex, multichainAccount);\n }\n }\n }\n\n // Now force-sync all remaining multichain accounts.\n for (const [groupIndex, multichainAccount] of this.#accounts.entries()) {\n multichainAccount.sync();\n\n // Clean up old multichain accounts.\n if (!multichainAccount.hasAccounts()) {\n this.#accounts.delete(groupIndex);\n }\n }\n }\n\n /**\n * Gets the multichain account wallet ID.\n *\n * @returns The multichain account wallet ID.\n */\n get id(): MultichainAccountWalletId {\n return this.#id;\n }\n\n /**\n * Gets the multichain account wallet type, which is always {@link AccountWalletType.Entropy}.\n *\n * @returns The multichain account wallet type.\n */\n get type(): AccountWalletType.Entropy {\n return AccountWalletType.Entropy;\n }\n\n /**\n * Gets the multichain account wallet entropy source.\n *\n * @returns The multichain account wallet entropy source.\n */\n get entropySource(): EntropySourceId {\n return this.#entropySource;\n }\n\n /**\n * Gets multichain account for a given ID.\n * The default group ID will default to the multichain account with index 0.\n *\n * @param id - Account group ID.\n * @returns Account group.\n */\n getAccountGroup(id: AccountGroupId): MultichainAccount<Account> | undefined {\n // We consider the \"default case\" to be mapped to index 0.\n if (id === toDefaultAccountGroupId(this.id)) {\n return this.#accounts.get(0);\n }\n\n // If it is not a valid ID, we cannot extract the group index\n // from it, so we fail fast.\n if (!isMultichainAccountId(id)) {\n return undefined;\n }\n\n const groupIndex = getGroupIndexFromMultichainAccountId(id);\n return this.#accounts.get(groupIndex);\n }\n\n /**\n * Gets all multichain accounts. Similar to {@link MultichainAccountWallet.getMultichainAccounts}.\n *\n * @returns The multichain accounts.\n */\n getAccountGroups(): MultichainAccount<Account>[] {\n return this.getMultichainAccounts();\n }\n\n /**\n * Gets multichain account for a given index.\n *\n * @param groupIndex - Multichain account index.\n * @returns The multichain account associated with the given index.\n */\n getMultichainAccount(\n groupIndex: number,\n ): MultichainAccount<Account> | undefined {\n return this.#accounts.get(groupIndex);\n }\n\n /**\n * Gets all multichain accounts.\n *\n * @returns The multichain accounts.\n */\n getMultichainAccounts(): MultichainAccount<Account>[] {\n return Array.from(this.#accounts.values()); // TODO: Prevent copy here.\n }\n}\n\n/**\n * Gets the multichain account wallet ID from its entropy source.\n *\n * @param entropySource - Entropy source ID of that wallet.\n * @returns The multichain account wallet ID.\n */\nexport function toMultichainAccountWalletId(\n entropySource: EntropySourceId,\n): MultichainAccountWalletId {\n return `${AccountWalletType.Entropy}:${entropySource}`;\n}\n"]}
|
|
@@ -4,11 +4,11 @@ import type { Bip44Account } from "../bip44.cjs";
|
|
|
4
4
|
import type { AccountGroupId } from "../group.cjs";
|
|
5
5
|
import type { AccountProvider } from "../provider.cjs";
|
|
6
6
|
import type { AccountWallet } from "../wallet.cjs";
|
|
7
|
-
import {
|
|
7
|
+
import { AccountWalletType } from "../wallet.cjs";
|
|
8
8
|
/**
|
|
9
9
|
* Multichain account wallet ID.
|
|
10
10
|
*/
|
|
11
|
-
export type MultichainAccountWalletId = `${
|
|
11
|
+
export type MultichainAccountWalletId = `${AccountWalletType.Entropy}:${EntropySourceId}`;
|
|
12
12
|
/**
|
|
13
13
|
* A multichain account wallet that holds multiple multichain accounts (one multichain account per
|
|
14
14
|
* group index).
|
|
@@ -33,11 +33,11 @@ export declare class MultichainAccountWallet<Account extends Bip44Account<Keyrin
|
|
|
33
33
|
*/
|
|
34
34
|
get id(): MultichainAccountWalletId;
|
|
35
35
|
/**
|
|
36
|
-
* Gets the multichain account wallet
|
|
36
|
+
* Gets the multichain account wallet type, which is always {@link AccountWalletType.Entropy}.
|
|
37
37
|
*
|
|
38
|
-
* @returns The multichain account wallet
|
|
38
|
+
* @returns The multichain account wallet type.
|
|
39
39
|
*/
|
|
40
|
-
get
|
|
40
|
+
get type(): AccountWalletType.Entropy;
|
|
41
41
|
/**
|
|
42
42
|
* Gets the multichain account wallet entropy source.
|
|
43
43
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wallet.d.cts","sourceRoot":"","sources":["../../../src/api/multichain/wallet.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,cAAc,EACpB,8BAA8B;AAE/B,OAAO,EAGL,iBAAiB,EAClB,sBAAkB;AACnB,OAAO,KAAK,EAAE,YAAY,EAAE,qBAAiB;AAC7C,OAAO,KAAK,EAAE,cAAc,EAAE,qBAAiB;AAE/C,OAAO,KAAK,EAAE,eAAe,EAAE,wBAAoB;AACnD,OAAO,KAAK,EAAE,aAAa,EAAE,sBAAkB;AAC/C,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"wallet.d.cts","sourceRoot":"","sources":["../../../src/api/multichain/wallet.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,cAAc,EACpB,8BAA8B;AAE/B,OAAO,EAGL,iBAAiB,EAClB,sBAAkB;AACnB,OAAO,KAAK,EAAE,YAAY,EAAE,qBAAiB;AAC7C,OAAO,KAAK,EAAE,cAAc,EAAE,qBAAiB;AAE/C,OAAO,KAAK,EAAE,eAAe,EAAE,wBAAoB;AACnD,OAAO,KAAK,EAAE,aAAa,EAAE,sBAAkB;AAC/C,OAAO,EAAE,iBAAiB,EAAE,sBAAkB;AAE9C;;GAEG;AACH,MAAM,MAAM,yBAAyB,GACnC,GAAG,iBAAiB,CAAC,OAAO,IAAI,eAAe,EAAE,CAAC;AAEpD;;;GAGG;AACH,qBAAa,uBAAuB,CAClC,OAAO,SAAS,YAAY,CAAC,cAAc,CAAC,CAC5C,YAAW,aAAa,CAAC,OAAO,CAAC;;gBAUrB,EACV,SAAS,EACT,aAAa,GACd,EAAE;QACD,SAAS,EAAE,eAAe,CAAC,OAAO,CAAC,EAAE,CAAC;QACtC,aAAa,EAAE,eAAe,CAAC;KAChC;IAUD;;;;;OAKG;IACH,IAAI,IAAI,IAAI;IAmCZ;;;;OAIG;IACH,IAAI,EAAE,IAAI,yBAAyB,CAElC;IAED;;;;OAIG;IACH,IAAI,IAAI,IAAI,iBAAiB,CAAC,OAAO,CAEpC;IAED;;;;OAIG;IACH,IAAI,aAAa,IAAI,eAAe,CAEnC;IAED;;;;;;OAMG;IACH,eAAe,CAAC,EAAE,EAAE,cAAc,GAAG,iBAAiB,CAAC,OAAO,CAAC,GAAG,SAAS;IAgB3E;;;;OAIG;IACH,gBAAgB,IAAI,iBAAiB,CAAC,OAAO,CAAC,EAAE;IAIhD;;;;;OAKG;IACH,oBAAoB,CAClB,UAAU,EAAE,MAAM,GACjB,iBAAiB,CAAC,OAAO,CAAC,GAAG,SAAS;IAIzC;;;;OAIG;IACH,qBAAqB,IAAI,iBAAiB,CAAC,OAAO,CAAC,EAAE;CAGtD;AAED;;;;;GAKG;AACH,wBAAgB,2BAA2B,CACzC,aAAa,EAAE,eAAe,GAC7B,yBAAyB,CAE3B"}
|
|
@@ -4,11 +4,11 @@ import type { Bip44Account } from "../bip44.mjs";
|
|
|
4
4
|
import type { AccountGroupId } from "../group.mjs";
|
|
5
5
|
import type { AccountProvider } from "../provider.mjs";
|
|
6
6
|
import type { AccountWallet } from "../wallet.mjs";
|
|
7
|
-
import {
|
|
7
|
+
import { AccountWalletType } from "../wallet.mjs";
|
|
8
8
|
/**
|
|
9
9
|
* Multichain account wallet ID.
|
|
10
10
|
*/
|
|
11
|
-
export type MultichainAccountWalletId = `${
|
|
11
|
+
export type MultichainAccountWalletId = `${AccountWalletType.Entropy}:${EntropySourceId}`;
|
|
12
12
|
/**
|
|
13
13
|
* A multichain account wallet that holds multiple multichain accounts (one multichain account per
|
|
14
14
|
* group index).
|
|
@@ -33,11 +33,11 @@ export declare class MultichainAccountWallet<Account extends Bip44Account<Keyrin
|
|
|
33
33
|
*/
|
|
34
34
|
get id(): MultichainAccountWalletId;
|
|
35
35
|
/**
|
|
36
|
-
* Gets the multichain account wallet
|
|
36
|
+
* Gets the multichain account wallet type, which is always {@link AccountWalletType.Entropy}.
|
|
37
37
|
*
|
|
38
|
-
* @returns The multichain account wallet
|
|
38
|
+
* @returns The multichain account wallet type.
|
|
39
39
|
*/
|
|
40
|
-
get
|
|
40
|
+
get type(): AccountWalletType.Entropy;
|
|
41
41
|
/**
|
|
42
42
|
* Gets the multichain account wallet entropy source.
|
|
43
43
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wallet.d.mts","sourceRoot":"","sources":["../../../src/api/multichain/wallet.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,cAAc,EACpB,8BAA8B;AAE/B,OAAO,EAGL,iBAAiB,EAClB,sBAAkB;AACnB,OAAO,KAAK,EAAE,YAAY,EAAE,qBAAiB;AAC7C,OAAO,KAAK,EAAE,cAAc,EAAE,qBAAiB;AAE/C,OAAO,KAAK,EAAE,eAAe,EAAE,wBAAoB;AACnD,OAAO,KAAK,EAAE,aAAa,EAAE,sBAAkB;AAC/C,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"wallet.d.mts","sourceRoot":"","sources":["../../../src/api/multichain/wallet.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,cAAc,EACpB,8BAA8B;AAE/B,OAAO,EAGL,iBAAiB,EAClB,sBAAkB;AACnB,OAAO,KAAK,EAAE,YAAY,EAAE,qBAAiB;AAC7C,OAAO,KAAK,EAAE,cAAc,EAAE,qBAAiB;AAE/C,OAAO,KAAK,EAAE,eAAe,EAAE,wBAAoB;AACnD,OAAO,KAAK,EAAE,aAAa,EAAE,sBAAkB;AAC/C,OAAO,EAAE,iBAAiB,EAAE,sBAAkB;AAE9C;;GAEG;AACH,MAAM,MAAM,yBAAyB,GACnC,GAAG,iBAAiB,CAAC,OAAO,IAAI,eAAe,EAAE,CAAC;AAEpD;;;GAGG;AACH,qBAAa,uBAAuB,CAClC,OAAO,SAAS,YAAY,CAAC,cAAc,CAAC,CAC5C,YAAW,aAAa,CAAC,OAAO,CAAC;;gBAUrB,EACV,SAAS,EACT,aAAa,GACd,EAAE;QACD,SAAS,EAAE,eAAe,CAAC,OAAO,CAAC,EAAE,CAAC;QACtC,aAAa,EAAE,eAAe,CAAC;KAChC;IAUD;;;;;OAKG;IACH,IAAI,IAAI,IAAI;IAmCZ;;;;OAIG;IACH,IAAI,EAAE,IAAI,yBAAyB,CAElC;IAED;;;;OAIG;IACH,IAAI,IAAI,IAAI,iBAAiB,CAAC,OAAO,CAEpC;IAED;;;;OAIG;IACH,IAAI,aAAa,IAAI,eAAe,CAEnC;IAED;;;;;;OAMG;IACH,eAAe,CAAC,EAAE,EAAE,cAAc,GAAG,iBAAiB,CAAC,OAAO,CAAC,GAAG,SAAS;IAgB3E;;;;OAIG;IACH,gBAAgB,IAAI,iBAAiB,CAAC,OAAO,CAAC,EAAE;IAIhD;;;;;OAKG;IACH,oBAAoB,CAClB,UAAU,EAAE,MAAM,GACjB,iBAAiB,CAAC,OAAO,CAAC,GAAG,SAAS;IAIzC;;;;OAIG;IACH,qBAAqB,IAAI,iBAAiB,CAAC,OAAO,CAAC,EAAE;CAGtD;AAED;;;;;GAKG;AACH,wBAAgB,2BAA2B,CACzC,aAAa,EAAE,eAAe,GAC7B,yBAAyB,CAE3B"}
|
|
@@ -12,7 +12,7 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
|
|
|
12
12
|
var _MultichainAccountWallet_id, _MultichainAccountWallet_providers, _MultichainAccountWallet_entropySource, _MultichainAccountWallet_accounts;
|
|
13
13
|
import { getGroupIndexFromMultichainAccountId, isMultichainAccountId, MultichainAccount } from "./account.mjs";
|
|
14
14
|
import { toDefaultAccountGroupId } from "../group.mjs";
|
|
15
|
-
import {
|
|
15
|
+
import { AccountWalletType } from "../wallet.mjs";
|
|
16
16
|
/**
|
|
17
17
|
* A multichain account wallet that holds multiple multichain accounts (one multichain account per
|
|
18
18
|
* group index).
|
|
@@ -74,12 +74,12 @@ export class MultichainAccountWallet {
|
|
|
74
74
|
return __classPrivateFieldGet(this, _MultichainAccountWallet_id, "f");
|
|
75
75
|
}
|
|
76
76
|
/**
|
|
77
|
-
* Gets the multichain account wallet
|
|
77
|
+
* Gets the multichain account wallet type, which is always {@link AccountWalletType.Entropy}.
|
|
78
78
|
*
|
|
79
|
-
* @returns The multichain account wallet
|
|
79
|
+
* @returns The multichain account wallet type.
|
|
80
80
|
*/
|
|
81
|
-
get
|
|
82
|
-
return
|
|
81
|
+
get type() {
|
|
82
|
+
return AccountWalletType.Entropy;
|
|
83
83
|
}
|
|
84
84
|
/**
|
|
85
85
|
* Gets the multichain account wallet entropy source.
|
|
@@ -143,6 +143,6 @@ _MultichainAccountWallet_id = new WeakMap(), _MultichainAccountWallet_providers
|
|
|
143
143
|
* @returns The multichain account wallet ID.
|
|
144
144
|
*/
|
|
145
145
|
export function toMultichainAccountWalletId(entropySource) {
|
|
146
|
-
return `${
|
|
146
|
+
return `${AccountWalletType.Entropy}:${entropySource}`;
|
|
147
147
|
}
|
|
148
148
|
//# sourceMappingURL=wallet.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wallet.mjs","sourceRoot":"","sources":["../../../src/api/multichain/wallet.ts"],"names":[],"mappings":";;;;;;;;;;;;AAKA,OAAO,EACL,oCAAoC,EACpC,qBAAqB,EACrB,iBAAiB,EAClB,sBAAkB;AAGnB,OAAO,EAAE,uBAAuB,EAAE,qBAAiB;AAGnD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"wallet.mjs","sourceRoot":"","sources":["../../../src/api/multichain/wallet.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n type EntropySourceId,\n type KeyringAccount,\n} from '@metamask/keyring-api';\n\nimport {\n getGroupIndexFromMultichainAccountId,\n isMultichainAccountId,\n MultichainAccount,\n} from './account';\nimport type { Bip44Account } from '../bip44';\nimport type { AccountGroupId } from '../group';\nimport { toDefaultAccountGroupId } from '../group';\nimport type { AccountProvider } from '../provider';\nimport type { AccountWallet } from '../wallet';\nimport { AccountWalletType } from '../wallet';\n\n/**\n * Multichain account wallet ID.\n */\nexport type MultichainAccountWalletId =\n `${AccountWalletType.Entropy}:${EntropySourceId}`;\n\n/**\n * A multichain account wallet that holds multiple multichain accounts (one multichain account per\n * group index).\n */\nexport class MultichainAccountWallet<\n Account extends Bip44Account<KeyringAccount>,\n> implements AccountWallet<Account>\n{\n readonly #id: MultichainAccountWalletId;\n\n readonly #providers: AccountProvider<Account>[];\n\n readonly #entropySource: EntropySourceId;\n\n readonly #accounts: Map<number, MultichainAccount<Account>>;\n\n constructor({\n providers,\n entropySource,\n }: {\n providers: AccountProvider<Account>[];\n entropySource: EntropySourceId;\n }) {\n this.#id = toMultichainAccountWalletId(entropySource);\n this.#providers = providers;\n this.#entropySource = entropySource;\n this.#accounts = new Map();\n\n // Initial synchronization.\n this.sync();\n }\n\n /**\n * Force wallet synchronization.\n *\n * This can be used if account providers got new accounts that the wallet\n * doesn't know about.\n */\n sync(): void {\n for (const provider of this.#providers) {\n for (const account of provider.getAccounts()) {\n const { entropy } = account.options;\n\n // Filter for this wallet only.\n if (entropy.id !== this.entropySource) {\n continue;\n }\n\n // This multichain account might exists already.\n let multichainAccount = this.#accounts.get(entropy.groupIndex);\n if (!multichainAccount) {\n multichainAccount = new MultichainAccount<Account>({\n groupIndex: entropy.groupIndex,\n wallet: this,\n providers: this.#providers,\n });\n\n this.#accounts.set(entropy.groupIndex, multichainAccount);\n }\n }\n }\n\n // Now force-sync all remaining multichain accounts.\n for (const [groupIndex, multichainAccount] of this.#accounts.entries()) {\n multichainAccount.sync();\n\n // Clean up old multichain accounts.\n if (!multichainAccount.hasAccounts()) {\n this.#accounts.delete(groupIndex);\n }\n }\n }\n\n /**\n * Gets the multichain account wallet ID.\n *\n * @returns The multichain account wallet ID.\n */\n get id(): MultichainAccountWalletId {\n return this.#id;\n }\n\n /**\n * Gets the multichain account wallet type, which is always {@link AccountWalletType.Entropy}.\n *\n * @returns The multichain account wallet type.\n */\n get type(): AccountWalletType.Entropy {\n return AccountWalletType.Entropy;\n }\n\n /**\n * Gets the multichain account wallet entropy source.\n *\n * @returns The multichain account wallet entropy source.\n */\n get entropySource(): EntropySourceId {\n return this.#entropySource;\n }\n\n /**\n * Gets multichain account for a given ID.\n * The default group ID will default to the multichain account with index 0.\n *\n * @param id - Account group ID.\n * @returns Account group.\n */\n getAccountGroup(id: AccountGroupId): MultichainAccount<Account> | undefined {\n // We consider the \"default case\" to be mapped to index 0.\n if (id === toDefaultAccountGroupId(this.id)) {\n return this.#accounts.get(0);\n }\n\n // If it is not a valid ID, we cannot extract the group index\n // from it, so we fail fast.\n if (!isMultichainAccountId(id)) {\n return undefined;\n }\n\n const groupIndex = getGroupIndexFromMultichainAccountId(id);\n return this.#accounts.get(groupIndex);\n }\n\n /**\n * Gets all multichain accounts. Similar to {@link MultichainAccountWallet.getMultichainAccounts}.\n *\n * @returns The multichain accounts.\n */\n getAccountGroups(): MultichainAccount<Account>[] {\n return this.getMultichainAccounts();\n }\n\n /**\n * Gets multichain account for a given index.\n *\n * @param groupIndex - Multichain account index.\n * @returns The multichain account associated with the given index.\n */\n getMultichainAccount(\n groupIndex: number,\n ): MultichainAccount<Account> | undefined {\n return this.#accounts.get(groupIndex);\n }\n\n /**\n * Gets all multichain accounts.\n *\n * @returns The multichain accounts.\n */\n getMultichainAccounts(): MultichainAccount<Account>[] {\n return Array.from(this.#accounts.values()); // TODO: Prevent copy here.\n }\n}\n\n/**\n * Gets the multichain account wallet ID from its entropy source.\n *\n * @param entropySource - Entropy source ID of that wallet.\n * @returns The multichain account wallet ID.\n */\nexport function toMultichainAccountWalletId(\n entropySource: EntropySourceId,\n): MultichainAccountWalletId {\n return `${AccountWalletType.Entropy}:${entropySource}`;\n}\n"]}
|
package/dist/api/wallet.cjs
CHANGED
|
@@ -1,33 +1,35 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.AccountWalletType = void 0;
|
|
4
4
|
exports.toAccountWalletId = toAccountWalletId;
|
|
5
|
-
|
|
6
|
-
|
|
5
|
+
/**
|
|
6
|
+
* Wallet type.
|
|
7
|
+
*
|
|
8
|
+
* Each wallet types groups accounts using different criterias.
|
|
9
|
+
*/
|
|
10
|
+
var AccountWalletType;
|
|
11
|
+
(function (AccountWalletType) {
|
|
7
12
|
/**
|
|
8
|
-
*
|
|
9
|
-
* entropy source.
|
|
13
|
+
* Wallet grouping accounts based on their entropy source.
|
|
10
14
|
*/
|
|
11
|
-
|
|
15
|
+
AccountWalletType["Entropy"] = "entropy";
|
|
12
16
|
/**
|
|
13
|
-
*
|
|
14
|
-
* keyring's type.
|
|
17
|
+
* Wallet grouping accounts based on their keyring's type.
|
|
15
18
|
*/
|
|
16
|
-
|
|
19
|
+
AccountWalletType["Keyring"] = "keyring";
|
|
17
20
|
/**
|
|
18
|
-
*
|
|
19
|
-
* account management Snap.
|
|
21
|
+
* Wallet grouping accounts associated with an account management Snap.
|
|
20
22
|
*/
|
|
21
|
-
|
|
22
|
-
})(
|
|
23
|
+
AccountWalletType["Snap"] = "snap";
|
|
24
|
+
})(AccountWalletType || (exports.AccountWalletType = AccountWalletType = {}));
|
|
23
25
|
/**
|
|
24
|
-
* Convert a unique ID to a wallet ID for a given
|
|
26
|
+
* Convert a unique ID to a wallet ID for a given type.
|
|
25
27
|
*
|
|
26
|
-
* @param
|
|
28
|
+
* @param type - A wallet type.
|
|
27
29
|
* @param id - A unique ID.
|
|
28
30
|
* @returns A wallet ID.
|
|
29
31
|
*/
|
|
30
|
-
function toAccountWalletId(
|
|
31
|
-
return `${
|
|
32
|
+
function toAccountWalletId(type, id) {
|
|
33
|
+
return `${type}:${id}`;
|
|
32
34
|
}
|
|
33
35
|
//# sourceMappingURL=wallet.cjs.map
|
package/dist/api/wallet.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wallet.cjs","sourceRoot":"","sources":["../../src/api/wallet.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"wallet.cjs","sourceRoot":"","sources":["../../src/api/wallet.ts"],"names":[],"mappings":";;;AAqEA,8CAKC;AArED;;;;GAIG;AACH,IAAY,iBAeX;AAfD,WAAY,iBAAiB;IAC3B;;OAEG;IACH,wCAAmB,CAAA;IAEnB;;OAEG;IACH,wCAAmB,CAAA;IAEnB;;OAEG;IACH,kCAAa,CAAA;AACf,CAAC,EAfW,iBAAiB,iCAAjB,iBAAiB,QAe5B;AAqCD;;;;;;GAMG;AACH,SAAgB,iBAAiB,CAC/B,IAAuB,EACvB,EAAU;IAEV,OAAO,GAAG,IAAI,IAAI,EAAE,EAAE,CAAC;AACzB,CAAC","sourcesContent":["import type { KeyringAccount } from '@metamask/keyring-api';\n\n// Circular import are allowed when using `import type`.\nimport type { AccountGroup, AccountGroupId } from './group';\n\n/**\n * Wallet type.\n *\n * Each wallet types groups accounts using different criterias.\n */\nexport enum AccountWalletType {\n /**\n * Wallet grouping accounts based on their entropy source.\n */\n Entropy = 'entropy',\n\n /**\n * Wallet grouping accounts based on their keyring's type.\n */\n Keyring = 'keyring',\n\n /**\n * Wallet grouping accounts associated with an account management Snap.\n */\n Snap = 'snap',\n}\n\n/**\n * Account wallet ID.\n */\nexport type AccountWalletId = `${AccountWalletType}:${string}`;\n\n/**\n * Account wallet that can hold multiple account groups.\n */\nexport type AccountWallet<Account extends KeyringAccount> = {\n /**\n * Account wallet ID.\n */\n get id(): AccountWalletId;\n\n /**\n * Account wallet type.\n */\n get type(): AccountWalletType;\n\n /**\n * Gets account group for a given ID.\n *\n * @param id - Account group ID.\n * @returns Account group.\n */\n getAccountGroup(id: AccountGroupId): AccountGroup<Account> | undefined;\n\n /**\n * Gets all account groups.\n *\n * @returns Account groups.\n */\n getAccountGroups(): AccountGroup<Account>[];\n};\n\n/**\n * Convert a unique ID to a wallet ID for a given type.\n *\n * @param type - A wallet type.\n * @param id - A unique ID.\n * @returns A wallet ID.\n */\nexport function toAccountWalletId(\n type: AccountWalletType,\n id: string,\n): AccountWalletId {\n return `${type}:${id}`;\n}\n"]}
|
package/dist/api/wallet.d.cts
CHANGED
|
@@ -1,26 +1,28 @@
|
|
|
1
1
|
import type { KeyringAccount } from "@metamask/keyring-api";
|
|
2
2
|
import type { AccountGroup, AccountGroupId } from "./group.cjs";
|
|
3
|
-
|
|
3
|
+
/**
|
|
4
|
+
* Wallet type.
|
|
5
|
+
*
|
|
6
|
+
* Each wallet types groups accounts using different criterias.
|
|
7
|
+
*/
|
|
8
|
+
export declare enum AccountWalletType {
|
|
4
9
|
/**
|
|
5
|
-
*
|
|
6
|
-
* entropy source.
|
|
10
|
+
* Wallet grouping accounts based on their entropy source.
|
|
7
11
|
*/
|
|
8
12
|
Entropy = "entropy",
|
|
9
13
|
/**
|
|
10
|
-
*
|
|
11
|
-
* keyring's type.
|
|
14
|
+
* Wallet grouping accounts based on their keyring's type.
|
|
12
15
|
*/
|
|
13
16
|
Keyring = "keyring",
|
|
14
17
|
/**
|
|
15
|
-
*
|
|
16
|
-
* account management Snap.
|
|
18
|
+
* Wallet grouping accounts associated with an account management Snap.
|
|
17
19
|
*/
|
|
18
20
|
Snap = "snap"
|
|
19
21
|
}
|
|
20
22
|
/**
|
|
21
23
|
* Account wallet ID.
|
|
22
24
|
*/
|
|
23
|
-
export type AccountWalletId = `${
|
|
25
|
+
export type AccountWalletId = `${AccountWalletType}:${string}`;
|
|
24
26
|
/**
|
|
25
27
|
* Account wallet that can hold multiple account groups.
|
|
26
28
|
*/
|
|
@@ -30,9 +32,9 @@ export type AccountWallet<Account extends KeyringAccount> = {
|
|
|
30
32
|
*/
|
|
31
33
|
get id(): AccountWalletId;
|
|
32
34
|
/**
|
|
33
|
-
* Account wallet
|
|
35
|
+
* Account wallet type.
|
|
34
36
|
*/
|
|
35
|
-
get
|
|
37
|
+
get type(): AccountWalletType;
|
|
36
38
|
/**
|
|
37
39
|
* Gets account group for a given ID.
|
|
38
40
|
*
|
|
@@ -48,11 +50,11 @@ export type AccountWallet<Account extends KeyringAccount> = {
|
|
|
48
50
|
getAccountGroups(): AccountGroup<Account>[];
|
|
49
51
|
};
|
|
50
52
|
/**
|
|
51
|
-
* Convert a unique ID to a wallet ID for a given
|
|
53
|
+
* Convert a unique ID to a wallet ID for a given type.
|
|
52
54
|
*
|
|
53
|
-
* @param
|
|
55
|
+
* @param type - A wallet type.
|
|
54
56
|
* @param id - A unique ID.
|
|
55
57
|
* @returns A wallet ID.
|
|
56
58
|
*/
|
|
57
|
-
export declare function toAccountWalletId(
|
|
59
|
+
export declare function toAccountWalletId(type: AccountWalletType, id: string): AccountWalletId;
|
|
58
60
|
//# sourceMappingURL=wallet.d.cts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wallet.d.cts","sourceRoot":"","sources":["../../src/api/wallet.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,8BAA8B;AAG5D,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,oBAAgB;AAE5D,oBAAY,
|
|
1
|
+
{"version":3,"file":"wallet.d.cts","sourceRoot":"","sources":["../../src/api/wallet.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,8BAA8B;AAG5D,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,oBAAgB;AAE5D;;;;GAIG;AACH,oBAAY,iBAAiB;IAC3B;;OAEG;IACH,OAAO,YAAY;IAEnB;;OAEG;IACH,OAAO,YAAY;IAEnB;;OAEG;IACH,IAAI,SAAS;CACd;AAED;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG,GAAG,iBAAiB,IAAI,MAAM,EAAE,CAAC;AAE/D;;GAEG;AACH,MAAM,MAAM,aAAa,CAAC,OAAO,SAAS,cAAc,IAAI;IAC1D;;OAEG;IACH,IAAI,EAAE,IAAI,eAAe,CAAC;IAE1B;;OAEG;IACH,IAAI,IAAI,IAAI,iBAAiB,CAAC;IAE9B;;;;;OAKG;IACH,eAAe,CAAC,EAAE,EAAE,cAAc,GAAG,YAAY,CAAC,OAAO,CAAC,GAAG,SAAS,CAAC;IAEvE;;;;OAIG;IACH,gBAAgB,IAAI,YAAY,CAAC,OAAO,CAAC,EAAE,CAAC;CAC7C,CAAC;AAEF;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,iBAAiB,EACvB,EAAE,EAAE,MAAM,GACT,eAAe,CAEjB"}
|
package/dist/api/wallet.d.mts
CHANGED
|
@@ -1,26 +1,28 @@
|
|
|
1
1
|
import type { KeyringAccount } from "@metamask/keyring-api";
|
|
2
2
|
import type { AccountGroup, AccountGroupId } from "./group.mjs";
|
|
3
|
-
|
|
3
|
+
/**
|
|
4
|
+
* Wallet type.
|
|
5
|
+
*
|
|
6
|
+
* Each wallet types groups accounts using different criterias.
|
|
7
|
+
*/
|
|
8
|
+
export declare enum AccountWalletType {
|
|
4
9
|
/**
|
|
5
|
-
*
|
|
6
|
-
* entropy source.
|
|
10
|
+
* Wallet grouping accounts based on their entropy source.
|
|
7
11
|
*/
|
|
8
12
|
Entropy = "entropy",
|
|
9
13
|
/**
|
|
10
|
-
*
|
|
11
|
-
* keyring's type.
|
|
14
|
+
* Wallet grouping accounts based on their keyring's type.
|
|
12
15
|
*/
|
|
13
16
|
Keyring = "keyring",
|
|
14
17
|
/**
|
|
15
|
-
*
|
|
16
|
-
* account management Snap.
|
|
18
|
+
* Wallet grouping accounts associated with an account management Snap.
|
|
17
19
|
*/
|
|
18
20
|
Snap = "snap"
|
|
19
21
|
}
|
|
20
22
|
/**
|
|
21
23
|
* Account wallet ID.
|
|
22
24
|
*/
|
|
23
|
-
export type AccountWalletId = `${
|
|
25
|
+
export type AccountWalletId = `${AccountWalletType}:${string}`;
|
|
24
26
|
/**
|
|
25
27
|
* Account wallet that can hold multiple account groups.
|
|
26
28
|
*/
|
|
@@ -30,9 +32,9 @@ export type AccountWallet<Account extends KeyringAccount> = {
|
|
|
30
32
|
*/
|
|
31
33
|
get id(): AccountWalletId;
|
|
32
34
|
/**
|
|
33
|
-
* Account wallet
|
|
35
|
+
* Account wallet type.
|
|
34
36
|
*/
|
|
35
|
-
get
|
|
37
|
+
get type(): AccountWalletType;
|
|
36
38
|
/**
|
|
37
39
|
* Gets account group for a given ID.
|
|
38
40
|
*
|
|
@@ -48,11 +50,11 @@ export type AccountWallet<Account extends KeyringAccount> = {
|
|
|
48
50
|
getAccountGroups(): AccountGroup<Account>[];
|
|
49
51
|
};
|
|
50
52
|
/**
|
|
51
|
-
* Convert a unique ID to a wallet ID for a given
|
|
53
|
+
* Convert a unique ID to a wallet ID for a given type.
|
|
52
54
|
*
|
|
53
|
-
* @param
|
|
55
|
+
* @param type - A wallet type.
|
|
54
56
|
* @param id - A unique ID.
|
|
55
57
|
* @returns A wallet ID.
|
|
56
58
|
*/
|
|
57
|
-
export declare function toAccountWalletId(
|
|
59
|
+
export declare function toAccountWalletId(type: AccountWalletType, id: string): AccountWalletId;
|
|
58
60
|
//# sourceMappingURL=wallet.d.mts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wallet.d.mts","sourceRoot":"","sources":["../../src/api/wallet.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,8BAA8B;AAG5D,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,oBAAgB;AAE5D,oBAAY,
|
|
1
|
+
{"version":3,"file":"wallet.d.mts","sourceRoot":"","sources":["../../src/api/wallet.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,8BAA8B;AAG5D,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,oBAAgB;AAE5D;;;;GAIG;AACH,oBAAY,iBAAiB;IAC3B;;OAEG;IACH,OAAO,YAAY;IAEnB;;OAEG;IACH,OAAO,YAAY;IAEnB;;OAEG;IACH,IAAI,SAAS;CACd;AAED;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG,GAAG,iBAAiB,IAAI,MAAM,EAAE,CAAC;AAE/D;;GAEG;AACH,MAAM,MAAM,aAAa,CAAC,OAAO,SAAS,cAAc,IAAI;IAC1D;;OAEG;IACH,IAAI,EAAE,IAAI,eAAe,CAAC;IAE1B;;OAEG;IACH,IAAI,IAAI,IAAI,iBAAiB,CAAC;IAE9B;;;;;OAKG;IACH,eAAe,CAAC,EAAE,EAAE,cAAc,GAAG,YAAY,CAAC,OAAO,CAAC,GAAG,SAAS,CAAC;IAEvE;;;;OAIG;IACH,gBAAgB,IAAI,YAAY,CAAC,OAAO,CAAC,EAAE,CAAC;CAC7C,CAAC;AAEF;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,iBAAiB,EACvB,EAAE,EAAE,MAAM,GACT,eAAe,CAEjB"}
|
package/dist/api/wallet.mjs
CHANGED
|
@@ -1,29 +1,31 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Wallet type.
|
|
3
|
+
*
|
|
4
|
+
* Each wallet types groups accounts using different criterias.
|
|
5
|
+
*/
|
|
6
|
+
export var AccountWalletType;
|
|
7
|
+
(function (AccountWalletType) {
|
|
3
8
|
/**
|
|
4
|
-
*
|
|
5
|
-
* entropy source.
|
|
9
|
+
* Wallet grouping accounts based on their entropy source.
|
|
6
10
|
*/
|
|
7
|
-
|
|
11
|
+
AccountWalletType["Entropy"] = "entropy";
|
|
8
12
|
/**
|
|
9
|
-
*
|
|
10
|
-
* keyring's type.
|
|
13
|
+
* Wallet grouping accounts based on their keyring's type.
|
|
11
14
|
*/
|
|
12
|
-
|
|
15
|
+
AccountWalletType["Keyring"] = "keyring";
|
|
13
16
|
/**
|
|
14
|
-
*
|
|
15
|
-
* account management Snap.
|
|
17
|
+
* Wallet grouping accounts associated with an account management Snap.
|
|
16
18
|
*/
|
|
17
|
-
|
|
18
|
-
})(
|
|
19
|
+
AccountWalletType["Snap"] = "snap";
|
|
20
|
+
})(AccountWalletType || (AccountWalletType = {}));
|
|
19
21
|
/**
|
|
20
|
-
* Convert a unique ID to a wallet ID for a given
|
|
22
|
+
* Convert a unique ID to a wallet ID for a given type.
|
|
21
23
|
*
|
|
22
|
-
* @param
|
|
24
|
+
* @param type - A wallet type.
|
|
23
25
|
* @param id - A unique ID.
|
|
24
26
|
* @returns A wallet ID.
|
|
25
27
|
*/
|
|
26
|
-
export function toAccountWalletId(
|
|
27
|
-
return `${
|
|
28
|
+
export function toAccountWalletId(type, id) {
|
|
29
|
+
return `${type}:${id}`;
|
|
28
30
|
}
|
|
29
31
|
//# sourceMappingURL=wallet.mjs.map
|
package/dist/api/wallet.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wallet.mjs","sourceRoot":"","sources":["../../src/api/wallet.ts"],"names":[],"mappings":"AAKA,MAAM,CAAN,IAAY,
|
|
1
|
+
{"version":3,"file":"wallet.mjs","sourceRoot":"","sources":["../../src/api/wallet.ts"],"names":[],"mappings":"AAKA;;;;GAIG;AACH,MAAM,CAAN,IAAY,iBAeX;AAfD,WAAY,iBAAiB;IAC3B;;OAEG;IACH,wCAAmB,CAAA;IAEnB;;OAEG;IACH,wCAAmB,CAAA;IAEnB;;OAEG;IACH,kCAAa,CAAA;AACf,CAAC,EAfW,iBAAiB,KAAjB,iBAAiB,QAe5B;AAqCD;;;;;;GAMG;AACH,MAAM,UAAU,iBAAiB,CAC/B,IAAuB,EACvB,EAAU;IAEV,OAAO,GAAG,IAAI,IAAI,EAAE,EAAE,CAAC;AACzB,CAAC","sourcesContent":["import type { KeyringAccount } from '@metamask/keyring-api';\n\n// Circular import are allowed when using `import type`.\nimport type { AccountGroup, AccountGroupId } from './group';\n\n/**\n * Wallet type.\n *\n * Each wallet types groups accounts using different criterias.\n */\nexport enum AccountWalletType {\n /**\n * Wallet grouping accounts based on their entropy source.\n */\n Entropy = 'entropy',\n\n /**\n * Wallet grouping accounts based on their keyring's type.\n */\n Keyring = 'keyring',\n\n /**\n * Wallet grouping accounts associated with an account management Snap.\n */\n Snap = 'snap',\n}\n\n/**\n * Account wallet ID.\n */\nexport type AccountWalletId = `${AccountWalletType}:${string}`;\n\n/**\n * Account wallet that can hold multiple account groups.\n */\nexport type AccountWallet<Account extends KeyringAccount> = {\n /**\n * Account wallet ID.\n */\n get id(): AccountWalletId;\n\n /**\n * Account wallet type.\n */\n get type(): AccountWalletType;\n\n /**\n * Gets account group for a given ID.\n *\n * @param id - Account group ID.\n * @returns Account group.\n */\n getAccountGroup(id: AccountGroupId): AccountGroup<Account> | undefined;\n\n /**\n * Gets all account groups.\n *\n * @returns Account groups.\n */\n getAccountGroups(): AccountGroup<Account>[];\n};\n\n/**\n * Convert a unique ID to a wallet ID for a given type.\n *\n * @param type - A wallet type.\n * @param id - A unique ID.\n * @returns A wallet ID.\n */\nexport function toAccountWalletId(\n type: AccountWalletType,\n id: string,\n): AccountWalletId {\n return `${type}:${id}`;\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@metamask-previews/account-api",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0-9522cc5",
|
|
4
4
|
"description": "MetaMask Account API",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"metamask",
|
|
@@ -46,7 +46,7 @@
|
|
|
46
46
|
"test:watch": "jest --watch"
|
|
47
47
|
},
|
|
48
48
|
"dependencies": {
|
|
49
|
-
"@metamask/keyring-api": "19.
|
|
49
|
+
"@metamask/keyring-api": "19.1.0",
|
|
50
50
|
"@metamask/keyring-utils": "3.1.0",
|
|
51
51
|
"@metamask/superstruct": "^3.1.0"
|
|
52
52
|
},
|
|
@@ -54,7 +54,7 @@
|
|
|
54
54
|
"@lavamoat/allow-scripts": "^3.2.1",
|
|
55
55
|
"@lavamoat/preinstall-always-fail": "^2.1.0",
|
|
56
56
|
"@metamask/auto-changelog": "^3.4.4",
|
|
57
|
-
"@metamask/keyring-internal-api": "7.
|
|
57
|
+
"@metamask/keyring-internal-api": "7.1.0",
|
|
58
58
|
"@ts-bridge/cli": "^0.6.3",
|
|
59
59
|
"@types/jest": "^29.5.12",
|
|
60
60
|
"@types/node": "^20.12.12",
|