@metamask-previews/account-tree-controller 0.6.0-preview-bd86fa14 → 0.7.0-preview-3f5f144a

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.
Files changed (120) hide show
  1. package/CHANGELOG.md +21 -1
  2. package/dist/AccountTreeController.cjs +195 -41
  3. package/dist/AccountTreeController.cjs.map +1 -1
  4. package/dist/AccountTreeController.d.cts +31 -40
  5. package/dist/AccountTreeController.d.cts.map +1 -1
  6. package/dist/AccountTreeController.d.mts +31 -40
  7. package/dist/AccountTreeController.d.mts.map +1 -1
  8. package/dist/AccountTreeController.mjs +193 -39
  9. package/dist/AccountTreeController.mjs.map +1 -1
  10. package/dist/AccountTreeGroup.cjs +44 -35
  11. package/dist/AccountTreeGroup.cjs.map +1 -1
  12. package/dist/AccountTreeGroup.d.cts +15 -22
  13. package/dist/AccountTreeGroup.d.cts.map +1 -1
  14. package/dist/AccountTreeGroup.d.mts +15 -22
  15. package/dist/AccountTreeGroup.d.mts.map +1 -1
  16. package/dist/AccountTreeGroup.mjs +42 -33
  17. package/dist/AccountTreeGroup.mjs.map +1 -1
  18. package/dist/AccountTreeRule.cjs +37 -0
  19. package/dist/AccountTreeRule.cjs.map +1 -0
  20. package/dist/AccountTreeRule.d.cts +53 -0
  21. package/dist/AccountTreeRule.d.cts.map +1 -0
  22. package/dist/AccountTreeRule.d.mts +53 -0
  23. package/dist/AccountTreeRule.d.mts.map +1 -0
  24. package/dist/AccountTreeRule.mjs +33 -0
  25. package/dist/AccountTreeRule.mjs.map +1 -0
  26. package/dist/AccountTreeWallet.cjs +53 -26
  27. package/dist/AccountTreeWallet.cjs.map +1 -1
  28. package/dist/AccountTreeWallet.d.cts +26 -21
  29. package/dist/AccountTreeWallet.d.cts.map +1 -1
  30. package/dist/AccountTreeWallet.d.mts +26 -21
  31. package/dist/AccountTreeWallet.d.mts.map +1 -1
  32. package/dist/AccountTreeWallet.mjs +52 -25
  33. package/dist/AccountTreeWallet.mjs.map +1 -1
  34. package/dist/index.cjs.map +1 -1
  35. package/dist/index.d.cts +1 -1
  36. package/dist/index.d.cts.map +1 -1
  37. package/dist/index.d.mts +1 -1
  38. package/dist/index.d.mts.map +1 -1
  39. package/dist/index.mjs.map +1 -1
  40. package/dist/rules/entropy.cjs +68 -0
  41. package/dist/rules/entropy.cjs.map +1 -0
  42. package/dist/rules/entropy.d.cts +13 -0
  43. package/dist/rules/entropy.d.cts.map +1 -0
  44. package/dist/rules/entropy.d.mts +13 -0
  45. package/dist/rules/entropy.d.mts.map +1 -0
  46. package/dist/rules/entropy.mjs +64 -0
  47. package/dist/rules/entropy.mjs.map +1 -0
  48. package/dist/rules/keyring.cjs +86 -0
  49. package/dist/rules/keyring.cjs.map +1 -0
  50. package/dist/rules/keyring.d.cts +21 -0
  51. package/dist/rules/keyring.d.cts.map +1 -0
  52. package/dist/rules/keyring.d.mts +21 -0
  53. package/dist/rules/keyring.d.mts.map +1 -0
  54. package/dist/rules/keyring.mjs +81 -0
  55. package/dist/rules/keyring.mjs.map +1 -0
  56. package/dist/rules/snap.cjs +58 -0
  57. package/dist/rules/snap.cjs.map +1 -0
  58. package/dist/rules/snap.d.cts +22 -0
  59. package/dist/rules/snap.d.cts.map +1 -0
  60. package/dist/rules/snap.d.mts +22 -0
  61. package/dist/rules/snap.d.mts.map +1 -0
  62. package/dist/rules/snap.mjs +54 -0
  63. package/dist/rules/snap.mjs.map +1 -0
  64. package/dist/types.cjs +3 -0
  65. package/dist/types.cjs.map +1 -0
  66. package/dist/types.d.cts +83 -0
  67. package/dist/types.d.cts.map +1 -0
  68. package/dist/types.d.mts +83 -0
  69. package/dist/types.d.mts.map +1 -0
  70. package/dist/types.mjs +2 -0
  71. package/dist/types.mjs.map +1 -0
  72. package/package.json +4 -4
  73. package/dist/rules/EntropySourceWalletRule.cjs +0 -100
  74. package/dist/rules/EntropySourceWalletRule.cjs.map +0 -1
  75. package/dist/rules/EntropySourceWalletRule.d.cts +0 -19
  76. package/dist/rules/EntropySourceWalletRule.d.cts.map +0 -1
  77. package/dist/rules/EntropySourceWalletRule.d.mts +0 -19
  78. package/dist/rules/EntropySourceWalletRule.d.mts.map +0 -1
  79. package/dist/rules/EntropySourceWalletRule.mjs +0 -95
  80. package/dist/rules/EntropySourceWalletRule.mjs.map +0 -1
  81. package/dist/rules/KeyringWalletRule.cjs +0 -99
  82. package/dist/rules/KeyringWalletRule.cjs.map +0 -1
  83. package/dist/rules/KeyringWalletRule.d.cts +0 -18
  84. package/dist/rules/KeyringWalletRule.d.cts.map +0 -1
  85. package/dist/rules/KeyringWalletRule.d.mts +0 -18
  86. package/dist/rules/KeyringWalletRule.d.mts.map +0 -1
  87. package/dist/rules/KeyringWalletRule.mjs +0 -94
  88. package/dist/rules/KeyringWalletRule.mjs.map +0 -1
  89. package/dist/rules/SnapWalletRule.cjs +0 -70
  90. package/dist/rules/SnapWalletRule.cjs.map +0 -1
  91. package/dist/rules/SnapWalletRule.d.cts +0 -10
  92. package/dist/rules/SnapWalletRule.d.cts.map +0 -1
  93. package/dist/rules/SnapWalletRule.d.mts +0 -10
  94. package/dist/rules/SnapWalletRule.d.mts.map +0 -1
  95. package/dist/rules/SnapWalletRule.mjs +0 -66
  96. package/dist/rules/SnapWalletRule.mjs.map +0 -1
  97. package/dist/rules/WalletRule.cjs +0 -13
  98. package/dist/rules/WalletRule.cjs.map +0 -1
  99. package/dist/rules/WalletRule.d.cts +0 -37
  100. package/dist/rules/WalletRule.d.cts.map +0 -1
  101. package/dist/rules/WalletRule.d.mts +0 -37
  102. package/dist/rules/WalletRule.d.mts.map +0 -1
  103. package/dist/rules/WalletRule.mjs +0 -9
  104. package/dist/rules/WalletRule.mjs.map +0 -1
  105. package/dist/rules/index.cjs +0 -21
  106. package/dist/rules/index.cjs.map +0 -1
  107. package/dist/rules/index.d.cts +0 -5
  108. package/dist/rules/index.d.cts.map +0 -1
  109. package/dist/rules/index.d.mts +0 -5
  110. package/dist/rules/index.d.mts.map +0 -1
  111. package/dist/rules/index.mjs +0 -5
  112. package/dist/rules/index.mjs.map +0 -1
  113. package/dist/rules/utils.cjs +0 -15
  114. package/dist/rules/utils.cjs.map +0 -1
  115. package/dist/rules/utils.d.cts +0 -11
  116. package/dist/rules/utils.d.cts.map +0 -1
  117. package/dist/rules/utils.d.mts +0 -11
  118. package/dist/rules/utils.d.mts.map +0 -1
  119. package/dist/rules/utils.mjs +0 -11
  120. package/dist/rules/utils.mjs.map +0 -1
@@ -9,38 +9,65 @@ 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 _MutableAccountTreeWallet_groups;
13
- import { toAccountGroupId, toAccountWalletId, DEFAULT_ACCOUNT_GROUP_UNIQUE_ID } from "@metamask/account-api";
14
- import { MutableAccountTreeGroup } from "./AccountTreeGroup.mjs";
15
- // This class is meant to be used internally by every rules. It exposes mutable operations
16
- // which should not leak outside of this package.
17
- export class MutableAccountTreeWallet {
18
- constructor(messenger, category, id) {
19
- _MutableAccountTreeWallet_groups.set(this, void 0);
20
- this.id = toAccountWalletId(category, id);
21
- this.category = category;
12
+ var _AccountTreeWallet_wallet;
13
+ import { AccountTreeGroup } from "./AccountTreeGroup.mjs";
14
+ /**
15
+ * Account wallet coming from the {@link AccountTreeController}.
16
+ */
17
+ export class AccountTreeWallet {
18
+ constructor({ messenger, wallet, }) {
19
+ _AccountTreeWallet_wallet.set(this, void 0);
22
20
  this.messenger = messenger;
23
- __classPrivateFieldSet(this, _MutableAccountTreeWallet_groups, new Map(), "f");
21
+ __classPrivateFieldSet(this, _AccountTreeWallet_wallet, wallet, "f");
22
+ this.groups = new Map();
23
+ for (const [groupId, group] of Object.entries(__classPrivateFieldGet(this, _AccountTreeWallet_wallet, "f").groups)) {
24
+ this.groups.set(groupId, new AccountTreeGroup({
25
+ messenger: this.messenger,
26
+ wallet: this,
27
+ group,
28
+ }));
29
+ }
24
30
  }
25
- getAccountGroup(groupId) {
26
- return __classPrivateFieldGet(this, _MutableAccountTreeWallet_groups, "f").get(groupId);
31
+ get id() {
32
+ return __classPrivateFieldGet(this, _AccountTreeWallet_wallet, "f").id;
27
33
  }
28
- getAccountGroups() {
29
- return Array.from(__classPrivateFieldGet(this, _MutableAccountTreeWallet_groups, "f").values()); // TODO: Should we avoid the copy here?
34
+ get category() {
35
+ return __classPrivateFieldGet(this, _AccountTreeWallet_wallet, "f").metadata.type;
36
+ }
37
+ get name() {
38
+ return __classPrivateFieldGet(this, _AccountTreeWallet_wallet, "f").metadata.name;
30
39
  }
31
- // NOTE: This method SHOULD BE overriden if a rule need to group things differently.
32
- addAccount(account) {
33
- const id = DEFAULT_ACCOUNT_GROUP_UNIQUE_ID;
34
- // Use a single-group by default.
35
- let group = __classPrivateFieldGet(this, _MutableAccountTreeWallet_groups, "f").get(toAccountGroupId(this.id, id));
40
+ /**
41
+ * Gets account tree group for a given ID.
42
+ *
43
+ * @param groupId - Group ID.
44
+ * @returns Account tree group, or undefined if not found.
45
+ */
46
+ getAccountGroup(groupId) {
47
+ return this.groups.get(groupId);
48
+ }
49
+ /**
50
+ * Gets account tree group for a given ID.
51
+ *
52
+ * @param groupId - Group ID.
53
+ * @throws If the account group is not found.
54
+ * @returns Account tree group.
55
+ */
56
+ getAccountGroupOrThrow(groupId) {
57
+ const group = this.getAccountGroup(groupId);
36
58
  if (!group) {
37
- // We create the account group and attach it to this wallet.
38
- group = new MutableAccountTreeGroup(this.messenger, this, id);
39
- __classPrivateFieldGet(this, _MutableAccountTreeWallet_groups, "f").set(group.id, group);
59
+ throw new Error('Unable to get account group');
40
60
  }
41
- group.addAccount(account);
42
61
  return group;
43
62
  }
63
+ /**
64
+ * Gets all account tree groups.
65
+ *
66
+ * @returns Account tree groups.
67
+ */
68
+ getAccountGroups() {
69
+ return Array.from(this.groups.values());
70
+ }
44
71
  }
45
- _MutableAccountTreeWallet_groups = new WeakMap();
72
+ _AccountTreeWallet_wallet = new WeakMap();
46
73
  //# sourceMappingURL=AccountTreeWallet.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"AccountTreeWallet.mjs","sourceRoot":"","sources":["../src/AccountTreeWallet.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,+BAA+B,EAKhC,8BAA8B;AAK/B,OAAO,EAAE,uBAAuB,EAAE,+BAA2B;AA0B7D,0FAA0F;AAC1F,iDAAiD;AACjD,MAAM,OAAgB,wBAAwB;IAS5C,YACE,SAAyC,EACzC,QAA+B,EAC/B,EAAU;QALH,mDAAsD;QAO7D,IAAI,CAAC,EAAE,GAAG,iBAAiB,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QAC1C,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAE3B,uBAAA,IAAI,oCAAW,IAAI,GAAG,EAAE,MAAA,CAAC;IAC3B,CAAC;IAED,eAAe,CAAC,OAAuB;QACrC,OAAO,uBAAA,IAAI,wCAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACnC,CAAC;IAED,gBAAgB;QACd,OAAO,KAAK,CAAC,IAAI,CAAC,uBAAA,IAAI,wCAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,uCAAuC;IACnF,CAAC;IAED,oFAAoF;IACpF,UAAU,CAAC,OAAwB;QACjC,MAAM,EAAE,GAAG,+BAA+B,CAAC;QAE3C,iCAAiC;QACjC,IAAI,KAAK,GAAG,uBAAA,IAAI,wCAAQ,CAAC,GAAG,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;QAC5D,IAAI,CAAC,KAAK,EAAE;YACV,4DAA4D;YAC5D,KAAK,GAAG,IAAI,uBAAuB,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;YAC9D,uBAAA,IAAI,wCAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;SACnC;QAED,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QAE1B,OAAO,KAAK,CAAC;IACf,CAAC;CAGF","sourcesContent":["import {\n toAccountGroupId,\n toAccountWalletId,\n DEFAULT_ACCOUNT_GROUP_UNIQUE_ID,\n type AccountGroupId,\n type AccountWallet,\n type AccountWalletCategory,\n type AccountWalletId,\n} from '@metamask/account-api';\nimport type { InternalAccount } from '@metamask/keyring-internal-api';\n\nimport { type AccountTreeControllerMessenger } from './AccountTreeController';\nimport type { AccountTreeGroup } from './AccountTreeGroup';\nimport { MutableAccountTreeGroup } from './AccountTreeGroup';\n\n/**\n * Account wallet coming from the {@link AccountTreeController}.\n */\nexport type AccountTreeWallet = {\n /**\n * Gets account tree group for a given ID.\n *\n * @returns Account tree group.\n */\n getAccountGroup(groupId: AccountGroupId): AccountTreeGroup | undefined;\n\n /**\n * Gets all account tree groups.\n *\n * @returns Account tree groups.\n */\n getAccountGroups(): AccountTreeGroup[];\n\n /**\n * Gets the default name for that account wallet.\n */\n getDefaultName(): string;\n} & AccountWallet<InternalAccount>;\n\n// This class is meant to be used internally by every rules. It exposes mutable operations\n// which should not leak outside of this package.\nexport abstract class MutableAccountTreeWallet implements AccountTreeWallet {\n readonly id: AccountWalletId;\n\n readonly category: AccountWalletCategory;\n\n readonly messenger: AccountTreeControllerMessenger;\n\n readonly #groups: Map<AccountGroupId, MutableAccountTreeGroup>;\n\n constructor(\n messenger: AccountTreeControllerMessenger,\n category: AccountWalletCategory,\n id: string,\n ) {\n this.id = toAccountWalletId(category, id);\n this.category = category;\n this.messenger = messenger;\n\n this.#groups = new Map();\n }\n\n getAccountGroup(groupId: AccountGroupId): AccountTreeGroup | undefined {\n return this.#groups.get(groupId);\n }\n\n getAccountGroups(): AccountTreeGroup[] {\n return Array.from(this.#groups.values()); // TODO: Should we avoid the copy here?\n }\n\n // NOTE: This method SHOULD BE overriden if a rule need to group things differently.\n addAccount(account: InternalAccount): MutableAccountTreeGroup {\n const id = DEFAULT_ACCOUNT_GROUP_UNIQUE_ID;\n\n // Use a single-group by default.\n let group = this.#groups.get(toAccountGroupId(this.id, id));\n if (!group) {\n // We create the account group and attach it to this wallet.\n group = new MutableAccountTreeGroup(this.messenger, this, id);\n this.#groups.set(group.id, group);\n }\n\n group.addAccount(account);\n\n return group;\n }\n\n abstract getDefaultName(): string;\n}\n"]}
1
+ {"version":3,"file":"AccountTreeWallet.mjs","sourceRoot":"","sources":["../src/AccountTreeWallet.ts"],"names":[],"mappings":";;;;;;;;;;;;AAOA,OAAO,EAAE,gBAAgB,EAAE,+BAA2B;AAItD;;GAEG;AACH,MAAM,OAAO,iBAAiB;IAO5B,YAAY,EACV,SAAS,EACT,MAAM,GAIP;QAZQ,4CAA6B;QAapC,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,uBAAA,IAAI,6BAAW,MAAM,MAAA,CAAC;QACtB,IAAI,CAAC,MAAM,GAAG,IAAI,GAAG,EAAE,CAAC;QAExB,KAAK,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,uBAAA,IAAI,iCAAQ,CAAC,MAAM,CAAC,EAAE;YAClE,IAAI,CAAC,MAAM,CAAC,GAAG,CACb,OAAyB,EACzB,IAAI,gBAAgB,CAAC;gBACnB,SAAS,EAAE,IAAI,CAAC,SAAS;gBACzB,MAAM,EAAE,IAAI;gBACZ,KAAK;aACN,CAAC,CACH,CAAC;SACH;IACH,CAAC;IAED,IAAI,EAAE;QACJ,OAAO,uBAAA,IAAI,iCAAQ,CAAC,EAAE,CAAC;IACzB,CAAC;IAED,IAAI,QAAQ;QACV,OAAO,uBAAA,IAAI,iCAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC;IACpC,CAAC;IAED,IAAI,IAAI;QACN,OAAO,uBAAA,IAAI,iCAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC;IACpC,CAAC;IAED;;;;;OAKG;IACH,eAAe,CAAC,OAAuB;QACrC,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAClC,CAAC;IAED;;;;;;OAMG;IACH,sBAAsB,CAAC,OAAuB;QAC5C,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;QAC5C,IAAI,CAAC,KAAK,EAAE;YACV,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;SAChD;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;;;OAIG;IACH,gBAAgB;QACd,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;IAC1C,CAAC;CACF","sourcesContent":["import type {\n AccountWalletCategory,\n AccountWalletId,\n} from '@metamask/account-api';\nimport { type AccountGroupId, type AccountWallet } from '@metamask/account-api';\nimport type { InternalAccount } from '@metamask/keyring-internal-api';\n\nimport { AccountTreeGroup } from './AccountTreeGroup';\nimport type { AccountWalletObject } from './types';\nimport { type AccountTreeControllerMessenger } from './types';\n\n/**\n * Account wallet coming from the {@link AccountTreeController}.\n */\nexport class AccountTreeWallet implements AccountWallet<InternalAccount> {\n readonly #wallet: AccountWalletObject;\n\n protected messenger: AccountTreeControllerMessenger;\n\n protected groups: Map<AccountGroupId, AccountTreeGroup>;\n\n constructor({\n messenger,\n wallet,\n }: {\n messenger: AccountTreeControllerMessenger;\n wallet: AccountWalletObject;\n }) {\n this.messenger = messenger;\n this.#wallet = wallet;\n this.groups = new Map();\n\n for (const [groupId, group] of Object.entries(this.#wallet.groups)) {\n this.groups.set(\n groupId as AccountGroupId,\n new AccountTreeGroup({\n messenger: this.messenger,\n wallet: this,\n group,\n }),\n );\n }\n }\n\n get id(): AccountWalletId {\n return this.#wallet.id;\n }\n\n get category(): AccountWalletCategory {\n return this.#wallet.metadata.type;\n }\n\n get name(): string {\n return this.#wallet.metadata.name;\n }\n\n /**\n * Gets account tree group for a given ID.\n *\n * @param groupId - Group ID.\n * @returns Account tree group, or undefined if not found.\n */\n getAccountGroup(groupId: AccountGroupId): AccountTreeGroup | undefined {\n return this.groups.get(groupId);\n }\n\n /**\n * Gets account tree group for a given ID.\n *\n * @param groupId - Group ID.\n * @throws If the account group is not found.\n * @returns Account tree group.\n */\n getAccountGroupOrThrow(groupId: AccountGroupId): AccountTreeGroup {\n const group = this.getAccountGroup(groupId);\n if (!group) {\n throw new Error('Unable to get account group');\n }\n\n return group;\n }\n\n /**\n * Gets all account tree groups.\n *\n * @returns Account tree groups.\n */\n getAccountGroups(): AccountTreeGroup[] {\n return Array.from(this.groups.values());\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAYA,qEAGiC;AAF/B,8HAAA,qBAAqB,OAAA;AACrB,6IAAA,oCAAoC,OAAA","sourcesContent":["export type {\n AccountTreeControllerState,\n AccountTreeControllerGetStateAction,\n AccountTreeControllerActions,\n AccountTreeControllerStateChangeEvent,\n AccountTreeControllerEvents,\n AccountTreeControllerMessenger,\n AccountWalletObject,\n AccountWalletMetadata,\n AccountGroupObject,\n AccountGroupMetadata,\n} from './AccountTreeController';\nexport {\n AccountTreeController,\n getDefaultAccountTreeControllerState,\n} from './AccountTreeController';\nexport type { AccountTreeWallet } from './AccountTreeWallet';\nexport type { AccountTreeGroup } from './AccountTreeGroup';\n"]}
1
+ {"version":3,"file":"index.cjs","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAkBA,qEAGiC;AAF/B,8HAAA,qBAAqB,OAAA;AACrB,6IAAA,oCAAoC,OAAA","sourcesContent":["export type {\n AccountTreeControllerState,\n AccountTreeControllerGetStateAction,\n AccountTreeControllerActions,\n AccountTreeControllerSetSelectedAccountGroupAction,\n AccountTreeControllerGetSelectedAccountGroupAction,\n AccountTreeControllerStateChangeEvent,\n AccountTreeControllerEvents,\n AccountTreeControllerMessenger,\n AccountWalletObject,\n AccountWalletMetadata,\n AccountWalletCategoryMetadata,\n AccountWalletEntropyMetadata,\n AccountWalletKeyringMetadata,\n AccountWalletSnapMetadata,\n AccountGroupObject,\n AccountGroupMetadata,\n} from './types';\nexport {\n AccountTreeController,\n getDefaultAccountTreeControllerState,\n} from './AccountTreeController';\nexport type { AccountTreeWallet } from './AccountTreeWallet';\nexport type { AccountTreeGroup } from './AccountTreeGroup';\n"]}
package/dist/index.d.cts CHANGED
@@ -1,4 +1,4 @@
1
- export type { AccountTreeControllerState, AccountTreeControllerGetStateAction, AccountTreeControllerActions, AccountTreeControllerStateChangeEvent, AccountTreeControllerEvents, AccountTreeControllerMessenger, AccountWalletObject, AccountWalletMetadata, AccountGroupObject, AccountGroupMetadata, } from "./AccountTreeController.cjs";
1
+ export type { AccountTreeControllerState, AccountTreeControllerGetStateAction, AccountTreeControllerActions, AccountTreeControllerSetSelectedAccountGroupAction, AccountTreeControllerGetSelectedAccountGroupAction, AccountTreeControllerStateChangeEvent, AccountTreeControllerEvents, AccountTreeControllerMessenger, AccountWalletObject, AccountWalletMetadata, AccountWalletCategoryMetadata, AccountWalletEntropyMetadata, AccountWalletKeyringMetadata, AccountWalletSnapMetadata, AccountGroupObject, AccountGroupMetadata, } from "./types.cjs";
2
2
  export { AccountTreeController, getDefaultAccountTreeControllerState, } from "./AccountTreeController.cjs";
3
3
  export type { AccountTreeWallet } from "./AccountTreeWallet.cjs";
4
4
  export type { AccountTreeGroup } from "./AccountTreeGroup.cjs";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.cts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,0BAA0B,EAC1B,mCAAmC,EACnC,4BAA4B,EAC5B,qCAAqC,EACrC,2BAA2B,EAC3B,8BAA8B,EAC9B,mBAAmB,EACnB,qBAAqB,EACrB,kBAAkB,EAClB,oBAAoB,GACrB,oCAAgC;AACjC,OAAO,EACL,qBAAqB,EACrB,oCAAoC,GACrC,oCAAgC;AACjC,YAAY,EAAE,iBAAiB,EAAE,gCAA4B;AAC7D,YAAY,EAAE,gBAAgB,EAAE,+BAA2B"}
1
+ {"version":3,"file":"index.d.cts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,0BAA0B,EAC1B,mCAAmC,EACnC,4BAA4B,EAC5B,kDAAkD,EAClD,kDAAkD,EAClD,qCAAqC,EACrC,2BAA2B,EAC3B,8BAA8B,EAC9B,mBAAmB,EACnB,qBAAqB,EACrB,6BAA6B,EAC7B,4BAA4B,EAC5B,4BAA4B,EAC5B,yBAAyB,EACzB,kBAAkB,EAClB,oBAAoB,GACrB,oBAAgB;AACjB,OAAO,EACL,qBAAqB,EACrB,oCAAoC,GACrC,oCAAgC;AACjC,YAAY,EAAE,iBAAiB,EAAE,gCAA4B;AAC7D,YAAY,EAAE,gBAAgB,EAAE,+BAA2B"}
package/dist/index.d.mts CHANGED
@@ -1,4 +1,4 @@
1
- export type { AccountTreeControllerState, AccountTreeControllerGetStateAction, AccountTreeControllerActions, AccountTreeControllerStateChangeEvent, AccountTreeControllerEvents, AccountTreeControllerMessenger, AccountWalletObject, AccountWalletMetadata, AccountGroupObject, AccountGroupMetadata, } from "./AccountTreeController.mjs";
1
+ export type { AccountTreeControllerState, AccountTreeControllerGetStateAction, AccountTreeControllerActions, AccountTreeControllerSetSelectedAccountGroupAction, AccountTreeControllerGetSelectedAccountGroupAction, AccountTreeControllerStateChangeEvent, AccountTreeControllerEvents, AccountTreeControllerMessenger, AccountWalletObject, AccountWalletMetadata, AccountWalletCategoryMetadata, AccountWalletEntropyMetadata, AccountWalletKeyringMetadata, AccountWalletSnapMetadata, AccountGroupObject, AccountGroupMetadata, } from "./types.mjs";
2
2
  export { AccountTreeController, getDefaultAccountTreeControllerState, } from "./AccountTreeController.mjs";
3
3
  export type { AccountTreeWallet } from "./AccountTreeWallet.mjs";
4
4
  export type { AccountTreeGroup } from "./AccountTreeGroup.mjs";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.mts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,0BAA0B,EAC1B,mCAAmC,EACnC,4BAA4B,EAC5B,qCAAqC,EACrC,2BAA2B,EAC3B,8BAA8B,EAC9B,mBAAmB,EACnB,qBAAqB,EACrB,kBAAkB,EAClB,oBAAoB,GACrB,oCAAgC;AACjC,OAAO,EACL,qBAAqB,EACrB,oCAAoC,GACrC,oCAAgC;AACjC,YAAY,EAAE,iBAAiB,EAAE,gCAA4B;AAC7D,YAAY,EAAE,gBAAgB,EAAE,+BAA2B"}
1
+ {"version":3,"file":"index.d.mts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,0BAA0B,EAC1B,mCAAmC,EACnC,4BAA4B,EAC5B,kDAAkD,EAClD,kDAAkD,EAClD,qCAAqC,EACrC,2BAA2B,EAC3B,8BAA8B,EAC9B,mBAAmB,EACnB,qBAAqB,EACrB,6BAA6B,EAC7B,4BAA4B,EAC5B,4BAA4B,EAC5B,yBAAyB,EACzB,kBAAkB,EAClB,oBAAoB,GACrB,oBAAgB;AACjB,OAAO,EACL,qBAAqB,EACrB,oCAAoC,GACrC,oCAAgC;AACjC,YAAY,EAAE,iBAAiB,EAAE,gCAA4B;AAC7D,YAAY,EAAE,gBAAgB,EAAE,+BAA2B"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAYA,OAAO,EACL,qBAAqB,EACrB,oCAAoC,EACrC,oCAAgC","sourcesContent":["export type {\n AccountTreeControllerState,\n AccountTreeControllerGetStateAction,\n AccountTreeControllerActions,\n AccountTreeControllerStateChangeEvent,\n AccountTreeControllerEvents,\n AccountTreeControllerMessenger,\n AccountWalletObject,\n AccountWalletMetadata,\n AccountGroupObject,\n AccountGroupMetadata,\n} from './AccountTreeController';\nexport {\n AccountTreeController,\n getDefaultAccountTreeControllerState,\n} from './AccountTreeController';\nexport type { AccountTreeWallet } from './AccountTreeWallet';\nexport type { AccountTreeGroup } from './AccountTreeGroup';\n"]}
1
+ {"version":3,"file":"index.mjs","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAkBA,OAAO,EACL,qBAAqB,EACrB,oCAAoC,EACrC,oCAAgC","sourcesContent":["export type {\n AccountTreeControllerState,\n AccountTreeControllerGetStateAction,\n AccountTreeControllerActions,\n AccountTreeControllerSetSelectedAccountGroupAction,\n AccountTreeControllerGetSelectedAccountGroupAction,\n AccountTreeControllerStateChangeEvent,\n AccountTreeControllerEvents,\n AccountTreeControllerMessenger,\n AccountWalletObject,\n AccountWalletMetadata,\n AccountWalletCategoryMetadata,\n AccountWalletEntropyMetadata,\n AccountWalletKeyringMetadata,\n AccountWalletSnapMetadata,\n AccountGroupObject,\n AccountGroupMetadata,\n} from './types';\nexport {\n AccountTreeController,\n getDefaultAccountTreeControllerState,\n} from './AccountTreeController';\nexport type { AccountTreeWallet } from './AccountTreeWallet';\nexport type { AccountTreeGroup } from './AccountTreeGroup';\n"]}
@@ -0,0 +1,68 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EntropyRule = void 0;
4
+ const account_api_1 = require("@metamask/account-api");
5
+ const keyring_api_1 = require("@metamask/keyring-api");
6
+ const keyring_controller_1 = require("@metamask/keyring-controller");
7
+ const AccountTreeRule_1 = require("../AccountTreeRule.cjs");
8
+ class EntropyRule extends AccountTreeRule_1.AccountTreeRule {
9
+ constructor() {
10
+ super(...arguments);
11
+ this.category = account_api_1.AccountWalletCategory.Entropy;
12
+ }
13
+ getEntropySourceIndex(entropySource) {
14
+ const { keyrings } = this.messenger.call('KeyringController:getState');
15
+ return keyrings
16
+ .filter((keyring) => keyring.type === keyring_controller_1.KeyringTypes.hd)
17
+ .findIndex((keyring) => keyring.metadata.id === entropySource);
18
+ }
19
+ match(account) {
20
+ if (!(0, account_api_1.isBip44Account)(account)) {
21
+ return undefined;
22
+ }
23
+ const entropySource = account.options.entropy.id;
24
+ const entropySourceIndex = this.getEntropySourceIndex(entropySource);
25
+ if (entropySourceIndex === -1) {
26
+ console.warn(`! Found an unknown entropy ID: "${entropySource}", account "${account.id}" won't be grouped by entropy.`);
27
+ return undefined;
28
+ }
29
+ const walletId = (0, account_api_1.toMultichainAccountWalletId)(account.options.entropy.id);
30
+ const wallet = {
31
+ id: walletId,
32
+ metadata: {
33
+ type: account_api_1.AccountWalletCategory.Entropy,
34
+ entropy: {
35
+ id: entropySource,
36
+ // QUESTION: Should we re-compute the index everytime instead?
37
+ index: entropySourceIndex,
38
+ },
39
+ },
40
+ };
41
+ const group = {
42
+ id: (0, account_api_1.toMultichainAccountId)(walletId, account.options.entropy.groupIndex),
43
+ };
44
+ return {
45
+ wallet,
46
+ group,
47
+ };
48
+ }
49
+ getDefaultAccountWalletName(wallet) {
50
+ // Precondition: We assume the AccountTreeController will always use
51
+ // the proper wallet instance.
52
+ const options = wallet.metadata;
53
+ return `Wallet ${options.entropy.index + 1}`; // Use human indexing (starts at 1).
54
+ }
55
+ getDefaultAccountGroupName(group) {
56
+ // EVM account name has a highest priority.
57
+ const accounts = this.getAccountsFrom(group);
58
+ const evmAccount = accounts.find((account) => (0, keyring_api_1.isEvmAccountType)(account.type));
59
+ if (evmAccount) {
60
+ return evmAccount.metadata.name;
61
+ }
62
+ // We should always have an account, since this function will be called only
63
+ // if an account got a match.
64
+ return accounts[0].metadata.name;
65
+ }
66
+ }
67
+ exports.EntropyRule = EntropyRule;
68
+ //# sourceMappingURL=entropy.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entropy.cjs","sourceRoot":"","sources":["../../src/rules/entropy.ts"],"names":[],"mappings":";;;AAAA,uDAK+B;AAC/B,uDAAyD;AACzD,qEAA4D;AAS5D,4DAAqD;AAErD,MAAa,WAAY,SAAQ,iCAAe;IAAhD;;QACW,aAAQ,GAAG,mCAAqB,CAAC,OAAO,CAAC;IAqEpD,CAAC;IAnEC,qBAAqB,CAAC,aAAqB;QACzC,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;QAEvE,OAAO,QAAQ;aACZ,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,KAAM,iCAAY,CAAC,EAAa,CAAC;aACjE,SAAS,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,KAAK,aAAa,CAAC,CAAC;IACnE,CAAC;IAED,KAAK,CAAC,OAAwB;QAC5B,IAAI,CAAC,IAAA,4BAAc,EAAC,OAAO,CAAC,EAAE;YAC5B,OAAO,SAAS,CAAC;SAClB;QAED,MAAM,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QACjD,MAAM,kBAAkB,GAAG,IAAI,CAAC,qBAAqB,CAAC,aAAa,CAAC,CAAC;QACrE,IAAI,kBAAkB,KAAK,CAAC,CAAC,EAAE;YAC7B,OAAO,CAAC,IAAI,CACV,mCAAmC,aAAa,eAAe,OAAO,CAAC,EAAE,gCAAgC,CAC1G,CAAC;YACF,OAAO,SAAS,CAAC;SAClB;QAED,MAAM,QAAQ,GAAG,IAAA,yCAA2B,EAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACzE,MAAM,MAAM,GAAoC;YAC9C,EAAE,EAAE,QAAQ;YACZ,QAAQ,EAAE;gBACR,IAAI,EAAE,mCAAqB,CAAC,OAAO;gBACnC,OAAO,EAAE;oBACP,EAAE,EAAE,aAAa;oBACjB,8DAA8D;oBAC9D,KAAK,EAAE,kBAAkB;iBAC1B;aACF;SACF,CAAC;QAEF,MAAM,KAAK,GAAmC;YAC5C,EAAE,EAAE,IAAA,mCAAqB,EAAC,QAAQ,EAAE,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC;SACxE,CAAC;QAEF,OAAO;YACL,MAAM;YACN,KAAK;SACN,CAAC;IACJ,CAAC;IAED,2BAA2B,CAAC,MAA2B;QACrD,oEAAoE;QACpE,8BAA8B;QAC9B,MAAM,OAAO,GAAG,MAAM,CAAC,QAAwC,CAAC;QAEhE,OAAO,UAAU,OAAO,CAAC,OAAO,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,CAAC,oCAAoC;IACpF,CAAC;IAED,0BAA0B,CAAC,KAAyB;QAClD,2CAA2C;QAC3C,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;QAC7C,MAAM,UAAU,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAC3C,IAAA,8BAAgB,EAAC,OAAO,CAAC,IAAI,CAAC,CAC/B,CAAC;QACF,IAAI,UAAU,EAAE;YACd,OAAO,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC;SACjC;QAED,4EAA4E;QAC5E,6BAA6B;QAC7B,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC;IACnC,CAAC;CACF;AAtED,kCAsEC","sourcesContent":["import {\n AccountWalletCategory,\n isBip44Account,\n toMultichainAccountId,\n toMultichainAccountWalletId,\n} from '@metamask/account-api';\nimport { isEvmAccountType } from '@metamask/keyring-api';\nimport { KeyringTypes } from '@metamask/keyring-controller';\nimport type { InternalAccount } from '@metamask/keyring-internal-api';\n\nimport type {\n AccountGroupObject,\n AccountWalletEntropyMetadata,\n AccountWalletObject,\n} from '..';\nimport type { AccountTreeRuleResult } from '../AccountTreeRule';\nimport { AccountTreeRule } from '../AccountTreeRule';\n\nexport class EntropyRule extends AccountTreeRule {\n readonly category = AccountWalletCategory.Entropy;\n\n getEntropySourceIndex(entropySource: string) {\n const { keyrings } = this.messenger.call('KeyringController:getState');\n\n return keyrings\n .filter((keyring) => keyring.type === (KeyringTypes.hd as string))\n .findIndex((keyring) => keyring.metadata.id === entropySource);\n }\n\n match(account: InternalAccount): AccountTreeRuleResult | undefined {\n if (!isBip44Account(account)) {\n return undefined;\n }\n\n const entropySource = account.options.entropy.id;\n const entropySourceIndex = this.getEntropySourceIndex(entropySource);\n if (entropySourceIndex === -1) {\n console.warn(\n `! Found an unknown entropy ID: \"${entropySource}\", account \"${account.id}\" won't be grouped by entropy.`,\n );\n return undefined;\n }\n\n const walletId = toMultichainAccountWalletId(account.options.entropy.id);\n const wallet: AccountTreeRuleResult['wallet'] = {\n id: walletId,\n metadata: {\n type: AccountWalletCategory.Entropy,\n entropy: {\n id: entropySource,\n // QUESTION: Should we re-compute the index everytime instead?\n index: entropySourceIndex,\n },\n },\n };\n\n const group: AccountTreeRuleResult['group'] = {\n id: toMultichainAccountId(walletId, account.options.entropy.groupIndex),\n };\n\n return {\n wallet,\n group,\n };\n }\n\n getDefaultAccountWalletName(wallet: AccountWalletObject): string {\n // Precondition: We assume the AccountTreeController will always use\n // the proper wallet instance.\n const options = wallet.metadata as AccountWalletEntropyMetadata;\n\n return `Wallet ${options.entropy.index + 1}`; // Use human indexing (starts at 1).\n }\n\n getDefaultAccountGroupName(group: AccountGroupObject): string {\n // EVM account name has a highest priority.\n const accounts = this.getAccountsFrom(group);\n const evmAccount = accounts.find((account) =>\n isEvmAccountType(account.type),\n );\n if (evmAccount) {\n return evmAccount.metadata.name;\n }\n\n // We should always have an account, since this function will be called only\n // if an account got a match.\n return accounts[0].metadata.name;\n }\n}\n"]}
@@ -0,0 +1,13 @@
1
+ import { AccountWalletCategory } from "@metamask/account-api";
2
+ import type { InternalAccount } from "@metamask/keyring-internal-api";
3
+ import type { AccountGroupObject, AccountWalletObject } from "../index.cjs";
4
+ import type { AccountTreeRuleResult } from "../AccountTreeRule.cjs";
5
+ import { AccountTreeRule } from "../AccountTreeRule.cjs";
6
+ export declare class EntropyRule extends AccountTreeRule {
7
+ readonly category = AccountWalletCategory.Entropy;
8
+ getEntropySourceIndex(entropySource: string): number;
9
+ match(account: InternalAccount): AccountTreeRuleResult | undefined;
10
+ getDefaultAccountWalletName(wallet: AccountWalletObject): string;
11
+ getDefaultAccountGroupName(group: AccountGroupObject): string;
12
+ }
13
+ //# sourceMappingURL=entropy.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entropy.d.cts","sourceRoot":"","sources":["../../src/rules/entropy.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,EAItB,8BAA8B;AAG/B,OAAO,KAAK,EAAE,eAAe,EAAE,uCAAuC;AAEtE,OAAO,KAAK,EACV,kBAAkB,EAElB,mBAAmB,EACpB,qBAAW;AACZ,OAAO,KAAK,EAAE,qBAAqB,EAAE,+BAA2B;AAChE,OAAO,EAAE,eAAe,EAAE,+BAA2B;AAErD,qBAAa,WAAY,SAAQ,eAAe;IAC9C,QAAQ,CAAC,QAAQ,iCAAiC;IAElD,qBAAqB,CAAC,aAAa,EAAE,MAAM;IAQ3C,KAAK,CAAC,OAAO,EAAE,eAAe,GAAG,qBAAqB,GAAG,SAAS;IAqClE,2BAA2B,CAAC,MAAM,EAAE,mBAAmB,GAAG,MAAM;IAQhE,0BAA0B,CAAC,KAAK,EAAE,kBAAkB,GAAG,MAAM;CAc9D"}
@@ -0,0 +1,13 @@
1
+ import { AccountWalletCategory } from "@metamask/account-api";
2
+ import type { InternalAccount } from "@metamask/keyring-internal-api";
3
+ import type { AccountGroupObject, AccountWalletObject } from "../index.mjs";
4
+ import type { AccountTreeRuleResult } from "../AccountTreeRule.mjs";
5
+ import { AccountTreeRule } from "../AccountTreeRule.mjs";
6
+ export declare class EntropyRule extends AccountTreeRule {
7
+ readonly category = AccountWalletCategory.Entropy;
8
+ getEntropySourceIndex(entropySource: string): number;
9
+ match(account: InternalAccount): AccountTreeRuleResult | undefined;
10
+ getDefaultAccountWalletName(wallet: AccountWalletObject): string;
11
+ getDefaultAccountGroupName(group: AccountGroupObject): string;
12
+ }
13
+ //# sourceMappingURL=entropy.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entropy.d.mts","sourceRoot":"","sources":["../../src/rules/entropy.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,EAItB,8BAA8B;AAG/B,OAAO,KAAK,EAAE,eAAe,EAAE,uCAAuC;AAEtE,OAAO,KAAK,EACV,kBAAkB,EAElB,mBAAmB,EACpB,qBAAW;AACZ,OAAO,KAAK,EAAE,qBAAqB,EAAE,+BAA2B;AAChE,OAAO,EAAE,eAAe,EAAE,+BAA2B;AAErD,qBAAa,WAAY,SAAQ,eAAe;IAC9C,QAAQ,CAAC,QAAQ,iCAAiC;IAElD,qBAAqB,CAAC,aAAa,EAAE,MAAM;IAQ3C,KAAK,CAAC,OAAO,EAAE,eAAe,GAAG,qBAAqB,GAAG,SAAS;IAqClE,2BAA2B,CAAC,MAAM,EAAE,mBAAmB,GAAG,MAAM;IAQhE,0BAA0B,CAAC,KAAK,EAAE,kBAAkB,GAAG,MAAM;CAc9D"}
@@ -0,0 +1,64 @@
1
+ import { AccountWalletCategory, isBip44Account, toMultichainAccountId, toMultichainAccountWalletId } from "@metamask/account-api";
2
+ import { isEvmAccountType } from "@metamask/keyring-api";
3
+ import { KeyringTypes } from "@metamask/keyring-controller";
4
+ import { AccountTreeRule } from "../AccountTreeRule.mjs";
5
+ export class EntropyRule extends AccountTreeRule {
6
+ constructor() {
7
+ super(...arguments);
8
+ this.category = AccountWalletCategory.Entropy;
9
+ }
10
+ getEntropySourceIndex(entropySource) {
11
+ const { keyrings } = this.messenger.call('KeyringController:getState');
12
+ return keyrings
13
+ .filter((keyring) => keyring.type === KeyringTypes.hd)
14
+ .findIndex((keyring) => keyring.metadata.id === entropySource);
15
+ }
16
+ match(account) {
17
+ if (!isBip44Account(account)) {
18
+ return undefined;
19
+ }
20
+ const entropySource = account.options.entropy.id;
21
+ const entropySourceIndex = this.getEntropySourceIndex(entropySource);
22
+ if (entropySourceIndex === -1) {
23
+ console.warn(`! Found an unknown entropy ID: "${entropySource}", account "${account.id}" won't be grouped by entropy.`);
24
+ return undefined;
25
+ }
26
+ const walletId = toMultichainAccountWalletId(account.options.entropy.id);
27
+ const wallet = {
28
+ id: walletId,
29
+ metadata: {
30
+ type: AccountWalletCategory.Entropy,
31
+ entropy: {
32
+ id: entropySource,
33
+ // QUESTION: Should we re-compute the index everytime instead?
34
+ index: entropySourceIndex,
35
+ },
36
+ },
37
+ };
38
+ const group = {
39
+ id: toMultichainAccountId(walletId, account.options.entropy.groupIndex),
40
+ };
41
+ return {
42
+ wallet,
43
+ group,
44
+ };
45
+ }
46
+ getDefaultAccountWalletName(wallet) {
47
+ // Precondition: We assume the AccountTreeController will always use
48
+ // the proper wallet instance.
49
+ const options = wallet.metadata;
50
+ return `Wallet ${options.entropy.index + 1}`; // Use human indexing (starts at 1).
51
+ }
52
+ getDefaultAccountGroupName(group) {
53
+ // EVM account name has a highest priority.
54
+ const accounts = this.getAccountsFrom(group);
55
+ const evmAccount = accounts.find((account) => isEvmAccountType(account.type));
56
+ if (evmAccount) {
57
+ return evmAccount.metadata.name;
58
+ }
59
+ // We should always have an account, since this function will be called only
60
+ // if an account got a match.
61
+ return accounts[0].metadata.name;
62
+ }
63
+ }
64
+ //# sourceMappingURL=entropy.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entropy.mjs","sourceRoot":"","sources":["../../src/rules/entropy.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,EACrB,cAAc,EACd,qBAAqB,EACrB,2BAA2B,EAC5B,8BAA8B;AAC/B,OAAO,EAAE,gBAAgB,EAAE,8BAA8B;AACzD,OAAO,EAAE,YAAY,EAAE,qCAAqC;AAS5D,OAAO,EAAE,eAAe,EAAE,+BAA2B;AAErD,MAAM,OAAO,WAAY,SAAQ,eAAe;IAAhD;;QACW,aAAQ,GAAG,qBAAqB,CAAC,OAAO,CAAC;IAqEpD,CAAC;IAnEC,qBAAqB,CAAC,aAAqB;QACzC,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;QAEvE,OAAO,QAAQ;aACZ,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,KAAM,YAAY,CAAC,EAAa,CAAC;aACjE,SAAS,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,KAAK,aAAa,CAAC,CAAC;IACnE,CAAC;IAED,KAAK,CAAC,OAAwB;QAC5B,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE;YAC5B,OAAO,SAAS,CAAC;SAClB;QAED,MAAM,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QACjD,MAAM,kBAAkB,GAAG,IAAI,CAAC,qBAAqB,CAAC,aAAa,CAAC,CAAC;QACrE,IAAI,kBAAkB,KAAK,CAAC,CAAC,EAAE;YAC7B,OAAO,CAAC,IAAI,CACV,mCAAmC,aAAa,eAAe,OAAO,CAAC,EAAE,gCAAgC,CAC1G,CAAC;YACF,OAAO,SAAS,CAAC;SAClB;QAED,MAAM,QAAQ,GAAG,2BAA2B,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACzE,MAAM,MAAM,GAAoC;YAC9C,EAAE,EAAE,QAAQ;YACZ,QAAQ,EAAE;gBACR,IAAI,EAAE,qBAAqB,CAAC,OAAO;gBACnC,OAAO,EAAE;oBACP,EAAE,EAAE,aAAa;oBACjB,8DAA8D;oBAC9D,KAAK,EAAE,kBAAkB;iBAC1B;aACF;SACF,CAAC;QAEF,MAAM,KAAK,GAAmC;YAC5C,EAAE,EAAE,qBAAqB,CAAC,QAAQ,EAAE,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC;SACxE,CAAC;QAEF,OAAO;YACL,MAAM;YACN,KAAK;SACN,CAAC;IACJ,CAAC;IAED,2BAA2B,CAAC,MAA2B;QACrD,oEAAoE;QACpE,8BAA8B;QAC9B,MAAM,OAAO,GAAG,MAAM,CAAC,QAAwC,CAAC;QAEhE,OAAO,UAAU,OAAO,CAAC,OAAO,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,CAAC,oCAAoC;IACpF,CAAC;IAED,0BAA0B,CAAC,KAAyB;QAClD,2CAA2C;QAC3C,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;QAC7C,MAAM,UAAU,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAC3C,gBAAgB,CAAC,OAAO,CAAC,IAAI,CAAC,CAC/B,CAAC;QACF,IAAI,UAAU,EAAE;YACd,OAAO,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC;SACjC;QAED,4EAA4E;QAC5E,6BAA6B;QAC7B,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC;IACnC,CAAC;CACF","sourcesContent":["import {\n AccountWalletCategory,\n isBip44Account,\n toMultichainAccountId,\n toMultichainAccountWalletId,\n} from '@metamask/account-api';\nimport { isEvmAccountType } from '@metamask/keyring-api';\nimport { KeyringTypes } from '@metamask/keyring-controller';\nimport type { InternalAccount } from '@metamask/keyring-internal-api';\n\nimport type {\n AccountGroupObject,\n AccountWalletEntropyMetadata,\n AccountWalletObject,\n} from '..';\nimport type { AccountTreeRuleResult } from '../AccountTreeRule';\nimport { AccountTreeRule } from '../AccountTreeRule';\n\nexport class EntropyRule extends AccountTreeRule {\n readonly category = AccountWalletCategory.Entropy;\n\n getEntropySourceIndex(entropySource: string) {\n const { keyrings } = this.messenger.call('KeyringController:getState');\n\n return keyrings\n .filter((keyring) => keyring.type === (KeyringTypes.hd as string))\n .findIndex((keyring) => keyring.metadata.id === entropySource);\n }\n\n match(account: InternalAccount): AccountTreeRuleResult | undefined {\n if (!isBip44Account(account)) {\n return undefined;\n }\n\n const entropySource = account.options.entropy.id;\n const entropySourceIndex = this.getEntropySourceIndex(entropySource);\n if (entropySourceIndex === -1) {\n console.warn(\n `! Found an unknown entropy ID: \"${entropySource}\", account \"${account.id}\" won't be grouped by entropy.`,\n );\n return undefined;\n }\n\n const walletId = toMultichainAccountWalletId(account.options.entropy.id);\n const wallet: AccountTreeRuleResult['wallet'] = {\n id: walletId,\n metadata: {\n type: AccountWalletCategory.Entropy,\n entropy: {\n id: entropySource,\n // QUESTION: Should we re-compute the index everytime instead?\n index: entropySourceIndex,\n },\n },\n };\n\n const group: AccountTreeRuleResult['group'] = {\n id: toMultichainAccountId(walletId, account.options.entropy.groupIndex),\n };\n\n return {\n wallet,\n group,\n };\n }\n\n getDefaultAccountWalletName(wallet: AccountWalletObject): string {\n // Precondition: We assume the AccountTreeController will always use\n // the proper wallet instance.\n const options = wallet.metadata as AccountWalletEntropyMetadata;\n\n return `Wallet ${options.entropy.index + 1}`; // Use human indexing (starts at 1).\n }\n\n getDefaultAccountGroupName(group: AccountGroupObject): string {\n // EVM account name has a highest priority.\n const accounts = this.getAccountsFrom(group);\n const evmAccount = accounts.find((account) =>\n isEvmAccountType(account.type),\n );\n if (evmAccount) {\n return evmAccount.metadata.name;\n }\n\n // We should always have an account, since this function will be called only\n // if an account got a match.\n return accounts[0].metadata.name;\n }\n}\n"]}
@@ -0,0 +1,86 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.KeyringRule = exports.getAccountWalletNameFromKeyringType = void 0;
4
+ const account_api_1 = require("@metamask/account-api");
5
+ const keyring_controller_1 = require("@metamask/keyring-controller");
6
+ const AccountTreeRule_1 = require("../AccountTreeRule.cjs");
7
+ /**
8
+ * Get wallet name from a keyring type.
9
+ *
10
+ * @param type - Keyring's type.
11
+ * @returns Wallet name.
12
+ */
13
+ function getAccountWalletNameFromKeyringType(type) {
14
+ switch (type) {
15
+ case keyring_controller_1.KeyringTypes.simple: {
16
+ return 'Imported accounts';
17
+ }
18
+ case keyring_controller_1.KeyringTypes.trezor: {
19
+ return 'Trezor';
20
+ }
21
+ case keyring_controller_1.KeyringTypes.oneKey: {
22
+ return 'OneKey';
23
+ }
24
+ case keyring_controller_1.KeyringTypes.ledger: {
25
+ return 'Ledger';
26
+ }
27
+ case keyring_controller_1.KeyringTypes.lattice: {
28
+ return 'Lattice';
29
+ }
30
+ case keyring_controller_1.KeyringTypes.qr: {
31
+ return 'QR';
32
+ }
33
+ // Those keyrings should never really be used in such context since they
34
+ // should be used by other grouping rules.
35
+ case keyring_controller_1.KeyringTypes.hd: {
36
+ return 'HD Wallet';
37
+ }
38
+ case keyring_controller_1.KeyringTypes.snap: {
39
+ return 'Snap Wallet';
40
+ }
41
+ // ------------------------------------------------------------------------
42
+ default: {
43
+ return 'Unknown';
44
+ }
45
+ }
46
+ }
47
+ exports.getAccountWalletNameFromKeyringType = getAccountWalletNameFromKeyringType;
48
+ class KeyringRule extends AccountTreeRule_1.AccountTreeRule {
49
+ constructor() {
50
+ super(...arguments);
51
+ this.category = account_api_1.AccountWalletCategory.Keyring;
52
+ }
53
+ match(account) {
54
+ // We assume that `type` is really a `KeyringTypes`.
55
+ const type = account.metadata.keyring.type;
56
+ const wallet = {
57
+ id: (0, account_api_1.toAccountWalletId)(this.category, type),
58
+ metadata: {
59
+ type: account_api_1.AccountWalletCategory.Keyring,
60
+ keyring: {
61
+ type,
62
+ },
63
+ },
64
+ };
65
+ const group = {
66
+ id: (0, account_api_1.toAccountGroupId)(wallet.id, account.address),
67
+ };
68
+ // This rule cannot fail.
69
+ return {
70
+ wallet,
71
+ group,
72
+ };
73
+ }
74
+ getDefaultAccountWalletName(wallet) {
75
+ // Precondition: We assume the AccountTreeController will always use
76
+ // the proper wallet instance.
77
+ const metadata = wallet.metadata;
78
+ return getAccountWalletNameFromKeyringType(metadata.keyring.type);
79
+ }
80
+ getDefaultAccountGroupName(group) {
81
+ // Precondition: This account group should contain only 1 account.
82
+ return this.getOnlyAccountFrom(group).metadata.name;
83
+ }
84
+ }
85
+ exports.KeyringRule = KeyringRule;
86
+ //# sourceMappingURL=keyring.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keyring.cjs","sourceRoot":"","sources":["../../src/rules/keyring.ts"],"names":[],"mappings":";;;AAAA,uDAI+B;AAC/B,qEAA4D;AAS5D,4DAAqD;AAErD;;;;;GAKG;AACH,SAAgB,mCAAmC,CAAC,IAAkB;IACpE,QAAQ,IAAI,EAAE;QACZ,KAAK,iCAAY,CAAC,MAAM,CAAC,CAAC;YACxB,OAAO,mBAAmB,CAAC;SAC5B;QACD,KAAK,iCAAY,CAAC,MAAM,CAAC,CAAC;YACxB,OAAO,QAAQ,CAAC;SACjB;QACD,KAAK,iCAAY,CAAC,MAAM,CAAC,CAAC;YACxB,OAAO,QAAQ,CAAC;SACjB;QACD,KAAK,iCAAY,CAAC,MAAM,CAAC,CAAC;YACxB,OAAO,QAAQ,CAAC;SACjB;QACD,KAAK,iCAAY,CAAC,OAAO,CAAC,CAAC;YACzB,OAAO,SAAS,CAAC;SAClB;QACD,KAAK,iCAAY,CAAC,EAAE,CAAC,CAAC;YACpB,OAAO,IAAI,CAAC;SACb;QACD,wEAAwE;QACxE,0CAA0C;QAC1C,KAAK,iCAAY,CAAC,EAAE,CAAC,CAAC;YACpB,OAAO,WAAW,CAAC;SACpB;QACD,KAAK,iCAAY,CAAC,IAAI,CAAC,CAAC;YACtB,OAAO,aAAa,CAAC;SACtB;QACD,2EAA2E;QAC3E,OAAO,CAAC,CAAC;YACP,OAAO,SAAS,CAAC;SAClB;KACF;AACH,CAAC;AAjCD,kFAiCC;AAED,MAAa,WAAY,SAAQ,iCAAe;IAAhD;;QACW,aAAQ,GAAG,mCAAqB,CAAC,OAAO,CAAC;IAuCpD,CAAC;IArCC,KAAK,CAAC,OAAwB;QAC5B,oDAAoD;QACpD,MAAM,IAAI,GAAG,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAoB,CAAC;QAE3D,MAAM,MAAM,GAAoC;YAC9C,EAAE,EAAE,IAAA,+BAAiB,EAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC;YAC1C,QAAQ,EAAE;gBACR,IAAI,EAAE,mCAAqB,CAAC,OAAO;gBACnC,OAAO,EAAE;oBACP,IAAI;iBACL;aACF;SACF,CAAC;QAEF,MAAM,KAAK,GAAmC;YAC5C,EAAE,EAAE,IAAA,8BAAgB,EAAC,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC,OAAO,CAAC;SACjD,CAAC;QAEF,yBAAyB;QACzB,OAAO;YACL,MAAM;YACN,KAAK;SACN,CAAC;IACJ,CAAC;IAED,2BAA2B,CAAC,MAA2B;QACrD,oEAAoE;QACpE,8BAA8B;QAC9B,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAwC,CAAC;QAEjE,OAAO,mCAAmC,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACpE,CAAC;IAED,0BAA0B,CAAC,KAAyB;QAClD,kEAAkE;QAClE,OAAO,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC;IACtD,CAAC;CACF;AAxCD,kCAwCC","sourcesContent":["import {\n AccountWalletCategory,\n toAccountGroupId,\n toAccountWalletId,\n} from '@metamask/account-api';\nimport { KeyringTypes } from '@metamask/keyring-controller';\nimport type { InternalAccount } from '@metamask/keyring-internal-api';\nimport type {\n AccountGroupObject,\n AccountWalletKeyringMetadata,\n} from 'src/types';\n\nimport type { AccountWalletObject } from '..';\nimport type { AccountTreeRuleResult } from '../AccountTreeRule';\nimport { AccountTreeRule } from '../AccountTreeRule';\n\n/**\n * Get wallet name from a keyring type.\n *\n * @param type - Keyring's type.\n * @returns Wallet name.\n */\nexport function getAccountWalletNameFromKeyringType(type: KeyringTypes) {\n switch (type) {\n case KeyringTypes.simple: {\n return 'Imported accounts';\n }\n case KeyringTypes.trezor: {\n return 'Trezor';\n }\n case KeyringTypes.oneKey: {\n return 'OneKey';\n }\n case KeyringTypes.ledger: {\n return 'Ledger';\n }\n case KeyringTypes.lattice: {\n return 'Lattice';\n }\n case KeyringTypes.qr: {\n return 'QR';\n }\n // Those keyrings should never really be used in such context since they\n // should be used by other grouping rules.\n case KeyringTypes.hd: {\n return 'HD Wallet';\n }\n case KeyringTypes.snap: {\n return 'Snap Wallet';\n }\n // ------------------------------------------------------------------------\n default: {\n return 'Unknown';\n }\n }\n}\n\nexport class KeyringRule extends AccountTreeRule {\n readonly category = AccountWalletCategory.Keyring;\n\n match(account: InternalAccount): AccountTreeRuleResult | undefined {\n // We assume that `type` is really a `KeyringTypes`.\n const type = account.metadata.keyring.type as KeyringTypes;\n\n const wallet: AccountTreeRuleResult['wallet'] = {\n id: toAccountWalletId(this.category, type),\n metadata: {\n type: AccountWalletCategory.Keyring,\n keyring: {\n type,\n },\n },\n };\n\n const group: AccountTreeRuleResult['group'] = {\n id: toAccountGroupId(wallet.id, account.address),\n };\n\n // This rule cannot fail.\n return {\n wallet,\n group,\n };\n }\n\n getDefaultAccountWalletName(wallet: AccountWalletObject): string {\n // Precondition: We assume the AccountTreeController will always use\n // the proper wallet instance.\n const metadata = wallet.metadata as AccountWalletKeyringMetadata;\n\n return getAccountWalletNameFromKeyringType(metadata.keyring.type);\n }\n\n getDefaultAccountGroupName(group: AccountGroupObject): string {\n // Precondition: This account group should contain only 1 account.\n return this.getOnlyAccountFrom(group).metadata.name;\n }\n}\n"]}
@@ -0,0 +1,21 @@
1
+ import { AccountWalletCategory } from "@metamask/account-api";
2
+ import { KeyringTypes } from "@metamask/keyring-controller";
3
+ import type { InternalAccount } from "@metamask/keyring-internal-api";
4
+ import type { AccountGroupObject } from "src/types";
5
+ import type { AccountWalletObject } from "../index.cjs";
6
+ import type { AccountTreeRuleResult } from "../AccountTreeRule.cjs";
7
+ import { AccountTreeRule } from "../AccountTreeRule.cjs";
8
+ /**
9
+ * Get wallet name from a keyring type.
10
+ *
11
+ * @param type - Keyring's type.
12
+ * @returns Wallet name.
13
+ */
14
+ export declare function getAccountWalletNameFromKeyringType(type: KeyringTypes): "Imported accounts" | "Trezor" | "OneKey" | "Ledger" | "Lattice" | "QR" | "HD Wallet" | "Snap Wallet" | "Unknown";
15
+ export declare class KeyringRule extends AccountTreeRule {
16
+ readonly category = AccountWalletCategory.Keyring;
17
+ match(account: InternalAccount): AccountTreeRuleResult | undefined;
18
+ getDefaultAccountWalletName(wallet: AccountWalletObject): string;
19
+ getDefaultAccountGroupName(group: AccountGroupObject): string;
20
+ }
21
+ //# sourceMappingURL=keyring.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keyring.d.cts","sourceRoot":"","sources":["../../src/rules/keyring.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,EAGtB,8BAA8B;AAC/B,OAAO,EAAE,YAAY,EAAE,qCAAqC;AAC5D,OAAO,KAAK,EAAE,eAAe,EAAE,uCAAuC;AACtE,OAAO,KAAK,EACV,kBAAkB,EAEnB,kBAAkB;AAEnB,OAAO,KAAK,EAAE,mBAAmB,EAAE,qBAAW;AAC9C,OAAO,KAAK,EAAE,qBAAqB,EAAE,+BAA2B;AAChE,OAAO,EAAE,eAAe,EAAE,+BAA2B;AAErD;;;;;GAKG;AACH,wBAAgB,mCAAmC,CAAC,IAAI,EAAE,YAAY,qHAiCrE;AAED,qBAAa,WAAY,SAAQ,eAAe;IAC9C,QAAQ,CAAC,QAAQ,iCAAiC;IAElD,KAAK,CAAC,OAAO,EAAE,eAAe,GAAG,qBAAqB,GAAG,SAAS;IAyBlE,2BAA2B,CAAC,MAAM,EAAE,mBAAmB,GAAG,MAAM;IAQhE,0BAA0B,CAAC,KAAK,EAAE,kBAAkB,GAAG,MAAM;CAI9D"}
@@ -0,0 +1,21 @@
1
+ import { AccountWalletCategory } from "@metamask/account-api";
2
+ import { KeyringTypes } from "@metamask/keyring-controller";
3
+ import type { InternalAccount } from "@metamask/keyring-internal-api";
4
+ import type { AccountGroupObject } from "src/types";
5
+ import type { AccountWalletObject } from "../index.mjs";
6
+ import type { AccountTreeRuleResult } from "../AccountTreeRule.mjs";
7
+ import { AccountTreeRule } from "../AccountTreeRule.mjs";
8
+ /**
9
+ * Get wallet name from a keyring type.
10
+ *
11
+ * @param type - Keyring's type.
12
+ * @returns Wallet name.
13
+ */
14
+ export declare function getAccountWalletNameFromKeyringType(type: KeyringTypes): "Imported accounts" | "Trezor" | "OneKey" | "Ledger" | "Lattice" | "QR" | "HD Wallet" | "Snap Wallet" | "Unknown";
15
+ export declare class KeyringRule extends AccountTreeRule {
16
+ readonly category = AccountWalletCategory.Keyring;
17
+ match(account: InternalAccount): AccountTreeRuleResult | undefined;
18
+ getDefaultAccountWalletName(wallet: AccountWalletObject): string;
19
+ getDefaultAccountGroupName(group: AccountGroupObject): string;
20
+ }
21
+ //# sourceMappingURL=keyring.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keyring.d.mts","sourceRoot":"","sources":["../../src/rules/keyring.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,EAGtB,8BAA8B;AAC/B,OAAO,EAAE,YAAY,EAAE,qCAAqC;AAC5D,OAAO,KAAK,EAAE,eAAe,EAAE,uCAAuC;AACtE,OAAO,KAAK,EACV,kBAAkB,EAEnB,kBAAkB;AAEnB,OAAO,KAAK,EAAE,mBAAmB,EAAE,qBAAW;AAC9C,OAAO,KAAK,EAAE,qBAAqB,EAAE,+BAA2B;AAChE,OAAO,EAAE,eAAe,EAAE,+BAA2B;AAErD;;;;;GAKG;AACH,wBAAgB,mCAAmC,CAAC,IAAI,EAAE,YAAY,qHAiCrE;AAED,qBAAa,WAAY,SAAQ,eAAe;IAC9C,QAAQ,CAAC,QAAQ,iCAAiC;IAElD,KAAK,CAAC,OAAO,EAAE,eAAe,GAAG,qBAAqB,GAAG,SAAS;IAyBlE,2BAA2B,CAAC,MAAM,EAAE,mBAAmB,GAAG,MAAM;IAQhE,0BAA0B,CAAC,KAAK,EAAE,kBAAkB,GAAG,MAAM;CAI9D"}
@@ -0,0 +1,81 @@
1
+ import { AccountWalletCategory, toAccountGroupId, toAccountWalletId } from "@metamask/account-api";
2
+ import { KeyringTypes } from "@metamask/keyring-controller";
3
+ import { AccountTreeRule } from "../AccountTreeRule.mjs";
4
+ /**
5
+ * Get wallet name from a keyring type.
6
+ *
7
+ * @param type - Keyring's type.
8
+ * @returns Wallet name.
9
+ */
10
+ export function getAccountWalletNameFromKeyringType(type) {
11
+ switch (type) {
12
+ case KeyringTypes.simple: {
13
+ return 'Imported accounts';
14
+ }
15
+ case KeyringTypes.trezor: {
16
+ return 'Trezor';
17
+ }
18
+ case KeyringTypes.oneKey: {
19
+ return 'OneKey';
20
+ }
21
+ case KeyringTypes.ledger: {
22
+ return 'Ledger';
23
+ }
24
+ case KeyringTypes.lattice: {
25
+ return 'Lattice';
26
+ }
27
+ case KeyringTypes.qr: {
28
+ return 'QR';
29
+ }
30
+ // Those keyrings should never really be used in such context since they
31
+ // should be used by other grouping rules.
32
+ case KeyringTypes.hd: {
33
+ return 'HD Wallet';
34
+ }
35
+ case KeyringTypes.snap: {
36
+ return 'Snap Wallet';
37
+ }
38
+ // ------------------------------------------------------------------------
39
+ default: {
40
+ return 'Unknown';
41
+ }
42
+ }
43
+ }
44
+ export class KeyringRule extends AccountTreeRule {
45
+ constructor() {
46
+ super(...arguments);
47
+ this.category = AccountWalletCategory.Keyring;
48
+ }
49
+ match(account) {
50
+ // We assume that `type` is really a `KeyringTypes`.
51
+ const type = account.metadata.keyring.type;
52
+ const wallet = {
53
+ id: toAccountWalletId(this.category, type),
54
+ metadata: {
55
+ type: AccountWalletCategory.Keyring,
56
+ keyring: {
57
+ type,
58
+ },
59
+ },
60
+ };
61
+ const group = {
62
+ id: toAccountGroupId(wallet.id, account.address),
63
+ };
64
+ // This rule cannot fail.
65
+ return {
66
+ wallet,
67
+ group,
68
+ };
69
+ }
70
+ getDefaultAccountWalletName(wallet) {
71
+ // Precondition: We assume the AccountTreeController will always use
72
+ // the proper wallet instance.
73
+ const metadata = wallet.metadata;
74
+ return getAccountWalletNameFromKeyringType(metadata.keyring.type);
75
+ }
76
+ getDefaultAccountGroupName(group) {
77
+ // Precondition: This account group should contain only 1 account.
78
+ return this.getOnlyAccountFrom(group).metadata.name;
79
+ }
80
+ }
81
+ //# sourceMappingURL=keyring.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keyring.mjs","sourceRoot":"","sources":["../../src/rules/keyring.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,EACrB,gBAAgB,EAChB,iBAAiB,EAClB,8BAA8B;AAC/B,OAAO,EAAE,YAAY,EAAE,qCAAqC;AAS5D,OAAO,EAAE,eAAe,EAAE,+BAA2B;AAErD;;;;;GAKG;AACH,MAAM,UAAU,mCAAmC,CAAC,IAAkB;IACpE,QAAQ,IAAI,EAAE;QACZ,KAAK,YAAY,CAAC,MAAM,CAAC,CAAC;YACxB,OAAO,mBAAmB,CAAC;SAC5B;QACD,KAAK,YAAY,CAAC,MAAM,CAAC,CAAC;YACxB,OAAO,QAAQ,CAAC;SACjB;QACD,KAAK,YAAY,CAAC,MAAM,CAAC,CAAC;YACxB,OAAO,QAAQ,CAAC;SACjB;QACD,KAAK,YAAY,CAAC,MAAM,CAAC,CAAC;YACxB,OAAO,QAAQ,CAAC;SACjB;QACD,KAAK,YAAY,CAAC,OAAO,CAAC,CAAC;YACzB,OAAO,SAAS,CAAC;SAClB;QACD,KAAK,YAAY,CAAC,EAAE,CAAC,CAAC;YACpB,OAAO,IAAI,CAAC;SACb;QACD,wEAAwE;QACxE,0CAA0C;QAC1C,KAAK,YAAY,CAAC,EAAE,CAAC,CAAC;YACpB,OAAO,WAAW,CAAC;SACpB;QACD,KAAK,YAAY,CAAC,IAAI,CAAC,CAAC;YACtB,OAAO,aAAa,CAAC;SACtB;QACD,2EAA2E;QAC3E,OAAO,CAAC,CAAC;YACP,OAAO,SAAS,CAAC;SAClB;KACF;AACH,CAAC;AAED,MAAM,OAAO,WAAY,SAAQ,eAAe;IAAhD;;QACW,aAAQ,GAAG,qBAAqB,CAAC,OAAO,CAAC;IAuCpD,CAAC;IArCC,KAAK,CAAC,OAAwB;QAC5B,oDAAoD;QACpD,MAAM,IAAI,GAAG,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAoB,CAAC;QAE3D,MAAM,MAAM,GAAoC;YAC9C,EAAE,EAAE,iBAAiB,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC;YAC1C,QAAQ,EAAE;gBACR,IAAI,EAAE,qBAAqB,CAAC,OAAO;gBACnC,OAAO,EAAE;oBACP,IAAI;iBACL;aACF;SACF,CAAC;QAEF,MAAM,KAAK,GAAmC;YAC5C,EAAE,EAAE,gBAAgB,CAAC,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC,OAAO,CAAC;SACjD,CAAC;QAEF,yBAAyB;QACzB,OAAO;YACL,MAAM;YACN,KAAK;SACN,CAAC;IACJ,CAAC;IAED,2BAA2B,CAAC,MAA2B;QACrD,oEAAoE;QACpE,8BAA8B;QAC9B,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAwC,CAAC;QAEjE,OAAO,mCAAmC,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACpE,CAAC;IAED,0BAA0B,CAAC,KAAyB;QAClD,kEAAkE;QAClE,OAAO,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC;IACtD,CAAC;CACF","sourcesContent":["import {\n AccountWalletCategory,\n toAccountGroupId,\n toAccountWalletId,\n} from '@metamask/account-api';\nimport { KeyringTypes } from '@metamask/keyring-controller';\nimport type { InternalAccount } from '@metamask/keyring-internal-api';\nimport type {\n AccountGroupObject,\n AccountWalletKeyringMetadata,\n} from 'src/types';\n\nimport type { AccountWalletObject } from '..';\nimport type { AccountTreeRuleResult } from '../AccountTreeRule';\nimport { AccountTreeRule } from '../AccountTreeRule';\n\n/**\n * Get wallet name from a keyring type.\n *\n * @param type - Keyring's type.\n * @returns Wallet name.\n */\nexport function getAccountWalletNameFromKeyringType(type: KeyringTypes) {\n switch (type) {\n case KeyringTypes.simple: {\n return 'Imported accounts';\n }\n case KeyringTypes.trezor: {\n return 'Trezor';\n }\n case KeyringTypes.oneKey: {\n return 'OneKey';\n }\n case KeyringTypes.ledger: {\n return 'Ledger';\n }\n case KeyringTypes.lattice: {\n return 'Lattice';\n }\n case KeyringTypes.qr: {\n return 'QR';\n }\n // Those keyrings should never really be used in such context since they\n // should be used by other grouping rules.\n case KeyringTypes.hd: {\n return 'HD Wallet';\n }\n case KeyringTypes.snap: {\n return 'Snap Wallet';\n }\n // ------------------------------------------------------------------------\n default: {\n return 'Unknown';\n }\n }\n}\n\nexport class KeyringRule extends AccountTreeRule {\n readonly category = AccountWalletCategory.Keyring;\n\n match(account: InternalAccount): AccountTreeRuleResult | undefined {\n // We assume that `type` is really a `KeyringTypes`.\n const type = account.metadata.keyring.type as KeyringTypes;\n\n const wallet: AccountTreeRuleResult['wallet'] = {\n id: toAccountWalletId(this.category, type),\n metadata: {\n type: AccountWalletCategory.Keyring,\n keyring: {\n type,\n },\n },\n };\n\n const group: AccountTreeRuleResult['group'] = {\n id: toAccountGroupId(wallet.id, account.address),\n };\n\n // This rule cannot fail.\n return {\n wallet,\n group,\n };\n }\n\n getDefaultAccountWalletName(wallet: AccountWalletObject): string {\n // Precondition: We assume the AccountTreeController will always use\n // the proper wallet instance.\n const metadata = wallet.metadata as AccountWalletKeyringMetadata;\n\n return getAccountWalletNameFromKeyringType(metadata.keyring.type);\n }\n\n getDefaultAccountGroupName(group: AccountGroupObject): string {\n // Precondition: This account group should contain only 1 account.\n return this.getOnlyAccountFrom(group).metadata.name;\n }\n}\n"]}