The popup's saveState() and the background's updateState() each read the stored record, change it and write it back, and each was 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, shared by every page and the background except a page in a Firefox private window) from the read to the write, through withLock() in src/shared/browserApi.js; the recovery screen's reset takes it too. 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"
|
|
}
|
|
}
|