{"version":3,"file":"KeyringClient.cjs","sourceRoot":"","sources":["../src/KeyringClient.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n  ApproveRequestResponseStruct,\n  CreateAccountResponseStruct,\n  DeleteAccountResponseStruct,\n  ExportAccountResponseStruct,\n  FilterAccountChainsResponseStruct,\n  GetAccountBalancesResponseStruct,\n  GetAccountResponseStruct,\n  GetRequestResponseStruct,\n  ListAccountsResponseStruct,\n  ListAccountTransactionsResponseStruct,\n  ListAccountAssetsResponseStruct,\n  ListRequestsResponseStruct,\n  RejectRequestResponseStruct,\n  SubmitRequestResponseStruct,\n  UpdateAccountResponseStruct,\n  KeyringRpcMethod,\n  ResolveAccountAddressResponseStruct,\n  DiscoverAccountsResponseStruct,\n} from '@metamask/keyring-api';\nimport type {\n  Keyring,\n  KeyringAccount,\n  KeyringRequest,\n  KeyringAccountData,\n  KeyringResponse,\n  Balance,\n  TransactionsPage,\n  Pagination,\n  ResolvedAccountAddress,\n  CaipChainId,\n  CaipAssetType,\n  CaipAssetTypeOrId,\n  EntropySourceId,\n  DiscoveredAccount,\n} from '@metamask/keyring-api';\nimport type { JsonRpcRequest } from '@metamask/keyring-utils';\nimport { strictMask } from '@metamask/keyring-utils';\nimport { assert } from '@metamask/superstruct';\nimport type { Json } from '@metamask/utils';\nimport { v4 as uuid } from 'uuid';\n\nexport type Sender = {\n  send(request: JsonRpcRequest): Promise<Json>;\n};\n\nexport class KeyringClient implements Keyring {\n  readonly #sender: Sender;\n\n  /**\n   * Create a new instance of `KeyringClient`.\n   *\n   * @param sender - The `Sender` instance to use to send requests to the snap.\n   */\n  constructor(sender: Sender) {\n    this.#sender = sender;\n  }\n\n  /**\n   * Send a request to the snap and return the response.\n   *\n   * @param partial - A partial JSON-RPC request (method and params).\n   * @returns A promise that resolves to the response to the request.\n   */\n  protected async send(\n    partial: Omit<JsonRpcRequest, 'jsonrpc' | 'id'>,\n  ): Promise<Json> {\n    return this.#sender.send({\n      jsonrpc: '2.0',\n      id: uuid(),\n      ...partial,\n    });\n  }\n\n  async listAccounts(): Promise<KeyringAccount[]> {\n    return strictMask(\n      await this.send({\n        method: KeyringRpcMethod.ListAccounts,\n      }),\n      ListAccountsResponseStruct,\n    );\n  }\n\n  async getAccount(id: string): Promise<KeyringAccount> {\n    return strictMask(\n      await this.send({\n        method: KeyringRpcMethod.GetAccount,\n        params: { id },\n      }),\n      GetAccountResponseStruct,\n    );\n  }\n\n  async getAccountBalances(\n    id: string,\n    assets: CaipAssetType[],\n  ): Promise<Record<CaipAssetType, Balance>> {\n    return strictMask(\n      await this.send({\n        method: KeyringRpcMethod.GetAccountBalances,\n        params: { id, assets },\n      }),\n      GetAccountBalancesResponseStruct,\n    );\n  }\n\n  async createAccount(\n    options: Record<string, Json> = {},\n  ): Promise<KeyringAccount> {\n    return strictMask(\n      await this.send({\n        method: KeyringRpcMethod.CreateAccount,\n        params: { options },\n      }),\n      CreateAccountResponseStruct,\n    );\n  }\n\n  async discoverAccounts(\n    scopes: CaipChainId[],\n    entropySource: EntropySourceId,\n    groupIndex: number,\n  ): Promise<DiscoveredAccount[]> {\n    return strictMask(\n      await this.send({\n        method: KeyringRpcMethod.DiscoverAccounts,\n        params: { scopes, entropySource, groupIndex },\n      }),\n      DiscoverAccountsResponseStruct,\n    );\n  }\n\n  async listAccountTransactions(\n    id: string,\n    pagination: Pagination,\n  ): Promise<TransactionsPage> {\n    return strictMask(\n      await this.send({\n        method: KeyringRpcMethod.ListAccountTransactions,\n        params: { id, pagination },\n      }),\n      ListAccountTransactionsResponseStruct,\n    );\n  }\n\n  async listAccountAssets(id: string): Promise<CaipAssetTypeOrId[]> {\n    return strictMask(\n      await this.send({\n        method: KeyringRpcMethod.ListAccountAssets,\n        params: { id },\n      }),\n      ListAccountAssetsResponseStruct,\n    );\n  }\n\n  async resolveAccountAddress(\n    scope: CaipChainId,\n    request: JsonRpcRequest,\n    // FIXME: eslint is complaning about `ResolvedAccountAddress` being `any`, so disable this for now:\n    // eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents\n  ): Promise<ResolvedAccountAddress | null> {\n    return strictMask(\n      await this.send({\n        method: KeyringRpcMethod.ResolveAccountAddress,\n        params: { scope, request },\n      }),\n      ResolveAccountAddressResponseStruct,\n    );\n  }\n\n  async filterAccountChains(id: string, chains: string[]): Promise<string[]> {\n    return strictMask(\n      await this.send({\n        method: KeyringRpcMethod.FilterAccountChains,\n        params: { id, chains },\n      }),\n      FilterAccountChainsResponseStruct,\n    );\n  }\n\n  async updateAccount(account: KeyringAccount): Promise<void> {\n    assert(\n      await this.send({\n        method: KeyringRpcMethod.UpdateAccount,\n        params: { account },\n      }),\n      UpdateAccountResponseStruct,\n    );\n  }\n\n  async deleteAccount(id: string): Promise<void> {\n    assert(\n      await this.send({\n        method: KeyringRpcMethod.DeleteAccount,\n        params: { id },\n      }),\n      DeleteAccountResponseStruct,\n    );\n  }\n\n  async exportAccount(id: string): Promise<KeyringAccountData> {\n    return strictMask(\n      await this.send({\n        method: KeyringRpcMethod.ExportAccount,\n        params: { id },\n      }),\n      ExportAccountResponseStruct,\n    );\n  }\n\n  async listRequests(): Promise<KeyringRequest[]> {\n    return strictMask(\n      await this.send({\n        method: KeyringRpcMethod.ListRequests,\n      }),\n      ListRequestsResponseStruct,\n    );\n  }\n\n  async getRequest(id: string): Promise<KeyringRequest> {\n    return strictMask(\n      await this.send({\n        method: KeyringRpcMethod.GetRequest,\n        params: { id },\n      }),\n      GetRequestResponseStruct,\n    );\n  }\n\n  async submitRequest(request: KeyringRequest): Promise<KeyringResponse> {\n    return strictMask(\n      await this.send({\n        method: KeyringRpcMethod.SubmitRequest,\n        params: request,\n      }),\n      SubmitRequestResponseStruct,\n    );\n  }\n\n  async approveRequest(\n    id: string,\n    data: Record<string, Json> = {},\n  ): Promise<void> {\n    assert(\n      await this.send({\n        method: KeyringRpcMethod.ApproveRequest,\n        params: { id, data },\n      }),\n      ApproveRequestResponseStruct,\n    );\n  }\n\n  async rejectRequest(id: string): Promise<void> {\n    assert(\n      await this.send({\n        method: KeyringRpcMethod.RejectRequest,\n        params: { id },\n      }),\n      RejectRequestResponseStruct,\n    );\n  }\n}\n"]}