|
|
|
@ -1,4 +1,5 @@ |
|
|
|
|
const extension = require('extensionizer') |
|
|
|
|
const explorerLink = require('etherscan-link').createExplorerLink |
|
|
|
|
|
|
|
|
|
class ExtensionPlatform { |
|
|
|
|
|
|
|
|
@ -23,8 +24,11 @@ class ExtensionPlatform { |
|
|
|
|
return extension.runtime.getManifest().version |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
openExtensionInBrowser () { |
|
|
|
|
const extensionURL = extension.runtime.getURL('home.html') |
|
|
|
|
openExtensionInBrowser (route = null) { |
|
|
|
|
let extensionURL = extension.runtime.getURL('home.html') |
|
|
|
|
if (route) { |
|
|
|
|
extensionURL += `#${route}` |
|
|
|
|
} |
|
|
|
|
this.openWindow({ url: extensionURL }) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -38,10 +42,58 @@ class ExtensionPlatform { |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
addMessageListener (cb) { |
|
|
|
|
extension.runtime.onMessage.addListener(cb) |
|
|
|
|
showTransactionNotification (txMeta) { |
|
|
|
|
|
|
|
|
|
const status = txMeta.status |
|
|
|
|
if (status === 'confirmed') { |
|
|
|
|
this._showConfirmedTransaction(txMeta) |
|
|
|
|
} else if (status === 'failed') { |
|
|
|
|
this._showFailedTransaction(txMeta) |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
_showConfirmedTransaction (txMeta) { |
|
|
|
|
|
|
|
|
|
this._subscribeToNotificationClicked() |
|
|
|
|
|
|
|
|
|
const url = explorerLink(txMeta.hash, parseInt(txMeta.metamaskNetworkId)) |
|
|
|
|
const nonce = parseInt(txMeta.txParams.nonce, 16) |
|
|
|
|
|
|
|
|
|
const title = 'Confirmed transaction' |
|
|
|
|
const message = `Transaction ${nonce} confirmed! View on EtherScan` |
|
|
|
|
this._showNotification(title, message, url) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
_showFailedTransaction (txMeta) { |
|
|
|
|
|
|
|
|
|
const nonce = parseInt(txMeta.txParams.nonce, 16) |
|
|
|
|
const title = 'Failed transaction' |
|
|
|
|
const message = `Transaction ${nonce} failed! ${txMeta.err.message}` |
|
|
|
|
this._showNotification(title, message) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
_showNotification (title, message, url) { |
|
|
|
|
extension.notifications.create( |
|
|
|
|
url, |
|
|
|
|
{ |
|
|
|
|
'type': 'basic', |
|
|
|
|
'title': title, |
|
|
|
|
'iconUrl': extension.extension.getURL('../../images/icon-64.png'), |
|
|
|
|
'message': message, |
|
|
|
|
}) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
_subscribeToNotificationClicked () { |
|
|
|
|
if (!extension.notifications.onClicked.hasListener(this._viewOnEtherScan)) { |
|
|
|
|
extension.notifications.onClicked.addListener(this._viewOnEtherScan) |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
_viewOnEtherScan (txId) { |
|
|
|
|
if (txId.startsWith('http://')) { |
|
|
|
|
global.metamaskController.platform.openWindow({ url: txId }) |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
module.exports = ExtensionPlatform |