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
11 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 −7
manifest.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": {

view file

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",

view file

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/",

view file

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+});

view file

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 }

view file

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)}`);

view file at the parent

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");

view file

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";

view file

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;

view file

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-}

view file at the parent

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

view file at the parent