# host/events/cancel_all_orders.js

    'use strict'

    const _isObject = require('lodash/isObject')
    const withAOUpdate = require('../with_ao_update')

    /**
     * Cancels all provided orders with the specified delay, and removes them from
     * the AO instance state.
     *
     * @param {object} aoHost - algo host
     * @param {string} gid - AO instance gid
     * @param {object[]|Array[]} orders - orders to be cancelled
     * @param {number} delay - cancellation delay
     * @returns {object} nextInstanceState
     */
    module.exports = async (aoHost, gid, orders, delay) => {
      return withAOUpdate(aoHost, gid, async (instance = {}) => {
        const { state = {}, h = {} } = instance
        const { cancelOrderWithDelay, debug } = h
        const allOrders = _isObject(orders)
          ? Object.values(orders)
          : orders

        // Don't try to cancel market orders
        const _orders = allOrders
          .filter(o => !/MARKET/.test(o.type) && o.id)

        let nextState = state

        for (let i = 0; i < _orders.length; i += 1) {
          const o = _orders[i]

          debug(
            'canceling order %s %f @ %f [cid %s id %s]',
            o.type, o.amount, o.price, o.cid, o.id
          )

          nextState = await cancelOrderWithDelay(nextState, delay, o)
        }

        return nextState
      })
    }