import { isDesktopShell, isVSCodeRuntime } from '@/lib/desktop'; /** True when running inside the native Capacitor shell (iOS/Android app), not the web/PWA. */ export const isCapacitorApp = (): boolean => { if (typeof window === 'undefined') return false; const capacitor = (window as typeof window & { Capacitor?: { isNativePlatform?: () => boolean } }).Capacitor; return capacitor?.isNativePlatform?.() === true || window.location.protocol === 'capacitor:'; }; export type ClientPlatform = 'ios' | 'android' | 'vscode' | 'desktop' | 'web'; /** * The runtime surface this client is. Used by the push presence model: only 'ios'/'android' * count as mobile (push recipients); everything else is an interactive surface that suppresses * mobile push while visible. */ export const getClientPlatform = (): ClientPlatform => { if (typeof window !== 'undefined') { const capacitor = (window as typeof window & { Capacitor?: { getPlatform?: () => string } }).Capacitor; const native = capacitor?.getPlatform?.(); if (native === 'ios' || native === 'android') return native; } if (isVSCodeRuntime()) return 'vscode'; if (isDesktopShell()) return 'desktop'; return 'web'; };