import { NativeModules, Platform } from 'react-native'; export interface DeviceInfo { // Common fields systemName?: string; systemVersion?: string; model?: string; name?: string; // iOS specific localizedModel?: string; isMultitaskingSupported?: boolean; userInterfaceIdiom?: number; identifierForVendor?: string; deviceType?: string; deviceGeneration?: string; screenBounds?: { width: number; height: number; }; screenNativeBounds?: { width: number; height: number; }; screenScale?: number; batteryLevel?: number; batteryState?: number; isSimulator?: boolean; architecture?: string; // Android specific manufacturer?: string; brand?: string; device?: string; product?: string; board?: string; hardware?: string; serial?: string; osVersion?: string; sdkVersion?: number; codename?: string; incremental?: string; securityPatch?: string; buildId?: string; buildTime?: string; buildUser?: string; buildHost?: string; screen?: { width: number; height: number; density: number; densityDpi: number; scaledDensity: number; xdpi: number; ydpi: number; }; isEmulator?: boolean; isTablet?: boolean; androidId?: string; kernelVersion?: string; javaVersion?: string; } export interface DeviceIdModuleInterface { getDeviceId(): Promise; getDeviceInfo(): Promise; } // Get the native module const { DeviceIdModule } = NativeModules; // Type-safe wrapper export const DeviceIdService: DeviceIdModuleInterface = { async getDeviceId(): Promise { if (!DeviceIdModule) { throw new Error('DeviceIdModule is not available'); } return DeviceIdModule.getDeviceId(); }, async getDeviceInfo(): Promise { if (!DeviceIdModule) { throw new Error('DeviceIdModule is not available'); } return DeviceIdModule.getDeviceInfo(); } }; export default DeviceIdService;