@metamask-previews/account-tree-controller 7.5.3-preview-ea5e7f6d0 → 7.5.3-preview-34f2bcbf7

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 (92) hide show
  1. package/CHANGELOG.md +10 -1
  2. package/dist/AccountTreeController.cjs +40 -13
  3. package/dist/AccountTreeController.cjs.map +1 -1
  4. package/dist/AccountTreeController.d.cts +0 -6
  5. package/dist/AccountTreeController.d.cts.map +1 -1
  6. package/dist/AccountTreeController.d.mts +0 -6
  7. package/dist/AccountTreeController.d.mts.map +1 -1
  8. package/dist/AccountTreeController.mjs +42 -15
  9. package/dist/AccountTreeController.mjs.map +1 -1
  10. package/dist/backup-and-sync/service/index.cjs +25 -5
  11. package/dist/backup-and-sync/service/index.cjs.map +1 -1
  12. package/dist/backup-and-sync/service/index.d.cts.map +1 -1
  13. package/dist/backup-and-sync/service/index.d.mts.map +1 -1
  14. package/dist/backup-and-sync/service/index.mjs +25 -5
  15. package/dist/backup-and-sync/service/index.mjs.map +1 -1
  16. package/dist/backup-and-sync/syncing/group.cjs +1 -0
  17. package/dist/backup-and-sync/syncing/group.cjs.map +1 -1
  18. package/dist/backup-and-sync/syncing/group.d.cts.map +1 -1
  19. package/dist/backup-and-sync/syncing/group.d.mts.map +1 -1
  20. package/dist/backup-and-sync/syncing/group.mjs +1 -0
  21. package/dist/backup-and-sync/syncing/group.mjs.map +1 -1
  22. package/dist/backup-and-sync/syncing/legacy.cjs +1 -0
  23. package/dist/backup-and-sync/syncing/legacy.cjs.map +1 -1
  24. package/dist/backup-and-sync/syncing/legacy.d.cts.map +1 -1
  25. package/dist/backup-and-sync/syncing/legacy.d.mts.map +1 -1
  26. package/dist/backup-and-sync/syncing/legacy.mjs +1 -0
  27. package/dist/backup-and-sync/syncing/legacy.mjs.map +1 -1
  28. package/dist/backup-and-sync/syncing/metadata.cjs +1 -0
  29. package/dist/backup-and-sync/syncing/metadata.cjs.map +1 -1
  30. package/dist/backup-and-sync/syncing/metadata.d.cts.map +1 -1
  31. package/dist/backup-and-sync/syncing/metadata.d.mts.map +1 -1
  32. package/dist/backup-and-sync/syncing/metadata.mjs +1 -0
  33. package/dist/backup-and-sync/syncing/metadata.mjs.map +1 -1
  34. package/dist/backup-and-sync/types.cjs.map +1 -1
  35. package/dist/backup-and-sync/types.d.cts +22 -0
  36. package/dist/backup-and-sync/types.d.cts.map +1 -1
  37. package/dist/backup-and-sync/types.d.mts +22 -0
  38. package/dist/backup-and-sync/types.d.mts.map +1 -1
  39. package/dist/backup-and-sync/types.mjs.map +1 -1
  40. package/dist/backup-and-sync/user-storage/network-operations.cjs +9 -3
  41. package/dist/backup-and-sync/user-storage/network-operations.cjs.map +1 -1
  42. package/dist/backup-and-sync/user-storage/network-operations.d.cts.map +1 -1
  43. package/dist/backup-and-sync/user-storage/network-operations.d.mts.map +1 -1
  44. package/dist/backup-and-sync/user-storage/network-operations.mjs +9 -3
  45. package/dist/backup-and-sync/user-storage/network-operations.mjs.map +1 -1
  46. package/dist/backup-and-sync/utils/index.cjs +3 -1
  47. package/dist/backup-and-sync/utils/index.cjs.map +1 -1
  48. package/dist/backup-and-sync/utils/index.d.cts +1 -0
  49. package/dist/backup-and-sync/utils/index.d.cts.map +1 -1
  50. package/dist/backup-and-sync/utils/index.d.mts +1 -0
  51. package/dist/backup-and-sync/utils/index.d.mts.map +1 -1
  52. package/dist/backup-and-sync/utils/index.mjs +1 -0
  53. package/dist/backup-and-sync/utils/index.mjs.map +1 -1
  54. package/dist/backup-and-sync/utils/mutation-tracker.cjs +29 -0
  55. package/dist/backup-and-sync/utils/mutation-tracker.cjs.map +1 -0
  56. package/dist/backup-and-sync/utils/mutation-tracker.d.cts +9 -0
  57. package/dist/backup-and-sync/utils/mutation-tracker.d.cts.map +1 -0
  58. package/dist/backup-and-sync/utils/mutation-tracker.d.mts +9 -0
  59. package/dist/backup-and-sync/utils/mutation-tracker.d.mts.map +1 -0
  60. package/dist/backup-and-sync/utils/mutation-tracker.mjs +25 -0
  61. package/dist/backup-and-sync/utils/mutation-tracker.mjs.map +1 -0
  62. package/dist/group.cjs +16 -1
  63. package/dist/group.cjs.map +1 -1
  64. package/dist/group.d.cts +19 -2
  65. package/dist/group.d.cts.map +1 -1
  66. package/dist/group.d.mts +19 -2
  67. package/dist/group.d.mts.map +1 -1
  68. package/dist/group.mjs +14 -0
  69. package/dist/group.mjs.map +1 -1
  70. package/dist/index.cjs +4 -1
  71. package/dist/index.cjs.map +1 -1
  72. package/dist/index.d.cts +2 -1
  73. package/dist/index.d.cts.map +1 -1
  74. package/dist/index.d.mts +2 -1
  75. package/dist/index.d.mts.map +1 -1
  76. package/dist/index.mjs +2 -1
  77. package/dist/index.mjs.map +1 -1
  78. package/dist/types.cjs.map +1 -1
  79. package/dist/types.d.cts +4 -4
  80. package/dist/types.d.cts.map +1 -1
  81. package/dist/types.d.mts +4 -4
  82. package/dist/types.d.mts.map +1 -1
  83. package/dist/types.mjs.map +1 -1
  84. package/dist/wallet.cjs +16 -0
  85. package/dist/wallet.cjs.map +1 -1
  86. package/dist/wallet.d.cts +17 -2
  87. package/dist/wallet.d.cts.map +1 -1
  88. package/dist/wallet.d.mts +17 -2
  89. package/dist/wallet.d.mts.map +1 -1
  90. package/dist/wallet.mjs +14 -1
  91. package/dist/wallet.mjs.map +1 -1
  92. package/package.json +4 -4
package/CHANGELOG.md CHANGED
@@ -7,10 +7,19 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ### Added
11
+
12
+ - **BREAKING:** Expose `status` on `AccountGroupMultichainAccountObject` ([#9104](https://github.com/MetaMask/core/pull/9104))
13
+ - The controller now requires the new event `MultichainAccountService:groupStatusChange`.
14
+ - The field reflects `MultichainAccountGroupStatus` and is kept in sync via the new `MultichainAccountService:groupStatusChange` event subscription.
15
+
10
16
  ### Changed
11
17
 
12
- - Bump `@metamask/keyring-api` from `^23.1.0` to `^23.3.0` ([#9249](https://github.com/MetaMask/core/pull/9249))
18
+ - The `Multichain Account Syncing - Full` trace is now only emitted when a backup-and-sync run actually mutates local or remote state (rolled-back local changes do not count) ([#9343](https://github.com/MetaMask/core/pull/9343))
19
+ - Bump `@metamask/keyring-api` from `^23.1.0` to `^23.5.0` ([#9249](https://github.com/MetaMask/core/pull/9249), [#9390](https://github.com/MetaMask/core/pull/9390))
13
20
  - Bump `@metamask/multichain-account-service` from `^11.0.0` to `^11.1.0` ([#9264](https://github.com/MetaMask/core/pull/9264))
21
+ - Bump `@metamask/accounts-controller` from `^39.0.3` to `^39.0.4` ([#9349](https://github.com/MetaMask/core/pull/9349))
22
+ - Bump `@metamask/messenger` from `^1.2.0` to `^2.0.0` ([#9392](https://github.com/MetaMask/core/pull/9392))
14
23
 
15
24
  ## [7.5.3]
16
25
 
@@ -10,7 +10,7 @@ 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 _AccountTreeController_instances, _AccountTreeController_accountIdToContext, _AccountTreeController_groupIdToWalletId, _AccountTreeController_backupAndSyncService, _AccountTreeController_rules, _AccountTreeController_trace, _AccountTreeController_backupAndSyncConfig, _AccountTreeController_accountOrderCallbacks, _AccountTreeController_initialized, _AccountTreeController_initTreeContext, _AccountTreeController_getEntropyRule, _AccountTreeController_getSnapRule, _AccountTreeController_getKeyringRule, _AccountTreeController_applyAccountWalletMetadata, _AccountTreeController_getRuleForWallet, _AccountTreeController_getComputedAccountGroupName, _AccountTreeController_getDefaultAccountGroupName, _AccountTreeController_applyAccountGroupMetadata, _AccountTreeController_handleAccountsAdded, _AccountTreeController_handleAccountsRemoved, _AccountTreeController_pruneEmptyGroupAndWallet, _AccountTreeController_publishAccountGroupCreated, _AccountTreeController_publishAccountGroupUpdated, _AccountTreeController_publishAccountGroupRemoved, _AccountTreeController_insert, _AccountTreeController_listAccounts, _AccountTreeController_assertAccountGroupExists, _AccountTreeController_assertAccountWalletExists, _AccountTreeController_assertAccountGroupNameIsUnique, _AccountTreeController_setSelectedAccountGroup, _AccountTreeController_getDefaultSelectedAccountGroup, _AccountTreeController_handleSelectedAccountChange, _AccountTreeController_handleMultichainAccountWalletStatusChange, _AccountTreeController_getAccountGroup, _AccountTreeController_getDefaultAccountFromAccountGroupId, _AccountTreeController_getDefaultAccountGroupId, _AccountTreeController_hasEvmAccount, _AccountTreeController_resolveNameConflict, _AccountTreeController_createBackupAndSyncContext;
13
+ var _AccountTreeController_instances, _AccountTreeController_accountIdToContext, _AccountTreeController_groupIdToWalletId, _AccountTreeController_backupAndSyncService, _AccountTreeController_rules, _AccountTreeController_trace, _AccountTreeController_backupAndSyncConfig, _AccountTreeController_accountOrderCallbacks, _AccountTreeController_initialized, _AccountTreeController_initTreeContext, _AccountTreeController_getEntropyRule, _AccountTreeController_getSnapRule, _AccountTreeController_getKeyringRule, _AccountTreeController_applyAccountWalletMetadata, _AccountTreeController_getRuleForWallet, _AccountTreeController_getComputedAccountGroupName, _AccountTreeController_getDefaultAccountGroupName, _AccountTreeController_applyAccountGroupMetadata, _AccountTreeController_handleAccountsAdded, _AccountTreeController_handleAccountsRemoved, _AccountTreeController_pruneEmptyGroupAndWallet, _AccountTreeController_publishAccountGroupCreated, _AccountTreeController_publishAccountGroupUpdated, _AccountTreeController_publishAccountGroupRemoved, _AccountTreeController_insert, _AccountTreeController_listAccounts, _AccountTreeController_assertAccountGroupExists, _AccountTreeController_assertAccountWalletExists, _AccountTreeController_assertAccountGroupNameIsUnique, _AccountTreeController_setSelectedAccountGroup, _AccountTreeController_getDefaultSelectedAccountGroup, _AccountTreeController_handleSelectedAccountChange, _AccountTreeController_handleMultichainAccountWalletStatusChange, _AccountTreeController_handleMultichainAccountGroupStatusChange, _AccountTreeController_getMultichainAccountWalletStatus, _AccountTreeController_getMultichainAccountGroupStatus, _AccountTreeController_getAccountGroup, _AccountTreeController_getDefaultAccountFromAccountGroupId, _AccountTreeController_getDefaultAccountGroupId, _AccountTreeController_hasEvmAccount, _AccountTreeController_resolveNameConflict, _AccountTreeController_createBackupAndSyncContext;
14
14
  Object.defineProperty(exports, "__esModule", { value: true });
15
15
  exports.AccountTreeController = exports.getDefaultAccountTreeControllerState = exports.controllerName = void 0;
16
16
  const account_api_1 = require("@metamask/account-api");
@@ -19,11 +19,13 @@ const keyring_api_1 = require("@metamask/keyring-api");
19
19
  const utils_1 = require("@metamask/utils");
20
20
  const analytics_1 = require("./backup-and-sync/analytics/index.cjs");
21
21
  const service_1 = require("./backup-and-sync/service/index.cjs");
22
+ const utils_2 = require("./backup-and-sync/utils/index.cjs");
22
23
  const group_1 = require("./group.cjs");
23
24
  const logger_1 = require("./logger.cjs");
24
25
  const entropy_1 = require("./rules/entropy.cjs");
25
26
  const keyring_1 = require("./rules/keyring.cjs");
26
27
  const snap_1 = require("./rules/snap.cjs");
28
+ const wallet_1 = require("./wallet.cjs");
27
29
  exports.controllerName = 'AccountTreeController';
28
30
  const MESSENGER_EXPOSED_METHODS = [
29
31
  'getSelectedAccountGroup',
@@ -180,6 +182,9 @@ class AccountTreeController extends base_controller_1.BaseController {
180
182
  this.messenger.subscribe('MultichainAccountService:walletStatusChange', (walletId, status) => {
181
183
  __classPrivateFieldGet(this, _AccountTreeController_instances, "m", _AccountTreeController_handleMultichainAccountWalletStatusChange).call(this, walletId, status);
182
184
  });
185
+ this.messenger.subscribe('MultichainAccountService:groupStatusChange', (groupId, status) => {
186
+ __classPrivateFieldGet(this, _AccountTreeController_instances, "m", _AccountTreeController_handleMultichainAccountGroupStatusChange).call(this, groupId, status);
187
+ });
183
188
  this.messenger.registerMethodActionHandlers(this, MESSENGER_EXPOSED_METHODS);
184
189
  }
185
190
  /**
@@ -919,7 +924,9 @@ _AccountTreeController_accountIdToContext = new WeakMap(), _AccountTreeControlle
919
924
  (0, logger_1.projectLogger)(`[${walletId}] Added as new wallet`);
920
925
  wallets[walletId] = {
921
926
  ...result.wallet,
922
- status: 'ready',
927
+ status: (0, wallet_1.isMultichainAccountWallet)(result.wallet)
928
+ ? __classPrivateFieldGet(this, _AccountTreeController_instances, "m", _AccountTreeController_getMultichainAccountWalletStatus).call(this, result.wallet.metadata.entropy.id)
929
+ : 'ready',
923
930
  groups: {},
924
931
  metadata: {
925
932
  name: '', // Will get updated later.
@@ -930,7 +937,7 @@ _AccountTreeController_accountIdToContext = new WeakMap(), _AccountTreeControlle
930
937
  };
931
938
  wallet = wallets[walletId];
932
939
  // Trigger atomic sync for new wallet (only for entropy wallets)
933
- if (wallet.type === account_api_1.AccountWalletType.Entropy) {
940
+ if ((0, wallet_1.isMultichainAccountWallet)(wallet)) {
934
941
  __classPrivateFieldGet(this, _AccountTreeController_backupAndSyncService, "f").enqueueSingleWalletSync(walletId);
935
942
  }
936
943
  }
@@ -945,6 +952,10 @@ _AccountTreeController_accountIdToContext = new WeakMap(), _AccountTreeControlle
945
952
  ...result.group,
946
953
  // Type-wise, we are guaranteed to always have at least 1 account.
947
954
  accounts: [id],
955
+ ...((0, group_1.isMultichainAccountGroup)(result.group) &&
956
+ (0, wallet_1.isMultichainAccountWallet)(result.wallet) && {
957
+ status: __classPrivateFieldGet(this, _AccountTreeController_instances, "m", _AccountTreeController_getMultichainAccountGroupStatus).call(this, result.wallet.metadata.entropy.id, result.group.metadata.entropy.groupIndex),
958
+ }),
948
959
  metadata: {
949
960
  name: '',
950
961
  ...{ pinned: false, hidden: false, lastSelected: 0 }, // Default UI states
@@ -957,7 +968,7 @@ _AccountTreeController_accountIdToContext = new WeakMap(), _AccountTreeControlle
957
968
  // Map group ID to its containing wallet ID for efficient direct access
958
969
  __classPrivateFieldGet(this, _AccountTreeController_groupIdToWalletId, "f").set(groupId, walletId);
959
970
  // Trigger atomic sync for new group (only for entropy wallets)
960
- if (wallet.type === account_api_1.AccountWalletType.Entropy) {
971
+ if ((0, wallet_1.isMultichainAccountWallet)(wallet)) {
961
972
  __classPrivateFieldGet(this, _AccountTreeController_backupAndSyncService, "f").enqueueSingleGroupSync(groupId);
962
973
  }
963
974
  }
@@ -1014,9 +1025,6 @@ _AccountTreeController_accountIdToContext = new WeakMap(), _AccountTreeControlle
1014
1025
  if (!accountToSelect) {
1015
1026
  throw new Error('No accounts found in group');
1016
1027
  }
1017
- const gutoSetGroupStart = Date.now();
1018
- console.log('[GUTO PERFORMANCE LOG] AccountTreeController.#setSelectedAccountGroup START');
1019
- const gutoUpdateStart = Date.now();
1020
1028
  this.update((state) => {
1021
1029
  // Update our selected account group first.
1022
1030
  state.selectedAccountGroup = groupId;
@@ -1033,20 +1041,14 @@ _AccountTreeController_accountIdToContext = new WeakMap(), _AccountTreeControlle
1033
1041
  state.accountTree.wallets[walletId].groups[groupId].metadata.lastSelected = now;
1034
1042
  }
1035
1043
  });
1036
- console.log(`[GUTO PERFORMANCE LOG] AccountTreeController state.update (sync) took ${Date.now() - gutoUpdateStart}ms`);
1037
1044
  (0, logger_1.projectLogger)(`Selected group is now: [${this.state.selectedAccountGroup}]`);
1038
- const gutoPublishStart = Date.now();
1039
1045
  this.messenger.publish(`${exports.controllerName}:selectedAccountGroupChange`, groupId, previousSelectedAccountGroup);
1040
- console.log(`[GUTO PERFORMANCE LOG] AccountTreeController publish selectedAccountGroupChange (sync subscriber fan-out) took ${Date.now() - gutoPublishStart}ms`);
1041
1046
  if (forwardSelectedAccount) {
1042
1047
  // Update AccountsController - this will trigger selectedAccountChange event,
1043
1048
  // but our handler is idempotent so it won't cause infinite loop
1044
- const gutoSetAccountStart = Date.now();
1045
1049
  this.messenger.call('AccountsController:setSelectedAccount', accountToSelect);
1046
- console.log(`[GUTO PERFORMANCE LOG] AccountTreeController AccountsController:setSelectedAccount (sync selectedAccountChange fan-out) took ${Date.now() - gutoSetAccountStart}ms`);
1047
1050
  (0, logger_1.projectLogger)(`Selected account is now: ${accountToSelect}`);
1048
1051
  }
1049
- console.log(`[GUTO PERFORMANCE LOG] AccountTreeController.#setSelectedAccountGroup END (total, sync) took ${Date.now() - gutoSetGroupStart}ms`);
1050
1052
  }, _AccountTreeController_getDefaultSelectedAccountGroup = function _AccountTreeController_getDefaultSelectedAccountGroup(wallets) {
1051
1053
  const selectedAccount = this.messenger.call('AccountsController:getSelectedMultichainAccount');
1052
1054
  if (selectedAccount?.id) {
@@ -1075,6 +1077,30 @@ _AccountTreeController_accountIdToContext = new WeakMap(), _AccountTreeControlle
1075
1077
  wallet.status = walletStatus;
1076
1078
  }
1077
1079
  });
1080
+ }, _AccountTreeController_handleMultichainAccountGroupStatusChange = function _AccountTreeController_handleMultichainAccountGroupStatusChange(groupId, groupStatus) {
1081
+ this.update((state) => {
1082
+ const walletId = __classPrivateFieldGet(this, _AccountTreeController_groupIdToWalletId, "f").get(groupId);
1083
+ if (walletId) {
1084
+ const group = state.accountTree.wallets[walletId]?.groups[groupId];
1085
+ if (group && (0, group_1.isMultichainAccountGroup)(group)) {
1086
+ group.status = groupStatus;
1087
+ }
1088
+ }
1089
+ });
1090
+ }, _AccountTreeController_getMultichainAccountWalletStatus = function _AccountTreeController_getMultichainAccountWalletStatus(entropySource) {
1091
+ try {
1092
+ return this.messenger.call('MultichainAccountService:getMultichainAccountWallet', { entropySource }).status;
1093
+ }
1094
+ catch {
1095
+ return 'uninitialized';
1096
+ }
1097
+ }, _AccountTreeController_getMultichainAccountGroupStatus = function _AccountTreeController_getMultichainAccountGroupStatus(entropySource, groupIndex) {
1098
+ try {
1099
+ return this.messenger.call('MultichainAccountService:getMultichainAccountGroup', { entropySource, groupIndex }).status;
1100
+ }
1101
+ catch {
1102
+ return 'uninitialized';
1103
+ }
1078
1104
  }, _AccountTreeController_getAccountGroup = function _AccountTreeController_getAccountGroup(groupId) {
1079
1105
  const found = Object.values(this.state.accountTree.wallets).find((wallet) => wallet.groups[groupId] !== undefined);
1080
1106
  return found?.groups[groupId];
@@ -1143,6 +1169,7 @@ _AccountTreeController_accountIdToContext = new WeakMap(), _AccountTreeControlle
1143
1169
  controllerStateUpdateFn: this.update.bind(this),
1144
1170
  traceFn: __classPrivateFieldGet(this, _AccountTreeController_trace, "f").bind(this),
1145
1171
  groupIdToWalletId: __classPrivateFieldGet(this, _AccountTreeController_groupIdToWalletId, "f"),
1172
+ mutationTracker: (0, utils_2.createSyncMutationTracker)(),
1146
1173
  };
1147
1174
  };
1148
1175
  //# sourceMappingURL=AccountTreeController.cjs.map