diff --git a/extensions/bitwarden/CHANGELOG.md b/extensions/bitwarden/CHANGELOG.md index 27dabb85b8e3..d5d57d087044 100644 --- a/extensions/bitwarden/CHANGELOG.md +++ b/extensions/bitwarden/CHANGELOG.md @@ -1,5 +1,10 @@ # Bitwarden Changelog +## [Security & Fixes] - {PR_MERGE_DATE} + +- **Security:** Redact master password from error logs so it is never exposed when using "Copy Last Errors" or sharing bug reports (unlock/login failures now store a sanitized message) +- Fix npm install peer dependency conflict by pinning react-devtools to the version expected by @raycast/api + ## [Added PasteUsernameAction] - 2026-01-01 ## [Added support for Windows] - 2025-10-15 diff --git a/extensions/bitwarden/package-lock.json b/extensions/bitwarden/package-lock.json index 4a2b20251068..48af38ee9951 100644 --- a/extensions/bitwarden/package-lock.json +++ b/extensions/bitwarden/package-lock.json @@ -1060,9 +1060,9 @@ } }, "node_modules/@eslint/js": { - "version": "8.57.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", - "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz", + "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==", "dev": true, "license": "MIT", "engines": { @@ -1080,14 +1080,14 @@ } }, "node_modules/@humanwhocodes/config-array": { - "version": "0.11.14", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", - "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz", + "integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==", "deprecated": "Use @eslint/config-array instead", "dev": true, "license": "Apache-2.0", "dependencies": { - "@humanwhocodes/object-schema": "^2.0.2", + "@humanwhocodes/object-schema": "^2.0.3", "debug": "^4.3.1", "minimatch": "^3.0.5" }, @@ -2114,9 +2114,9 @@ } }, "node_modules/@raycast/api": { - "version": "1.104.1", - "resolved": "https://registry.npmjs.org/@raycast/api/-/api-1.104.1.tgz", - "integrity": "sha512-5v52JDzAAoCA6/JOoBfsgCXK4fzIY02lvMH0IA3ghuxZuk8i2ID2rtPkTuIAbebpkILADB7gP4yaBphkMLiCJA==", + "version": "1.104.3", + "resolved": "https://registry.npmjs.org/@raycast/api/-/api-1.104.3.tgz", + "integrity": "sha512-ud3c2csFd3VywjqDuY33U184ZmbAJmY+Z7qYpiMOOAzDZye49ZE7Qjw4s/2Vob+LCLX/XduzWpVFv5omdfNThQ==", "license": "MIT", "peer": true, "dependencies": { @@ -2426,17 +2426,17 @@ } }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.17.0.tgz", - "integrity": "sha512-pyiDhEuLM3PuANxH7uNYan1AaFs5XE0zw1hq69JBvGvE7gSuEoQl1ydtEe/XQeoC3GQxLXyOVa5kNOATgM638A==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.18.0.tgz", + "integrity": "sha512-94EQTWZ40mzBc42ATNIBimBEDltSJ9RQHCC8vc/PDbxi4k8dVwUAv4o98dk50M1zB+JGFxp43FP7f8+FP8R6Sw==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "7.17.0", - "@typescript-eslint/type-utils": "7.17.0", - "@typescript-eslint/utils": "7.17.0", - "@typescript-eslint/visitor-keys": "7.17.0", + "@typescript-eslint/scope-manager": "7.18.0", + "@typescript-eslint/type-utils": "7.18.0", + "@typescript-eslint/utils": "7.18.0", + "@typescript-eslint/visitor-keys": "7.18.0", "graphemer": "^1.4.0", "ignore": "^5.3.1", "natural-compare": "^1.4.0", @@ -2460,17 +2460,17 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.17.0.tgz", - "integrity": "sha512-puiYfGeg5Ydop8eusb/Hy1k7QmOU6X3nvsqCgzrB2K4qMavK//21+PzNE8qeECgNOIoertJPUC1SpegHDI515A==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.18.0.tgz", + "integrity": "sha512-4Z+L8I2OqhZV8qA132M4wNL30ypZGYOQVBfMgxDH/K5UX0PNqTu1c6za9ST5r9+tavvHiTWmBnKzpCJ/GlVFtg==", "dev": true, "license": "BSD-2-Clause", "peer": true, "dependencies": { - "@typescript-eslint/scope-manager": "7.17.0", - "@typescript-eslint/types": "7.17.0", - "@typescript-eslint/typescript-estree": "7.17.0", - "@typescript-eslint/visitor-keys": "7.17.0", + "@typescript-eslint/scope-manager": "7.18.0", + "@typescript-eslint/types": "7.18.0", + "@typescript-eslint/typescript-estree": "7.18.0", + "@typescript-eslint/visitor-keys": "7.18.0", "debug": "^4.3.4" }, "engines": { @@ -2490,14 +2490,14 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.17.0.tgz", - "integrity": "sha512-0P2jTTqyxWp9HiKLu/Vemr2Rg1Xb5B7uHItdVZ6iAenXmPo4SZ86yOPCJwMqpCyaMiEHTNqizHfsbmCFT1x9SA==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.18.0.tgz", + "integrity": "sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "7.17.0", - "@typescript-eslint/visitor-keys": "7.17.0" + "@typescript-eslint/types": "7.18.0", + "@typescript-eslint/visitor-keys": "7.18.0" }, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -2508,14 +2508,14 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.17.0.tgz", - "integrity": "sha512-XD3aaBt+orgkM/7Cei0XNEm1vwUxQ958AOLALzPlbPqb8C1G8PZK85tND7Jpe69Wualri81PLU+Zc48GVKIMMA==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.18.0.tgz", + "integrity": "sha512-XL0FJXuCLaDuX2sYqZUUSOJ2sG5/i1AAze+axqmLnSkNEVMVYLF+cbwlB2w8D1tinFuSikHmFta+P+HOofrLeA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/typescript-estree": "7.17.0", - "@typescript-eslint/utils": "7.17.0", + "@typescript-eslint/typescript-estree": "7.18.0", + "@typescript-eslint/utils": "7.18.0", "debug": "^4.3.4", "ts-api-utils": "^1.3.0" }, @@ -2536,9 +2536,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.17.0.tgz", - "integrity": "sha512-a29Ir0EbyKTKHnZWbNsrc/gqfIBqYPwj3F2M+jWE/9bqfEHg0AMtXzkbUkOG6QgEScxh2+Pz9OXe11jHDnHR7A==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.18.0.tgz", + "integrity": "sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==", "dev": true, "license": "MIT", "engines": { @@ -2550,14 +2550,14 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.17.0.tgz", - "integrity": "sha512-72I3TGq93t2GoSBWI093wmKo0n6/b7O4j9o8U+f65TVD0FS6bI2180X5eGEr8MA8PhKMvYe9myZJquUT2JkCZw==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.18.0.tgz", + "integrity": "sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA==", "dev": true, "license": "BSD-2-Clause", "dependencies": { - "@typescript-eslint/types": "7.17.0", - "@typescript-eslint/visitor-keys": "7.17.0", + "@typescript-eslint/types": "7.18.0", + "@typescript-eslint/visitor-keys": "7.18.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -2605,16 +2605,16 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.17.0.tgz", - "integrity": "sha512-r+JFlm5NdB+JXc7aWWZ3fKSm1gn0pkswEwIYsrGPdsT2GjsRATAKXiNtp3vgAAO1xZhX8alIOEQnNMl3kbTgJw==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.18.0.tgz", + "integrity": "sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "7.17.0", - "@typescript-eslint/types": "7.17.0", - "@typescript-eslint/typescript-estree": "7.17.0" + "@typescript-eslint/scope-manager": "7.18.0", + "@typescript-eslint/types": "7.18.0", + "@typescript-eslint/typescript-estree": "7.18.0" }, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -2628,13 +2628,13 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.17.0.tgz", - "integrity": "sha512-RVGC9UhPOCsfCdI9pU++K4nD7to+jTcMIbXTSOcrLqUEW6gF2pU1UUbYJKc9cvcRSK1UDeMJ7pdMxf4bhMpV/A==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.18.0.tgz", + "integrity": "sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "7.17.0", + "@typescript-eslint/types": "7.18.0", "eslint-visitor-keys": "^3.4.3" }, "engines": { @@ -3792,10 +3792,11 @@ "optional": true }, "node_modules/diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.4.tgz", + "integrity": "sha512-X07nttJQkwkfKfvTPG/KSnE2OMdcUCao6+eXF3wmnIQRn2aPAHH3VxDbDOdegkd6JbPsXqShpvEOHfAT+nCNwQ==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=0.3.1" } @@ -4039,9 +4040,10 @@ } }, "node_modules/eslint": { - "version": "8.57.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", - "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz", + "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==", + "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", "dev": true, "license": "MIT", "peer": true, @@ -4049,8 +4051,8 @@ "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.57.0", - "@humanwhocodes/config-array": "^0.11.14", + "@eslint/js": "8.57.1", + "@humanwhocodes/config-array": "^0.13.0", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", "@ungap/structured-clone": "^1.2.0", @@ -4129,22 +4131,27 @@ } }, "node_modules/eslint-plugin-promise": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-6.1.1.tgz", - "integrity": "sha512-tjqWDwVZQo7UIPMeDReOpUgHCmCiH+ePnVT+5zVapL0uuHnegBUs2smM13CzOs2Xb5+MHMRFTs9v24yjba4Oig==", + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-6.6.0.tgz", + "integrity": "sha512-57Zzfw8G6+Gq7axm2Pdo3gW/Rx3h9Yywgn61uE/3elTCOePEHVrn2i5CdfBwA1BLK0Q0WqctICIUSqXZW/VprQ==", "dev": true, + "license": "ISC", "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, + "funding": { + "url": "https://opencollective.com/eslint" + }, "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" + "eslint": "^7.0.0 || ^8.0.0 || ^9.0.0" } }, "node_modules/eslint-plugin-react-hooks": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz", - "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==", + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.2.tgz", + "integrity": "sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -4384,9 +4391,9 @@ } }, "node_modules/fast-glob": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", - "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", "dev": true, "license": "MIT", "dependencies": { @@ -4394,7 +4401,7 @@ "@nodelib/fs.walk": "^1.2.3", "glob-parent": "^5.1.2", "merge2": "^1.3.0", - "micromatch": "^4.0.4" + "micromatch": "^4.0.8" }, "engines": { "node": ">=8.6.0" @@ -9067,9 +9074,9 @@ } }, "@eslint/js": { - "version": "8.57.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", - "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz", + "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==", "dev": true }, "@faker-js/faker": { @@ -9079,12 +9086,12 @@ "dev": true }, "@humanwhocodes/config-array": { - "version": "0.11.14", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", - "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz", + "integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==", "dev": true, "requires": { - "@humanwhocodes/object-schema": "^2.0.2", + "@humanwhocodes/object-schema": "^2.0.3", "debug": "^4.3.1", "minimatch": "^3.0.5" } @@ -9768,9 +9775,9 @@ } }, "@raycast/api": { - "version": "1.104.1", - "resolved": "https://registry.npmjs.org/@raycast/api/-/api-1.104.1.tgz", - "integrity": "sha512-5v52JDzAAoCA6/JOoBfsgCXK4fzIY02lvMH0IA3ghuxZuk8i2ID2rtPkTuIAbebpkILADB7gP4yaBphkMLiCJA==", + "version": "1.104.3", + "resolved": "https://registry.npmjs.org/@raycast/api/-/api-1.104.3.tgz", + "integrity": "sha512-ud3c2csFd3VywjqDuY33U184ZmbAJmY+Z7qYpiMOOAzDZye49ZE7Qjw4s/2Vob+LCLX/XduzWpVFv5omdfNThQ==", "peer": true, "requires": { "@oclif/core": "^4.5.4", @@ -10029,16 +10036,16 @@ } }, "@typescript-eslint/eslint-plugin": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.17.0.tgz", - "integrity": "sha512-pyiDhEuLM3PuANxH7uNYan1AaFs5XE0zw1hq69JBvGvE7gSuEoQl1ydtEe/XQeoC3GQxLXyOVa5kNOATgM638A==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.18.0.tgz", + "integrity": "sha512-94EQTWZ40mzBc42ATNIBimBEDltSJ9RQHCC8vc/PDbxi4k8dVwUAv4o98dk50M1zB+JGFxp43FP7f8+FP8R6Sw==", "dev": true, "requires": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "7.17.0", - "@typescript-eslint/type-utils": "7.17.0", - "@typescript-eslint/utils": "7.17.0", - "@typescript-eslint/visitor-keys": "7.17.0", + "@typescript-eslint/scope-manager": "7.18.0", + "@typescript-eslint/type-utils": "7.18.0", + "@typescript-eslint/utils": "7.18.0", + "@typescript-eslint/visitor-keys": "7.18.0", "graphemer": "^1.4.0", "ignore": "^5.3.1", "natural-compare": "^1.4.0", @@ -10046,55 +10053,55 @@ } }, "@typescript-eslint/parser": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.17.0.tgz", - "integrity": "sha512-puiYfGeg5Ydop8eusb/Hy1k7QmOU6X3nvsqCgzrB2K4qMavK//21+PzNE8qeECgNOIoertJPUC1SpegHDI515A==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.18.0.tgz", + "integrity": "sha512-4Z+L8I2OqhZV8qA132M4wNL30ypZGYOQVBfMgxDH/K5UX0PNqTu1c6za9ST5r9+tavvHiTWmBnKzpCJ/GlVFtg==", "dev": true, "peer": true, "requires": { - "@typescript-eslint/scope-manager": "7.17.0", - "@typescript-eslint/types": "7.17.0", - "@typescript-eslint/typescript-estree": "7.17.0", - "@typescript-eslint/visitor-keys": "7.17.0", + "@typescript-eslint/scope-manager": "7.18.0", + "@typescript-eslint/types": "7.18.0", + "@typescript-eslint/typescript-estree": "7.18.0", + "@typescript-eslint/visitor-keys": "7.18.0", "debug": "^4.3.4" } }, "@typescript-eslint/scope-manager": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.17.0.tgz", - "integrity": "sha512-0P2jTTqyxWp9HiKLu/Vemr2Rg1Xb5B7uHItdVZ6iAenXmPo4SZ86yOPCJwMqpCyaMiEHTNqizHfsbmCFT1x9SA==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.18.0.tgz", + "integrity": "sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA==", "dev": true, "requires": { - "@typescript-eslint/types": "7.17.0", - "@typescript-eslint/visitor-keys": "7.17.0" + "@typescript-eslint/types": "7.18.0", + "@typescript-eslint/visitor-keys": "7.18.0" } }, "@typescript-eslint/type-utils": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.17.0.tgz", - "integrity": "sha512-XD3aaBt+orgkM/7Cei0XNEm1vwUxQ958AOLALzPlbPqb8C1G8PZK85tND7Jpe69Wualri81PLU+Zc48GVKIMMA==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.18.0.tgz", + "integrity": "sha512-XL0FJXuCLaDuX2sYqZUUSOJ2sG5/i1AAze+axqmLnSkNEVMVYLF+cbwlB2w8D1tinFuSikHmFta+P+HOofrLeA==", "dev": true, "requires": { - "@typescript-eslint/typescript-estree": "7.17.0", - "@typescript-eslint/utils": "7.17.0", + "@typescript-eslint/typescript-estree": "7.18.0", + "@typescript-eslint/utils": "7.18.0", "debug": "^4.3.4", "ts-api-utils": "^1.3.0" } }, "@typescript-eslint/types": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.17.0.tgz", - "integrity": "sha512-a29Ir0EbyKTKHnZWbNsrc/gqfIBqYPwj3F2M+jWE/9bqfEHg0AMtXzkbUkOG6QgEScxh2+Pz9OXe11jHDnHR7A==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.18.0.tgz", + "integrity": "sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.17.0.tgz", - "integrity": "sha512-72I3TGq93t2GoSBWI093wmKo0n6/b7O4j9o8U+f65TVD0FS6bI2180X5eGEr8MA8PhKMvYe9myZJquUT2JkCZw==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.18.0.tgz", + "integrity": "sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA==", "dev": true, "requires": { - "@typescript-eslint/types": "7.17.0", - "@typescript-eslint/visitor-keys": "7.17.0", + "@typescript-eslint/types": "7.18.0", + "@typescript-eslint/visitor-keys": "7.18.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -10124,24 +10131,24 @@ } }, "@typescript-eslint/utils": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.17.0.tgz", - "integrity": "sha512-r+JFlm5NdB+JXc7aWWZ3fKSm1gn0pkswEwIYsrGPdsT2GjsRATAKXiNtp3vgAAO1xZhX8alIOEQnNMl3kbTgJw==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.18.0.tgz", + "integrity": "sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw==", "dev": true, "requires": { "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "7.17.0", - "@typescript-eslint/types": "7.17.0", - "@typescript-eslint/typescript-estree": "7.17.0" + "@typescript-eslint/scope-manager": "7.18.0", + "@typescript-eslint/types": "7.18.0", + "@typescript-eslint/typescript-estree": "7.18.0" } }, "@typescript-eslint/visitor-keys": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.17.0.tgz", - "integrity": "sha512-RVGC9UhPOCsfCdI9pU++K4nD7to+jTcMIbXTSOcrLqUEW6gF2pU1UUbYJKc9cvcRSK1UDeMJ7pdMxf4bhMpV/A==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.18.0.tgz", + "integrity": "sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg==", "dev": true, "requires": { - "@typescript-eslint/types": "7.17.0", + "@typescript-eslint/types": "7.18.0", "eslint-visitor-keys": "^3.4.3" } }, @@ -10936,9 +10943,9 @@ "optional": true }, "diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.4.tgz", + "integrity": "sha512-X07nttJQkwkfKfvTPG/KSnE2OMdcUCao6+eXF3wmnIQRn2aPAHH3VxDbDOdegkd6JbPsXqShpvEOHfAT+nCNwQ==", "dev": true }, "diff-sequences": { @@ -11114,17 +11121,17 @@ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" }, "eslint": { - "version": "8.57.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", - "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz", + "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==", "dev": true, "peer": true, "requires": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.57.0", - "@humanwhocodes/config-array": "^0.11.14", + "@eslint/js": "8.57.1", + "@humanwhocodes/config-array": "^0.13.0", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", "@ungap/structured-clone": "^1.2.0", @@ -11194,16 +11201,16 @@ } }, "eslint-plugin-promise": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-6.1.1.tgz", - "integrity": "sha512-tjqWDwVZQo7UIPMeDReOpUgHCmCiH+ePnVT+5zVapL0uuHnegBUs2smM13CzOs2Xb5+MHMRFTs9v24yjba4Oig==", + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-6.6.0.tgz", + "integrity": "sha512-57Zzfw8G6+Gq7axm2Pdo3gW/Rx3h9Yywgn61uE/3elTCOePEHVrn2i5CdfBwA1BLK0Q0WqctICIUSqXZW/VprQ==", "dev": true, "requires": {} }, "eslint-plugin-react-hooks": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz", - "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==", + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.2.tgz", + "integrity": "sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==", "dev": true, "requires": {} }, @@ -11349,16 +11356,16 @@ } }, "fast-glob": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", - "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", "dev": true, "requires": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", "glob-parent": "^5.1.2", "merge2": "^1.3.0", - "micromatch": "^4.0.4" + "micromatch": "^4.0.8" } }, "fast-json-stable-stringify": { diff --git a/extensions/bitwarden/package.json b/extensions/bitwarden/package.json index f3e69987e734..553b6036c4f3 100644 --- a/extensions/bitwarden/package.json +++ b/extensions/bitwarden/package.json @@ -18,7 +18,8 @@ "marinsokol", "jose-elias-alvarez", "krambono", - "clins1994" + "clins1994", + "0xdhrv" ], "pastContributors": [ "pomdtr" diff --git a/extensions/bitwarden/src/api/bitwarden.ts b/extensions/bitwarden/src/api/bitwarden.ts index 091aced6e321..91a5a5041726 100644 --- a/extensions/bitwarden/src/api/bitwarden.ts +++ b/extensions/bitwarden/src/api/bitwarden.ts @@ -22,6 +22,7 @@ import { join, dirname } from "path"; import { chmod, rename, rm } from "fs/promises"; import { decompressFile, removeFilesThatStartWith, unlinkAllSync, waitForFileAvailable } from "~/utils/fs"; import { download } from "~/utils/network"; +import { treatError } from "~/utils/debug"; import { captureException } from "~/utils/development"; import { ReceivedSend, Send, SendCreatePayload, SendType } from "~/types/send"; import { prepareSendPayload } from "~/api/bitwarden.helpers"; @@ -352,7 +353,7 @@ export class Bitwarden { await this.callActionListeners("login"); return { result: undefined }; } catch (execError) { - captureException("Failed to login", execError); + captureException("Failed to login", treatError(execError)); const { error } = await this.handleCommonErrors(execError); if (!error) throw execError; return { error }; @@ -406,7 +407,7 @@ export class Bitwarden { await this.callActionListeners("unlock", password, sessionToken); return { result: sessionToken }; } catch (execError) { - captureException("Failed to unlock vault", execError); + captureException("Failed to unlock vault", treatError(execError, { omitSensitiveValue: password })); const { error } = await this.handleCommonErrors(execError); if (!error) throw execError; return { error }; diff --git a/extensions/bitwarden/src/components/UnlockForm.tsx b/extensions/bitwarden/src/components/UnlockForm.tsx index 179d482d32d5..47d8146f5bb6 100644 --- a/extensions/bitwarden/src/components/UnlockForm.tsx +++ b/extensions/bitwarden/src/components/UnlockForm.tsx @@ -49,7 +49,7 @@ const UnlockForm = ({ pendingAction = Promise.resolve() }: UnlockFormProps) => { } = getUsefulError(error, password); await showToast(Toast.Style.Failure, "Failed to log in", displayableError); setUnlockError(treatedError); - captureException("Failed to log in", error); + captureException("Failed to log in", treatedError); return; } } @@ -61,7 +61,7 @@ const UnlockForm = ({ pendingAction = Promise.resolve() }: UnlockFormProps) => { const { displayableError = "Please check your credentials", treatedError } = getUsefulError(error, password); await showToast(Toast.Style.Failure, "Failed to unlock vault", displayableError); setUnlockError(treatedError); - captureException("Failed to unlock vault", error); + captureException("Failed to unlock vault", treatedError); } finally { setLoading(false); } @@ -91,7 +91,7 @@ const UnlockForm = ({ pendingAction = Promise.resolve() }: UnlockFormProps) => { icon={showPassword ? Icon.EyeDisabled : Icon.Eye} title={showPassword ? "Hide Password" : "Show Password"} onAction={() => setShowPassword((prev) => !prev)} - shortcut={{ macOS: { key: "e", modifiers: ["opt"] }, windows: { key: "e", modifiers: ["alt"] } }} + shortcut={{ macOS: { key: "e", modifiers: ["opt"] }, Windows: { key: "e", modifiers: ["alt"] } }} /> )} diff --git a/extensions/bitwarden/src/components/actions/VaultActionsSection.tsx b/extensions/bitwarden/src/components/actions/VaultActionsSection.tsx index 05fd6117955f..549c1bcc7cce 100644 --- a/extensions/bitwarden/src/components/actions/VaultActionsSection.tsx +++ b/extensions/bitwarden/src/components/actions/VaultActionsSection.tsx @@ -28,7 +28,7 @@ export function VaultActionsSection() { @@ -37,7 +37,7 @@ export function VaultActionsSection() { title="Lock Vault" shortcut={{ macOS: { key: "l", modifiers: ["opt", "shift"] }, - windows: { key: "l", modifiers: ["alt", "shift"] }, + Windows: { key: "l", modifiers: ["alt", "shift"] }, }} onAction={handleLockVault} /> diff --git a/extensions/bitwarden/src/components/generatePassword/ActionPanel.tsx b/extensions/bitwarden/src/components/generatePassword/ActionPanel.tsx index e088fcc20477..6ad37ef78774 100644 --- a/extensions/bitwarden/src/components/generatePassword/ActionPanel.tsx +++ b/extensions/bitwarden/src/components/generatePassword/ActionPanel.tsx @@ -25,7 +25,7 @@ const GeneratePasswordActionPanel = (props: GeneratePasswordActionPanelProps) => title="Copy Password" icon={Icon.Clipboard} onAction={handleCopy(password)} - shortcut={{ macOS: { key: "enter", modifiers: ["opt"] }, windows: { key: "enter", modifiers: ["alt"] } }} + shortcut={{ macOS: { key: "enter", modifiers: ["opt"] }, Windows: { key: "enter", modifiers: ["alt"] } }} /> shortcut={{ key: "enter", macOS: { key: "enter", modifiers: ["opt", "shift"] }, - windows: { key: "enter", modifiers: ["alt", "shift"] }, + Windows: { key: "enter", modifiers: ["alt", "shift"] }, }} /> @@ -44,7 +44,7 @@ const GeneratePasswordActionPanel = (props: GeneratePasswordActionPanelProps) => icon={Icon.ArrowClockwise} shortcut={{ macOS: { key: "backspace", modifiers: ["opt"] }, - windows: { key: "backspace", modifiers: ["alt"] }, + Windows: { key: "backspace", modifiers: ["alt"] }, }} /* avoid passing a reference to onAction because, for some reason, a string is passed to it, even though the type says otherwise 🤔 */ diff --git a/extensions/bitwarden/src/components/searchVault/actions/CopyTotpAction.tsx b/extensions/bitwarden/src/components/searchVault/actions/CopyTotpAction.tsx index ecdaf062bb93..93dd78b1510f 100644 --- a/extensions/bitwarden/src/components/searchVault/actions/CopyTotpAction.tsx +++ b/extensions/bitwarden/src/components/searchVault/actions/CopyTotpAction.tsx @@ -36,7 +36,7 @@ function CopyTotpAction() { title="Copy TOTP" icon={Icon.Clipboard} onAction={copyTotp} - shortcut={{ macOS: { key: "t", modifiers: ["opt"] }, windows: { key: "t", modifiers: ["alt"] } }} + shortcut={{ macOS: { key: "t", modifiers: ["opt"] }, Windows: { key: "t", modifiers: ["alt"] } }} repromptDescription={`Copying the TOTP of <${selectedItem.name}>`} /> ); diff --git a/extensions/bitwarden/src/components/searchVault/actions/CopyUsernameAction.tsx b/extensions/bitwarden/src/components/searchVault/actions/CopyUsernameAction.tsx index 29ec6a31e833..9675d2982821 100644 --- a/extensions/bitwarden/src/components/searchVault/actions/CopyUsernameAction.tsx +++ b/extensions/bitwarden/src/components/searchVault/actions/CopyUsernameAction.tsx @@ -29,7 +29,7 @@ function CopyUsernameAction() { title="Copy Username" icon={Icon.Person} onAction={handleCopyUsername} - shortcut={{ macOS: { key: "u", modifiers: ["opt"] }, windows: { key: "u", modifiers: ["alt"] } }} + shortcut={{ macOS: { key: "u", modifiers: ["opt"] }, Windows: { key: "u", modifiers: ["alt"] } }} /> ); } diff --git a/extensions/bitwarden/src/components/searchVault/actions/FavoriteItemActions.tsx b/extensions/bitwarden/src/components/searchVault/actions/FavoriteItemActions.tsx index 5092d4cf326a..877cceb575ff 100644 --- a/extensions/bitwarden/src/components/searchVault/actions/FavoriteItemActions.tsx +++ b/extensions/bitwarden/src/components/searchVault/actions/FavoriteItemActions.tsx @@ -28,7 +28,7 @@ function FavoriteItemActions() { title={isLocalFavorite ? "Remove Favorite" : "Mark As Favorite"} onAction={handleToggleFavorite} icon={isLocalFavorite ? Icon.StarDisabled : Icon.Star} - shortcut={{ macOS: { key: "f", modifiers: ["opt"] }, windows: { key: "f", modifiers: ["alt"] } }} + shortcut={{ macOS: { key: "f", modifiers: ["opt"] }, Windows: { key: "f", modifiers: ["alt"] } }} /> )} {(isBitwardenFavorite || isLocalFavorite) && ( @@ -39,7 +39,7 @@ function FavoriteItemActions() { icon={Icon.ArrowUpCircleFilled} shortcut={{ macOS: { key: "arrowUp", modifiers: ["opt", "shift"] }, - windows: { key: "arrowUp", modifiers: ["alt", "shift"] }, + Windows: { key: "arrowUp", modifiers: ["alt", "shift"] }, }} /> diff --git a/extensions/bitwarden/src/components/searchVault/actions/OpenUrlInBrowserAction.tsx b/extensions/bitwarden/src/components/searchVault/actions/OpenUrlInBrowserAction.tsx index 0573dc5cfbb7..0cc712912278 100644 --- a/extensions/bitwarden/src/components/searchVault/actions/OpenUrlInBrowserAction.tsx +++ b/extensions/bitwarden/src/components/searchVault/actions/OpenUrlInBrowserAction.tsx @@ -25,7 +25,7 @@ function OpenUrlInBrowserAction() { title="Open in Browser" onAction={handleOpenUrlInBrowser} icon={Icon.Globe} - shortcut={{ macOS: { key: "o", modifiers: ["opt"] }, windows: { key: "o", modifiers: ["alt"] } }} + shortcut={{ macOS: { key: "o", modifiers: ["opt"] }, Windows: { key: "o", modifiers: ["alt"] } }} /> ); } diff --git a/extensions/bitwarden/src/components/searchVault/actions/PasteTotpAction.tsx b/extensions/bitwarden/src/components/searchVault/actions/PasteTotpAction.tsx index 43daa555c36a..f14090f0b0c5 100644 --- a/extensions/bitwarden/src/components/searchVault/actions/PasteTotpAction.tsx +++ b/extensions/bitwarden/src/components/searchVault/actions/PasteTotpAction.tsx @@ -37,7 +37,7 @@ function PasteTotpAction() { onAction={pasteTotp} shortcut={{ macOS: { key: "t", modifiers: ["opt", "shift"] }, - windows: { key: "t", modifiers: ["alt", "shift"] }, + Windows: { key: "t", modifiers: ["alt", "shift"] }, }} repromptDescription={`Pasting the TOTP of <${selectedItem.name}>`} /> diff --git a/extensions/bitwarden/src/components/searchVault/actions/PasteUsernameAction.tsx b/extensions/bitwarden/src/components/searchVault/actions/PasteUsernameAction.tsx index 63ba9c8e483d..57c6f265ec08 100644 --- a/extensions/bitwarden/src/components/searchVault/actions/PasteUsernameAction.tsx +++ b/extensions/bitwarden/src/components/searchVault/actions/PasteUsernameAction.tsx @@ -30,7 +30,7 @@ function PasteUsernameAction() { repromptDescription={`Pasting the username of <${selectedItem.name}>`} shortcut={{ macOS: { key: "u", modifiers: ["cmd", "opt"] }, - windows: { key: "u", modifiers: ["ctrl", "alt"] }, + Windows: { key: "u", modifiers: ["ctrl", "alt"] }, }} /> ); diff --git a/extensions/bitwarden/src/components/searchVault/actions/ShowNotesAction.tsx b/extensions/bitwarden/src/components/searchVault/actions/ShowNotesAction.tsx index cf6c34334151..a4c6d98c28b4 100644 --- a/extensions/bitwarden/src/components/searchVault/actions/ShowNotesAction.tsx +++ b/extensions/bitwarden/src/components/searchVault/actions/ShowNotesAction.tsx @@ -29,7 +29,7 @@ function ShowNotesAction() { icon={Icon.Eye} onAction={showNotes} repromptDescription={`Showing the notes of <${selectedItem.name}>`} - shortcut={{ macOS: { key: "n", modifiers: ["opt"] }, windows: { key: "n", modifiers: ["alt"] } }} + shortcut={{ macOS: { key: "n", modifiers: ["opt"] }, Windows: { key: "n", modifiers: ["alt"] } }} /> ); } diff --git a/extensions/bitwarden/src/components/searchVault/actions/shared/ShowDetailsScreen.tsx b/extensions/bitwarden/src/components/searchVault/actions/shared/ShowDetailsScreen.tsx index 2f9cef78fbc1..d51109a6acd5 100644 --- a/extensions/bitwarden/src/components/searchVault/actions/shared/ShowDetailsScreen.tsx +++ b/extensions/bitwarden/src/components/searchVault/actions/shared/ShowDetailsScreen.tsx @@ -64,7 +64,7 @@ function ShowDetailsScreen(props: ShowDetailsScreen shortcutKey ? { macOS: { key: shortcutKey, modifiers: ["opt"] }, - windows: { key: shortcutKey, modifiers: ["alt"] }, + Windows: { key: shortcutKey, modifiers: ["alt"] }, } : undefined } diff --git a/extensions/bitwarden/src/create-login.tsx b/extensions/bitwarden/src/create-login.tsx index 0b8d8092f8c9..ae945e83e1e9 100644 --- a/extensions/bitwarden/src/create-login.tsx +++ b/extensions/bitwarden/src/create-login.tsx @@ -138,13 +138,13 @@ function CreateLoginComponent() { icon={showPassword ? Icon.EyeDisabled : Icon.Eye} title={showPassword ? "Hide Password" : "Show Password"} onAction={togglePasswordVisibility} - shortcut={{ macOS: { key: "e", modifiers: ["opt"] }, windows: { key: "e", modifiers: ["alt"] } }} + shortcut={{ macOS: { key: "e", modifiers: ["opt"] }, Windows: { key: "e", modifiers: ["alt"] } }} /> diff --git a/extensions/bitwarden/src/search-sends.tsx b/extensions/bitwarden/src/search-sends.tsx index aeb70ff2f62f..d83d13ae6365 100644 --- a/extensions/bitwarden/src/search-sends.tsx +++ b/extensions/bitwarden/src/search-sends.tsx @@ -339,7 +339,7 @@ function SearchSendsCommandContent() { title="Create New Send" target={} icon={Icon.NewDocument} - shortcut={{ macOS: { key: "n", modifiers: ["opt"] }, windows: { key: "n", modifiers: ["alt"] } }} + shortcut={{ macOS: { key: "n", modifiers: ["opt"] }, Windows: { key: "n", modifiers: ["alt"] } }} /> onRemovePassword(send.id)} icon={Icon.LockUnlocked} - shortcut={{ macOS: { key: "p", modifiers: ["opt"] }, windows: { key: "p", modifiers: ["alt"] } }} + shortcut={{ macOS: { key: "p", modifiers: ["opt"] }, Windows: { key: "p", modifiers: ["alt"] } }} /> )} } icon={Icon.Pencil} - shortcut={{ macOS: { key: "e", modifiers: ["opt"] }, windows: { key: "e", modifiers: ["alt"] } }} + shortcut={{ macOS: { key: "e", modifiers: ["opt"] }, Windows: { key: "e", modifiers: ["alt"] } }} /> onDelete(send.id)} icon={Icon.Trash} - shortcut={{ macOS: { key: "d", modifiers: ["opt"] }, windows: { key: "d", modifiers: ["alt"] } }} + shortcut={{ macOS: { key: "d", modifiers: ["opt"] }, Windows: { key: "d", modifiers: ["alt"] } }} /> {sendManagementActionSection} diff --git a/extensions/bitwarden/src/utils/debug.ts b/extensions/bitwarden/src/utils/debug.ts index fcb11d57282d..5ae0b2c977ab 100644 --- a/extensions/bitwarden/src/utils/debug.ts +++ b/extensions/bitwarden/src/utils/debug.ts @@ -5,10 +5,13 @@ export function treatError(error: unknown, options?: { omitSensitiveValue: strin try { const execaError = error as ExecaError; let errorString: string | undefined; - if (execaError?.stderr) { - errorString = execaError.stderr; - } else if (error instanceof Error) { + if (error instanceof Error) { + // Include message first (execa puts full command there, which can contain passwords) errorString = `${error.name}: ${error.message}`; + const stderrStr = typeof execaError?.stderr === "string" ? execaError.stderr : ""; + if (stderrStr && !errorString.includes(stderrStr)) { + errorString += `\n${stderrStr}`; + } } else if (isObject(error)) { errorString = JSON.stringify(error); } else { @@ -24,6 +27,12 @@ export function treatError(error: unknown, options?: { omitSensitiveValue: strin } } +/** Escapes special regex characters so the string can be used literally in RegExp. */ +function escapeForRegExp(s: string): string { + return s.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"); +} + export function omitSensitiveValueFromString(value: string, sensitiveValue: string) { - return value.replace(new RegExp(sensitiveValue, "i"), "[REDACTED]"); + if (!sensitiveValue) return value; + return value.replace(new RegExp(escapeForRegExp(sensitiveValue), "gi"), "[REDACTED]"); }