eb3bc24fb4cc
chore: Remove orphan configs and dist mirror (v4.10.43)
- time
- 2026-08-29 20:22 UTC · 1 month ago
- machine
- koh2
- parent
- 92e94fdc3572
↓ peach-browser-eb3bc24f.tar.gzatlas at this save
files changed11 files
manifest.firefox.json+1 −1manifest.json+1 −1package.json+3 −3playwright.config.ts+2 −2scripts/clean-chrome-dist.mjs+5 −6scripts/sync-chrome-dist.mjs+0 −25tests/codex-pdf-restore.spec.ts+1 −1tests/helpers/vault.ts+1 −1tests/vault-security.spec.ts+13 −13tsconfig.background.json+0 −20tsconfig.tests.json+0 −7manifest.firefox.json+1 −1
@@ -1,7 +1,7 @@11 {22 "manifest_version": 3,33 "name": "Peach Password Manager",4- "version": "4.10.42",4+ "version": "4.10.43",55 "description": "Zero-knowledge password manager",66 "browser_specific_settings": {77 "gecko": {manifest.json+1 −1
@@ -2,7 +2,7 @@22 "manifest_version": 3,33 "minimum_chrome_version": "116",44 "name": "Peach Password Manager",5- "version": "4.10.42",5+ "version": "4.10.43",66 "description": "Zero-knowledge password manager",77 "action": {88 "default_popup": "src/popup/index.html",package.json+3 −3
@@ -1,6 +1,6 @@11 {22 "name": "peach",3- "version": "4.10.42",3+ "version": "4.10.43",44 "description": "Zero-knowledge password manager",55 "license": "GPL-3.0-only",66 "type": "module",@@ -9,9 +9,9 @@99 "dev": "vite",1010 "build:noise-core": "node scripts/build-noise-core.mjs",1111 "build": "npm run build:chrome && npm run build:firefox",12- "build:chrome": "node scripts/clean-chrome-dist.mjs && BUILD_TARGET=chrome vite build && node scripts/sync-chrome-dist.mjs && npm run check:sw",12+ "build:chrome": "node scripts/clean-chrome-dist.mjs && BUILD_TARGET=chrome vite build && npm run check:sw",1313 "build:firefox": "node scripts/clean-firefox-artifacts.mjs && BUILD_TARGET=firefox vite build",14- "build:e2e": "PEACH_E2E_PASSKEYS=1 BUILD_TARGET=chrome vite build && node scripts/sync-chrome-dist.mjs",14+ "build:e2e": "PEACH_E2E_PASSKEYS=1 BUILD_TARGET=chrome vite build",1515 "package:firefox": "node scripts/clean-firefox-artifacts.mjs && npm run build:firefox && cd dist-firefox && web-ext build --overwrite-dest",1616 "lint": "biome check src/",1717 "lint:fix": "biome check --write src/",playwright.config.ts+2 −2
@@ -4,7 +4,7 @@44 55 const __filename = fileURLToPath(import.meta.url);66 const __dirname = dirname(__filename);7-const EXTENSION_PATH = join(__dirname, "dist");7+const EXTENSION_PATH = join(__dirname, "dist-chrome");88 99 export default defineConfig({1010 testDir: "./tests",@@ -30,4 +30,4 @@3030 testMatch: "**/*.spec.ts",3131 },3232 ],33-});\ No newline at end of file33+});scripts/clean-chrome-dist.mjs+5 −6
@@ -6,10 +6,9 @@66 const __dirname = path.dirname(__filename);77 const rootDir = path.resolve(__dirname, "..");88 9-for (const dir of ["dist-chrome", "dist"]) {10- const target = path.join(rootDir, dir);11- if (existsSync(target)) {12- rmSync(target, { recursive: true, force: true });13- console.log(`Cleaned ${dir}`);14- }9+const dir = "dist-chrome";10+const target = path.join(rootDir, dir);11+if (existsSync(target)) {12+ rmSync(target, { recursive: true, force: true });13+ console.log(`Cleaned ${dir}`);1514 }scripts/sync-chrome-dist.mjs+0 −25
@@ -1,25 +0,0 @@1-import { existsSync, mkdirSync } from "node:fs";2-import { execSync } from "node:child_process";3-import path from "node:path";4-import { fileURLToPath } from "node:url";5-6-const __filename = fileURLToPath(import.meta.url);7-const __dirname = path.dirname(__filename);8-const rootDir = path.resolve(__dirname, "..");9-const sourceDir = path.join(rootDir, "dist-chrome");10-const targetDir = path.join(rootDir, "dist");11-12-if (!existsSync(sourceDir)) {13- console.error(`Chrome build output not found: ${sourceDir}`);14- process.exit(1);15-}16-17-// Use shell cp -r to avoid EACCES on mounted filesystems (cpSync fails on stale files)18-mkdirSync(targetDir, { recursive: true });19-try {20- execSync(`cp -r ${sourceDir}/. ${targetDir}/`, { stdio: "pipe" });21-} catch {22- // Permission warnings on unchanged stale files are non-fatal23-}24-25-console.log(`Synced ${path.relative(rootDir, sourceDir)} -> ${path.relative(rootDir, targetDir)}`);tests/codex-pdf-restore.spec.ts+1 −1
@@ -32,7 +32,7 @@3232 3333 const __filename = fileURLToPath(import.meta.url);3434 const __dirname = dirname(__filename);35-const EXTENSION_PATH = join(__dirname, "..", "dist");35+const EXTENSION_PATH = join(__dirname, "..", "dist-chrome");3636 3737 const CODEX_PDF_PATH = "/Users/june/Downloads/peach-codex-2026-08-20.pdf";3838 const CURRENT_GEN_PDF_PATH = join(__dirname, "fixtures", "peach-codex-current-gen.pdf");tests/helpers/vault.ts+1 −1
@@ -16,7 +16,7 @@1616 1717 const __filename = fileURLToPath(import.meta.url);1818 const __dirname = dirname(__filename);19-export const EXTENSION_PATH = join(__dirname, "..", "..", "dist");19+export const EXTENSION_PATH = join(__dirname, "..", "..", "dist-chrome");2020 2121 /** Passes both the 12-character minimum and the zxcvbn strength gate. */2222 export const VAULT_PASSWORD = "correct horse battery staple";tests/vault-security.spec.ts+13 −13
@@ -225,11 +225,11 @@225225 });226226 227227 test("SEQC02 - no eval() in content script", async () => {228- const distFiles = await fs.readdir(join(__dirname, "..", "dist", "assets"));228+ const distFiles = await fs.readdir(join(__dirname, "..", "dist-chrome", "assets"));229229 const jsFiles = distFiles.filter(f => f.endsWith(".js"));230230 let foundEval = false;231231 for (const file of jsFiles) {232- const content = await fs.readFile(join(__dirname, "..", "dist", "assets", file), "utf-8");232+ const content = await fs.readFile(join(__dirname, "..", "dist-chrome", "assets", file), "utf-8");233233 if (content.includes("eval(") && !content.includes("new Function")) {234234 foundEval = true;235235 break;@@ -241,7 +241,7 @@241241 242242 test("SEQC03 - CSP meta tag present in HTML", async () => {243243 const manifest = JSON.parse(244- await fs.readFile(join(__dirname, "..", "dist", "manifest.json"), "utf-8"),244+ await fs.readFile(join(__dirname, "..", "dist-chrome", "manifest.json"), "utf-8"),245245 ) as { content_security_policy?: { extension_pages?: string } };246246 expect(manifest.content_security_policy?.extension_pages).toContain("script-src 'self'");247247 await ctx.close();@@ -256,11 +256,11 @@256256 257257 258258 test("SECE02 - AES-GCM used for vault encryption", async () => {259- const aesFiles = await fs.readdir(join(__dirname, "..", "dist", "assets")).then(f =>259+ const aesFiles = await fs.readdir(join(__dirname, "..", "dist-chrome", "assets")).then(f =>260260 f.filter(f => f.includes("aes"))261261 );262262 expect(aesFiles.length).toBeGreaterThan(0);263- const content = await fs.readFile(join(__dirname, "..", "dist", "assets", aesFiles[0]), "utf-8");263+ const content = await fs.readFile(join(__dirname, "..", "dist-chrome", "assets", aesFiles[0]), "utf-8");264264 expect(content).toMatch(/AES-GCM|aes-gcm|AESGCM|AES.*GCM/);265265 await ctx.close();266266 });@@ -268,11 +268,11 @@268268 269269 270270 test("SECE05 - salt generated for each encryption operation", async () => {271- const distFiles = await fs.readdir(join(__dirname, "..", "dist", "assets"));271+ const distFiles = await fs.readdir(join(__dirname, "..", "dist-chrome", "assets"));272272 const jsFiles = distFiles.filter(f => f.endsWith(".js"));273273 let hasSaltGen = false;274274 for (const file of jsFiles) {275- const content = await fs.readFile(join(__dirname, "..", "dist", "assets", file), "utf-8");275+ const content = await fs.readFile(join(__dirname, "..", "dist-chrome", "assets", file), "utf-8");276276 if (content.includes("generateSalt") || content.includes("getRandomValues")) {277277 hasSaltGen = true;278278 break;@@ -299,11 +299,11 @@299299 });300300 301301 test("SECE07 - export uses PBKDF2 with high iterations", async () => {302- const exportFile = await fs.readdir(join(__dirname, "..", "dist", "assets")).then(f =>302+ const exportFile = await fs.readdir(join(__dirname, "..", "dist-chrome", "assets")).then(f =>303303 f.find(f => f.includes("export") || f.includes("Export"))304304 );305305 expect(exportFile).toBeDefined();306- const content = await fs.readFile(join(__dirname, "..", "dist", "assets", exportFile!), "utf-8");306+ const content = await fs.readFile(join(__dirname, "..", "dist-chrome", "assets", exportFile!), "utf-8");307307 if (content.includes("PBKDF2")) {308308 expect(content).toMatch(/iterations.*[0-9]{4,}|250000/);309309 }@@ -346,11 +346,11 @@346346 test.beforeEach(async () => { ctx = await makeContext(); });347347 348348 test("SECB01 - HIBP API call uses k-anonymity model", async () => {349- const distFiles = await fs.readdir(join(__dirname, "..", "dist", "assets"));349+ const distFiles = await fs.readdir(join(__dirname, "..", "dist-chrome", "assets"));350350 const jsFiles = distFiles.filter(f => f.endsWith(".js"));351351 let foundHIBP = false;352352 for (const file of jsFiles) {353- const content = await fs.readFile(join(__dirname, "..", "dist", "assets", file), "utf-8");353+ const content = await fs.readFile(join(__dirname, "..", "dist-chrome", "assets", file), "utf-8");354354 if (content.includes("hibp") || content.includes("pwned")) {355355 foundHIBP = true;356356 expect(content).toMatch(/range|hash|k-anon|sha1/i);@@ -362,11 +362,11 @@362362 });363363 364364 test("SECB02 - breach check does not expose full password", async () => {365- const distFiles = await fs.readdir(join(__dirname, "..", "dist", "assets"));365+ const distFiles = await fs.readdir(join(__dirname, "..", "dist-chrome", "assets"));366366 const jsFiles = distFiles.filter(f => f.endsWith(".js"));367367 let foundHash = false;368368 for (const file of jsFiles) {369- const content = await fs.readFile(join(__dirname, "..", "dist", "assets", file), "utf-8");369+ const content = await fs.readFile(join(__dirname, "..", "dist-chrome", "assets", file), "utf-8");370370 if (content.includes("breach") || content.includes("hibp")) {371371 if (content.includes("sha1") || content.includes("SHA-1")) {372372 foundHash = true;tsconfig.background.json+0 −20
@@ -1,20 +0,0 @@1-{2- "compilerOptions": {3- "target": "ESNext",4- "module": "ESNext",5- "moduleResolution": "bundler",6- "allowSyntheticDefaultImports": true,7- "esModuleInterop": true,8- "jsx": "preserve",9- "jsxImportSource": "solid-js",10- "strict": true,11- "noUnusedLocals": true,12- "noUnusedParameters": true,13- "noEmit": true,14- "skipLibCheck": true,15- "isolatedModules": true,16- "resolveJsonModule": true,17- "types": ["vite/client", "chrome"]18- },19- "include": ["src"]20-}tsconfig.tests.json+0 −7
@@ -1,7 +0,0 @@1-{2- "extends": "./tsconfig.json",3- "compilerOptions": {4- "types": ["node", "playwright"]5- },6- "include": ["tests"]7-}\ No newline at end of file