diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index cdc4330..e46b45c 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -78,7 +78,7 @@ jobs: strategy: max-parallel: 4 matrix: - variant: ['full', 'lite', 'mac'] + variant: ['full', 'lite', 'mac', 'beta', 'beta-firefox'] steps: - name: Build info @@ -128,7 +128,31 @@ jobs: npm run build:lite SUFFIX=lite npm run build-zip - - name: Build full version + - name: Build beta version for Chromium + if: matrix.variant == 'beta' + shell: bash + run: | + npm install + cross-env NODE_ENV=production BETA=1 webpack + SUFFIX=beta npm run build-zip + + - name: Build beta version for Firefox + if: matrix.variant == 'beta-firefox' + shell: bash + run: | + npm install + cross-env NODE_ENV=production BETA=1 FIREFOX=1 webpack + SUFFIX=beta-firefox npm run build-zip + + - name: Build production version for Firefox + if: matrix.variant == 'beta-firefox' + shell: bash + run: | + npm install + cross-env NODE_ENV=production FIREFOX=1 webpack + SUFFIX=firefox npm run build-zip + + - name: Build production version for Chromium if: matrix.variant == 'full' shell: bash run: | @@ -213,4 +237,4 @@ jobs: ] } env: - SLACK_BOT_TOKEN: ${{ secrets.SLACK_BOT_TOKEN }} + SLACK_BOT_TOKEN: ${{ secrets.SLACK_BOT_TOKEN }} \ No newline at end of file diff --git a/README.md b/README.md index b3da0e7..c237ebd 100644 --- a/README.md +++ b/README.md @@ -39,10 +39,12 @@ All work on SimpleLogin Chrome/Firefox extension happens directly on GitHub. This project has been tested with Node v20.2.0 and NPM 9.6.6 -To run the extension locally, please follow these steps: -- install all dependencies with `npm install`. -- run `npm start` to generate the `/dist` folder that can be installed into Chrome. +To run the extension locally, please first install all dependencies with `npm install`. + +## Chrome + +Run `npm start` to generate the `/dist` folder that can be installed into Chrome. In case of `Error: error:0308010C:digital envelope routines::unsupported` error, the workaround is to accept OPEN SSL by running this command before running `npm start` @@ -50,11 +52,11 @@ In case of `Error: error:0308010C:digital envelope routines::unsupported` error, export NODE_OPTIONS=--openssl-legacy-provider ```` -On Firefox, it can be done via `web-ext` tool from within the `/dist` folder: +## Firefox -```bash -( cd dist/ ; web-ext run ) -``` +Run `npm run start:firefox` to generate the `/dist` folder which can then be installed on Firefox, more info on https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/Your_first_WebExtension#installing + +## Code formatting The code is formatted using `prettier`, make sure to run it before creating the commit, otherwise the GitHub lint workflow will mark the check as not passing: diff --git a/package-lock.json b/package-lock.json index 1118117..3e8cbf6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "simplelogin-extension", - "version": "2.10.0", + "version": "2.11.1", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "simplelogin-extension", - "version": "2.10.0", + "version": "2.11.1", "license": "MIT", "dependencies": { "@fortawesome/fontawesome-svg-core": "^1.2.36", @@ -14,7 +14,6 @@ "@fortawesome/vue-fontawesome": "^0.1.10", "@sentry/browser": "^5.25.0", "@sentry/integrations": "^5.30.0", - "axios": "^0.27.2", "bootstrap": "^4.6.1", "bootstrap-vue": "^2.21.2", "tippy.js": "^6.3.7", @@ -48,8 +47,7 @@ "vue-template-compiler": "^2.6.14", "web-ext-types": "^2.1.0", "webpack": "^4.46.0", - "webpack-cli": "^4.9.2", - "webpack-extension-reloader": "^1.1.4" + "webpack-cli": "^4.9.2" } }, "node_modules/@ampproject/remapping": { @@ -2012,58 +2010,6 @@ "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", "dev": true }, - "node_modules/@types/node": { - "version": "17.0.35", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.35.tgz", - "integrity": "sha512-vu1SrqBjbbZ3J6vwY17jBs8Sr/BKA+/a/WtjRG+whKg1iuLFOosq872EXS0eXWILdO36DHQQeku/ZcL6hz2fpg==", - "dev": true - }, - "node_modules/@types/source-list-map": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@types/source-list-map/-/source-list-map-0.1.2.tgz", - "integrity": "sha512-K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA==", - "dev": true - }, - "node_modules/@types/tapable": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@types/tapable/-/tapable-1.0.8.tgz", - "integrity": "sha512-ipixuVrh2OdNmauvtT51o3d8z12p6LtFW9in7U79der/kwejjdNchQC5UMn5u/KxNoM7VHHOs/l8KS8uHxhODQ==", - "dev": true - }, - "node_modules/@types/uglify-js": { - "version": "3.13.2", - "resolved": "https://registry.npmjs.org/@types/uglify-js/-/uglify-js-3.13.2.tgz", - "integrity": "sha512-/xFrPIo+4zOeNGtVMbf9rUm0N+i4pDf1ynExomqtokIJmVzR3962lJ1UE+MmexMkA0cmN9oTzg5Xcbwge0Ij2Q==", - "dev": true, - "dependencies": { - "source-map": "^0.6.1" - } - }, - "node_modules/@types/webpack": { - "version": "4.41.32", - "resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-4.41.32.tgz", - "integrity": "sha512-cb+0ioil/7oz5//7tZUSwbrSAN/NWHrQylz5cW8G0dWTcF/g+/dSdMlKVZspBYuMAN1+WnwHrkxiRrLcwd0Heg==", - "dev": true, - "dependencies": { - "@types/node": "*", - "@types/tapable": "^1", - "@types/uglify-js": "*", - "@types/webpack-sources": "*", - "anymatch": "^3.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/@types/webpack-sources": { - "version": "0.1.9", - "resolved": "https://registry.npmjs.org/@types/webpack-sources/-/webpack-sources-0.1.9.tgz", - "integrity": "sha512-bvzMnzqoK16PQIC8AYHNdW45eREJQMd6WG/msQWX5V2+vZmODCOPb4TJcbgRljTZZTwTM4wUMcsI8FftNA7new==", - "dev": true, - "dependencies": { - "@types/node": "*", - "@types/source-list-map": "*", - "source-map": "^0.6.1" - } - }, "node_modules/@vue/component-compiler-utils": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/@vue/component-compiler-utils/-/component-compiler-utils-3.3.0.tgz", @@ -2588,11 +2534,6 @@ "dev": true, "optional": true }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" - }, "node_modules/atob": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", @@ -2605,15 +2546,6 @@ "node": ">= 4.5.0" } }, - "node_modules/axios": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz", - "integrity": "sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==", - "dependencies": { - "follow-redirects": "^1.14.9", - "form-data": "^4.0.0" - } - }, "node_modules/babel-loader": { "version": "8.2.5", "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.5.tgz", @@ -3281,26 +3213,6 @@ "integrity": "sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g==", "dev": true }, - "node_modules/colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", - "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", - "dev": true, - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, "node_modules/commander": { "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", @@ -3857,14 +3769,6 @@ "node": ">=0.10.0" } }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/des.js": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", @@ -4570,25 +4474,6 @@ "safe-buffer": "~5.1.0" } }, - "node_modules/follow-redirects": { - "version": "1.15.1", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.1.tgz", - "integrity": "sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA==", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, "node_modules/for-in": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", @@ -4598,19 +4483,6 @@ "node": ">=0.10.0" } }, - "node_modules/form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/fragment-cache": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", @@ -5814,25 +5686,6 @@ "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", "dev": true }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, "node_modules/mimic-fn": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", @@ -6452,15 +6305,6 @@ "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", "dev": true }, - "node_modules/os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/p-limit": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", @@ -8251,18 +8095,6 @@ "@popperjs/core": "^2.9.0" } }, - "node_modules/tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dev": true, - "dependencies": { - "os-tmpdir": "~1.0.2" - }, - "engines": { - "node": ">=0.6.0" - } - }, "node_modules/to-arraybuffer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", @@ -8600,32 +8432,6 @@ "node": ">=0.10.0" } }, - "node_modules/useragent": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/useragent/-/useragent-2.3.0.tgz", - "integrity": "sha512-4AoH4pxuSvHCjqLO04sU6U/uE65BYza8l/KKBS0b0hnUPWi+cQ2BpeTEwejCSx9SPV5/U03nniDTrWx5NrmKdw==", - "dev": true, - "dependencies": { - "lru-cache": "4.1.x", - "tmp": "0.0.x" - } - }, - "node_modules/useragent/node_modules/lru-cache": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", - "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", - "dev": true, - "dependencies": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - } - }, - "node_modules/useragent/node_modules/yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", - "dev": true - }, "node_modules/util": { "version": "0.11.1", "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", @@ -9284,35 +9090,6 @@ "node": ">= 10" } }, - "node_modules/webpack-extension-reloader": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/webpack-extension-reloader/-/webpack-extension-reloader-1.1.4.tgz", - "integrity": "sha512-PyssJvAiKhztc//QmhpU8yfg7LBR7Bn/cjSM7jadfQJPIDNN1Djxc+SJQRk8uHQ3GQbyWhsWu2DLCMBRcWHIPA==", - "dev": true, - "dependencies": { - "@types/webpack": "^4.39.8", - "@types/webpack-sources": "^0.1.5", - "colors": "^1.4.0", - "lodash": "^4.17.15", - "minimist": "^1.2.0", - "useragent": "^2.3.0", - "webextension-polyfill": "^0.5.0", - "webpack-sources": "^1.4.3", - "ws": "^7.2.0" - }, - "bin": { - "webpack-extension-reloader": "dist/webpack-extension-reloader-cli.js" - }, - "peerDependencies": { - "webpack": "^4" - } - }, - "node_modules/webpack-extension-reloader/node_modules/webextension-polyfill": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/webextension-polyfill/-/webextension-polyfill-0.5.0.tgz", - "integrity": "sha512-aFrl38x43t1bTboX/paCT8I97+idzX/TY0+fuM52hrIkCpYfROEF9kSn0BXuEIi3J9LTYt2ZZKkhx9NB1qF3nA==", - "dev": true - }, "node_modules/webpack-merge": { "version": "5.8.0", "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz", @@ -9603,27 +9380,6 @@ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", "dev": true }, - "node_modules/ws": { - "version": "7.5.8", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.8.tgz", - "integrity": "sha512-ri1Id1WinAX5Jqn9HejiGb8crfRio0Qgu8+MtL36rlTA6RLsMdWt1Az/19A2Qij6uSHUMphEFaTKa4WG+UNHNw==", - "dev": true, - "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, "node_modules/xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", @@ -11054,58 +10810,6 @@ "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", "dev": true }, - "@types/node": { - "version": "17.0.35", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.35.tgz", - "integrity": "sha512-vu1SrqBjbbZ3J6vwY17jBs8Sr/BKA+/a/WtjRG+whKg1iuLFOosq872EXS0eXWILdO36DHQQeku/ZcL6hz2fpg==", - "dev": true - }, - "@types/source-list-map": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@types/source-list-map/-/source-list-map-0.1.2.tgz", - "integrity": "sha512-K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA==", - "dev": true - }, - "@types/tapable": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@types/tapable/-/tapable-1.0.8.tgz", - "integrity": "sha512-ipixuVrh2OdNmauvtT51o3d8z12p6LtFW9in7U79der/kwejjdNchQC5UMn5u/KxNoM7VHHOs/l8KS8uHxhODQ==", - "dev": true - }, - "@types/uglify-js": { - "version": "3.13.2", - "resolved": "https://registry.npmjs.org/@types/uglify-js/-/uglify-js-3.13.2.tgz", - "integrity": "sha512-/xFrPIo+4zOeNGtVMbf9rUm0N+i4pDf1ynExomqtokIJmVzR3962lJ1UE+MmexMkA0cmN9oTzg5Xcbwge0Ij2Q==", - "dev": true, - "requires": { - "source-map": "^0.6.1" - } - }, - "@types/webpack": { - "version": "4.41.32", - "resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-4.41.32.tgz", - "integrity": "sha512-cb+0ioil/7oz5//7tZUSwbrSAN/NWHrQylz5cW8G0dWTcF/g+/dSdMlKVZspBYuMAN1+WnwHrkxiRrLcwd0Heg==", - "dev": true, - "requires": { - "@types/node": "*", - "@types/tapable": "^1", - "@types/uglify-js": "*", - "@types/webpack-sources": "*", - "anymatch": "^3.0.0", - "source-map": "^0.6.0" - } - }, - "@types/webpack-sources": { - "version": "0.1.9", - "resolved": "https://registry.npmjs.org/@types/webpack-sources/-/webpack-sources-0.1.9.tgz", - "integrity": "sha512-bvzMnzqoK16PQIC8AYHNdW45eREJQMd6WG/msQWX5V2+vZmODCOPb4TJcbgRljTZZTwTM4wUMcsI8FftNA7new==", - "dev": true, - "requires": { - "@types/node": "*", - "@types/source-list-map": "*", - "source-map": "^0.6.1" - } - }, "@vue/component-compiler-utils": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/@vue/component-compiler-utils/-/component-compiler-utils-3.3.0.tgz", @@ -11576,26 +11280,12 @@ "dev": true, "optional": true }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" - }, "atob": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", "dev": true }, - "axios": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz", - "integrity": "sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==", - "requires": { - "follow-redirects": "^1.14.9", - "form-data": "^4.0.0" - } - }, "babel-loader": { "version": "8.2.5", "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.5.tgz", @@ -12104,20 +11794,6 @@ "integrity": "sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g==", "dev": true }, - "colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", - "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", - "dev": true - }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "requires": { - "delayed-stream": "~1.0.0" - } - }, "commander": { "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", @@ -12578,11 +12254,6 @@ "is-descriptor": "^0.1.0" } }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" - }, "des.js": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", @@ -13175,27 +12846,12 @@ } } }, - "follow-redirects": { - "version": "1.15.1", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.1.tgz", - "integrity": "sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA==" - }, "for-in": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", "dev": true }, - "form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - } - }, "fragment-cache": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", @@ -14151,19 +13807,6 @@ } } }, - "mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" - }, - "mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "requires": { - "mime-db": "1.52.0" - } - }, "mimic-fn": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", @@ -14669,12 +14312,6 @@ "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", "dev": true }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", - "dev": true - }, "p-limit": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", @@ -16094,15 +15731,6 @@ "@popperjs/core": "^2.9.0" } }, - "tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dev": true, - "requires": { - "os-tmpdir": "~1.0.2" - } - }, "to-arraybuffer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", @@ -16382,34 +16010,6 @@ "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", "dev": true }, - "useragent": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/useragent/-/useragent-2.3.0.tgz", - "integrity": "sha512-4AoH4pxuSvHCjqLO04sU6U/uE65BYza8l/KKBS0b0hnUPWi+cQ2BpeTEwejCSx9SPV5/U03nniDTrWx5NrmKdw==", - "dev": true, - "requires": { - "lru-cache": "4.1.x", - "tmp": "0.0.x" - }, - "dependencies": { - "lru-cache": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", - "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", - "dev": true, - "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - } - }, - "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", - "dev": true - } - } - }, "util": { "version": "0.11.1", "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", @@ -17133,31 +16733,6 @@ } } }, - "webpack-extension-reloader": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/webpack-extension-reloader/-/webpack-extension-reloader-1.1.4.tgz", - "integrity": "sha512-PyssJvAiKhztc//QmhpU8yfg7LBR7Bn/cjSM7jadfQJPIDNN1Djxc+SJQRk8uHQ3GQbyWhsWu2DLCMBRcWHIPA==", - "dev": true, - "requires": { - "@types/webpack": "^4.39.8", - "@types/webpack-sources": "^0.1.5", - "colors": "^1.4.0", - "lodash": "^4.17.15", - "minimist": "^1.2.0", - "useragent": "^2.3.0", - "webextension-polyfill": "^0.5.0", - "webpack-sources": "^1.4.3", - "ws": "^7.2.0" - }, - "dependencies": { - "webextension-polyfill": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/webextension-polyfill/-/webextension-polyfill-0.5.0.tgz", - "integrity": "sha512-aFrl38x43t1bTboX/paCT8I97+idzX/TY0+fuM52hrIkCpYfROEF9kSn0BXuEIi3J9LTYt2ZZKkhx9NB1qF3nA==", - "dev": true - } - } - }, "webpack-merge": { "version": "5.8.0", "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz", @@ -17217,13 +16792,6 @@ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", "dev": true }, - "ws": { - "version": "7.5.8", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.8.tgz", - "integrity": "sha512-ri1Id1WinAX5Jqn9HejiGb8crfRio0Qgu8+MtL36rlTA6RLsMdWt1Az/19A2Qij6uSHUMphEFaTKa4WG+UNHNw==", - "dev": true, - "requires": {} - }, "xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", diff --git a/package.json b/package.json index e88db0d..a3ebac0 100644 --- a/package.json +++ b/package.json @@ -12,14 +12,12 @@ "build": "cross-env NODE_ENV=production webpack", "build:lite": "cross-env NODE_ENV=production LITE=1 webpack", "build:beta": "cross-env NODE_ENV=production BETA=1 webpack", - "build:dev": "cross-env NODE_ENV=development BETA=1 webpack", "build:mac": "cross-env NODE_ENV=production MAC=1 webpack", "build-zip": "node scripts/build-zip.js", "generate:buildconfig": "node scripts/generateBuildConfig.js", - "watch": "npm run build -- --watch", - "watch:dev": "cross-env HMR=true npm run build:dev -- --watch", - "start": "cross-env HMR=true npm run build:dev -- --watch", - "start:mac": "cross-env HMR=true MAC=1 npm run build:dev -- --watch" + "start": "cross-env HMR=true NODE_ENV=development BETA=1 webpack -- --watch", + "start:mac": "cross-env HMR=true NODE_ENV=development BETA=1 MAC=1 webpack -- --watch", + "start:firefox": "cross-env HMR=true NODE_ENV=development BETA=1 FIREFOX=1 webpack -- --watch" }, "dependencies": { "@fortawesome/fontawesome-svg-core": "^1.2.36", @@ -27,7 +25,6 @@ "@fortawesome/vue-fontawesome": "^0.1.10", "@sentry/browser": "^5.25.0", "@sentry/integrations": "^5.30.0", - "axios": "^0.27.2", "bootstrap": "^4.6.1", "bootstrap-vue": "^2.21.2", "tippy.js": "^6.3.7", @@ -61,7 +58,6 @@ "vue-template-compiler": "^2.6.14", "web-ext-types": "^2.1.0", "webpack": "^4.46.0", - "webpack-cli": "^4.9.2", - "webpack-extension-reloader": "^1.1.4" + "webpack-cli": "^4.9.2" } -} +} \ No newline at end of file diff --git a/src/background/content-script.js b/src/background/content-script.js index 4d119bc..9721313 100644 --- a/src/background/content-script.js +++ b/src/background/content-script.js @@ -14,14 +14,19 @@ async function setupContentScript() { return; } - browser.tabs.executeScript(tabId, { - file: "content_script/input_tools.js", - runAt: "document_idle", - }); - - browser.tabs.insertCSS(tabId, { - file: "content_script/input_tools.css", - }); + browser.scripting + .registerContentScripts([ + { + id: "input-tools", + js: ["content_script/input_tools.js"], + css: ["content_script/input_tools.css"], + persistAcrossSessions: false, + matches: ["*://*/*"], + runAt: "document_idle", + }, + ]) + .then(() => console.log("registration input tools complete")) + .catch((err) => console.warn("unexpected error", err)); }); } diff --git a/src/background/context-menu.js b/src/background/context-menu.js index c6d7682..7f2b834 100644 --- a/src/background/context-menu.js +++ b/src/background/context-menu.js @@ -1,67 +1,62 @@ import { handleNewRandomAlias } from "./create-alias"; import browser from "webextension-polyfill"; -function generateDialogJS(message) { - return ` - function showSLDialog() { - let slDialog = document.createElement("div"); - slDialog.style.position = "fixed"; - slDialog.style.bottom = "0"; - slDialog.style.right = "0"; - slDialog.style.margin = "0.7em"; - slDialog.style.padding = "0.7em"; - slDialog.style.fontFamily = "Verdana, Arial, Helvetica, sans-serif"; - slDialog.style.fontSize = "1em"; - slDialog.style.pointerEvents = "none"; - slDialog.style.zIndex = "999999"; - slDialog.style.background = "white"; - slDialog.style.border = "2px solid #777"; - slDialog.style.borderRadius = "5px"; - slDialog.innerText = ${JSON.stringify(message)}; +function displayAndCopy(alias, error) { + function copyTextToClipboard(text) { + if (!text) return; + var textArea = document.createElement("textarea"); + textArea.value = text; - document.body.appendChild(slDialog); + textArea.style.top = "0"; + textArea.style.left = "0"; + textArea.style.position = "fixed"; - setTimeout(function () { - document.body.removeChild(slDialog); - }, 3000); - } + document.body.appendChild(textArea); + textArea.focus(); + textArea.select(); - showSLDialog(); - `; + try { + document.execCommand("copy"); + } catch (err) {} + + document.body.removeChild(textArea); + } + + function showSLDialog(message) { + let slDialog = document.createElement("div"); + slDialog.style.position = "fixed"; + slDialog.style.bottom = "0"; + slDialog.style.right = "0"; + slDialog.style.margin = "0.7em"; + slDialog.style.padding = "0.7em"; + slDialog.style.fontFamily = "Verdana, Arial, Helvetica, sans-serif"; + slDialog.style.fontSize = "1em"; + slDialog.style.pointerEvents = "none"; + slDialog.style.zIndex = "999999"; + slDialog.style.background = "white"; + slDialog.style.border = "2px solid #777"; + slDialog.style.borderRadius = "5px"; + slDialog.innerText = JSON.stringify(message); + + document.body.appendChild(slDialog); + + setTimeout(function () { + document.body.removeChild(slDialog); + }, 3000); + } + + showSLDialog(alias ? alias + " copied to clipboard" : "ERROR: " + error); + copyTextToClipboard(alias); } function generateAliasHandlerJS(tab, res) { - const dialogJS = generateDialogJS( - res.alias ? res.alias + " copied to clipboard" : "ERROR: " + res.error - ); - const js = ` - function copyTextToClipboard(text) { - if (!text) return; - var textArea = document.createElement("textarea"); - textArea.value = text; - - textArea.style.top = "0"; - textArea.style.left = "0"; - textArea.style.position = "fixed"; - - document.body.appendChild(textArea); - textArea.focus(); - textArea.select(); - - try { - document.execCommand("copy"); - } catch (err) {} - - document.body.removeChild(textArea); - } - - ${dialogJS} - - copyTextToClipboard(${JSON.stringify(res.alias)}); - `; - browser.tabs.executeScript(tab.id, { - code: js, - }); + chrome.scripting + .executeScript({ + target: { tabId: tab.id }, + func: displayAndCopy, + args: [res.alias || null, res.error || null], + }) + .then(() => console.log("injected a function")); } async function handleOnClickContextMenu(info, tab) { diff --git a/src/background/index.js b/src/background/index.js index 9b485d2..bb982b0 100644 --- a/src/background/index.js +++ b/src/background/index.js @@ -9,11 +9,8 @@ import { handleOnClickContextMenu, generateAliasHandlerJS, } from "./context-menu"; -import axios from "axios"; import Utils from "../popup/Utils"; -global.isBackgroundJS = true; - /** * Get app settings */ @@ -30,13 +27,21 @@ async function handleGetAppSettings() { async function handleExtensionSetup() { const apiUrl = await SLStorage.get(SLStorage.SETTINGS.API_URL); - try { - const url = apiUrl + API_ROUTE.GET_API_KEY_FROM_COOKIE.path; - const res = await axios.post(url, { - device: Utils.getDeviceName(), - }); - const apiKey = res.data.api_key; + const url = apiUrl + API_ROUTE.GET_API_KEY_FROM_COOKIE.path; + const res = await fetch(url, { + method: "POST", + headers: { + "Content-Type": "application/json", + }, + body: JSON.stringify({ + device: Utils.getDeviceName(), + }), + }); + + if (res.ok) { + const apiRes = await res.json(); + const apiKey = apiRes.api_key; if (apiKey) { await SLStorage.set(SLStorage.SETTINGS.API_KEY, apiKey); @@ -52,9 +57,8 @@ async function handleExtensionSetup() { } else { console.error("Received null API Key"); } - } catch (e) { - // Probably the user is not logged in - console.error(e); + } else { + console.error("api error"); } } @@ -127,11 +131,13 @@ browser.runtime.onMessage.addListener(async function (request, sender) { * Register context menu */ browser.contextMenus.create({ + id: "sl-random", title: "Create random email alias (copied)", contexts: ["all"], - onclick: handleOnClickContextMenu, }); +browser.contextMenus.onClicked.addListener(handleOnClickContextMenu); + /** * Shortcuts and hotkeys listener */ diff --git a/src/manifest.json b/src/manifest.json index a276bff..8368d85 100644 --- a/src/manifest.json +++ b/src/manifest.json @@ -3,7 +3,7 @@ "short_name": "SimpleLogin", "description": "Easily create a different email for each website to hide your real email. Protect your inbox against spams, phishing, data breaches", "version": null, - "manifest_version": 2, + "manifest_version": 3, "icons": { "16": "icons/icon_16.png", "32": "icons/icon_32.png", @@ -15,24 +15,31 @@ "activeTab", "storage", "contextMenus", + "scripting", + "tabs" + ], + "host_permissions": [ "https://*.simplelogin.io/*", "http://*/*", "https://*/*" ], - "browser_action": { + "action": { "default_title": "SimpleLogin", - "default_popup": "popup/popup.html" + "default_popup": "popup/popup.html", + "default_icon": { + "16": "icons/icon_16.png", + "32": "icons/icon_32.png", + "48": "icons/icon_48.png", + "96": "icons/icon_96.png", + "128": "icons/icon_128.png" + } }, + "browser_specific_settings": { "gecko": { "id": "addon@simplelogin" } }, - "background": { - "scripts": [ - "background.js" - ] - }, "commands": { "generate-random-alias": { "suggested_key": { diff --git a/src/popup/APIService.js b/src/popup/APIService.js index d90df18..bdb53c2 100644 --- a/src/popup/APIService.js +++ b/src/popup/APIService.js @@ -2,7 +2,6 @@ import EventManager from "./EventManager"; import Navigation from "./Navigation"; import SLStorage from "./SLStorage"; import Utils from "./Utils"; -import axios from "axios"; const API_ROUTE = { GET_USER_INFO: { method: "GET", path: "/api/user_info" }, @@ -72,28 +71,37 @@ const callAPI = async function ( headers["Authentication"] = SETTINGS.apiKey; } - try { - const res = await axios({ - method, - url, - headers, - data, - }); + let fetchParam = { + method: method, + headers: headers, + }; + if (method === "POST" || method === "PUT") { + fetchParam.body = JSON.stringify(data); + headers["Content-Type"] = "application/json"; + } - return res; - } catch (err) { + let res = await fetch(url, fetchParam); + if (res.ok) { + const apiRes = await res.json(); + // wrap apiRes in data to look like axios which was used before + return { + status: res.status, + data: apiRes, + }; + } else { if (errHandlerMethod !== API_ON_ERR.IGNORE) { - console.error(err); + console.error(res); } - if (err.response.status === 401 && !global.isBackgroundJS) { + if (res.status === 401) { await handle401Error(); return null; } if (errHandlerMethod === API_ON_ERR.TOAST) { - if (err.response.data && err.response.data.error) { - Utils.showError(err.response.data.error); + let apiRes = await res.json(); + if (apiRes.error) { + Utils.showError(apiRes.error); } else { Utils.showError("Unknown error"); } @@ -101,7 +109,12 @@ const callAPI = async function ( } if (errHandlerMethod === API_ON_ERR.THROW) { - throw err; + throw { + response: { + status: res.status, + data: await res.json(), + }, + }; } } }; diff --git a/src/popup/components/ApiKeySetting.vue b/src/popup/components/ApiKeySetting.vue index 0018428..5bad311 100644 --- a/src/popup/components/ApiKeySetting.vue +++ b/src/popup/components/ApiKeySetting.vue @@ -39,7 +39,6 @@