@metamask/accounts-controller 18.1.1 → 18.2.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (59) hide show
  1. package/CHANGELOG.md +40 -1
  2. package/dist/AccountsController.cjs +608 -0
  3. package/dist/AccountsController.cjs.map +1 -0
  4. package/dist/{types/AccountsController.d.ts → AccountsController.d.cts} +13 -10
  5. package/dist/AccountsController.d.cts.map +1 -0
  6. package/dist/AccountsController.d.mts +215 -0
  7. package/dist/AccountsController.d.mts.map +1 -0
  8. package/dist/AccountsController.mjs +604 -9
  9. package/dist/AccountsController.mjs.map +1 -1
  10. package/dist/index.cjs +9 -0
  11. package/dist/index.cjs.map +1 -0
  12. package/dist/{types/index.d.ts → index.d.cts} +4 -4
  13. package/dist/index.d.cts.map +1 -0
  14. package/dist/index.d.mts +4 -0
  15. package/dist/index.d.mts.map +1 -0
  16. package/dist/index.mjs +2 -13
  17. package/dist/index.mjs.map +1 -1
  18. package/dist/tests/mocks.cjs +49 -0
  19. package/dist/tests/mocks.cjs.map +1 -0
  20. package/dist/{types/tests/mocks.d.ts → tests/mocks.d.cts} +3 -3
  21. package/dist/tests/mocks.d.cts.map +1 -0
  22. package/dist/tests/mocks.d.mts +17 -0
  23. package/dist/tests/mocks.d.mts.map +1 -0
  24. package/dist/tests/mocks.mjs +41 -60
  25. package/dist/tests/mocks.mjs.map +1 -1
  26. package/dist/utils.cjs +80 -0
  27. package/dist/utils.cjs.map +1 -0
  28. package/dist/{types/utils.d.ts → utils.d.cts} +3 -3
  29. package/dist/utils.d.cts.map +1 -0
  30. package/dist/utils.d.mts +28 -0
  31. package/dist/utils.d.mts.map +1 -0
  32. package/dist/utils.mjs +73 -13
  33. package/dist/utils.mjs.map +1 -1
  34. package/package.json +19 -14
  35. package/dist/AccountsController.js +0 -11
  36. package/dist/AccountsController.js.map +0 -1
  37. package/dist/chunk-5MTWAWAS.js +0 -753
  38. package/dist/chunk-5MTWAWAS.js.map +0 -1
  39. package/dist/chunk-BYPP7G2N.js +0 -56
  40. package/dist/chunk-BYPP7G2N.js.map +0 -1
  41. package/dist/chunk-UJIPPGP6.js +0 -19
  42. package/dist/chunk-UJIPPGP6.js.map +0 -1
  43. package/dist/chunk-Y2QVUNIA.mjs +0 -56
  44. package/dist/chunk-Y2QVUNIA.mjs.map +0 -1
  45. package/dist/chunk-ZNSHBDHA.mjs +0 -19
  46. package/dist/chunk-ZNSHBDHA.mjs.map +0 -1
  47. package/dist/chunk-ZPUB3DMH.mjs +0 -753
  48. package/dist/chunk-ZPUB3DMH.mjs.map +0 -1
  49. package/dist/index.js +0 -14
  50. package/dist/index.js.map +0 -1
  51. package/dist/tests/mocks.js +0 -65
  52. package/dist/tests/mocks.js.map +0 -1
  53. package/dist/tsconfig.build.tsbuildinfo +0 -1
  54. package/dist/types/AccountsController.d.ts.map +0 -1
  55. package/dist/types/index.d.ts.map +0 -1
  56. package/dist/types/tests/mocks.d.ts.map +0 -1
  57. package/dist/types/utils.d.ts.map +0 -1
  58. package/dist/utils.js +0 -14
  59. package/dist/utils.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
1
+ {"version":3,"file":"AccountsController.mjs","sourceRoot":"","sources":["../src/AccountsController.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n ControllerGetStateAction,\n ControllerStateChangeEvent,\n RestrictedControllerMessenger,\n} from '@metamask/base-controller';\nimport { BaseController } from '@metamask/base-controller';\nimport { SnapKeyring } from '@metamask/eth-snap-keyring';\nimport type { InternalAccount } from '@metamask/keyring-api';\nimport {\n EthAccountType,\n EthMethod,\n isEvmAccountType,\n} from '@metamask/keyring-api';\nimport { KeyringTypes } from '@metamask/keyring-controller';\nimport type {\n KeyringControllerState,\n KeyringControllerGetKeyringForAccountAction,\n KeyringControllerGetKeyringsByTypeAction,\n KeyringControllerGetAccountsAction,\n KeyringControllerStateChangeEvent,\n} from '@metamask/keyring-controller';\nimport type {\n SnapControllerState,\n SnapStateChange,\n} from '@metamask/snaps-controllers';\nimport type { SnapId } from '@metamask/snaps-sdk';\nimport type { Snap } from '@metamask/snaps-utils';\nimport type { CaipChainId } from '@metamask/utils';\nimport {\n type Keyring,\n type Json,\n isCaipChainId,\n parseCaipChainId,\n} from '@metamask/utils';\nimport type { Draft } from 'immer';\n\nimport {\n getUUIDFromAddressOfNormalAccount,\n isNormalKeyringType,\n keyringTypeToName,\n} from './utils';\n\nconst controllerName = 'AccountsController';\n\nexport type AccountId = string;\n\nexport type AccountsControllerState = {\n internalAccounts: {\n accounts: Record<AccountId, InternalAccount>;\n selectedAccount: string; // id of the selected account\n };\n};\n\nexport type AccountsControllerGetStateAction = ControllerGetStateAction<\n typeof controllerName,\n AccountsControllerState\n>;\n\nexport type AccountsControllerSetSelectedAccountAction = {\n type: `${typeof controllerName}:setSelectedAccount`;\n handler: AccountsController['setSelectedAccount'];\n};\n\nexport type AccountsControllerSetAccountNameAction = {\n type: `${typeof controllerName}:setAccountName`;\n handler: AccountsController['setAccountName'];\n};\n\nexport type AccountsControllerListAccountsAction = {\n type: `${typeof controllerName}:listAccounts`;\n handler: AccountsController['listAccounts'];\n};\n\nexport type AccountsControllerListMultichainAccountsAction = {\n type: `${typeof controllerName}:listMultichainAccounts`;\n handler: AccountsController['listMultichainAccounts'];\n};\n\nexport type AccountsControllerUpdateAccountsAction = {\n type: `${typeof controllerName}:updateAccounts`;\n handler: AccountsController['updateAccounts'];\n};\n\nexport type AccountsControllerGetSelectedAccountAction = {\n type: `${typeof controllerName}:getSelectedAccount`;\n handler: AccountsController['getSelectedAccount'];\n};\n\nexport type AccountsControllerGetSelectedMultichainAccountAction = {\n type: `${typeof controllerName}:getSelectedMultichainAccount`;\n handler: AccountsController['getSelectedMultichainAccount'];\n};\n\nexport type AccountsControllerGetAccountByAddressAction = {\n type: `${typeof controllerName}:getAccountByAddress`;\n handler: AccountsController['getAccountByAddress'];\n};\n\nexport type AccountsControllerGetNextAvailableAccountNameAction = {\n type: `${typeof controllerName}:getNextAvailableAccountName`;\n handler: AccountsController['getNextAvailableAccountName'];\n};\n\nexport type AccountsControllerGetAccountAction = {\n type: `${typeof controllerName}:getAccount`;\n handler: AccountsController['getAccount'];\n};\n\nexport type AccountsControllerUpdateAccountMetadataAction = {\n type: `${typeof controllerName}:updateAccountMetadata`;\n handler: AccountsController['updateAccountMetadata'];\n};\n\nexport type AllowedActions =\n | KeyringControllerGetKeyringForAccountAction\n | KeyringControllerGetKeyringsByTypeAction\n | KeyringControllerGetAccountsAction;\n\nexport type AccountsControllerActions =\n | AccountsControllerGetStateAction\n | AccountsControllerSetSelectedAccountAction\n | AccountsControllerListAccountsAction\n | AccountsControllerListMultichainAccountsAction\n | AccountsControllerSetAccountNameAction\n | AccountsControllerUpdateAccountsAction\n | AccountsControllerGetAccountByAddressAction\n | AccountsControllerGetSelectedAccountAction\n | AccountsControllerGetNextAvailableAccountNameAction\n | AccountsControllerGetAccountAction\n | AccountsControllerGetSelectedMultichainAccountAction\n | AccountsControllerUpdateAccountMetadataAction;\n\nexport type AccountsControllerChangeEvent = ControllerStateChangeEvent<\n typeof controllerName,\n AccountsControllerState\n>;\n\nexport type AccountsControllerSelectedAccountChangeEvent = {\n type: `${typeof controllerName}:selectedAccountChange`;\n payload: [InternalAccount];\n};\n\nexport type AccountsControllerSelectedEvmAccountChangeEvent = {\n type: `${typeof controllerName}:selectedEvmAccountChange`;\n payload: [InternalAccount];\n};\n\nexport type AccountsControllerAccountAddedEvent = {\n type: `${typeof controllerName}:accountAdded`;\n payload: [InternalAccount];\n};\n\nexport type AccountsControllerAccountRemovedEvent = {\n type: `${typeof controllerName}:accountRemoved`;\n payload: [AccountId];\n};\n\nexport type AccountsControllerAccountRenamedEvent = {\n type: `${typeof controllerName}:accountRenamed`;\n payload: [InternalAccount];\n};\n\nexport type AllowedEvents = SnapStateChange | KeyringControllerStateChangeEvent;\n\nexport type AccountsControllerEvents =\n | AccountsControllerChangeEvent\n | AccountsControllerSelectedAccountChangeEvent\n | AccountsControllerSelectedEvmAccountChangeEvent\n | AccountsControllerAccountAddedEvent\n | AccountsControllerAccountRemovedEvent\n | AccountsControllerAccountRenamedEvent;\n\nexport type AccountsControllerMessenger = RestrictedControllerMessenger<\n typeof controllerName,\n AccountsControllerActions | AllowedActions,\n AccountsControllerEvents | AllowedEvents,\n AllowedActions['type'],\n AllowedEvents['type']\n>;\n\ntype AddressAndKeyringTypeObject = {\n address: string;\n type: string;\n};\n\nconst accountsControllerMetadata = {\n internalAccounts: {\n persist: true,\n anonymous: false,\n },\n};\n\nconst defaultState: AccountsControllerState = {\n internalAccounts: {\n accounts: {},\n selectedAccount: '',\n },\n};\n\nexport const EMPTY_ACCOUNT = {\n id: '',\n address: '',\n options: {},\n methods: [],\n type: EthAccountType.Eoa,\n metadata: {\n name: '',\n keyring: {\n type: '',\n },\n importTime: 0,\n },\n};\n\n/**\n * Controller that manages internal accounts.\n * The accounts controller is responsible for creating and managing internal accounts.\n * It also provides convenience methods for accessing and updating the internal accounts.\n * The accounts controller also listens for keyring state changes and updates the internal accounts accordingly.\n * The accounts controller also listens for snap state changes and updates the internal accounts accordingly.\n *\n */\nexport class AccountsController extends BaseController<\n typeof controllerName,\n AccountsControllerState,\n AccountsControllerMessenger\n> {\n /**\n * Constructor for AccountsController.\n *\n * @param options - The controller options.\n * @param options.messenger - The messenger object.\n * @param options.state - Initial state to set on this controller\n */\n constructor({\n messenger,\n state,\n }: {\n messenger: AccountsControllerMessenger;\n state: AccountsControllerState;\n }) {\n super({\n messenger,\n name: controllerName,\n metadata: accountsControllerMetadata,\n state: {\n ...defaultState,\n ...state,\n },\n });\n\n this.messagingSystem.subscribe(\n 'SnapController:stateChange',\n (snapStateState) => this.#handleOnSnapStateChange(snapStateState),\n );\n\n this.messagingSystem.subscribe(\n 'KeyringController:stateChange',\n (keyringState) => this.#handleOnKeyringStateChange(keyringState),\n );\n\n this.#registerMessageHandlers();\n }\n\n /**\n * Returns the internal account object for the given account ID, if it exists.\n *\n * @param accountId - The ID of the account to retrieve.\n * @returns The internal account object, or undefined if the account does not exist.\n */\n getAccount(accountId: string): InternalAccount | undefined {\n return this.state.internalAccounts.accounts[accountId];\n }\n\n /**\n * Returns an array of all evm internal accounts.\n *\n * @returns An array of InternalAccount objects.\n */\n listAccounts(): InternalAccount[] {\n const accounts = Object.values(this.state.internalAccounts.accounts);\n return accounts.filter((account) => isEvmAccountType(account.type));\n }\n\n /**\n * Returns an array of all internal accounts.\n *\n * @param chainId - The chain ID.\n * @returns An array of InternalAccount objects.\n */\n listMultichainAccounts(chainId?: CaipChainId): InternalAccount[] {\n const accounts = Object.values(this.state.internalAccounts.accounts);\n if (!chainId) {\n return accounts;\n }\n\n if (!isCaipChainId(chainId)) {\n throw new Error(`Invalid CAIP-2 chain ID: ${String(chainId)}`);\n }\n\n return accounts.filter((account) =>\n this.#isAccountCompatibleWithChain(account, chainId),\n );\n }\n\n /**\n * Returns the internal account object for the given account ID.\n *\n * @param accountId - The ID of the account to retrieve.\n * @returns The internal account object.\n * @throws An error if the account ID is not found.\n */\n getAccountExpect(accountId: string): InternalAccount {\n const account = this.getAccount(accountId);\n if (account === undefined) {\n throw new Error(`Account Id \"${accountId}\" not found`);\n }\n return account;\n }\n\n /**\n * Returns the last selected EVM account.\n *\n * @returns The selected internal account.\n */\n getSelectedAccount(): InternalAccount {\n // Edge case where the extension is setup but the srp is not yet created\n // certain ui elements will query the selected address before any accounts are created.\n if (this.state.internalAccounts.selectedAccount === '') {\n return EMPTY_ACCOUNT;\n }\n\n const selectedAccount = this.getAccountExpect(\n this.state.internalAccounts.selectedAccount,\n );\n if (isEvmAccountType(selectedAccount.type)) {\n return selectedAccount;\n }\n\n const accounts = this.listAccounts();\n\n if (!accounts.length) {\n // ! Should never reach this.\n throw new Error('No EVM accounts');\n }\n\n // This will never be undefined because we have already checked if accounts.length is > 0\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n return this.#getLastSelectedAccount(accounts)!;\n }\n\n /**\n * __WARNING The return value may be undefined if there isn't an account for that chain id.__\n *\n * Retrieves the last selected account by chain ID.\n *\n * @param chainId - The chain ID to filter the accounts.\n * @returns The last selected account compatible with the specified chain ID or undefined.\n */\n getSelectedMultichainAccount(\n chainId?: CaipChainId,\n ): InternalAccount | undefined {\n // Edge case where the extension is setup but the srp is not yet created\n // certain ui elements will query the selected address before any accounts are created.\n if (this.state.internalAccounts.selectedAccount === '') {\n return EMPTY_ACCOUNT;\n }\n\n if (!chainId) {\n return this.getAccountExpect(this.state.internalAccounts.selectedAccount);\n }\n\n if (!isCaipChainId(chainId)) {\n throw new Error(`Invalid CAIP-2 chain ID: ${chainId as string}`);\n }\n\n const accounts = Object.values(this.state.internalAccounts.accounts).filter(\n (account) => this.#isAccountCompatibleWithChain(account, chainId),\n );\n\n return this.#getLastSelectedAccount(accounts);\n }\n\n /**\n * Returns the account with the specified address.\n * ! This method will only return the first account that matches the address\n * @param address - The address of the account to retrieve.\n * @returns The account with the specified address, or undefined if not found.\n */\n getAccountByAddress(address: string): InternalAccount | undefined {\n return this.listMultichainAccounts().find(\n (account) => account.address.toLowerCase() === address.toLowerCase(),\n );\n }\n\n /**\n * Sets the selected account by its ID.\n *\n * @param accountId - The ID of the account to be selected.\n */\n setSelectedAccount(accountId: string): void {\n const account = this.getAccountExpect(accountId);\n\n this.update((currentState: Draft<AccountsControllerState>) => {\n currentState.internalAccounts.accounts[account.id].metadata.lastSelected =\n Date.now();\n currentState.internalAccounts.selectedAccount = account.id;\n });\n\n this.#publishAccountChangeEvent(account);\n }\n\n /**\n * Sets the name of the account with the given ID.\n *\n * @param accountId - The ID of the account to set the name for.\n * @param accountName - The new name for the account.\n * @throws An error if an account with the same name already exists.\n */\n setAccountName(accountId: string, accountName: string): void {\n // This will check for name uniqueness and fire the `accountRenamed` event\n // if the account has been renamed.\n this.updateAccountMetadata(accountId, {\n name: accountName,\n nameLastUpdatedAt: Date.now(),\n });\n }\n\n /**\n * Updates the metadata of the account with the given ID.\n *\n * @param accountId - The ID of the account for which the metadata will be updated.\n * @param metadata - The new metadata for the account.\n */\n updateAccountMetadata(\n accountId: string,\n metadata: Partial<InternalAccount['metadata']>,\n ): void {\n const account = this.getAccountExpect(accountId);\n\n if (\n metadata.name &&\n this.listMultichainAccounts().find(\n (internalAccount) =>\n internalAccount.metadata.name === metadata.name &&\n internalAccount.id !== accountId,\n )\n ) {\n throw new Error('Account name already exists');\n }\n\n this.update((currentState: Draft<AccountsControllerState>) => {\n const internalAccount = {\n ...account,\n metadata: { ...account.metadata, ...metadata },\n };\n // Do not remove this comment - This error is flaky: Comment out or restore the `ts-expect-error` directive below as needed.\n // See: https://github.com/MetaMask/utils/issues/168\n // // @ts-expect-error Known issue - `Json` causes recursive error in immer `Draft`/`WritableDraft` types\n currentState.internalAccounts.accounts[accountId] = internalAccount;\n\n if (metadata.name) {\n this.messagingSystem.publish(\n 'AccountsController:accountRenamed',\n internalAccount,\n );\n }\n });\n }\n\n /**\n * Updates the internal accounts list by retrieving normal and snap accounts,\n * removing duplicates, and updating the metadata of each account.\n *\n * @returns A Promise that resolves when the accounts have been updated.\n */\n async updateAccounts(): Promise<void> {\n const snapAccounts = await this.#listSnapAccounts();\n const normalAccounts = await this.#listNormalAccounts();\n\n // keyring type map.\n const keyringTypes = new Map<string, number>();\n const previousAccounts = this.state.internalAccounts.accounts;\n\n const accounts: Record<string, InternalAccount> = [\n ...normalAccounts,\n ...snapAccounts,\n ].reduce((internalAccountMap, internalAccount) => {\n const keyringTypeName = keyringTypeToName(\n internalAccount.metadata.keyring.type,\n );\n const keyringAccountIndex = keyringTypes.get(keyringTypeName) ?? 0;\n if (keyringAccountIndex) {\n keyringTypes.set(keyringTypeName, keyringAccountIndex + 1);\n } else {\n keyringTypes.set(keyringTypeName, 1);\n }\n\n const existingAccount = previousAccounts[internalAccount.id];\n\n internalAccountMap[internalAccount.id] = {\n ...internalAccount,\n\n metadata: {\n ...internalAccount.metadata,\n name:\n this.#populateExistingMetadata(existingAccount?.id, 'name') ??\n `${keyringTypeName} ${keyringAccountIndex + 1}`,\n importTime:\n this.#populateExistingMetadata(existingAccount?.id, 'importTime') ??\n Date.now(),\n lastSelected:\n this.#populateExistingMetadata(\n existingAccount?.id,\n 'lastSelected',\n ) ?? 0,\n },\n };\n\n return internalAccountMap;\n }, {} as Record<string, InternalAccount>);\n\n this.update((currentState: Draft<AccountsControllerState>) => {\n currentState.internalAccounts.accounts = accounts;\n\n if (\n !currentState.internalAccounts.accounts[\n currentState.internalAccounts.selectedAccount\n ]\n ) {\n const lastSelectedAccount = this.#getLastSelectedAccount(\n Object.values(accounts),\n );\n\n if (lastSelectedAccount) {\n currentState.internalAccounts.selectedAccount =\n lastSelectedAccount.id;\n currentState.internalAccounts.accounts[\n lastSelectedAccount.id\n ].metadata.lastSelected = this.#getLastSelectedIndex();\n this.#publishAccountChangeEvent(lastSelectedAccount);\n } else {\n // It will be undefined if there are no accounts\n currentState.internalAccounts.selectedAccount = '';\n }\n }\n });\n }\n\n /**\n * Loads the backup state of the accounts controller.\n *\n * @param backup - The backup state to load.\n */\n loadBackup(backup: AccountsControllerState): void {\n if (backup.internalAccounts) {\n this.update((currentState: Draft<AccountsControllerState>) => {\n currentState.internalAccounts = backup.internalAccounts;\n });\n }\n }\n\n /**\n * Generates an internal account for a non-Snap account.\n * @param address - The address of the account.\n * @param type - The type of the account.\n * @returns The generated internal account.\n */\n #generateInternalAccountForNonSnapAccount(\n address: string,\n type: string,\n ): InternalAccount {\n return {\n id: getUUIDFromAddressOfNormalAccount(address),\n address,\n options: {},\n methods: [\n EthMethod.PersonalSign,\n EthMethod.Sign,\n EthMethod.SignTransaction,\n EthMethod.SignTypedDataV1,\n EthMethod.SignTypedDataV3,\n EthMethod.SignTypedDataV4,\n ],\n type: EthAccountType.Eoa,\n metadata: {\n name: '',\n importTime: Date.now(),\n keyring: {\n type,\n },\n },\n };\n }\n\n /**\n * Returns a list of internal accounts created using the SnapKeyring.\n *\n * @returns A promise that resolves to an array of InternalAccount objects.\n */\n async #listSnapAccounts(): Promise<InternalAccount[]> {\n const [snapKeyring] = this.messagingSystem.call(\n 'KeyringController:getKeyringsByType',\n SnapKeyring.type,\n );\n // snap keyring is not available until the first account is created in the keyring controller\n if (!snapKeyring) {\n return [];\n }\n\n const snapAccounts = (snapKeyring as SnapKeyring).listAccounts();\n\n return snapAccounts;\n }\n\n /**\n * Returns a list of normal accounts.\n * Note: listNormalAccounts is a temporary method until the keyrings all implement the InternalAccount interface.\n * Once all keyrings implement the InternalAccount interface, this method can be removed and getAccounts can be used instead.\n *\n * @returns A Promise that resolves to an array of InternalAccount objects.\n */\n async #listNormalAccounts(): Promise<InternalAccount[]> {\n const addresses = await this.messagingSystem.call(\n 'KeyringController:getAccounts',\n );\n const internalAccounts: InternalAccount[] = [];\n for (const address of addresses) {\n const keyring = await this.messagingSystem.call(\n 'KeyringController:getKeyringForAccount',\n address,\n );\n\n const keyringType = (keyring as Keyring<Json>).type;\n if (!isNormalKeyringType(keyringType as KeyringTypes)) {\n // We only consider \"normal accounts\" here, so keep looping\n continue;\n }\n\n const id = getUUIDFromAddressOfNormalAccount(address);\n\n const nameLastUpdatedAt = this.#populateExistingMetadata(\n id,\n 'nameLastUpdatedAt',\n );\n\n internalAccounts.push({\n id,\n address,\n options: {},\n methods: [\n EthMethod.PersonalSign,\n EthMethod.Sign,\n EthMethod.SignTransaction,\n EthMethod.SignTypedDataV1,\n EthMethod.SignTypedDataV3,\n EthMethod.SignTypedDataV4,\n ],\n type: EthAccountType.Eoa,\n metadata: {\n name: this.#populateExistingMetadata(id, 'name') ?? '',\n ...(nameLastUpdatedAt && { nameLastUpdatedAt }),\n importTime:\n this.#populateExistingMetadata(id, 'importTime') ?? Date.now(),\n lastSelected: this.#populateExistingMetadata(id, 'lastSelected') ?? 0,\n keyring: {\n type: (keyring as Keyring<Json>).type,\n },\n },\n });\n }\n\n return internalAccounts;\n }\n\n /**\n * Handles changes in the keyring state, specifically when new accounts are added or removed.\n *\n * @param keyringState - The new state of the keyring controller.\n */\n #handleOnKeyringStateChange(keyringState: KeyringControllerState): void {\n // check if there are any new accounts added\n // TODO: change when accountAdded event is added to the keyring controller\n\n // We check for keyrings length to be greater than 0 because the extension client may try execute\n // submit password twice and clear the keyring state.\n // https://github.com/MetaMask/KeyringController/blob/2d73a4deed8d013913f6ef0c9f5c0bb7c614f7d3/src/KeyringController.ts#L910\n if (keyringState.isUnlocked && keyringState.keyrings.length > 0) {\n const updatedNormalKeyringAddresses: AddressAndKeyringTypeObject[] = [];\n const updatedSnapKeyringAddresses: AddressAndKeyringTypeObject[] = [];\n\n for (const keyring of keyringState.keyrings) {\n if (keyring.type === KeyringTypes.snap) {\n updatedSnapKeyringAddresses.push(\n ...keyring.accounts.map((address) => {\n return {\n address,\n type: keyring.type,\n };\n }),\n );\n } else {\n updatedNormalKeyringAddresses.push(\n ...keyring.accounts.map((address) => {\n return {\n address,\n type: keyring.type,\n };\n }),\n );\n }\n }\n\n const { previousNormalInternalAccounts, previousSnapInternalAccounts } =\n this.listMultichainAccounts().reduce(\n (accumulator, account) => {\n if (account.metadata.keyring.type === KeyringTypes.snap) {\n accumulator.previousSnapInternalAccounts.push(account);\n } else {\n accumulator.previousNormalInternalAccounts.push(account);\n }\n return accumulator;\n },\n {\n previousNormalInternalAccounts: [] as InternalAccount[],\n previousSnapInternalAccounts: [] as InternalAccount[],\n },\n );\n\n const addedAccounts: AddressAndKeyringTypeObject[] = [];\n const deletedAccounts: InternalAccount[] = [];\n\n // snap account ids are random uuid while normal accounts\n // are determininistic based on the address\n\n // ^NOTE: This will be removed when normal accounts also implement internal accounts\n // finding all the normal accounts that were added\n for (const account of updatedNormalKeyringAddresses) {\n if (\n !this.state.internalAccounts.accounts[\n getUUIDFromAddressOfNormalAccount(account.address)\n ]\n ) {\n addedAccounts.push(account);\n }\n }\n\n // finding all the snap accounts that were added\n for (const account of updatedSnapKeyringAddresses) {\n if (\n !previousSnapInternalAccounts.find(\n (internalAccount: InternalAccount) =>\n internalAccount.address.toLowerCase() ===\n account.address.toLowerCase(),\n )\n ) {\n addedAccounts.push(account);\n }\n }\n\n // finding all the normal accounts that were deleted\n for (const account of previousNormalInternalAccounts) {\n if (\n !updatedNormalKeyringAddresses.find(\n ({ address }) =>\n address.toLowerCase() === account.address.toLowerCase(),\n )\n ) {\n deletedAccounts.push(account);\n }\n }\n\n // finding all the snap accounts that were deleted\n for (const account of previousSnapInternalAccounts) {\n if (\n !updatedSnapKeyringAddresses.find(\n ({ address }) =>\n address.toLowerCase() === account.address.toLowerCase(),\n )\n ) {\n deletedAccounts.push(account);\n }\n }\n\n this.update((currentState: Draft<AccountsControllerState>) => {\n if (deletedAccounts.length > 0) {\n for (const account of deletedAccounts) {\n currentState.internalAccounts.accounts = this.#handleAccountRemoved(\n currentState.internalAccounts.accounts,\n account.id,\n );\n }\n }\n\n if (addedAccounts.length > 0) {\n for (const account of addedAccounts) {\n currentState.internalAccounts.accounts =\n this.#handleNewAccountAdded(\n currentState.internalAccounts.accounts,\n account,\n );\n }\n }\n\n // We don't use list accounts because it is not the updated state yet.\n const existingAccounts = Object.values(\n currentState.internalAccounts.accounts,\n );\n\n // handle if the selected account was deleted\n if (\n !currentState.internalAccounts.accounts[\n this.state.internalAccounts.selectedAccount\n ]\n ) {\n const lastSelectedAccount =\n this.#getLastSelectedAccount(existingAccounts);\n\n if (lastSelectedAccount) {\n currentState.internalAccounts.selectedAccount =\n lastSelectedAccount.id;\n currentState.internalAccounts.accounts[\n lastSelectedAccount.id\n ].metadata.lastSelected = this.#getLastSelectedIndex();\n this.#publishAccountChangeEvent(lastSelectedAccount);\n } else {\n // It will be undefined if there are no accounts\n currentState.internalAccounts.selectedAccount = '';\n }\n }\n });\n }\n }\n\n /**\n * Handles the change in SnapControllerState by updating the metadata of accounts that have a snap enabled.\n *\n * @param snapState - The new SnapControllerState.\n */\n #handleOnSnapStateChange(snapState: SnapControllerState) {\n // only check if snaps changed in status\n const { snaps } = snapState;\n const accounts = this.listMultichainAccounts().filter(\n (account) => account.metadata.snap,\n );\n\n this.update((currentState: Draft<AccountsControllerState>) => {\n accounts.forEach((account) => {\n const currentAccount =\n currentState.internalAccounts.accounts[account.id];\n if (currentAccount.metadata.snap) {\n const snapId = currentAccount.metadata.snap.id;\n const storedSnap: Snap = snaps[snapId as SnapId];\n if (storedSnap) {\n currentAccount.metadata.snap.enabled =\n storedSnap.enabled && !storedSnap.blocked;\n }\n }\n });\n });\n }\n\n /**\n * Returns the list of accounts for a given keyring type.\n * @param keyringType - The type of keyring.\n * @param accounts - Accounts to filter by keyring type.\n * @returns The list of accounts associcated with this keyring type.\n */\n #getAccountsByKeyringType(keyringType: string, accounts?: InternalAccount[]) {\n return (accounts ?? this.listMultichainAccounts()).filter(\n (internalAccount) => {\n // We do consider `hd` and `simple` keyrings to be of same type. So we check those 2 types\n // to group those accounts together!\n if (\n keyringType === KeyringTypes.hd ||\n keyringType === KeyringTypes.simple\n ) {\n return (\n internalAccount.metadata.keyring.type === KeyringTypes.hd ||\n internalAccount.metadata.keyring.type === KeyringTypes.simple\n );\n }\n\n return internalAccount.metadata.keyring.type === keyringType;\n },\n );\n }\n\n /**\n * Returns the last selected account from the given array of accounts.\n *\n * @param accounts - An array of InternalAccount objects.\n * @returns The InternalAccount object that was last selected, or undefined if the array is empty.\n */\n #getLastSelectedAccount(\n accounts: InternalAccount[],\n ): InternalAccount | undefined {\n const [accountToSelect] = accounts.sort((accountA, accountB) => {\n // sort by lastSelected descending\n return (\n (accountB.metadata.lastSelected ?? 0) -\n (accountA.metadata.lastSelected ?? 0)\n );\n });\n\n return accountToSelect;\n }\n\n /**\n * Returns the next account number for a given keyring type.\n * @param keyringType - The type of keyring.\n * @param accounts - Existing accounts to check for the next available account number.\n * @returns An object containing the account prefix and index to use.\n */\n getNextAvailableAccountName(\n keyringType: string = KeyringTypes.hd,\n accounts?: InternalAccount[],\n ): string {\n const keyringName = keyringTypeToName(keyringType);\n const keyringAccounts = this.#getAccountsByKeyringType(\n keyringType,\n accounts,\n );\n const lastDefaultIndexUsedForKeyringType = keyringAccounts.reduce(\n (maxInternalAccountIndex, internalAccount) => {\n // We **DO NOT USE** `\\d+` here to only consider valid \"human\"\n // number (rounded decimal number)\n const match = new RegExp(`${keyringName} ([0-9]+)$`, 'u').exec(\n internalAccount.metadata.name,\n );\n\n if (match) {\n // Quoting `RegExp.exec` documentation:\n // > The returned array has the matched text as the first item, and then one item for\n // > each capturing group of the matched text.\n // So use `match[1]` to get the captured value\n const internalAccountIndex = parseInt(match[1], 10);\n return Math.max(maxInternalAccountIndex, internalAccountIndex);\n }\n\n return maxInternalAccountIndex;\n },\n 0,\n );\n\n const index = Math.max(\n keyringAccounts.length + 1,\n // ESLint is confused; this is a number.\n // eslint-disable-next-line @typescript-eslint/restrict-plus-operands\n lastDefaultIndexUsedForKeyringType + 1,\n );\n\n return `${keyringName} ${index}`;\n }\n\n /**\n * Checks if an account is compatible with a given chain namespace.\n * @private\n * @param account - The account to check compatibility for.\n * @param chainId - The CAIP2 to check compatibility with.\n * @returns Returns true if the account is compatible with the chain namespace, otherwise false.\n */\n #isAccountCompatibleWithChain(\n account: InternalAccount,\n chainId: CaipChainId,\n ): boolean {\n // TODO: Change this logic to not use account's type\n // Because we currently only use type, we can only use namespace for now.\n return account.type.startsWith(parseCaipChainId(chainId).namespace);\n }\n\n /**\n * Retrieves the index value for `metadata.lastSelected`.\n *\n * @returns The index value.\n */\n #getLastSelectedIndex() {\n // NOTE: For now we use the current date, since we know this value\n // will always be higher than any already selected account index.\n return Date.now();\n }\n\n /**\n * Handles the addition of a new account to the controller.\n * If the account is not a Snap Keyring account, generates an internal account for it and adds it to the controller.\n * If the account is a Snap Keyring account, retrieves the account from the keyring and adds it to the controller.\n * @param accountsState - AccountsController accounts state that is to be mutated.\n * @param account - The address and keyring type object of the new account.\n * @returns The updated AccountsController accounts state.\n */\n #handleNewAccountAdded(\n accountsState: AccountsControllerState['internalAccounts']['accounts'],\n account: AddressAndKeyringTypeObject,\n ): AccountsControllerState['internalAccounts']['accounts'] {\n let newAccount: InternalAccount;\n if (account.type !== KeyringTypes.snap) {\n newAccount = this.#generateInternalAccountForNonSnapAccount(\n account.address,\n account.type,\n );\n } else {\n const [snapKeyring] = this.messagingSystem.call(\n 'KeyringController:getKeyringsByType',\n SnapKeyring.type,\n );\n\n newAccount = (snapKeyring as SnapKeyring).getAccountByAddress(\n account.address,\n ) as InternalAccount;\n\n // The snap deleted the account before the keyring controller could add it\n if (!newAccount) {\n return accountsState;\n }\n }\n\n const isFirstAccount = Object.keys(accountsState).length === 0;\n\n // Get next account name available for this given keyring\n const accountName = this.getNextAvailableAccountName(\n newAccount.metadata.keyring.type,\n Object.values(accountsState),\n );\n\n const newAccountWithUpdatedMetadata = {\n ...newAccount,\n metadata: {\n ...newAccount.metadata,\n name: accountName,\n importTime: Date.now(),\n lastSelected: isFirstAccount ? this.#getLastSelectedIndex() : 0,\n },\n };\n accountsState[newAccount.id] = newAccountWithUpdatedMetadata;\n\n this.messagingSystem.publish(\n 'AccountsController:accountAdded',\n newAccountWithUpdatedMetadata,\n );\n\n return accountsState;\n }\n\n #publishAccountChangeEvent(account: InternalAccount) {\n if (isEvmAccountType(account.type)) {\n this.messagingSystem.publish(\n 'AccountsController:selectedEvmAccountChange',\n account,\n );\n }\n this.messagingSystem.publish(\n 'AccountsController:selectedAccountChange',\n account,\n );\n }\n\n /**\n * Handles the removal of an account from the internal accounts list.\n * @param accountsState - AccountsController accounts state that is to be mutated.\n * @param accountId - The ID of the account to be removed.\n * @returns The updated AccountsController state.\n */\n #handleAccountRemoved(\n accountsState: AccountsControllerState['internalAccounts']['accounts'],\n accountId: string,\n ): AccountsControllerState['internalAccounts']['accounts'] {\n delete accountsState[accountId];\n\n this.messagingSystem.publish(\n 'AccountsController:accountRemoved',\n accountId,\n );\n\n return accountsState;\n }\n\n /**\n * Retrieves the value of a specific metadata key for an existing account.\n * @param accountId - The ID of the account.\n * @param metadataKey - The key of the metadata to retrieve.\n * @param account - The account object to retrieve the metadata key from.\n * @returns The value of the specified metadata key, or undefined if the account or metadata key does not exist.\n */\n // TODO: Either fix this lint violation or explain why it's necessary to ignore.\n // eslint-disable-next-line @typescript-eslint/naming-convention\n #populateExistingMetadata<T extends keyof InternalAccount['metadata']>(\n accountId: string,\n metadataKey: T,\n account?: InternalAccount,\n ): InternalAccount['metadata'][T] | undefined {\n const internalAccount = account ?? this.getAccount(accountId);\n return internalAccount ? internalAccount.metadata[metadataKey] : undefined;\n }\n\n /**\n * Registers message handlers for the AccountsController.\n * @private\n */\n #registerMessageHandlers() {\n this.messagingSystem.registerActionHandler(\n `${controllerName}:setSelectedAccount`,\n this.setSelectedAccount.bind(this),\n );\n\n this.messagingSystem.registerActionHandler(\n `${controllerName}:listAccounts`,\n this.listAccounts.bind(this),\n );\n\n this.messagingSystem.registerActionHandler(\n `${controllerName}:listMultichainAccounts`,\n this.listMultichainAccounts.bind(this),\n );\n\n this.messagingSystem.registerActionHandler(\n `${controllerName}:setAccountName`,\n this.setAccountName.bind(this),\n );\n\n this.messagingSystem.registerActionHandler(\n `${controllerName}:updateAccounts`,\n this.updateAccounts.bind(this),\n );\n\n this.messagingSystem.registerActionHandler(\n `${controllerName}:getSelectedAccount`,\n this.getSelectedAccount.bind(this),\n );\n\n this.messagingSystem.registerActionHandler(\n `${controllerName}:getSelectedMultichainAccount`,\n this.getSelectedMultichainAccount.bind(this),\n );\n\n this.messagingSystem.registerActionHandler(\n `${controllerName}:getAccountByAddress`,\n this.getAccountByAddress.bind(this),\n );\n\n this.messagingSystem.registerActionHandler(\n `${controllerName}:getNextAvailableAccountName`,\n this.getNextAvailableAccountName.bind(this),\n );\n\n this.messagingSystem.registerActionHandler(\n `AccountsController:getAccount`,\n this.getAccount.bind(this),\n );\n\n this.messagingSystem.registerActionHandler(\n `AccountsController:updateAccountMetadata`,\n this.updateAccountMetadata.bind(this),\n );\n }\n}\n"]}
package/dist/index.cjs ADDED
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getUUIDFromAddressOfNormalAccount = exports.keyringTypeToName = exports.AccountsController = void 0;
4
+ var AccountsController_1 = require("./AccountsController.cjs");
5
+ Object.defineProperty(exports, "AccountsController", { enumerable: true, get: function () { return AccountsController_1.AccountsController; } });
6
+ var utils_1 = require("./utils.cjs");
7
+ Object.defineProperty(exports, "keyringTypeToName", { enumerable: true, get: function () { return utils_1.keyringTypeToName; } });
8
+ Object.defineProperty(exports, "getUUIDFromAddressOfNormalAccount", { enumerable: true, get: function () { return utils_1.getUUIDFromAddressOfNormalAccount; } });
9
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAwBA,+DAA0D;AAAjD,wHAAA,kBAAkB,OAAA;AAC3B,qCAA+E;AAAtE,0GAAA,iBAAiB,OAAA;AAAE,0HAAA,iCAAiC,OAAA","sourcesContent":["export type {\n AccountsControllerState,\n AccountsControllerGetStateAction,\n AccountsControllerSetSelectedAccountAction,\n AccountsControllerSetAccountNameAction,\n AccountsControllerListAccountsAction,\n AccountsControllerListMultichainAccountsAction,\n AccountsControllerUpdateAccountsAction,\n AccountsControllerGetSelectedAccountAction,\n AccountsControllerGetSelectedMultichainAccountAction,\n AccountsControllerGetAccountByAddressAction,\n AccountsControllerGetAccountAction,\n AccountsControllerGetNextAvailableAccountNameAction,\n AccountsControllerUpdateAccountMetadataAction,\n AccountsControllerActions,\n AccountsControllerChangeEvent,\n AccountsControllerSelectedAccountChangeEvent,\n AccountsControllerSelectedEvmAccountChangeEvent,\n AccountsControllerAccountAddedEvent,\n AccountsControllerAccountRemovedEvent,\n AccountsControllerAccountRenamedEvent,\n AccountsControllerEvents,\n AccountsControllerMessenger,\n} from './AccountsController';\nexport { AccountsController } from './AccountsController';\nexport { keyringTypeToName, getUUIDFromAddressOfNormalAccount } from './utils';\n"]}
@@ -1,4 +1,4 @@
1
- export type { AccountsControllerState, AccountsControllerGetStateAction, AccountsControllerSetSelectedAccountAction, AccountsControllerSetAccountNameAction, AccountsControllerListAccountsAction, AccountsControllerListMultichainAccountsAction, AccountsControllerUpdateAccountsAction, AccountsControllerGetSelectedAccountAction, AccountsControllerGetSelectedMultichainAccountAction, AccountsControllerGetAccountByAddressAction, AccountsControllerGetAccountAction, AccountsControllerGetNextAvailableAccountNameAction, AccountsControllerUpdateAccountMetadataAction, AccountsControllerActions, AccountsControllerChangeEvent, AccountsControllerSelectedAccountChangeEvent, AccountsControllerSelectedEvmAccountChangeEvent, AccountsControllerAccountAddedEvent, AccountsControllerAccountRemovedEvent, AccountsControllerEvents, AccountsControllerMessenger, } from './AccountsController';
2
- export { AccountsController } from './AccountsController';
3
- export { keyringTypeToName, getUUIDFromAddressOfNormalAccount } from './utils';
4
- //# sourceMappingURL=index.d.ts.map
1
+ export type { AccountsControllerState, AccountsControllerGetStateAction, AccountsControllerSetSelectedAccountAction, AccountsControllerSetAccountNameAction, AccountsControllerListAccountsAction, AccountsControllerListMultichainAccountsAction, AccountsControllerUpdateAccountsAction, AccountsControllerGetSelectedAccountAction, AccountsControllerGetSelectedMultichainAccountAction, AccountsControllerGetAccountByAddressAction, AccountsControllerGetAccountAction, AccountsControllerGetNextAvailableAccountNameAction, AccountsControllerUpdateAccountMetadataAction, AccountsControllerActions, AccountsControllerChangeEvent, AccountsControllerSelectedAccountChangeEvent, AccountsControllerSelectedEvmAccountChangeEvent, AccountsControllerAccountAddedEvent, AccountsControllerAccountRemovedEvent, AccountsControllerAccountRenamedEvent, AccountsControllerEvents, AccountsControllerMessenger, } from "./AccountsController.cjs";
2
+ export { AccountsController } from "./AccountsController.cjs";
3
+ export { keyringTypeToName, getUUIDFromAddressOfNormalAccount } from "./utils.cjs";
4
+ //# sourceMappingURL=index.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.cts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,uBAAuB,EACvB,gCAAgC,EAChC,0CAA0C,EAC1C,sCAAsC,EACtC,oCAAoC,EACpC,8CAA8C,EAC9C,sCAAsC,EACtC,0CAA0C,EAC1C,oDAAoD,EACpD,2CAA2C,EAC3C,kCAAkC,EAClC,mDAAmD,EACnD,6CAA6C,EAC7C,yBAAyB,EACzB,6BAA6B,EAC7B,4CAA4C,EAC5C,+CAA+C,EAC/C,mCAAmC,EACnC,qCAAqC,EACrC,qCAAqC,EACrC,wBAAwB,EACxB,2BAA2B,GAC5B,iCAA6B;AAC9B,OAAO,EAAE,kBAAkB,EAAE,iCAA6B;AAC1D,OAAO,EAAE,iBAAiB,EAAE,iCAAiC,EAAE,oBAAgB"}
@@ -0,0 +1,4 @@
1
+ export type { AccountsControllerState, AccountsControllerGetStateAction, AccountsControllerSetSelectedAccountAction, AccountsControllerSetAccountNameAction, AccountsControllerListAccountsAction, AccountsControllerListMultichainAccountsAction, AccountsControllerUpdateAccountsAction, AccountsControllerGetSelectedAccountAction, AccountsControllerGetSelectedMultichainAccountAction, AccountsControllerGetAccountByAddressAction, AccountsControllerGetAccountAction, AccountsControllerGetNextAvailableAccountNameAction, AccountsControllerUpdateAccountMetadataAction, AccountsControllerActions, AccountsControllerChangeEvent, AccountsControllerSelectedAccountChangeEvent, AccountsControllerSelectedEvmAccountChangeEvent, AccountsControllerAccountAddedEvent, AccountsControllerAccountRemovedEvent, AccountsControllerAccountRenamedEvent, AccountsControllerEvents, AccountsControllerMessenger, } from "./AccountsController.mjs";
2
+ export { AccountsController } from "./AccountsController.mjs";
3
+ export { keyringTypeToName, getUUIDFromAddressOfNormalAccount } from "./utils.mjs";
4
+ //# sourceMappingURL=index.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.mts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,uBAAuB,EACvB,gCAAgC,EAChC,0CAA0C,EAC1C,sCAAsC,EACtC,oCAAoC,EACpC,8CAA8C,EAC9C,sCAAsC,EACtC,0CAA0C,EAC1C,oDAAoD,EACpD,2CAA2C,EAC3C,kCAAkC,EAClC,mDAAmD,EACnD,6CAA6C,EAC7C,yBAAyB,EACzB,6BAA6B,EAC7B,4CAA4C,EAC5C,+CAA+C,EAC/C,mCAAmC,EACnC,qCAAqC,EACrC,qCAAqC,EACrC,wBAAwB,EACxB,2BAA2B,GAC5B,iCAA6B;AAC9B,OAAO,EAAE,kBAAkB,EAAE,iCAA6B;AAC1D,OAAO,EAAE,iBAAiB,EAAE,iCAAiC,EAAE,oBAAgB"}
package/dist/index.mjs CHANGED
@@ -1,14 +1,3 @@
1
- import {
2
- AccountsController
3
- } from "./chunk-ZPUB3DMH.mjs";
4
- import {
5
- getUUIDFromAddressOfNormalAccount,
6
- keyringTypeToName
7
- } from "./chunk-Y2QVUNIA.mjs";
8
- import "./chunk-ZNSHBDHA.mjs";
9
- export {
10
- AccountsController,
11
- getUUIDFromAddressOfNormalAccount,
12
- keyringTypeToName
13
- };
1
+ export { AccountsController } from "./AccountsController.mjs";
2
+ export { keyringTypeToName, getUUIDFromAddressOfNormalAccount } from "./utils.mjs";
14
3
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
1
+ {"version":3,"file":"index.mjs","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAwBA,OAAO,EAAE,kBAAkB,EAAE,iCAA6B;AAC1D,OAAO,EAAE,iBAAiB,EAAE,iCAAiC,EAAE,oBAAgB","sourcesContent":["export type {\n AccountsControllerState,\n AccountsControllerGetStateAction,\n AccountsControllerSetSelectedAccountAction,\n AccountsControllerSetAccountNameAction,\n AccountsControllerListAccountsAction,\n AccountsControllerListMultichainAccountsAction,\n AccountsControllerUpdateAccountsAction,\n AccountsControllerGetSelectedAccountAction,\n AccountsControllerGetSelectedMultichainAccountAction,\n AccountsControllerGetAccountByAddressAction,\n AccountsControllerGetAccountAction,\n AccountsControllerGetNextAvailableAccountNameAction,\n AccountsControllerUpdateAccountMetadataAction,\n AccountsControllerActions,\n AccountsControllerChangeEvent,\n AccountsControllerSelectedAccountChangeEvent,\n AccountsControllerSelectedEvmAccountChangeEvent,\n AccountsControllerAccountAddedEvent,\n AccountsControllerAccountRemovedEvent,\n AccountsControllerAccountRenamedEvent,\n AccountsControllerEvents,\n AccountsControllerMessenger,\n} from './AccountsController';\nexport { AccountsController } from './AccountsController';\nexport { keyringTypeToName, getUUIDFromAddressOfNormalAccount } from './utils';\n"]}
@@ -0,0 +1,49 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createMockInternalAccount = void 0;
4
+ const keyring_api_1 = require("@metamask/keyring-api");
5
+ const keyring_controller_1 = require("@metamask/keyring-controller");
6
+ const uuid_1 = require("uuid");
7
+ const createMockInternalAccount = ({ id = (0, uuid_1.v4)(), address = '0x2990079bcdee240329a520d2444386fc119da21a', type = keyring_api_1.EthAccountType.Eoa, name = 'Account 1', keyringType = keyring_controller_1.KeyringTypes.hd, snap, importTime = Date.now(), lastSelected = Date.now(), } = {}) => {
8
+ let methods;
9
+ switch (type) {
10
+ case keyring_api_1.EthAccountType.Eoa:
11
+ methods = [
12
+ keyring_api_1.EthMethod.PersonalSign,
13
+ keyring_api_1.EthMethod.Sign,
14
+ keyring_api_1.EthMethod.SignTransaction,
15
+ keyring_api_1.EthMethod.SignTypedDataV1,
16
+ keyring_api_1.EthMethod.SignTypedDataV3,
17
+ keyring_api_1.EthMethod.SignTypedDataV4,
18
+ ];
19
+ break;
20
+ case keyring_api_1.EthAccountType.Erc4337:
21
+ methods = [
22
+ keyring_api_1.EthMethod.PatchUserOperation,
23
+ keyring_api_1.EthMethod.PrepareUserOperation,
24
+ keyring_api_1.EthMethod.SignUserOperation,
25
+ ];
26
+ break;
27
+ case keyring_api_1.BtcAccountType.P2wpkh:
28
+ methods = [keyring_api_1.BtcMethod.SendMany];
29
+ break;
30
+ default:
31
+ throw new Error(`Unknown account type: ${type}`);
32
+ }
33
+ return {
34
+ id,
35
+ address,
36
+ options: {},
37
+ methods,
38
+ type,
39
+ metadata: {
40
+ name,
41
+ keyring: { type: keyringType },
42
+ importTime,
43
+ lastSelected,
44
+ snap,
45
+ },
46
+ };
47
+ };
48
+ exports.createMockInternalAccount = createMockInternalAccount;
49
+ //# sourceMappingURL=mocks.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mocks.cjs","sourceRoot":"","sources":["../../src/tests/mocks.ts"],"names":[],"mappings":";;;AAIA,uDAK+B;AAC/B,qEAA4D;AAC5D,+BAA0B;AAEnB,MAAM,yBAAyB,GAAG,CAAC,EACxC,EAAE,GAAG,IAAA,SAAE,GAAE,EACT,OAAO,GAAG,4CAA4C,EACtD,IAAI,GAAG,4BAAc,CAAC,GAAG,EACzB,IAAI,GAAG,WAAW,EAClB,WAAW,GAAG,iCAAY,CAAC,EAAE,EAC7B,IAAI,EACJ,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,EACvB,YAAY,GAAG,IAAI,CAAC,GAAG,EAAE,MAcvB,EAAE,EAAmB,EAAE;IACzB,IAAI,OAAO,CAAC;IAEZ,QAAQ,IAAI,EAAE;QACZ,KAAK,4BAAc,CAAC,GAAG;YACrB,OAAO,GAAG;gBACR,uBAAS,CAAC,YAAY;gBACtB,uBAAS,CAAC,IAAI;gBACd,uBAAS,CAAC,eAAe;gBACzB,uBAAS,CAAC,eAAe;gBACzB,uBAAS,CAAC,eAAe;gBACzB,uBAAS,CAAC,eAAe;aAC1B,CAAC;YACF,MAAM;QACR,KAAK,4BAAc,CAAC,OAAO;YACzB,OAAO,GAAG;gBACR,uBAAS,CAAC,kBAAkB;gBAC5B,uBAAS,CAAC,oBAAoB;gBAC9B,uBAAS,CAAC,iBAAiB;aAC5B,CAAC;YACF,MAAM;QACR,KAAK,4BAAc,CAAC,MAAM;YACxB,OAAO,GAAG,CAAC,uBAAS,CAAC,QAAQ,CAAC,CAAC;YAC/B,MAAM;QACR;YACE,MAAM,IAAI,KAAK,CAAC,yBAAyB,IAAc,EAAE,CAAC,CAAC;KAC9D;IAED,OAAO;QACL,EAAE;QACF,OAAO;QACP,OAAO,EAAE,EAAE;QACX,OAAO;QACP,IAAI;QACJ,QAAQ,EAAE;YACR,IAAI;YACJ,OAAO,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE;YAC9B,UAAU;YACV,YAAY;YACZ,IAAI;SACL;KACiB,CAAC;AACvB,CAAC,CAAC;AAhEW,QAAA,yBAAyB,6BAgEpC","sourcesContent":["import type {\n InternalAccount,\n InternalAccountType,\n} from '@metamask/keyring-api';\nimport {\n BtcAccountType,\n BtcMethod,\n EthAccountType,\n EthMethod,\n} from '@metamask/keyring-api';\nimport { KeyringTypes } from '@metamask/keyring-controller';\nimport { v4 } from 'uuid';\n\nexport const createMockInternalAccount = ({\n id = v4(),\n address = '0x2990079bcdee240329a520d2444386fc119da21a',\n type = EthAccountType.Eoa,\n name = 'Account 1',\n keyringType = KeyringTypes.hd,\n snap,\n importTime = Date.now(),\n lastSelected = Date.now(),\n}: {\n id?: string;\n address?: string;\n type?: InternalAccountType;\n name?: string;\n keyringType?: KeyringTypes;\n snap?: {\n id: string;\n enabled: boolean;\n name: string;\n };\n importTime?: number;\n lastSelected?: number;\n} = {}): InternalAccount => {\n let methods;\n\n switch (type) {\n case EthAccountType.Eoa:\n methods = [\n EthMethod.PersonalSign,\n EthMethod.Sign,\n EthMethod.SignTransaction,\n EthMethod.SignTypedDataV1,\n EthMethod.SignTypedDataV3,\n EthMethod.SignTypedDataV4,\n ];\n break;\n case EthAccountType.Erc4337:\n methods = [\n EthMethod.PatchUserOperation,\n EthMethod.PrepareUserOperation,\n EthMethod.SignUserOperation,\n ];\n break;\n case BtcAccountType.P2wpkh:\n methods = [BtcMethod.SendMany];\n break;\n default:\n throw new Error(`Unknown account type: ${type as string}`);\n }\n\n return {\n id,\n address,\n options: {},\n methods,\n type,\n metadata: {\n name,\n keyring: { type: keyringType },\n importTime,\n lastSelected,\n snap,\n },\n } as InternalAccount;\n};\n"]}
@@ -1,5 +1,5 @@
1
- import type { InternalAccount, InternalAccountType } from '@metamask/keyring-api';
2
- import { KeyringTypes } from '@metamask/keyring-controller';
1
+ import type { InternalAccount, InternalAccountType } from "@metamask/keyring-api";
2
+ import { KeyringTypes } from "@metamask/keyring-controller";
3
3
  export declare const createMockInternalAccount: ({ id, address, type, name, keyringType, snap, importTime, lastSelected, }?: {
4
4
  id?: string | undefined;
5
5
  address?: string | undefined;
@@ -14,4 +14,4 @@ export declare const createMockInternalAccount: ({ id, address, type, name, keyr
14
14
  importTime?: number | undefined;
15
15
  lastSelected?: number | undefined;
16
16
  }) => InternalAccount;
17
- //# sourceMappingURL=mocks.d.ts.map
17
+ //# sourceMappingURL=mocks.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mocks.d.cts","sourceRoot":"","sources":["../../src/tests/mocks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EACf,mBAAmB,EACpB,8BAA8B;AAO/B,OAAO,EAAE,YAAY,EAAE,qCAAqC;AAG5D,eAAO,MAAM,yBAAyB;;;;;;;YAgB9B,MAAM;iBACD,OAAO;cACV,MAAM;;;;MAIP,eA0CR,CAAC"}
@@ -0,0 +1,17 @@
1
+ import type { InternalAccount, InternalAccountType } from "@metamask/keyring-api";
2
+ import { KeyringTypes } from "@metamask/keyring-controller";
3
+ export declare const createMockInternalAccount: ({ id, address, type, name, keyringType, snap, importTime, lastSelected, }?: {
4
+ id?: string | undefined;
5
+ address?: string | undefined;
6
+ type?: InternalAccountType | undefined;
7
+ name?: string | undefined;
8
+ keyringType?: KeyringTypes | undefined;
9
+ snap?: {
10
+ id: string;
11
+ enabled: boolean;
12
+ name: string;
13
+ } | undefined;
14
+ importTime?: number | undefined;
15
+ lastSelected?: number | undefined;
16
+ }) => InternalAccount;
17
+ //# sourceMappingURL=mocks.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mocks.d.mts","sourceRoot":"","sources":["../../src/tests/mocks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EACf,mBAAmB,EACpB,8BAA8B;AAO/B,OAAO,EAAE,YAAY,EAAE,qCAAqC;AAG5D,eAAO,MAAM,yBAAyB;;;;;;;YAgB9B,MAAM;iBACD,OAAO;cACV,MAAM;;;;MAIP,eA0CR,CAAC"}
@@ -1,65 +1,46 @@
1
- import "../chunk-ZNSHBDHA.mjs";
2
-
3
- // src/tests/mocks.ts
4
- import {
5
- BtcAccountType,
6
- BtcMethod,
7
- EthAccountType,
8
- EthMethod
9
- } from "@metamask/keyring-api";
1
+ import $metamaskkeyringapi from "@metamask/keyring-api";
2
+ const { BtcAccountType, BtcMethod, EthAccountType, EthMethod } = $metamaskkeyringapi;
10
3
  import { KeyringTypes } from "@metamask/keyring-controller";
11
4
  import { v4 } from "uuid";
12
- var createMockInternalAccount = ({
13
- id = v4(),
14
- address = "0x2990079bcdee240329a520d2444386fc119da21a",
15
- type = EthAccountType.Eoa,
16
- name = "Account 1",
17
- keyringType = KeyringTypes.hd,
18
- snap,
19
- importTime = Date.now(),
20
- lastSelected = Date.now()
21
- } = {}) => {
22
- let methods;
23
- switch (type) {
24
- case EthAccountType.Eoa:
25
- methods = [
26
- EthMethod.PersonalSign,
27
- EthMethod.Sign,
28
- EthMethod.SignTransaction,
29
- EthMethod.SignTypedDataV1,
30
- EthMethod.SignTypedDataV3,
31
- EthMethod.SignTypedDataV4
32
- ];
33
- break;
34
- case EthAccountType.Erc4337:
35
- methods = [
36
- EthMethod.PatchUserOperation,
37
- EthMethod.PrepareUserOperation,
38
- EthMethod.SignUserOperation
39
- ];
40
- break;
41
- case BtcAccountType.P2wpkh:
42
- methods = [BtcMethod.SendMany];
43
- break;
44
- default:
45
- throw new Error(`Unknown account type: ${type}`);
46
- }
47
- return {
48
- id,
49
- address,
50
- options: {},
51
- methods,
52
- type,
53
- metadata: {
54
- name,
55
- keyring: { type: keyringType },
56
- importTime,
57
- lastSelected,
58
- snap
5
+ export const createMockInternalAccount = ({ id = v4(), address = '0x2990079bcdee240329a520d2444386fc119da21a', type = EthAccountType.Eoa, name = 'Account 1', keyringType = KeyringTypes.hd, snap, importTime = Date.now(), lastSelected = Date.now(), } = {}) => {
6
+ let methods;
7
+ switch (type) {
8
+ case EthAccountType.Eoa:
9
+ methods = [
10
+ EthMethod.PersonalSign,
11
+ EthMethod.Sign,
12
+ EthMethod.SignTransaction,
13
+ EthMethod.SignTypedDataV1,
14
+ EthMethod.SignTypedDataV3,
15
+ EthMethod.SignTypedDataV4,
16
+ ];
17
+ break;
18
+ case EthAccountType.Erc4337:
19
+ methods = [
20
+ EthMethod.PatchUserOperation,
21
+ EthMethod.PrepareUserOperation,
22
+ EthMethod.SignUserOperation,
23
+ ];
24
+ break;
25
+ case BtcAccountType.P2wpkh:
26
+ methods = [BtcMethod.SendMany];
27
+ break;
28
+ default:
29
+ throw new Error(`Unknown account type: ${type}`);
59
30
  }
60
- };
61
- };
62
- export {
63
- createMockInternalAccount
31
+ return {
32
+ id,
33
+ address,
34
+ options: {},
35
+ methods,
36
+ type,
37
+ metadata: {
38
+ name,
39
+ keyring: { type: keyringType },
40
+ importTime,
41
+ lastSelected,
42
+ snap,
43
+ },
44
+ };
64
45
  };
65
46
  //# sourceMappingURL=mocks.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/tests/mocks.ts"],"sourcesContent":["import type {\n InternalAccount,\n InternalAccountType,\n} from '@metamask/keyring-api';\nimport {\n BtcAccountType,\n BtcMethod,\n EthAccountType,\n EthMethod,\n} from '@metamask/keyring-api';\nimport { KeyringTypes } from '@metamask/keyring-controller';\nimport { v4 } from 'uuid';\n\nexport const createMockInternalAccount = ({\n id = v4(),\n address = '0x2990079bcdee240329a520d2444386fc119da21a',\n type = EthAccountType.Eoa,\n name = 'Account 1',\n keyringType = KeyringTypes.hd,\n snap,\n importTime = Date.now(),\n lastSelected = Date.now(),\n}: {\n id?: string;\n address?: string;\n type?: InternalAccountType;\n name?: string;\n keyringType?: KeyringTypes;\n snap?: {\n id: string;\n enabled: boolean;\n name: string;\n };\n importTime?: number;\n lastSelected?: number;\n} = {}): InternalAccount => {\n let methods;\n\n switch (type) {\n case EthAccountType.Eoa:\n methods = [\n EthMethod.PersonalSign,\n EthMethod.Sign,\n EthMethod.SignTransaction,\n EthMethod.SignTypedDataV1,\n EthMethod.SignTypedDataV3,\n EthMethod.SignTypedDataV4,\n ];\n break;\n case EthAccountType.Erc4337:\n methods = [\n EthMethod.PatchUserOperation,\n EthMethod.PrepareUserOperation,\n EthMethod.SignUserOperation,\n ];\n break;\n case BtcAccountType.P2wpkh:\n methods = [BtcMethod.SendMany];\n break;\n default:\n throw new Error(`Unknown account type: ${type as string}`);\n }\n\n return {\n id,\n address,\n options: {},\n methods,\n type,\n metadata: {\n name,\n keyring: { type: keyringType },\n importTime,\n lastSelected,\n snap,\n },\n } as InternalAccount;\n};\n"],"mappings":";;;AAIA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,oBAAoB;AAC7B,SAAS,UAAU;AAEZ,IAAM,4BAA4B,CAAC;AAAA,EACxC,KAAK,GAAG;AAAA,EACR,UAAU;AAAA,EACV,OAAO,eAAe;AAAA,EACtB,OAAO;AAAA,EACP,cAAc,aAAa;AAAA,EAC3B;AAAA,EACA,aAAa,KAAK,IAAI;AAAA,EACtB,eAAe,KAAK,IAAI;AAC1B,IAaI,CAAC,MAAuB;AAC1B,MAAI;AAEJ,UAAQ,MAAM;AAAA,IACZ,KAAK,eAAe;AAClB,gBAAU;AAAA,QACR,UAAU;AAAA,QACV,UAAU;AAAA,QACV,UAAU;AAAA,QACV,UAAU;AAAA,QACV,UAAU;AAAA,QACV,UAAU;AAAA,MACZ;AACA;AAAA,IACF,KAAK,eAAe;AAClB,gBAAU;AAAA,QACR,UAAU;AAAA,QACV,UAAU;AAAA,QACV,UAAU;AAAA,MACZ;AACA;AAAA,IACF,KAAK,eAAe;AAClB,gBAAU,CAAC,UAAU,QAAQ;AAC7B;AAAA,IACF;AACE,YAAM,IAAI,MAAM,yBAAyB,IAAc,EAAE;AAAA,EAC7D;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA,SAAS,CAAC;AAAA,IACV;AAAA,IACA;AAAA,IACA,UAAU;AAAA,MACR;AAAA,MACA,SAAS,EAAE,MAAM,YAAY;AAAA,MAC7B;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACF;","names":[]}
1
+ {"version":3,"file":"mocks.mjs","sourceRoot":"","sources":["../../src/tests/mocks.ts"],"names":[],"mappings":";;AAUA,OAAO,EAAE,YAAY,EAAE,qCAAqC;AAC5D,OAAO,EAAE,EAAE,EAAE,aAAa;AAE1B,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,EACxC,EAAE,GAAG,EAAE,EAAE,EACT,OAAO,GAAG,4CAA4C,EACtD,IAAI,GAAG,cAAc,CAAC,GAAG,EACzB,IAAI,GAAG,WAAW,EAClB,WAAW,GAAG,YAAY,CAAC,EAAE,EAC7B,IAAI,EACJ,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,EACvB,YAAY,GAAG,IAAI,CAAC,GAAG,EAAE,MAcvB,EAAE,EAAmB,EAAE;IACzB,IAAI,OAAO,CAAC;IAEZ,QAAQ,IAAI,EAAE;QACZ,KAAK,cAAc,CAAC,GAAG;YACrB,OAAO,GAAG;gBACR,SAAS,CAAC,YAAY;gBACtB,SAAS,CAAC,IAAI;gBACd,SAAS,CAAC,eAAe;gBACzB,SAAS,CAAC,eAAe;gBACzB,SAAS,CAAC,eAAe;gBACzB,SAAS,CAAC,eAAe;aAC1B,CAAC;YACF,MAAM;QACR,KAAK,cAAc,CAAC,OAAO;YACzB,OAAO,GAAG;gBACR,SAAS,CAAC,kBAAkB;gBAC5B,SAAS,CAAC,oBAAoB;gBAC9B,SAAS,CAAC,iBAAiB;aAC5B,CAAC;YACF,MAAM;QACR,KAAK,cAAc,CAAC,MAAM;YACxB,OAAO,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;YAC/B,MAAM;QACR;YACE,MAAM,IAAI,KAAK,CAAC,yBAAyB,IAAc,EAAE,CAAC,CAAC;KAC9D;IAED,OAAO;QACL,EAAE;QACF,OAAO;QACP,OAAO,EAAE,EAAE;QACX,OAAO;QACP,IAAI;QACJ,QAAQ,EAAE;YACR,IAAI;YACJ,OAAO,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE;YAC9B,UAAU;YACV,YAAY;YACZ,IAAI;SACL;KACiB,CAAC;AACvB,CAAC,CAAC","sourcesContent":["import type {\n InternalAccount,\n InternalAccountType,\n} from '@metamask/keyring-api';\nimport {\n BtcAccountType,\n BtcMethod,\n EthAccountType,\n EthMethod,\n} from '@metamask/keyring-api';\nimport { KeyringTypes } from '@metamask/keyring-controller';\nimport { v4 } from 'uuid';\n\nexport const createMockInternalAccount = ({\n id = v4(),\n address = '0x2990079bcdee240329a520d2444386fc119da21a',\n type = EthAccountType.Eoa,\n name = 'Account 1',\n keyringType = KeyringTypes.hd,\n snap,\n importTime = Date.now(),\n lastSelected = Date.now(),\n}: {\n id?: string;\n address?: string;\n type?: InternalAccountType;\n name?: string;\n keyringType?: KeyringTypes;\n snap?: {\n id: string;\n enabled: boolean;\n name: string;\n };\n importTime?: number;\n lastSelected?: number;\n} = {}): InternalAccount => {\n let methods;\n\n switch (type) {\n case EthAccountType.Eoa:\n methods = [\n EthMethod.PersonalSign,\n EthMethod.Sign,\n EthMethod.SignTransaction,\n EthMethod.SignTypedDataV1,\n EthMethod.SignTypedDataV3,\n EthMethod.SignTypedDataV4,\n ];\n break;\n case EthAccountType.Erc4337:\n methods = [\n EthMethod.PatchUserOperation,\n EthMethod.PrepareUserOperation,\n EthMethod.SignUserOperation,\n ];\n break;\n case BtcAccountType.P2wpkh:\n methods = [BtcMethod.SendMany];\n break;\n default:\n throw new Error(`Unknown account type: ${type as string}`);\n }\n\n return {\n id,\n address,\n options: {},\n methods,\n type,\n metadata: {\n name,\n keyring: { type: keyringType },\n importTime,\n lastSelected,\n snap,\n },\n } as InternalAccount;\n};\n"]}
package/dist/utils.cjs ADDED
@@ -0,0 +1,80 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isNormalKeyringType = exports.getUUIDFromAddressOfNormalAccount = exports.getUUIDOptionsFromAddressOfNormalAccount = exports.keyringTypeToName = void 0;
4
+ const util_1 = require("@ethereumjs/util");
5
+ const keyring_controller_1 = require("@metamask/keyring-controller");
6
+ const sha256_1 = require("ethereum-cryptography/sha256");
7
+ const uuid_1 = require("uuid");
8
+ /**
9
+ * Returns the name of the keyring type.
10
+ *
11
+ * @param keyringType - The type of the keyring.
12
+ * @returns The name of the keyring type.
13
+ */
14
+ function keyringTypeToName(keyringType) {
15
+ // Custody keyrings are a special case, as they are not a single type
16
+ // they just start with the prefix `Custody`
17
+ if ((0, keyring_controller_1.isCustodyKeyring)(keyringType)) {
18
+ return 'Custody';
19
+ }
20
+ switch (keyringType) {
21
+ case keyring_controller_1.KeyringTypes.simple: {
22
+ return 'Account';
23
+ }
24
+ case keyring_controller_1.KeyringTypes.hd: {
25
+ return 'Account';
26
+ }
27
+ case keyring_controller_1.KeyringTypes.trezor: {
28
+ return 'Trezor';
29
+ }
30
+ case keyring_controller_1.KeyringTypes.ledger: {
31
+ return 'Ledger';
32
+ }
33
+ case keyring_controller_1.KeyringTypes.lattice: {
34
+ return 'Lattice';
35
+ }
36
+ case keyring_controller_1.KeyringTypes.qr: {
37
+ return 'QR';
38
+ }
39
+ case keyring_controller_1.KeyringTypes.snap: {
40
+ return 'Snap Account';
41
+ }
42
+ default: {
43
+ throw new Error(`Unknown keyring ${keyringType}`);
44
+ }
45
+ }
46
+ }
47
+ exports.keyringTypeToName = keyringTypeToName;
48
+ /**
49
+ * Generates a UUID v4 options from a given Ethereum address.
50
+ * @param address - The Ethereum address to generate the UUID from.
51
+ * @returns The UUID v4 options.
52
+ */
53
+ function getUUIDOptionsFromAddressOfNormalAccount(address) {
54
+ const v4options = {
55
+ random: (0, sha256_1.sha256)((0, util_1.toBuffer)(address)).slice(0, 16),
56
+ };
57
+ return v4options;
58
+ }
59
+ exports.getUUIDOptionsFromAddressOfNormalAccount = getUUIDOptionsFromAddressOfNormalAccount;
60
+ /**
61
+ * Generates a UUID from a given Ethereum address.
62
+ * @param address - The Ethereum address to generate the UUID from.
63
+ * @returns The generated UUID.
64
+ */
65
+ function getUUIDFromAddressOfNormalAccount(address) {
66
+ return (0, uuid_1.v4)(getUUIDOptionsFromAddressOfNormalAccount(address));
67
+ }
68
+ exports.getUUIDFromAddressOfNormalAccount = getUUIDFromAddressOfNormalAccount;
69
+ /**
70
+ * Check if a keyring type is considered a "normal" keyring.
71
+ * @param keyringType - The account's keyring type.
72
+ * @returns True if the keyring type is considered a "normal" keyring, false otherwise.
73
+ */
74
+ function isNormalKeyringType(keyringType) {
75
+ // Right now, we only have to "exclude" Snap accounts, but this might need to be
76
+ // adapted later on if we have new kind of keyrings!
77
+ return keyringType !== keyring_controller_1.KeyringTypes.snap;
78
+ }
79
+ exports.isNormalKeyringType = isNormalKeyringType;
80
+ //# sourceMappingURL=utils.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.cjs","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":";;;AAAA,2CAA4C;AAC5C,qEAA8E;AAC9E,yDAAsD;AAEtD,+BAAkC;AAElC;;;;;GAKG;AACH,SAAgB,iBAAiB,CAAC,WAAmB;IACnD,qEAAqE;IACrE,4CAA4C;IAC5C,IAAI,IAAA,qCAAgB,EAAC,WAAW,CAAC,EAAE;QACjC,OAAO,SAAS,CAAC;KAClB;IAED,QAAQ,WAAW,EAAE;QACnB,KAAK,iCAAY,CAAC,MAAM,CAAC,CAAC;YACxB,OAAO,SAAS,CAAC;SAClB;QACD,KAAK,iCAAY,CAAC,EAAE,CAAC,CAAC;YACpB,OAAO,SAAS,CAAC;SAClB;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,KAAK,iCAAY,CAAC,IAAI,CAAC,CAAC;YACtB,OAAO,cAAc,CAAC;SACvB;QACD,OAAO,CAAC,CAAC;YACP,MAAM,IAAI,KAAK,CAAC,mBAAmB,WAAW,EAAE,CAAC,CAAC;SACnD;KACF;AACH,CAAC;AAjCD,8CAiCC;AAED;;;;GAIG;AACH,SAAgB,wCAAwC,CACtD,OAAe;IAEf,MAAM,SAAS,GAAG;QAChB,MAAM,EAAE,IAAA,eAAM,EAAC,IAAA,eAAQ,EAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;KAC/C,CAAC;IAEF,OAAO,SAAS,CAAC;AACnB,CAAC;AARD,4FAQC;AAED;;;;GAIG;AACH,SAAgB,iCAAiC,CAAC,OAAe;IAC/D,OAAO,IAAA,SAAI,EAAC,wCAAwC,CAAC,OAAO,CAAC,CAAC,CAAC;AACjE,CAAC;AAFD,8EAEC;AAED;;;;GAIG;AACH,SAAgB,mBAAmB,CAAC,WAAyB;IAC3D,gFAAgF;IAChF,oDAAoD;IACpD,OAAO,WAAW,KAAK,iCAAY,CAAC,IAAI,CAAC;AAC3C,CAAC;AAJD,kDAIC","sourcesContent":["import { toBuffer } from '@ethereumjs/util';\nimport { isCustodyKeyring, KeyringTypes } from '@metamask/keyring-controller';\nimport { sha256 } from 'ethereum-cryptography/sha256';\nimport type { V4Options } from 'uuid';\nimport { v4 as uuid } from 'uuid';\n\n/**\n * Returns the name of the keyring type.\n *\n * @param keyringType - The type of the keyring.\n * @returns The name of the keyring type.\n */\nexport function keyringTypeToName(keyringType: string): string {\n // Custody keyrings are a special case, as they are not a single type\n // they just start with the prefix `Custody`\n if (isCustodyKeyring(keyringType)) {\n return 'Custody';\n }\n\n switch (keyringType) {\n case KeyringTypes.simple: {\n return 'Account';\n }\n case KeyringTypes.hd: {\n return 'Account';\n }\n case KeyringTypes.trezor: {\n return 'Trezor';\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 case KeyringTypes.snap: {\n return 'Snap Account';\n }\n default: {\n throw new Error(`Unknown keyring ${keyringType}`);\n }\n }\n}\n\n/**\n * Generates a UUID v4 options from a given Ethereum address.\n * @param address - The Ethereum address to generate the UUID from.\n * @returns The UUID v4 options.\n */\nexport function getUUIDOptionsFromAddressOfNormalAccount(\n address: string,\n): V4Options {\n const v4options = {\n random: sha256(toBuffer(address)).slice(0, 16),\n };\n\n return v4options;\n}\n\n/**\n * Generates a UUID from a given Ethereum address.\n * @param address - The Ethereum address to generate the UUID from.\n * @returns The generated UUID.\n */\nexport function getUUIDFromAddressOfNormalAccount(address: string): string {\n return uuid(getUUIDOptionsFromAddressOfNormalAccount(address));\n}\n\n/**\n * Check if a keyring type is considered a \"normal\" keyring.\n * @param keyringType - The account's keyring type.\n * @returns True if the keyring type is considered a \"normal\" keyring, false otherwise.\n */\nexport function isNormalKeyringType(keyringType: KeyringTypes): boolean {\n // Right now, we only have to \"exclude\" Snap accounts, but this might need to be\n // adapted later on if we have new kind of keyrings!\n return keyringType !== KeyringTypes.snap;\n}\n"]}
@@ -1,5 +1,5 @@
1
- import { KeyringTypes } from '@metamask/keyring-controller';
2
- import type { V4Options } from 'uuid';
1
+ import { KeyringTypes } from "@metamask/keyring-controller";
2
+ import type { V4Options } from "uuid";
3
3
  /**
4
4
  * Returns the name of the keyring type.
5
5
  *
@@ -25,4 +25,4 @@ export declare function getUUIDFromAddressOfNormalAccount(address: string): stri
25
25
  * @returns True if the keyring type is considered a "normal" keyring, false otherwise.
26
26
  */
27
27
  export declare function isNormalKeyringType(keyringType: KeyringTypes): boolean;
28
- //# sourceMappingURL=utils.d.ts.map
28
+ //# sourceMappingURL=utils.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.cts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AACA,OAAO,EAAoB,YAAY,EAAE,qCAAqC;AAE9E,OAAO,KAAK,EAAE,SAAS,EAAE,aAAa;AAGtC;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAiC7D;AAED;;;;GAIG;AACH,wBAAgB,wCAAwC,CACtD,OAAO,EAAE,MAAM,GACd,SAAS,CAMX;AAED;;;;GAIG;AACH,wBAAgB,iCAAiC,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEzE;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,YAAY,GAAG,OAAO,CAItE"}
@@ -0,0 +1,28 @@
1
+ import { KeyringTypes } from "@metamask/keyring-controller";
2
+ import type { V4Options } from "uuid";
3
+ /**
4
+ * Returns the name of the keyring type.
5
+ *
6
+ * @param keyringType - The type of the keyring.
7
+ * @returns The name of the keyring type.
8
+ */
9
+ export declare function keyringTypeToName(keyringType: string): string;
10
+ /**
11
+ * Generates a UUID v4 options from a given Ethereum address.
12
+ * @param address - The Ethereum address to generate the UUID from.
13
+ * @returns The UUID v4 options.
14
+ */
15
+ export declare function getUUIDOptionsFromAddressOfNormalAccount(address: string): V4Options;
16
+ /**
17
+ * Generates a UUID from a given Ethereum address.
18
+ * @param address - The Ethereum address to generate the UUID from.
19
+ * @returns The generated UUID.
20
+ */
21
+ export declare function getUUIDFromAddressOfNormalAccount(address: string): string;
22
+ /**
23
+ * Check if a keyring type is considered a "normal" keyring.
24
+ * @param keyringType - The account's keyring type.
25
+ * @returns True if the keyring type is considered a "normal" keyring, false otherwise.
26
+ */
27
+ export declare function isNormalKeyringType(keyringType: KeyringTypes): boolean;
28
+ //# sourceMappingURL=utils.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.mts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AACA,OAAO,EAAoB,YAAY,EAAE,qCAAqC;AAE9E,OAAO,KAAK,EAAE,SAAS,EAAE,aAAa;AAGtC;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAiC7D;AAED;;;;GAIG;AACH,wBAAgB,wCAAwC,CACtD,OAAO,EAAE,MAAM,GACd,SAAS,CAMX;AAED;;;;GAIG;AACH,wBAAgB,iCAAiC,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEzE;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,YAAY,GAAG,OAAO,CAItE"}