906db68f57b8

fix identity bucket routing: email-shaped usernames go to email suggestions (v2.41.1)

time
2026-05-13 20:01 UTC · 5 months ago
machine
koh2
parent
a7684e67e614
5 files manifest.firefox.json+1 −1manifest.json+1 −1package.json+1 −1src/popup/views/Add.tsx+7 −4src/popup/views/Entry.tsx+4 −1
manifest.firefox.json+1 −1
@@ -1,7 +1,7 @@11 {22   "manifest_version": 3,33   "name": "Peach",4-  "version": "2.41.0",4+  "version": "2.41.1",55   "description": "Zero-knowledge password manager",66   "browser_specific_settings": {77     "gecko": {

view file

manifest.json+1 −1
@@ -1,7 +1,7 @@11 {22   "manifest_version": 3,33   "name": "Peach",4-  "version": "2.41.0",4+  "version": "2.41.1",55   "description": "Zero-knowledge password manager",66   "action": {77     "default_popup": "src/popup/index.html",

view file

package.json+1 −1
@@ -1,6 +1,6 @@11 {22   "name": "peach",3-  "version": "2.41.0",3+  "version": "2.41.1",44   "description": "Zero-knowledge password manager",55   "type": "module",66   "scripts": {

view file

src/popup/views/Add.tsx+7 −4
@@ -53,8 +53,11 @@5353     const usernameMap = new Map<string, number>();5454     for (const entry of props.entries ?? []) {5555       const uname = entry.username?.trim() ?? "";56-      const em = (entry as VaultEntry & { email?: string }).email?.trim() ?? "";57-      if (uname) usernameMap.set(uname, (usernameMap.get(uname) ?? 0) + 1);56+      const em = entry.email?.trim() ?? "";57+      if (uname) {58+        if (uname.includes("@")) emailMap.set(uname, (emailMap.get(uname) ?? 0) + 1);59+        else usernameMap.set(uname, (usernameMap.get(uname) ?? 0) + 1);60+      }5861       if (em) emailMap.set(em, (emailMap.get(em) ?? 0) + 1);5962     }6063     const result: Array<{ value: string; count: number; type: "email" | "username" }> = [];@@ -385,7 +388,7 @@385388                   }}386389                 />387390               </div>388-              <Show when={activeIdentityField() === "username" && allIdentities().length > 0}>391+              <Show when={activeIdentityField() === "username" && identitySuggestions().length > 0}>389392                 <IdentitySuggestList390393                   listRef={(el) => (usernameSuggestEl = el)}391394                   inputRef={() => usernameInputEl}@@ -425,7 +428,7 @@425428                   }}426429                 />427430               </div>428-              <Show when={activeIdentityField() === "email" && allIdentities().length > 0}>431+              <Show when={activeIdentityField() === "email" && identitySuggestions().length > 0}>429432                 <IdentitySuggestList430433                   listRef={(el) => (emailSuggestEl = el)}431434                   inputRef={() => emailInputEl}

view file

src/popup/views/Entry.tsx+4 −1
@@ -92,7 +92,10 @@9292     for (const e of props.entries ?? []) {9393       const uname = e.username?.trim() ?? "";9494       const em = e.email?.trim() ?? "";95-      if (uname) usernameMap.set(uname, (usernameMap.get(uname) ?? 0) + 1);95+      if (uname) {96+        if (uname.includes("@")) emailMap.set(uname, (emailMap.get(uname) ?? 0) + 1);97+        else usernameMap.set(uname, (usernameMap.get(uname) ?? 0) + 1);98+      }9699       if (em) emailMap.set(em, (emailMap.get(em) ?? 0) + 1);97100     }98101     const result: Array<{ value: string; count: number; type: "email" | "username" }> = [];

view file