Files
sim-location-frontend/src/components/models.ts
2026-04-04 11:29:19 -04:00

353 lines
8.3 KiB
TypeScript

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