Merge pull request #210 from simple-login/mv3

Port SL to using MV3
This commit is contained in:
Son Nguyen Kim
2024-04-11 21:53:31 +02:00
committed by GitHub
12 changed files with 222 additions and 599 deletions
+26 -2
View File
@@ -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: |
+9 -7
View File
@@ -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:
+3 -435
View File
@@ -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",
+4 -8
View File
@@ -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"
}
}
+12 -7
View File
@@ -14,14 +14,19 @@ async function setupContentScript() {
return;
}
browser.tabs.executeScript(tabId, {
file: "content_script/input_tools.js",
browser.scripting
.registerContentScripts([
{
id: "input-tools",
js: ["content_script/input_tools.js"],
css: ["content_script/input_tools.css"],
persistAcrossSessions: false,
matches: ["*://*/*"],
runAt: "document_idle",
});
browser.tabs.insertCSS(tabId, {
file: "content_script/input_tools.css",
});
},
])
.then(() => console.log("registration input tools complete"))
.catch((err) => console.warn("unexpected error", err));
});
}
+35 -40
View File
@@ -1,40 +1,7 @@
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)};
document.body.appendChild(slDialog);
setTimeout(function () {
document.body.removeChild(slDialog);
}, 3000);
}
showSLDialog();
`;
}
function generateAliasHandlerJS(tab, res) {
const dialogJS = generateDialogJS(
res.alias ? res.alias + " copied to clipboard" : "ERROR: " + res.error
);
const js = `
function displayAndCopy(alias, error) {
function copyTextToClipboard(text) {
if (!text) return;
var textArea = document.createElement("textarea");
@@ -55,13 +22,41 @@ function generateAliasHandlerJS(tab, res) {
document.body.removeChild(textArea);
}
${dialogJS}
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);
copyTextToClipboard(${JSON.stringify(res.alias)});
`;
browser.tabs.executeScript(tab.id, {
code: js,
});
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) {
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) {
+16 -10
View File
@@ -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, {
const res = await fetch(url, {
method: "POST",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify({
device: Utils.getDeviceName(),
}),
});
const apiKey = res.data.api_key;
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
*/
+15 -8
View File
@@ -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": {
+30 -17
View File
@@ -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,
});
return res;
} catch (err) {
if (errHandlerMethod !== API_ON_ERR.IGNORE) {
console.error(err);
let fetchParam = {
method: method,
headers: headers,
};
if (method === "POST" || method === "PUT") {
fetchParam.body = JSON.stringify(data);
headers["Content-Type"] = "application/json";
}
if (err.response.status === 401 && !global.isBackgroundJS) {
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(res);
}
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(),
},
};
}
}
};
+7 -9
View File
@@ -39,7 +39,6 @@
</template>
<script>
import axios from "axios";
import SLStorage from "../SLStorage";
import EventManager from "../EventManager";
import Navigation from "../Navigation";
@@ -64,21 +63,20 @@ export default {
}
// check api key
axios
.get(this.apiUrl + API_ROUTE.GET_USER_INFO.path, {
const res = await fetch(this.apiUrl + API_ROUTE.GET_USER_INFO.path, {
headers: { Authentication: this.apiKey },
})
.then(async (res) => {
const userName = res.data.name || res.data.email;
});
if (res.ok) {
const apiRes = await res.json();
const userName = apiRes.name || apiRes.email;
await SLStorage.set(SLStorage.SETTINGS.API_KEY, this.apiKey);
EventManager.broadcast(EventManager.EVENT.SETTINGS_CHANGED);
Utils.showSuccess(`Hi ${userName}!`);
Navigation.clearHistoryAndNavigateTo(Navigation.PATH.MAIN);
})
.catch((err) => {
} else {
Utils.showError("Incorrect API Key.");
});
}
},
},
computed: {},
+12 -9
View File
@@ -14,7 +14,6 @@ import SLStorage from "../SLStorage";
import EventManager from "../EventManager";
import Navigation from "../Navigation";
import Utils from "../Utils";
import axios from "axios";
import { API_ROUTE } from "../APIService";
export default {
@@ -38,12 +37,17 @@ export default {
} else {
// try to get api key when user is already logged in
const apiUrl = await SLStorage.get(SLStorage.SETTINGS.API_URL);
axios
.post(apiUrl + API_ROUTE.GET_API_KEY_FROM_COOKIE.path, {
const res = await fetch(apiUrl + API_ROUTE.GET_API_KEY_FROM_COOKIE.path, {
method: "POST",
body: JSON.stringify({
device: Utils.getDeviceName(),
})
.then(async (res) => {
this.apiKey = res.data.api_key || "";
}),
});
if (res.ok) {
let apiRes = await res.json();
this.apiKey = apiRes.api_key || "";
if (this.apiKey) {
await SLStorage.set(SLStorage.SETTINGS.API_KEY, this.apiKey);
EventManager.broadcast(EventManager.EVENT.SETTINGS_CHANGED);
@@ -52,11 +56,10 @@ export default {
} else {
Navigation.navigateTo(Navigation.PATH.LOGIN, true);
}
})
.catch((err) => {
} else {
// user is probably not logged in
Navigation.navigateTo(Navigation.PATH.LOGIN, true);
});
}
}
},
beforeDestroy() {
+17 -11
View File
@@ -2,7 +2,6 @@ const webpack = require('webpack');
const ejs = require('ejs');
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
const CopyWebpackPlugin = require('copy-webpack-plugin');
const ExtensionReloader = require('webpack-extension-reloader');
const { VueLoaderPlugin } = require('vue-loader');
const { version, betaRev } = require('./package.json');
const fs = require('fs');
@@ -103,7 +102,6 @@ const config = {
jsonContent.version = version;
if (config.mode === 'development') {
jsonContent.content_security_policy = "script-src 'self' 'unsafe-eval'; object-src 'self'";
jsonContent.permissions = jsonContent.permissions.concat(devConfig.permissions);
}
@@ -118,6 +116,17 @@ const config = {
jsonContent.browser_specific_settings.gecko.id = geckoId.replace('@', '-beta@');
}
if (process.env.FIREFOX) {
jsonContent.background = {
"scripts": ["background.js"]
}
} else { // CHROME
jsonContent.background = {
"service_worker": "background.js",
"type": "module"
}
}
if (process.env.LITE) {
// Remove "All sites" permissions
const PERMISSIONS_TO_REMOVE = [
@@ -179,15 +188,6 @@ if (config.mode === 'production') {
]);
}
if (process.env.HMR === 'true') {
config.plugins = (config.plugins || []).concat([
new ExtensionReloader({
manifest: __dirname + '/src/manifest.json',
port: 19090
}),
]);
}
function transformHtml(content) {
return ejs.render(content.toString(), {
...process.env,
@@ -195,4 +195,10 @@ function transformHtml(content) {
});
}
if (config.mode === 'production') {
config.devtool="source-map";
} else {
config.devtool="cheap-source-map";
}
module.exports = config;