import Balance from "../models/Balance" import Account from "./Account" import { Instantiable, InstantiableConfig } from "../Instantiable.abstract" /** * Account submodule of Ocean Protocol. */ export class OceanAccounts extends Instantiable { /** * Returns the instance of OceanAccounts. * @return {Promise} */ public static async getInstance(config: InstantiableConfig): Promise { const instance = new OceanAccounts() instance.setInstanceConfig(config) return instance } /** * Returns the list of accounts. * @return {Promise} */ public async list(): Promise { // retrieve eth accounts const ethAccounts: string[] = await this.web3.eth.getAccounts() const accountPromises = ethAccounts .map(address => new Account(address, this.instanceConfig)) .map(async account => { const token = await this.ocean.auth.restore(account) if (token) { account.setToken(token) } return account }) return Promise.all(accountPromises) } /** * Return account balance. * @param {Account} account Account instance. * @return {Promise} Ether and Ocean Token balance. */ public balance(account: Account): Promise { return account.getBalance() } /** * Request tokens for a account. * @param {Account} account Account instance. * @param {number} amount Token amount. * @return {Promise} Success. */ public async requestTokens(account: Account, amount: number): Promise { try { await account.requestTokens(amount) return true } catch (e) { return false } } }