mirror of
https://github.com/AeThex-Corporation/AeThex-OS.git
synced 2026-04-18 06:17:21 +00:00
102 lines
2.6 KiB
TypeScript
102 lines
2.6 KiB
TypeScript
export type PlatformType = 'web' | 'desktop' | 'mobile';
|
|
|
|
declare global {
|
|
interface Window {
|
|
__TAURI__?: unknown;
|
|
flutter_inappwebview?: unknown;
|
|
Capacitor?: unknown;
|
|
}
|
|
}
|
|
|
|
interface PlatformConfig {
|
|
platform: PlatformType;
|
|
apiBaseUrl: string;
|
|
isSecureContext: boolean;
|
|
supportsNotifications: boolean;
|
|
supportsFileSystem: boolean;
|
|
}
|
|
|
|
let cachedPlatform: PlatformType | null = null;
|
|
|
|
function detectPlatform(): PlatformType {
|
|
if (cachedPlatform !== null) return cachedPlatform;
|
|
|
|
if (typeof window === 'undefined') {
|
|
console.log('[Platform] Detected: web (no window)');
|
|
cachedPlatform = 'web';
|
|
return cachedPlatform;
|
|
}
|
|
|
|
console.log('[Platform] Checking window.Capacitor:', window.Capacitor);
|
|
console.log('[Platform] Checking window.__TAURI__:', window.__TAURI__);
|
|
|
|
if (window.__TAURI__ !== undefined) {
|
|
console.log('[Platform] Detected: desktop (Tauri)');
|
|
cachedPlatform = 'desktop';
|
|
return cachedPlatform;
|
|
}
|
|
|
|
if (window.flutter_inappwebview !== undefined || window.Capacitor !== undefined) {
|
|
console.log('[Platform] Detected: mobile (Capacitor or Flutter)');
|
|
cachedPlatform = 'mobile';
|
|
return cachedPlatform;
|
|
}
|
|
|
|
const userAgent = navigator.userAgent.toLowerCase();
|
|
console.log('[Platform] User agent:', userAgent);
|
|
|
|
if (userAgent.includes('electron')) {
|
|
console.log('[Platform] Detected: desktop (Electron)');
|
|
cachedPlatform = 'desktop';
|
|
return cachedPlatform;
|
|
}
|
|
|
|
if (userAgent.includes('cordova')) {
|
|
console.log('[Platform] Detected: mobile (Cordova)');
|
|
cachedPlatform = 'mobile';
|
|
return cachedPlatform;
|
|
}
|
|
|
|
console.log('[Platform] Detected: web (default)');
|
|
cachedPlatform = 'web';
|
|
return cachedPlatform;
|
|
}
|
|
|
|
function getApiBaseUrl(): string {
|
|
const platform = detectPlatform();
|
|
|
|
if (platform === 'web') {
|
|
return '';
|
|
}
|
|
|
|
const envUrl = import.meta.env.VITE_API_BASE_URL;
|
|
if (envUrl) return envUrl;
|
|
|
|
return 'https://aethex.network';
|
|
}
|
|
|
|
export function getPlatformConfig(): PlatformConfig {
|
|
const platform = detectPlatform();
|
|
|
|
return {
|
|
platform,
|
|
apiBaseUrl: getApiBaseUrl(),
|
|
isSecureContext: typeof window !== 'undefined' && window.isSecureContext,
|
|
supportsNotifications: typeof Notification !== 'undefined',
|
|
supportsFileSystem: typeof window !== 'undefined' && 'showOpenFilePicker' in window,
|
|
};
|
|
}
|
|
|
|
export function isDesktop(): boolean {
|
|
return detectPlatform() === 'desktop';
|
|
}
|
|
|
|
export function isMobile(): boolean {
|
|
return detectPlatform() === 'mobile';
|
|
}
|
|
|
|
export function isWeb(): boolean {
|
|
return detectPlatform() === 'web';
|
|
}
|
|
|
|
export const platformConfig = getPlatformConfig();
|