Repository navigation
Expand file tree
/
Copy pathdb.js
More file actions
98 lines (86 loc) · 2.85 KB
/
Copy pathdb.js
File metadata and controls
98 lines (86 loc) · 2.85 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
const hypertrie = require('hypertrie')
const { NanoresourcePromise: Nanoresource } = require('nanoresource-promise/emitter')
const { NetworkStatus } = require('@hyperspace/rpc/messages')
const INTERNAL_NAMESPACE = '@hyperspace:internal'
const NETWORK_PREFIX = 'network'
module.exports = class HyperspaceDb extends Nanoresource {
constructor (corestore) {
super()
this.corestore = corestore
this._db = null
}
async _open () {
this._namespacedStore = this.corestore.namespace(INTERNAL_NAMESPACE)
await this._namespacedStore.ready()
const dbFeed = this._namespacedStore.default()
this._db = hypertrie(null, null, { feed: dbFeed })
await new Promise((resolve, reject) => {
this._db.ready(err => {
if (err) return reject(err)
return resolve(null)
})
})
}
async setUserConfig (name, value) {
return new Promise((resolve, reject) => {
this._db.put('config/' + name, value, (err) => {
if (err) return reject(err)
return resolve(null)
})
})
}
async getUserConfig (name) {
return new Promise((resolve, reject) => {
this._db.get('config/' + name, (err, node) => {
if (err) return reject(err)
return resolve(node && node.value)
})
})
}
async deleteUserConfig (name) {
return new Promise((resolve, reject) => {
this._db.del('config/' + name, (err) => {
if (err) return reject(err)
return resolve()
})
})
}
async putNetworkConfiguration (networkConfiguration) {
const dkeyString = networkConfiguration.discoveryKey.toString('hex')
return new Promise((resolve, reject) => {
this._db.put(toDbKey(NETWORK_PREFIX, dkeyString), NetworkStatus.encode(networkConfiguration), err => {
if (err) return reject(err)
return resolve(null)
})
})
}
async removeNetworkConfiguration (discoveryKey) {
if (Buffer.isBuffer(discoveryKey)) discoveryKey = discoveryKey.toString('hex')
return new Promise((resolve, reject) => {
this._db.del(toDbKey(NETWORK_PREFIX, discoveryKey), err => {
if (err) return reject(err)
return resolve(null)
})
})
}
async getNetworkConfiguration (discoveryKey) {
const dkeyString = (typeof discoveryKey === 'string') ? discoveryKey : discoveryKey.toString('hex')
return new Promise((resolve, reject) => {
this._db.get(toDbKey(NETWORK_PREFIX, dkeyString), (err, node) => {
if (err) return reject(err)
return resolve(node && NetworkStatus.decode(node.value))
})
})
}
async listNetworkConfigurations () {
return new Promise((resolve, reject) => {
this._db.list(NETWORK_PREFIX, (err, nodes) => {
if (err) return reject(err)
return resolve(nodes.map(n => NetworkStatus.decode(n.value)))
})
})
}
}
function toDbKey (prefix, key) {
return prefix + '/' + key
}