This stuff looks *really* similar to gcloud.storage - can we abstract up into a JsonConnection ?