parent
282775c52f
commit
79248ae5cd
@ -1,13 +1,181 @@ |
|||||||
// const SWcontroller = require('./sw-controller')
|
const ParentStream = require('iframe-stream').ParentStream |
||||||
// const SwStream = require('sw-stream/lib/sw-stream.js')
|
const SWcontroller = require('./sw-controller') |
||||||
// const startPopup = require('../app/scripts/popup-core')
|
const SwStream = require('sw-stream/lib/sw-stream.js') |
||||||
|
const SetupUntrustedComunication = ('./lib/setup-untrusted-connection.js') |
||||||
// console.log('outside:open')
|
const background = new SWcontroller({ |
||||||
// const background = new SWcontroller({
|
fileName: '/popup/sw-build.js', |
||||||
// fileName: 'sw-build.js',
|
}) |
||||||
// })
|
|
||||||
// background.on('ready', (readSw) => {
|
background.on('ready', (readSw) => { |
||||||
// startPopup(SwStream(background.controller))
|
// var inpageProvider = new MetamaskInpageProvider(SwStream(background.controller))
|
||||||
// })
|
let pageStream = new ParentStream() |
||||||
// background.startWorker()
|
let swStream = SwStream(background.controller) |
||||||
|
pageStream.pipe(swStream).pipe(pageStream) |
||||||
|
}) |
||||||
|
|
||||||
|
background.on('error', console.error) |
||||||
|
background.startWorker() |
||||||
|
|
||||||
console.log('hello from controller') |
console.log('hello from controller') |
||||||
|
/* |
||||||
|
const urlUtil = require('url') |
||||||
|
const extend = require('xtend') |
||||||
|
const Dnode = require('dnode') |
||||||
|
const eos = require('end-of-stream') |
||||||
|
const ParentStream = require('iframe-stream').ParentStream |
||||||
|
const PortStream = require('../app/scripts/lib/port-stream.js') |
||||||
|
const notification = require('../app/scripts/lib/notifications.js') |
||||||
|
const messageManager = require('../app/scripts/lib/message-manager') |
||||||
|
const setupMultiplex = require('../app/scripts/lib/stream-utils.js').setupMultiplex |
||||||
|
const MetamaskController = require('../app/scripts/metamask-controller') |
||||||
|
const extension = require('../app/scripts/lib/extension') |
||||||
|
|
||||||
|
const STORAGE_KEY = 'metamask-config' |
||||||
|
|
||||||
|
|
||||||
|
initializeZeroClient() |
||||||
|
|
||||||
|
function initializeZeroClient() { |
||||||
|
|
||||||
|
const controller = new MetamaskController({ |
||||||
|
// User confirmation callbacks:
|
||||||
|
showUnconfirmedMessage, |
||||||
|
unlockAccountMessage, |
||||||
|
showUnapprovedTx, |
||||||
|
// Persistence Methods:
|
||||||
|
setData, |
||||||
|
loadData, |
||||||
|
}) |
||||||
|
const idStore = controller.idStore |
||||||
|
|
||||||
|
function unlockAccountMessage () { |
||||||
|
console.log('notif stub - unlockAccountMessage') |
||||||
|
} |
||||||
|
|
||||||
|
function showUnconfirmedMessage (msgParams, msgId) { |
||||||
|
console.log('notif stub - showUnconfirmedMessage') |
||||||
|
} |
||||||
|
|
||||||
|
function showUnapprovedTx (txParams, txData, onTxDoneCb) { |
||||||
|
console.log('notif stub - showUnapprovedTx') |
||||||
|
} |
||||||
|
|
||||||
|
//
|
||||||
|
// connect to other contexts
|
||||||
|
//
|
||||||
|
|
||||||
|
var connectionStream = new ParentStream() |
||||||
|
|
||||||
|
connectRemote(connectionStream, getParentHref()) |
||||||
|
|
||||||
|
function connectRemote (connectionStream, originDomain) { |
||||||
|
var isMetaMaskInternalProcess = (originDomain === '127.0.0.1:9001') |
||||||
|
if (isMetaMaskInternalProcess) { |
||||||
|
// communication with popup
|
||||||
|
setupTrustedCommunication(connectionStream, 'MetaMask') |
||||||
|
} else { |
||||||
|
// communication with page
|
||||||
|
setupUntrustedCommunication(connectionStream, originDomain) |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
function setupUntrustedCommunication (connectionStream, originDomain) { |
||||||
|
// setup multiplexing
|
||||||
|
var mx = setupMultiplex(connectionStream) |
||||||
|
// connect features
|
||||||
|
controller.setupProviderConnection(mx.createStream('provider'), originDomain) |
||||||
|
controller.setupPublicConfig(mx.createStream('publicConfig')) |
||||||
|
} |
||||||
|
|
||||||
|
function setupTrustedCommunication (connectionStream, originDomain) { |
||||||
|
// setup multiplexing
|
||||||
|
var mx = setupMultiplex(connectionStream) |
||||||
|
// connect features
|
||||||
|
setupControllerConnection(mx.createStream('controller')) |
||||||
|
controller.setupProviderConnection(mx.createStream('provider'), originDomain) |
||||||
|
} |
||||||
|
|
||||||
|
//
|
||||||
|
// remote features
|
||||||
|
//
|
||||||
|
|
||||||
|
function setupControllerConnection (stream) { |
||||||
|
controller.stream = stream |
||||||
|
var api = controller.getApi() |
||||||
|
var dnode = Dnode(api) |
||||||
|
stream.pipe(dnode).pipe(stream) |
||||||
|
dnode.on('remote', (remote) => { |
||||||
|
// push updates to popup
|
||||||
|
controller.ethStore.on('update', controller.sendUpdate.bind(controller)) |
||||||
|
controller.listeners.push(remote) |
||||||
|
idStore.on('update', controller.sendUpdate.bind(controller)) |
||||||
|
|
||||||
|
// teardown on disconnect
|
||||||
|
eos(stream, () => { |
||||||
|
controller.ethStore.removeListener('update', controller.sendUpdate.bind(controller)) |
||||||
|
}) |
||||||
|
}) |
||||||
|
} |
||||||
|
|
||||||
|
function loadData () { |
||||||
|
var oldData = getOldStyleData() |
||||||
|
var newData |
||||||
|
try { |
||||||
|
newData = JSON.parse(window.localStorage[STORAGE_KEY]) |
||||||
|
} catch (e) {} |
||||||
|
|
||||||
|
var data = extend({ |
||||||
|
meta: { |
||||||
|
version: 0, |
||||||
|
}, |
||||||
|
data: { |
||||||
|
config: { |
||||||
|
provider: { |
||||||
|
type: 'testnet', |
||||||
|
}, |
||||||
|
}, |
||||||
|
}, |
||||||
|
}, oldData || null, newData || null) |
||||||
|
return data |
||||||
|
} |
||||||
|
|
||||||
|
function getOldStyleData () { |
||||||
|
var config, wallet, seedWords |
||||||
|
|
||||||
|
var result = { |
||||||
|
meta: { version: 0 }, |
||||||
|
data: {}, |
||||||
|
} |
||||||
|
|
||||||
|
try { |
||||||
|
config = JSON.parse(window.localStorage['config']) |
||||||
|
result.data.config = config |
||||||
|
} catch (e) {} |
||||||
|
try { |
||||||
|
wallet = JSON.parse(window.localStorage['lightwallet']) |
||||||
|
result.data.wallet = wallet |
||||||
|
} catch (e) {} |
||||||
|
try { |
||||||
|
seedWords = window.localStorage['seedWords'] |
||||||
|
result.data.seedWords = seedWords |
||||||
|
} catch (e) {} |
||||||
|
|
||||||
|
return result |
||||||
|
} |
||||||
|
|
||||||
|
function setData (data) { |
||||||
|
window.localStorage[STORAGE_KEY] = JSON.stringify(data) |
||||||
|
} |
||||||
|
|
||||||
|
function getParentHref(){ |
||||||
|
try { |
||||||
|
var parentLocation = window.parent.location |
||||||
|
return parentLocation.hostname + ':' + parentLocation.port |
||||||
|
} catch (err) { |
||||||
|
return 'unknown' |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
*/ |
||||||
|
@ -0,0 +1,27 @@ |
|||||||
|
|
||||||
|
/* |
||||||
|
IFRAME |
||||||
|
var pageStream = new LocalMessageDuplexStream({ |
||||||
|
name: 'contentscript', |
||||||
|
target: 'inpage', |
||||||
|
}) |
||||||
|
SERVICEWORKER |
||||||
|
pageStream.on('error', console.error) |
||||||
|
var pluginPort = extension.runtime.connect({name: 'contentscript'}) |
||||||
|
var pluginStream = new PortStream(pluginPort) |
||||||
|
pluginStream.on('error', console.error) |
||||||
|
IFRAME --> SW |
||||||
|
// forward communication plugin->inpage
|
||||||
|
pageStream.pipe(pluginStream).pipe(pageStream) |
||||||
|
*/ |
||||||
|
|
||||||
|
module.exports = SetupUntrustedComunicationWithSW |
||||||
|
|
||||||
|
function SetupUntrustedComunicationWithSW (connectionStream, readySwStream) { |
||||||
|
pageStream.on('error', console.error) |
||||||
|
var pluginPort = extension.runtime.connect({name: 'contentscript'}) |
||||||
|
var pluginStream = new PortStream(pluginPort) |
||||||
|
pluginStream.on('error', console.error) |
||||||
|
// forward communication plugin->inpage
|
||||||
|
pageStream.pipe(pluginStream).pipe(pageStream) |
||||||
|
} |
Loading…
Reference in new issue