openAuthenticatedPublicWebsocket(apiKey, apiSecret) {
    const ws = new BFX({
      version: 2,
      transform: true,
      apiKey: apiKey,
      apiSecret: apiSecret,
      ws: {
        autoReconnect: true,
        reconnectDelay: 10 * 1000,
        packetWDDelay: 60 * 1000 // - watch-dog forced reconnection delay
      }
    }).ws();

    const me = this;

    this.logger.info('Bitfinex: Authenticated Websocket connecting');

    ws.on('error', err => {
      me.logger.error(`Bitfinex: Authenticated Websocket error: ${JSON.stringify([err.message, err])}`);
    });

    ws.on('close', () => {
      me.logger.error('Bitfinex: Authenticated Websocket Connection closed; reconnecting soon');
    });

    ws.once('open', () => {
      me.logger.debug('Bitfinex: Authenticated Websocket Connection open');

      // authenticate
      ws.auth();
    });

    ws.onOrderUpdate({}, order => {
      me.onOrderUpdate(order);
    });

    ws.onOrderNew({}, order => {
      me.onOrderUpdate(order);
    });

    ws.onOrderClose({}, order => {
      me.onOrderUpdate(order);
    });

    ws.onOrderSnapshot({}, orders => {
      const marginOrder = orders.filter(order => !order.type.toLowerCase().includes('exchange'));

      Bitfinex.createExchangeOrders(marginOrder).forEach(order => {
        me.orders[order.id] = order;
      });
    });

    ws.onPositionSnapshot({}, positions => {
      me.onPositions(positions);
    });

    ws.onPositionUpdate({}, position => {
      me.onPositionUpdate(position);
    });

    ws.onPositionNew({}, position => {
      me.onPositionUpdate(position);
    });

    ws.onPositionClose({}, position => {
      me.onPositionUpdate(position);
    });

    ws.onBalanceInfoUpdate({}, balanceInfo => {
      this.balanceInfo = balanceInfo;
    });

    ws.open();

    return ws;
  }
Create a websocket just for authenticated requests a written is official Bitfinex documentation

@param apiKey
@param apiSecret
@returns {WSv1|WSv2}