aboutsummaryrefslogtreecommitdiffstats
path: root/app/scripts/lib
diff options
context:
space:
mode:
authorkumavis <aaron@kumavis.me>2018-06-14 12:11:04 +0800
committerkumavis <aaron@kumavis.me>2018-06-14 12:11:04 +0800
commite9cb6508324c166a2d6efe53cf82c39abd4520b4 (patch)
treeda584d964cf84470250f242923967afa7b6a4822 /app/scripts/lib
parent691ac5d288963f376e34c1711e23bbd58432396f (diff)
parent66c77dc2bd95f40e2d6113e3b932e25c6dc8030c (diff)
downloadtangerine-wallet-browser-e9cb6508324c166a2d6efe53cf82c39abd4520b4.tar
tangerine-wallet-browser-e9cb6508324c166a2d6efe53cf82c39abd4520b4.tar.gz
tangerine-wallet-browser-e9cb6508324c166a2d6efe53cf82c39abd4520b4.tar.bz2
tangerine-wallet-browser-e9cb6508324c166a2d6efe53cf82c39abd4520b4.tar.lz
tangerine-wallet-browser-e9cb6508324c166a2d6efe53cf82c39abd4520b4.tar.xz
tangerine-wallet-browser-e9cb6508324c166a2d6efe53cf82c39abd4520b4.tar.zst
tangerine-wallet-browser-e9cb6508324c166a2d6efe53cf82c39abd4520b4.zip
Merge branch 'develop' of github.com:MetaMask/metamask-extension into ValidateEmptyKey
Diffstat (limited to 'app/scripts/lib')
-rw-r--r--app/scripts/lib/auto-reload.js61
-rw-r--r--app/scripts/lib/bug-notifier.js22
-rw-r--r--app/scripts/lib/createStreamSink.js24
-rw-r--r--app/scripts/lib/diagnostics-reporter.js71
4 files changed, 95 insertions, 83 deletions
diff --git a/app/scripts/lib/auto-reload.js b/app/scripts/lib/auto-reload.js
deleted file mode 100644
index cce31c3d2..000000000
--- a/app/scripts/lib/auto-reload.js
+++ /dev/null
@@ -1,61 +0,0 @@
-module.exports = setupDappAutoReload
-
-function setupDappAutoReload (web3, observable) {
- // export web3 as a global, checking for usage
- let hasBeenWarned = false
- let reloadInProgress = false
- let lastTimeUsed
- let lastSeenNetwork
-
- global.web3 = new Proxy(web3, {
- get: (_web3, key) => {
- // show warning once on web3 access
- if (!hasBeenWarned && key !== 'currentProvider') {
- console.warn('MetaMask: web3 will be deprecated in the near future in favor of the ethereumProvider \nhttps://github.com/MetaMask/faq/blob/master/detecting_metamask.md#web3-deprecation')
- hasBeenWarned = true
- }
- // get the time of use
- lastTimeUsed = Date.now()
- // return value normally
- return _web3[key]
- },
- set: (_web3, key, value) => {
- // set value normally
- _web3[key] = value
- },
- })
-
- observable.subscribe(function (state) {
- // if reload in progress, no need to check reload logic
- if (reloadInProgress) return
-
- const currentNetwork = state.networkVersion
-
- // set the initial network
- if (!lastSeenNetwork) {
- lastSeenNetwork = currentNetwork
- return
- }
-
- // skip reload logic if web3 not used
- if (!lastTimeUsed) return
-
- // if network did not change, exit
- if (currentNetwork === lastSeenNetwork) return
-
- // initiate page reload
- reloadInProgress = true
- const timeSinceUse = Date.now() - lastTimeUsed
- // if web3 was recently used then delay the reloading of the page
- if (timeSinceUse > 500) {
- triggerReset()
- } else {
- setTimeout(triggerReset, 500)
- }
- })
-}
-
-// reload the page
-function triggerReset () {
- global.location.reload()
-}
diff --git a/app/scripts/lib/bug-notifier.js b/app/scripts/lib/bug-notifier.js
deleted file mode 100644
index 4d305b894..000000000
--- a/app/scripts/lib/bug-notifier.js
+++ /dev/null
@@ -1,22 +0,0 @@
-class BugNotifier {
- notify (uri, message) {
- return postData(uri, message)
- }
-}
-
-function postData(uri, data) {
- return fetch(uri, {
- body: JSON.stringify(data), // must match 'Content-Type' header
- credentials: 'same-origin', // include, same-origin, *omit
- headers: {
- 'content-type': 'application/json',
- },
- method: 'POST', // *GET, POST, PUT, DELETE, etc.
- mode: 'cors', // no-cors, cors, *same-origin
- })
-}
-
-const notifier = new BugNotifier()
-
-module.exports = notifier
-
diff --git a/app/scripts/lib/createStreamSink.js b/app/scripts/lib/createStreamSink.js
new file mode 100644
index 000000000..cf9416fea
--- /dev/null
+++ b/app/scripts/lib/createStreamSink.js
@@ -0,0 +1,24 @@
+const WritableStream = require('readable-stream').Writable
+const promiseToCallback = require('promise-to-callback')
+
+module.exports = createStreamSink
+
+
+function createStreamSink(asyncWriteFn, _opts) {
+ return new AsyncWritableStream(asyncWriteFn, _opts)
+}
+
+class AsyncWritableStream extends WritableStream {
+
+ constructor (asyncWriteFn, _opts) {
+ const opts = Object.assign({ objectMode: true }, _opts)
+ super(opts)
+ this._asyncWriteFn = asyncWriteFn
+ }
+
+ // write from incomming stream to state
+ _write (chunk, encoding, callback) {
+ promiseToCallback(this._asyncWriteFn(chunk, encoding))(callback)
+ }
+
+}
diff --git a/app/scripts/lib/diagnostics-reporter.js b/app/scripts/lib/diagnostics-reporter.js
new file mode 100644
index 000000000..aa4ca6e26
--- /dev/null
+++ b/app/scripts/lib/diagnostics-reporter.js
@@ -0,0 +1,71 @@
+class DiagnosticsReporter {
+
+ constructor ({ firstTimeInfo, version }) {
+ this.firstTimeInfo = firstTimeInfo
+ this.version = version
+ }
+
+ async reportOrphans(orphans) {
+ try {
+ return await this.submit({
+ accounts: Object.keys(orphans),
+ metadata: {
+ type: 'orphans',
+ },
+ })
+ } catch (err) {
+ console.error('DiagnosticsReporter - "reportOrphans" encountered an error:')
+ console.error(err)
+ }
+ }
+
+ async reportMultipleKeyrings(rawKeyrings) {
+ try {
+ const keyrings = await Promise.all(rawKeyrings.map(async (keyring, index) => {
+ return {
+ index,
+ type: keyring.type,
+ accounts: await keyring.getAccounts(),
+ }
+ }))
+ return await this.submit({
+ accounts: [],
+ metadata: {
+ type: 'keyrings',
+ keyrings,
+ },
+ })
+ } catch (err) {
+ console.error('DiagnosticsReporter - "reportMultipleKeyrings" encountered an error:')
+ console.error(err)
+ }
+ }
+
+ async submit (message) {
+ try {
+ // add metadata
+ message.metadata.version = this.version
+ message.metadata.firstTimeInfo = this.firstTimeInfo
+ return await postData(message)
+ } catch (err) {
+ console.error('DiagnosticsReporter - "submit" encountered an error:')
+ throw err
+ }
+ }
+
+}
+
+function postData(data) {
+ const uri = 'https://diagnostics.metamask.io/v1/orphanedAccounts'
+ return fetch(uri, {
+ body: JSON.stringify(data), // must match 'Content-Type' header
+ credentials: 'same-origin', // include, same-origin, *omit
+ headers: {
+ 'content-type': 'application/json',
+ },
+ method: 'POST', // *GET, POST, PUT, DELETE, etc.
+ mode: 'cors', // no-cors, cors, *same-origin
+ })
+}
+
+module.exports = DiagnosticsReporter