Files
openchamber/packages/ui/src/lib/platform.ts
T

27 lines
1.2 KiB
TypeScript
Raw Normal View History

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';
};