@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
@@ -9,18 +9,20 @@ 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 _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
- import { AccountWalletType, select } from "@metamask/account-api";
12
+ 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;
13
+ import { AccountGroupType, AccountWalletType, select } from "@metamask/account-api";
14
14
  import { BaseController } from "@metamask/base-controller";
15
15
  import { isEvmAccountType } from "@metamask/keyring-api";
16
16
  import { assert } from "@metamask/utils";
17
17
  import { formatAnalyticsEvent, traceFallback } from "./backup-and-sync/analytics/index.mjs";
18
18
  import { BackupAndSyncService } from "./backup-and-sync/service/index.mjs";
19
- import { ACCOUNT_TYPE_TO_SORT_ORDER, isAccountGroupNameUnique, isAccountGroupNameUniqueFromWallet, MAX_SORT_ORDER } from "./group.mjs";
19
+ import { createSyncMutationTracker } from "./backup-and-sync/utils/index.mjs";
20
+ import { ACCOUNT_TYPE_TO_SORT_ORDER, isAccountGroupNameUnique, isAccountGroupNameUniqueFromWallet, isMultichainAccountGroup, MAX_SORT_ORDER } from "./group.mjs";
20
21
  import { projectLogger as log } from "./logger.mjs";
21
22
  import { EntropyRule } from "./rules/entropy.mjs";
22
23
  import { KeyringRule } from "./rules/keyring.mjs";
23
24
  import { SnapRule } from "./rules/snap.mjs";
25
+ import { isMultichainAccountWallet } from "./wallet.mjs";
24
26
  export const controllerName = 'AccountTreeController';
25
27
  const MESSENGER_EXPOSED_METHODS = [
26
28
  'getSelectedAccountGroup',
@@ -176,6 +178,9 @@ export class AccountTreeController extends BaseController {
176
178
  this.messenger.subscribe('MultichainAccountService:walletStatusChange', (walletId, status) => {
177
179
  __classPrivateFieldGet(this, _AccountTreeController_instances, "m", _AccountTreeController_handleMultichainAccountWalletStatusChange).call(this, walletId, status);
178
180
  });
181
+ this.messenger.subscribe('MultichainAccountService:groupStatusChange', (groupId, status) => {
182
+ __classPrivateFieldGet(this, _AccountTreeController_instances, "m", _AccountTreeController_handleMultichainAccountGroupStatusChange).call(this, groupId, status);
183
+ });
179
184
  this.messenger.registerMethodActionHandlers(this, MESSENGER_EXPOSED_METHODS);
180
185
  }
181
186
  /**
@@ -914,7 +919,9 @@ _AccountTreeController_accountIdToContext = new WeakMap(), _AccountTreeControlle
914
919
  log(`[${walletId}] Added as new wallet`);
915
920
  wallets[walletId] = {
916
921
  ...result.wallet,
917
- status: 'ready',
922
+ status: isMultichainAccountWallet(result.wallet)
923
+ ? __classPrivateFieldGet(this, _AccountTreeController_instances, "m", _AccountTreeController_getMultichainAccountWalletStatus).call(this, result.wallet.metadata.entropy.id)
924
+ : 'ready',
918
925
  groups: {},
919
926
  metadata: {
920
927
  name: '', // Will get updated later.
@@ -925,7 +932,7 @@ _AccountTreeController_accountIdToContext = new WeakMap(), _AccountTreeControlle
925
932
  };
926
933
  wallet = wallets[walletId];
927
934
  // Trigger atomic sync for new wallet (only for entropy wallets)
928
- if (wallet.type === AccountWalletType.Entropy) {
935
+ if (isMultichainAccountWallet(wallet)) {
929
936
  __classPrivateFieldGet(this, _AccountTreeController_backupAndSyncService, "f").enqueueSingleWalletSync(walletId);
930
937
  }
931
938
  }
@@ -940,6 +947,10 @@ _AccountTreeController_accountIdToContext = new WeakMap(), _AccountTreeControlle
940
947
  ...result.group,
941
948
  // Type-wise, we are guaranteed to always have at least 1 account.
942
949
  accounts: [id],
950
+ ...(isMultichainAccountGroup(result.group) &&
951
+ isMultichainAccountWallet(result.wallet) && {
952
+ status: __classPrivateFieldGet(this, _AccountTreeController_instances, "m", _AccountTreeController_getMultichainAccountGroupStatus).call(this, result.wallet.metadata.entropy.id, result.group.metadata.entropy.groupIndex),
953
+ }),
943
954
  metadata: {
944
955
  name: '',
945
956
  ...{ pinned: false, hidden: false, lastSelected: 0 }, // Default UI states
@@ -952,7 +963,7 @@ _AccountTreeController_accountIdToContext = new WeakMap(), _AccountTreeControlle
952
963
  // Map group ID to its containing wallet ID for efficient direct access
953
964
  __classPrivateFieldGet(this, _AccountTreeController_groupIdToWalletId, "f").set(groupId, walletId);
954
965
  // Trigger atomic sync for new group (only for entropy wallets)
955
- if (wallet.type === AccountWalletType.Entropy) {
966
+ if (isMultichainAccountWallet(wallet)) {
956
967
  __classPrivateFieldGet(this, _AccountTreeController_backupAndSyncService, "f").enqueueSingleGroupSync(groupId);
957
968
  }
958
969
  }
@@ -1009,9 +1020,6 @@ _AccountTreeController_accountIdToContext = new WeakMap(), _AccountTreeControlle
1009
1020
  if (!accountToSelect) {
1010
1021
  throw new Error('No accounts found in group');
1011
1022
  }
1012
- const gutoSetGroupStart = Date.now();
1013
- console.log('[GUTO PERFORMANCE LOG] AccountTreeController.#setSelectedAccountGroup START');
1014
- const gutoUpdateStart = Date.now();
1015
1023
  this.update((state) => {
1016
1024
  // Update our selected account group first.
1017
1025
  state.selectedAccountGroup = groupId;
@@ -1028,20 +1036,14 @@ _AccountTreeController_accountIdToContext = new WeakMap(), _AccountTreeControlle
1028
1036
  state.accountTree.wallets[walletId].groups[groupId].metadata.lastSelected = now;
1029
1037
  }
1030
1038
  });
1031
- console.log(`[GUTO PERFORMANCE LOG] AccountTreeController state.update (sync) took ${Date.now() - gutoUpdateStart}ms`);
1032
1039
  log(`Selected group is now: [${this.state.selectedAccountGroup}]`);
1033
- const gutoPublishStart = Date.now();
1034
1040
  this.messenger.publish(`${controllerName}:selectedAccountGroupChange`, groupId, previousSelectedAccountGroup);
1035
- console.log(`[GUTO PERFORMANCE LOG] AccountTreeController publish selectedAccountGroupChange (sync subscriber fan-out) took ${Date.now() - gutoPublishStart}ms`);
1036
1041
  if (forwardSelectedAccount) {
1037
1042
  // Update AccountsController - this will trigger selectedAccountChange event,
1038
1043
  // but our handler is idempotent so it won't cause infinite loop
1039
- const gutoSetAccountStart = Date.now();
1040
1044
  this.messenger.call('AccountsController:setSelectedAccount', accountToSelect);
1041
- console.log(`[GUTO PERFORMANCE LOG] AccountTreeController AccountsController:setSelectedAccount (sync selectedAccountChange fan-out) took ${Date.now() - gutoSetAccountStart}ms`);
1042
1045
  log(`Selected account is now: ${accountToSelect}`);
1043
1046
  }
1044
- console.log(`[GUTO PERFORMANCE LOG] AccountTreeController.#setSelectedAccountGroup END (total, sync) took ${Date.now() - gutoSetGroupStart}ms`);
1045
1047
  }, _AccountTreeController_getDefaultSelectedAccountGroup = function _AccountTreeController_getDefaultSelectedAccountGroup(wallets) {
1046
1048
  const selectedAccount = this.messenger.call('AccountsController:getSelectedMultichainAccount');
1047
1049
  if (selectedAccount?.id) {
@@ -1070,6 +1072,30 @@ _AccountTreeController_accountIdToContext = new WeakMap(), _AccountTreeControlle
1070
1072
  wallet.status = walletStatus;
1071
1073
  }
1072
1074
  });
1075
+ }, _AccountTreeController_handleMultichainAccountGroupStatusChange = function _AccountTreeController_handleMultichainAccountGroupStatusChange(groupId, groupStatus) {
1076
+ this.update((state) => {
1077
+ const walletId = __classPrivateFieldGet(this, _AccountTreeController_groupIdToWalletId, "f").get(groupId);
1078
+ if (walletId) {
1079
+ const group = state.accountTree.wallets[walletId]?.groups[groupId];
1080
+ if (group && isMultichainAccountGroup(group)) {
1081
+ group.status = groupStatus;
1082
+ }
1083
+ }
1084
+ });
1085
+ }, _AccountTreeController_getMultichainAccountWalletStatus = function _AccountTreeController_getMultichainAccountWalletStatus(entropySource) {
1086
+ try {
1087
+ return this.messenger.call('MultichainAccountService:getMultichainAccountWallet', { entropySource }).status;
1088
+ }
1089
+ catch {
1090
+ return 'uninitialized';
1091
+ }
1092
+ }, _AccountTreeController_getMultichainAccountGroupStatus = function _AccountTreeController_getMultichainAccountGroupStatus(entropySource, groupIndex) {
1093
+ try {
1094
+ return this.messenger.call('MultichainAccountService:getMultichainAccountGroup', { entropySource, groupIndex }).status;
1095
+ }
1096
+ catch {
1097
+ return 'uninitialized';
1098
+ }
1073
1099
  }, _AccountTreeController_getAccountGroup = function _AccountTreeController_getAccountGroup(groupId) {
1074
1100
  const found = Object.values(this.state.accountTree.wallets).find((wallet) => wallet.groups[groupId] !== undefined);
1075
1101
  return found?.groups[groupId];
@@ -1138,6 +1164,7 @@ _AccountTreeController_accountIdToContext = new WeakMap(), _AccountTreeControlle
1138
1164
  controllerStateUpdateFn: this.update.bind(this),
1139
1165
  traceFn: __classPrivateFieldGet(this, _AccountTreeController_trace, "f").bind(this),
1140
1166
  groupIdToWalletId: __classPrivateFieldGet(this, _AccountTreeController_groupIdToWalletId, "f"),
1167
+ mutationTracker: createSyncMutationTracker(),
1141
1168
  };
1142
1169
  };
1143
1170
  //# sourceMappingURL=AccountTreeController.mjs.map