def push(type, payload = nil, target = nil, options = {})
      raise RuntimeError, "#{self.class.name}#init was not called" unless @auth
      client = (@api && @api.support?(type)) ? @api : @router
      client.push(type, payload, target, options)
    end
def push(type, payload = nil, target = nil, options = {})
      raise RuntimeError, "#{self.class.name}#init was not called" unless @auth
      client = (@api && @api.support?(type)) ? @api : @router
      client.push(type, payload, target, options)
    end
Route a request to a single target or multiple targets with no response expected
 Persist the request en route to reduce the chance of it being lost at the expense of some
 additional network overhead
 Enqueue the request if the target is not currently available
 Never automatically retry the request if there is the possibility of it being duplicated
 Set time-to-live to be forever

 @param [String] type of request as path specifying actor and action
 @param [Hash, NilClass] payload for request
 @param [String, Hash, NilClass] target for request, which may be identity of specific
   target, hash for selecting potentially multiple targets, or nil if routing solely
   using type; hash may contain:
   [Array] :tags that must all be associated with a target for it to be selected
   [Hash] :scope for restricting routing which may contain:
     [Integer] :account id that agents must be associated with to be included
     [Integer] :shard id that agents must be in to be included, or if value is
       Packet::GLOBAL, ones with no shard id
   [Symbol] :selector for picking from qualified targets: :any or :all;
     defaults to :any

 @option options [String] :request_uuid uniquely identifying this request; defaults to
   randomly generated
 @option options [Numeric] :time_to_live seconds before request expires and is to be ignored;
   non-positive value or nil means never expire

 @return [NilClass] always nil since there is no expected response to the request

 @raise [RuntimeError] init was not called
 @raise [Exceptions::Unauthorized] authorization failed
 @raise [Exceptions::ConnectivityFailure] cannot connect to server, lost connection
   to it, or it is out of service or too busy to respond
 @raise [Exceptions::RetryableError] request failed but if retried may succeed
 @raise [Exceptions::Terminating] closing client and terminating service
 @raise [Exceptions::InternalServerError] internal error in server being accessed