import got from 'got' const stringify = obj => JSON.stringify(obj, null, 2) const parse = str => JSON.parse(str, (_, v) => { if ( v !== null && typeof v === 'object' && 'type' in v && v.type === 'Buffer' && 'data' in v && Array.isArray(v.data)) { return Buffer.from(v.data) } return v }) class CloudDBAdapter { constructor(url, { serialize = stringify, deserialize = parse, fetchOptions = {} } = {}) { this.url = url this.serialize = serialize this.deserialize = deserialize this.fetchOptions = fetchOptions } async read() { try { let res = await got(this.url, { method: 'GET', headers: { 'Accept': 'application/json;q=0.9,text/plain' }, ...this.fetchOptions }) if (res.statusCode !== 200) throw res.statusMessage return this.deserialize(res.body) } catch (e) { return null } } async write(obj) { let res = await got(this.url, { method: 'POST', headers: { 'Content-Type': 'application/json' }, ...this.fetchOptions, body: this.serialize(obj) }) if (res.statusCode !== 200) throw res.statusMessage return res.body } } export default CloudDBAdapter