code: function parseAccountList(resp) {
    return new Promise((resolve, reject) => {
      const $ = cheerio.load(resp.body);
      const accountRows = $('.main_group_account_row');
  
      if (!accountRows || accountRows.length === 0) {
        return reject(new Error('Cannot find account list.'));
      }
  
      const accounts = [];
      accountRows.each((index, elem) => {
        try {
          const $$ = cheerio.load(elem);
          const account = {
            name: $$('.NicknameField .left a')
              .text()
              .trim(),
            link: $$('.NicknameField .left a').attr('href'),
            bsb: $$('.BSBField .text')
              .text()
              .replace(/\s+/g, '')
              .trim(),
            account: $$('.AccountNumberField .text')
              .text()
              .replace(/\s+/g, '')
              .trim(),
            balance: parseCurrencyHtml($$('.AccountBalanceField')),
            available: parseCurrencyHtml($$('.AvailableFundsField')),
          };
          //  Assemble the `bsb` and `account` to construct `number`
          account.number = `${account.bsb}${account.account}`;
          account.type = `${/ACCOUNT_PRODUCT_TYPE=(\w+)/.exec(account.link)[1]}`;
          //  push to the final account list if it's valid
          if (account.name && account.link && account.account) {
            accounts.push(account);
          }
        } catch (err) {
          debug(`parseAccountList(): ${err}`);
          debug(`parseAccountList(): elem => ${util.inspect(elem)}`);
        }
      });
  
      debug(`parseAccountList(): found ${accounts.length} accounts`);
      return resolve(Object.assign({}, resp, { accounts }));
    });
  }
docs: Account format: { name, link, bsb, account, number: {bsb+account} balance }