|
|
|
const MetaMaskProvider = require('./lib/metamask-provider')
|
|
|
|
// const PortStream = require('./lib/port-stream.js')
|
|
|
|
const identitiesUrl = 'https://alpha.metamask.io/identities/'
|
|
|
|
|
|
|
|
// var unsignedTxs = {}
|
|
|
|
|
|
|
|
var zeroClient = MetaMaskProvider()
|
|
|
|
|
|
|
|
// setup messaging
|
|
|
|
chrome.runtime.onConnect.addListener(connectRemote)
|
|
|
|
// chrome.runtime.onConnectExternal.addListener(connectRemote)
|
|
|
|
function connectRemote(remotePort){
|
|
|
|
remotePort.onMessage.addListener(onRpcRequest.bind(null, remotePort))
|
|
|
|
}
|
|
|
|
|
|
|
|
function onRpcRequest(remotePort, payload){
|
|
|
|
zeroClient.sendAsync(payload, function onPayloadHandled(err, response){
|
|
|
|
if (err) throw err
|
|
|
|
console.log('MetaMaskPlugin - RPC complete:', payload, '->', response)
|
|
|
|
// if (response.result === true) debugger
|
|
|
|
// if (typeof response !== 'object') {
|
|
|
|
// if (!response) {
|
|
|
|
// console.warn('-------------------------------')
|
|
|
|
// console.warn(payload, '->', response)
|
|
|
|
// console.warn('-------------------------------')
|
|
|
|
// }
|
|
|
|
remotePort.postMessage(response)
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
// // load from storage
|
|
|
|
// chrome.storage.sync.get(function(data){
|
|
|
|
// for (var key in data) {
|
|
|
|
// var serialized = data[key]
|
|
|
|
// var tx = deserializeTx(serialized)
|
|
|
|
// var hash = simpleHash(serialized)
|
|
|
|
// unsignedTxs[hash] = tx
|
|
|
|
// }
|
|
|
|
// updateBadge()
|
|
|
|
// })
|
|
|
|
|
|
|
|
// // listen to storage changes
|
|
|
|
// chrome.storage.onChanged.addListener(function(changes, namespace) {
|
|
|
|
// for (key in changes) {
|
|
|
|
// var storageChange = changes[key]
|
|
|
|
// if (storageChange.oldValue && !storageChange.newValue) {
|
|
|
|
// // was removed
|
|
|
|
// removeTransaction(storageChange.oldValue)
|
|
|
|
// } else if (!storageChange.oldValue && storageChange.newValue) {
|
|
|
|
// // was added
|
|
|
|
// addTransaction(deserializeTx(storageChange.newValue))
|
|
|
|
// }
|
|
|
|
// }
|
|
|
|
// })
|
|
|
|
|
|
|
|
// setup badge text
|
|
|
|
// updateBadge()
|
|
|
|
|
|
|
|
// function updateBadge(){
|
|
|
|
// var label = ''
|
|
|
|
// var count = Object.keys(unsignedTxs).length
|
|
|
|
// if (count) {
|
|
|
|
// label = String(count)
|
|
|
|
// }
|
|
|
|
// chrome.browserAction.setBadgeText({text: label})
|
|
|
|
// chrome.browserAction.setBadgeBackgroundColor({color: '#506F8B'})
|
|
|
|
// }
|
|
|
|
|
|
|
|
// function handleMessage(msg){
|
|
|
|
// console.log('got message!', msg.type)
|
|
|
|
// switch(msg.type){
|
|
|
|
|
|
|
|
// case 'addUnsignedTx':
|
|
|
|
// addTransaction(msg.payload)
|
|
|
|
// return
|
|
|
|
|
|
|
|
// case 'removeUnsignedTx':
|
|
|
|
// removeTransaction(msg.payload)
|
|
|
|
// return
|
|
|
|
|
|
|
|
// }
|
|
|
|
// }
|
|
|
|
|
|
|
|
// function addTransaction(tx){
|
|
|
|
// var serialized = serializeTx(tx)
|
|
|
|
// var hash = simpleHash(serialized)
|
|
|
|
// unsignedTxs[hash] = tx
|
|
|
|
// var data = {}
|
|
|
|
// data[hash] = serialized
|
|
|
|
// chrome.storage.sync.set(data)
|
|
|
|
// // trigger ui changes
|
|
|
|
// updateBadge()
|
|
|
|
// }
|
|
|
|
|
|
|
|
// function removeTransaction(serialized){
|
|
|
|
// var hash = simpleHash(serialized)
|
|
|
|
// delete unsignedTxs[hash]
|
|
|
|
// var data = {}
|
|
|
|
// data[hash] = undefined
|
|
|
|
// chrome.storage.sync.set(data)
|
|
|
|
// // trigger ui changes
|
|
|
|
// updateBadge()
|
|
|
|
// }
|
|
|
|
|
|
|
|
// function exportUnsignedTxs(remote){
|
|
|
|
// console.log('exporting txs!', unsignedTxs)
|
|
|
|
// var data = {
|
|
|
|
// type: 'importUnsignedTxs',
|
|
|
|
// payload: getValues(unsignedTxs),
|
|
|
|
// }
|
|
|
|
// remote.postMessage(data)
|
|
|
|
// }
|
|
|
|
|
|
|
|
// function simpleHash(input) {
|
|
|
|
// var hash = 0, i, chr, len
|
|
|
|
// if (input.length == 0) return hash
|
|
|
|
// for (i = 0, len = input.length; i < len; i++) {
|
|
|
|
// chr = input.charCodeAt(i)
|
|
|
|
// hash = ((hash << 5) - hash) + chr
|
|
|
|
// hash |= 0 // Convert to 32bit integer
|
|
|
|
// }
|
|
|
|
// return hash
|
|
|
|
// }
|
|
|
|
|
|
|
|
// function serializeTx(tx){
|
|
|
|
// return JSON.stringify(tx)
|
|
|
|
// }
|
|
|
|
|
|
|
|
// function deserializeTx(tx){
|
|
|
|
// return JSON.parse(tx)
|
|
|
|
// }
|
|
|
|
|
|
|
|
// function getValues(obj){
|
|
|
|
// var output = []
|
|
|
|
// for (var key in obj) {
|
|
|
|
// output.push(obj[key])
|
|
|
|
// }
|
|
|
|
// return output
|
|
|
|
// }
|