# Source: src/main/js/wallet/model/MoneroWalletListener.js

    /**
     * Default wallet listener which takes no action on notifications.
     */
    class MoneroWalletListener {

      /**
       * Invoked as the wallet is synchronized.
       *
       * @param {number} height - height of the synced block
       * @param {number} startHeight - starting height of the sync request
       * @param {number} endHeight - ending height of the sync request
       * @param {number} percentDone - sync progress as a percentage
       * @param {string} message - human-readable description of the current progress
       */
      async onSyncProgress(height, startHeight, endHeight, percentDone, message) { }

      /**
       * Invoked when a new block is added to the chain.
       *
       * @param {int} height - the height of the new block (i.e. the number of blocks before it).
       */
      async onNewBlock(height) { }

      /**
       * Invoked when the wallet's balances change.
       *
       * @param {BigInteger} newBalance - new wallet balance
       * @param {BigInteger} newUnlockedBalance - new unlocked wallet balance
       */
      async onBalancesChanged(newBalance, newUnlockedBalance) { }

      /**
       * Invoked 3 times per received output: once when unconfirmed, once when confirmed, and
       * once when unlocked.
       *
       * The notified output includes basic fields only, so the output or its transaction should be fetched to get all available fields.
       *
       * @param {MoneroOutputWallet} output - the received output
       */
      async onOutputReceived(output) { }

      /**
       * Invoked twice per spent output: once when confirmed and once when unlocked.
       *
       * The notified output includes basic fields only, so the output or its transaction should be fetched to get all available fields.
       *
       * @param {MoneroOutputWallet} output - the spent output
       */
      async onOutputSpent(output) { }
    }

    module.exports = MoneroWalletListener;