72b4d869e53d
allow login entries with no password — support email+OTP accounts; update Get Peach Pro URL to Polar checkout (v3.6.94)
- time
- 2026-05-24 07:34 UTC · 5 months ago
- machine
- koh2
- parent
- 35bc480f3621
↓ peach-browser-72b4d869.tar.gzatlas at this save
files changed5 files
manifest.firefox.json+1 −1manifest.json+1 −1src/background/vault.ts+2 −17src/popup/views/Add.tsx+1 −2src/popup/views/Settings.tsx+1 −1manifest.firefox.json+1 −1
@@ -2,7 +2,7 @@22 "_comment_audio_capture": "Firefox does not honor the Chrome 'audioCapture' optional_permission — getUserMedia in WebExtensions is gated solely by the runtime permission prompt. Microphone access for chirp pairing works from the popup under the existing '<all_urls>' host permission; no manifest entry is required or accepted here.",33 "manifest_version": 3,44 "name": "Peach",5- "version": "3.6.93",5+ "version": "3.6.94",66 "description": "Zero-knowledge password manager",77 "browser_specific_settings": {88 "gecko": {manifest.json+1 −1
@@ -1,7 +1,7 @@11 {22 "manifest_version": 3,33 "name": "Peach",4- "version": "3.6.93",4+ "version": "3.6.94",55 "description": "Zero-knowledge password manager",66 "action": {77 "default_popup": "src/popup/index.html",src/background/vault.ts+2 −17
@@ -1611,19 +1611,8 @@16111611 ...(passwordChanged ? { passwordChangedAt: Date.now() } : {}),16121612 };16131613 1614- // A login entry must carry SOMETHING fillable — either a password or a1615- // passkey credential. An empty-password login with no passkey is dead1616- // state. Permit the password-clear when a passkey is attached (that's1617- // the legitimate "drop the password, keep the passkey" path).1618- if (1619- entries[idx].type === "login" &&1620- !entries[idx].password &&1621- !entries[idx].passkey1622- ) {1623- entries[idx] = current;1624- throw new Error("password or passkey required");1625- }16261614 1615+16271616 // Card entries must retain their card number16281617 if (entries[idx].type === "card" && !entries[idx].cardNumber) {16291618 entries[idx] = current;@@ -1915,11 +1904,7 @@19151904 if (type === "passkey") type = "login";19161905 19171906 if (!title) throw new Error("title is required");1918- // A login entry needs either a password or a passkey credential to be useful.1919- // Passkey-only entries (passkey present, no password) are valid.1920- if (type === "login" && !entry.password?.trim() && !entry.passkey) {1921- throw new Error("password or passkey required");1922- }1907+19231908 if (entry.passkey) {19241909 const p = entry.passkey;19251910 if (src/popup/views/Add.tsx+1 −2
@@ -121,7 +121,6 @@121121 122122 const canSave = () => {123123 if (!title().trim()) return false;124- if (selectedType() === "login" && !password().trim()) return false;125124 if (selectedType() === "card" && (!cardholderName().trim() || !cardNumber().trim())) return false;126125 return true;127126 };@@ -209,7 +208,7 @@209208 ? "title is required"210209 : selectedType() === "card"211210 ? "cardholder name and card number are required"212- : "title and password are required"211+ : "title is required"213212 );214213 return;215214 }src/popup/views/Settings.tsx+1 −1
@@ -1641,7 +1641,7 @@16411641 $39 <span class="peach-pro-pricing-sub">once · yours forever</span>16421642 </p>16431643 <a1644- href="https://peachpasswords.com/#pricing"1644+ href="https://buy.polar.sh/polar_cl_IXSFIPojx67rcOTksn8LkH5mnU3osPHtYqBIl1eyuIz"16451645 target="_blank"16461646 rel="noopener noreferrer"16471647 class="peach-pro-upgrade-cta"