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

view file

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

view file

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 (

view file

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     }

view file

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"

view file