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.
108 lines
3.0 KiB
108 lines
3.0 KiB
const createId = require('hat')
|
|
const uiUtils = require('../../../ui/app/util')
|
|
var notificationHandlers = {}
|
|
|
|
module.exports = {
|
|
createUnlockRequestNotification: createUnlockRequestNotification,
|
|
createTxNotification: createTxNotification,
|
|
createMsgNotification: createMsgNotification,
|
|
}
|
|
|
|
setupListeners()
|
|
|
|
function setupListeners(){
|
|
|
|
// guard for chrome bug https://github.com/MetaMask/metamask-plugin/issues/236
|
|
if (!chrome.notifications) return console.error('Chrome notifications API missing...')
|
|
|
|
// notification button press
|
|
chrome.notifications.onButtonClicked.addListener(function(notificationId, buttonIndex){
|
|
var handlers = notificationHandlers[notificationId]
|
|
if (buttonIndex === 0) {
|
|
handlers.confirm()
|
|
} else {
|
|
handlers.cancel()
|
|
}
|
|
chrome.notifications.clear(notificationId)
|
|
})
|
|
|
|
// notification teardown
|
|
chrome.notifications.onClosed.addListener(function(notificationId){
|
|
delete notificationHandlers[notificationId]
|
|
})
|
|
|
|
}
|
|
|
|
// creation helper
|
|
function createUnlockRequestNotification(opts){
|
|
// guard for chrome bug https://github.com/MetaMask/metamask-plugin/issues/236
|
|
if (!chrome.notifications) return console.error('Chrome notifications API missing...')
|
|
var message = 'An Ethereum app has requested a signature. Please unlock your account.'
|
|
|
|
var id = createId()
|
|
chrome.notifications.create(id, {
|
|
type: 'basic',
|
|
iconUrl: '/images/icon-128.png',
|
|
title: opts.title,
|
|
message: message,
|
|
})
|
|
|
|
}
|
|
|
|
function createTxNotification(opts){
|
|
// guard for chrome bug https://github.com/MetaMask/metamask-plugin/issues/236
|
|
if (!chrome.notifications) return console.error('Chrome notifications API missing...')
|
|
var message = [
|
|
'Submitted by '+opts.txParams.origin,
|
|
'to: '+uiUtils.addressSummary(opts.txParams.to),
|
|
'from: '+uiUtils.addressSummary(opts.txParams.from),
|
|
'value: '+uiUtils.formatBalance(opts.txParams.value),
|
|
'data: '+uiUtils.dataSize(opts.txParams.data),
|
|
].join('\n')
|
|
|
|
var id = createId()
|
|
chrome.notifications.create(id, {
|
|
type: 'basic',
|
|
requireInteraction: true,
|
|
iconUrl: '/images/icon-128.png',
|
|
title: opts.title,
|
|
message: message,
|
|
buttons: [{
|
|
title: 'confirm',
|
|
},{
|
|
title: 'cancel',
|
|
}]
|
|
})
|
|
notificationHandlers[id] = {
|
|
confirm: opts.confirm,
|
|
cancel: opts.cancel,
|
|
}
|
|
}
|
|
|
|
function createMsgNotification(opts){
|
|
// guard for chrome bug https://github.com/MetaMask/metamask-plugin/issues/236
|
|
if (!chrome.notifications) return console.error('Chrome notifications API missing...')
|
|
var message = [
|
|
'Submitted by '+opts.msgParams.origin,
|
|
'to be signed by: '+uiUtils.addressSummary(opts.msgParams.from),
|
|
'message:\n'+opts.msgParams.data,
|
|
].join('\n')
|
|
|
|
var id = createId()
|
|
chrome.notifications.create(id, {
|
|
type: 'basic',
|
|
requireInteraction: true,
|
|
iconUrl: '/images/icon-128.png',
|
|
title: opts.title,
|
|
message: message,
|
|
buttons: [{
|
|
title: 'confirm',
|
|
},{
|
|
title: 'cancel',
|
|
}]
|
|
})
|
|
notificationHandlers[id] = {
|
|
confirm: opts.confirm,
|
|
cancel: opts.cancel,
|
|
}
|
|
} |