WIP client: min client for discovery

i think using the general struct internally is fine. because the goal for all these is to generate a http request, a general one could gather all related info and do the work. it makes code reading/writing much easier.