d550f48a729d

fix: Restore Advanced control for passkey entries (v4.9.8)

time
2026-08-14 20:37 UTC · 2 months ago
machine
koh2
parent
03887ea0c034
5 files manifest.firefox.json+1 −1manifest.json+1 −1package.json+1 −1src/popup/views/Entry.tsx+1 −1src/popup/views/contracts.test.tsx+42 −0
manifest.firefox.json+1 −1
@@ -1,7 +1,7 @@11 {22   "manifest_version": 3,33   "name": "Peach Password Manager",4-  "version": "4.9.7",4+  "version": "4.9.8",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.9.7",5+  "version": "4.9.8",66   "description": "Zero-knowledge password manager",77   "action": {88     "default_popup": "src/popup/index.html",

view file

package.json+1 −1
@@ -1,6 +1,6 @@11 {22   "name": "peach",3-  "version": "4.9.7",3+  "version": "4.9.8",44   "description": "Zero-knowledge password manager",55   "license": "GPL-3.0-only",66   "type": "module",

view file

src/popup/views/Entry.tsx+1 −1
@@ -1467,7 +1467,7 @@14671467               </Show>14681468 14691469               {/* ── Advanced (canary + passkey) ───────────────────── */}1470-              <Show when={entry().type === "login"}>1470+              <Show when={entry().type !== "note" && entry().type !== "card"}>14711471                 <button14721472                   class="peach-add-field-link peach-entry-add-link"14731473                   onClick={() => setShowAdvanced((v) => !v)}

view file

src/popup/views/contracts.test.tsx+42 −0
@@ -947,6 +947,48 @@947947     });948948   });949949 950+  it("Entry shows Advanced for passkey-bearing credential entries", async () => {951+    const container = mount(952+      <EntryView953+        entry={sampleEntry({954+          type: "passkey",955+          username: undefined,956+          password: undefined,957+          totp: undefined,958+          canary: undefined,959+          passkey: {960+            rpId: "vercel.com",961+            rpName: "Vercel",962+            credentialId: "cred-1",963+            publicKeyCose: "cose",964+            userHandle: "handle",965+            userName: "june",966+            userDisplayName: "June",967+            algorithm: -7,968+            signCount: 0,969+            aaguid: "",970+            backupEligible: false,971+            backupState: false,972+            createdAt: 1,973+          },974+        })}975+        onDelete={vi.fn()}976+        onFieldSaved={vi.fn(async () => undefined)}977+      />978+    );979+980+    const advanced = Array.from(container.querySelectorAll(".peach-entry-add-link")).find(981+      (button) => button.textContent?.includes("Advanced")982+    ) as HTMLButtonElement | undefined;983+    expect(advanced).toBeDefined();984+    expect(advanced?.textContent).toContain("+ Advanced");985+986+    advanced!.click();987+    await flushView();988+989+    expect(container.textContent).toContain("passkey · vercel.com");990+  });991+950992   it("Entry refuses to send an empty password update and copies TOTP through COPY", async () => {951993     sendMessageMock.mockResolvedValue({ ok: true });952994     const onFieldSaved = vi.fn(async () => undefined);

view file