export interface CtrlAttrs { [key: string]: CtrlAttr; } export type SimulationCommands = | 'start' | 'pause' | 'resume' | 'clear' | 'end' | 'add' | 'test-mode'; export type DeviceCommands = 'start_tunnel' | 'stop_tunnel' | 'shutdown' | 'reboot'; export type TunnelCommands = | 'start' | 'start-watcher' | 'end-watcher' | 'shutdown' | 'restart' | 'clear' | 'cancel'; export interface CtrlAttr { name: string; cmd: string; cmdClass: string; icon: string; cnfrm: boolean; delay: number; } export interface DevCtrlAttr { name: string; cmd: DeviceCommands; cmdClass: 'device_control'; icon: string; cnfrm: boolean; delay: number; } export interface LocationQueue { [key: string]: LocationMark; } interface LocationMark { loc_id: string; latitude: number | undefined | null; longitude: number | undefined | null; address?: string | undefined | null; delay?: number | undefined | null; start: string | undefined | null; end?: string | undefined | null; } // SERVER TO CLIENT export interface ServerToClientEvents { noArg: () => void; withAck: (a: string, callback: (b: number) => void) => void; simulation_status: (c: SimulationStatus) => void; status: (d: StatusUpdate) => void; device_status: (d: DeviceStatus) => void; error: (data: ErrorFull) => void; message: (e: string) => void; icloud_2fa_request: (callback: (e: number) => void) => void; fmf_update: (d: FindMyUpdate) => void; } export interface SimulationStatus { loc_id: string; status: boolean; latitude: number; longitude: number; start: string; end?: string; next_move?: number; } export interface StatusUpdate { connected_clients: { [key: string]: string }; current_location: { loc_id: string; latitude: number | undefined | null; longitude: number | undefined | null; start?: string | undefined | null; }; device_name: string | undefined | null; fmf_location: FindMyUpdate | undefined | null; icloud: { consumer_queue: number | undefined | null; consumer_task: string | undefined | null; monitor_enabled: boolean; monitor_task: string | undefined | null; monitor_running: boolean; }; next_move?: number | undefined | null; set_location_enabled: boolean; simulation_queue: { active: boolean; data: { [key: string]: LocationMark; }; order: string[]; state: string | undefined | null; worker_task: string | undefined | null; }; test_mode: boolean; tunnel: string | undefined | null; tunnel_watcher_running: boolean; device_count?: number | undefined | null; udid?: string | null; product_version?: string | null | undefined; phone_number?: string | null | undefined; developer_mode_enabled?: boolean | undefined | null; ddi_mounted?: boolean; rsd_address?: string | null | undefined; rsd_port?: number | undefined | null; lockdown_trusted_port?: number | undefined | null; lockdown_untrusted_port?: number | undefined | null; lockdown_trusted_reachable?: boolean | undefined | null; lockdown_untrusted_reachable?: boolean | undefined | null; dtservicehub_reachable?: boolean | undefined | null; } interface DeviceStatus { device_connected: boolean; device_count: number; udid?: string | null; device_name?: string | null; product_version?: string | null; phone_number?: string | null; developer_mode_enabled?: boolean; ddi_mounted?: boolean; rsd_address?: string | null; rsd_port?: number; lockdown_trusted_port?: number; lockdown_untrusted_port?: number; lockdown_trusted_reachable?: boolean; lockdown_untrusted_reachable?: boolean; dtservicehub_reachable?: boolean; } export interface ErrorFull { type: string; error: string; } export interface FindMyUpdate { altitude: number; batteryLevel: number; deviceDisplayName: string; deviceStatus: number; horizontalAccuracy: number; latitude: number; longitude: number; name: string; timeStamp: number; verticalAccuracy: number; } // END SERVER TO CLIENT // CLIENT TO SERVER export interface ClientToServerEvents { message: (e: string, callback: (b: boolean, r: string) => void) => void; request_update: (callback: (response: StatusUpdate) => void) => void; simulation_control: ( args: { command: SimulationCommands; latitude?: number | null | undefined; longitude?: number | null | undefined; delay?: number | undefined; }, callback: (response: SimulationControlResponse) => void, ) => void; device_control: ( args: { command: DeviceCommands; delay?: number; }, callback?: (response: DeviceControlResponse) => void, ) => void; tunnel_control: ( args: { command: TunnelCommands; delay?: number; }, callback?: (response: DeviceControlResponse) => void, ) => void; icloud_monitor_control: ( args: { command: string; }, callback?: (response: iCloudMonitorResponse) => void, ) => void; } export interface SimulationControlResponse { status: string; command: SimulationCommands; loc_id: string; message?: string | undefined; latitude?: number | undefined | null; longitude?: number | undefined | null; delay?: number | undefined | null; start_time?: string | undefined | null; end_time?: string | undefined | null; } interface DeviceControlResponse { status: string; command: DeviceCommands; delay?: number; } export interface iCloudMonitorResponse { status: string; command: string; icloud_monitor_enabled?: boolean | undefined | null; icloud_monitor_running?: boolean | undefined | null; message?: string | undefined | null; } // END CLIENT TO SERVER export interface Meta { totalCount: number; } export interface coords { lat: number; lng: number; } import type { OpenStreetMapProvider } from 'leaflet-geosearch'; export interface SearchControlProps { provider: OpenStreetMapProvider; showMarker: boolean; autoClose: boolean; updateMap: boolean; showPopup: boolean; style: 'button' | 'bar'; acceptAutoLoad: boolean; autoComplete: boolean; autoCompleteDelay: number; retainZoomLevel: boolean; animateZoom: boolean; keepResult: boolean; } export interface CurrentLocation { loc_id: string; latitude: number | null | undefined; longitude: number | null | undefined; // start_time?: string | null | undefined; // end_time?: string | null | undefined next_move?: number | null | undefined; } export interface NextLocation { loc_id: string; latitude: number; longitude: number; time_at_location?: number | null; } export interface NominatimReverseResponse { place_id: number; licence: string; osm_type: string; osm_id: number; lat: string; lon: string; class: string; type: string; place_rank: number; importance: number; addresstype: string; name: string; display_name: string; address: NominatimAddress; boundingbox: string[]; } export interface NominatimAddress { house_number: string; road: string; village?: string; city?: string; county: string; state: string; 'ISO3166-2-lvl4': string; postcode: string; country: string; country_code: string; } export interface routeSegments { fromWaypoint: number; toWaypoint: number; distanceMeters: number; timeSeconds: number; toCoordinates: LatLng; } export interface RoutesSet { [key: string]: RouteSet; } export interface LatLng { lat: number | null | undefined; lng: number | null | undefined; } export interface routeDirections { dirIndex: number; coordinateIndex: number; text: string; distance: number; time: number; coordinates: LatLng | null | undefined; } export interface RouteSet { start: [number, number] | [null, null] | [undefined, undefined] | null | undefined; end: [number, number] | [null, null] | [undefined, undefined] | null | undefined; wayPoints?: [number, number][] | [null, null] | [undefined, undefined] | null | undefined; } // TypeScript Interface for Reverse Geocoding Response export interface NominatimResponse { house_number?: string | null | undefined; road: string; neighbourhood?: string | null | undefined; suburb?: string | null | undefined; county: string; city?: string | null | undefined; village?: string | null | undefined; state: string; 'ISO3166-2-lvl4': string; postcode: string; country: string; country_code: string; } export interface NominatimRequest { latitude: number; longitude: number; }