class Travis::Client::Listener::Socket

def fetch_auth(*channels)

def fetch_auth(*channels)
  channels.select! { |c| signatures[c].nil? if c.start_with? 'private-' }
  return unless channels.any?
  signatures.merge! session.post_raw('/pusher/auth', channels:,
                                                     socket_id:)['channels']
end

def get_private_auth(channel)

def get_private_auth(channel)
  fetch_auth(channel.name)
  signatures[channel.name]
end

def handle_error(data)

def handle_error(data)
  if data.is_a? Hash
    code = data['code']
    message = data['message']
  end
  message ||= data.inspect
  case code
  when 4100             then reconnect(1)
  when 4200, 4201, 4202 then reconnect
  else raise Travis::Client::Error, format('Pusher error: %s (code: %p)', message, code)
  end
end

def initialize(application_key, options = {})

def initialize(application_key, options = {})
  @session    = options.fetch(:session)
  @signatures = {}
  super
  bind('pusher:error') do |data|
    handle_error(data)
  end
end

def reconnect(delay = nil)

def reconnect(delay = nil)
  disconnect if connected
  sleep delay if delay&.positive?
  connect
end

def subscribe_all

def subscribe_all
  # bulk auth on connect
  fetch_auth(*channels.channels.keys)
  super
end