/** Which step of the desktop update failed (the native side prefixes its errors). */ export type UpdatePhase = 'check' | 'download' | 'install'; /** Where to get the installer by hand when the in-app update keeps failing. */ export const MANUAL_DOWNLOAD_URL = { windows: 'https://code.lotusguild.org/LotusGuild/cinny-desktop/releases/download/latest/LotusChat-x86_64-setup.exe', other: 'https://code.lotusguild.org/LotusGuild/cinny-desktop/releases/tag/latest', }; export const manualDownloadUrl = (userAgent: string): string => /Windows/i.test(userAgent) ? MANUAL_DOWNLOAD_URL.windows : MANUAL_DOWNLOAD_URL.other; const NETWORK_PATTERN = /error sending request|timed out|timeout|connection|connect|dns|network|reset|refused|unreachable|Could not fetch a valid release/i; export const isNetworkUpdateError = (message: string): boolean => NETWORK_PATTERN.test(message); /** Split `download: error sending request …` into its phase and the raw message. */ export const parseUpdateError = ( raw: string, fallback: UpdatePhase, ): { phase: UpdatePhase; message: string } => { const match = /^(check|download|install): ([\s\S]*)$/.exec(raw); return match ? { phase: match[1] as UpdatePhase, message: match[2] } : { phase: fallback, message: raw }; }; /** * A plain-language sentence for an update failure. The raw error ("error * sending request for url (…nsis.zip)") told users nothing about what to do. */ export const describeUpdateError = (phase: UpdatePhase, message: string): string => { const network = isNetworkUpdateError(message); if (phase === 'check') { return network ? 'Couldn’t reach the update server. It may be busy, or your connection dropped. Lotus Chat still works; try again in a minute.' : 'Couldn’t check for updates. Lotus Chat still works; try again later.'; } if (phase === 'download') { return network ? 'The update didn’t finish downloading after several tries. The update server may be busy. Try again in a minute, or download the installer yourself.' : /signature|minisign|base64/i.test(message) ? 'The downloaded update didn’t pass its safety check, so it wasn’t installed. Try again, or download the installer yourself.' : 'The update couldn’t be downloaded. Try again, or download the installer yourself.'; } return 'The update downloaded but couldn’t be installed. Download the installer yourself and run it; your chats and settings are kept.'; };