diff --git a/.gitignore b/.gitignore index 3189aacdd..b004f7407 100644 --- a/.gitignore +++ b/.gitignore @@ -11,6 +11,8 @@ coverage # production build chrome-extension +chrome-extension.pem +chrome-extension.crx bruno.zip # misc diff --git a/package.json b/package.json index e2303653c..ebf204c72 100644 --- a/package.json +++ b/package.json @@ -14,7 +14,8 @@ }, "scripts": { "dev:web": "npm run dev --workspace=packages/bruno-app", + "build:web": "npm run build --workspace=packages/bruno-app", "dev:electron": "npm run dev --workspace=packages/bruno-electron", - "build-chrome-extension": "./scripts/create-chrome-extension.sh" + "build:chrome-extension": "./scripts/create-chrome-extension.sh" } } diff --git a/packages/bruno-chrome-extension/assets/images/logo-128x128.png b/packages/bruno-chrome-extension/assets/images/logo-128x128.png new file mode 100644 index 000000000..d8b58a315 Binary files /dev/null and b/packages/bruno-chrome-extension/assets/images/logo-128x128.png differ diff --git a/packages/bruno-chrome-extension/assets/images/logo-16x16.png b/packages/bruno-chrome-extension/assets/images/logo-16x16.png new file mode 100644 index 000000000..dd8b6f6b5 Binary files /dev/null and b/packages/bruno-chrome-extension/assets/images/logo-16x16.png differ diff --git a/packages/bruno-chrome-extension/assets/images/logo-19x19.png b/packages/bruno-chrome-extension/assets/images/logo-19x19.png new file mode 100644 index 000000000..c3d30ca60 Binary files /dev/null and b/packages/bruno-chrome-extension/assets/images/logo-19x19.png differ diff --git a/packages/bruno-chrome-extension/assets/images/logo-38x38.png b/packages/bruno-chrome-extension/assets/images/logo-38x38.png new file mode 100644 index 000000000..79c08bcfc Binary files /dev/null and b/packages/bruno-chrome-extension/assets/images/logo-38x38.png differ diff --git a/packages/bruno-chrome-extension/assets/images/logo-48x48.png b/packages/bruno-chrome-extension/assets/images/logo-48x48.png new file mode 100644 index 000000000..f2d312f92 Binary files /dev/null and b/packages/bruno-chrome-extension/assets/images/logo-48x48.png differ diff --git a/packages/bruno-chrome-extension/js/background.js b/packages/bruno-chrome-extension/js/background.js new file mode 100644 index 000000000..d1c393ef7 --- /dev/null +++ b/packages/bruno-chrome-extension/js/background.js @@ -0,0 +1,54 @@ +(function () { + let currentTab = { + id: null, + url: null, + }; + + const getExtensionId = () => { + const matches = chrome.runtime.getURL('x').match(/.*\/\/(.*)\/x$/); + if (matches) { + return matches[1]; + } + + return chrome.runtime.id; + }; + + // Create a new tab for the extension + function createNewTab() { + chrome.tabs.create({ url: 'index.html' }, function (tab) { + currentTab = { + id: tab.id, + url: tab.url + }; + }); + } + + // Focus on the open extension tab + function focusTab(tabId) { + var updateProperties = { "active": true }; + chrome.tabs.update(tabId, updateProperties, function (tab) { }); + } + + // Open the extension tab when the extension icon is clicked + chrome.browserAction.onClicked.addListener(function (tab) { + if (!currentTab || !currentTab.id) { + createNewTab(); + } else { + chrome.tabs.get(currentTab.id, function (tab) { + console.log(chrome.runtime.id, tab.url); + if (tab && tab.url && tab.url.includes(getExtensionId())) { + focusTab(currentTab.id); + } else { + createNewTab(); + } + }); + } + }); + + // When a tab is closed, check if it is the extension tab that was closed, and unset currentTabId + chrome.tabs.onRemoved.addListener(function (tabId) { + if (tabId === currentTab.id) { + currentTab = {}; + } + }); +})(); \ No newline at end of file diff --git a/packages/bruno-chrome-extension/manifest.json b/packages/bruno-chrome-extension/manifest.json new file mode 100644 index 000000000..5edb27871 --- /dev/null +++ b/packages/bruno-chrome-extension/manifest.json @@ -0,0 +1,26 @@ +{ + "manifest_version": 2, + "version": "0.1.0", + "name": "Bruno API Client", + "short_name": "Bruno", + "description": "Opensource API Client", + "icons": { + "16": "assets/images/logo-16x16.png", + "48": "assets/images/logo-48x48.png", + "128": "assets/images/logo-128x128.png" + }, + "background": { + "scripts": [ + "js/background.js" + ] + }, + "browser_action": { + "default_icon": "assets/images/logo-128x128.png" + }, + "permissions": [ + "http://*/", + "https://*/", + "tabs", + "storage" + ] +} \ No newline at end of file diff --git a/scripts/chrome-extension-files/manifest.json b/scripts/chrome-extension-files/manifest.json deleted file mode 100644 index 879937d31..000000000 --- a/scripts/chrome-extension-files/manifest.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "manifest_version": 2, - "name": "Bruno API Client", - "short_name": "Bruno" -} \ No newline at end of file diff --git a/scripts/create-chrome-extension.sh b/scripts/create-chrome-extension.sh index d5f561e37..c0636713b 100755 --- a/scripts/create-chrome-extension.sh +++ b/scripts/create-chrome-extension.sh @@ -13,10 +13,11 @@ mkdir chrome-extension cp -r packages/bruno-app/out/* chrome-extension # Copy the chrome extension files -cp -r scripts/chrome-extension-files/* chrome-extension +cp -r packages/bruno-chrome-extension/* chrome-extension + +# Filenames starting with "_" are reserved for use by the system +mv chrome-extension/_next chrome-extension/next +sed -i 's@/_next/@/next/@g' chrome-extension/**.html # Remove sourcemaps find chrome-extension -name '*.map' -type f -delete - -# Compress the chrome-extension directory into a zip file -zip -r bruno.zip chrome-extension \ No newline at end of file