abstracted river client into a separate npm-like folder