code: func (h *Handler) NewRequest(ctx context.Context, feed *Feed) (request *Request, err error) {
  	if feed == nil {
  		return nil, NewError(ErrInvalidValue, "feed cannot be nil")
  	}
  
  	now := TimestampProvider.Now().Time
  	request = new(Request)
  	request.Header.Version = ProtocolVersion
  
  	query := NewQueryLatest(feed, lookup.NoClue)
  
  	feedUpdate, err := h.Lookup(ctx, query)
  	if err != nil {
  		if err.(*Error).code != ErrNotFound {
  			return nil, err
  		}
  		// not finding updates means that there is a network error
  		// or that the feed really does not have updates
  	}
  
  	request.Feed = *feed
  
  	// if we already have an update, then find next epoch
  	if feedUpdate != nil {
  		request.Epoch = lookup.GetNextEpoch(feedUpdate.Epoch, now)
  	} else {
  		request.Epoch = lookup.GetFirstEpoch(now)
  	}
  
  	return request, nil
  }
docs: // NewRequest prepares a Request structure with all the necessary information to
  // just add the desired data and sign it.
  // The resulting structure can then be signed and passed to Handler.Update to be verified and sent