function delay(time) { return new Promise((resolve) => setTimeout(resolve, time)) } async function loadFromMock3Box(key) { const res = await window.fetch(`http://localhost:8889?key=${key}`) const text = await res.text() return text.length ? JSON.parse(text) : null } async function saveToMock3Box(key, newDataAtKey) { const res = await window.fetch('http://localhost:8889', { method: 'POST', body: JSON.stringify({ key, data: newDataAtKey, }), }) return 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: () => undefined, }) } static async getConfig(address) { const backup = await loadFromMock3Box(`${address}-metamask-metamaskBackup`) return backup ? { spaces: { metamask: {} } } : {} } } module.exports = Mock3Box