diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -184,6 +184,12 @@ [sudo] npm install -g prettier ``` +To work on the extension, you will need `browserify` + +``` +[sudo] npm install -g browserify +``` + Working with The Bitcoin ABC Repository --------------------------------------- diff --git a/web/cashtab/extension/src/background.js b/web/cashtab/extension/src/background.js --- a/web/cashtab/extension/src/background.js +++ b/web/cashtab/extension/src/background.js @@ -1,3 +1,5 @@ +const extension = require('extensionizer'); + const NOTIFICATION_HEIGHT = 600; const NOTIFICATION_WIDTH = 400; @@ -6,8 +8,8 @@ const openMetamaskTabsIDs = {}; const requestAccountTabIds = {}; -// This starts listening to the port created with `chrome.runtime.connect` in contentscript.js -chrome.runtime.onConnect.addListener(function (port) { +// This starts listening to the port created with `extension.runtime.connect` in contentscript.js +extension.runtime.onConnect.addListener(function (port) { console.assert(port.name == 'cashtabPort'); port.onMessage.addListener(function (msg) { console.log('msg received in background.js'); @@ -34,7 +36,7 @@ */ async function triggerUi(txInfo) { /* - const tabs = await chrome.getActiveTabs(); + const tabs = await extension.getActiveTabs(); const currentlyActiveCashtabTab = Boolean(tabs.find(tab => openMetamaskTabsIDs[tab.id])); if (!popupIsOpen && !currentlyActiveCashtabTab) { await notificationManager.showPopup(); @@ -77,7 +79,7 @@ async function openWindow(options) { return new Promise((resolve, reject) => { - chrome.windows.create(options, newWindow => { + extension.windows.create(options, newWindow => { const error = checkForError(); if (error) { return reject(error); @@ -88,7 +90,7 @@ } function checkForError() { - const { lastError } = chrome.runtime; + const { lastError } = extension.runtime; if (!lastError) { return undefined; } @@ -102,7 +104,7 @@ async function getLastFocusedWindow() { return new Promise((resolve, reject) => { - chrome.windows.getLastFocused(windowObject => { + extension.windows.getLastFocused(windowObject => { const error = checkForError(); if (error) { return reject(error); diff --git a/web/cashtab/extension/src/contentscript.js b/web/cashtab/extension/src/contentscript.js --- a/web/cashtab/extension/src/contentscript.js +++ b/web/cashtab/extension/src/contentscript.js @@ -1,3 +1,5 @@ +const extension = require('extensionizer'); + // Insert flag into window object to denote CashTab is available and active as a browser extension // Could use a div or other approach for now, but emulate MetaMask this way so it is extensible to other items // Try window object approach @@ -8,7 +10,7 @@ // Process page messages // Chrome extensions communicate with web pages through the DOM // Page sends a message to itself, chrome extension intercepts it -var port = chrome.runtime.connect({ name: 'cashtabPort' }); +var port = extension.runtime.connect({ name: 'cashtabPort' }); //console.log(`port: ${JSON.stringify(port)}`); //console.log(port); diff --git a/web/cashtab/package-lock.json b/web/cashtab/package-lock.json --- a/web/cashtab/package-lock.json +++ b/web/cashtab/package-lock.json @@ -40,6 +40,7 @@ "eslint-plugin-react": "7.14.3", "eslint-plugin-react-hooks": "^1.6.1", "ethereum-blockies-base64": "^1.0.2", + "extensionizer": "^1.0.1", "fbt": "^0.16.0", "file-loader": "3.0.1", "fs-extra": "7.0.1", @@ -10529,6 +10530,11 @@ "node": ">=0.10.0" } }, + "node_modules/extensionizer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/extensionizer/-/extensionizer-1.0.1.tgz", + "integrity": "sha512-UES5CSOYqshNsWFrpORcQR47+ph6UvQK25mguD44IyeMemt40CG+LTZrH1PgpGUHX3w7ACtNQnmM0J+qEe8G0Q==" + }, "node_modules/external-editor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", @@ -36867,6 +36873,11 @@ } } }, + "extensionizer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/extensionizer/-/extensionizer-1.0.1.tgz", + "integrity": "sha512-UES5CSOYqshNsWFrpORcQR47+ph6UvQK25mguD44IyeMemt40CG+LTZrH1PgpGUHX3w7ACtNQnmM0J+qEe8G0Q==" + }, "external-editor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", diff --git a/web/cashtab/package.json b/web/cashtab/package.json --- a/web/cashtab/package.json +++ b/web/cashtab/package.json @@ -37,6 +37,7 @@ "eslint-plugin-react": "7.14.3", "eslint-plugin-react-hooks": "^1.6.1", "ethereum-blockies-base64": "^1.0.2", + "extensionizer": "^1.0.1", "fbt": "^0.16.0", "file-loader": "3.0.1", "fs-extra": "7.0.1", diff --git a/web/cashtab/scripts/extension.sh b/web/cashtab/scripts/extension.sh --- a/web/cashtab/scripts/extension.sh +++ b/web/cashtab/scripts/extension.sh @@ -43,9 +43,9 @@ # Copy extension build files to extension/ folder cp -r build/* extension/dist -# Copy other needed extension files -cp extension/src/contentscript.js extension/dist -cp extension/src/background.js extension/dist +# Browserify contentscript.js and background.js to pull in their imports +browserify extension/src/contentscript.js -o extension/dist/contentscript.js +browserify extension/src/background.js -o extension/dist/background.js # Delete extension build from build/ folder (reserved for web app builds) rm -Rf build