diff --git a/README.md b/README.md index b13c584..6b6fb05 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,7 @@ The Web eID extension for Safari is built as a [Safari web extension](https://de 1. Install the latest LTS version of Node.js - [https://nodejs.org](https://nodejs.org) 2. Clone the project - ```bash/ + ```bash git clone --recurse-submodules https://github.com/web-eid/web-eid-webextension.git ``` diff --git a/package-lock.json b/package-lock.json index bf75937..82b774b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -26,8 +26,16 @@ "rollup-plugin-license": "^2.6.0", "rollup-plugin-polyfill": "^3.0.0", "ts-jest": "^27.1.1", - "typescript": "^4.5.2", - "webextension-polyfill": "^0.8.0" + "typescript": "^4.5.2" + } + }, + "node_modules/@aashutoshrathi/word-wrap": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", + "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", + "dev": true, + "engines": { + "node": ">=0.10.0" } }, "node_modules/@babel/code-frame": { @@ -82,9 +90,9 @@ } }, "node_modules/@babel/core/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, "bin": { "semver": "bin/semver.js" @@ -141,9 +149,9 @@ } }, "node_modules/@babel/helper-compilation-targets/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, "bin": { "semver": "bin/semver.js" @@ -1686,9 +1694,9 @@ } }, "node_modules/babel-plugin-istanbul/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, "bin": { "semver": "bin/semver.js" @@ -3332,9 +3340,9 @@ } }, "node_modules/istanbul-lib-instrument/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, "bin": { "semver": "bin/semver.js" @@ -4281,9 +4289,9 @@ } }, "node_modules/make-dir/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, "bin": { "semver": "bin/semver.js" @@ -4471,17 +4479,17 @@ } }, "node_modules/optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", + "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", "dev": true, "dependencies": { + "@aashutoshrathi/word-wrap": "^1.2.3", "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", "levn": "^0.4.1", "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" + "type-check": "^0.4.0" }, "engines": { "node": ">= 0.8.0" @@ -5040,9 +5048,9 @@ } }, "node_modules/semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dev": true, "dependencies": { "lru-cache": "^6.0.0" @@ -5659,12 +5667,6 @@ "makeerror": "1.0.12" } }, - "node_modules/webextension-polyfill": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/webextension-polyfill/-/webextension-polyfill-0.8.0.tgz", - "integrity": "sha512-a19+DzlT6Kp9/UI+mF9XQopeZ+n2ussjhxHJ4/pmIGge9ijCDz7Gn93mNnjpZAk95T4Tae8iHZ6sSf869txqiQ==", - "dev": true - }, "node_modules/webidl-conversions": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", @@ -5719,9 +5721,9 @@ } }, "node_modules/word-wrap": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.4.tgz", - "integrity": "sha512-2V81OA4ugVo5pRo46hAoD2ivUJx8jXmWXfUkY4KFNw0hEptvN0QfH3K4nHiwzGeKl5rFKedV48QVoqYavy4YpA==", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", "dev": true, "engines": { "node": ">=0.10.0" @@ -5853,6 +5855,12 @@ } }, "dependencies": { + "@aashutoshrathi/word-wrap": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", + "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", + "dev": true + }, "@babel/code-frame": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.0.tgz", @@ -5892,9 +5900,9 @@ }, "dependencies": { "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true }, "source-map": { @@ -5937,9 +5945,9 @@ }, "dependencies": { "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true } } @@ -7125,9 +7133,9 @@ } }, "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true } } @@ -8350,9 +8358,9 @@ }, "dependencies": { "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true } } @@ -9102,9 +9110,9 @@ }, "dependencies": { "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true } } @@ -9252,17 +9260,17 @@ } }, "optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", + "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", "dev": true, "requires": { + "@aashutoshrathi/word-wrap": "^1.2.3", "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", "levn": "^0.4.1", "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" + "type-check": "^0.4.0" } }, "p-limit": { @@ -9662,9 +9670,9 @@ } }, "semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dev": true, "requires": { "lru-cache": "^6.0.0" @@ -10141,12 +10149,6 @@ "makeerror": "1.0.12" } }, - "webextension-polyfill": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/webextension-polyfill/-/webextension-polyfill-0.8.0.tgz", - "integrity": "sha512-a19+DzlT6Kp9/UI+mF9XQopeZ+n2ussjhxHJ4/pmIGge9ijCDz7Gn93mNnjpZAk95T4Tae8iHZ6sSf869txqiQ==", - "dev": true - }, "webidl-conversions": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", @@ -10189,9 +10191,9 @@ } }, "word-wrap": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.4.tgz", - "integrity": "sha512-2V81OA4ugVo5pRo46hAoD2ivUJx8jXmWXfUkY4KFNw0hEptvN0QfH3K4nHiwzGeKl5rFKedV48QVoqYavy4YpA==", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", "dev": true }, "wrap-ansi": { diff --git a/package.json b/package.json index a229383..c05c569 100644 --- a/package.json +++ b/package.json @@ -36,8 +36,7 @@ "rollup-plugin-license": "^2.6.0", "rollup-plugin-polyfill": "^3.0.0", "ts-jest": "^27.1.1", - "typescript": "^4.5.2", - "webextension-polyfill": "^0.8.0" + "typescript": "^4.5.2" }, "dependencies": {} } diff --git a/rollup.config.js b/rollup.config.js index a38fd27..a891d3b 100644 --- a/rollup.config.js +++ b/rollup.config.js @@ -4,7 +4,6 @@ import alias from "@rollup/plugin-alias"; import cleanup from "rollup-plugin-cleanup"; import injectProcessEnv from "rollup-plugin-inject-process-env"; import license from "rollup-plugin-license"; -import polyfill from "rollup-plugin-polyfill"; import resolve from "@rollup/plugin-node-resolve"; const projectRootDir = path.resolve(__dirname); @@ -15,7 +14,42 @@ const libraryAlias = alias({ ], }); +const pluginsConf = [ + libraryAlias, + resolve({ rootDir: "./dist" }), + cleanup({ comments: ["jsdoc"] }), // Keep jsdoc comments + injectProcessEnv({ + DEBUG: process.env.DEBUG, + TOKEN_SIGNING_BACKWARDS_COMPATIBILITY: process.env.TOKEN_SIGNING_BACKWARDS_COMPATIBILITY, + }), + license({ + banner: { + content: { + // eslint-disable-next-line no-undef + file: path.join(__dirname, "LICENSE"), + encoding: "utf-8", + }, + }, + }), +]; + export default [ + ...["content", "background"].map((name) => ({ + input: `./dist/chrome/${name}/${name}.js`, + + output: [ + { + file: `dist/chrome/${name}.js`, + format: "iife", + sourcemap: name === "background", + }, + ], + + plugins: pluginsConf, + + context: "window", + })), + ...["content", "background"].map((name) => ({ input: `./dist/firefox/${name}/${name}.js`, @@ -27,25 +61,7 @@ export default [ }, ], - plugins: [ - libraryAlias, - resolve({ rootDir: "./dist" }), - polyfill(["webextension-polyfill"]), - cleanup({ comments: ["jsdoc"] }), // Keep jsdoc comments - injectProcessEnv({ - DEBUG: process.env.DEBUG, - TOKEN_SIGNING_BACKWARDS_COMPATIBILITY: process.env.TOKEN_SIGNING_BACKWARDS_COMPATIBILITY, - }), - license({ - banner: { - content: { - // eslint-disable-next-line no-undef - file: path.join(__dirname, "LICENSE"), - encoding: "utf-8", - }, - }, - }), - ], + plugins: pluginsConf, context: "window", })), @@ -61,24 +77,7 @@ export default [ }, ], - plugins: [ - libraryAlias, - resolve({ rootDir: "./dist" }), - cleanup({ comments: ["jsdoc"] }), - injectProcessEnv({ - DEBUG: process.env.DEBUG, - TOKEN_SIGNING_BACKWARDS_COMPATIBILITY: process.env.TOKEN_SIGNING_BACKWARDS_COMPATIBILITY, - }), - license({ - banner: { - content: { - // eslint-disable-next-line no-undef - file: path.join(__dirname, "LICENSE"), - encoding: "utf-8", - }, - }, - }), - ], + plugins: pluginsConf, context: "window", })), @@ -87,26 +86,17 @@ export default [ input: "./dist/firefox/resources/token-signing-page-script.js", output: [ + { + file: "dist/chrome/token-signing-page-script.js", + format: "iife", + }, { file: "dist/firefox/token-signing-page-script.js", format: "iife", }, ], - plugins: [ - libraryAlias, - resolve({ rootDir: "./dist" }), - cleanup({ comments: ["jsdoc"] }), - license({ - banner: { - content: { - // eslint-disable-next-line no-undef - file: path.join(__dirname, "LICENSE"), - encoding: "utf-8", - }, - }, - }), - ], + plugins: pluginsConf, context: "window", }, diff --git a/scripts/build-utils.mjs b/scripts/build-utils.mjs index 1ffc243..2ac2fb4 100644 --- a/scripts/build-utils.mjs +++ b/scripts/build-utils.mjs @@ -37,7 +37,7 @@ export async function rm(globPattern) { export function exec(command, args = []) { console.log(`EXEC ${command}${args.length ? ' ' + args.join(" ") : ''}`); - + if (isWindows && command.toLowerCase() === "npx") { command += ".cmd"; } @@ -102,6 +102,24 @@ export function replace(filename, from, to) { }); } +export function appendToFile(targetFileName, sourceFileName) { + console.log(`APPEND ${sourceFileName} to ${targetFileName}`); + + return new Promise((resolve, reject) => { + try { + const targetFileData = fs.readFileSync(path.resolve(targetFileName), 'utf8'); + const sourceFileData = fs.readFileSync(path.resolve(sourceFileName), 'utf8'); + const result = targetFileData + sourceFileData; + + fs.writeFileSync(targetFileName, result); + + resolve(); + } catch (error) { + reject(error); + } + }); +} + export function findFiles(globPattern) { return new Promise((resolve, reject) => { glob(globPattern, (error, matches) => { diff --git a/scripts/build.mjs b/scripts/build.mjs index 4cbc233..f8a637e 100644 --- a/scripts/build.mjs +++ b/scripts/build.mjs @@ -4,6 +4,7 @@ import { exec, zip, replace, + appendToFile, rem, pkg, write, @@ -29,27 +30,31 @@ const targets = { async compile() { rem( - "Compiling TypeScript files to ES6 modules" + "Compiling TypeScript files to ES6 modules in dist/src" ); await exec("npx", ["tsc"]); }, async bundle() { rem( - "Creating ES6 module bundles with Rollup" + `Setting version to ${pkg.version}` ); - await exec("npx", ["rollup", "-c"]); - }, - - async build() { - await this.compile(); - await replace("./dist/src/config.js", "{{package.version}}", pkg.version); + rem( + "Preparing the Chrome dist directory for:", + "- Google Chrome", + "- Chromium", + "- Microsoft Edge", + "- Opera", + ); + await cp("./dist/src", "./dist/chrome"); + rem( "Preparing the Firefox dist directory" ); await cp("./dist/src", "./dist/firefox"); + await appendToFile("./dist/firefox/background/background.js", "./dist/firefox/background-firefox/consent.js"); rem( "Preparing the Safari dist directory" @@ -58,6 +63,15 @@ const targets = { await cp("./dist/safari/background-safari", "./dist/safari/background"); await rm("./dist/safari/background-safari"); + rem( + "Creating ES6 module bundles with Rollup in dist/{chrome,firefox,safari}" + ); + await exec("npx", ["rollup", "-c"]); + }, + + async build() { + await this.compile(); + await this.bundle(); rem( @@ -66,6 +80,8 @@ const targets = { ); await rm("./dist/lib"); await rm("./dist/src"); + await rm("./dist/chrome/*/"); + await rm("./dist/chrome/config.*"); await rm("./dist/firefox/*/"); await rm("./dist/firefox/config.*"); await rm("./dist/safari/*/"); @@ -75,30 +91,23 @@ const targets = { "Setting up SOURCE_DATE_EPOCH for reproducible builds" ); sourceDateEpoch = await getSourceDateEpoch(); + await write("./dist/chrome/SOURCE_DATE_EPOCH", sourceDateEpoch.epoch); await write("./dist/firefox/SOURCE_DATE_EPOCH", sourceDateEpoch.epoch); rem( "Copying icons" ); + await cp("./static/icons", "./dist/chrome/icons"); await cp("./static/icons", "./dist/firefox/icons"); await cp("./static/icons", "./dist/safari"); rem( - "Copying static pages" + "Copying static consent pages to Firefox dist directory" ); await cp("./static/_locales", "./dist/firefox/_locales"); await cp("./static/views", "./dist/firefox/views"); await cp("./node_modules/bootstrap/dist/css/bootstrap.min.css", "./dist/firefox/views/bootstrap.min.css"); - rem( - "Preparing the Chrome dist directory for:", - "- Google Chrome", - "- Chromium", - "- Microsoft Edge", - "- Opera", - ); - await cp("./dist/firefox", "./dist/chrome"); - rem( "Setting up the Firefox manifest" ); diff --git a/src/background-firefox/consent.ts b/src/background-firefox/consent.ts new file mode 100644 index 0000000..88d25fa --- /dev/null +++ b/src/background-firefox/consent.ts @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2020-2023 Estonian Information System Authority + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +// Asking consent after installation is currently only required in Firefox. +async function showConsent() { + const url = browser.runtime.getURL("views/installed.html"); + return await browser.tabs.create({ url, active: true }); +} + +browser.runtime.onInstalled.addListener(async ({ reason, temporary }) => { + if (temporary) return; + if (reason == "install") { + await showConsent(); + } +}); diff --git a/src/background/background.ts b/src/background/background.ts index 0dda0da..64e9340 100644 --- a/src/background/background.ts +++ b/src/background/background.ts @@ -32,11 +32,6 @@ import getSigningCertificate from "./actions/getSigningCertificate"; import sign from "./actions/sign"; import status from "./actions/status"; -async function showConsent() { - const url = browser.runtime.getURL("views/installed.html"); - return await browser.tabs.create({ url, active: true }); -} - async function onAction(message: ExtensionRequest, sender: MessageSender): Promise { switch (message.action) { case Action.AUTHENTICATE: @@ -108,13 +103,6 @@ async function onTokenSigningAction(message: TokenSigningMessage, sender: Messag } } -browser.runtime.onInstalled.addListener(async ({ reason, temporary }) => { - if (temporary) return; - if (reason == "install") { - await showConsent(); - } -}); - browser.runtime.onMessage.addListener((message, sender, sendResponse) => { if ((message as ExtensionRequest).action) { onAction(message, sender).then(sendResponse);