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
+27 -3
View File
@@ -78,7 +78,7 @@ jobs:
strategy: strategy:
max-parallel: 4 max-parallel: 4
matrix: matrix:
variant: ['full', 'lite', 'mac'] variant: ['full', 'lite', 'mac', 'beta', 'beta-firefox']
steps: steps:
- name: Build info - name: Build info
@@ -128,7 +128,31 @@ jobs:
npm run build:lite npm run build:lite
SUFFIX=lite npm run build-zip 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' if: matrix.variant == 'full'
shell: bash shell: bash
run: | run: |
@@ -213,4 +237,4 @@ jobs:
] ]
} }
env: env:
SLACK_BOT_TOKEN: ${{ secrets.SLACK_BOT_TOKEN }} SLACK_BOT_TOKEN: ${{ secrets.SLACK_BOT_TOKEN }}
+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 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`. To run the extension locally, please first install all dependencies with `npm install`.
- run `npm start` to generate the `/dist` folder that can be installed into Chrome.
## 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` 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 export NODE_OPTIONS=--openssl-legacy-provider
```` ````
On Firefox, it can be done via `web-ext` tool from within the `/dist` folder: ## Firefox
```bash 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
( cd dist/ ; web-ext run )
``` ## 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: 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", "name": "simplelogin-extension",
"version": "2.10.0", "version": "2.11.1",
"lockfileVersion": 2, "lockfileVersion": 2,
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "simplelogin-extension", "name": "simplelogin-extension",
"version": "2.10.0", "version": "2.11.1",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@fortawesome/fontawesome-svg-core": "^1.2.36", "@fortawesome/fontawesome-svg-core": "^1.2.36",
@@ -14,7 +14,6 @@
"@fortawesome/vue-fontawesome": "^0.1.10", "@fortawesome/vue-fontawesome": "^0.1.10",
"@sentry/browser": "^5.25.0", "@sentry/browser": "^5.25.0",
"@sentry/integrations": "^5.30.0", "@sentry/integrations": "^5.30.0",
"axios": "^0.27.2",
"bootstrap": "^4.6.1", "bootstrap": "^4.6.1",
"bootstrap-vue": "^2.21.2", "bootstrap-vue": "^2.21.2",
"tippy.js": "^6.3.7", "tippy.js": "^6.3.7",
@@ -48,8 +47,7 @@
"vue-template-compiler": "^2.6.14", "vue-template-compiler": "^2.6.14",
"web-ext-types": "^2.1.0", "web-ext-types": "^2.1.0",
"webpack": "^4.46.0", "webpack": "^4.46.0",
"webpack-cli": "^4.9.2", "webpack-cli": "^4.9.2"
"webpack-extension-reloader": "^1.1.4"
} }
}, },
"node_modules/@ampproject/remapping": { "node_modules/@ampproject/remapping": {
@@ -2012,58 +2010,6 @@
"integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==",
"dev": true "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": { "node_modules/@vue/component-compiler-utils": {
"version": "3.3.0", "version": "3.3.0",
"resolved": "https://registry.npmjs.org/@vue/component-compiler-utils/-/component-compiler-utils-3.3.0.tgz", "resolved": "https://registry.npmjs.org/@vue/component-compiler-utils/-/component-compiler-utils-3.3.0.tgz",
@@ -2588,11 +2534,6 @@
"dev": true, "dev": true,
"optional": 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": { "node_modules/atob": {
"version": "2.1.2", "version": "2.1.2",
"resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz",
@@ -2605,15 +2546,6 @@
"node": ">= 4.5.0" "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": { "node_modules/babel-loader": {
"version": "8.2.5", "version": "8.2.5",
"resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.5.tgz", "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.5.tgz",
@@ -3281,26 +3213,6 @@
"integrity": "sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g==", "integrity": "sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g==",
"dev": true "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": { "node_modules/commander": {
"version": "2.20.3", "version": "2.20.3",
"resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
@@ -3857,14 +3769,6 @@
"node": ">=0.10.0" "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": { "node_modules/des.js": {
"version": "1.0.1", "version": "1.0.1",
"resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz",
@@ -4570,25 +4474,6 @@
"safe-buffer": "~5.1.0" "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": { "node_modules/for-in": {
"version": "1.0.2", "version": "1.0.2",
"resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
@@ -4598,19 +4483,6 @@
"node": ">=0.10.0" "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": { "node_modules/fragment-cache": {
"version": "0.2.1", "version": "0.2.1",
"resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
@@ -5814,25 +5686,6 @@
"integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==",
"dev": true "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": { "node_modules/mimic-fn": {
"version": "2.1.0", "version": "2.1.0",
"resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
@@ -6452,15 +6305,6 @@
"integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=",
"dev": true "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": { "node_modules/p-limit": {
"version": "3.1.0", "version": "3.1.0",
"resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
@@ -8251,18 +8095,6 @@
"@popperjs/core": "^2.9.0" "@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": { "node_modules/to-arraybuffer": {
"version": "1.0.1", "version": "1.0.1",
"resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz",
@@ -8600,32 +8432,6 @@
"node": ">=0.10.0" "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": { "node_modules/util": {
"version": "0.11.1", "version": "0.11.1",
"resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz",
@@ -9284,35 +9090,6 @@
"node": ">= 10" "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": { "node_modules/webpack-merge": {
"version": "5.8.0", "version": "5.8.0",
"resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz", "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz",
@@ -9603,27 +9380,6 @@
"integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
"dev": true "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": { "node_modules/xtend": {
"version": "4.0.2", "version": "4.0.2",
"resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
@@ -11054,58 +10810,6 @@
"integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==",
"dev": true "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": { "@vue/component-compiler-utils": {
"version": "3.3.0", "version": "3.3.0",
"resolved": "https://registry.npmjs.org/@vue/component-compiler-utils/-/component-compiler-utils-3.3.0.tgz", "resolved": "https://registry.npmjs.org/@vue/component-compiler-utils/-/component-compiler-utils-3.3.0.tgz",
@@ -11576,26 +11280,12 @@
"dev": true, "dev": true,
"optional": 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": { "atob": {
"version": "2.1.2", "version": "2.1.2",
"resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz",
"integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==",
"dev": true "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": { "babel-loader": {
"version": "8.2.5", "version": "8.2.5",
"resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.5.tgz", "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.5.tgz",
@@ -12104,20 +11794,6 @@
"integrity": "sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g==", "integrity": "sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g==",
"dev": true "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": { "commander": {
"version": "2.20.3", "version": "2.20.3",
"resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
@@ -12578,11 +12254,6 @@
"is-descriptor": "^0.1.0" "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": { "des.js": {
"version": "1.0.1", "version": "1.0.1",
"resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", "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": { "for-in": {
"version": "1.0.2", "version": "1.0.2",
"resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
"integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=",
"dev": true "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": { "fragment-cache": {
"version": "0.2.1", "version": "0.2.1",
"resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", "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": { "mimic-fn": {
"version": "2.1.0", "version": "2.1.0",
"resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
@@ -14669,12 +14312,6 @@
"integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=",
"dev": true "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": { "p-limit": {
"version": "3.1.0", "version": "3.1.0",
"resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
@@ -16094,15 +15731,6 @@
"@popperjs/core": "^2.9.0" "@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": { "to-arraybuffer": {
"version": "1.0.1", "version": "1.0.1",
"resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", "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==", "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==",
"dev": true "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": { "util": {
"version": "0.11.1", "version": "0.11.1",
"resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", "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": { "webpack-merge": {
"version": "5.8.0", "version": "5.8.0",
"resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz", "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz",
@@ -17217,13 +16792,6 @@
"integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
"dev": true "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": { "xtend": {
"version": "4.0.2", "version": "4.0.2",
"resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
+5 -9
View File
@@ -12,14 +12,12 @@
"build": "cross-env NODE_ENV=production webpack", "build": "cross-env NODE_ENV=production webpack",
"build:lite": "cross-env NODE_ENV=production LITE=1 webpack", "build:lite": "cross-env NODE_ENV=production LITE=1 webpack",
"build:beta": "cross-env NODE_ENV=production BETA=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:mac": "cross-env NODE_ENV=production MAC=1 webpack",
"build-zip": "node scripts/build-zip.js", "build-zip": "node scripts/build-zip.js",
"generate:buildconfig": "node scripts/generateBuildConfig.js", "generate:buildconfig": "node scripts/generateBuildConfig.js",
"watch": "npm run build -- --watch", "start": "cross-env HMR=true NODE_ENV=development BETA=1 webpack -- --watch",
"watch:dev": "cross-env HMR=true npm run build:dev -- --watch", "start:mac": "cross-env HMR=true NODE_ENV=development BETA=1 MAC=1 webpack -- --watch",
"start": "cross-env HMR=true npm run build:dev -- --watch", "start:firefox": "cross-env HMR=true NODE_ENV=development BETA=1 FIREFOX=1 webpack -- --watch"
"start:mac": "cross-env HMR=true MAC=1 npm run build:dev -- --watch"
}, },
"dependencies": { "dependencies": {
"@fortawesome/fontawesome-svg-core": "^1.2.36", "@fortawesome/fontawesome-svg-core": "^1.2.36",
@@ -27,7 +25,6 @@
"@fortawesome/vue-fontawesome": "^0.1.10", "@fortawesome/vue-fontawesome": "^0.1.10",
"@sentry/browser": "^5.25.0", "@sentry/browser": "^5.25.0",
"@sentry/integrations": "^5.30.0", "@sentry/integrations": "^5.30.0",
"axios": "^0.27.2",
"bootstrap": "^4.6.1", "bootstrap": "^4.6.1",
"bootstrap-vue": "^2.21.2", "bootstrap-vue": "^2.21.2",
"tippy.js": "^6.3.7", "tippy.js": "^6.3.7",
@@ -61,7 +58,6 @@
"vue-template-compiler": "^2.6.14", "vue-template-compiler": "^2.6.14",
"web-ext-types": "^2.1.0", "web-ext-types": "^2.1.0",
"webpack": "^4.46.0", "webpack": "^4.46.0",
"webpack-cli": "^4.9.2", "webpack-cli": "^4.9.2"
"webpack-extension-reloader": "^1.1.4"
} }
} }
+13 -8
View File
@@ -14,14 +14,19 @@ async function setupContentScript() {
return; return;
} }
browser.tabs.executeScript(tabId, { browser.scripting
file: "content_script/input_tools.js", .registerContentScripts([
runAt: "document_idle", {
}); id: "input-tools",
js: ["content_script/input_tools.js"],
browser.tabs.insertCSS(tabId, { css: ["content_script/input_tools.css"],
file: "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));
}); });
} }
+50 -55
View File
@@ -1,67 +1,62 @@
import { handleNewRandomAlias } from "./create-alias"; import { handleNewRandomAlias } from "./create-alias";
import browser from "webextension-polyfill"; import browser from "webextension-polyfill";
function generateDialogJS(message) { function displayAndCopy(alias, error) {
return ` function copyTextToClipboard(text) {
function showSLDialog() { if (!text) return;
let slDialog = document.createElement("div"); var textArea = document.createElement("textarea");
slDialog.style.position = "fixed"; textArea.value = text;
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); textArea.style.top = "0";
textArea.style.left = "0";
textArea.style.position = "fixed";
setTimeout(function () { document.body.appendChild(textArea);
document.body.removeChild(slDialog); textArea.focus();
}, 3000); 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) { function generateAliasHandlerJS(tab, res) {
const dialogJS = generateDialogJS( chrome.scripting
res.alias ? res.alias + " copied to clipboard" : "ERROR: " + res.error .executeScript({
); target: { tabId: tab.id },
const js = ` func: displayAndCopy,
function copyTextToClipboard(text) { args: [res.alias || null, res.error || null],
if (!text) return; })
var textArea = document.createElement("textarea"); .then(() => console.log("injected a function"));
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,
});
} }
async function handleOnClickContextMenu(info, tab) { async function handleOnClickContextMenu(info, tab) {
+19 -13
View File
@@ -9,11 +9,8 @@ import {
handleOnClickContextMenu, handleOnClickContextMenu,
generateAliasHandlerJS, generateAliasHandlerJS,
} from "./context-menu"; } from "./context-menu";
import axios from "axios";
import Utils from "../popup/Utils"; import Utils from "../popup/Utils";
global.isBackgroundJS = true;
/** /**
* Get app settings * Get app settings
*/ */
@@ -30,13 +27,21 @@ async function handleGetAppSettings() {
async function handleExtensionSetup() { async function handleExtensionSetup() {
const apiUrl = await SLStorage.get(SLStorage.SETTINGS.API_URL); 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) { if (apiKey) {
await SLStorage.set(SLStorage.SETTINGS.API_KEY, apiKey); await SLStorage.set(SLStorage.SETTINGS.API_KEY, apiKey);
@@ -52,9 +57,8 @@ async function handleExtensionSetup() {
} else { } else {
console.error("Received null API Key"); console.error("Received null API Key");
} }
} catch (e) { } else {
// Probably the user is not logged in console.error("api error");
console.error(e);
} }
} }
@@ -127,11 +131,13 @@ browser.runtime.onMessage.addListener(async function (request, sender) {
* Register context menu * Register context menu
*/ */
browser.contextMenus.create({ browser.contextMenus.create({
id: "sl-random",
title: "Create random email alias (copied)", title: "Create random email alias (copied)",
contexts: ["all"], contexts: ["all"],
onclick: handleOnClickContextMenu,
}); });
browser.contextMenus.onClicked.addListener(handleOnClickContextMenu);
/** /**
* Shortcuts and hotkeys listener * Shortcuts and hotkeys listener
*/ */
+15 -8
View File
@@ -3,7 +3,7 @@
"short_name": "SimpleLogin", "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", "description": "Easily create a different email for each website to hide your real email. Protect your inbox against spams, phishing, data breaches",
"version": null, "version": null,
"manifest_version": 2, "manifest_version": 3,
"icons": { "icons": {
"16": "icons/icon_16.png", "16": "icons/icon_16.png",
"32": "icons/icon_32.png", "32": "icons/icon_32.png",
@@ -15,24 +15,31 @@
"activeTab", "activeTab",
"storage", "storage",
"contextMenus", "contextMenus",
"scripting",
"tabs"
],
"host_permissions": [
"https://*.simplelogin.io/*", "https://*.simplelogin.io/*",
"http://*/*", "http://*/*",
"https://*/*" "https://*/*"
], ],
"browser_action": { "action": {
"default_title": "SimpleLogin", "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": { "browser_specific_settings": {
"gecko": { "gecko": {
"id": "addon@simplelogin" "id": "addon@simplelogin"
} }
}, },
"background": {
"scripts": [
"background.js"
]
},
"commands": { "commands": {
"generate-random-alias": { "generate-random-alias": {
"suggested_key": { "suggested_key": {
+28 -15
View File
@@ -2,7 +2,6 @@ import EventManager from "./EventManager";
import Navigation from "./Navigation"; import Navigation from "./Navigation";
import SLStorage from "./SLStorage"; import SLStorage from "./SLStorage";
import Utils from "./Utils"; import Utils from "./Utils";
import axios from "axios";
const API_ROUTE = { const API_ROUTE = {
GET_USER_INFO: { method: "GET", path: "/api/user_info" }, GET_USER_INFO: { method: "GET", path: "/api/user_info" },
@@ -72,28 +71,37 @@ const callAPI = async function (
headers["Authentication"] = SETTINGS.apiKey; headers["Authentication"] = SETTINGS.apiKey;
} }
try { let fetchParam = {
const res = await axios({ method: method,
method, headers: headers,
url, };
headers, if (method === "POST" || method === "PUT") {
data, fetchParam.body = JSON.stringify(data);
}); headers["Content-Type"] = "application/json";
}
return res; let res = await fetch(url, fetchParam);
} catch (err) { 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) { 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(); await handle401Error();
return null; return null;
} }
if (errHandlerMethod === API_ON_ERR.TOAST) { if (errHandlerMethod === API_ON_ERR.TOAST) {
if (err.response.data && err.response.data.error) { let apiRes = await res.json();
Utils.showError(err.response.data.error); if (apiRes.error) {
Utils.showError(apiRes.error);
} else { } else {
Utils.showError("Unknown error"); Utils.showError("Unknown error");
} }
@@ -101,7 +109,12 @@ const callAPI = async function (
} }
if (errHandlerMethod === API_ON_ERR.THROW) { if (errHandlerMethod === API_ON_ERR.THROW) {
throw err; throw {
response: {
status: res.status,
data: await res.json(),
},
};
} }
} }
}; };
+13 -15
View File
@@ -39,7 +39,6 @@
</template> </template>
<script> <script>
import axios from "axios";
import SLStorage from "../SLStorage"; import SLStorage from "../SLStorage";
import EventManager from "../EventManager"; import EventManager from "../EventManager";
import Navigation from "../Navigation"; import Navigation from "../Navigation";
@@ -64,21 +63,20 @@ export default {
} }
// check api key // check api key
axios const res = await fetch(this.apiUrl + API_ROUTE.GET_USER_INFO.path, {
.get(this.apiUrl + API_ROUTE.GET_USER_INFO.path, { headers: { Authentication: this.apiKey },
headers: { Authentication: this.apiKey }, });
}) if (res.ok) {
.then(async (res) => { const apiRes = await res.json();
const userName = res.data.name || res.data.email; const userName = apiRes.name || apiRes.email;
await SLStorage.set(SLStorage.SETTINGS.API_KEY, this.apiKey); await SLStorage.set(SLStorage.SETTINGS.API_KEY, this.apiKey);
EventManager.broadcast(EventManager.EVENT.SETTINGS_CHANGED); EventManager.broadcast(EventManager.EVENT.SETTINGS_CHANGED);
Utils.showSuccess(`Hi ${userName}!`); Utils.showSuccess(`Hi ${userName}!`);
Navigation.clearHistoryAndNavigateTo(Navigation.PATH.MAIN); Navigation.clearHistoryAndNavigateTo(Navigation.PATH.MAIN);
}) } else {
.catch((err) => { Utils.showError("Incorrect API Key.");
Utils.showError("Incorrect API Key."); }
});
}, },
}, },
computed: {}, computed: {},
+21 -18
View File
@@ -14,7 +14,6 @@ import SLStorage from "../SLStorage";
import EventManager from "../EventManager"; import EventManager from "../EventManager";
import Navigation from "../Navigation"; import Navigation from "../Navigation";
import Utils from "../Utils"; import Utils from "../Utils";
import axios from "axios";
import { API_ROUTE } from "../APIService"; import { API_ROUTE } from "../APIService";
export default { export default {
@@ -38,25 +37,29 @@ export default {
} else { } else {
// try to get api key when user is already logged in // try to get api key when user is already logged in
const apiUrl = await SLStorage.get(SLStorage.SETTINGS.API_URL); const apiUrl = await SLStorage.get(SLStorage.SETTINGS.API_URL);
axios
.post(apiUrl + API_ROUTE.GET_API_KEY_FROM_COOKIE.path, {
device: Utils.getDeviceName(),
})
.then(async (res) => {
this.apiKey = res.data.api_key || "";
if (this.apiKey) {
await SLStorage.set(SLStorage.SETTINGS.API_KEY, this.apiKey);
EventManager.broadcast(EventManager.EVENT.SETTINGS_CHANGED);
Navigation.navigateTo(Navigation.PATH.MAIN, true); const res = await fetch(apiUrl + API_ROUTE.GET_API_KEY_FROM_COOKIE.path, {
} else { method: "POST",
Navigation.navigateTo(Navigation.PATH.LOGIN, true); body: JSON.stringify({
} device: Utils.getDeviceName(),
}) }),
.catch((err) => { });
// user is probably not logged in
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);
Navigation.navigateTo(Navigation.PATH.MAIN, true);
} else {
Navigation.navigateTo(Navigation.PATH.LOGIN, true); Navigation.navigateTo(Navigation.PATH.LOGIN, true);
}); }
} else {
// user is probably not logged in
Navigation.navigateTo(Navigation.PATH.LOGIN, true);
}
} }
}, },
beforeDestroy() { beforeDestroy() {
+19 -13
View File
@@ -2,7 +2,6 @@ const webpack = require('webpack');
const ejs = require('ejs'); const ejs = require('ejs');
const MiniCssExtractPlugin = require('mini-css-extract-plugin'); const MiniCssExtractPlugin = require('mini-css-extract-plugin');
const CopyWebpackPlugin = require('copy-webpack-plugin'); const CopyWebpackPlugin = require('copy-webpack-plugin');
const ExtensionReloader = require('webpack-extension-reloader');
const { VueLoaderPlugin } = require('vue-loader'); const { VueLoaderPlugin } = require('vue-loader');
const { version, betaRev } = require('./package.json'); const { version, betaRev } = require('./package.json');
const fs = require('fs'); const fs = require('fs');
@@ -102,8 +101,7 @@ const config = {
const jsonContent = JSON.parse(content); const jsonContent = JSON.parse(content);
jsonContent.version = version; jsonContent.version = version;
if (config.mode === 'development') { if (config.mode === 'development') {
jsonContent.content_security_policy = "script-src 'self' 'unsafe-eval'; object-src 'self'";
jsonContent.permissions = jsonContent.permissions.concat(devConfig.permissions); jsonContent.permissions = jsonContent.permissions.concat(devConfig.permissions);
} }
@@ -118,6 +116,17 @@ const config = {
jsonContent.browser_specific_settings.gecko.id = geckoId.replace('@', '-beta@'); 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) { if (process.env.LITE) {
// Remove "All sites" permissions // Remove "All sites" permissions
const PERMISSIONS_TO_REMOVE = [ 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) { function transformHtml(content) {
return ejs.render(content.toString(), { return ejs.render(content.toString(), {
...process.env, ...process.env,
@@ -195,4 +195,10 @@ function transformHtml(content) {
}); });
} }
module.exports = config; if (config.mode === 'production') {
config.devtool="source-map";
} else {
config.devtool="cheap-source-map";
}
module.exports = config;