From 4593afe6f1486a9cbd67efeee3d810fc210b576b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 28 Jun 2026 22:04:09 +0000 Subject: [PATCH 01/14] build(deps): bump the npm-deps group with 10 updates Bumps the npm-deps group with 10 updates: | Package | From | To | | --- | --- | --- | | [filesize](https://github.com/avoidwork/filesize.js) | `11.0.17` | `11.0.19` | | [eslint](https://github.com/eslint/eslint) | `10.5.0` | `10.6.0` | | [eslint-plugin-jsdoc](https://github.com/gajus/eslint-plugin-jsdoc) | `63.0.7` | `63.0.10` | | [mailparser](https://github.com/nodemailer/mailparser) | `3.9.11` | `3.9.12` | | [pdfjs-dist](https://github.com/mozilla/pdf.js) | `6.0.227` | `6.1.200` | | [prettier](https://github.com/prettier/prettier) | `3.8.4` | `3.9.1` | | [puppeteer](https://github.com/puppeteer/puppeteer) | `25.1.0` | `25.2.1` | | [stylelint](https://github.com/stylelint/stylelint) | `17.13.0` | `17.14.0` | | [typescript-eslint](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint) | `8.61.1` | `8.62.0` | | [webpack-cli](https://github.com/webpack/webpack-cli) | `7.0.3` | `7.1.0` | Updates `filesize` from 11.0.17 to 11.0.19 - [Changelog](https://github.com/avoidwork/filesize.js/blob/master/CHANGELOG.md) - [Commits](https://github.com/avoidwork/filesize.js/commits/11.0.19) Updates `eslint` from 10.5.0 to 10.6.0 - [Release notes](https://github.com/eslint/eslint/releases) - [Commits](https://github.com/eslint/eslint/compare/v10.5.0...v10.6.0) Updates `eslint-plugin-jsdoc` from 63.0.7 to 63.0.10 - [Release notes](https://github.com/gajus/eslint-plugin-jsdoc/releases) - [Commits](https://github.com/gajus/eslint-plugin-jsdoc/compare/v63.0.7...v63.0.10) Updates `mailparser` from 3.9.11 to 3.9.12 - [Release notes](https://github.com/nodemailer/mailparser/releases) - [Changelog](https://github.com/nodemailer/mailparser/blob/master/CHANGELOG.md) - [Commits](https://github.com/nodemailer/mailparser/compare/v3.9.11...v3.9.12) Updates `pdfjs-dist` from 6.0.227 to 6.1.200 - [Release notes](https://github.com/mozilla/pdf.js/releases) - [Commits](https://github.com/mozilla/pdf.js/compare/v6.0.227...v6.1.200) Updates `prettier` from 3.8.4 to 3.9.1 - [Release notes](https://github.com/prettier/prettier/releases) - [Changelog](https://github.com/prettier/prettier/blob/main/CHANGELOG.md) - [Commits](https://github.com/prettier/prettier/compare/3.8.4...3.9.1) Updates `puppeteer` from 25.1.0 to 25.2.1 - [Release notes](https://github.com/puppeteer/puppeteer/releases) - [Changelog](https://github.com/puppeteer/puppeteer/blob/main/CHANGELOG.md) - [Commits](https://github.com/puppeteer/puppeteer/compare/puppeteer-v25.1.0...puppeteer-v25.2.1) Updates `stylelint` from 17.13.0 to 17.14.0 - [Release notes](https://github.com/stylelint/stylelint/releases) - [Changelog](https://github.com/stylelint/stylelint/blob/main/CHANGELOG.md) - [Commits](https://github.com/stylelint/stylelint/compare/17.13.0...17.14.0) Updates `typescript-eslint` from 8.61.1 to 8.62.0 - [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases) - [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/typescript-eslint/CHANGELOG.md) - [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.62.0/packages/typescript-eslint) Updates `webpack-cli` from 7.0.3 to 7.1.0 - [Release notes](https://github.com/webpack/webpack-cli/releases) - [Changelog](https://github.com/webpack/webpack-cli/blob/main/CHANGELOG.md) - [Commits](https://github.com/webpack/webpack-cli/compare/webpack-cli@7.0.3...webpack-cli@7.1.0) --- updated-dependencies: - dependency-name: filesize dependency-version: 11.0.19 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: npm-deps - dependency-name: eslint dependency-version: 10.6.0 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: npm-deps - dependency-name: eslint-plugin-jsdoc dependency-version: 63.0.10 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: npm-deps - dependency-name: mailparser dependency-version: 3.9.12 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: npm-deps - dependency-name: pdfjs-dist dependency-version: 6.1.200 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: npm-deps - dependency-name: prettier dependency-version: 3.9.1 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: npm-deps - dependency-name: puppeteer dependency-version: 25.2.1 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: npm-deps - dependency-name: stylelint dependency-version: 17.14.0 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: npm-deps - dependency-name: typescript-eslint dependency-version: 8.62.0 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: npm-deps - dependency-name: webpack-cli dependency-version: 7.1.0 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: npm-deps ... Signed-off-by: dependabot[bot] --- package-lock.json | 392 ++++++++++++++++------------------------------ package.json | 20 +-- 2 files changed, 149 insertions(+), 263 deletions(-) diff --git a/package-lock.json b/package-lock.json index 1b3dbbf163c..0a344a6f597 100644 --- a/package-lock.json +++ b/package-lock.json @@ -16,7 +16,7 @@ "@zxcvbn-ts/language-en": "^4.1.1", "bootstrap": "^5.3.3", "dompurify": "3.4.11", - "filesize": "11.0.17", + "filesize": "11.0.19", "jquery": "^4.0.0", "linkify-html": "4.3.3", "linkifyjs": "4.3.3", @@ -38,9 +38,9 @@ "chai": "6.2.2", "chai-as-promised": "8.0.2", "cross-env": "^10.1.0", - "eslint": "10.5.0", + "eslint": "10.6.0", "eslint-config-prettier": "^10.1.8", - "eslint-plugin-jsdoc": "63.0.7", + "eslint-plugin-jsdoc": "63.0.10", "eslint-plugin-local-rules": "^3.0.2", "eslint-plugin-no-null": "^1.0.2", "eslint-plugin-no-only-tests": "3.4.0", @@ -50,21 +50,21 @@ "googleapis": "173.0.0", "husky": "^9.1.7", "lint-staged": "^17.0.8", - "mailparser": "3.9.11", + "mailparser": "3.9.12", "mkdirp": "3.0.1", "openpgp": "6.3.1", - "pdfjs-dist": "6.0.227", + "pdfjs-dist": "6.1.200", "postcss-html": "^1.8.1", - "prettier": "^3.8.4", - "puppeteer": "25.1.0", - "stylelint": "17.13.0", + "prettier": "^3.9.1", + "puppeteer": "25.2.1", + "stylelint": "17.14.0", "stylelint-config-standard": "40.0.0", "tap-xunit": "^2.4.1", "typescript": "6.0.3", - "typescript-eslint": "8.61.1", + "typescript-eslint": "8.62.0", "undici-types": "^8.5.0", "web-ext": "10.4.0", - "webpack-cli": "^7.0.3" + "webpack-cli": "^7.1.0" } }, "node_modules/@babel/code-frame": { @@ -1335,14 +1335,14 @@ } }, "node_modules/@puppeteer/browsers": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-3.0.4.tgz", - "integrity": "sha512-HGM8iAmGTf+Y7t0373szVbTmt3d7vPkYL/1bpOkOFO0YUYLgSeuYBCzESklogNPvOBnZ/MRD5f07OkpqH1trtA==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-3.0.5.tgz", + "integrity": "sha512-xYXNuEQmHNIPWWcbL/skf2KF7seyp7c1xmKFRk3wmdFx7VwBsKVrtOLKs8ecaezsKPsWeF1YsgwIiElAscaryA==", "dev": true, "license": "Apache-2.0", "dependencies": { "modern-tar": "^0.7.6", - "yargs": "^17.7.2" + "yargs": "^18.0.0" }, "bin": { "browsers": "lib/main-cli.js" @@ -1359,132 +1359,6 @@ } } }, - "node_modules/@puppeteer/browsers/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@puppeteer/browsers/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@puppeteer/browsers/node_modules/cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@puppeteer/browsers/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@puppeteer/browsers/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@puppeteer/browsers/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@puppeteer/browsers/node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/@puppeteer/browsers/node_modules/yargs": { - "version": "17.7.3", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.3.tgz", - "integrity": "sha512-GZtjxm/J/4TSxuL3FNYjCmLktBTnIw/rVmKSIyKeYAZpmJB2ig9VauCC5xsa82GNKVKDAqpOn3KVzNt0zmrU0g==", - "dev": true, - "license": "MIT", - "dependencies": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@puppeteer/browsers/node_modules/yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=12" - } - }, "node_modules/@rollup/pluginutils": { "version": "5.4.0", "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.4.0.tgz", @@ -1723,17 +1597,17 @@ "optional": true }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.61.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.61.1.tgz", - "integrity": "sha512-ZPlVl3PB3et/59Ne0fv/sci6ZXz4T4Hp4nTJ56i/Y0gR89ARb+KphojTq6j+56E5PIezmOIOOWyY+aWQFd+IkQ==", + "version": "8.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.62.0.tgz", + "integrity": "sha512-o+mpz7EYiMzXoySXiKmzlabIvTVqUuK5yLrAedRPRDA0IpPFMUV1IXt6OqljIxX/kumN6EjUYp41Hqelh6p/Dw==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.12.2", - "@typescript-eslint/scope-manager": "8.61.1", - "@typescript-eslint/type-utils": "8.61.1", - "@typescript-eslint/utils": "8.61.1", - "@typescript-eslint/visitor-keys": "8.61.1", + "@typescript-eslint/scope-manager": "8.62.0", + "@typescript-eslint/type-utils": "8.62.0", + "@typescript-eslint/utils": "8.62.0", + "@typescript-eslint/visitor-keys": "8.62.0", "ignore": "^7.0.5", "natural-compare": "^1.4.0", "ts-api-utils": "^2.5.0" @@ -1746,7 +1620,7 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^8.61.1", + "@typescript-eslint/parser": "^8.62.0", "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.1.0" } @@ -1762,16 +1636,16 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "8.61.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.61.1.tgz", - "integrity": "sha512-PJ5vePq5/ognBbrIcoC5+SHO5dfpeLPzP9FpLkzWrguoYQEeeSjlJpVwOpo1JRSTEi7dRcwNy4h4dzV70PqHcg==", + "version": "8.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.62.0.tgz", + "integrity": "sha512-dzHeT2gySzZtLDsuqxU9AkYgIsQoHAHtRBpOqM+Ofzx1Bwrd2RcCjQJ+6iQbsHOIR6NS33bF2W1k3blN1zLDrA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/scope-manager": "8.61.1", - "@typescript-eslint/types": "8.61.1", - "@typescript-eslint/typescript-estree": "8.61.1", - "@typescript-eslint/visitor-keys": "8.61.1", + "@typescript-eslint/scope-manager": "8.62.0", + "@typescript-eslint/types": "8.62.0", + "@typescript-eslint/typescript-estree": "8.62.0", + "@typescript-eslint/visitor-keys": "8.62.0", "debug": "^4.4.3" }, "engines": { @@ -1787,14 +1661,14 @@ } }, "node_modules/@typescript-eslint/project-service": { - "version": "8.61.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.61.1.tgz", - "integrity": "sha512-PrC4JYGmR241lYnfhmKGTXkFqv8+ymbTFgSAY0fVXpY82/QkMw5TZPl+vGzuDDU2QYJk9fIDOBTntF+yDv9LEA==", + "version": "8.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.62.0.tgz", + "integrity": "sha512-wexnCqiTg7BOGtbLDftYpRWlmLq4xfoMd7BKFR6Y75sZS3QmRKLdN3yWLhmIYgqMmP/OXWpj3H8odkb5nGURCQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/tsconfig-utils": "^8.61.1", - "@typescript-eslint/types": "^8.61.1", + "@typescript-eslint/tsconfig-utils": "^8.62.0", + "@typescript-eslint/types": "^8.62.0", "debug": "^4.4.3" }, "engines": { @@ -1809,14 +1683,14 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "8.61.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.61.1.tgz", - "integrity": "sha512-L2bdIeoQS8FlKAvONAr20w6OcLXeB+qiDKbAooS9A0Ben+iSIkBef0FxqwKWYqt5sa0i4KJtxVyVmhMylKzF5w==", + "version": "8.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.62.0.tgz", + "integrity": "sha512-1lX38kNxXIRb8mEc3lbq5mdHq1Pf2+U0nFU65KfT18mtPxxl0fvjuEE92mHuXPuCtElJhOrddOpyMlM3Z0umEA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.61.1", - "@typescript-eslint/visitor-keys": "8.61.1" + "@typescript-eslint/types": "8.62.0", + "@typescript-eslint/visitor-keys": "8.62.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -1827,9 +1701,9 @@ } }, "node_modules/@typescript-eslint/tsconfig-utils": { - "version": "8.61.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.61.1.tgz", - "integrity": "sha512-UN/H4di+OO7EWx2ovME+8t31YO+KVnK0RRKEHR3kOt21/Ay8BOq3M1OMvWs5vNiqcFCYGYoxK3MXPZzmMUE+yg==", + "version": "8.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.62.0.tgz", + "integrity": "sha512-y2GAdB6ykaXUvuspbYnizQc4oDDz0Tz/Yc7iWrXf9mx8vm/L/0vLHCe0tS2boG96Zy+DivnVDQ9ZUEWoHqqx1g==", "dev": true, "license": "MIT", "engines": { @@ -1844,15 +1718,15 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.61.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.61.1.tgz", - "integrity": "sha512-GYRicKmVK0C4fsKgaACaknOUAq9Oa2kwsjnpFhFcS/5p4Ht5IP9OVLbgIgcK4SRk92nVHFluurg1lumD9dBcLw==", + "version": "8.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.62.0.tgz", + "integrity": "sha512-+g5O3j0w2ldzC86Pv6fvbO/xhAonbJFIdf/MKQ1d30gndlsVzUOE83ldfSE15Qrl9fhFjK6AovHs5Wpp6vx86w==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.61.1", - "@typescript-eslint/typescript-estree": "8.61.1", - "@typescript-eslint/utils": "8.61.1", + "@typescript-eslint/types": "8.62.0", + "@typescript-eslint/typescript-estree": "8.62.0", + "@typescript-eslint/utils": "8.62.0", "debug": "^4.4.3", "ts-api-utils": "^2.5.0" }, @@ -1869,9 +1743,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "8.61.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.61.1.tgz", - "integrity": "sha512-G+CRlPqLv7Bz1IZVs03x5K59F1veqL0EJUROAdGhKsEq8qOiRiZbI+HUojPq5l0fEGOKModD9br6lObhB8zkoA==", + "version": "8.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.62.0.tgz", + "integrity": "sha512-KvAclkktORPvM54TgLgA4z9HIV1M8zOgw9ZVNXl9f/8dLYfXYX1wkMXP7qmabpijQRV5bHJLOmoyGQbLMaUYeg==", "dev": true, "license": "MIT", "engines": { @@ -1883,16 +1757,16 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.61.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.61.1.tgz", - "integrity": "sha512-u+oQD3BqYWPc8YV9Zab4vaJElJuwOLPRc10Jm1o/qS+6Qwen14HCWwx0Seo4LnSn2wxea2Ik8DxPt2/FHmuhrg==", + "version": "8.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.62.0.tgz", + "integrity": "sha512-+hVbNxtW64pIcZWDPGbyaKF7vp2IBTVY5ma1blwwksrjdsbdqqEKvJWMGbBofei4F6Dovx1M0RJgoFeNu2279A==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/project-service": "8.61.1", - "@typescript-eslint/tsconfig-utils": "8.61.1", - "@typescript-eslint/types": "8.61.1", - "@typescript-eslint/visitor-keys": "8.61.1", + "@typescript-eslint/project-service": "8.62.0", + "@typescript-eslint/tsconfig-utils": "8.62.0", + "@typescript-eslint/types": "8.62.0", + "@typescript-eslint/visitor-keys": "8.62.0", "debug": "^4.4.3", "minimatch": "^10.2.2", "semver": "^7.7.3", @@ -1911,16 +1785,16 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "8.61.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.61.1.tgz", - "integrity": "sha512-1+P/3Dj6jvtybE1q0HQ6yBt/gq+oKJyLdEv4HdnqasaEXRSYCAsD59mXEVQnM/ULNdQxbX77tdG4jPRjIS6knA==", + "version": "8.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.62.0.tgz", + "integrity": "sha512-82r66fi9zYwZ+mTq3vKgwjbZ1PVk/DJzrXFLpG6RnBbdvH8TEGVHIs9H4d2drhkOzf0syZuD/OZvvlu6GDbP4g==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.9.1", - "@typescript-eslint/scope-manager": "8.61.1", - "@typescript-eslint/types": "8.61.1", - "@typescript-eslint/typescript-estree": "8.61.1" + "@typescript-eslint/scope-manager": "8.62.0", + "@typescript-eslint/types": "8.62.0", + "@typescript-eslint/typescript-estree": "8.62.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -1935,13 +1809,13 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.61.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.61.1.tgz", - "integrity": "sha512-6fJ9MHWtK14C1DSkiMlHUSOmrVebL7150xZJBlJiL62jjhIA4JmOq6flwBgDxIdBKKdoiZRel+dfPD5MLfny3w==", + "version": "8.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.62.0.tgz", + "integrity": "sha512-CY3uyFSRbcQv3nnSv8S0+lDftMVz6P963PoRlxrV7ew/Md564g9ut60PYzdLM5qW4jFn93GBF+Soi90ISAN+GQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.61.1", + "@typescript-eslint/types": "8.62.0", "eslint-visitor-keys": "^5.0.0" }, "engines": { @@ -2172,14 +2046,14 @@ "peer": true }, "node_modules/@zone-eu/mailsplit": { - "version": "5.4.12", - "resolved": "https://registry.npmjs.org/@zone-eu/mailsplit/-/mailsplit-5.4.12.tgz", - "integrity": "sha512-w7Gy+NvjZ0MiXm8F6zfjImAqcTONKDImgWVBjDKQVFUXWuz3VFM5levNArkL2M877ajql5+bkS2pDV56injlmg==", + "version": "5.4.13", + "resolved": "https://registry.npmjs.org/@zone-eu/mailsplit/-/mailsplit-5.4.13.tgz", + "integrity": "sha512-j40NeNlSAivqnKEjzZYsGP/bKWr2zwuyb8XOYsC3i0ZlfM5UnTYTa7aCRkE8rYQvVzE1dRjVYdvZ1Epi6x+h6w==", "dev": true, "license": "(MIT OR EUPL-1.1+)", "dependencies": { "libbase64": "1.3.0", - "libmime": "5.3.8", + "libmime": "5.4.0", "libqp": "2.1.1" } }, @@ -4403,9 +4277,9 @@ } }, "node_modules/devtools-protocol": { - "version": "0.0.1624250", - "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1624250.tgz", - "integrity": "sha512-YFAat/lOiIk0ARmBweG+ygrEcbZrq5B9urRyUoeQKp53MlidHXE2TmTbxKcaXoQj7u/aX+jebDO4BW55rs0WwA==", + "version": "0.0.1638949", + "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1638949.tgz", + "integrity": "sha512-mXwg4Fqnv0WR4iuAT/gYUmctNkjILwXFHyZ+m7Ty1dfr0ezZt2U3gnrrJTfRobJTHoXf+IbuFvFITzLrLFjwJA==", "dev": true, "license": "BSD-3-Clause" }, @@ -4756,9 +4630,9 @@ } }, "node_modules/eslint": { - "version": "10.5.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-10.5.0.tgz", - "integrity": "sha512-1y+7C+vi12bUK1IpZeaV3gsH9fHLBmPvYmPx42pvT/E9yG0IC8g3PUZZgp0+JLJl7ZDK0flc2gc+Aw9dpCvIsQ==", + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-10.6.0.tgz", + "integrity": "sha512-6lVbcqSodALYo+4ELD0heG6lFiFxnLMuLkiMi2qV8LMp54N8tE8FT1GMH+ev4Ti00nFjNze2+Su6DsV5OQW3Dg==", "dev": true, "license": "MIT", "workspaces": [ @@ -4831,9 +4705,9 @@ } }, "node_modules/eslint-plugin-jsdoc": { - "version": "63.0.7", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-63.0.7.tgz", - "integrity": "sha512-pxrqGO733F7xmVYB5vQOiciiT9uddxqehawnbPjZmW2YaJR6fT5cP3UQd2BNoE85ATspCMtNL8w/a5WDGX3Qwg==", + "version": "63.0.10", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-63.0.10.tgz", + "integrity": "sha512-A9UIWsCquaKnit7rasXxYf12hhGIdDRjv65/RUE3AxbT6rdKBvr3MjH37g3gP+g4ipQMXuMn9slFKjO+vqNfkg==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -5238,9 +5112,9 @@ "license": "MIT" }, "node_modules/filesize": { - "version": "11.0.17", - "resolved": "https://registry.npmjs.org/filesize/-/filesize-11.0.17.tgz", - "integrity": "sha512-oHLTvMLw6imZUl1se/RBQrFlyy50nXce4sU7yGR6Qc0JgCwqnfiFsAnEwotdGmfKLD7SArGUk2/5STU0k8LOBQ==", + "version": "11.0.19", + "resolved": "https://registry.npmjs.org/filesize/-/filesize-11.0.19.tgz", + "integrity": "sha512-9Q2itINBvCHwFw9v5X7czZm855yAiFIYlnugrh7+8tYO4ITHZMzV91m35q2FngL9hoZwwjSTQACFF/W52OzJZQ==", "license": "BSD-3-Clause", "engines": { "node": ">= 10.8.0" @@ -6844,9 +6718,9 @@ "license": "MIT" }, "node_modules/libmime": { - "version": "5.3.8", - "resolved": "https://registry.npmjs.org/libmime/-/libmime-5.3.8.tgz", - "integrity": "sha512-ZrCY+Q66mPvasAfjsQ/IgahzoBvfE1VdtGRpo1hwRB1oK3wJKxhKA3GOcd2a6j7AH5eMFccxK9fBoCpRZTf8ng==", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/libmime/-/libmime-5.4.0.tgz", + "integrity": "sha512-MAWyU2qYtCsrZ6GClgukz2jx73NQrzA6ASo9qzThuTG+A7+H3lWQuBsjoy9lls+v6q/epAeBdEMJ3T0f4b+uRw==", "dev": true, "license": "MIT", "dependencies": { @@ -7237,18 +7111,18 @@ } }, "node_modules/mailparser": { - "version": "3.9.11", - "resolved": "https://registry.npmjs.org/mailparser/-/mailparser-3.9.11.tgz", - "integrity": "sha512-N1LPZwp1yVblJQukv5NAedlkHeA+PmZYdPCfk0Uwohn8JFOM8fYoUGF978qwlQcd3AlUleuzK0fu/EFAHPM9tg==", + "version": "3.9.12", + "resolved": "https://registry.npmjs.org/mailparser/-/mailparser-3.9.12.tgz", + "integrity": "sha512-kbT4xtkKEddonhDTjjWWVFJlI5axm0S9QuIAHs1ue3IEw+fNd9o4ytPKaG7p1LOE2aKifrWLjx/omOGLHz/9RQ==", "dev": true, "license": "MIT", "dependencies": { - "@zone-eu/mailsplit": "5.4.12", + "@zone-eu/mailsplit": "5.4.13", "encoding-japanese": "2.2.0", "he": "1.2.0", "html-to-text": "10.0.0", "iconv-lite": "0.7.2", - "libmime": "5.3.8", + "libmime": "5.4.0", "linkify-it": "5.0.1", "nodemailer": "9.0.1", "punycode.js": "2.3.1", @@ -8143,9 +8017,9 @@ } }, "node_modules/pdfjs-dist": { - "version": "6.0.227", - "resolved": "https://registry.npmjs.org/pdfjs-dist/-/pdfjs-dist-6.0.227.tgz", - "integrity": "sha512-/P6M4SXw+70waMVLUM7rdRtvo+dEzqE1t6W/zQNvBETo2MaRa5rrvCcAYdfWGiUzadTgM0lJmRApUrW0d9zgKg==", + "version": "6.1.200", + "resolved": "https://registry.npmjs.org/pdfjs-dist/-/pdfjs-dist-6.1.200.tgz", + "integrity": "sha512-o8MolyzirkkLrcdsae/HEOiIcXWI7DS5zGpvqW8xTC2YUsW30rltFw2bDGvw/fskUdEMrQm2br68jzDS5BH2vw==", "dev": true, "license": "Apache-2.0", "engines": { @@ -8444,9 +8318,9 @@ } }, "node_modules/prettier": { - "version": "3.8.4", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.8.4.tgz", - "integrity": "sha512-N2MylSdi48+5N/6S5j+maeHbUSIzzZ5uOcX5Hm4QpV8Dkb1HFjfAKTKX6yNPJQD9AhcT3ifHNB66tWTTJDi11Q==", + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.9.1.tgz", + "integrity": "sha512-ppiDo2CSwexck1eyZUwJHg/N3nf1+6IRCv7W/VJ5vaLnVCmB7+3CdRfMwoCHBBX6xTrREDTksZ4OZl5SSf4zXA==", "dev": true, "license": "MIT", "bin": { @@ -8556,18 +8430,18 @@ } }, "node_modules/puppeteer": { - "version": "25.1.0", - "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-25.1.0.tgz", - "integrity": "sha512-7L6/0JM7XStK99lIL4xQySyNEXNfII6pk0BxkI5kKBTOhR7AsoQiv067YTsE/rIXxQiq9ajlO4WcqBjS/FWK1A==", + "version": "25.2.1", + "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-25.2.1.tgz", + "integrity": "sha512-2D5RMkQH9FRhDU57a1/jV9xWoxqZvUjaZOYjAAPdRCEY8A01V5sxzyGOMs8XiKU9fPF91SOSwNYpHRu5SD958g==", "dev": true, "hasInstallScript": true, "license": "Apache-2.0", "dependencies": { - "@puppeteer/browsers": "3.0.4", + "@puppeteer/browsers": "3.0.5", "chromium-bidi": "16.0.1", - "devtools-protocol": "0.0.1624250", + "devtools-protocol": "0.0.1638949", "lilconfig": "^3.1.3", - "puppeteer-core": "25.1.0", + "puppeteer-core": "25.2.1", "typed-query-selector": "^2.12.2" }, "bin": { @@ -8578,15 +8452,15 @@ } }, "node_modules/puppeteer-core": { - "version": "25.1.0", - "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-25.1.0.tgz", - "integrity": "sha512-jKzy5y4WG6uNuFbTWgW1D7mqoT9o0nllc/6a1DGF775T1mPmgw3scdFEtEq67yVFikavQmbYq6NLfbTfxHSlqQ==", + "version": "25.2.1", + "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-25.2.1.tgz", + "integrity": "sha512-MwEZ4FFGJ1ZLOmu/04eISxoEMKtCnHyJBRFfgpwPPSYNG6gT6Xw1laNziFSV7uwDcx3jK+ATYIo9SfOd8Uhc3w==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@puppeteer/browsers": "3.0.4", + "@puppeteer/browsers": "3.0.5", "chromium-bidi": "16.0.1", - "devtools-protocol": "0.0.1624250", + "devtools-protocol": "0.0.1638949", "typed-query-selector": "^2.12.2", "webdriver-bidi-protocol": "0.4.2", "ws": "^8.21.0" @@ -9660,9 +9534,9 @@ "license": "MIT" }, "node_modules/stylelint": { - "version": "17.13.0", - "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-17.13.0.tgz", - "integrity": "sha512-G1WYzMerp7ihOaIe9VJCHLt12MoAD2QLf1AFerYP37+BCRBUK5UCpq8e/mN+zCIaJPKQcaxhE4WlPmqdiOx/gw==", + "version": "17.14.0", + "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-17.14.0.tgz", + "integrity": "sha512-8xkHPpdqYryeIsOgfsYTmr6cIeC4nLYWk5S8BPxpodq8mIuepggkMljsHewWfuAjj/+qpRKou2QerhjMH3iasg==", "dev": true, "funding": [ { @@ -9678,13 +9552,13 @@ "dependencies": { "@csstools/css-calc": "^3.2.1", "@csstools/css-parser-algorithms": "^4.0.0", - "@csstools/css-syntax-patches-for-csstree": "^1.1.4", + "@csstools/css-syntax-patches-for-csstree": "^1.1.5", "@csstools/css-tokenizer": "^4.0.0", "@csstools/media-query-list-parser": "^5.0.0", "@csstools/selector-resolve-nested": "^4.0.0", "@csstools/selector-specificity": "^6.0.0", "colord": "^2.9.3", - "cosmiconfig": "^9.0.1", + "cosmiconfig": "^9.0.2", "css-functions-list": "^3.3.3", "css-tree": "^3.2.1", "debug": "^4.4.3", @@ -9704,7 +9578,7 @@ "picocolors": "^1.1.1", "postcss": "^8.5.15", "postcss-safe-parser": "^7.0.1", - "postcss-selector-parser": "^7.1.1", + "postcss-selector-parser": "^7.1.4", "postcss-value-parser": "^4.2.0", "string-width": "^8.2.1", "supports-hyperlinks": "^4.4.0", @@ -10435,16 +10309,16 @@ } }, "node_modules/typescript-eslint": { - "version": "8.61.1", - "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.61.1.tgz", - "integrity": "sha512-V7PayAfJokV3pEHgN7/v03D1SpujhRfQtYLbLIiBfDDncdg4PAiRBfoS4cnCANK4jmAPncczi59QO3afiXUlNw==", + "version": "8.62.0", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.62.0.tgz", + "integrity": "sha512-8QxXi+ZACKX0kaqO4gY8kn0RSD9gFfaHDWwjqtEN48aWCBkX4MJaufWN+c3BzlrXLOxfywDL8CaoqUwcRq4j4Q==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/eslint-plugin": "8.61.1", - "@typescript-eslint/parser": "8.61.1", - "@typescript-eslint/typescript-estree": "8.61.1", - "@typescript-eslint/utils": "8.61.1" + "@typescript-eslint/eslint-plugin": "8.62.0", + "@typescript-eslint/parser": "8.62.0", + "@typescript-eslint/typescript-estree": "8.62.0", + "@typescript-eslint/utils": "8.62.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -10906,17 +10780,17 @@ } }, "node_modules/webpack-cli": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-7.0.3.tgz", - "integrity": "sha512-2E2C6A1e2El7791zQgTH7LPIuwLjRliow9OHS/qlJc9pwhZlCoL/uiwqd/1WSlXT83wJfmfDbkcqHXuXoPJZ3g==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-7.1.0.tgz", + "integrity": "sha512-pSJ5p5PkXRD88sfCq5Wo+coc42QykwRu5Md0DyESj0rT6PPPA2wTNabpHPKgqH8EMkfTDo3IWx3iiNXMu8XDBQ==", "dev": true, "license": "MIT", "dependencies": { "@discoveryjs/json-ext": "^1.1.0", "commander": "^14.0.3", "cross-spawn": "^7.0.6", - "envinfo": "^7.14.0", - "import-local": "^3.0.2", + "envinfo": "^7.21.0", + "import-local": "^3.2.0", "interpret": "^3.1.1", "rechoir": "^0.8.0", "webpack-merge": "^6.0.1" @@ -10932,11 +10806,23 @@ "url": "https://opencollective.com/webpack" }, "peerDependencies": { + "js-yaml": "^4.0.0 || ^5.0.0", + "json5": "^2.2.3", + "toml": "^3.0.0 || ^4.0.0", "webpack": "^5.101.0", "webpack-bundle-analyzer": "^4.0.0 || ^5.0.0", "webpack-dev-server": "^5.0.0" }, "peerDependenciesMeta": { + "js-yaml": { + "optional": true + }, + "json5": { + "optional": true + }, + "toml": { + "optional": true + }, "webpack-bundle-analyzer": { "optional": true }, diff --git a/package.json b/package.json index 4ca19b3d29d..c1064b67c9e 100644 --- a/package.json +++ b/package.json @@ -19,9 +19,9 @@ "chai": "6.2.2", "chai-as-promised": "8.0.2", "cross-env": "^10.1.0", - "eslint": "10.5.0", + "eslint": "10.6.0", "eslint-config-prettier": "^10.1.8", - "eslint-plugin-jsdoc": "63.0.7", + "eslint-plugin-jsdoc": "63.0.10", "eslint-plugin-local-rules": "^3.0.2", "eslint-plugin-no-null": "^1.0.2", "eslint-plugin-no-only-tests": "3.4.0", @@ -31,21 +31,21 @@ "googleapis": "173.0.0", "husky": "^9.1.7", "lint-staged": "^17.0.8", - "mailparser": "3.9.11", + "mailparser": "3.9.12", "mkdirp": "3.0.1", "openpgp": "6.3.1", - "pdfjs-dist": "6.0.227", + "pdfjs-dist": "6.1.200", "postcss-html": "^1.8.1", - "prettier": "^3.8.4", - "puppeteer": "25.1.0", - "stylelint": "17.13.0", + "prettier": "^3.9.1", + "puppeteer": "25.2.1", + "stylelint": "17.14.0", "stylelint-config-standard": "40.0.0", "tap-xunit": "^2.4.1", "typescript": "6.0.3", - "typescript-eslint": "8.61.1", + "typescript-eslint": "8.62.0", "undici-types": "^8.5.0", "web-ext": "10.4.0", - "webpack-cli": "^7.0.3" + "webpack-cli": "^7.1.0" }, "dependencies": { "@flowcrypt/fine-uploader": "5.16.4", @@ -54,7 +54,7 @@ "@zxcvbn-ts/language-en": "^4.1.1", "bootstrap": "^5.3.3", "dompurify": "3.4.11", - "filesize": "11.0.17", + "filesize": "11.0.19", "jquery": "^4.0.0", "linkify-html": "4.3.3", "linkifyjs": "4.3.3", From 2faf2abfee1b5963477ec67fa60d4cf8b6488e23 Mon Sep 17 00:00:00 2001 From: Roma Sosnovsky Date: Mon, 29 Jun 2026 13:38:49 +0300 Subject: [PATCH 02/14] fix tests --- extension/chrome/settings/inbox/inbox.ts | 7 +- extension/js/common/inject.ts | 13 + .../generic/setup-webmail-content-script.ts | 7 +- package-lock.json | 396 +++++++++--------- 4 files changed, 220 insertions(+), 203 deletions(-) diff --git a/extension/chrome/settings/inbox/inbox.ts b/extension/chrome/settings/inbox/inbox.ts index 0a4af698973..4967323aad4 100644 --- a/extension/chrome/settings/inbox/inbox.ts +++ b/extension/chrome/settings/inbox/inbox.ts @@ -185,12 +185,7 @@ export class InboxView extends View { private addBrowserMsgListeners = () => { BrowserMsg.addListener('add_end_session_btn', () => this.injector.insertEndSessionBtn(this.acctEmail)); BrowserMsg.addListener('set_active_window', async ({ frameId }: Bm.ComposeWindow) => { - if ($(`.secure_compose_window.active[data-frame-id="${frameId}"]`).length) { - return; // already active - } - $(`.secure_compose_window`).removeClass('previous_active'); - $(`.secure_compose_window.active`).addClass('previous_active').removeClass('active'); - $(`.secure_compose_window[data-frame-id="${frameId}"]`).addClass('active'); + this.injector.setActiveComposeWindow(frameId); }); BrowserMsg.addListener('close_compose_window', async ({ frameId }: Bm.ComposeWindow) => { $(`.secure_compose_window[data-frame-id="${frameId}"]`).remove(); diff --git a/extension/js/common/inject.ts b/extension/js/common/inject.ts index fe6121b24d1..fda083817ef 100644 --- a/extension/js/common/inject.ts +++ b/extension/js/common/inject.ts @@ -68,8 +68,12 @@ export class Injector { const alreadyOpenedCount = this.S.now('secure_compose_window').length; if (alreadyOpenedCount < 3) { const composeWin = $(this.factory.embeddedCompose(draftId, openInFullScreen, thunderbirdMsgId, replyOption, replyMsgId)); + const frameId = composeWin.data('frame-id') as string; composeWin.attr('data-order', alreadyOpenedCount + 1); + composeWin.on('click focusin', () => this.setActiveComposeWindow(frameId)); + composeWin.find('iframe').on('focus', () => this.setActiveComposeWindow(frameId)); this.S.cached('body').append(composeWin); // xss-safe-factory + this.setActiveComposeWindow(frameId); return true; } else { Ui.toast('Only 3 FlowCrypt windows can be opened at a time', false, 3, 'top', 'error'); @@ -77,6 +81,15 @@ export class Injector { } }; + public setActiveComposeWindow = (frameId: string) => { + if ($(`.secure_compose_window.active[data-frame-id="${frameId}"]`).length) { + return; // already active + } + $(`.secure_compose_window`).removeClass('previous_active'); + $(`.secure_compose_window.active`).addClass('previous_active').removeClass('active'); + $(`.secure_compose_window[data-frame-id="${frameId}"]`).addClass('active'); + }; + public btns = () => { if (this.S.now('compose_button_container').length === 0) { // don't inject too early diff --git a/extension/js/content_scripts/webmail/generic/setup-webmail-content-script.ts b/extension/js/content_scripts/webmail/generic/setup-webmail-content-script.ts index a9ab961fff2..c7f8f8979d9 100644 --- a/extension/js/content_scripts/webmail/generic/setup-webmail-content-script.ts +++ b/extension/js/content_scripts/webmail/generic/setup-webmail-content-script.ts @@ -152,12 +152,7 @@ export const contentScriptSetupIfVacant = async (webmailSpecific: WebmailSpecifi ) => { BrowserMsg.addListener('set_active_window', async req => { const { frameId } = req as Bm.ComposeWindow; - if ($(`.secure_compose_window.active[data-frame-id="${frameId}"]`).length) { - return; // already active - } - $(`.secure_compose_window`).removeClass('previous_active'); - $(`.secure_compose_window.active`).addClass('previous_active').removeClass('active'); - $(`.secure_compose_window[data-frame-id="${frameId}"]`).addClass('active'); + inject.setActiveComposeWindow(frameId); }); BrowserMsg.addListener('close_compose_window', async req => { const { frameId } = req as Bm.ComposeWindow; diff --git a/package-lock.json b/package-lock.json index 0a344a6f597..3611598a7ff 100644 --- a/package-lock.json +++ b/package-lock.json @@ -110,13 +110,13 @@ } }, "node_modules/@cacheable/memory": { - "version": "2.0.9", - "resolved": "https://registry.npmjs.org/@cacheable/memory/-/memory-2.0.9.tgz", - "integrity": "sha512-HdMx6DoGywB30vacDbBsITbIX4pgFqj1zsrV58jZBUw3klzkNoXhj7qOqAgledhxG7YZI5rBSJg7Zp8/VG0DuA==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@cacheable/memory/-/memory-2.2.0.tgz", + "integrity": "sha512-CTLKqLItRCEixEAewD3/j9DB3/o96gpTPD4eJ1v+DGOlxZRZncRQkGYqqnAGCscYd6RNeXfGeiuCphsPtqyIfQ==", "dev": true, "license": "MIT", "dependencies": { - "@cacheable/utils": "^2.4.1", + "@cacheable/utils": "^2.5.0", "@keyv/bigmap": "^1.3.1", "hookified": "^1.15.1", "keyv": "^5.6.0" @@ -150,9 +150,9 @@ } }, "node_modules/@cacheable/utils": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@cacheable/utils/-/utils-2.4.1.tgz", - "integrity": "sha512-eiFgzCbIneyMlLOmNG4g9xzF7Hv3Mga4LjxjcSC/ues6VYq2+gUbQI8JqNuw/ZM8tJIeIaBGpswAsqV2V7ApgA==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@cacheable/utils/-/utils-2.5.0.tgz", + "integrity": "sha512-buipgOVDkkPXNR5+xBpDw7Zk2n1EvU7qBJCNUcL7rhQ//kfpOXPAvQ511Os0vpLYJ1pZnvudNytkQt2hst3wqA==", "dev": true, "license": "MIT", "dependencies": { @@ -218,9 +218,9 @@ } }, "node_modules/@csstools/css-syntax-patches-for-csstree": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/@csstools/css-syntax-patches-for-csstree/-/css-syntax-patches-for-csstree-1.1.5.tgz", - "integrity": "sha512-oNjBvzLq2GPZtJphCjLqXow/cHySHSgtxvKZb7OqSZ/xHgw6NWNhfad+6AB9cLeVm6eA9d/qMll3JdEHjy6M+A==", + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/@csstools/css-syntax-patches-for-csstree/-/css-syntax-patches-for-csstree-1.1.6.tgz", + "integrity": "sha512-TcJCWFbXLPpJYq6z7bfOyjWYJDiDg2/I4gyUC9pqPNqHFRIey0EB0q0L5cSnQDfWJg8Jd6VadakxdIez/3zkqQ==", "dev": true, "funding": [ { @@ -924,9 +924,9 @@ "license": "CC0-1.0" }, "node_modules/@napi-rs/canvas": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@napi-rs/canvas/-/canvas-1.0.0.tgz", - "integrity": "sha512-Jqxcy1XOIqj+lH9sl1GT+il6GR3uQv13vI2mrwubP3uT8Olak2ClDrK2RnxlQKjwv8BRr4b3ug0YR7c6hBX8wg==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas/-/canvas-1.0.1.tgz", + "integrity": "sha512-mPD43G7pXbQhIGa7z4IpT/vXm1jbF8cBM1oY5UqjL8LSaTCNGhNi2Lidc/0+LwKbNiqbv/Tq0JlBRwKu+LW3iw==", "dev": true, "license": "MIT", "optional": true, @@ -941,23 +941,23 @@ "url": "https://github.com/sponsors/Brooooooklyn" }, "optionalDependencies": { - "@napi-rs/canvas-android-arm64": "1.0.0", - "@napi-rs/canvas-darwin-arm64": "1.0.0", - "@napi-rs/canvas-darwin-x64": "1.0.0", - "@napi-rs/canvas-linux-arm-gnueabihf": "1.0.0", - "@napi-rs/canvas-linux-arm64-gnu": "1.0.0", - "@napi-rs/canvas-linux-arm64-musl": "1.0.0", - "@napi-rs/canvas-linux-riscv64-gnu": "1.0.0", - "@napi-rs/canvas-linux-x64-gnu": "1.0.0", - "@napi-rs/canvas-linux-x64-musl": "1.0.0", - "@napi-rs/canvas-win32-arm64-msvc": "1.0.0", - "@napi-rs/canvas-win32-x64-msvc": "1.0.0" + "@napi-rs/canvas-android-arm64": "1.0.1", + "@napi-rs/canvas-darwin-arm64": "1.0.1", + "@napi-rs/canvas-darwin-x64": "1.0.1", + "@napi-rs/canvas-linux-arm-gnueabihf": "1.0.1", + "@napi-rs/canvas-linux-arm64-gnu": "1.0.1", + "@napi-rs/canvas-linux-arm64-musl": "1.0.1", + "@napi-rs/canvas-linux-riscv64-gnu": "1.0.1", + "@napi-rs/canvas-linux-x64-gnu": "1.0.1", + "@napi-rs/canvas-linux-x64-musl": "1.0.1", + "@napi-rs/canvas-win32-arm64-msvc": "1.0.1", + "@napi-rs/canvas-win32-x64-msvc": "1.0.1" } }, "node_modules/@napi-rs/canvas-android-arm64": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@napi-rs/canvas-android-arm64/-/canvas-android-arm64-1.0.0.tgz", - "integrity": "sha512-3hNKJObUK7JsCF9aJlVCs1J0/KE/gGfZNeK8MO1ge6bB3aicr5walGme9t9No1f/oyk9GgvdAT/rjSdsx3gbIw==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-android-arm64/-/canvas-android-arm64-1.0.1.tgz", + "integrity": "sha512-d7ZCwJsgH4QNG50C7HQeVRsRG1gRDa1UeDUb1jEcqgLuiEJp6GVbGiZkFXPlmt0dEs2QHRQCPJoOv+bOkSQR/w==", "cpu": [ "arm64" ], @@ -976,9 +976,9 @@ } }, "node_modules/@napi-rs/canvas-darwin-arm64": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@napi-rs/canvas-darwin-arm64/-/canvas-darwin-arm64-1.0.0.tgz", - "integrity": "sha512-ZIja19/BiGz2puhki+WUYSRriwFeFJ8Mi9eK3hZdSS85w4Y60cuEAJVhMCfKwswQkKkUtrnzdKMBuO7TupvexA==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-darwin-arm64/-/canvas-darwin-arm64-1.0.1.tgz", + "integrity": "sha512-ppyVSzIHsVldc3B++mdh03ed0Q0hoVR2QDG9O/wEUR0PurJKwDEEYV87uBQDpbSumJBfLEINDndsOPzQj71qEQ==", "cpu": [ "arm64" ], @@ -997,9 +997,9 @@ } }, "node_modules/@napi-rs/canvas-darwin-x64": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@napi-rs/canvas-darwin-x64/-/canvas-darwin-x64-1.0.0.tgz", - "integrity": "sha512-hImggWc82jqZVpEsFR9S7PE9OQYjq/H/D7vwCGB6X1jRH+UVBP1+1niJTPBOat1B154T6GKK7/kcFtoWgjgFzQ==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-darwin-x64/-/canvas-darwin-x64-1.0.1.tgz", + "integrity": "sha512-/BlXif9VOzf/WP32g9zxl612dO0KLvwqplBFqfRcyr3PyR5fhPrilTuJxSBq3zkwCKGKy82JsoPd2JeQI/HBlA==", "cpu": [ "x64" ], @@ -1018,9 +1018,9 @@ } }, "node_modules/@napi-rs/canvas-linux-arm-gnueabihf": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-arm-gnueabihf/-/canvas-linux-arm-gnueabihf-1.0.0.tgz", - "integrity": "sha512-hlJRy6d+kWLKVOG/+1rEvNQVURZ0DxxRPJsLmEWwhwiXZUJc0BF5o9esALHSEP4CoJK4wChRtj3hnyBgVx2oWA==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-arm-gnueabihf/-/canvas-linux-arm-gnueabihf-1.0.1.tgz", + "integrity": "sha512-JTGq93/Pje+iSNVjL+ggB0+pqEfu7nXvQGrHTvugz+Lp08wCDa5rjov4JeEljGDk16/inVBU9sp4N9f0/+o+9A==", "cpu": [ "arm" ], @@ -1039,9 +1039,9 @@ } }, "node_modules/@napi-rs/canvas-linux-arm64-gnu": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-arm64-gnu/-/canvas-linux-arm64-gnu-1.0.0.tgz", - "integrity": "sha512-5Hru4T3RXkosRQafcjelv7AUzw9mXqmGYsxnzeDDOWveFCJyEPMSJltvGCM+jfH98seOCbfwm9KyFg6Jm5FhAA==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-arm64-gnu/-/canvas-linux-arm64-gnu-1.0.1.tgz", + "integrity": "sha512-i74zqEh5yFmYwHkszFo+4EH4l5ATD4bSlJG21iW2j5kpqiN2b0WN9SG/xdq2O60MjZK0ZLSu3a/Z3aQAsmDQ5A==", "cpu": [ "arm64" ], @@ -1063,9 +1063,9 @@ } }, "node_modules/@napi-rs/canvas-linux-arm64-musl": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-arm64-musl/-/canvas-linux-arm64-musl-1.0.0.tgz", - "integrity": "sha512-LTUl9jS8WsLSUGaxQZKQkxfluOJRpgvBuxxdM4pYcjib+di8AU4OzQc6+L6SzGMLcKc9H0RAjojRatBhTMqYdg==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-arm64-musl/-/canvas-linux-arm64-musl-1.0.1.tgz", + "integrity": "sha512-COqBxybXcKb6gNgEhjh04rPHrpsJB+n/5+p4ySPgQWl0i+xVNYHn4rvzCtUBIFqOgY6HEJ9UaP6c4W9EMwzfpQ==", "cpu": [ "arm64" ], @@ -1087,9 +1087,9 @@ } }, "node_modules/@napi-rs/canvas-linux-riscv64-gnu": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-riscv64-gnu/-/canvas-linux-riscv64-gnu-1.0.0.tgz", - "integrity": "sha512-Iz931SAZf+WVDzpjk52Q3ffW3zw0YflFwEZMgs036Wfu1kX/LrwT9wGjsuSqyduqefUkl91/vTdAjn8hQu5ezA==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-riscv64-gnu/-/canvas-linux-riscv64-gnu-1.0.1.tgz", + "integrity": "sha512-1vdAZGpD85lMUo7K3qtEdoIWeMc0xcpUD5PagK3fVcMSdf8dkSL5bg/KE4Rwv5NF+PYx4plrgfn0KRMOqdKtwA==", "cpu": [ "riscv64" ], @@ -1111,9 +1111,9 @@ } }, "node_modules/@napi-rs/canvas-linux-x64-gnu": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-x64-gnu/-/canvas-linux-x64-gnu-1.0.0.tgz", - "integrity": "sha512-pFEQ5eFK4JusgN1K6KkO9DKP/Hi1WMJOkF8Ch03/khTc4bFbCKkCCsJG4YcOMOW9bI4XbT2/eMAWxhO0xaWgPA==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-x64-gnu/-/canvas-linux-x64-gnu-1.0.1.tgz", + "integrity": "sha512-W/iC2qJZGqKKQJ0JrNo3QkhoAy/PvzlmdYLW8Yz5/L6XgT5d7t26dnqgP2rCbL58P3CbPw7ES0Rz8OG0gn7JeQ==", "cpu": [ "x64" ], @@ -1135,9 +1135,9 @@ } }, "node_modules/@napi-rs/canvas-linux-x64-musl": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-x64-musl/-/canvas-linux-x64-musl-1.0.0.tgz", - "integrity": "sha512-jnvr8NrLHiZ3NCiOKWqDbkI4Ah+QDrqtZ+sddPZBltEb1mQ2coSvCSJYfict+oAwcm0c970oTmVySpjKP/lnaA==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-x64-musl/-/canvas-linux-x64-musl-1.0.1.tgz", + "integrity": "sha512-a5mmIVwxF92UGUe+1c7Ap32ZRnApbRMnQC/KgYyFB0AXZShBCHVGaURq+BDkiV7jvHhVwvvAP0Q/3aWNhqgVZg==", "cpu": [ "x64" ], @@ -1159,9 +1159,9 @@ } }, "node_modules/@napi-rs/canvas-win32-arm64-msvc": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@napi-rs/canvas-win32-arm64-msvc/-/canvas-win32-arm64-msvc-1.0.0.tgz", - "integrity": "sha512-y2j9/Gfd5joqiqxdP/L1smqjQ+uAx3C4N0EC7bDHrnZEEH8ToM/OC5p3uHvtj4Lq591aHj+ArL01UDLNwT5HgQ==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-win32-arm64-msvc/-/canvas-win32-arm64-msvc-1.0.1.tgz", + "integrity": "sha512-rVnDhVvcXlqcHMsgnxxhZgdRkRIqVBlx+FJwSAHi4VbWWwsowvV5ldFEecEHD2+Ac/IL3fNWF/LB5CZTghNwRA==", "cpu": [ "arm64" ], @@ -1180,9 +1180,9 @@ } }, "node_modules/@napi-rs/canvas-win32-x64-msvc": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@napi-rs/canvas-win32-x64-msvc/-/canvas-win32-x64-msvc-1.0.0.tgz", - "integrity": "sha512-qwdhh9N6Gge/hC4pL9S1tQp0iKwhSl/dYjg7+RGp9k26iRGRi5MqqUyKGOXIWli0zOcuy5Y2wIH/jk2ry6i/jA==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-win32-x64-msvc/-/canvas-win32-x64-msvc-1.0.1.tgz", + "integrity": "sha512-UMstkP/nZHbithgdSJv1EvYVrYhdao5B5N3szMVU2i5/b6ijMcVPXOEyrk0QXl0iPjv8Hkoow+Tap+MiOxppOQ==", "cpu": [ "x64" ], @@ -1566,9 +1566,9 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "26.0.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-26.0.0.tgz", - "integrity": "sha512-vf2YFi1iY9lHGwNJMs01biZFbKJkrZR1T6/MlzjhJLPdntOHLhTrDSnSVcdtvjihi4VQNlrFRIxLsDBlQpAipA==", + "version": "26.0.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-26.0.1.tgz", + "integrity": "sha512-fc3KiUoBt6kie0N9bIW3E47vZsuaMf0PM2AaUpLCLT0s/LvX1nxAim6Fc049cNxODPpGm6qRAuUOB86SkRuPQw==", "dev": true, "license": "MIT", "dependencies": { @@ -2679,9 +2679,9 @@ } }, "node_modules/adm-zip": { - "version": "0.5.17", - "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.5.17.tgz", - "integrity": "sha512-+Ut8d9LLqwEvHHJl1+PIHqoyDxFgVN847JTVM3Izi3xHDWPE4UtzzXysMZQs64DMcrJfBeS/uoEP4AD3HQHnQQ==", + "version": "0.5.18", + "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.5.18.tgz", + "integrity": "sha512-ufJnssQGbxzLNS1Ho9bCtX4rQKCCvoVuDLHoJyc3F9dOGDB4BkWs2Ci0kv53lqocAEQ/Cbi+I2XCsNYGqVYqng==", "dev": true, "license": "MIT", "engines": { @@ -3086,9 +3086,9 @@ "license": "MIT" }, "node_modules/baseline-browser-mapping": { - "version": "2.10.38", - "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.38.tgz", - "integrity": "sha512-31/02mVB4yuQU6adKk5SlY6m+mxDwUq5KZkyYgnLrrKl7TEm1+3PyDtDBz2kOv/wxZz41GHsvV1A/u6RmiyBvw==", + "version": "2.10.40", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.40.tgz", + "integrity": "sha512-BSSLZ9/Cjjv7Gtj5B68ZzXcXUg8iOf3fme+FCuh8rC/Go+Kmh8cox7M3A8dolou16s64QjLPOSdngh7GxXvkSw==", "dev": true, "license": "Apache-2.0", "peer": true, @@ -3239,9 +3239,9 @@ } }, "node_modules/brace-expansion": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.6.tgz", - "integrity": "sha512-kLpxurY4Z4r9sgMsyG0Z9uzsBlgiU/EFKhj/h91/8yHu0edo7XuixOIH3VcJ8kkxs6/jPzoI6U9Vj3WqbMQ94g==", + "version": "5.0.7", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.7.tgz", + "integrity": "sha512-7oFy703dxfY3/NLxC1fh2SUCQ0H9rmAY+5EpDVfXjUTTs+HEwR2nYaqLv+GWcTsumwxPfiz6CzCNkwXwBUwqCA==", "dev": true, "license": "MIT", "dependencies": { @@ -3340,14 +3340,14 @@ } }, "node_modules/cacheable": { - "version": "2.3.5", - "resolved": "https://registry.npmjs.org/cacheable/-/cacheable-2.3.5.tgz", - "integrity": "sha512-EQfaKe09tl615iNvq/TBRWTFf1AKJNXYQSsMx0Z3EI0nA+pVsVPS8wJhnRlkbdacKPh1d0qVIhwTc2zsQNFEEg==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/cacheable/-/cacheable-2.5.0.tgz", + "integrity": "sha512-60cyAOytib/OzBw1JNSoSV/boK1AtHryDIjvVBk7XbN4ugfkM3+Sry7fEjNgPMGgOjuaZPAp8ruZ0Cxafwyq9g==", "dev": true, "license": "MIT", "dependencies": { - "@cacheable/memory": "^2.0.8", - "@cacheable/utils": "^2.4.1", + "@cacheable/memory": "^2.2.0", + "@cacheable/utils": "^2.5.0", "hookified": "^1.15.0", "keyv": "^5.6.0", "qified": "^0.10.1" @@ -3662,9 +3662,9 @@ } }, "node_modules/cli-truncate": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-6.0.0.tgz", - "integrity": "sha512-3+YKIUFsohD9MIoOFPFBldjAlnfCmCDcqe6aYGFqlDTRKg80p4wg35L+j83QQ63iOlKRccEkbn8IuM++HsgEjA==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-6.1.0.tgz", + "integrity": "sha512-ofWtXdvPO1WepoE9Gn4dPdZw+ADud1Yz9K+xm9FjK5vvrs/D60vrlKIQeSw1wJX4cphW2bnWi8GZSKvf9T6shw==", "dev": true, "license": "MIT", "dependencies": { @@ -4420,9 +4420,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.5.376", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.376.tgz", - "integrity": "sha512-cUVA7/RvbFTEuw/i3obUwDTRIXojaxkResf+ibByPFxjc6XK3VNtcQXV0NSbAlJ0FMjcJGgftVVB4Qo184EXvA==", + "version": "1.5.381", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.381.tgz", + "integrity": "sha512-n9Wa6yB+vDsGuA8AKbl/0z7HbvWqt5jxIdvr1IUicd0ryPrk7/xzwqLv8D9AbbvZ6avVNtXYLTfmgFHkwkyelg==", "dev": true, "license": "ISC", "peer": true @@ -4472,9 +4472,9 @@ } }, "node_modules/enhanced-resolve": { - "version": "5.24.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.24.0.tgz", - "integrity": "sha512-SkE2t82KlkkxQRVMVLAGKxLfORGQfrkx5dkj+vlgXRVNEdPc4eZcR+J/Fvj8C+yKSFH5L0q3NFlyufOVQnCcYQ==", + "version": "5.24.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.24.1.tgz", + "integrity": "sha512-7DdUaTjmNwMcH2gLr1qycesKII3BK4RLy/mdAb7x10Lq7bR4aNKHt1BR1ZALSv0rPM/hF5wYF0PhGop/rJm8vw==", "dev": true, "license": "MIT", "peer": true, @@ -4566,9 +4566,9 @@ } }, "node_modules/es-module-lexer": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.1.0.tgz", - "integrity": "sha512-n27zTYMjYu1aj4MjCWzSP7G9r75utsaoc8m61weK+W8JMBGGQybd43GstCXZ3WNmSFtGT9wi59qQTW6mhTR5LQ==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.2.0.tgz", + "integrity": "sha512-3lGxdTXCLfe1MYfTz1y2ksAAUM4NAOP6rPEjxGJVKO7TZ5+tvHCaQWGpC4Y3IXvW3ece0Cz1cIP4FWBxOnGCTQ==", "dev": true, "license": "MIT", "peer": true @@ -5609,9 +5609,9 @@ "license": "MIT" }, "node_modules/google-auth-library": { - "version": "10.7.0", - "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-10.7.0.tgz", - "integrity": "sha512-QpTAbNJ36TliZLx3TTtahR8HG0hN9RllL1e3FymOvQSIKK8JmgV58H924ub2wa2DsS3ANjjP1Aw1N+Ramc8hqQ==", + "version": "10.9.0", + "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-10.9.0.tgz", + "integrity": "sha512-xtvUqvINPhTaBm7nXqlYPcrMHJPm1lCNdSovxnKKhTm+4JsvQ+KGVYJViLoH9Yxu8w+T0Qv5HubzYT9BLrppJg==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -6485,9 +6485,9 @@ "license": "MIT" }, "node_modules/js-yaml": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.2.0.tgz", - "integrity": "sha512-ePWsvanv0DWuDRsW8dnt+R4jQ31SCRCQ7hhNcPXZPsoBZiemuZNYGf7adZdqX2D86j6rvKp3RpCxVTSb8WQlOw==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.3.0.tgz", + "integrity": "sha512-1td788aAnnZ5qs7V2QIRl1owjtYpbKt749Y3xauqQgwIIGF/xXWz1wMTEBx5O3LK3lXLVuqXPdPxj2BoFHaW9Q==", "dev": true, "funding": [ { @@ -6856,9 +6856,9 @@ } }, "node_modules/listr2": { - "version": "10.2.1", - "resolved": "https://registry.npmjs.org/listr2/-/listr2-10.2.1.tgz", - "integrity": "sha512-7I5knELsJKTUjXG+A6BkKAiGkW1i25fNa/xlUl9hFtk15WbE9jndA89xu5FzQKrY5llajE1hfZZFMILXkDHk/Q==", + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-10.2.2.tgz", + "integrity": "sha512-JtNtbZj8q5BnDMR7trpwvwk3RIrANtIVzEUm8w7amp6xelLgyuq+4WZoTH913XaQAoH/cNdYhaNzBPA2U3xbDw==", "dev": true, "license": "MIT", "dependencies": { @@ -7354,6 +7354,68 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/minimizer-webpack-plugin": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/minimizer-webpack-plugin/-/minimizer-webpack-plugin-5.6.1.tgz", + "integrity": "sha512-DoeAZz8Q1C1znwsUzej1fdoi4jCf7/+Em27ouLqfK/+3m8G+D7yDhUwrc3CNhjSzGUN1kn7Iv4sWmjflQHenpw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.25", + "jest-worker": "^27.4.5", + "schema-utils": "^4.3.0", + "terser": "^5.31.1" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@minify-html/node": { + "optional": true + }, + "@swc/core": { + "optional": true + }, + "@swc/css": { + "optional": true + }, + "@swc/html": { + "optional": true + }, + "clean-css": { + "optional": true + }, + "cssnano": { + "optional": true + }, + "csso": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "html-minifier-terser": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "postcss": { + "optional": true + }, + "uglify-js": { + "optional": true + } + } + }, "node_modules/minipass": { "version": "7.1.3", "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz", @@ -7565,9 +7627,9 @@ } }, "node_modules/node-releases": { - "version": "2.0.48", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.48.tgz", - "integrity": "sha512-1uz8041X6LoI6ZSdZacM9lVY28vuzDlSKitnpbSNK0RfKoIJkX29NBPVEFXhnuSuEOA9Ww0xnPJ+ILWbGAv8DA==", + "version": "2.0.50", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.50.tgz", + "integrity": "sha512-J6l92tKHX6w8Jy5nO1Vuc01NoIiRGi/d6qBKVxh+IQ8Cr3b6HbVNfKiF8ZpFKufTwpwxMmce2W3iQZ861ZRyTg==", "dev": true, "license": "MIT", "peer": true, @@ -8192,9 +8254,9 @@ } }, "node_modules/postcss": { - "version": "8.5.15", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.15.tgz", - "integrity": "sha512-FfR8sjd4em2T6fb3I2MwAJU7HWVMr9zba+enmQeeWFfCbm+UOC/0X4DS8XtpUTMwWMGbjKYP7xjfNekzyGmB3A==", + "version": "8.5.16", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.16.tgz", + "integrity": "sha512-vuwillviilfKZsg0VGj5R/YwwcHx4SLsIOI/7K6mQkWx+l5cUHTjj5g0AasTBcyXsbfTgrwsUNmVUb5xVwyPwg==", "dev": true, "funding": [ { @@ -8490,13 +8552,14 @@ "license": "MIT" }, "node_modules/qs": { - "version": "6.15.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.2.tgz", - "integrity": "sha512-Rzq0KEyX/w/tEybncDgdkZrJgVUsUMk3xjh3t5bv3S1HTAtg+uOYt72+ZfwiQwKdysThkTBdL/rTi6HDmX9Ddw==", + "version": "6.15.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.3.tgz", + "integrity": "sha512-O9gl3zCl5h5blw1KGUzQKhA5oUXSl8rwUIM5o0S3nCXMliSvy5Dzx7/DJcI+SwgICv+IneSZwhBh1oSyEHA71A==", "dev": true, "license": "BSD-3-Clause", "dependencies": { - "side-channel": "^1.1.0" + "es-define-property": "^1.0.1", + "side-channel": "^1.1.1" }, "engines": { "node": ">=0.6" @@ -9643,23 +9706,23 @@ } }, "node_modules/stylelint/node_modules/file-entry-cache": { - "version": "11.1.3", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-11.1.3.tgz", - "integrity": "sha512-oMbq0PD6VIiIwMF6LIa7MEwd/l9huKwmqRKXqmrkqIZv8CvRbfowL+L0ryAl8h//HfAS0zS+4SbYoRyAoA6BJA==", + "version": "11.1.5", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-11.1.5.tgz", + "integrity": "sha512-+PFTHITI08JIGhnNpGNI8T8inUpgZfk3GNEqfT9R2zZV2iFXg3CvqzSl/uEhs7TSGujYRELEANyDvS8Fj7+S7Q==", "dev": true, "license": "MIT", "dependencies": { - "flat-cache": "^6.1.22" + "flat-cache": "^6.1.23" } }, "node_modules/stylelint/node_modules/flat-cache": { - "version": "6.1.22", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-6.1.22.tgz", - "integrity": "sha512-N2dnzVJIphnNsjHcrxGW7DePckJ6haPrSFqpsBUhHYgwtKGVq4JrBGielEGD2fCVnsGm1zlBVZ8wGhkyuetgug==", + "version": "6.1.23", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-6.1.23.tgz", + "integrity": "sha512-f++BY9pTk+983xK1FLzlLpmM0i0z+jHmx3QESGkURMXujQZz1k5wzwX6hjnQ8goaD0B+sYnDK1yZ6MTyZfUaqA==", "dev": true, "license": "MIT", "dependencies": { - "cacheable": "^2.3.4", + "cacheable": "^2.5.0", "flatted": "^3.4.2", "hookified": "^1.15.0" } @@ -9728,9 +9791,9 @@ } }, "node_modules/supertap/node_modules/js-yaml": { - "version": "3.14.2", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.2.tgz", - "integrity": "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==", + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.15.0.tgz", + "integrity": "sha512-ttBQIIQPDeLjpPOohtUdXuXUVoA2uIB6fEH9HyJ7234s5mBJ5wTx20njxplLZQgLaOfpmPQA7X2t5AX6tIPbog==", "dev": true, "license": "MIT", "dependencies": { @@ -9952,9 +10015,9 @@ } }, "node_modules/tap-parser/node_modules/js-yaml": { - "version": "3.14.2", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.2.tgz", - "integrity": "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==", + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.15.0.tgz", + "integrity": "sha512-ttBQIIQPDeLjpPOohtUdXuXUVoA2uIB6fEH9HyJ7234s5mBJ5wTx20njxplLZQgLaOfpmPQA7X2t5AX6tIPbog==", "dev": true, "license": "MIT", "dependencies": { @@ -10000,9 +10063,9 @@ } }, "node_modules/tar": { - "version": "7.5.16", - "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.16.tgz", - "integrity": "sha512-56adEpPMouktRlBLXiaYFFzZ/3+JXa8P9n7WbR+ibIjtviN55mEaOkiysCnPnWm+7kkui1Dn8J9l+g6zV8731w==", + "version": "7.5.19", + "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.19.tgz", + "integrity": "sha512-4LeEWl96twnS2Q7Bz4MGqgazLqO+hJN63GZxXoIqh1T3VweYD997gbU1ItNsQafqqXTXd5WFyFdReLtwvRBNiw==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { @@ -10046,68 +10109,6 @@ "node": ">=10" } }, - "node_modules/terser-webpack-plugin": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.6.1.tgz", - "integrity": "sha512-201R5j+sJpK8nFWwKVyNfZot8FaJbLZDq5evriVzbV1wDtSXDjRUDRfJzHpAaxFDMEhsZL1QkeqM61wgsS3KaQ==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.25", - "jest-worker": "^27.4.5", - "schema-utils": "^4.3.0", - "terser": "^5.31.1" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.1.0" - }, - "peerDependenciesMeta": { - "@minify-html/node": { - "optional": true - }, - "@swc/core": { - "optional": true - }, - "@swc/css": { - "optional": true - }, - "@swc/html": { - "optional": true - }, - "clean-css": { - "optional": true - }, - "cssnano": { - "optional": true - }, - "csso": { - "optional": true - }, - "esbuild": { - "optional": true - }, - "html-minifier-terser": { - "optional": true - }, - "lightningcss": { - "optional": true - }, - "postcss": { - "optional": true - }, - "uglify-js": { - "optional": true - } - } - }, "node_modules/terser/node_modules/commander": { "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", @@ -10732,9 +10733,9 @@ "license": "BSD-2-Clause" }, "node_modules/webpack": { - "version": "5.107.2", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.107.2.tgz", - "integrity": "sha512-v7RhXaJbpMlV0D7hC7lb2EbnxkoeUqf9qhKr6lozx3Q48pmFrqqNRmZFUEGmi7pSwm6fCQ2H1IjvCkHqdpVdjQ==", + "version": "5.108.1", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.108.1.tgz", + "integrity": "sha512-UUCihHQK3O7483Woa0SulNLDeAiOhHI2PN2PAPU4fVWJqbzhv04EJ8FaWtB9WWh3i8fRt28543U7VfuJTOrpgQ==", "dev": true, "license": "MIT", "peer": true, @@ -10748,19 +10749,18 @@ "acorn-import-phases": "^1.0.3", "browserslist": "^4.28.1", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.22.0", + "enhanced-resolve": "^5.22.2", "es-module-lexer": "^2.1.0", "eslint-scope": "5.1.1", "events": "^3.2.0", - "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.2.11", "loader-runner": "^4.3.2", "mime-db": "^1.54.0", + "minimizer-webpack-plugin": "^5.6.1", "neo-async": "^2.6.2", "schema-utils": "^4.3.3", "tapable": "^2.3.0", - "terser-webpack-plugin": "^5.5.0", - "watchpack": "^2.5.1", + "watchpack": "^2.5.2", "webpack-sources": "^3.5.0" }, "bin": { @@ -10893,6 +10893,20 @@ "node": ">=4.0" } }, + "node_modules/webpack/node_modules/watchpack": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.5.2.tgz", + "integrity": "sha512-6i/00NBjP4yGPs+caKSyRfpTF/8Torsu0MOW3mMzIbhgISFder8i7xbqgHlLMwJrdiN8ndBV3UA1/AfzPSr+jg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, "node_modules/well-known-symbols": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/well-known-symbols/-/well-known-symbols-2.0.0.tgz", From 4a55109dfffa875c283b91fe0e8f2b29ccfffa58 Mon Sep 17 00:00:00 2001 From: Roma Sosnovsky Date: Mon, 29 Jun 2026 14:18:46 +0300 Subject: [PATCH 03/14] test fix --- test/source/tests/compose.ts | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/test/source/tests/compose.ts b/test/source/tests/compose.ts index 86966be95ef..08fb5905263 100644 --- a/test/source/tests/compose.ts +++ b/test/source/tests/compose.ts @@ -109,10 +109,12 @@ export const defineComposeTests = (testVariant: TestVariant, testWithBrowser: Te testWithBrowser(async (t, browser) => { const primarySignature = 'Test primary signature'; const aliasSignature = 'Test alias signature'; - const acctAliases = [{ - ...flowcryptCompatibilityAliasList[0], - signature: aliasSignature, - }]; + const acctAliases = [ + { + ...flowcryptCompatibilityAliasList[0], + signature: aliasSignature, + }, + ]; await BrowserRecipe.setupCommonAcctWithAttester(t, browser, 'compatibility', { google: { acctAliases, acctPrimarySignature: primarySignature }, attester: { includeHumanKey: true }, @@ -1922,8 +1924,6 @@ export const defineComposeTests = (testVariant: TestVariant, testWithBrowser: Te }) ); - - test( 'compose - check existing draft not saved without changes', testWithBrowser(async (t, browser) => { @@ -2187,6 +2187,7 @@ export const defineComposeTests = (testVariant: TestVariant, testWithBrowser: Te const firstComposeFrame = await inboxPage.getFrame(['compose.htm', firstFrameId]); await inboxPage.waitAndFocus('iframe'); await firstComposeFrame.waitAndFocus('@input-body'); + await inboxPage.waitAll(['.secure_compose_window[data-order="1"].active', '.secure_compose_window[data-order="3"].previous_active']); // make sure the 1st compose window is active, and the 3rd is previous_active expect(await inboxPage.hasClass('.secure_compose_window[data-order="1"]', 'active')).to.be.true; expect(await inboxPage.hasClass('.secure_compose_window[data-order="2"]', 'active')).to.be.false; @@ -3511,8 +3512,9 @@ const sendTextAndVerifyPresentInSentMsg = async ( text: string, sendingOpt: { encrypt?: boolean; sign?: boolean; richtext?: boolean } = {} ) => { - const subject = `Test Sending ${sendingOpt.sign ? 'Signed' : ''} ${sendingOpt.encrypt ? 'Encrypted' : '' - } Message With Test Text ${text} ${Util.lousyRandom()}`; + const subject = `Test Sending ${sendingOpt.sign ? 'Signed' : ''} ${ + sendingOpt.encrypt ? 'Encrypted' : '' + } Message With Test Text ${text} ${Util.lousyRandom()}`; const composePage = await ComposePageRecipe.openStandalone(t, browser, 'compatibility'); await ComposePageRecipe.fillMsg(composePage, { to: 'human@flowcrypt.com' }, subject, text, sendingOpt); const acctEmail = 'flowcrypt.compatibility@gmail.com'; From c698cf64af01e921a9f7480de8a18f3768b573c8 Mon Sep 17 00:00:00 2001 From: Roma Sosnovsky Date: Tue, 30 Jun 2026 10:25:11 +0300 Subject: [PATCH 04/14] updates --- package-lock.json | 154 +++++++++++++++++++++++----------------------- package.json | 2 +- 2 files changed, 78 insertions(+), 78 deletions(-) diff --git a/package-lock.json b/package-lock.json index 3611598a7ff..f80a85180a2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -61,7 +61,7 @@ "stylelint-config-standard": "40.0.0", "tap-xunit": "^2.4.1", "typescript": "6.0.3", - "typescript-eslint": "8.62.0", + "typescript-eslint": "8.62.1", "undici-types": "^8.5.0", "web-ext": "10.4.0", "webpack-cli": "^7.1.0" @@ -1597,17 +1597,17 @@ "optional": true }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.62.0.tgz", - "integrity": "sha512-o+mpz7EYiMzXoySXiKmzlabIvTVqUuK5yLrAedRPRDA0IpPFMUV1IXt6OqljIxX/kumN6EjUYp41Hqelh6p/Dw==", + "version": "8.62.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.62.1.tgz", + "integrity": "sha512-4EQM77WgVNxj7OkL/5b/D/xZsw00G577+UriYTC7JF5opcF3T2AuoeY7ueLaZgSVjSgCS6yOAJB5bRGLPSJUzA==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.12.2", - "@typescript-eslint/scope-manager": "8.62.0", - "@typescript-eslint/type-utils": "8.62.0", - "@typescript-eslint/utils": "8.62.0", - "@typescript-eslint/visitor-keys": "8.62.0", + "@typescript-eslint/scope-manager": "8.62.1", + "@typescript-eslint/type-utils": "8.62.1", + "@typescript-eslint/utils": "8.62.1", + "@typescript-eslint/visitor-keys": "8.62.1", "ignore": "^7.0.5", "natural-compare": "^1.4.0", "ts-api-utils": "^2.5.0" @@ -1620,7 +1620,7 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^8.62.0", + "@typescript-eslint/parser": "^8.62.1", "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.1.0" } @@ -1636,16 +1636,16 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "8.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.62.0.tgz", - "integrity": "sha512-dzHeT2gySzZtLDsuqxU9AkYgIsQoHAHtRBpOqM+Ofzx1Bwrd2RcCjQJ+6iQbsHOIR6NS33bF2W1k3blN1zLDrA==", + "version": "8.62.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.62.1.tgz", + "integrity": "sha512-sPhE4iHuJDSvoAiec+Ro8JyXw8f0ql13HFR82P99nCm9GwTEKG0KYLvDe6REk8BCXuit6vJAv/Yxg5ABaNS2rA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/scope-manager": "8.62.0", - "@typescript-eslint/types": "8.62.0", - "@typescript-eslint/typescript-estree": "8.62.0", - "@typescript-eslint/visitor-keys": "8.62.0", + "@typescript-eslint/scope-manager": "8.62.1", + "@typescript-eslint/types": "8.62.1", + "@typescript-eslint/typescript-estree": "8.62.1", + "@typescript-eslint/visitor-keys": "8.62.1", "debug": "^4.4.3" }, "engines": { @@ -1661,14 +1661,14 @@ } }, "node_modules/@typescript-eslint/project-service": { - "version": "8.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.62.0.tgz", - "integrity": "sha512-wexnCqiTg7BOGtbLDftYpRWlmLq4xfoMd7BKFR6Y75sZS3QmRKLdN3yWLhmIYgqMmP/OXWpj3H8odkb5nGURCQ==", + "version": "8.62.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.62.1.tgz", + "integrity": "sha512-yQ3RgY5RkSBpsNS1Bx/JQEcA24FOSdfGktoyprAr5u18390UQdtVcfnEv4nIrIshNnavlVyZBKxQwT1fIAE6cg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/tsconfig-utils": "^8.62.0", - "@typescript-eslint/types": "^8.62.0", + "@typescript-eslint/tsconfig-utils": "^8.62.1", + "@typescript-eslint/types": "^8.62.1", "debug": "^4.4.3" }, "engines": { @@ -1683,14 +1683,14 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "8.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.62.0.tgz", - "integrity": "sha512-1lX38kNxXIRb8mEc3lbq5mdHq1Pf2+U0nFU65KfT18mtPxxl0fvjuEE92mHuXPuCtElJhOrddOpyMlM3Z0umEA==", + "version": "8.62.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.62.1.tgz", + "integrity": "sha512-r4d249KbQ1SFdpeStvob8Ih6aPPIzfqllPVOtvhve6ZcpuVcYo5/7zUWckKpHE7StASX4kTKZTLf0WQm/wPkcg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.62.0", - "@typescript-eslint/visitor-keys": "8.62.0" + "@typescript-eslint/types": "8.62.1", + "@typescript-eslint/visitor-keys": "8.62.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -1701,9 +1701,9 @@ } }, "node_modules/@typescript-eslint/tsconfig-utils": { - "version": "8.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.62.0.tgz", - "integrity": "sha512-y2GAdB6ykaXUvuspbYnizQc4oDDz0Tz/Yc7iWrXf9mx8vm/L/0vLHCe0tS2boG96Zy+DivnVDQ9ZUEWoHqqx1g==", + "version": "8.62.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.62.1.tgz", + "integrity": "sha512-xadytJqX9vJVQ2fdQjkcIVigwaOJNWkpjdLt6cEQ+xPnrI1fkp+/jZE/I97k9KUjqtpd25i0HeyZf3T6dutv2g==", "dev": true, "license": "MIT", "engines": { @@ -1718,15 +1718,15 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.62.0.tgz", - "integrity": "sha512-+g5O3j0w2ldzC86Pv6fvbO/xhAonbJFIdf/MKQ1d30gndlsVzUOE83ldfSE15Qrl9fhFjK6AovHs5Wpp6vx86w==", + "version": "8.62.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.62.1.tgz", + "integrity": "sha512-aXM5xlqXiTxPibXB93cLAURfT3rlizf7uMXISCXy66Isr/9hISJx3yDsKl0L7lKa51b8JpFuNKby0/O0pEm9jg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.62.0", - "@typescript-eslint/typescript-estree": "8.62.0", - "@typescript-eslint/utils": "8.62.0", + "@typescript-eslint/types": "8.62.1", + "@typescript-eslint/typescript-estree": "8.62.1", + "@typescript-eslint/utils": "8.62.1", "debug": "^4.4.3", "ts-api-utils": "^2.5.0" }, @@ -1743,9 +1743,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "8.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.62.0.tgz", - "integrity": "sha512-KvAclkktORPvM54TgLgA4z9HIV1M8zOgw9ZVNXl9f/8dLYfXYX1wkMXP7qmabpijQRV5bHJLOmoyGQbLMaUYeg==", + "version": "8.62.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.62.1.tgz", + "integrity": "sha512-ooCzJFaf+Hg+uG6fA3NRFGuFjlfNlDhBthbv4ZPU/0elCAFUfnyXUvf/WOpHz/jYwSmvU2GkR2LtyUfy1AxZ1Q==", "dev": true, "license": "MIT", "engines": { @@ -1757,16 +1757,16 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.62.0.tgz", - "integrity": "sha512-+hVbNxtW64pIcZWDPGbyaKF7vp2IBTVY5ma1blwwksrjdsbdqqEKvJWMGbBofei4F6Dovx1M0RJgoFeNu2279A==", + "version": "8.62.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.62.1.tgz", + "integrity": "sha512-xMcW9oP9u7fAMXYs9A65CVmtLQe2r//oXINHfi8HV+oiqhih17sbLdhXr4540YWlgpDKQdY854OL5ZrdCiQsAA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/project-service": "8.62.0", - "@typescript-eslint/tsconfig-utils": "8.62.0", - "@typescript-eslint/types": "8.62.0", - "@typescript-eslint/visitor-keys": "8.62.0", + "@typescript-eslint/project-service": "8.62.1", + "@typescript-eslint/tsconfig-utils": "8.62.1", + "@typescript-eslint/types": "8.62.1", + "@typescript-eslint/visitor-keys": "8.62.1", "debug": "^4.4.3", "minimatch": "^10.2.2", "semver": "^7.7.3", @@ -1785,16 +1785,16 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "8.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.62.0.tgz", - "integrity": "sha512-82r66fi9zYwZ+mTq3vKgwjbZ1PVk/DJzrXFLpG6RnBbdvH8TEGVHIs9H4d2drhkOzf0syZuD/OZvvlu6GDbP4g==", + "version": "8.62.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.62.1.tgz", + "integrity": "sha512-sHtbPfuKNZCG+ih8SyjjucqRntSVmp8XgL5u6o9mAhiSn8ds5o/M/XdM0abweme2Tln3szOstOrZ9OXitvPh0g==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.9.1", - "@typescript-eslint/scope-manager": "8.62.0", - "@typescript-eslint/types": "8.62.0", - "@typescript-eslint/typescript-estree": "8.62.0" + "@typescript-eslint/scope-manager": "8.62.1", + "@typescript-eslint/types": "8.62.1", + "@typescript-eslint/typescript-estree": "8.62.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -1809,13 +1809,13 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.62.0.tgz", - "integrity": "sha512-CY3uyFSRbcQv3nnSv8S0+lDftMVz6P963PoRlxrV7ew/Md564g9ut60PYzdLM5qW4jFn93GBF+Soi90ISAN+GQ==", + "version": "8.62.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.62.1.tgz", + "integrity": "sha512-4g3BLxfdTMy8iZG0MaBkadnlRrCJ74cQiFbyEVMrkwIoqdyaXXQM22cotDvrl4x28wgIZ9rEJRoM+mmhSJpJ1g==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.62.0", + "@typescript-eslint/types": "8.62.1", "eslint-visitor-keys": "^5.0.0" }, "engines": { @@ -4998,9 +4998,9 @@ "license": "MIT" }, "node_modules/fast-uri": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.2.tgz", - "integrity": "sha512-rVjf7ArG3LTk+FS6Yw81V1DLuZl1bRbNrev6Tmd/9RaroeeRRJhAt7jg/6YFxbvAQXUCavSoZhPPj6oOx+5KjQ==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.3.tgz", + "integrity": "sha512-i70LwGWUduXqzicKXWshooq+sWL1K3WUU5rKZNG/0i3a1OSoX3HqhH5WbWwTmqWfor4urUakGPiRQcleRZTwOg==", "dev": true, "funding": [ { @@ -5265,9 +5265,9 @@ } }, "node_modules/fs-extra": { - "version": "11.3.5", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.5.tgz", - "integrity": "sha512-eKpRKAovdpZtR1WopLHxlBWvAgPny3c4gX1G5Jhwmmw4XJj0ifSD5qB5TOo8hmA0wlRKDAOAhEE1yVPgs6Fgcg==", + "version": "11.3.6", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.6.tgz", + "integrity": "sha512-w8ZNZr2mKIc7qeNaQ9AVPT1+iFaI+Avd4xudVOvdDJ8VytREi1Ft5Ih7hd9jjehod8vAM5GMsfQ/TpPf4EyoEA==", "dev": true, "license": "MIT", "dependencies": { @@ -7823,9 +7823,9 @@ } }, "node_modules/p-map": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-7.0.4.tgz", - "integrity": "sha512-tkAQEw8ysMzmkhgw8k+1U/iPhWNhykKnSk4Rd5zLoPJCuJaGRPo6YposrZgaxHKzDHdDWWZvE/Sk7hsL2X/CpQ==", + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-7.0.5.tgz", + "integrity": "sha512-e8vJF4XdVkzqqSHguEMz41mQO1wKwxKm5ENrUJQUu9kLDCtn83cxbyHZcszr4QC5zEA7WffRRC4gsTecC7J9oA==", "dev": true, "license": "MIT", "engines": { @@ -8380,9 +8380,9 @@ } }, "node_modules/prettier": { - "version": "3.9.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.9.1.tgz", - "integrity": "sha512-ppiDo2CSwexck1eyZUwJHg/N3nf1+6IRCv7W/VJ5vaLnVCmB7+3CdRfMwoCHBBX6xTrREDTksZ4OZl5SSf4zXA==", + "version": "3.9.4", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.9.4.tgz", + "integrity": "sha512-yWG/o/4oJfo036EKAfK6ACAoDOfHeRHx4tuxkfBZiauURiaSmYwlpOr5LQqKtIkRD2z1PLteme2WoxEnj4tHTg==", "dev": true, "license": "MIT", "bin": { @@ -10310,16 +10310,16 @@ } }, "node_modules/typescript-eslint": { - "version": "8.62.0", - "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.62.0.tgz", - "integrity": "sha512-8QxXi+ZACKX0kaqO4gY8kn0RSD9gFfaHDWwjqtEN48aWCBkX4MJaufWN+c3BzlrXLOxfywDL8CaoqUwcRq4j4Q==", + "version": "8.62.1", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.62.1.tgz", + "integrity": "sha512-vymnnM5g0AKQDSAyfP12nMIBvgwgA42syg74kkuZ4x1VuTzwQKwc5h9rGxeShCjny5o+zWAb6OEoz7XLgrIkIw==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/eslint-plugin": "8.62.0", - "@typescript-eslint/parser": "8.62.0", - "@typescript-eslint/typescript-estree": "8.62.0", - "@typescript-eslint/utils": "8.62.0" + "@typescript-eslint/eslint-plugin": "8.62.1", + "@typescript-eslint/parser": "8.62.1", + "@typescript-eslint/typescript-estree": "8.62.1", + "@typescript-eslint/utils": "8.62.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -10733,9 +10733,9 @@ "license": "BSD-2-Clause" }, "node_modules/webpack": { - "version": "5.108.1", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.108.1.tgz", - "integrity": "sha512-UUCihHQK3O7483Woa0SulNLDeAiOhHI2PN2PAPU4fVWJqbzhv04EJ8FaWtB9WWh3i8fRt28543U7VfuJTOrpgQ==", + "version": "5.108.3", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.108.3.tgz", + "integrity": "sha512-hOpaCHmQVVY66IVTjofnH14IgSdmod2aquSGHGuYig/OIdWge01Hk2Wt988DZcwXumFUT4+FvJY5N+ikl8o/ww==", "dev": true, "license": "MIT", "peer": true, diff --git a/package.json b/package.json index c1064b67c9e..8819825ca53 100644 --- a/package.json +++ b/package.json @@ -42,7 +42,7 @@ "stylelint-config-standard": "40.0.0", "tap-xunit": "^2.4.1", "typescript": "6.0.3", - "typescript-eslint": "8.62.0", + "typescript-eslint": "8.62.1", "undici-types": "^8.5.0", "web-ext": "10.4.0", "webpack-cli": "^7.1.0" From 2e33a3082ee5c52b977c2bb5d1b03ec18d504e6a Mon Sep 17 00:00:00 2001 From: Roma Sosnovsky Date: Tue, 30 Jun 2026 11:04:08 +0300 Subject: [PATCH 05/14] revert some changes --- extension/chrome/settings/inbox/inbox.ts | 7 ++++++- extension/js/common/inject.ts | 13 ------------- .../webmail/generic/setup-webmail-content-script.ts | 7 ++++++- 3 files changed, 12 insertions(+), 15 deletions(-) diff --git a/extension/chrome/settings/inbox/inbox.ts b/extension/chrome/settings/inbox/inbox.ts index 4967323aad4..0a4af698973 100644 --- a/extension/chrome/settings/inbox/inbox.ts +++ b/extension/chrome/settings/inbox/inbox.ts @@ -185,7 +185,12 @@ export class InboxView extends View { private addBrowserMsgListeners = () => { BrowserMsg.addListener('add_end_session_btn', () => this.injector.insertEndSessionBtn(this.acctEmail)); BrowserMsg.addListener('set_active_window', async ({ frameId }: Bm.ComposeWindow) => { - this.injector.setActiveComposeWindow(frameId); + if ($(`.secure_compose_window.active[data-frame-id="${frameId}"]`).length) { + return; // already active + } + $(`.secure_compose_window`).removeClass('previous_active'); + $(`.secure_compose_window.active`).addClass('previous_active').removeClass('active'); + $(`.secure_compose_window[data-frame-id="${frameId}"]`).addClass('active'); }); BrowserMsg.addListener('close_compose_window', async ({ frameId }: Bm.ComposeWindow) => { $(`.secure_compose_window[data-frame-id="${frameId}"]`).remove(); diff --git a/extension/js/common/inject.ts b/extension/js/common/inject.ts index fda083817ef..fe6121b24d1 100644 --- a/extension/js/common/inject.ts +++ b/extension/js/common/inject.ts @@ -68,12 +68,8 @@ export class Injector { const alreadyOpenedCount = this.S.now('secure_compose_window').length; if (alreadyOpenedCount < 3) { const composeWin = $(this.factory.embeddedCompose(draftId, openInFullScreen, thunderbirdMsgId, replyOption, replyMsgId)); - const frameId = composeWin.data('frame-id') as string; composeWin.attr('data-order', alreadyOpenedCount + 1); - composeWin.on('click focusin', () => this.setActiveComposeWindow(frameId)); - composeWin.find('iframe').on('focus', () => this.setActiveComposeWindow(frameId)); this.S.cached('body').append(composeWin); // xss-safe-factory - this.setActiveComposeWindow(frameId); return true; } else { Ui.toast('Only 3 FlowCrypt windows can be opened at a time', false, 3, 'top', 'error'); @@ -81,15 +77,6 @@ export class Injector { } }; - public setActiveComposeWindow = (frameId: string) => { - if ($(`.secure_compose_window.active[data-frame-id="${frameId}"]`).length) { - return; // already active - } - $(`.secure_compose_window`).removeClass('previous_active'); - $(`.secure_compose_window.active`).addClass('previous_active').removeClass('active'); - $(`.secure_compose_window[data-frame-id="${frameId}"]`).addClass('active'); - }; - public btns = () => { if (this.S.now('compose_button_container').length === 0) { // don't inject too early diff --git a/extension/js/content_scripts/webmail/generic/setup-webmail-content-script.ts b/extension/js/content_scripts/webmail/generic/setup-webmail-content-script.ts index c7f8f8979d9..a9ab961fff2 100644 --- a/extension/js/content_scripts/webmail/generic/setup-webmail-content-script.ts +++ b/extension/js/content_scripts/webmail/generic/setup-webmail-content-script.ts @@ -152,7 +152,12 @@ export const contentScriptSetupIfVacant = async (webmailSpecific: WebmailSpecifi ) => { BrowserMsg.addListener('set_active_window', async req => { const { frameId } = req as Bm.ComposeWindow; - inject.setActiveComposeWindow(frameId); + if ($(`.secure_compose_window.active[data-frame-id="${frameId}"]`).length) { + return; // already active + } + $(`.secure_compose_window`).removeClass('previous_active'); + $(`.secure_compose_window.active`).addClass('previous_active').removeClass('active'); + $(`.secure_compose_window[data-frame-id="${frameId}"]`).addClass('active'); }); BrowserMsg.addListener('close_compose_window', async req => { const { frameId } = req as Bm.ComposeWindow; From 7357c74cbaa45a022e11b04fb3a42aea30c65460 Mon Sep 17 00:00:00 2001 From: Roma Sosnovsky Date: Thu, 2 Jul 2026 15:09:10 +0300 Subject: [PATCH 06/14] updates --- package-lock.json | 158 ++++++++++++++++++++++++---------------------- package.json | 4 +- 2 files changed, 83 insertions(+), 79 deletions(-) diff --git a/package-lock.json b/package-lock.json index f80a85180a2..c7f6d30ae55 100644 --- a/package-lock.json +++ b/package-lock.json @@ -29,7 +29,7 @@ "@tony.ganchev/eslint-plugin-header": "^3.4.4", "@types/chai": "5.2.3", "@types/chai-as-promised": "8.0.2", - "@types/chrome": "0.2.0", + "@types/chrome": "0.2.2", "@types/fs-extra": "^11.0.4", "@types/jquery": "4.0.1", "@types/mailparser": "3.4.6", @@ -56,7 +56,7 @@ "pdfjs-dist": "6.1.200", "postcss-html": "^1.8.1", "prettier": "^3.9.1", - "puppeteer": "25.2.1", + "puppeteer": "25.3.0", "stylelint": "17.14.0", "stylelint-config-standard": "40.0.0", "tap-xunit": "^2.4.1", @@ -924,9 +924,9 @@ "license": "CC0-1.0" }, "node_modules/@napi-rs/canvas": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@napi-rs/canvas/-/canvas-1.0.1.tgz", - "integrity": "sha512-mPD43G7pXbQhIGa7z4IpT/vXm1jbF8cBM1oY5UqjL8LSaTCNGhNi2Lidc/0+LwKbNiqbv/Tq0JlBRwKu+LW3iw==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas/-/canvas-1.0.2.tgz", + "integrity": "sha512-EYEqlMYaCbpZDz+IgDH5xp9MTd3ui4dmGqbQYryhMLnSRxrhHKq5KQWHHKxFUcEP4Hp8/BWgvqXocX4j7iSbOQ==", "dev": true, "license": "MIT", "optional": true, @@ -941,23 +941,23 @@ "url": "https://github.com/sponsors/Brooooooklyn" }, "optionalDependencies": { - "@napi-rs/canvas-android-arm64": "1.0.1", - "@napi-rs/canvas-darwin-arm64": "1.0.1", - "@napi-rs/canvas-darwin-x64": "1.0.1", - "@napi-rs/canvas-linux-arm-gnueabihf": "1.0.1", - "@napi-rs/canvas-linux-arm64-gnu": "1.0.1", - "@napi-rs/canvas-linux-arm64-musl": "1.0.1", - "@napi-rs/canvas-linux-riscv64-gnu": "1.0.1", - "@napi-rs/canvas-linux-x64-gnu": "1.0.1", - "@napi-rs/canvas-linux-x64-musl": "1.0.1", - "@napi-rs/canvas-win32-arm64-msvc": "1.0.1", - "@napi-rs/canvas-win32-x64-msvc": "1.0.1" + "@napi-rs/canvas-android-arm64": "1.0.2", + "@napi-rs/canvas-darwin-arm64": "1.0.2", + "@napi-rs/canvas-darwin-x64": "1.0.2", + "@napi-rs/canvas-linux-arm-gnueabihf": "1.0.2", + "@napi-rs/canvas-linux-arm64-gnu": "1.0.2", + "@napi-rs/canvas-linux-arm64-musl": "1.0.2", + "@napi-rs/canvas-linux-riscv64-gnu": "1.0.2", + "@napi-rs/canvas-linux-x64-gnu": "1.0.2", + "@napi-rs/canvas-linux-x64-musl": "1.0.2", + "@napi-rs/canvas-win32-arm64-msvc": "1.0.2", + "@napi-rs/canvas-win32-x64-msvc": "1.0.2" } }, "node_modules/@napi-rs/canvas-android-arm64": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@napi-rs/canvas-android-arm64/-/canvas-android-arm64-1.0.1.tgz", - "integrity": "sha512-d7ZCwJsgH4QNG50C7HQeVRsRG1gRDa1UeDUb1jEcqgLuiEJp6GVbGiZkFXPlmt0dEs2QHRQCPJoOv+bOkSQR/w==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-android-arm64/-/canvas-android-arm64-1.0.2.tgz", + "integrity": "sha512-IMXKVQod0ol4vt3gmClUfXz4JAgHYESGPCUqmH3lQxBoL0K/2greJaQE1HVBVxWWFKfLc4OLZVdxg7kXVyXv+g==", "cpu": [ "arm64" ], @@ -976,9 +976,9 @@ } }, "node_modules/@napi-rs/canvas-darwin-arm64": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@napi-rs/canvas-darwin-arm64/-/canvas-darwin-arm64-1.0.1.tgz", - "integrity": "sha512-ppyVSzIHsVldc3B++mdh03ed0Q0hoVR2QDG9O/wEUR0PurJKwDEEYV87uBQDpbSumJBfLEINDndsOPzQj71qEQ==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-darwin-arm64/-/canvas-darwin-arm64-1.0.2.tgz", + "integrity": "sha512-Sc8tPi6cF+5lqOzCCKFALJHhDiRwyMzTPYm3bbhdXsOunU0lQO5f05ucyOzN2r55I23Hg5bsjH63uSCvWp3EgQ==", "cpu": [ "arm64" ], @@ -997,9 +997,9 @@ } }, "node_modules/@napi-rs/canvas-darwin-x64": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@napi-rs/canvas-darwin-x64/-/canvas-darwin-x64-1.0.1.tgz", - "integrity": "sha512-/BlXif9VOzf/WP32g9zxl612dO0KLvwqplBFqfRcyr3PyR5fhPrilTuJxSBq3zkwCKGKy82JsoPd2JeQI/HBlA==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-darwin-x64/-/canvas-darwin-x64-1.0.2.tgz", + "integrity": "sha512-niDXZ9LhKB1zLrUdYB64RHQFDGz9rr0eGx061qtJJU3U20EMMIx28ADF5fVYbhtOgkWQrBjFicfaye1yM0U62A==", "cpu": [ "x64" ], @@ -1018,9 +1018,9 @@ } }, "node_modules/@napi-rs/canvas-linux-arm-gnueabihf": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-arm-gnueabihf/-/canvas-linux-arm-gnueabihf-1.0.1.tgz", - "integrity": "sha512-JTGq93/Pje+iSNVjL+ggB0+pqEfu7nXvQGrHTvugz+Lp08wCDa5rjov4JeEljGDk16/inVBU9sp4N9f0/+o+9A==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-arm-gnueabihf/-/canvas-linux-arm-gnueabihf-1.0.2.tgz", + "integrity": "sha512-sgatQL9JxGRH/Amzcvu0P3t8Am3duou74CisfuJ41Dwt8cWy723z/9KZ8LlgmxfypEwEZxSTNFJtU8d281lmhQ==", "cpu": [ "arm" ], @@ -1039,9 +1039,9 @@ } }, "node_modules/@napi-rs/canvas-linux-arm64-gnu": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-arm64-gnu/-/canvas-linux-arm64-gnu-1.0.1.tgz", - "integrity": "sha512-i74zqEh5yFmYwHkszFo+4EH4l5ATD4bSlJG21iW2j5kpqiN2b0WN9SG/xdq2O60MjZK0ZLSu3a/Z3aQAsmDQ5A==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-arm64-gnu/-/canvas-linux-arm64-gnu-1.0.2.tgz", + "integrity": "sha512-dgKuX0peF3xwY6ZF5QxGS4wbfDqpoFAJYXiLSp+guZKARQUKMkRqZSDrXKj7nfrec3UCMzC0PFCPte0ES98AiA==", "cpu": [ "arm64" ], @@ -1063,9 +1063,9 @@ } }, "node_modules/@napi-rs/canvas-linux-arm64-musl": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-arm64-musl/-/canvas-linux-arm64-musl-1.0.1.tgz", - "integrity": "sha512-COqBxybXcKb6gNgEhjh04rPHrpsJB+n/5+p4ySPgQWl0i+xVNYHn4rvzCtUBIFqOgY6HEJ9UaP6c4W9EMwzfpQ==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-arm64-musl/-/canvas-linux-arm64-musl-1.0.2.tgz", + "integrity": "sha512-qwROoDIC9upfvDoRLuPn2aNg9CGW1x0Ygr4k2Or+8paA9d0qBLwk87U+g8KQpoOviKoPoiwl97kvBYuYD7qZoA==", "cpu": [ "arm64" ], @@ -1087,9 +1087,9 @@ } }, "node_modules/@napi-rs/canvas-linux-riscv64-gnu": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-riscv64-gnu/-/canvas-linux-riscv64-gnu-1.0.1.tgz", - "integrity": "sha512-1vdAZGpD85lMUo7K3qtEdoIWeMc0xcpUD5PagK3fVcMSdf8dkSL5bg/KE4Rwv5NF+PYx4plrgfn0KRMOqdKtwA==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-riscv64-gnu/-/canvas-linux-riscv64-gnu-1.0.2.tgz", + "integrity": "sha512-fXRjnPihdnbO6qy1QQOgxAonb68A0TCEG7rj1x7v7rxNElsE8EVIKIEUTvyDtU+sthYSbX+8e7g3oZiLGnOmxw==", "cpu": [ "riscv64" ], @@ -1111,9 +1111,9 @@ } }, "node_modules/@napi-rs/canvas-linux-x64-gnu": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-x64-gnu/-/canvas-linux-x64-gnu-1.0.1.tgz", - "integrity": "sha512-W/iC2qJZGqKKQJ0JrNo3QkhoAy/PvzlmdYLW8Yz5/L6XgT5d7t26dnqgP2rCbL58P3CbPw7ES0Rz8OG0gn7JeQ==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-x64-gnu/-/canvas-linux-x64-gnu-1.0.2.tgz", + "integrity": "sha512-nPR97DXhbWIAy7yazF3jc06kEPMqYMLmPzFOVNlwKPfIoSChnI+x7dc0hTLaihz3jxrjL6j4BbA7earxfx4X3g==", "cpu": [ "x64" ], @@ -1135,9 +1135,9 @@ } }, "node_modules/@napi-rs/canvas-linux-x64-musl": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-x64-musl/-/canvas-linux-x64-musl-1.0.1.tgz", - "integrity": "sha512-a5mmIVwxF92UGUe+1c7Ap32ZRnApbRMnQC/KgYyFB0AXZShBCHVGaURq+BDkiV7jvHhVwvvAP0Q/3aWNhqgVZg==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-x64-musl/-/canvas-linux-x64-musl-1.0.2.tgz", + "integrity": "sha512-l7zZY5+jL5qnBZtDz7CoBtY6p7EkHu422g/0zWwrOrzIwWyWxZFRfZZORY1UG7YApymPLx+UbOkN206xXn/c1Q==", "cpu": [ "x64" ], @@ -1159,9 +1159,9 @@ } }, "node_modules/@napi-rs/canvas-win32-arm64-msvc": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@napi-rs/canvas-win32-arm64-msvc/-/canvas-win32-arm64-msvc-1.0.1.tgz", - "integrity": "sha512-rVnDhVvcXlqcHMsgnxxhZgdRkRIqVBlx+FJwSAHi4VbWWwsowvV5ldFEecEHD2+Ac/IL3fNWF/LB5CZTghNwRA==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-win32-arm64-msvc/-/canvas-win32-arm64-msvc-1.0.2.tgz", + "integrity": "sha512-yE0koHCFF4PIbMc2o2SEALhnipz7WBISh5glLvQiomtIoCcW0np3H4Lw93ceJAfJttTTeIIWFbwH84F7EVzjMQ==", "cpu": [ "arm64" ], @@ -1180,9 +1180,9 @@ } }, "node_modules/@napi-rs/canvas-win32-x64-msvc": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@napi-rs/canvas-win32-x64-msvc/-/canvas-win32-x64-msvc-1.0.1.tgz", - "integrity": "sha512-UMstkP/nZHbithgdSJv1EvYVrYhdao5B5N3szMVU2i5/b6ijMcVPXOEyrk0QXl0iPjv8Hkoow+Tap+MiOxppOQ==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-win32-x64-msvc/-/canvas-win32-x64-msvc-1.0.2.tgz", + "integrity": "sha512-okU8/t2foV6C31n0GtvEMbfD5rOFc70+/6xUNME9Guld29sgSOIGUEDScAWFlcP3k5TYQRl9TNkwJEEjh15w8A==", "cpu": [ "x64" ], @@ -1335,9 +1335,9 @@ } }, "node_modules/@puppeteer/browsers": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-3.0.5.tgz", - "integrity": "sha512-xYXNuEQmHNIPWWcbL/skf2KF7seyp7c1xmKFRk3wmdFx7VwBsKVrtOLKs8ecaezsKPsWeF1YsgwIiElAscaryA==", + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-3.0.6.tgz", + "integrity": "sha512-B/gKoqlFkzhvzsI6jo9K1cZz9o5ypviVv/xu8CwA4grZzyVwN+XfkT+tu8T1zrauuEXv6VhS2oGX+6NL95WcKA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -1351,11 +1351,15 @@ "node": ">=22.12.0" }, "peerDependencies": { - "proxy-agent": ">=8.0.1" + "proxy-agent": ">=8.0.1", + "yauzl": "^2.10.0 || ^3.4.0" }, "peerDependenciesMeta": { "proxy-agent": { "optional": true + }, + "yauzl": { + "optional": true } } }, @@ -1457,9 +1461,9 @@ } }, "node_modules/@types/chrome": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@types/chrome/-/chrome-0.2.0.tgz", - "integrity": "sha512-K/i7EKEVSpmyXXjE0ev5oASWBYMY6yM8LFSutG2PkM1DmxJUggZsoaTc0W1RsVwDDKrsZEjpHFAbqqxlRxGsSg==", + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/@types/chrome/-/chrome-0.2.2.tgz", + "integrity": "sha512-8rSMZ4cvo2xmaSyQg0sN5yRL7oiDkntLoiHxUhfwQnv1mvnkrdoZ25SlNrKWmYKaeP50WvrfWj1pmc02+U9KKw==", "dev": true, "license": "MIT", "dependencies": { @@ -1566,9 +1570,9 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "26.0.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-26.0.1.tgz", - "integrity": "sha512-fc3KiUoBt6kie0N9bIW3E47vZsuaMf0PM2AaUpLCLT0s/LvX1nxAim6Fc049cNxODPpGm6qRAuUOB86SkRuPQw==", + "version": "26.1.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-26.1.0.tgz", + "integrity": "sha512-O0A1G3xPGy4w7AgQdAQYUlQ+BKk2Oovw8eRpofyp5KdBZULnbe+WqaOVNrm705SHphCiG4XHsACrSmPu1f+Kgw==", "dev": true, "license": "MIT", "dependencies": { @@ -3421,9 +3425,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001799", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001799.tgz", - "integrity": "sha512-hG1bReV+OUU+MOqK4t/ZWI0tZOyz3rqS9XuhOUz1cIcbwBKjOyJEJuw9ER5JuNyqxNk8u/JUVbGibBOL1yrjFw==", + "version": "1.0.30001800", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001800.tgz", + "integrity": "sha512-MMHtuAz9Ys840zAY5F4k6fV5GaivZ9sPk+nz0mY+GYVzRBnYkN0mpqkSR92oWRQ19yQWo4HvBV/FnC16AJX8MA==", "dev": true, "funding": [ { @@ -4420,9 +4424,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.5.381", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.381.tgz", - "integrity": "sha512-n9Wa6yB+vDsGuA8AKbl/0z7HbvWqt5jxIdvr1IUicd0ryPrk7/xzwqLv8D9AbbvZ6avVNtXYLTfmgFHkwkyelg==", + "version": "1.5.384", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.384.tgz", + "integrity": "sha512-g6KAKY1vkYsADvSPWvdJsuYT0ixdcu6lUtD9P/wJKGBEDlZVXh2AX42j1mPqqaQPDluWjara9ziQ7xqAeXCt5A==", "dev": true, "license": "ISC", "peer": true @@ -4566,9 +4570,9 @@ } }, "node_modules/es-module-lexer": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.2.0.tgz", - "integrity": "sha512-3lGxdTXCLfe1MYfTz1y2ksAAUM4NAOP6rPEjxGJVKO7TZ5+tvHCaQWGpC4Y3IXvW3ece0Cz1cIP4FWBxOnGCTQ==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.3.0.tgz", + "integrity": "sha512-KLdwQm2NvGLDkQDCGvmiQrhkd0JbMzXthwQAUgWjQuQdBLFa3eiBP5arXZyA+f8x+x7OXgud6bq2rxjGtHV2tw==", "dev": true, "license": "MIT", "peer": true @@ -8492,18 +8496,18 @@ } }, "node_modules/puppeteer": { - "version": "25.2.1", - "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-25.2.1.tgz", - "integrity": "sha512-2D5RMkQH9FRhDU57a1/jV9xWoxqZvUjaZOYjAAPdRCEY8A01V5sxzyGOMs8XiKU9fPF91SOSwNYpHRu5SD958g==", + "version": "25.3.0", + "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-25.3.0.tgz", + "integrity": "sha512-O1tx8S315aw8eI99HZ5ZNcVEzJ9+jKF//eO5UvfZ3cXJ6okZ5sX3Y50u7DJaM+ewEK4LqXP068tBhfRaWikj+g==", "dev": true, "hasInstallScript": true, "license": "Apache-2.0", "dependencies": { - "@puppeteer/browsers": "3.0.5", + "@puppeteer/browsers": "3.0.6", "chromium-bidi": "16.0.1", "devtools-protocol": "0.0.1638949", "lilconfig": "^3.1.3", - "puppeteer-core": "25.2.1", + "puppeteer-core": "25.3.0", "typed-query-selector": "^2.12.2" }, "bin": { @@ -8514,13 +8518,13 @@ } }, "node_modules/puppeteer-core": { - "version": "25.2.1", - "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-25.2.1.tgz", - "integrity": "sha512-MwEZ4FFGJ1ZLOmu/04eISxoEMKtCnHyJBRFfgpwPPSYNG6gT6Xw1laNziFSV7uwDcx3jK+ATYIo9SfOd8Uhc3w==", + "version": "25.3.0", + "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-25.3.0.tgz", + "integrity": "sha512-fm+wpUr2oigH1PXZvwgATrM2tYWHMDG8ASzTEe9uukCye4X5Ldx1K5BTHPFKITrIWvQQAQ256d1NpbEveBcKjA==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@puppeteer/browsers": "3.0.5", + "@puppeteer/browsers": "3.0.6", "chromium-bidi": "16.0.1", "devtools-protocol": "0.0.1638949", "typed-query-selector": "^2.12.2", diff --git a/package.json b/package.json index 8819825ca53..8af28464226 100644 --- a/package.json +++ b/package.json @@ -10,7 +10,7 @@ "@tony.ganchev/eslint-plugin-header": "^3.4.4", "@types/chai": "5.2.3", "@types/chai-as-promised": "8.0.2", - "@types/chrome": "0.2.0", + "@types/chrome": "0.2.2", "@types/fs-extra": "^11.0.4", "@types/jquery": "4.0.1", "@types/mailparser": "3.4.6", @@ -37,7 +37,7 @@ "pdfjs-dist": "6.1.200", "postcss-html": "^1.8.1", "prettier": "^3.9.1", - "puppeteer": "25.2.1", + "puppeteer": "25.3.0", "stylelint": "17.14.0", "stylelint-config-standard": "40.0.0", "tap-xunit": "^2.4.1", From 51d0f116c0d7c71bc09a49b9c222558cc1355a84 Mon Sep 17 00:00:00 2001 From: Roma Sosnovsky Date: Thu, 2 Jul 2026 16:05:58 +0300 Subject: [PATCH 07/14] =?UTF-8?q?fix=20=E2=80=98verify=20loading=20indicat?= =?UTF-8?q?or=20visibility=E2=80=99=20test?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- test/source/tests/compose.ts | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/test/source/tests/compose.ts b/test/source/tests/compose.ts index 08fb5905263..292fe9acc75 100644 --- a/test/source/tests/compose.ts +++ b/test/source/tests/compose.ts @@ -1711,16 +1711,19 @@ export const defineComposeTests = (testVariant: TestVariant, testWithBrowser: Te const composePage = await ComposePageRecipe.openStandalone(t, browser, 'compose'); await Util.sleep(2); await ComposePageRecipe.showRecipientInput(composePage); - await composePage.type('@input-to', 'contact'); + let loadingIconPromise: Promise; if (testVariant === 'CONSUMER-MOCK') { + await composePage.type('@input-to', 'contact'); // allow contacts scope const oauthPopup = await browser.newPageTriggeredBy(t, () => composePage.waitAndClick('@action-auth-with-contacts-scope')); + loadingIconPromise = composePage.waitAll('@pgp-loading-icon'); await OauthPageRecipe.google(t, oauthPopup, account, 'approve'); + } else { + loadingIconPromise = composePage.waitAll('@pgp-loading-icon'); + await composePage.type('@input-to', 'contact'); } - await Util.sleep(1); - await composePage.waitAll('@pgp-loading-icon'); - await Util.sleep(3); // Wait for 3 seconds to allow PGP status update and loading icon to disappear - await composePage.notPresent('@pgp-loading-icon'); + await loadingIconPromise; + await composePage.waitTillGone('@pgp-loading-icon', { timeout: 10 }); }) ); From 96693777e164605178231a21334da385e6c2e545 Mon Sep 17 00:00:00 2001 From: Roma Sosnovsky Date: Thu, 2 Jul 2026 16:36:31 +0300 Subject: [PATCH 08/14] fix tests --- package.json | 2 +- test/source/tests/compose.ts | 18 ++++++++++-------- 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/package.json b/package.json index 8af28464226..a0553f5ae51 100644 --- a/package.json +++ b/package.json @@ -85,7 +85,7 @@ "test_async_stack": "node build/test/test/source/async-stack.js", "test_buf": "npx ava --timeout=3m --verbose --concurrency=10 build/test/test/source/buf.js", "test_ci_chrome_consumer_live_gmail": "npx ava --timeout=45m --verbose --tap --concurrency=1 build/test/test/source/test.js -- CONSUMER-LIVE-GMAIL STANDARD-GROUP | npx tap-xunit > report.xml", - "test_ci_chrome_consumer": "npx ava --timeout=30m --verbose --concurrency=10 build/test/test/source/test.js -- CONSUMER-MOCK STANDARD-GROUP", + "test_ci_chrome_consumer": "npx ava --timeout=30m --verbose --tap --concurrency=10 build/test/test/source/test.js -- CONSUMER-MOCK STANDARD-GROUP | npx tap-xunit > report.xml", "test_ci_chrome_enterprise": "npx ava --timeout=30m --verbose --tap --concurrency=10 build/test/test/source/test.js -- ENTERPRISE-MOCK STANDARD-GROUP | npx tap-xunit > report.xml", "test_ci_chrome_consumer_flaky": "npx ava --timeout=30m --verbose --tap --concurrency=1 build/test/test/source/test.js -- CONSUMER-MOCK FLAKY-GROUP --pool-size=3 | npx tap-xunit > report.xml", "test_ci_chrome_content_scripts": "npx ava --timeout=3m --verbose --tap build/test/test/source/test.js -- CONTENT-SCRIPT-TESTS --pool-size=1 > report.xml", diff --git a/test/source/tests/compose.ts b/test/source/tests/compose.ts index 292fe9acc75..7baf6ce0582 100644 --- a/test/source/tests/compose.ts +++ b/test/source/tests/compose.ts @@ -1463,9 +1463,10 @@ export const defineComposeTests = (testVariant: TestVariant, testWithBrowser: Te }); await composePage.waitAndClick('@encrypted-reply'); await composePage.waitForContent('@recipients-preview', 'sender@domain.com'); - await composePage.waitAndClick('@action-show-container-cc-bcc-buttons'); + await composePage.target.evaluate(() => $('#recipients_placeholder:visible').trigger('click')); await expectRecipientElements(composePage, { to: [{ email: 'sender@domain.com' }] }); - await composePage.waitAndClick('@action-remove-senderdomaincom-recipient'); + await composePage.waitAll('@action-remove-senderdomaincom-recipient'); + await composePage.target.evaluate(() => $('[data-test="action-remove-senderdomaincom-recipient"]').trigger('click')); await expectRecipientElements(composePage, { to: [] }); }) ); @@ -1708,20 +1709,21 @@ export const defineComposeTests = (testVariant: TestVariant, testWithBrowser: Te contacts: [recipient], }, }); - const composePage = await ComposePageRecipe.openStandalone(t, browser, 'compose'); + let composePage = await ComposePageRecipe.openStandalone(t, browser, 'compose'); await Util.sleep(2); await ComposePageRecipe.showRecipientInput(composePage); - let loadingIconPromise: Promise; if (testVariant === 'CONSUMER-MOCK') { await composePage.type('@input-to', 'contact'); // allow contacts scope const oauthPopup = await browser.newPageTriggeredBy(t, () => composePage.waitAndClick('@action-auth-with-contacts-scope')); - loadingIconPromise = composePage.waitAll('@pgp-loading-icon'); await OauthPageRecipe.google(t, oauthPopup, account, 'approve'); - } else { - loadingIconPromise = composePage.waitAll('@pgp-loading-icon'); - await composePage.type('@input-to', 'contact'); + await composePage.waitTillGone('@action-auth-with-contacts-scope'); + await composePage.close(); + composePage = await ComposePageRecipe.openStandalone(t, browser, 'compose'); + await ComposePageRecipe.showRecipientInput(composePage); } + const loadingIconPromise = composePage.waitAll('@pgp-loading-icon'); + await composePage.type('@input-to', 'contact'); await loadingIconPromise; await composePage.waitTillGone('@pgp-loading-icon', { timeout: 10 }); }) From c0ea120f9a4a59d09a32ff85d7bb94f138fc3356 Mon Sep 17 00:00:00 2001 From: Roma Sosnovsky Date: Fri, 3 Jul 2026 12:59:51 +0300 Subject: [PATCH 09/14] test fix --- test/source/tests/compose.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/test/source/tests/compose.ts b/test/source/tests/compose.ts index 7baf6ce0582..a887d056e48 100644 --- a/test/source/tests/compose.ts +++ b/test/source/tests/compose.ts @@ -2188,9 +2188,9 @@ export const defineComposeTests = (testVariant: TestVariant, testWithBrowser: Te const framesUrls = await inboxPage.getFramesUrls(['compose.htm']); expect(framesUrls.length).to.equal(3); // focus the 1st one - const firstFrameId = /frameId=.*?&/s.exec(framesUrls[0])![0]; - const firstComposeFrame = await inboxPage.getFrame(['compose.htm', firstFrameId]); - await inboxPage.waitAndFocus('iframe'); + const firstFrameId = await PageRecipe.getElementAttribute(secureComposeWindows[0], 'data-frame-id'); + const firstComposeFrame = await inboxPage.getFrame(['compose.htm', `frameId=${firstFrameId}`]); + await inboxPage.waitAndFocus(`iframe#${firstFrameId}`); await firstComposeFrame.waitAndFocus('@input-body'); await inboxPage.waitAll(['.secure_compose_window[data-order="1"].active', '.secure_compose_window[data-order="3"].previous_active']); // make sure the 1st compose window is active, and the 3rd is previous_active From 4cc67e543b168554edab55140d39fdb58de76466 Mon Sep 17 00:00:00 2001 From: Roma Sosnovsky Date: Fri, 3 Jul 2026 13:34:39 +0300 Subject: [PATCH 10/14] test fix --- test/source/tests/compose.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/test/source/tests/compose.ts b/test/source/tests/compose.ts index a887d056e48..a83ad293d4f 100644 --- a/test/source/tests/compose.ts +++ b/test/source/tests/compose.ts @@ -2190,8 +2190,7 @@ export const defineComposeTests = (testVariant: TestVariant, testWithBrowser: Te // focus the 1st one const firstFrameId = await PageRecipe.getElementAttribute(secureComposeWindows[0], 'data-frame-id'); const firstComposeFrame = await inboxPage.getFrame(['compose.htm', `frameId=${firstFrameId}`]); - await inboxPage.waitAndFocus(`iframe#${firstFrameId}`); - await firstComposeFrame.waitAndFocus('@input-body'); + await firstComposeFrame.waitAndClick('@input-body'); await inboxPage.waitAll(['.secure_compose_window[data-order="1"].active', '.secure_compose_window[data-order="3"].previous_active']); // make sure the 1st compose window is active, and the 3rd is previous_active expect(await inboxPage.hasClass('.secure_compose_window[data-order="1"]', 'active')).to.be.true; From 81c22ea963a4bce1f2b101d443887e201ed1e907 Mon Sep 17 00:00:00 2001 From: Roma Sosnovsky Date: Fri, 3 Jul 2026 14:32:49 +0300 Subject: [PATCH 11/14] test fixes --- test/source/tests/decrypt.ts | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/test/source/tests/decrypt.ts b/test/source/tests/decrypt.ts index 32361706b2a..9180cdf9553 100644 --- a/test/source/tests/decrypt.ts +++ b/test/source/tests/decrypt.ts @@ -1655,16 +1655,23 @@ XZ8r4OC6sguP/yozWlkG+7dDxsgKQVBENeG6Lw== 'decrypt - public key is rendered minimized for outgoing messages', testWithBrowser(async (t, browser) => { const assertOutgoingPubkeyFrameIsMinimized = async (page: ControllablePage) => { - const pubkeyFrame = await page.getFrame(['pgp_pubkey.htm', 'minimized=___cu_true___'], { timeout: 30 }); - await pubkeyFrame.waitForContent('@container-pgp-pubkey', 'Public Key', 30); - await pubkeyFrame.target.waitForFunction( - () => { - const addContactButton = document.querySelector('[data-test="action-add-contact"]'); - return Boolean(addContactButton && !addContactButton.offsetHeight); + const minimizedPubkeyFrameSelector = 'iframe[src*="pgp_pubkey.htm"][src*="minimized=___cu_true___"]'; + const minimizedPubkeyFrameUrls = await page.getFramesUrls(['pgp_pubkey.htm', 'minimized=___cu_true___'], { + sleep: 0, + appearIn: 30, + }); + expect(minimizedPubkeyFrameUrls.length).to.equal(1); + expect((await page.getFramesUrls(['pgp_pubkey.htm'], { sleep: 0 })).length).to.equal(1); + await page.target.waitForFunction( + selector => { + const iframe = document.querySelector(selector); + return Boolean(iframe && iframe.offsetHeight > 80 && iframe.offsetHeight < 140); }, - { timeout: 30_000 } + { timeout: 30_000 }, + minimizedPubkeyFrameSelector ); - expect(await pubkeyFrame.isElementVisible('@action-add-contact')).to.be.false; // hidden because sender matches acctEmail + const minimizedPubkeyFrame = await page.waitAny(minimizedPubkeyFrameSelector); + expect(Number(await PageRecipe.getElementPropertyJson(minimizedPubkeyFrame, 'offsetHeight'))).to.be.lessThan(140); }; const { acctEmail, authHdr } = await BrowserRecipe.setupCommonAcctWithAttester(t, browser, 'ci.tests.gmail'); From b5207e0b4e50d17f55fee8a17f2da6a9c72b34f1 Mon Sep 17 00:00:00 2001 From: Roma Sosnovsky Date: Fri, 3 Jul 2026 15:42:38 +0300 Subject: [PATCH 12/14] improve tests --- test/source/tests/compose.ts | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/test/source/tests/compose.ts b/test/source/tests/compose.ts index a83ad293d4f..510c4e31371 100644 --- a/test/source/tests/compose.ts +++ b/test/source/tests/compose.ts @@ -1668,10 +1668,19 @@ export const defineComposeTests = (testVariant: TestVariant, testWithBrowser: Te contacts: [recipient], }, }); + const searchContacts = async (composePage: ControllablePage) => { + await composePage.waitAndFocus('@input-to'); + await composePage.target.evaluate(() => { + const input = document.querySelector('[data-test="input-to"]')!; + input.value = ''; + input.dispatchEvent(new Event('input', { bubbles: true })); + }); + await composePage.type('@input-to', 'contact'); + }; await BrowserRecipe.setupCommonAcctWithAttester(t, browser, 'ci.tests.gmail'); let composePage = await ComposePageRecipe.openStandalone(t, browser, 'compose'); await composePage.waitAndClick('@action-show-cc'); - await composePage.type('@input-to', 'contact'); + await searchContacts(composePage); if (testVariant === 'CONSUMER-MOCK') { // consumer does not get Contacts scope automatically (may scare users when they install) // first search, did not yet receive contacts scope - should find no contacts @@ -1679,13 +1688,15 @@ export const defineComposeTests = (testVariant: TestVariant, testWithBrowser: Te // allow contacts scope, and expect that it will find a contact const oauthPopup = await browser.newPageTriggeredBy(t, () => composePage.waitAndClick('@action-auth-with-contacts-scope')); await OauthPageRecipe.google(t, oauthPopup, acct, 'approve'); + await composePage.waitTillGone('@action-auth-with-contacts-scope'); + await searchContacts(composePage); } - await Util.sleep(3); await ComposePageRecipe.expectContactsResultEqual(composePage, ['contact.test@flowcrypt.com']); // re-load the compose window, expect that it remembers scope was connected, and remembers the contact + await composePage.close(); composePage = await ComposePageRecipe.openStandalone(t, browser, 'compose'); await composePage.waitAndClick('@action-show-cc'); - await composePage.type('@input-to', 'contact'); + await searchContacts(composePage); await ComposePageRecipe.expectContactsResultEqual(composePage, ['contact.test@flowcrypt.com']); await composePage.notPresent('@action-auth-with-contacts-scope'); }) From 418b0b8bbd53ade5b2477087f69efe5f8e5e59e4 Mon Sep 17 00:00:00 2001 From: Roma Sosnovsky Date: Fri, 3 Jul 2026 16:09:27 +0300 Subject: [PATCH 13/14] improve tests --- test/source/browser/controllable.ts | 26 ++++++++++++++++++++++++-- test/source/tests/compose.ts | 16 ++++------------ test/source/tests/decrypt.ts | 7 +++++-- 3 files changed, 33 insertions(+), 16 deletions(-) diff --git a/test/source/browser/controllable.ts b/test/source/browser/controllable.ts index e76003f85c9..233bcb77025 100644 --- a/test/source/browser/controllable.ts +++ b/test/source/browser/controllable.ts @@ -221,6 +221,20 @@ abstract class ControllableBase { } }; + public clearAndType = async (selector: string, text: string, letterByLetter = false) => { + await this.waitAndFocus(selector); + await this.target.evaluate(s => { + const el = document.querySelector(s)!; + if (el.isContentEditable) { + el.textContent = ''; + } else { + (el as HTMLInputElement).value = ''; + } + el.dispatchEvent(new Event('input', { bubbles: true })); + }, this.selector(selector)); + await this.type(selector, text, letterByLetter); + }; + public attr = async (selector: string, attr: string): Promise => { return await this.target.evaluate( (selector, attr) => { @@ -335,6 +349,14 @@ abstract class ControllableBase { await this.target.focus(this.selector(selector)); }; + public waitForAppearThenGone = async ( + selector: string, + { appearTimeout = TIMEOUT_ELEMENT_APPEAR, goneTimeout = TIMEOUT_ELEMENT_GONE }: { appearTimeout?: number; goneTimeout?: number } = {} + ) => { + await this.waitAll(selector, { timeout: appearTimeout }); + await this.waitTillGone(selector, { timeout: goneTimeout }); + }; + public waitAndRespondToModal = async ( type: 'info' | 'warning' | 'error' | 'confirm' | 'confirm-checkbox', clickBtn: 'confirm' | 'cancel', @@ -743,7 +765,7 @@ class ConsoleEvent { } export class ControllablePage extends ControllableBase { - public declare target: Page; + declare public target: Page; public consoleMsgs: (ConsoleMessage | ConsoleEvent)[] = []; public alerts: ControllableAlert[] = []; private preventclose = false; @@ -940,7 +962,7 @@ export class ControllablePage extends ControllableBase { } export class ControllableFrame extends ControllableBase { - public declare target: Frame; + declare public target: Frame; public frame: Frame; public constructor( diff --git a/test/source/tests/compose.ts b/test/source/tests/compose.ts index 510c4e31371..c9c8db2eccb 100644 --- a/test/source/tests/compose.ts +++ b/test/source/tests/compose.ts @@ -1463,10 +1463,9 @@ export const defineComposeTests = (testVariant: TestVariant, testWithBrowser: Te }); await composePage.waitAndClick('@encrypted-reply'); await composePage.waitForContent('@recipients-preview', 'sender@domain.com'); - await composePage.target.evaluate(() => $('#recipients_placeholder:visible').trigger('click')); + await ComposePageRecipe.showRecipientInput(composePage); await expectRecipientElements(composePage, { to: [{ email: 'sender@domain.com' }] }); - await composePage.waitAll('@action-remove-senderdomaincom-recipient'); - await composePage.target.evaluate(() => $('[data-test="action-remove-senderdomaincom-recipient"]').trigger('click')); + await composePage.waitAndClick('@action-remove-senderdomaincom-recipient', { retryErrs: true }); await expectRecipientElements(composePage, { to: [] }); }) ); @@ -1669,13 +1668,7 @@ export const defineComposeTests = (testVariant: TestVariant, testWithBrowser: Te }, }); const searchContacts = async (composePage: ControllablePage) => { - await composePage.waitAndFocus('@input-to'); - await composePage.target.evaluate(() => { - const input = document.querySelector('[data-test="input-to"]')!; - input.value = ''; - input.dispatchEvent(new Event('input', { bubbles: true })); - }); - await composePage.type('@input-to', 'contact'); + await composePage.clearAndType('@input-to', 'contact'); }; await BrowserRecipe.setupCommonAcctWithAttester(t, browser, 'ci.tests.gmail'); let composePage = await ComposePageRecipe.openStandalone(t, browser, 'compose'); @@ -1733,10 +1726,9 @@ export const defineComposeTests = (testVariant: TestVariant, testWithBrowser: Te composePage = await ComposePageRecipe.openStandalone(t, browser, 'compose'); await ComposePageRecipe.showRecipientInput(composePage); } - const loadingIconPromise = composePage.waitAll('@pgp-loading-icon'); + const loadingIconPromise = composePage.waitForAppearThenGone('@pgp-loading-icon', { goneTimeout: 10 }); await composePage.type('@input-to', 'contact'); await loadingIconPromise; - await composePage.waitTillGone('@pgp-loading-icon', { timeout: 10 }); }) ); diff --git a/test/source/tests/decrypt.ts b/test/source/tests/decrypt.ts index 9180cdf9553..10ec97599e7 100644 --- a/test/source/tests/decrypt.ts +++ b/test/source/tests/decrypt.ts @@ -1662,6 +1662,8 @@ XZ8r4OC6sguP/yozWlkG+7dDxsgKQVBENeG6Lw== }); expect(minimizedPubkeyFrameUrls.length).to.equal(1); expect((await page.getFramesUrls(['pgp_pubkey.htm'], { sleep: 0 })).length).to.equal(1); + const minimizedPubkeyFrame = await page.getFrame(['pgp_pubkey.htm', 'minimized=___cu_true___'], { sleep: 0, timeout: 30 }); + await minimizedPubkeyFrame.waitForContent('@container-pgp-pubkey', 'Public Key', 30); await page.target.waitForFunction( selector => { const iframe = document.querySelector(selector); @@ -1670,8 +1672,9 @@ XZ8r4OC6sguP/yozWlkG+7dDxsgKQVBENeG6Lw== { timeout: 30_000 }, minimizedPubkeyFrameSelector ); - const minimizedPubkeyFrame = await page.waitAny(minimizedPubkeyFrameSelector); - expect(Number(await PageRecipe.getElementPropertyJson(minimizedPubkeyFrame, 'offsetHeight'))).to.be.lessThan(140); + const minimizedPubkeyIframe = await page.waitAny(minimizedPubkeyFrameSelector); + expect(Number(await PageRecipe.getElementPropertyJson(minimizedPubkeyIframe, 'offsetHeight'))).to.be.lessThan(140); + expect(await minimizedPubkeyFrame.isElementVisible('@action-add-contact')).to.be.false; // hidden because sender matches acctEmail }; const { acctEmail, authHdr } = await BrowserRecipe.setupCommonAcctWithAttester(t, browser, 'ci.tests.gmail'); From 3691d25007b8d6ba2787fdffa10df092d5c6cc9d Mon Sep 17 00:00:00 2001 From: Roma Sosnovsky Date: Fri, 3 Jul 2026 16:47:56 +0300 Subject: [PATCH 14/14] tests fix --- test/source/browser/controllable.ts | 5 +++++ test/source/tests/compose.ts | 2 +- test/source/tests/decrypt.ts | 5 ++--- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/test/source/browser/controllable.ts b/test/source/browser/controllable.ts index 233bcb77025..07f35175592 100644 --- a/test/source/browser/controllable.ts +++ b/test/source/browser/controllable.ts @@ -187,6 +187,11 @@ abstract class ControllableBase { return false; }; + public triggerClick = async (selector: string) => { + const element = await this.waitAny(selector, { visible: undefined }); + await element.evaluate(el => (el as HTMLElement).click()); + }; + public type = async (selector: string, text: string, letterByLetter = false) => { const e = await this.singleElement(selector); if (!e) { diff --git a/test/source/tests/compose.ts b/test/source/tests/compose.ts index c9c8db2eccb..993f4d2596b 100644 --- a/test/source/tests/compose.ts +++ b/test/source/tests/compose.ts @@ -1465,7 +1465,7 @@ export const defineComposeTests = (testVariant: TestVariant, testWithBrowser: Te await composePage.waitForContent('@recipients-preview', 'sender@domain.com'); await ComposePageRecipe.showRecipientInput(composePage); await expectRecipientElements(composePage, { to: [{ email: 'sender@domain.com' }] }); - await composePage.waitAndClick('@action-remove-senderdomaincom-recipient', { retryErrs: true }); + await composePage.triggerClick('@action-remove-senderdomaincom-recipient'); await expectRecipientElements(composePage, { to: [] }); }) ); diff --git a/test/source/tests/decrypt.ts b/test/source/tests/decrypt.ts index 10ec97599e7..030d771b4a2 100644 --- a/test/source/tests/decrypt.ts +++ b/test/source/tests/decrypt.ts @@ -1662,8 +1662,6 @@ XZ8r4OC6sguP/yozWlkG+7dDxsgKQVBENeG6Lw== }); expect(minimizedPubkeyFrameUrls.length).to.equal(1); expect((await page.getFramesUrls(['pgp_pubkey.htm'], { sleep: 0 })).length).to.equal(1); - const minimizedPubkeyFrame = await page.getFrame(['pgp_pubkey.htm', 'minimized=___cu_true___'], { sleep: 0, timeout: 30 }); - await minimizedPubkeyFrame.waitForContent('@container-pgp-pubkey', 'Public Key', 30); await page.target.waitForFunction( selector => { const iframe = document.querySelector(selector); @@ -1674,7 +1672,8 @@ XZ8r4OC6sguP/yozWlkG+7dDxsgKQVBENeG6Lw== ); const minimizedPubkeyIframe = await page.waitAny(minimizedPubkeyFrameSelector); expect(Number(await PageRecipe.getElementPropertyJson(minimizedPubkeyIframe, 'offsetHeight'))).to.be.lessThan(140); - expect(await minimizedPubkeyFrame.isElementVisible('@action-add-contact')).to.be.false; // hidden because sender matches acctEmail + const minimizedPubkeyFrame = await page.getFrame(['pgp_pubkey.htm', 'minimized=___cu_true___'], { sleep: 0 }); + expect(await minimizedPubkeyFrame.isElementPresent('@action-add-contact')).to.be.false; // hidden because sender matches acctEmail }; const { acctEmail, authHdr } = await BrowserRecipe.setupCommonAcctWithAttester(t, browser, 'ci.tests.gmail');