oasis/src/pages/models/lib/cooler.js

97 lines
1.9 KiB
JavaScript
Raw Normal View History

2019-07-28 20:49:01 +00:00
'use strict'
2019-08-15 01:10:22 +00:00
const debug = require('debug')('oasis')
const flotilla = require('@fraction/flotilla')
2019-06-23 18:46:22 +00:00
const ssbClient = require('ssb-client')
const ssbConfig = require('ssb-config')
2019-08-15 01:10:22 +00:00
2019-09-23 22:37:26 +00:00
const server = flotilla({ ws: { http: false } })
2019-08-15 01:10:22 +00:00
2019-07-03 18:21:47 +00:00
const rawConnect = () => new Promise((resolve, reject) => {
ssbClient({
manifest: {
2019-10-08 01:53:21 +00:00
about: {
socialValue: 'async',
read: 'source'
},
backlinks: { read: 'source' },
2019-10-01 20:44:31 +00:00
blobs: {
get: 'source',
ls: 'source',
want: 'async'
},
2019-11-15 19:42:32 +00:00
conn: {
peers: 'source'
},
createUserStream: 'source',
2019-09-23 15:45:18 +00:00
createHistoryStream: 'source',
get: 'sync',
messagesByType: 'source',
publish: 'async',
status: 'async',
whoami: 'sync',
2019-10-01 00:37:30 +00:00
tangle: { branch: 'async' },
query: { read: 'source' }
}
}, (err, api) => {
2019-08-15 01:10:22 +00:00
if (err) {
reject(err)
} else {
resolve(api)
}
2019-07-03 18:21:47 +00:00
})
})
const db = {
2019-08-15 01:10:22 +00:00
connect () {
2019-07-03 18:21:47 +00:00
return handle
2019-06-23 18:46:22 +00:00
},
/**
* @param {function} method
*/
2019-08-15 01:10:22 +00:00
get (method, ...opts) {
2019-06-23 18:46:22 +00:00
return new Promise((resolve, reject) => {
method(...opts, (err, val) => {
2019-08-15 01:10:22 +00:00
if (err) {
reject(err)
} else {
resolve(val)
}
2019-06-23 18:46:22 +00:00
})
})
},
2019-08-15 01:10:22 +00:00
read (method, ...args) {
return new Promise((resolve) => {
2019-06-23 18:46:22 +00:00
resolve(method(...args))
})
}
}
debug.enabled = true
const handle = new Promise((resolve) => {
2019-07-03 18:21:47 +00:00
rawConnect().then((ssb) => {
debug('Using pre-existing Scuttlebutt server instead of starting one')
resolve(ssb)
}).catch(() => {
debug('Initial connection attempt failed')
debug('Starting Scuttlebutt server')
2019-07-03 18:21:47 +00:00
server(ssbConfig)
const connectOrRetry = () => {
rawConnect().then((ssb) => {
debug('Retrying connection to own server')
resolve(ssb)
}).catch((e) => {
debug(e)
connectOrRetry()
})
}
2019-07-03 18:21:47 +00:00
connectOrRetry()
})
})
module.exports = db