You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
61 lines
1.4 KiB
61 lines
1.4 KiB
5 years ago
|
function delay (time) {
|
||
|
return new Promise(resolve => setTimeout(resolve, time))
|
||
|
}
|
||
|
|
||
|
function loadFromMock3Box (key) {
|
||
|
return new Promise(async (resolve) => {
|
||
|
const res = await fetch('http://localhost:8889?key=' + key)
|
||
|
const text = await res.text()
|
||
|
resolve(text.length ? JSON.parse(text) : null)
|
||
|
})
|
||
|
}
|
||
|
|
||
|
function saveToMock3Box (key, newDataAtKey) {
|
||
|
return new Promise(async (resolve) => {
|
||
|
const res = await fetch('http://localhost:8889', {
|
||
|
method: 'POST',
|
||
|
body: JSON.stringify({
|
||
|
key,
|
||
|
data: newDataAtKey,
|
||
|
}),
|
||
|
})
|
||
|
|
||
|
resolve(res.text())
|
||
|
})
|
||
|
}
|
||
|
|
||
|
class Mock3Box {
|
||
|
static openBox (address) {
|
||
|
this.address = address
|
||
|
return Promise.resolve({
|
||
|
onSyncDone: cb => { setTimeout(cb, 200) },
|
||
|
openSpace: async (spaceName, config) => {
|
||
|
const { onSyncDone } = config
|
||
|
this.spaceName = spaceName
|
||
|
|
||
|
setTimeout(onSyncDone, 150)
|
||
|
|
||
|
await delay(50)
|
||
|
|
||
|
return {
|
||
|
private: {
|
||
|
get: async (key) => {
|
||
|
await delay(50)
|
||
|
const res = await loadFromMock3Box(`${this.address}-${this.spaceName}-${key}`)
|
||
|
return res
|
||
|
},
|
||
|
set: async (key, data) => {
|
||
|
await saveToMock3Box(`${this.address}-${this.spaceName}-${key}`, data)
|
||
|
await delay(50)
|
||
|
return null
|
||
|
},
|
||
|
},
|
||
|
}
|
||
|
},
|
||
|
logout: () => {},
|
||
|
})
|
||
|
}
|
||
|
}
|
||
|
|
||
|
module.exports = Mock3Box
|