mirror of
https://github.com/kremalicious/metamask-extension.git
synced 2024-12-23 09:52:26 +01:00
Lavamoat build system integration for WebApp (#12242)
* lavamoat - add lavamoat to webapp background * test:e2e - add delay to resolve failure * test:e2e - add delay to resolve failure * build - add a switch for applying lavamoat, currently off for all * test/e2e - remove delays added for lavamoat * Revert "test/e2e - remove delays added for lavamoat" This reverts commit 79c3479f15c072ed362ba1d4f1af41ea11a17d63.
This commit is contained in:
parent
3985a65e36
commit
cb174ff8e6
@ -6,12 +6,18 @@
|
|||||||
<body>
|
<body>
|
||||||
<script src="./globalthis.js" type="text/javascript" charset="utf-8"></script>
|
<script src="./globalthis.js" type="text/javascript" charset="utf-8"></script>
|
||||||
<script src="./sentry-install.js" type="text/javascript" charset="utf-8"></script>
|
<script src="./sentry-install.js" type="text/javascript" charset="utf-8"></script>
|
||||||
<script src="./lockdown-install.js" type="text/javascript" charset="utf-8"></script>
|
{{@if(it.useLavamoat)}}
|
||||||
<script src="./lockdown-run.js" type="text/javascript" charset="utf-8"></script>
|
<script src="./runtime-lavamoat.js" type="text/javascript" charset="utf-8"></script>
|
||||||
<script src="./lockdown-more.js" type="text/javascript" charset="utf-8"></script>
|
<script src="./lockdown-more.js" type="text/javascript" charset="utf-8"></script>
|
||||||
<script src="./runtime-cjs.js" type="text/javascript" charset="utf-8"></script>
|
<script src="./policy-load.js" type="text/javascript" charset="utf-8"></script>
|
||||||
|
{{#else}}
|
||||||
|
<script src="./lockdown-install.js" type="text/javascript" charset="utf-8"></script>
|
||||||
|
<script src="./lockdown-run.js" type="text/javascript" charset="utf-8"></script>
|
||||||
|
<script src="./lockdown-more.js" type="text/javascript" charset="utf-8"></script>
|
||||||
|
<script src="./runtime-cjs.js" type="text/javascript" charset="utf-8"></script>
|
||||||
|
{{/if}}
|
||||||
{{@each(it.jsBundles) => val}}
|
{{@each(it.jsBundles) => val}}
|
||||||
<script src="{{val}}" type="text/javascript" charset="utf-8"></script>
|
<script src="{{val}}" type="text/javascript" charset="utf-8"></script>
|
||||||
{{/each}}
|
{{/each}}
|
||||||
<script src="./chromereload.js" type="text/javascript" charset="utf-8"></script>
|
<script src="./chromereload.js" type="text/javascript" charset="utf-8"></script>
|
||||||
</body>
|
</body>
|
||||||
|
@ -12,12 +12,18 @@
|
|||||||
<div id="popover-content"></div>
|
<div id="popover-content"></div>
|
||||||
<script src="./globalthis.js" type="text/javascript" charset="utf-8"></script>
|
<script src="./globalthis.js" type="text/javascript" charset="utf-8"></script>
|
||||||
<script src="./sentry-install.js" type="text/javascript" charset="utf-8"></script>
|
<script src="./sentry-install.js" type="text/javascript" charset="utf-8"></script>
|
||||||
<script src="./lockdown-install.js" type="text/javascript" charset="utf-8"></script>
|
{{@if(it.useLavamoat)}}
|
||||||
<script src="./lockdown-run.js" type="text/javascript" charset="utf-8"></script>
|
<script src="./runtime-lavamoat.js" type="text/javascript" charset="utf-8"></script>
|
||||||
<script src="./lockdown-more.js" type="text/javascript" charset="utf-8"></script>
|
<script src="./lockdown-more.js" type="text/javascript" charset="utf-8"></script>
|
||||||
<script src="./runtime-cjs.js" type="text/javascript" charset="utf-8"></script>
|
<script src="./policy-load.js" type="text/javascript" charset="utf-8"></script>
|
||||||
|
{{#else}}
|
||||||
|
<script src="./lockdown-install.js" type="text/javascript" charset="utf-8"></script>
|
||||||
|
<script src="./lockdown-run.js" type="text/javascript" charset="utf-8"></script>
|
||||||
|
<script src="./lockdown-more.js" type="text/javascript" charset="utf-8"></script>
|
||||||
|
<script src="./runtime-cjs.js" type="text/javascript" charset="utf-8"></script>
|
||||||
|
{{/if}}
|
||||||
{{@each(it.jsBundles) => val}}
|
{{@each(it.jsBundles) => val}}
|
||||||
<script src="{{val}}" type="text/javascript" charset="utf-8"></script>
|
<script src="{{val}}" type="text/javascript" charset="utf-8"></script>
|
||||||
{{/each}}
|
{{/each}}
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
@ -35,12 +35,18 @@
|
|||||||
<div id="popover-content"></div>
|
<div id="popover-content"></div>
|
||||||
<script src="./globalthis.js" type="text/javascript" charset="utf-8"></script>
|
<script src="./globalthis.js" type="text/javascript" charset="utf-8"></script>
|
||||||
<script src="./sentry-install.js" type="text/javascript" charset="utf-8"></script>
|
<script src="./sentry-install.js" type="text/javascript" charset="utf-8"></script>
|
||||||
<script src="./lockdown-install.js" type="text/javascript" charset="utf-8"></script>
|
{{@if(it.useLavamoat)}}
|
||||||
<script src="./lockdown-run.js" type="text/javascript" charset="utf-8"></script>
|
<script src="./runtime-lavamoat.js" type="text/javascript" charset="utf-8"></script>
|
||||||
<script src="./lockdown-more.js" type="text/javascript" charset="utf-8"></script>
|
<script src="./lockdown-more.js" type="text/javascript" charset="utf-8"></script>
|
||||||
<script src="./runtime-cjs.js" type="text/javascript" charset="utf-8"></script>
|
<script src="./policy-load.js" type="text/javascript" charset="utf-8"></script>
|
||||||
|
{{#else}}
|
||||||
|
<script src="./lockdown-install.js" type="text/javascript" charset="utf-8"></script>
|
||||||
|
<script src="./lockdown-run.js" type="text/javascript" charset="utf-8"></script>
|
||||||
|
<script src="./lockdown-more.js" type="text/javascript" charset="utf-8"></script>
|
||||||
|
<script src="./runtime-cjs.js" type="text/javascript" charset="utf-8"></script>
|
||||||
|
{{/if}}
|
||||||
{{@each(it.jsBundles) => val}}
|
{{@each(it.jsBundles) => val}}
|
||||||
<script src="{{val}}" type="text/javascript" charset="utf-8"></script>
|
<script src="{{val}}" type="text/javascript" charset="utf-8"></script>
|
||||||
{{/each}}
|
{{/each}}
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
@ -12,12 +12,18 @@
|
|||||||
<div id="popover-content"></div>
|
<div id="popover-content"></div>
|
||||||
<script src="./globalthis.js" type="text/javascript" charset="utf-8"></script>
|
<script src="./globalthis.js" type="text/javascript" charset="utf-8"></script>
|
||||||
<script src="./sentry-install.js" type="text/javascript" charset="utf-8"></script>
|
<script src="./sentry-install.js" type="text/javascript" charset="utf-8"></script>
|
||||||
<script src="./lockdown-install.js" type="text/javascript" charset="utf-8"></script>
|
{{@if(it.useLavamoat)}}
|
||||||
<script src="./lockdown-run.js" type="text/javascript" charset="utf-8"></script>
|
<script src="./runtime-lavamoat.js" type="text/javascript" charset="utf-8"></script>
|
||||||
<script src="./lockdown-more.js" type="text/javascript" charset="utf-8"></script>
|
<script src="./lockdown-more.js" type="text/javascript" charset="utf-8"></script>
|
||||||
<script src="./runtime-cjs.js" type="text/javascript" charset="utf-8"></script>
|
<script src="./policy-load.js" type="text/javascript" charset="utf-8"></script>
|
||||||
|
{{#else}}
|
||||||
|
<script src="./lockdown-install.js" type="text/javascript" charset="utf-8"></script>
|
||||||
|
<script src="./lockdown-run.js" type="text/javascript" charset="utf-8"></script>
|
||||||
|
<script src="./lockdown-more.js" type="text/javascript" charset="utf-8"></script>
|
||||||
|
<script src="./runtime-cjs.js" type="text/javascript" charset="utf-8"></script>
|
||||||
|
{{/if}}
|
||||||
{{@each(it.jsBundles) => val}}
|
{{@each(it.jsBundles) => val}}
|
||||||
<script src="{{val}}" type="text/javascript" charset="utf-8"></script>
|
<script src="{{val}}" type="text/javascript" charset="utf-8"></script>
|
||||||
{{/each}}
|
{{/each}}
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
@ -4,6 +4,7 @@ const { writeFileSync, readFileSync } = require('fs');
|
|||||||
const EventEmitter = require('events');
|
const EventEmitter = require('events');
|
||||||
const gulp = require('gulp');
|
const gulp = require('gulp');
|
||||||
const watch = require('gulp-watch');
|
const watch = require('gulp-watch');
|
||||||
|
const Vinyl = require('vinyl');
|
||||||
const source = require('vinyl-source-stream');
|
const source = require('vinyl-source-stream');
|
||||||
const buffer = require('vinyl-buffer');
|
const buffer = require('vinyl-buffer');
|
||||||
const log = require('fancy-log');
|
const log = require('fancy-log');
|
||||||
@ -20,7 +21,8 @@ const endOfStream = pify(require('end-of-stream'));
|
|||||||
const labeledStreamSplicer = require('labeled-stream-splicer').obj;
|
const labeledStreamSplicer = require('labeled-stream-splicer').obj;
|
||||||
const wrapInStream = require('pumpify').obj;
|
const wrapInStream = require('pumpify').obj;
|
||||||
const Sqrl = require('squirrelly');
|
const Sqrl = require('squirrelly');
|
||||||
const lavaPack = require('@lavamoat/lavapack');
|
const lavapack = require('@lavamoat/lavapack');
|
||||||
|
const lavamoatBrowserify = require('lavamoat-browserify');
|
||||||
const terser = require('terser');
|
const terser = require('terser');
|
||||||
|
|
||||||
const bifyModuleGroups = require('bify-module-groups');
|
const bifyModuleGroups = require('bify-module-groups');
|
||||||
@ -260,7 +262,22 @@ function createFactoredBuild({
|
|||||||
// set bundle entries
|
// set bundle entries
|
||||||
bundlerOpts.entries = [...entryFiles];
|
bundlerOpts.entries = [...entryFiles];
|
||||||
|
|
||||||
|
// setup lavamoat
|
||||||
|
// lavamoat will add lavapack but it will be removed by bify-module-groups
|
||||||
|
// we will re-add it later by installing a lavapack runtime
|
||||||
|
const lavamoatOpts = {
|
||||||
|
policy: path.resolve(__dirname, '../../lavamoat/browserify/policy.json'),
|
||||||
|
policyOverride: path.resolve(
|
||||||
|
__dirname,
|
||||||
|
'../../lavamoat/browserify/policy-override.json',
|
||||||
|
),
|
||||||
|
writeAutoPolicy: process.env.WRITE_AUTO_POLICY,
|
||||||
|
};
|
||||||
|
Object.assign(bundlerOpts, lavamoatBrowserify.args);
|
||||||
|
bundlerOpts.plugin.push([lavamoatBrowserify, lavamoatOpts]);
|
||||||
|
|
||||||
// setup bundle factoring with bify-module-groups plugin
|
// setup bundle factoring with bify-module-groups plugin
|
||||||
|
// note: this will remove lavapack, but its ok bc we manually readd it later
|
||||||
Object.assign(bundlerOpts, bifyModuleGroups.plugin.args);
|
Object.assign(bundlerOpts, bifyModuleGroups.plugin.args);
|
||||||
bundlerOpts.plugin = [...bundlerOpts.plugin, [bifyModuleGroups.plugin]];
|
bundlerOpts.plugin = [...bundlerOpts.plugin, [bifyModuleGroups.plugin]];
|
||||||
|
|
||||||
@ -282,18 +299,24 @@ function createFactoredBuild({
|
|||||||
groupingMap: sizeGroupMap,
|
groupingMap: sizeGroupMap,
|
||||||
}),
|
}),
|
||||||
);
|
);
|
||||||
pipeline.get('vinyl').unshift(
|
// converts each module group into a single vinyl file containing its bundle
|
||||||
// convert each module group into a stream with a single vinyl file
|
const moduleGroupPackerStream = streamFlatMap((moduleGroup) => {
|
||||||
streamFlatMap((moduleGroup) => {
|
const filename = `${moduleGroup.label}.js`;
|
||||||
const filename = `${moduleGroup.label}.js`;
|
const childStream = wrapInStream(
|
||||||
const childStream = wrapInStream(
|
moduleGroup.stream,
|
||||||
moduleGroup.stream,
|
// we manually readd lavapack here bc bify-module-groups removes it
|
||||||
lavaPack({ raw: true, hasExports: true, includePrelude: false }),
|
lavapack({ raw: true, hasExports: true, includePrelude: false }),
|
||||||
source(filename),
|
source(filename),
|
||||||
);
|
);
|
||||||
return childStream;
|
return childStream;
|
||||||
|
});
|
||||||
|
pipeline.get('vinyl').unshift(moduleGroupPackerStream, buffer());
|
||||||
|
// add lavamoat policy loader file to packer output
|
||||||
|
moduleGroupPackerStream.push(
|
||||||
|
new Vinyl({
|
||||||
|
path: 'policy-load.js',
|
||||||
|
contents: lavapack.makePolicyLoaderStream(lavamoatOpts),
|
||||||
}),
|
}),
|
||||||
buffer(),
|
|
||||||
);
|
);
|
||||||
// setup bundle destination
|
// setup bundle destination
|
||||||
browserPlatforms.forEach((platform) => {
|
browserPlatforms.forEach((platform) => {
|
||||||
@ -307,36 +330,58 @@ function createFactoredBuild({
|
|||||||
const commonSet = sizeGroupMap.get('common');
|
const commonSet = sizeGroupMap.get('common');
|
||||||
// create entry points for each file
|
// create entry points for each file
|
||||||
for (const [groupLabel, groupSet] of sizeGroupMap.entries()) {
|
for (const [groupLabel, groupSet] of sizeGroupMap.entries()) {
|
||||||
// skip "common" group, they are added tp all other groups
|
// skip "common" group, they are added to all other groups
|
||||||
if (groupSet === commonSet) continue;
|
if (groupSet === commonSet) continue;
|
||||||
|
|
||||||
switch (groupLabel) {
|
switch (groupLabel) {
|
||||||
case 'ui': {
|
case 'ui': {
|
||||||
renderHtmlFile('popup', groupSet, commonSet, browserPlatforms);
|
renderHtmlFile({
|
||||||
renderHtmlFile(
|
htmlName: 'popup',
|
||||||
'notification',
|
|
||||||
groupSet,
|
groupSet,
|
||||||
commonSet,
|
commonSet,
|
||||||
browserPlatforms,
|
browserPlatforms,
|
||||||
);
|
useLavamoat: false,
|
||||||
renderHtmlFile('home', groupSet, commonSet, browserPlatforms);
|
});
|
||||||
|
renderHtmlFile({
|
||||||
|
htmlName: 'notification',
|
||||||
|
groupSet,
|
||||||
|
commonSet,
|
||||||
|
browserPlatforms,
|
||||||
|
useLavamoat: false,
|
||||||
|
});
|
||||||
|
renderHtmlFile({
|
||||||
|
htmlName: 'home',
|
||||||
|
groupSet,
|
||||||
|
commonSet,
|
||||||
|
browserPlatforms,
|
||||||
|
useLavamoat: false,
|
||||||
|
});
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 'background': {
|
case 'background': {
|
||||||
renderHtmlFile('background', groupSet, commonSet, browserPlatforms);
|
renderHtmlFile({
|
||||||
break;
|
htmlName: 'background',
|
||||||
}
|
|
||||||
case 'content-script': {
|
|
||||||
renderHtmlFile(
|
|
||||||
'trezor-usb-permissions',
|
|
||||||
groupSet,
|
groupSet,
|
||||||
commonSet,
|
commonSet,
|
||||||
browserPlatforms,
|
browserPlatforms,
|
||||||
);
|
useLavamoat: false,
|
||||||
|
});
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 'content-script': {
|
||||||
|
renderHtmlFile({
|
||||||
|
htmlName: 'trezor-usb-permissions',
|
||||||
|
groupSet,
|
||||||
|
commonSet,
|
||||||
|
browserPlatforms,
|
||||||
|
useLavamoat: false,
|
||||||
|
});
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
default: {
|
default: {
|
||||||
throw new Error(`buildsys - unknown groupLabel "${groupLabel}"`);
|
throw new Error(
|
||||||
|
`build/scripts - unknown groupLabel "${groupLabel}"`,
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -637,13 +682,24 @@ function getEnvironment({ devMode, testing }) {
|
|||||||
return 'other';
|
return 'other';
|
||||||
}
|
}
|
||||||
|
|
||||||
function renderHtmlFile(htmlName, groupSet, commonSet, browserPlatforms) {
|
function renderHtmlFile({
|
||||||
|
htmlName,
|
||||||
|
groupSet,
|
||||||
|
commonSet,
|
||||||
|
browserPlatforms,
|
||||||
|
useLavamoat,
|
||||||
|
}) {
|
||||||
|
if (useLavamoat === undefined) {
|
||||||
|
throw new Error(
|
||||||
|
'build/scripts/renderHtmlFile - must specify "useLavamoat" option',
|
||||||
|
);
|
||||||
|
}
|
||||||
const htmlFilePath = `./app/${htmlName}.html`;
|
const htmlFilePath = `./app/${htmlName}.html`;
|
||||||
const htmlTemplate = readFileSync(htmlFilePath, 'utf8');
|
const htmlTemplate = readFileSync(htmlFilePath, 'utf8');
|
||||||
const jsBundles = [...commonSet.values(), ...groupSet.values()].map(
|
const jsBundles = [...commonSet.values(), ...groupSet.values()].map(
|
||||||
(label) => `./${label}.js`,
|
(label) => `./${label}.js`,
|
||||||
);
|
);
|
||||||
const htmlOutput = Sqrl.render(htmlTemplate, { jsBundles });
|
const htmlOutput = Sqrl.render(htmlTemplate, { jsBundles, useLavamoat });
|
||||||
browserPlatforms.forEach((platform) => {
|
browserPlatforms.forEach((platform) => {
|
||||||
const dest = `./dist/${platform}/${htmlName}.html`;
|
const dest = `./dist/${platform}/${htmlName}.html`;
|
||||||
// we dont have a way of creating async events atm
|
// we dont have a way of creating async events atm
|
||||||
|
@ -159,6 +159,11 @@ function getCopyTargets(shouldIncludeLockdown) {
|
|||||||
src: require.resolve('@lavamoat/lavapack/src/runtime-cjs.js'),
|
src: require.resolve('@lavamoat/lavapack/src/runtime-cjs.js'),
|
||||||
dest: `runtime-cjs.js`,
|
dest: `runtime-cjs.js`,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
// eslint-disable-next-line node/no-extraneous-require
|
||||||
|
src: require.resolve('@lavamoat/lavapack/src/runtime.js'),
|
||||||
|
dest: `runtime-lavamoat.js`,
|
||||||
|
},
|
||||||
{
|
{
|
||||||
src: `./app/phishing.html`,
|
src: `./app/phishing.html`,
|
||||||
dest: `phishing.html`,
|
dest: `phishing.html`,
|
||||||
|
55
lavamoat/browserify/policy-override.json
Normal file
55
lavamoat/browserify/policy-override.json
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
{
|
||||||
|
"resources": {
|
||||||
|
"browser-resolve": {
|
||||||
|
"packages": {
|
||||||
|
"core-js": true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"babel-runtime": {
|
||||||
|
"packages": {
|
||||||
|
"@babel/runtime": true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node-fetch": {
|
||||||
|
"globals": {
|
||||||
|
"fetch": true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"lodash": {
|
||||||
|
"globals": {
|
||||||
|
"setTimeout": true,
|
||||||
|
"clearTimeout": true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"@ethersproject/random": {
|
||||||
|
"globals": {
|
||||||
|
"crypto.getRandomValues": true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"browser-passworder": {
|
||||||
|
"globals": {
|
||||||
|
"crypto": true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"randombytes": {
|
||||||
|
"globals": {
|
||||||
|
"crypto.getRandomValues": true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"extensionizer": {
|
||||||
|
"globals": {
|
||||||
|
"console": true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"web3": {
|
||||||
|
"globals": {
|
||||||
|
"XMLHttpRequest": true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"storage": {
|
||||||
|
"globals": {
|
||||||
|
"localStorage": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
4656
lavamoat/browserify/policy.json
Normal file
4656
lavamoat/browserify/policy.json
Normal file
File diff suppressed because it is too large
Load Diff
@ -840,18 +840,22 @@
|
|||||||
"builtin": {
|
"builtin": {
|
||||||
"assert": true,
|
"assert": true,
|
||||||
"buffer.Buffer.from": true,
|
"buffer.Buffer.from": true,
|
||||||
|
"fs.readFileSync": true,
|
||||||
"path.join": true,
|
"path.join": true,
|
||||||
"path.relative": true
|
"path.relative": true
|
||||||
},
|
},
|
||||||
"globals": {
|
"globals": {
|
||||||
"__dirname": true,
|
"__dirname": true,
|
||||||
"process.cwd": true
|
"process.cwd": true,
|
||||||
|
"setTimeout": true
|
||||||
},
|
},
|
||||||
"packages": {
|
"packages": {
|
||||||
"JSONStream": true,
|
"JSONStream": true,
|
||||||
"combine-source-map": true,
|
"combine-source-map": true,
|
||||||
"convert-source-map": true,
|
"convert-source-map": true,
|
||||||
"json-stable-stringify": true,
|
"json-stable-stringify": true,
|
||||||
|
"lavamoat-core": true,
|
||||||
|
"readable-stream": true,
|
||||||
"through2": true,
|
"through2": true,
|
||||||
"umd": true
|
"umd": true
|
||||||
}
|
}
|
||||||
@ -1398,6 +1402,15 @@
|
|||||||
"buffer.Buffer": true
|
"buffer.Buffer": true
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"clone-deep": {
|
||||||
|
"packages": {
|
||||||
|
"for-own": true,
|
||||||
|
"is-plain-object": true,
|
||||||
|
"kind-of": true,
|
||||||
|
"lazy-cache": true,
|
||||||
|
"shallow-clone": true
|
||||||
|
}
|
||||||
|
},
|
||||||
"clone-regexp": {
|
"clone-regexp": {
|
||||||
"packages": {
|
"packages": {
|
||||||
"is-regexp": true
|
"is-regexp": true
|
||||||
@ -1456,6 +1469,7 @@
|
|||||||
"concat-stream": {
|
"concat-stream": {
|
||||||
"globals": {
|
"globals": {
|
||||||
"Buffer.concat": true,
|
"Buffer.concat": true,
|
||||||
|
"Buffer.from": true,
|
||||||
"Buffer.isBuffer": true
|
"Buffer.isBuffer": true
|
||||||
},
|
},
|
||||||
"packages": {
|
"packages": {
|
||||||
@ -2812,6 +2826,70 @@
|
|||||||
"es6-weak-map": true
|
"es6-weak-map": true
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"lavamoat-browserify": {
|
||||||
|
"builtin": {
|
||||||
|
"fs.existsSync": true,
|
||||||
|
"fs.mkdirSync": true,
|
||||||
|
"fs.readFileSync": true,
|
||||||
|
"fs.writeFileSync": true,
|
||||||
|
"path.dirname": true,
|
||||||
|
"path.extname": true,
|
||||||
|
"path.resolve": true,
|
||||||
|
"util.callbackify": true
|
||||||
|
},
|
||||||
|
"globals": {
|
||||||
|
"console.warn": true,
|
||||||
|
"process.cwd": true
|
||||||
|
},
|
||||||
|
"packages": {
|
||||||
|
"@lavamoat/lavapack": true,
|
||||||
|
"concat-stream": true,
|
||||||
|
"duplexify": true,
|
||||||
|
"json-stable-stringify": true,
|
||||||
|
"lavamoat-core": true,
|
||||||
|
"readable-stream": true,
|
||||||
|
"through2": true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"lavamoat-core": {
|
||||||
|
"builtin": {
|
||||||
|
"events": true,
|
||||||
|
"fs.existsSync": true,
|
||||||
|
"fs.readFileSync": true,
|
||||||
|
"module.createRequire": true,
|
||||||
|
"module.createRequireFromPath": true,
|
||||||
|
"path.extname": true,
|
||||||
|
"path.join": true,
|
||||||
|
"path.sep": true
|
||||||
|
},
|
||||||
|
"globals": {
|
||||||
|
"__dirname": true,
|
||||||
|
"console.warn": true,
|
||||||
|
"define": true
|
||||||
|
},
|
||||||
|
"packages": {
|
||||||
|
"fromentries": true,
|
||||||
|
"json-stable-stringify": true,
|
||||||
|
"lavamoat-tofu": true,
|
||||||
|
"merge-deep": true,
|
||||||
|
"resolve": true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"lavamoat-tofu": {
|
||||||
|
"globals": {
|
||||||
|
"console.log": true
|
||||||
|
},
|
||||||
|
"packages": {
|
||||||
|
"@babel/parser": true,
|
||||||
|
"@babel/traverse": true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"lazy-cache": {
|
||||||
|
"globals": {
|
||||||
|
"process.env.TRAVIS": true,
|
||||||
|
"process.env.UNLAZY": true
|
||||||
|
}
|
||||||
|
},
|
||||||
"lazystream": {
|
"lazystream": {
|
||||||
"builtin": {
|
"builtin": {
|
||||||
"util.inherits": true
|
"util.inherits": true
|
||||||
@ -2928,6 +3006,13 @@
|
|||||||
"timers-ext": true
|
"timers-ext": true
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"merge-deep": {
|
||||||
|
"packages": {
|
||||||
|
"arr-union": true,
|
||||||
|
"clone-deep": true,
|
||||||
|
"kind-of": true
|
||||||
|
}
|
||||||
|
},
|
||||||
"merge-source-map": {
|
"merge-source-map": {
|
||||||
"packages": {
|
"packages": {
|
||||||
"source-map": true
|
"source-map": true
|
||||||
@ -2992,6 +3077,12 @@
|
|||||||
"is-extendable": true
|
"is-extendable": true
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"mixin-object": {
|
||||||
|
"packages": {
|
||||||
|
"for-in": true,
|
||||||
|
"is-extendable": true
|
||||||
|
}
|
||||||
|
},
|
||||||
"mkdirp": {
|
"mkdirp": {
|
||||||
"builtin": {
|
"builtin": {
|
||||||
"fs": true,
|
"fs": true,
|
||||||
@ -3734,6 +3825,14 @@
|
|||||||
"split-string": true
|
"split-string": true
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"shallow-clone": {
|
||||||
|
"packages": {
|
||||||
|
"is-extendable": true,
|
||||||
|
"kind-of": true,
|
||||||
|
"lazy-cache": true,
|
||||||
|
"mixin-object": true
|
||||||
|
}
|
||||||
|
},
|
||||||
"shasum": {
|
"shasum": {
|
||||||
"builtin": {
|
"builtin": {
|
||||||
"buffer.Buffer.isBuffer": true,
|
"buffer.Buffer.isBuffer": true,
|
||||||
|
10
package.json
10
package.json
@ -64,8 +64,10 @@
|
|||||||
"storybook:deploy": "storybook-to-ghpages --existing-output-dir storybook-build --remote storybook --branch master",
|
"storybook:deploy": "storybook-to-ghpages --existing-output-dir storybook-build --remote storybook --branch master",
|
||||||
"update-changelog": "auto-changelog update",
|
"update-changelog": "auto-changelog update",
|
||||||
"generate:migration": "./development/generate-migration.sh",
|
"generate:migration": "./development/generate-migration.sh",
|
||||||
"lavamoat:auto": "lavamoat ./development/build/index.js --writeAutoPolicy",
|
"lavamoat:build:auto": "lavamoat ./development/build/index.js --writeAutoPolicy",
|
||||||
"lavamoat:debug:build": "lavamoat ./development/build/index.js --writeAutoPolicyDebug"
|
"lavamoat:debug:build": "lavamoat ./development/build/index.js --writeAutoPolicyDebug",
|
||||||
|
"lavamoat:background:auto": "WRITE_AUTO_POLICY=1 yarn build prod",
|
||||||
|
"lavamoat:auto": "yarn lavamoat:build:auto && yarn lavamoat:background:auto"
|
||||||
},
|
},
|
||||||
"resolutions": {
|
"resolutions": {
|
||||||
"**/regenerator-runtime": "^0.13.7",
|
"**/regenerator-runtime": "^0.13.7",
|
||||||
@ -217,7 +219,7 @@
|
|||||||
"@babel/preset-react": "^7.0.0",
|
"@babel/preset-react": "^7.0.0",
|
||||||
"@babel/register": "^7.5.5",
|
"@babel/register": "^7.5.5",
|
||||||
"@lavamoat/allow-scripts": "^1.0.6",
|
"@lavamoat/allow-scripts": "^1.0.6",
|
||||||
"@lavamoat/lavapack": "^1.0.4",
|
"@lavamoat/lavapack": "^2.0.3",
|
||||||
"@metamask/auto-changelog": "^2.1.0",
|
"@metamask/auto-changelog": "^2.1.0",
|
||||||
"@metamask/eslint-config": "^6.0.0",
|
"@metamask/eslint-config": "^6.0.0",
|
||||||
"@metamask/eslint-config-jest": "^6.0.0",
|
"@metamask/eslint-config-jest": "^6.0.0",
|
||||||
@ -288,6 +290,7 @@
|
|||||||
"jsdom": "^11.2.0",
|
"jsdom": "^11.2.0",
|
||||||
"koa": "^2.7.0",
|
"koa": "^2.7.0",
|
||||||
"lavamoat": "^5.3.4",
|
"lavamoat": "^5.3.4",
|
||||||
|
"lavamoat-browserify": "^14.0.3",
|
||||||
"lavamoat-viz": "^6.0.9",
|
"lavamoat-viz": "^6.0.9",
|
||||||
"lockfile-lint": "^4.0.0",
|
"lockfile-lint": "^4.0.0",
|
||||||
"loose-envify": "^1.4.0",
|
"loose-envify": "^1.4.0",
|
||||||
@ -323,6 +326,7 @@
|
|||||||
"terser": "^5.7.0",
|
"terser": "^5.7.0",
|
||||||
"through2": "^4.0.2",
|
"through2": "^4.0.2",
|
||||||
"ttest": "^2.1.1",
|
"ttest": "^2.1.1",
|
||||||
|
"vinyl": "^2.2.1",
|
||||||
"vinyl-buffer": "^1.0.1",
|
"vinyl-buffer": "^1.0.1",
|
||||||
"vinyl-source-stream": "^2.0.0",
|
"vinyl-source-stream": "^2.0.0",
|
||||||
"vinyl-sourcemaps-apply": "^0.2.1",
|
"vinyl-sourcemaps-apply": "^0.2.1",
|
||||||
|
@ -32,6 +32,7 @@ describe('Deploy contract and call contract methods', function () {
|
|||||||
await driver.openNewPage('http://127.0.0.1:8080/');
|
await driver.openNewPage('http://127.0.0.1:8080/');
|
||||||
await driver.clickElement({ text: 'Connect', tag: 'button' });
|
await driver.clickElement({ text: 'Connect', tag: 'button' });
|
||||||
await driver.waitUntilXWindowHandles(3);
|
await driver.waitUntilXWindowHandles(3);
|
||||||
|
await driver.delay(5000);
|
||||||
windowHandles = await driver.getAllWindowHandles();
|
windowHandles = await driver.getAllWindowHandles();
|
||||||
extension = windowHandles[0];
|
extension = windowHandles[0];
|
||||||
dapp = await driver.switchToWindowWithTitle(
|
dapp = await driver.switchToWindowWithTitle(
|
||||||
@ -86,6 +87,7 @@ describe('Deploy contract and call contract methods', function () {
|
|||||||
await driver.switchToWindow(dapp);
|
await driver.switchToWindow(dapp);
|
||||||
await driver.clickElement('#depositButton');
|
await driver.clickElement('#depositButton');
|
||||||
await driver.waitUntilXWindowHandles(3);
|
await driver.waitUntilXWindowHandles(3);
|
||||||
|
await driver.delay(5000);
|
||||||
windowHandles = await driver.getAllWindowHandles();
|
windowHandles = await driver.getAllWindowHandles();
|
||||||
await driver.switchToWindowWithTitle(
|
await driver.switchToWindowWithTitle(
|
||||||
'MetaMask Notification',
|
'MetaMask Notification',
|
||||||
@ -111,11 +113,13 @@ describe('Deploy contract and call contract methods', function () {
|
|||||||
await driver.switchToWindow(dapp);
|
await driver.switchToWindow(dapp);
|
||||||
await driver.clickElement('#withdrawButton');
|
await driver.clickElement('#withdrawButton');
|
||||||
await driver.waitUntilXWindowHandles(3);
|
await driver.waitUntilXWindowHandles(3);
|
||||||
|
await driver.delay(5000);
|
||||||
windowHandles = await driver.getAllWindowHandles();
|
windowHandles = await driver.getAllWindowHandles();
|
||||||
await driver.switchToWindowWithTitle(
|
await driver.switchToWindowWithTitle(
|
||||||
'MetaMask Notification',
|
'MetaMask Notification',
|
||||||
windowHandles,
|
windowHandles,
|
||||||
);
|
);
|
||||||
|
await driver.delay(regularDelayMs);
|
||||||
await driver.clickElement({ text: 'Confirm', tag: 'button' });
|
await driver.clickElement({ text: 'Confirm', tag: 'button' });
|
||||||
await driver.waitUntilXWindowHandles(2);
|
await driver.waitUntilXWindowHandles(2);
|
||||||
await driver.switchToWindow(extension);
|
await driver.switchToWindow(extension);
|
||||||
|
61
yarn.lock
61
yarn.lock
@ -2639,15 +2639,16 @@
|
|||||||
semver "^7.3.4"
|
semver "^7.3.4"
|
||||||
yargs "^16.2.0"
|
yargs "^16.2.0"
|
||||||
|
|
||||||
"@lavamoat/lavapack@^1.0.4":
|
"@lavamoat/lavapack@^2.0.3":
|
||||||
version "1.0.4"
|
version "2.0.3"
|
||||||
resolved "https://registry.yarnpkg.com/@lavamoat/lavapack/-/lavapack-1.0.4.tgz#e72d6b29fa70da8236a127c1d95cb581cda6941e"
|
resolved "https://registry.yarnpkg.com/@lavamoat/lavapack/-/lavapack-2.0.3.tgz#d535e23b4e98d21ac7aad57ef5019e64f1701117"
|
||||||
integrity sha512-Zhcn+eJyHIS4AAmN9IIjs8WCh12Q7NpFXXz0pI3Y54uknTdx5TPlwr3ARKf0jEXDOWNok/TuK2uPld54BSG/FQ==
|
integrity sha512-7gpFnNaB4P15YsLf9/6Rn5EGAAg8s5CyVUZWy8bFHT+KaLzcRnjsbr1H5VehZkpU2xT0jWYHo1Rii7WmGdLQxg==
|
||||||
dependencies:
|
dependencies:
|
||||||
JSONStream "^1.3.5"
|
JSONStream "^1.3.5"
|
||||||
combine-source-map "^0.8.0"
|
combine-source-map "^0.8.0"
|
||||||
convert-source-map "^1.7.0"
|
convert-source-map "^1.7.0"
|
||||||
json-stable-stringify "^1.0.1"
|
json-stable-stringify "^1.0.1"
|
||||||
|
lavamoat-core "^11.0.0"
|
||||||
through2 "^4.0.2"
|
through2 "^4.0.2"
|
||||||
umd "^3.0.3"
|
umd "^3.0.3"
|
||||||
|
|
||||||
@ -8272,7 +8273,7 @@ clone@2.1.1:
|
|||||||
resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.1.tgz#d217d1e961118e3ac9a4b8bba3285553bf647cdb"
|
resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.1.tgz#d217d1e961118e3ac9a4b8bba3285553bf647cdb"
|
||||||
integrity sha1-0hfR6WERjjrJpLi7oyhVU79kfNs=
|
integrity sha1-0hfR6WERjjrJpLi7oyhVU79kfNs=
|
||||||
|
|
||||||
clone@2.1.2, clone@^2.0.0, clone@^2.1.1:
|
clone@2.1.2, clone@^2.0.0, clone@^2.1.1, clone@^2.1.2:
|
||||||
version "2.1.2"
|
version "2.1.2"
|
||||||
resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f"
|
resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f"
|
||||||
integrity sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=
|
integrity sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=
|
||||||
@ -8523,7 +8524,7 @@ concat-stream@^1.5.0, concat-stream@^1.5.1, concat-stream@^1.5.2, concat-stream@
|
|||||||
readable-stream "^2.2.2"
|
readable-stream "^2.2.2"
|
||||||
typedarray "^0.0.6"
|
typedarray "^0.0.6"
|
||||||
|
|
||||||
"concat-stream@github:hugomrdias/concat-stream#feat/smaller":
|
concat-stream@^2.0.0, "concat-stream@github:hugomrdias/concat-stream#feat/smaller":
|
||||||
version "2.0.0"
|
version "2.0.0"
|
||||||
resolved "https://codeload.github.com/hugomrdias/concat-stream/tar.gz/057bc7b5d6d8df26c8cf00a3f151b6721a0a8034"
|
resolved "https://codeload.github.com/hugomrdias/concat-stream/tar.gz/057bc7b5d6d8df26c8cf00a3f151b6721a0a8034"
|
||||||
dependencies:
|
dependencies:
|
||||||
@ -8654,7 +8655,7 @@ convert-source-map@^0.3.3:
|
|||||||
resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-0.3.5.tgz#f1d802950af7dd2631a1febe0596550c86ab3190"
|
resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-0.3.5.tgz#f1d802950af7dd2631a1febe0596550c86ab3190"
|
||||||
integrity sha1-8dgClQr33SYxof6+BZZVDIarMZA=
|
integrity sha1-8dgClQr33SYxof6+BZZVDIarMZA=
|
||||||
|
|
||||||
convert-source-map@^1.0.0:
|
convert-source-map@^1.0.0, convert-source-map@^1.8.0:
|
||||||
version "1.8.0"
|
version "1.8.0"
|
||||||
resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.8.0.tgz#f3373c32d21b4d780dd8004514684fb791ca4369"
|
resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.8.0.tgz#f3373c32d21b4d780dd8004514684fb791ca4369"
|
||||||
integrity sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==
|
integrity sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==
|
||||||
@ -17407,6 +17408,27 @@ latest-version@^5.0.0:
|
|||||||
dependencies:
|
dependencies:
|
||||||
package-json "^6.3.0"
|
package-json "^6.3.0"
|
||||||
|
|
||||||
|
lavamoat-browserify@^14.0.3:
|
||||||
|
version "14.0.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/lavamoat-browserify/-/lavamoat-browserify-14.0.3.tgz#1f179ec34f18a433f6c8348d5e271b6a8e58bc09"
|
||||||
|
integrity sha512-TFRW6BV1n980g6rcKq90rjYyIbGumATc/7y6//qRXXBUSxRKAvTmyzVE19kNS5xdhWPlneDddf+YOZLwI8n1Gw==
|
||||||
|
dependencies:
|
||||||
|
"@lavamoat/lavapack" "^2.0.3"
|
||||||
|
JSONStream "^1.3.5"
|
||||||
|
clone "^2.1.2"
|
||||||
|
concat-stream "^2.0.0"
|
||||||
|
convert-source-map "^1.8.0"
|
||||||
|
duplexify "^4.1.1"
|
||||||
|
json-stable-stringify "^1.0.1"
|
||||||
|
lavamoat-core "^11.0.0"
|
||||||
|
merge-deep "^3.0.2"
|
||||||
|
offset-sourcemap-lines "^1.0.1"
|
||||||
|
pify "^4.0.1"
|
||||||
|
readable-stream "^3.6.0"
|
||||||
|
safe-buffer "^5.1.2"
|
||||||
|
through2 "^3.0.0"
|
||||||
|
umd "^3.0.3"
|
||||||
|
|
||||||
lavamoat-core@^10.0.1:
|
lavamoat-core@^10.0.1:
|
||||||
version "10.0.1"
|
version "10.0.1"
|
||||||
resolved "https://registry.yarnpkg.com/lavamoat-core/-/lavamoat-core-10.0.1.tgz#155bb4a50ace2e624941f14ca87705b171f6bba9"
|
resolved "https://registry.yarnpkg.com/lavamoat-core/-/lavamoat-core-10.0.1.tgz#155bb4a50ace2e624941f14ca87705b171f6bba9"
|
||||||
@ -20472,6 +20494,13 @@ observable-webworkers@^1.0.0:
|
|||||||
resolved "https://registry.yarnpkg.com/observable-webworkers/-/observable-webworkers-1.0.0.tgz#dcbd484a9644d512accc351962c6e710313fbb68"
|
resolved "https://registry.yarnpkg.com/observable-webworkers/-/observable-webworkers-1.0.0.tgz#dcbd484a9644d512accc351962c6e710313fbb68"
|
||||||
integrity sha512-+cECwCR8IEh8UY5nefQVLO9Cydqpk1izO+o7BABmKjXfJZyEOzBWY3ss5jbOPM6KmEa9aQExvAtTW6tVTOsNAQ==
|
integrity sha512-+cECwCR8IEh8UY5nefQVLO9Cydqpk1izO+o7BABmKjXfJZyEOzBWY3ss5jbOPM6KmEa9aQExvAtTW6tVTOsNAQ==
|
||||||
|
|
||||||
|
offset-sourcemap-lines@^1.0.1:
|
||||||
|
version "1.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/offset-sourcemap-lines/-/offset-sourcemap-lines-1.0.1.tgz#5854dff74b73fc06efcb61d7b721a8113d99be92"
|
||||||
|
integrity sha1-WFTf90tz/Abvy2HXtyGoET2ZvpI=
|
||||||
|
dependencies:
|
||||||
|
source-map "^0.5.0"
|
||||||
|
|
||||||
on-finished@^2.3.0, on-finished@~2.3.0:
|
on-finished@^2.3.0, on-finished@~2.3.0:
|
||||||
version "2.3.0"
|
version "2.3.0"
|
||||||
resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947"
|
resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947"
|
||||||
@ -27778,6 +27807,18 @@ vinyl@^2.0.0, vinyl@^2.1.0, vinyl@^2.2.0:
|
|||||||
remove-trailing-separator "^1.0.1"
|
remove-trailing-separator "^1.0.1"
|
||||||
replace-ext "^1.0.0"
|
replace-ext "^1.0.0"
|
||||||
|
|
||||||
|
vinyl@^2.2.1:
|
||||||
|
version "2.2.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-2.2.1.tgz#23cfb8bbab5ece3803aa2c0a1eb28af7cbba1974"
|
||||||
|
integrity sha512-LII3bXRFBZLlezoG5FfZVcXflZgWP/4dCwKtxd5ky9+LOtM4CS3bIRQsmR1KMnMW07jpE8fqR2lcxPZ+8sJIcw==
|
||||||
|
dependencies:
|
||||||
|
clone "^2.1.1"
|
||||||
|
clone-buffer "^1.0.0"
|
||||||
|
clone-stats "^1.0.0"
|
||||||
|
cloneable-readable "^1.0.0"
|
||||||
|
remove-trailing-separator "^1.0.1"
|
||||||
|
replace-ext "^1.0.0"
|
||||||
|
|
||||||
vm-browserify@^1.0.0, vm-browserify@^1.0.1:
|
vm-browserify@^1.0.0, vm-browserify@^1.0.1:
|
||||||
version "1.1.2"
|
version "1.1.2"
|
||||||
resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0"
|
resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0"
|
||||||
@ -28899,9 +28940,9 @@ yauzl@2.10.0, yauzl@^2.10.0:
|
|||||||
fd-slicer "~1.1.0"
|
fd-slicer "~1.1.0"
|
||||||
|
|
||||||
yazl@^2.1.0:
|
yazl@^2.1.0:
|
||||||
version "2.5.1"
|
version "2.4.3"
|
||||||
resolved "https://registry.yarnpkg.com/yazl/-/yazl-2.5.1.tgz#a3d65d3dd659a5b0937850e8609f22fffa2b5c35"
|
resolved "https://registry.yarnpkg.com/yazl/-/yazl-2.4.3.tgz#ec26e5cc87d5601b9df8432dbdd3cd2e5173a071"
|
||||||
integrity sha512-phENi2PLiHnHb6QBVot+dJnaAZ0xosj7p3fWl+znIjBDlnMI2PsZCJZ306BPTFOaHf5qdDEI8x5qFrSOBN5vrw==
|
integrity sha1-7CblzIfVYBud+EMtvdPNLlFzoHE=
|
||||||
dependencies:
|
dependencies:
|
||||||
buffer-crc32 "~0.2.3"
|
buffer-crc32 "~0.2.3"
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user