From 6d9ea863bd956399a23c13f6ed97ba130336aa04 Mon Sep 17 00:00:00 2001 From: Dan Finlay Date: Thu, 1 Feb 2018 16:14:28 -0800 Subject: Make announcement more general --- development/announcer.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'development') diff --git a/development/announcer.js b/development/announcer.js index 43ae60acb..e97ea65b6 100644 --- a/development/announcer.js +++ b/development/announcer.js @@ -7,6 +7,6 @@ var changelog = fs.readFileSync(path.join(__dirname, '..', 'CHANGELOG.md')).toSt var log = changelog.split(version)[1].split('##')[0].trim() -let msg = `*MetaMask ${version}* now published to the Chrome Store! It should auto-update soon!\n${log}` +let msg = `*MetaMask ${version}* now published! It should auto-update soon!\n${log}` console.log(msg) -- cgit From 170c7602b70e475e75fbd1c7181d03e22465ae24 Mon Sep 17 00:00:00 2001 From: Dan J Miller Date: Fri, 16 Feb 2018 06:15:09 -0330 Subject: [NewUI] Adds the mascara first time flow to betaUI extension (#3257) * Adds the mascara first time flow to the extension when opened in browser. * Fix tests after addition of mascara first time flow to new ui. --- development/states/first-time.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'development') diff --git a/development/states/first-time.json b/development/states/first-time.json index 6e7435db1..4f5352992 100644 --- a/development/states/first-time.json +++ b/development/states/first-time.json @@ -8,7 +8,7 @@ "frequentRpcList": [], "unapprovedTxs": {}, "currentCurrency": "USD", - "featureFlags": {"betaUI": true}, + "featureFlags": {"betaUI": false}, "conversionRate": 12.7527416, "conversionDate": 1487624341, "noActiveNotices": false, -- cgit From bf17d7e1153180fe68cc568a6f4ffa8db66010dc Mon Sep 17 00:00:00 2001 From: Dan Finlay Date: Fri, 2 Mar 2018 13:55:56 -0800 Subject: Add version bumping script One step towards automating our deploy process is automating our version bumping scheme. This PR does that. --- development/run-version-bump.js | 51 +++++++++++++++++++++++++++++++++++++++ development/version-bump.js | 53 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 104 insertions(+) create mode 100644 development/run-version-bump.js create mode 100644 development/version-bump.js (limited to 'development') diff --git a/development/run-version-bump.js b/development/run-version-bump.js new file mode 100644 index 000000000..3b26b00db --- /dev/null +++ b/development/run-version-bump.js @@ -0,0 +1,51 @@ +const { promisify } = require('util') +const fs = require('fs') +const readFile = promisify(fs.readFile) +const writeFile = promisify(fs.writeFile) +const path = require('path') +const changelogPath = path.join(__dirname, '..', 'CHANGELOG.md') +const manifestPath = path.join(__dirname, '..', 'app', 'manifest.json') +const manifest = require('../app/manifest.json') +const versionBump = require('./version-bump') + +console.dir(process.argv) +const bumpType = normalizeType(process.argv[2]) + + +readFile(changelogPath) +.then(async (changeBuffer) => { + const changelog = changeBuffer.toString() + + const newData = await versionBump(bumpType, changelog, manifest) + console.dir(newData) + + const manifestString = JSON.stringify(newData.manifest, null, 2) + + console.log('now writing files to ', changelogPath, manifestPath) + console.log(typeof newData.manifest) + await writeFile(changelogPath, newData.changelog) + await writeFile(manifestPath, manifestString) + + return newData.version +}) +.then((version) => console.log(`Bumped ${bumpType} to version ${version}`)) +.catch(console.error) + + +function normalizeType (userInput) { + console.log(`user inputted ${userInput}`) + const err = new Error('First option must be a type (major, minor, or patch)') + if (!userInput || typeof userInput !== 'string') { + console.log('first no') + throw err + } + + const lower = userInput.toLowerCase() + + if (lower !== 'major' && lower !== 'minor' && lower !== 'patch') { + console.log('second no') + throw err + } + + return lower +} diff --git a/development/version-bump.js b/development/version-bump.js new file mode 100644 index 000000000..63dd802d1 --- /dev/null +++ b/development/version-bump.js @@ -0,0 +1,53 @@ +const clone = require('clone') + +async function versionBump(bumpType, changelog, oldManifest) { + const manifest = clone(oldManifest) + const newVersion = newVersionFrom(manifest, bumpType) + + manifest.version = newVersion + const date = (new Date()).toDateString() + + const logHeader = `\n## ${newVersion} ${date}` + const logLines = changelog.split('\n') + for (let i = 0; i < logLines.length; i++) { + if (logLines[i].includes('Current Master')) { + logLines.splice(i + 1, 0, logHeader) + break + } + } + + return { + version: newVersion, + manifest: manifest, + changelog: logLines.join('\n') + } +} + +function newVersionFrom (manifest, bumpType) { + const string = manifest.version + let segments = string.split('.').map((str) => parseInt(str)) + + console.log('bump type is ' + bumpType) + switch (bumpType) { + case 'major': + segments[0] += 1 + segments[1] = 0 + segments[2] = 0 + break + case 'minor': + segments[1] += 1 + segments[2] = 0 + break + case 'patch': + segments[2] += 1 + break + } + + return segments.map(String).join('.') +} + +function bumpManifest (manifest, bumpType) { + +} + +module.exports = versionBump -- cgit From 3a9b3794ebccbe3369a67e797186141dc011dd9d Mon Sep 17 00:00:00 2001 From: Dan Finlay Date: Fri, 2 Mar 2018 13:59:08 -0800 Subject: Remove logs --- development/run-version-bump.js | 7 ------- development/version-bump.js | 1 - 2 files changed, 8 deletions(-) (limited to 'development') diff --git a/development/run-version-bump.js b/development/run-version-bump.js index 3b26b00db..e06c00db3 100644 --- a/development/run-version-bump.js +++ b/development/run-version-bump.js @@ -8,7 +8,6 @@ const manifestPath = path.join(__dirname, '..', 'app', 'manifest.json') const manifest = require('../app/manifest.json') const versionBump = require('./version-bump') -console.dir(process.argv) const bumpType = normalizeType(process.argv[2]) @@ -17,12 +16,9 @@ readFile(changelogPath) const changelog = changeBuffer.toString() const newData = await versionBump(bumpType, changelog, manifest) - console.dir(newData) const manifestString = JSON.stringify(newData.manifest, null, 2) - console.log('now writing files to ', changelogPath, manifestPath) - console.log(typeof newData.manifest) await writeFile(changelogPath, newData.changelog) await writeFile(manifestPath, manifestString) @@ -33,17 +29,14 @@ readFile(changelogPath) function normalizeType (userInput) { - console.log(`user inputted ${userInput}`) const err = new Error('First option must be a type (major, minor, or patch)') if (!userInput || typeof userInput !== 'string') { - console.log('first no') throw err } const lower = userInput.toLowerCase() if (lower !== 'major' && lower !== 'minor' && lower !== 'patch') { - console.log('second no') throw err } diff --git a/development/version-bump.js b/development/version-bump.js index 63dd802d1..bedf87c01 100644 --- a/development/version-bump.js +++ b/development/version-bump.js @@ -27,7 +27,6 @@ function newVersionFrom (manifest, bumpType) { const string = manifest.version let segments = string.split('.').map((str) => parseInt(str)) - console.log('bump type is ' + bumpType) switch (bumpType) { case 'major': segments[0] += 1 -- cgit From bdbe29906976915196f347861e913f3f5b523d0e Mon Sep 17 00:00:00 2001 From: Dan Finlay Date: Fri, 2 Mar 2018 14:33:29 -0800 Subject: Clean up run version bump script --- development/run-version-bump.js | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) (limited to 'development') diff --git a/development/run-version-bump.js b/development/run-version-bump.js index e06c00db3..fde14566e 100644 --- a/development/run-version-bump.js +++ b/development/run-version-bump.js @@ -7,12 +7,13 @@ const changelogPath = path.join(__dirname, '..', 'CHANGELOG.md') const manifestPath = path.join(__dirname, '..', 'app', 'manifest.json') const manifest = require('../app/manifest.json') const versionBump = require('./version-bump') - const bumpType = normalizeType(process.argv[2]) +start().catch(console.error) + +async function start() { -readFile(changelogPath) -.then(async (changeBuffer) => { + const changeBuffer = await readFile(changelogPath) const changelog = changeBuffer.toString() const newData = await versionBump(bumpType, changelog, manifest) @@ -22,10 +23,8 @@ readFile(changelogPath) await writeFile(changelogPath, newData.changelog) await writeFile(manifestPath, manifestString) - return newData.version -}) -.then((version) => console.log(`Bumped ${bumpType} to version ${version}`)) -.catch(console.error) + console.log(`Bumped ${bumpType} to version ${newData.version}`) +} function normalizeType (userInput) { -- cgit From 7e56c6b6fa92453559f2510e390fce451de2dead Mon Sep 17 00:00:00 2001 From: kumavis Date: Sun, 11 Mar 2018 14:51:54 -0700 Subject: test - genStates - use async api --- development/genStates.js | 31 +++++++++++++++++-------------- 1 file changed, 17 insertions(+), 14 deletions(-) (limited to 'development') diff --git a/development/genStates.js b/development/genStates.js index 39a672ee0..325ef71f3 100644 --- a/development/genStates.js +++ b/development/genStates.js @@ -1,18 +1,21 @@ const fs = require('fs') const path = require('path') +const { promisify } = require('util') -const statesPath = path.join(__dirname, 'states') -const stateNames = fs.readdirSync(statesPath) +start().catch(console.error) -const states = stateNames.reduce((result, stateFileName) => { - const statePath = path.join(__dirname, 'states', stateFileName) - const stateFile = fs.readFileSync(statePath).toString() - const state = JSON.parse(stateFile) - result[stateFileName.split('.')[0].replace(/-/g, ' ', 'g')] = state - return result -}, {}) - -const result = `module.exports = ${JSON.stringify(states)}` - -const statesJsonPath = path.join(__dirname, 'states.js') -fs.writeFileSync(statesJsonPath, result) +async function start () { + const statesPath = path.join(__dirname, 'states') + const stateFilesNames = await promisify(fs.readdirSync)(statesPath) + const states = {} + await Promise.all(stateFilesNames.map(async (stateFileName) => { + const stateFilePath = path.join(__dirname, 'states', stateFileName) + const stateFileContent = await promisify(fs.readFileSync)(stateFilePath, 'utf8') + const state = JSON.parse(stateFileContent) + const stateName = stateFileName.split('.')[0].replace(/-/g, ' ', 'g') + states[stateName] = state + })) + const generatedFileContent = `module.exports = ${JSON.stringify(states)}` + const generatedFilePath = path.join(__dirname, 'states.js') + await promisify(fs.writeFile)(generatedFilePath, generatedFileContent) +} -- cgit From ecb792ae502dcacf168fb288ef0f2623e599eb78 Mon Sep 17 00:00:00 2001 From: kumavis Date: Sun, 11 Mar 2018 19:06:14 -0700 Subject: genStates - fix fs api calls --- development/genStates.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'development') diff --git a/development/genStates.js b/development/genStates.js index 325ef71f3..d92e2bc2e 100644 --- a/development/genStates.js +++ b/development/genStates.js @@ -6,11 +6,11 @@ start().catch(console.error) async function start () { const statesPath = path.join(__dirname, 'states') - const stateFilesNames = await promisify(fs.readdirSync)(statesPath) + const stateFilesNames = await promisify(fs.readdir)(statesPath) const states = {} await Promise.all(stateFilesNames.map(async (stateFileName) => { const stateFilePath = path.join(__dirname, 'states', stateFileName) - const stateFileContent = await promisify(fs.readFileSync)(stateFilePath, 'utf8') + const stateFileContent = await promisify(fs.readFile)(stateFilePath, 'utf8') const state = JSON.parse(stateFileContent) const stateName = stateFileName.split('.')[0].replace(/-/g, ' ', 'g') states[stateName] = state -- cgit From 0e28e8fa3dff1b97751d34c0d76d069a0b1f4298 Mon Sep 17 00:00:00 2001 From: Vincent Date: Wed, 14 Mar 2018 00:15:19 +1100 Subject: Moved mock-dev.js and ui-dev.js to development folder. --- development/mock-dev.js | 145 ++++++++++++++++++++++++++++++++++++++++++++++++ development/ui-dev.js | 97 ++++++++++++++++++++++++++++++++ 2 files changed, 242 insertions(+) create mode 100644 development/mock-dev.js create mode 100644 development/ui-dev.js (limited to 'development') diff --git a/development/mock-dev.js b/development/mock-dev.js new file mode 100644 index 000000000..a1fb3a86d --- /dev/null +++ b/development/mock-dev.js @@ -0,0 +1,145 @@ +/* MOCK DEV + * + * This is a utility module. + * It initializes a minimalist browserifiable project + * that contains the Metamask UI, with a local background process. + * + * Includes a state reset button for restoring to initial state. + * + * This is a convenient way to develop and test the plugin + * without having to re-open the plugin or even re-build it. + * + * To use, run `npm run mock`. + */ + +const extend = require('xtend') +const render = require('react-dom').render +const h = require('react-hyperscript') +const Root = require('../ui/app/root') +const configureStore = require('../ui/app/store') +const actions = require('../ui/app/actions') +const states = require('./states') +const backGroundConnectionModifiers = require('./backGroundConnectionModifiers') +const Selector = require('./selector') +const MetamaskController = require('../app/scripts/metamask-controller') +const firstTimeState = require('../app/scripts/first-time-state') +const ExtensionPlatform = require('../app/scripts/platforms/extension') +const extension = require('./mockExtension') +const noop = function () {} + +const log = require('loglevel') +window.log = log +log.setLevel('debug') + +// +// Query String +// + +const qs = require('qs') +let queryString = qs.parse(window.location.href.split('#')[1]) +let selectedView = queryString.view || 'first time' +const firstState = states[selectedView] +updateQueryParams(selectedView) + +function updateQueryParams(newView) { + queryString.view = newView + const params = qs.stringify(queryString) + window.location.href = window.location.href.split('#')[0] + `#${params}` +} + +// +// CSS +// + +const MetaMaskUiCss = require('../ui/css') +const injectCss = require('inject-css') + +// +// MetaMask Controller +// + +const controller = new MetamaskController({ + // User confirmation callbacks: + showUnconfirmedMessage: noop, + unlockAccountMessage: noop, + showUnapprovedTx: noop, + platform: {}, + // initial state + initState: firstTimeState, +}) +global.metamaskController = controller +global.platform = new ExtensionPlatform + +// +// User Interface +// + +actions._setBackgroundConnection(controller.getApi()) +actions.update = function(stateName) { + selectedView = stateName + updateQueryParams(stateName) + const newState = states[selectedView] + return { + type: 'GLOBAL_FORCE_UPDATE', + value: newState, + } +} + +function modifyBackgroundConnection(backgroundConnectionModifier) { + const modifiedBackgroundConnection = Object.assign({}, controller.getApi(), backgroundConnectionModifier) + actions._setBackgroundConnection(modifiedBackgroundConnection) +} + +var css = MetaMaskUiCss() +injectCss(css) + +// parse opts +var store = configureStore(firstState) + +// start app +startApp() + +function startApp(){ + const body = document.body + const container = document.createElement('div') + container.id = 'test-container' + body.appendChild(container) + + render( + h('.super-dev-container', [ + + h('button', { + onClick: (ev) => { + ev.preventDefault() + store.dispatch(actions.update('terms')) + }, + style: { + margin: '19px 19px 0px 19px', + }, + }, 'Reset State'), + + h(Selector, { + actions, + selectedKey: selectedView, + states, + store, + modifyBackgroundConnection, + backGroundConnectionModifiers, + }), + + h('#app-content', { + style: { + height: '500px', + width: '360px', + boxShadow: 'grey 0px 2px 9px', + margin: '20px', + }, + }, [ + h(Root, { + store: store, + }), + ]), + + ] + ), container) +} diff --git a/development/ui-dev.js b/development/ui-dev.js new file mode 100644 index 000000000..cac433909 --- /dev/null +++ b/development/ui-dev.js @@ -0,0 +1,97 @@ +/* UI DEV + * + * This is a utility module. + * It initializes a minimalist browserifiable project + * that contains the Metamask UI, with a mocked state. + * + * Includes a state menu for switching between different + * mocked states, along with query param support, + * so those states are preserved when live-reloading. + * + * This is a convenient way to develop on the UI + * without having to re-enter your password + * every time the plugin rebuilds. + * + * To use, run `npm run ui`. + */ + +const render = require('react-dom').render +const h = require('react-hyperscript') +const Root = require('../ui/app/root') +const configureStore = require('./uiStore') +const states = require('./states') +const Selector = require('./selector') + +// logger +const log = require('loglevel') +window.log = log +log.setDefaultLevel(1) + +// Query String +const qs = require('qs') +let queryString = qs.parse(window.location.href.split('#')[1]) +let selectedView = queryString.view || 'first time' +const firstState = states[selectedView] +updateQueryParams(selectedView) + +// CSS +const MetaMaskUiCss = require('../ui/css') +const injectCss = require('inject-css') + + +function updateQueryParams(newView) { + queryString.view = newView + const params = qs.stringify(queryString) + window.location.href = window.location.href.split('#')[0] + `#${params}` +} + +const actions = { + _setBackgroundConnection(){}, + update: function(stateName) { + selectedView = stateName + updateQueryParams(stateName) + const newState = states[selectedView] + return { + type: 'GLOBAL_FORCE_UPDATE', + value: newState, + } + }, +} + +var css = MetaMaskUiCss() +injectCss(css) + +// parse opts +var store = configureStore(states[selectedView]) + +// start app +startApp() + +function startApp(){ + const body = document.body + const container = document.createElement('div') + container.id = 'test-container' + body.appendChild(container) + + render( + h('.super-dev-container', [ + + h(Selector, { actions, selectedKey: selectedView, states, store }), + + h('#app-content', { + style: { + height: '500px', + width: '360px', + boxShadow: 'grey 0px 2px 9px', + margin: '20px', + }, + }, [ + h(Root, { + store: store, + }), + ]), + + ] + ), container) +} + -- cgit From 2d3763d70927dd1aefbc19f9ab6d463a713f2576 Mon Sep 17 00:00:00 2001 From: Lazaridis Date: Sat, 10 Mar 2018 04:56:39 +0200 Subject: add READMEs to folders, re #3427 --- development/README.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 development/README.md (limited to 'development') diff --git a/development/README.md b/development/README.md new file mode 100644 index 000000000..1e18d4f16 --- /dev/null +++ b/development/README.md @@ -0,0 +1,5 @@ +# Development + +Several files which are needed for developing on(!) MetaMask. + +Usually each files contains information about its scope / usage. \ No newline at end of file -- cgit From f8e13fd793c5761c4c077b912934f8cbc434b13c Mon Sep 17 00:00:00 2001 From: Dan Date: Wed, 14 Mar 2018 12:28:26 -0230 Subject: Fix tests. --- development/states/confirm-new-ui.json | 2 +- development/states/send-edit.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) (limited to 'development') diff --git a/development/states/confirm-new-ui.json b/development/states/confirm-new-ui.json index 6ea8e64cd..6981781a9 100644 --- a/development/states/confirm-new-ui.json +++ b/development/states/confirm-new-ui.json @@ -116,7 +116,7 @@ "send": { "gasLimit": "0xea60", "gasPrice": "0xba43b7400", - "gasTotal": "0xb451dc41b578", + "gasTotal": "0xaa87bee538000", "tokenBalance": null, "from": { "address": "0xc5b8dbac4c1d3f152cdeb400e2313f309c410acb", diff --git a/development/states/send-edit.json b/development/states/send-edit.json index 6ea8e64cd..6981781a9 100644 --- a/development/states/send-edit.json +++ b/development/states/send-edit.json @@ -116,7 +116,7 @@ "send": { "gasLimit": "0xea60", "gasPrice": "0xba43b7400", - "gasTotal": "0xb451dc41b578", + "gasTotal": "0xaa87bee538000", "tokenBalance": null, "from": { "address": "0xc5b8dbac4c1d3f152cdeb400e2313f309c410acb", -- cgit From 39a831e2a08c1dfe6b80edc129a3ace8a2831824 Mon Sep 17 00:00:00 2001 From: kumavis Date: Wed, 14 Mar 2018 10:32:55 -0700 Subject: deps - use pify instead of util.promisify --- development/genStates.js | 2 +- development/run-version-bump.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) (limited to 'development') diff --git a/development/genStates.js b/development/genStates.js index d92e2bc2e..bc274c757 100644 --- a/development/genStates.js +++ b/development/genStates.js @@ -1,6 +1,6 @@ const fs = require('fs') const path = require('path') -const { promisify } = require('util') +const promisify = require('pify') start().catch(console.error) diff --git a/development/run-version-bump.js b/development/run-version-bump.js index fde14566e..98757f58e 100644 --- a/development/run-version-bump.js +++ b/development/run-version-bump.js @@ -1,4 +1,4 @@ -const { promisify } = require('util') +const promisify = require('pify') const fs = require('fs') const readFile = promisify(fs.readFile) const writeFile = promisify(fs.writeFile) -- cgit From 03587c96d86b439ef924bde12cf0ce5012983f38 Mon Sep 17 00:00:00 2001 From: Herman Junge Date: Mon, 19 Mar 2018 14:16:11 -0300 Subject: Move file to development, fix JS --- development/verify-locale-strings.js | 96 ++++++++++++++++++++++++++++++++++++ 1 file changed, 96 insertions(+) create mode 100644 development/verify-locale-strings.js (limited to 'development') diff --git a/development/verify-locale-strings.js b/development/verify-locale-strings.js new file mode 100644 index 000000000..b8fe5a7dc --- /dev/null +++ b/development/verify-locale-strings.js @@ -0,0 +1,96 @@ +//////////////////////////////////////////////////////////////////////////////// +// +// Locale verification script +// +// usage: +// +// node app/scripts/verify-locale-strings.js +// +// will check the given locale against the strings in english +// +//////////////////////////////////////////////////////////////////////////////// + +var fs = require('fs') +var path = require('path') + +console.log('Locale Verification') + +var locale = process.argv[2] +if (!locale || locale == '') { + console.log('Must enter a locale as argument. exitting') + process.exit(1) +} + +console.log("verifying for locale " + locale) + +localeFilePath = path.join(process.cwd(), 'app', '_locales', locale, 'messages.json') +try { + localeObj = JSON.parse(fs.readFileSync(localeFilePath, 'utf8')); +} catch (e) { + if(e.code == 'ENOENT') { + console.log('Locale file not found') + } else { + console.log('Error opening your locale file: ', e) + } + process.exit(1) +} + +englishFilePath = path.join(process.cwd(), 'app', '_locales', 'en', 'messages.json') +try { + englishObj = JSON.parse(fs.readFileSync(englishFilePath, 'utf8')); +} catch (e) { + if(e.code == 'ENOENT') { + console.log("English File not found") + } else { + console.log("Error opening english locale file: ", e) + } + process.exit(1) +} + +console.log('\tverifying whether all your locale strings are contained in the english one') + +var counter = 0 +var foundErrorA = false +var notFound = []; +Object.keys(localeObj).forEach(function(key){ + if (!englishObj[key]) { + foundErrorA = true + notFound.push(key) + } + counter++ +}) + +if (foundErrorA) { + console.log('\nThe following string(s) is(are) not found in the english locale:') + notFound.forEach(function(key) { + console.log(key) + }) +} else { + console.log('\tall ' + counter +' strings declared in your locale were found in the english one') +} + +console.log('\n\tverifying whether your locale contains all english strings') + +var counter = 0 +var foundErrorB = false +var notFound = []; +Object.keys(englishObj).forEach(function(key){ + if (!localeObj[key]) { + foundErrorB = true + notFound.push(key) + } + counter++ +}) + +if (foundErrorB) { + console.log('\nThe following string(s) is(are) not found in the your locale:') + notFound.forEach(function(key) { + console.log(key) + }) +} else { + console.log('\tall ' + counter +' english strings were found in your locale!') +} + +if (!foundErrorA && !foundErrorB) { + console.log('You are good to go') +} \ No newline at end of file -- cgit