1
0
mirror of https://github.com/kremalicious/metamask-extension.git synced 2024-12-23 09:52:26 +01:00

WIP: streams->indexdb

This commit is contained in:
frankiebee 2017-03-23 11:06:38 -07:00
parent d4e8ff188b
commit 45ab81fb45
10 changed files with 96 additions and 54 deletions

View File

@ -204,7 +204,6 @@ module.exports = class MetamaskController extends EventEmitter {
// //
getState () { getState () {
const wallet = this.configManager.getWallet() const wallet = this.configManager.getWallet()
const vault = this.keyringController.store.getState().vault const vault = this.keyringController.store.getState().vault
const isInitialized = (!!wallet || !!vault) const isInitialized = (!!wallet || !!vault)

View File

@ -11,6 +11,7 @@ module.exports = initializePopup
function initializePopup (connectionStream) { function initializePopup (connectionStream) {
// setup app // setup app
debugger
connectToAccountManager(connectionStream, setupApp) connectToAccountManager(connectionStream, setupApp)
} }

View File

@ -1,19 +1,13 @@
const SWcontroller = require('./sw-controller') // const SWcontroller = require('./sw-controller')
console.log('outside:open') // const SwStream = require('sw-stream/lib/sw-stream.js')
const background = new SWcontroller({ // const startPopup = require('../app/scripts/popup-core')
fileName: 'sw-build.js',
registerOpts: {
scope: './',
}
})
background.startWorker() // console.log('outside:open')
.then(registerdWorker => { // const background = new SWcontroller({
return background.sendMessage('connect') // fileName: 'sw-build.js',
}) // })
.then((port) => { // background.on('ready', (readSw) => {
debugger // startPopup(SwStream(background.controller))
}) // })
.catch(err => { // background.startWorker()
console.error(`SW Controller: ${err}`) console.log('hello from controller')
})

View File

@ -5,6 +5,7 @@ module.exports = setupIframe
function setupIframe(opts) { function setupIframe(opts) {
debugger
opts = opts || {} opts = opts || {}
var frame = Iframe({ var frame = Iframe({
src: opts.zeroClientProvider || 'https://zero.metamask.io/', src: opts.zeroClientProvider || 'https://zero.metamask.io/',

View File

@ -1,7 +1,10 @@
const injectCss = require('inject-css') const injectCss = require('inject-css')
const MetaMaskUiCss = require('../ui/css') const MetaMaskUiCss = require('../ui/css')
const startPopup = require('../app/scripts/popup-core')
const setupIframe = require('./lib/setup-iframe.js') const setupIframe = require('./lib/setup-iframe.js')
const MetamaskInpageProvider = require('../app/scripts/lib/inpage-provider.js')
const SWcontroller = require('./sw-controller')
const SwStream = require('sw-stream/lib/sw-stream.js')
const startPopup = require('../app/scripts/popup-core')
var css = MetaMaskUiCss() var css = MetaMaskUiCss()
@ -15,5 +18,14 @@ var iframeStream = setupIframe({
sandboxAttributes: ['allow-scripts', 'allow-popups', 'allow-same-origin'], sandboxAttributes: ['allow-scripts', 'allow-popups', 'allow-same-origin'],
container: document.body, container: document.body,
}) })
console.log('outside:open')
startPopup(iframeStream) const background = new SWcontroller({
fileName: '/popup/sw-build.js',
})
background.on('ready', (readSw) => {
// var inpageProvider = new MetamaskInpageProvider(SwStream(background.controller))
// startPopup(inpageProvider)
startPopup(SwStream(background.controller))
})
background.startWorker()
console.log('hello from /library/popup.js')

View File

@ -25,7 +25,7 @@ iframeServer.use('/popup', express.static('../dist/chrome'))
iframeServer.get('/controller.js', function(req, res){ iframeServer.get('/controller.js', function(req, res){
res.send(controllerBundle.latest) res.send(controllerBundle.latest)
}) })
iframeServer.get('/sw-build.js', function(req, res){ iframeServer.get('/popup/sw-build.js', function(req, res){
console.log('/sw-build.js') console.log('/sw-build.js')
res.setHeader('Content-Type', 'application/javascript') res.setHeader('Content-Type', 'application/javascript')
res.send(swBuild.latest) res.send(swBuild.latest)

View File

@ -1,34 +1,63 @@
const EventEmitter = require('events') const EventEmitter = require('events')
module.exports = class serviceWorkerController extends EventEmitter{ module.exports = class ClientSideServiceWorker extends EventEmitter{
constructor (opts) { constructor (opts) {
super() super()
this.fileName = opts.fileName this.fileName = opts.fileName
this.registerOpts = opts.registerOpts this.startDelay = opts.startDelay
this.serviceWorker = navigator.serviceWorker
this.serviceWorkerApi = navigator.serviceWorker
this.serviceWorkerApi.onmessage = (event) => this.emit('message', event)
this.serviceWorkerApi.onerror = (event) => this.emit('error')
// temporary function
this.askForId = (message) => {
this.sendMessage('check-in')
.then((data) => console.log(`${message}----${data}`))
}
// if (!!this.serviceWorkerApi) this.askForId('before')
if (opts.initStart) this.startWorker()
this.on('ready', (sw) => {
this.askForId('ready')
})
}
get controller () {
return this.sw || this.serviceWorkerApi.controller
} }
startWorker () { startWorker () {
// check to see if their is a preregistered service worker return this.registerWorker()
if (!this.serviceWorker.controller) { .then((sw) => {
return Promise.resolve(this.registerWorker()) this.sw = sw
} else { this.askForId('after register:')
return Promise.resolve(this.serviceWorker.ready) this.sw.onerror = (err) => this.emit('error', err)
} this.sw = sw
this.emit('ready', this.sw)
})
.catch((err) => this.emit('error', err))
} }
registerWorker () { registerWorker () {
return this.serviceWorker.register(this.fileName, this.registerOpts) return this.serviceWorkerApi.register(this.fileName)
.then(sw => { .then((registerdWorker) => {
return sw return new Promise((resolve, reject) => {
}) this.askForId('after')
} let timeOutId = setTimeout(() => {
if (this.serviceWorkerApi.controller) return resolve(this.serviceWorkerApi.controller)
if (registerdWorker.active) return resolve(registerdWorker.active)
return reject(new Error('ClientSideServiceWorker: No controller found and onupdatefound timed out'))
}, this.startDelay || 1000 )
syncSW (registeredSW) { registerdWorker.onupdatefound = (event) => {
return registeredSW.sync.register('sync') this.emit('updatefound')
.then(() => { registerdWorker.update()
console.log('sync') }
})
}) })
} }
@ -43,7 +72,7 @@ module.exports = class serviceWorkerController extends EventEmitter{
resolve(event.data.data) resolve(event.data.data)
} }
} }
self.serviceWorker.controller.postMessage(message, [messageChannel.port2]) this.controller.postMessage(message, [messageChannel.port2])
}) })
} }
} }

View File

@ -25,6 +25,10 @@ const STORAGE_KEY = 'metamask-config'
const METAMASK_DEBUG = 'GULP_METAMASK_DEBUG' const METAMASK_DEBUG = 'GULP_METAMASK_DEBUG'
let popupIsOpen = false let popupIsOpen = false
const log = require('loglevel')
global.log = log
log.setDefaultLevel(METAMASK_DEBUG ? 'debug' : 'warn')
self.addEventListener('install', function(event) { self.addEventListener('install', function(event) {
event.waitUntil(self.skipWaiting()) event.waitUntil(self.skipWaiting())
}) })
@ -132,12 +136,16 @@ function setupController (initState, client) {
global.metamaskController = controller global.metamaskController = controller
// setup state persistence // setup state persistence
pipe( // pipe(
controller.store, // controller.store,
storeTransform(versionifyData), // storeTransform(versionifyData),
diskStore // diskStore
) // )
controller.store.subscribe((store) => {
dbController.put('dataStore', store)
// .then((event) => {debugger})
// .catch((err) => {debugger})
})
function versionifyData(state) { function versionifyData(state) {
let versionedData = diskStore.getState() let versionedData = diskStore.getState()
versionedData.data = state versionedData.data = state
@ -150,10 +158,8 @@ function setupController (initState, client) {
/* /*
need to write a service worker stream for this need to write a service worker stream for this
*/ */
// var connectionStream = new ParentStream()
connectionListener.on('remote', (portStream, messageEvent) => { connectionListener.on('remote', (portStream, messageEvent) => {
debugger connectRemote(portStream, messageEvent.origin)
connectRemote(connectionStream, messageEvent.origin)
}) })
function connectRemote (connectionStream, originDomain) { function connectRemote (connectionStream, originDomain) {

View File

@ -104,14 +104,14 @@
"request-promise": "^4.1.1", "request-promise": "^4.1.1",
"sandwich-expando": "^1.0.5", "sandwich-expando": "^1.0.5",
"semaphore": "^1.0.5", "semaphore": "^1.0.5",
"sw-stream": "^1.0.1", "sw-stream": "^1.0.2",
"textarea-caret": "^3.0.1", "textarea-caret": "^3.0.1",
"three.js": "^0.73.2", "three.js": "^0.73.2",
"through2": "^2.0.1", "through2": "^2.0.1",
"valid-url": "^1.0.9", "valid-url": "^1.0.9",
"vreme": "^3.0.2", "vreme": "^3.0.2",
"web3": "0.18.2", "web3": "0.18.2",
"web3-provider-engine": "^10.0.1", "web3-provider-engine": "^11.0.0",
"web3-stream-provider": "^2.0.6", "web3-stream-provider": "^2.0.6",
"xtend": "^4.0.1" "xtend": "^4.0.1"
}, },

View File

@ -14,7 +14,7 @@ log.setLevel(debugMode ? 'debug' : 'warn')
function launchApp (opts) { function launchApp (opts) {
var accountManager = opts.accountManager var accountManager = opts.accountManager
actions._setBackgroundConnection(accountManager) actions._setBackgroundConnection(accountManager)
debugger
// check if we are unlocked first // check if we are unlocked first
accountManager.getState(function (err, metamaskState) { accountManager.getState(function (err, metamaskState) {
if (err) throw err if (err) throw err