{"version":3,"file":"entropy.cjs","sourceRoot":"","sources":["../../src/rules/entropy.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n  AccountGroupType,\n  AccountWalletType,\n  isBip44Account,\n  toMultichainAccountGroupId,\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 { AccountGroupObjectOf } from '../group';\nimport { BaseRule } from '../rule';\nimport type { Rule, RuleResult } from '../rule';\nimport type { AccountWalletObjectOf } from '../wallet';\n\nexport class EntropyRule\n  extends BaseRule\n  implements\n    Rule<AccountWalletType.Entropy, AccountGroupType.MultichainAccount>\n{\n  readonly walletType = AccountWalletType.Entropy;\n\n  readonly groupType = AccountGroupType.MultichainAccount;\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(\n    account: InternalAccount,\n  ):\n    | RuleResult<AccountWalletType.Entropy, AccountGroupType.MultichainAccount>\n    | 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(entropySource);\n    const groupId = toMultichainAccountGroupId(\n      walletId,\n      account.options.entropy.groupIndex,\n    );\n\n    return {\n      wallet: {\n        type: this.walletType,\n        id: walletId,\n        metadata: {\n          entropy: {\n            id: entropySource,\n          },\n        },\n      },\n\n      group: {\n        type: this.groupType,\n        id: groupId,\n        metadata: {\n          entropy: {\n            groupIndex: account.options.entropy.groupIndex,\n          },\n          pinned: false,\n          hidden: false,\n          lastSelected: 0,\n        },\n      },\n    };\n  }\n\n  getDefaultAccountWalletName(\n    wallet: AccountWalletObjectOf<AccountWalletType.Entropy>,\n  ): string {\n    // NOTE: We have checked during the rule matching, so we can safely assume it will\n    // well-defined here.\n    const entropySourceIndex = this.getEntropySourceIndex(\n      wallet.metadata.entropy.id,\n    );\n\n    return `Wallet ${entropySourceIndex + 1}`; // Use human indexing (starts at 1).\n  }\n\n  getComputedAccountGroupName(\n    group: AccountGroupObjectOf<AccountGroupType.MultichainAccount>,\n  ): string {\n    // Only use EVM account names for multichain groups to avoid chain-specific names becoming group names.\n    // Non-EVM account names should not be used as group names since groups represent multichain collections.\n    for (const id of group.accounts) {\n      const account = this.messenger.call('AccountsController:getAccount', id);\n\n      if (account && isEvmAccountType(account.type)) {\n        return account.metadata.name;\n      }\n    }\n\n    return '';\n  }\n\n  getDefaultAccountGroupPrefix(\n    _wallet: AccountWalletObjectOf<AccountWalletType.Entropy>,\n  ): string {\n    return 'Account';\n  }\n}\n"]}