mirror of
https://github.com/kremalicious/metamask-extension.git
synced 2024-11-30 08:09:15 +01:00
5ee1291662
Previously all browser globals were allowed to be used anywhere by ESLint because we had set the `env` property to `browser` in the ESLint config. This has made it easy to accidentally use browser globals (e.g. #8338), so it has been removed. Instead we now have a short list of allowed globals. All browser globals are now accessed as properties on `window`. Unfortunately this change resulted in a few different confusing unit test errors, as some of our unit tests setup assumed that a particular global would be used via `window` or `global`. In particular, `window.fetch` didn't work correctly because it wasn't patched by the AbortController polyfill (only `global.fetch` was being patched). The `jsdom-global` package we were using complicated matters by setting all of the JSDOM `window` properties directly on `global`, overwriting the `AbortController` for example. The `helpers.js` test setup module has been simplified somewhat by removing `jsdom-global` and constructing the JSDOM instance manually. The JSDOM window is set on `window`, and a few properties are set on `global` as well as needed by various dependencies. `node-fetch` and the AbortController polyfill/patch now work as expected as well, though `fetch` is only available on `window` now.
66 lines
1.5 KiB
JavaScript
66 lines
1.5 KiB
JavaScript
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: () => {},
|
|
})
|
|
}
|
|
|
|
static async getConfig (address) {
|
|
const backup = await loadFromMock3Box(`${address}-metamask-metamaskBackup`)
|
|
return backup
|
|
? { spaces: { metamask: {} } }
|
|
: {}
|
|
}
|
|
}
|
|
|
|
module.exports = Mock3Box
|