{"version":3,"file":"keyring.mjs","sourceRoot":"","sources":["../../src/api/keyring.ts"],"names":[],"mappings":"","sourcesContent":["import type { AccountId, JsonRpcRequest } from '@metamask/keyring-utils';\nimport type { Json } from '@metamask/utils';\n\nimport type { CreateAccountOptions } from '../v2/api';\nimport type { KeyringAccount } from './account';\nimport type { ResolvedAccountAddress } from './address';\nimport type { Balance } from './balance';\nimport type { CaipChainId, CaipAssetType, CaipAssetTypeOrId } from './caip';\nimport type { DiscoveredAccount } from './discovery';\nimport type { EntropySourceId } from './entropy';\nimport type { KeyringAccountData } from './export';\nimport type { MetaMaskOptions } from './options';\nimport type { Paginated, Pagination } from './pagination';\nimport type { KeyringRequest } from './request';\nimport type { KeyringResponse } from './response';\nimport type { Transaction } from './transaction';\n\n/**\n * Keyring interface.\n *\n * Represents the functionality and operations related to managing accounts and\n * handling requests.\n */\nexport type Keyring = {\n  /**\n   * List accounts.\n   *\n   * Retrieves an array of KeyringAccount objects representing the available\n   * accounts.\n   *\n   * @returns A promise that resolves to an array of KeyringAccount objects.\n   */\n  listAccounts(): Promise<KeyringAccount[]>;\n\n  /**\n   * Get an account.\n   *\n   * Retrieves the KeyringAccount object for the given account ID.\n   *\n   * @param id - The ID of the account to retrieve.\n   * @returns A promise that resolves to the KeyringAccount object if found, or\n   * undefined otherwise.\n   */\n  getAccount(id: string): Promise<KeyringAccount | undefined>;\n\n  /**\n   * Create an account.\n   *\n   * Creates a new account with optional, keyring-defined, account options.\n   *\n   * @param options - Keyring-defined options for the account (optional). The\n   * 'metamask' internal options needs to be re-emitted during `notify:*` events.\n   * @returns A promise that resolves to the newly created KeyringAccount\n   * object without any private information.\n   */\n  createAccount(\n    options?: Record<string, Json> & MetaMaskOptions,\n  ): Promise<KeyringAccount>;\n\n  /**\n   * Creates one or more new accounts according to the provided options.\n   *\n   * Deterministic account creation MUST be idempotent, meaning that for\n   * deterministic algorithms, like BIP-44, calling this method with the same\n   * options should always return the same accounts, even if the accounts\n   * already exist in the keyring.\n   *\n   * @param options - Options describing how to create the account(s).\n   * @returns A promise that resolves to an array of the created account objects.\n   */\n  createAccounts?(options: CreateAccountOptions): Promise<KeyringAccount[]>;\n\n  /**\n   * Lists the assets of an account (fungibles and non-fungibles) represented\n   * by their respective CAIP-19:\n   * - Asset types for fungibles assets.\n   * - Asset IDs for non-fungible ones.\n   *\n   * @param id - The ID of the account to list the assets for.\n   * @returns A promise that resolves to list of assets for that account.\n   */\n  listAccountAssets?(id: string): Promise<CaipAssetTypeOrId[]>;\n\n  /**\n   * Lists the transactions of an account, paginated and ordered by the most\n   * recent first.\n   *\n   * The pagination options are used to limit the number of transactions in the\n   * response and to iterate over the results.\n   *\n   * @param id - The ID of the account to list the transactions for.\n   * @param pagination - The pagination options.\n   * @returns A promise that resolves to the next page of transactions.\n   */\n  listAccountTransactions?(\n    id: string,\n    pagination: Pagination,\n  ): Promise<Paginated<Transaction>>;\n\n  /**\n   * Discover accounts.\n   *\n   * This method is called by the client to allow the keyring to discover\n   * existing accounts based on the provided scopes and entropy source ID. Are\n   * considered existing accounts, accounts that have at least one transaction,\n   * as per BIP-44.\n   *\n   * The `groupIndex` is used to group accounts with the same value. In\n   * strictly BIP-44 wallets, it matches `account_index`, but in wallets that\n   * deviate from BIP-44 recommendations, it may align with a different path\n   * level for compatibility.\n   *\n   * @param scopes - The list of scopes for account discovery.\n   * @param entropySource - The ID of the entropy source used to derive the accounts.\n   * @param groupIndex - The group index that should be used to derive the accounts.\n   * @returns A promise resolving to a list of discovered accounts.\n   */\n  discoverAccounts?(\n    scopes: CaipChainId[],\n    entropySource: EntropySourceId,\n    groupIndex: number,\n  ): Promise<DiscoveredAccount[]>;\n\n  /**\n   * Retrieve the balances of a given account.\n   *\n   * This method fetches the balances of specified assets for a given account\n   * ID. It returns a promise that resolves to an object where the keys are\n   * asset types and the values are balance objects containing the amount and\n   * unit.\n   *\n   * @example\n   * ```ts\n   * await keyring.getAccountBalances(\n   *   '43550276-c7d6-4fac-87c7-00390ad0ce90',\n   *   ['bip122:000000000019d6689c085ae165831e93/slip44:0']\n   * );\n   * // Returns something similar to:\n   * // {\n   * //   'bip122:000000000019d6689c085ae165831e93/slip44:0': {\n   * //     amount: '0.0001',\n   * //     unit: 'BTC',\n   * //   }\n   * // }\n   * ```\n   * @param id - ID of the account to retrieve the balances for.\n   * @param assets - Array of asset types (CAIP-19) to retrieve balances for.\n   * @returns A promise that resolves to an object mapping asset types to their\n   * respective balances.\n   */\n  getAccountBalances?(\n    id: string,\n    assets: CaipAssetType[],\n  ): Promise<Record<CaipAssetType, Balance>>;\n\n  /**\n   * Resolves the address of an account from a signing request.\n   *\n   * This is required by the routing system of MetaMask to dispatch\n   * incoming non-EVM dapp signing requests.\n   *\n   * @param scope - Request's scope (CAIP-2).\n   * @param request - Signing request object.\n   * @returns A Promise that resolves to the account address that must\n   * be used to process this signing request, or null if none candidates\n   * could be found.\n   */\n  resolveAccountAddress?(\n    scope: CaipChainId,\n    request: JsonRpcRequest,\n  ): Promise<ResolvedAccountAddress | null>;\n\n  /**\n   * Set the selected accounts.\n   *\n   * @param accounts - The accounts to set as selected.\n   */\n  setSelectedAccounts?(accounts: AccountId[]): Promise<void>;\n\n  /**\n   * Filter supported chains for a given account.\n   *\n   * @param id - ID of the account to be checked.\n   * @param chains - List of chains (CAIP-2) to be checked.\n   * @returns A Promise that resolves to a filtered list of CAIP-2 IDs\n   * representing the supported chains.\n   */\n  filterAccountChains(id: string, chains: string[]): Promise<string[]>;\n\n  /**\n   * Update an account.\n   *\n   * Updates the account with the given account object. Does nothing if the\n   * account does not exist.\n   *\n   * @param account - The updated account object.\n   * @returns A promise that resolves when the account is successfully updated.\n   */\n  updateAccount(account: KeyringAccount): Promise<void>;\n\n  /**\n   * Delete an account from the keyring.\n   *\n   * Deletes the account with the given ID from the keyring.\n   *\n   * @param id - The ID of the account to delete.\n   * @returns A promise that resolves when the account is successfully deleted.\n   */\n  deleteAccount(id: string): Promise<void>;\n\n  /**\n   * Exports an account's private key.\n   *\n   * If the keyring cannot export a private key, this function should throw an\n   * error.\n   *\n   * @param id - The ID of the account to export.\n   * @returns A promise that resolves to the exported account.\n   */\n  exportAccount?(id: string): Promise<KeyringAccountData>;\n\n  /**\n   * List all submitted requests.\n   *\n   * Retrieves an array of KeyringRequest objects representing the submitted\n   * requests.\n   *\n   * @returns A promise that resolves to an array of KeyringRequest objects.\n   */\n  listRequests?(): Promise<KeyringRequest[]>;\n\n  /**\n   * Get a request.\n   *\n   * Retrieves the KeyringRequest object for the given request ID.\n   *\n   * @param id - The ID of the request to retrieve.\n   * @returns A promise that resolves to the KeyringRequest object if found, or\n   * undefined otherwise.\n   */\n  getRequest?(id: string): Promise<KeyringRequest | undefined>;\n\n  /**\n   * Submit a request.\n   *\n   * Submits the given KeyringRequest object.\n   *\n   * @param request - The KeyringRequest object to submit.\n   * @returns A promise that resolves to the request response.\n   */\n  submitRequest(request: KeyringRequest): Promise<KeyringResponse>;\n\n  /**\n   * Approve a request.\n   *\n   * Approves the request with the given ID and sets the response if provided.\n   *\n   * @param id - The ID of the request to approve.\n   * @param data - The response to the request (optional).\n   * @returns A promise that resolves when the request is successfully\n   * approved.\n   */\n  approveRequest?(id: string, data?: Record<string, Json>): Promise<void>;\n\n  /**\n   * Reject a request.\n   *\n   * Rejects the request with the given ID.\n   *\n   * @param id - The ID of the request to reject.\n   * @returns A promise that resolves when the request is successfully\n   * rejected.\n   */\n  rejectRequest?(id: string): Promise<void>;\n};\n"]}