12345678910111213declare const __PEACH_VERSION__: string;1415export interface ReleaseNote {16 heading: string;17 body: string;18 breaking?: boolean;19}2021export const PEACH_VERSION: string = typeof __PEACH_VERSION__ !== "undefined"22 ? __PEACH_VERSION__23 : "0.0.0";2425export const CURRENT_NOTICE_ID = "vault-v4-android-minimum-2026-09-05";2627export const CURRENT_NOTES: ReleaseNote[] = [28 {29 heading: "Passphrases & long passwords",30 body: "Peach now supports passphrases and passwords up to 256 characters. Existing vaults remain fully readable.",31 },32 {33 heading: "Update your Android app first",34 body: "Vault V4 is not readable by Peach Android before v2.15.3. Open Peach on Android → Settings → Update, or visit peachpasswords.com to download the latest version. Export a backup on Android before updating.",35 breaking: true,36 },37];3839export function hasReleaseNotes(): boolean {40 return CURRENT_NOTES.length > 0;41}4243const WHATS_NEW_SEEN_KEY = "peach_whats_new_seen";4445export async function shouldShowWhatsNew(): Promise<boolean> {46 if (!hasReleaseNotes()) return false;47 try {48 const seen = await chrome.storage.local.get(WHATS_NEW_SEEN_KEY);49 const last = seen[WHATS_NEW_SEEN_KEY];50 51 52 53 if (last === undefined) return false;54 if (typeof last === "string" && /^\d+\.\d+\.\d+$/.test(last)) {55 56 57 await chrome.storage.local.set({ [WHATS_NEW_SEEN_KEY]: CURRENT_NOTICE_ID });58 return false;59 }60 return last !== CURRENT_NOTICE_ID;61 } catch {62 return false;63 }64}6566export async function markWhatsNewSeen(): Promise<void> {67 try {68 await chrome.storage.local.set({ [WHATS_NEW_SEEN_KEY]: CURRENT_NOTICE_ID });69 } catch {70 71 }72}