Repository: ccxt/ccxt
File: ts/src/base/Exchange.ts (TypeScript)

Code before:
        if (this.has['cancelOrderWithClientOrderId'] || (this.has['cancelOrderWithClientOrderId'] && this.has['cancelOrderWithClientOrderId'])) {
            return await this.cancelOrder (clientOrderId, symbol, params);
        }
        throw new NotSupported (this.id + ' cancelOrderWithClientOrderId() is not supported yet');
    }

    async cancelOrderWs (id: string, symbol: Str = undefined, params = {}): Promise<Order> {
        throw new NotSupported (this.id + ' cancelOrderWs() is not supported yet');
    }

    async cancelOrders (ids: string[], symbol: Str = undefined, params = {}): Promise<Order[]> {
        throw new NotSupported (this.id + ' cancelOrders() is not supported yet');
    }

    async cancelOrdersWithClientOrderId (clientOrderids: string[], symbol: Str = undefined, params = {}) {
        /**
         * @method
         * @name cancelOrdersWithClientOrderId
         * @description create a market order by providing the symbol, side and cost
         * @param {string[]} clientOrderids client order Ids
         * @param {string} symbol unified symbol of the market to create an order in
         * @param {object} [params] extra parameters specific to the exchange API endpoint
         * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
         */
        if (this.has['cancelOrdersWithClientOrderId'] || (this.has['cancelOrdersWithClientOrderId'] && this.has['cancelOrdersWithClientOrderId'])) {
            return await this.cancelOrder (clientOrderids[0], symbol, params);
        }
        throw new NotSupported (this.id + ' cancelOrdersWithClientOrderId() is not supported yet');
    }

    async cancelOrdersWs (ids: string[], symbol: Str = undefined, params = {}): Promise<Order[]> {
        throw new NotSupported (this.id + ' cancelOrdersWs() is not supported yet');
    }

    async cancelAllOrders (symbol: Str = undefined, params = {}): Promise<Order[]> {
        throw new NotSupported (this.id + ' cancelAllOrders() is not supported yet');
    }

    async cancelAllOrdersAfter (timeout: Int, params = {}): Promise<{}> {
        throw new NotSupported (this.id + ' cancelAllOrdersAfter() is not supported yet');
    }

    async cancelOrdersForSymbols (orders: CancellationRequest[], params = {}): Promise<Order[]> {
        throw new NotSupported (this.id + ' cancelOrdersForSymbols() is not supported yet');
    }

    async cancelAllOrdersWs (symbol: Str = undefined, params = {}): Promise<Order[]> {
        throw new NotSupported (this.id + ' cancelAllOrdersWs() is not supported yet');
    }

    async cancelUnifiedOrder (order: Order, params = {}): Promise<{}> {

Review comment (suggestion):
same here, also, why are you discarding all clientorderIds other than the first? 😅 
IN this case the method to use is `cancelOrders` and not cancelOrder

Code after:
        const extendedParams = this.extend (params, { 'clientOrderId': clientOrderId });
        return await this.cancelOrder ('', symbol, extendedParams);
    }

    async cancelOrderWs (id: string, symbol: Str = undefined, params = {}): Promise<Order> {
        throw new NotSupported (this.id + ' cancelOrderWs() is not supported yet');
    }

    async cancelOrders (ids: string[], symbol: Str = undefined, params = {}): Promise<Order[]> {
        throw new NotSupported (this.id + ' cancelOrders() is not supported yet');
    }

    /**
     * @method
     * @name cancelOrdersWithClientOrderIds
     * @description create a market order by providing the symbol, side and cost
     * @param {string[]} clientOrderIds client order Ids
     * @param {string} symbol unified symbol of the market to create an order in
     * @param {object} [params] extra parameters specific to the exchange API endpoint
     * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
     */
    async cancelOrdersWithClientOrderIds (clientOrderIds: string[], symbol: Str = undefined, params = {}) {
        const extendedParams = this.extend (params, { 'clientOrderIds': clientOrderIds });
        return await this.cancelOrders ([], symbol, extendedParams);
    }

    async cancelOrdersWs (ids: string[], symbol: Str = undefined, params = {}): Promise<Order[]> {
        throw new NotSupported (this.id + ' cancelOrdersWs() is not supported yet');
    }

    async cancelAllOrders (symbol: Str = undefined, params = {}): Promise<Order[]> {
        throw new NotSupported (this.id + ' cancelAllOrders() is not supported yet');
    }

    async cancelAllOrdersAfter (timeout: Int, params = {}): Promise<{}> {
        throw new NotSupported (this.id + ' cancelAllOrdersAfter() is not supported yet');
    }

    async cancelOrdersForSymbols (orders: CancellationRequest[], params = {}): Promise<Order[]> {
        throw new NotSupported (this.id + ' cancelOrdersForSymbols() is not supported yet');
    }

    async cancelAllOrdersWs (symbol: Str = undefined, params = {}): Promise<Order[]> {
        throw new NotSupported (this.id + ' cancelAllOrdersWs() is not supported yet');
    }

    async cancelUnifiedOrder (order: Order, params = {}): Promise<{}> {
        return this.cancelOrder (this.safeString (order, 'id'), this.safeString (order, 'symbol'), params);
    }

    async fetchOrders (symbol: Str = undefined, since: Int = undefined, limit: Int = undefined, params = {}): Promise<Order[]> {