aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.circleci/config.yml2
-rw-r--r--app/home.html4
-rw-r--r--app/notification.html2
-rw-r--r--app/popup.html4
-rw-r--r--app/scripts/ui.js (renamed from app/scripts/popup.js)0
-rw-r--r--gulpfile.js202
-rw-r--r--mascara/server/index.js8
-rw-r--r--mascara/src/proxy.js2
-rw-r--r--mascara/src/ui.js2
-rw-r--r--test/e2e/metamask.spec.js2
10 files changed, 130 insertions, 98 deletions
diff --git a/.circleci/config.yml b/.circleci/config.yml
index 75819fc6e..2c75aada9 100644
--- a/.circleci/config.yml
+++ b/.circleci/config.yml
@@ -98,6 +98,8 @@ jobs:
key: build-cache-{{ .Revision }}
paths:
- dist
+ - store_artifacts:
+ path: dist/mascara
prep-scss:
docker:
diff --git a/app/home.html b/app/home.html
index cfb4b00a0..bb8e936a3 100644
--- a/app/home.html
+++ b/app/home.html
@@ -3,10 +3,10 @@
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1 user-scalable=no">
- <title>MetaMask Plugin</title>
+ <title>MetaMask</title>
</head>
<body>
<div id="app-content"></div>
- <script src="./scripts/popup.js" type="text/javascript" charset="utf-8"></script>
+ <script src="./scripts/ui.js" type="text/javascript" charset="utf-8"></script>
</body>
</html>
diff --git a/app/notification.html b/app/notification.html
index f10cbbf41..2255ca2c1 100644
--- a/app/notification.html
+++ b/app/notification.html
@@ -11,6 +11,6 @@
</head>
<body class="notification" style="height:600px;">
<div id="app-content"></div>
- <script src="./scripts/popup.js" type="text/javascript" charset="utf-8"></script>
+ <script src="./scripts/ui.js" type="text/javascript" charset="utf-8"></script>
</body>
</html>
diff --git a/app/popup.html b/app/popup.html
index bf09b97ca..109487d3e 100644
--- a/app/popup.html
+++ b/app/popup.html
@@ -3,10 +3,10 @@
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1 user-scalable=no">
- <title>MetaMask Plugin</title>
+ <title>MetaMask</title>
</head>
<body style="width:357px; height:600px;">
<div id="app-content"></div>
- <script src="./scripts/popup.js" type="text/javascript" charset="utf-8"></script>
+ <script src="./scripts/ui.js" type="text/javascript" charset="utf-8"></script>
</body>
</html>
diff --git a/app/scripts/popup.js b/app/scripts/ui.js
index 13c7ac5ec..13c7ac5ec 100644
--- a/app/scripts/popup.js
+++ b/app/scripts/ui.js
diff --git a/gulpfile.js b/gulpfile.js
index f57ea6206..2c000f576 100644
--- a/gulpfile.js
+++ b/gulpfile.js
@@ -32,6 +32,15 @@ var babel = require('gulp-babel')
var disableDebugTools = gutil.env.disableDebugTools
var debug = gutil.env.debug
+const commonPlatforms = [
+ // browser extensions
+ 'firefox',
+ 'chrome',
+ 'edge',
+ 'opera',
+ // browser webapp
+ 'mascara',
+]
// browser reload
@@ -46,58 +55,28 @@ gulp.task('dev:reload', function() {
gulp.task('copy:locales', copyTask({
source: './app/_locales/',
- destinations: [
- './dist/firefox/_locales',
- './dist/chrome/_locales',
- './dist/edge/_locales',
- './dist/opera/_locales',
- ]
+ destinations: commonPlatforms.map(platform => `./dist/${platform}/_locales`),
}))
gulp.task('copy:images', copyTask({
source: './app/images/',
- destinations: [
- './dist/firefox/images',
- './dist/chrome/images',
- './dist/edge/images',
- './dist/opera/images',
- ],
+ destinations: commonPlatforms.map(platform => `./dist/${platform}/images`),
}))
gulp.task('copy:contractImages', copyTask({
source: './node_modules/eth-contract-metadata/images/',
- destinations: [
- './dist/firefox/images/contract',
- './dist/chrome/images/contract',
- './dist/edge/images/contract',
- './dist/opera/images/contract',
- ],
+ destinations: commonPlatforms.map(platform => `./dist/${platform}/images/contract`),
}))
gulp.task('copy:fonts', copyTask({
source: './app/fonts/',
- destinations: [
- './dist/firefox/fonts',
- './dist/chrome/fonts',
- './dist/edge/fonts',
- './dist/opera/fonts',
- ],
+ destinations: commonPlatforms.map(platform => `./dist/${platform}/fonts`),
}))
gulp.task('copy:reload', copyTask({
source: './app/scripts/',
- destinations: [
- './dist/firefox/scripts',
- './dist/chrome/scripts',
- './dist/edge/scripts',
- './dist/opera/scripts',
- ],
+ destinations: commonPlatforms.map(platform => `./dist/${platform}/scripts`),
pattern: '/chromereload.js',
}))
gulp.task('copy:root', copyTask({
source: './app/',
- destinations: [
- './dist/firefox',
- './dist/chrome',
- './dist/edge',
- './dist/opera',
- ],
+ destinations: commonPlatforms.map(platform => `./dist/${platform}`),
pattern: '/*',
}))
@@ -208,7 +187,7 @@ const jsFiles = [
'inpage',
'contentscript',
'background',
- 'popup',
+ 'ui',
]
// scss compilation and autoprefixing tasks
@@ -230,7 +209,7 @@ gulp.task('lint-scss', function() {
.src('ui/app/css/itcss/**/*.scss')
.pipe(gulpStylelint({
reporters: [
- {formatter: 'string', console: true}
+ { formatter: 'string', console: true }
],
fix: true,
}));
@@ -243,32 +222,51 @@ gulp.task('fmt-scss', function () {
});
// bundle tasks
+createTasksForBuildJsExtension({ jsFiles, taskPrefix: 'dev:js', bundleTaskOpts: { isBuild: false } })
+createTasksForBuildJsExtension({ jsFiles, taskPrefix: 'build:js:extension', bundleTaskOpts: { isBuild: true } })
+createTasksForBuildJsMascara({ taskPrefix: 'build:js:mascara' })
+
+function createTasksForBuildJsExtension({ jsFiles, taskPrefix, bundleTaskOpts }) {
+ // inpage must be built before all other scripts:
+ const rootDir = './app/scripts'
+ const nonInpageFiles = jsFiles.filter(file => file !== 'inpage')
+ const buildPhase1 = ['inpage']
+ const buildPhase2 = nonInpageFiles
+ const destinations = [
+ './dist/firefox/scripts',
+ './dist/chrome/scripts',
+ './dist/edge/scripts',
+ './dist/opera/scripts',
+ ]
+ createTasksForBuildJs({ rootDir, jsFiles, taskPrefix, bundleTaskOpts, destinations, buildPhase1, buildPhase2 })
+}
-var jsDevStrings = jsFiles.map(jsFile => `dev:js:${jsFile}`)
-var jsBuildStrings = jsFiles.map(jsFile => `build:js:${jsFile}`)
-
-jsFiles.forEach((jsFile) => {
- gulp.task(`dev:js:${jsFile}`, bundleTask({
- watch: true,
- label: jsFile,
- filename: `${jsFile}.js`,
- isBuild: false
- }))
- gulp.task(`build:js:${jsFile}`, bundleTask({
- watch: false,
- label: jsFile,
- filename: `${jsFile}.js`,
- isBuild: true
- }))
-})
+function createTasksForBuildJsMascara({ taskPrefix, bundleTaskOpts }) {
+ // inpage must be built before all other scripts:
+ const rootDir = './mascara/src/'
+ const jsFiles = ['ui', 'proxy', 'background']
+ const destinations = ['./dist/mascara/scripts']
+ createTasksForBuildJs({ rootDir, jsFiles, taskPrefix, bundleTaskOpts, destinations, buildPhase1: jsFiles })
+}
-// inpage must be built before all other scripts:
-const firstDevString = jsDevStrings.shift()
-gulp.task('dev:js', gulp.series(firstDevString, gulp.parallel(...jsDevStrings)))
+function createTasksForBuildJs({ rootDir, jsFiles, taskPrefix, bundleTaskOpts, destinations, buildPhase1 = [], buildPhase2 = [] }) {
+ // bundle task for each file
+ jsFiles.forEach((jsFile) => {
+ gulp.task(`${taskPrefix}:${jsFile}`, bundleTask(Object.assign({
+ watch: false,
+ label: jsFile,
+ filename: `${jsFile}.js`,
+ filepath: `${rootDir}/${jsFile}.js`,
+ destinations,
+ }, bundleTaskOpts)))
+ })
+ // compose into larger task
+ const subtasks = []
+ subtasks.push(gulp.parallel(buildPhase1.map(file => `${taskPrefix}:${file}`)))
+ if (buildPhase2.length) subtasks.push(gulp.parallel(buildPhase2.map(file => `${taskPrefix}:${file}`)))
-// inpage must be built before all other scripts:
-const firstBuildString = jsBuildStrings.shift()
-gulp.task('build:js', gulp.series(firstBuildString, gulp.parallel(...jsBuildStrings)))
+ gulp.task(taskPrefix, gulp.series(subtasks))
+}
// disc bundle analyzer tasks
@@ -278,7 +276,6 @@ jsFiles.forEach((jsFile) => {
gulp.task('disc', gulp.parallel(jsFiles.map(jsFile => `disc:${jsFile}`)))
-
// clean dist
@@ -295,16 +292,44 @@ gulp.task('zip', gulp.parallel('zip:chrome', 'zip:firefox', 'zip:edge', 'zip:ope
// set env var for production
gulp.task('apply-prod-environment', function(done) {
- process.env.NODE_ENV = 'production'
- done()
+ process.env.NODE_ENV = 'production'
+ done()
});
// high level tasks
-gulp.task('dev', gulp.series('build:scss', 'dev:js', 'copy', gulp.parallel('watch:scss', 'copy:watch', 'dev:reload')))
+gulp.task('dev',
+ gulp.series(
+ 'build:scss',
+ 'dev:js',
+ 'copy',
+ gulp.parallel(
+ 'watch:scss',
+ 'copy:watch',
+ 'dev:reload'
+ )
+ )
+)
+
+gulp.task('build',
+ gulp.series(
+ 'clean',
+ 'build:scss',
+ gulp.parallel(
+ 'build:js:extension',
+ 'build:js:mascara',
+ 'copy'
+ )
+ )
+)
-gulp.task('build', gulp.series('clean', 'build:scss', gulp.parallel('build:js', 'copy')))
-gulp.task('dist', gulp.series('apply-prod-environment', 'build', 'zip'))
+gulp.task('dist',
+ gulp.series(
+ 'apply-prod-environment',
+ 'build',
+ 'zip'
+ )
+)
// task generators
@@ -337,7 +362,7 @@ function zipTask(target) {
function generateBundler(opts, performBundle) {
const browserifyOpts = assign({}, watchify.args, {
- entries: ['./app/scripts/'+opts.filename],
+ entries: [opts.filepath],
plugin: 'browserify-derequire',
debug: true,
fullPaths: debug,
@@ -384,19 +409,21 @@ function bundleTask(opts) {
return performBundle
function performBundle(){
- return (
- bundler.bundle()
+ let buildStream = bundler.bundle()
+
+ // handle errors
+ buildStream.on('error', (err) => {
+ beep()
+ if (opts.watch) {
+ console.warn(err.stack)
+ } else {
+ throw err
+ }
+ })
- // handle errors
- .on('error', (err) => {
- beep()
- if (opts.watch) {
- console.warn(err.stack)
- } else {
- throw err
- }
- })
+ // process bundles
+ buildStream = buildStream
// convert bundle stream to gulp vinyl stream
.pipe(source(opts.filename))
// inject variables into bundle
@@ -412,15 +439,18 @@ function bundleTask(opts) {
})))
// writes .map file
.pipe(sourcemaps.write(debug ? './' : '../../sourcemaps'))
- // write completed bundles
- .pipe(gulp.dest('./dist/firefox/scripts'))
- .pipe(gulp.dest('./dist/chrome/scripts'))
- .pipe(gulp.dest('./dist/edge/scripts'))
- .pipe(gulp.dest('./dist/opera/scripts'))
- // finally, trigger live reload
+
+ // write completed bundles
+ opts.destinations.forEach((dest) => {
+ buildStream = buildStream.pipe(gulp.dest(dest))
+ })
+
+ // finally, trigger live reload
+ buildStream = buildStream
.pipe(gulpif(debug, livereload()))
- )
+ return buildStream
+
}
}
diff --git a/mascara/server/index.js b/mascara/server/index.js
index 6fb1287cc..0f9b047a7 100644
--- a/mascara/server/index.js
+++ b/mascara/server/index.js
@@ -20,16 +20,16 @@ function createMetamascaraServer () {
server.use(compression())
// ui window
- serveBundle(server, '/ui.js', uiBundle)
+ serveBundle(server, '/scripts/ui.js', uiBundle)
server.use(express.static(path.join(__dirname, '/../ui/'), { setHeaders: (res) => res.set('X-Frame-Options', 'DENY') }))
server.use(express.static(path.join(__dirname, '/../../dist/chrome')))
// metamascara
serveBundle(server, '/metamascara.js', metamascaraBundle)
// proxy
- serveBundle(server, '/proxy/proxy.js', proxyBundle)
- server.use('/proxy/', express.static(path.join(__dirname, '/../proxy')))
+ serveBundle(server, '/scripts/proxy.js', proxyBundle)
+ server.use('/', express.static(path.join(__dirname, '/../proxy')))
// background
- serveBundle(server, '/background.js', backgroundBuild)
+ serveBundle(server, '/scripts/background.js', backgroundBuild)
return server
diff --git a/mascara/src/proxy.js b/mascara/src/proxy.js
index 54c5d5cf4..3958f7d50 100644
--- a/mascara/src/proxy.js
+++ b/mascara/src/proxy.js
@@ -4,7 +4,7 @@ const SwStream = require('sw-stream/lib/sw-stream.js')
const intervalDelay = Math.floor(Math.random() * (30000 - 1000)) + 1000
const background = new SWcontroller({
- fileName: '/background.js',
+ fileName: './scripts/background.js',
letBeIdle: false,
wakeUpInterval: 30000,
intervalDelay,
diff --git a/mascara/src/ui.js b/mascara/src/ui.js
index b272a2e06..21e5f32a9 100644
--- a/mascara/src/ui.js
+++ b/mascara/src/ui.js
@@ -20,7 +20,7 @@ window.METAMASK_PLATFORM_TYPE = 'mascara'
const intervalDelay = Math.floor(Math.random() * (30000 - 1000)) + 1000
const background = new SWcontroller({
- fileName: '/background.js',
+ fileName: './scripts/background.js',
letBeIdle: false,
intervalDelay,
wakeUpInterval: 20000,
diff --git a/test/e2e/metamask.spec.js b/test/e2e/metamask.spec.js
index c73ba2b41..e81e0a8df 100644
--- a/test/e2e/metamask.spec.js
+++ b/test/e2e/metamask.spec.js
@@ -33,7 +33,7 @@ describe('Metamask popup page', function () {
it('should match title', async () => {
const title = await driver.getTitle()
- assert.equal(title, 'MetaMask Plugin', 'title matches MetaMask Plugin')
+ assert.equal(title, 'MetaMask', 'title matches MetaMask')
})
it('should show privacy notice', async () => {