The popup's saveState() and the background's updateState() each read the stored record, change it and write it back, each ordered only within its own context, so a write by one could land between the other's read and write and be lost. Both now hold the browser's lock (navigator.locks) from the read to the write, through withLock() in src/shared/browserApi.js, and the recovery screen's reset takes it too. A page in a Firefox private window gets locks of its own and is not covered. The lock also orders a page's own saves, so both per-context queues are gone. The unit tests get a small lock from a Jest setup file. Model: opus-5-5
39 lines
1.1 KiB
JSON
39 lines
1.1 KiB
JSON
{
|
|
"name": "autistmask",
|
|
"version": "0.1.0",
|
|
"description": "Minimal Ethereum wallet browser extension for Chrome and Firefox",
|
|
"author": "sneak <sneak@sneak.berlin>",
|
|
"license": "GPL-3.0",
|
|
"private": true,
|
|
"scripts": {
|
|
"test": "jest --forceExit --maxWorkers=3",
|
|
"test:verbose": "jest --forceExit --maxWorkers=3 --verbose",
|
|
"build": "node build.js",
|
|
"lint": "eslint . && prettier --check .",
|
|
"fmt": "prettier --write .",
|
|
"fmt-check": "prettier --check ."
|
|
},
|
|
"jest": {
|
|
"setupFiles": [
|
|
"<rootDir>/tests/support/navigatorLocks.js"
|
|
]
|
|
},
|
|
"devDependencies": {
|
|
"@eslint/js": "10.0.1",
|
|
"@tailwindcss/cli": "4.3.1",
|
|
"esbuild": "^0.27.3",
|
|
"eslint": "10.8.1",
|
|
"globals": "17.11.0",
|
|
"jest": "^30.2.0",
|
|
"playwright-core": "1.56.0",
|
|
"prettier": "^3.8.1",
|
|
"tailwindcss": "4.3.1"
|
|
},
|
|
"dependencies": {
|
|
"ethereum-blockies-base64": "^1.0.2",
|
|
"ethers": "^6.16.0",
|
|
"libsodium-wrappers-sumo": "^0.8.2",
|
|
"qrcode": "^1.5.4"
|
|
}
|
|
}
|