{"version":3,"file":"keyring.mjs","sourceRoot":"","sources":["../../src/rules/keyring.ts"],"names":[],"mappings":"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","sourcesContent":["import { AccountGroupType } from '@metamask/account-api';\nimport { AccountWalletType } from '@metamask/account-api';\nimport { toAccountGroupId, toAccountWalletId } from '@metamask/account-api';\nimport { KeyringType } from '@metamask/keyring-api/v2';\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\n/**\n * Get wallet name from a keyring type.\n *\n * @param type - Keyring's type.\n * @returns Wallet name.\n */\nexport function getAccountWalletNameFromKeyringType(\n  type: KeyringTypes | KeyringType,\n): string {\n  switch (type) {\n    case KeyringType.PrivateKey:\n    case KeyringTypes.simple: {\n      return 'Imported accounts';\n    }\n    case KeyringType.Trezor:\n    case KeyringTypes.trezor: {\n      return 'Trezor';\n    }\n    case KeyringType.OneKey:\n    case KeyringTypes.oneKey: {\n      return 'OneKey';\n    }\n    case KeyringType.Ledger:\n    case KeyringTypes.ledger: {\n      return 'Ledger';\n    }\n    case KeyringType.Lattice:\n    case KeyringTypes.lattice: {\n      return 'Lattice';\n    }\n    case KeyringType.Qr:\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 KeyringType.Hd:\n    case KeyringTypes.hd: {\n      return 'HD Wallet';\n    }\n    case KeyringType.Snap:\n    case KeyringTypes.snap: {\n      return 'Snap Wallet';\n    }\n    // ------------------------------------------------------------------------\n    default: {\n      return 'Unknown';\n    }\n  }\n}\n\n/**\n * Get group name prefix from a keyring type.\n *\n * @param type - Keyring's type.\n * @returns Wallet name.\n */\nexport function getAccountGroupPrefixFromKeyringType(\n  type: KeyringTypes | KeyringType,\n): string {\n  switch (type) {\n    case KeyringType.PrivateKey:\n    case KeyringTypes.simple: {\n      return 'Imported Account';\n    }\n    case KeyringType.Trezor:\n    case KeyringTypes.trezor: {\n      return 'Trezor Account';\n    }\n    case KeyringType.OneKey:\n    case KeyringTypes.oneKey: {\n      return 'OneKey Account';\n    }\n    case KeyringType.Ledger:\n    case KeyringTypes.ledger: {\n      return 'Ledger Account';\n    }\n    case KeyringType.Lattice:\n    case KeyringTypes.lattice: {\n      return 'Lattice Account';\n    }\n    case KeyringType.Qr:\n    case KeyringTypes.qr: {\n      return 'QR Account';\n    }\n    // Those keyrings should never really be used in such context since they\n    // should be used by other grouping rules.\n    case KeyringType.Hd:\n    case KeyringTypes.hd: {\n      return 'Account';\n    }\n    case KeyringType.Snap:\n    case KeyringTypes.snap: {\n      return 'Snap Account';\n    }\n    // ------------------------------------------------------------------------\n    default: {\n      return 'Unknown Account';\n    }\n  }\n}\n\nexport class KeyringRule\n  extends BaseRule\n  implements Rule<AccountWalletType.Keyring, AccountGroupType.SingleAccount>\n{\n  readonly walletType = AccountWalletType.Keyring;\n\n  readonly groupType = AccountGroupType.SingleAccount;\n\n  match(\n    account: InternalAccount,\n    // No `| undefined` return type for this rule, as it cannot fail.\n  ): RuleResult<AccountWalletType.Keyring, AccountGroupType.SingleAccount> {\n    // We assume that `type` is really a `KeyringTypes`.\n    const keyringType = account.metadata.keyring.type as KeyringTypes;\n\n    const walletId = toAccountWalletId(this.walletType, keyringType);\n    const groupId = toAccountGroupId(walletId, account.address);\n\n    return {\n      wallet: {\n        type: this.walletType,\n        id: walletId,\n        metadata: {\n          keyring: {\n            type: keyringType,\n          },\n        },\n      },\n\n      group: {\n        type: this.groupType,\n        id: groupId,\n        metadata: {\n          pinned: false,\n          hidden: false,\n          lastSelected: 0,\n        },\n      },\n    };\n  }\n\n  getDefaultAccountWalletName(\n    wallet: AccountWalletObjectOf<AccountWalletType.Keyring>,\n  ): string {\n    return getAccountWalletNameFromKeyringType(wallet.metadata.keyring.type);\n  }\n\n  getComputedAccountGroupName(\n    group: AccountGroupObjectOf<AccountGroupType.SingleAccount>,\n  ): string {\n    return super.getComputedAccountGroupName(group);\n  }\n\n  getDefaultAccountGroupPrefix(\n    wallet: AccountWalletObjectOf<AccountWalletType.Keyring>,\n  ): string {\n    return getAccountGroupPrefixFromKeyringType(wallet.metadata.keyring.type);\n  }\n}\n"]}