camstreamerlib
Version:
Helper library for CamStreamer ACAP applications.
194 lines (193 loc) • 6.63 kB
JavaScript
import { z } from 'zod';
import { trackingModeSchema, zonesSchema } from '../PlaneTrackerAPI';
const apiFlightDataSchema = z.object({
icao: z.string(),
lat: z.number(),
lon: z.number(),
heading: z.number(),
groundSpeed: z.number(),
altitudeAMSL: z.number(),
cameraDistance: z.number(),
autoTrackingOrder: z.number(),
whiteListed: z.boolean(),
blackListed: z.boolean(),
priorityListed: z.boolean(),
autoSelectionIgnored: z.boolean(),
signalQuality: z.number(),
emitterCategorySet: z.number().default(4),
emitterCategory: z.number().default(3),
emergencyState: z.boolean(),
emergencyStatusMessage: z.string(),
});
const apiUserSchema = z.object({
userId: z.string(),
userName: z.string(),
userPriority: z.number(),
ip: z.string(),
});
const apiStringUserSchema = z.object({
userId: z.string(),
userName: z.string(),
userPriority: z.string(),
});
export var PlaneTrackerWsEvents;
(function (PlaneTrackerWsEvents) {
PlaneTrackerWsEvents["FLIGHT_LIST"] = "FLIGHT_LIST";
PlaneTrackerWsEvents["CAMERA_POSITION"] = "CAMERA_POSITION";
PlaneTrackerWsEvents["TRACKING_START"] = "TRACKING_START";
PlaneTrackerWsEvents["TRACKING_STOP"] = "TRACKING_STOP";
PlaneTrackerWsEvents["USER_ACTION"] = "USER_ACTION";
PlaneTrackerWsEvents["CONNECTED_USERS"] = "CONNECTED_USERS";
PlaneTrackerWsEvents["FORCE_TRACKING_STATUS"] = "FORCE_TRACKING_STATUS";
})(PlaneTrackerWsEvents || (PlaneTrackerWsEvents = {}));
export var PlaneTrackerUserActions;
(function (PlaneTrackerUserActions) {
PlaneTrackerUserActions["TRACK_ICAO"] = "trackIcao.cgi";
PlaneTrackerUserActions["RESET_ICAO"] = "resetIcao.cgi";
PlaneTrackerUserActions["SET_PRIORITY_LIST"] = "setPriorityList.cgi";
PlaneTrackerUserActions["SET_BLACK_LIST"] = "setBlackList.cgi";
PlaneTrackerUserActions["SET_WHITE_LIST"] = "setWhiteList.cgi";
PlaneTrackerUserActions["GO_TO_COORDINATES"] = "goToCoordinates.cgi";
PlaneTrackerUserActions["SET_TRACKING_MODE"] = "setTrackingMode.cgi";
PlaneTrackerUserActions["SET_ZONES"] = "setZones.cgi";
PlaneTrackerUserActions["RESET_PTZ_CALIBRATION"] = "resetPtzCalibration.cgi";
PlaneTrackerUserActions["LOCK_API"] = "lockApi.cgi";
PlaneTrackerUserActions["UNLOCK_API"] = "unlockApi.cgi";
})(PlaneTrackerUserActions || (PlaneTrackerUserActions = {}));
export const planeTrackerUserActionData = z.discriminatedUnion('cgi', [
z.object({
cgi: z.literal(PlaneTrackerUserActions.TRACK_ICAO),
ip: z.string(),
params: apiStringUserSchema.extend({
icao: z.string(),
}),
}),
z.object({
cgi: z.literal(PlaneTrackerUserActions.RESET_ICAO),
ip: z.string(),
params: apiStringUserSchema,
}),
z.object({
cgi: z.literal(PlaneTrackerUserActions.SET_PRIORITY_LIST),
ip: z.string(),
params: apiStringUserSchema,
postJsonBody: z.object({
priorityList: z.array(z.string()),
}),
}),
z.object({
cgi: z.literal(PlaneTrackerUserActions.SET_BLACK_LIST),
ip: z.string(),
params: apiStringUserSchema,
postJsonBody: z.object({
blackList: z.array(z.string()),
}),
}),
z.object({
cgi: z.literal(PlaneTrackerUserActions.SET_WHITE_LIST),
ip: z.string(),
params: apiStringUserSchema,
postJsonBody: z.object({
whiteList: z.array(z.string()),
}),
}),
z.object({
cgi: z.literal(PlaneTrackerUserActions.GO_TO_COORDINATES),
ip: z.string(),
params: apiStringUserSchema.extend({
lat: z.string(),
lon: z.string(),
}),
}),
z.object({
cgi: z.literal(PlaneTrackerUserActions.SET_TRACKING_MODE),
ip: z.string(),
params: apiStringUserSchema,
postJsonBody: trackingModeSchema,
}),
z.object({
cgi: z.literal(PlaneTrackerUserActions.SET_ZONES),
ip: z.string(),
params: apiStringUserSchema,
postJsonBody: zonesSchema,
}),
z.object({
cgi: z.literal(PlaneTrackerUserActions.RESET_PTZ_CALIBRATION),
ip: z.string(),
params: apiStringUserSchema,
}),
z.object({
cgi: z.literal(PlaneTrackerUserActions.LOCK_API),
ip: z.string(),
params: apiStringUserSchema.extend({
timeout: z.string(),
}),
}),
z.object({
cgi: z.literal(PlaneTrackerUserActions.UNLOCK_API),
ip: z.string(),
params: apiStringUserSchema,
}),
]);
const ptrEventsDataSchema = z.discriminatedUnion('type', [
z.object({
type: z.literal('CAMERA_POSITION'),
lat: z.number(),
lon: z.number(),
azimuth: z.number().min(0).max(360),
elevation: z.number().min(-90).max(90),
fov: z.number(),
}),
z.object({
type: z.literal('TRACKING_START'),
icao: z.string(),
}),
z.object({
type: z.literal('TRACKING_STOP'),
}),
z.object({
type: z.literal('FLIGHT_LIST'),
list: z.array(apiFlightDataSchema),
}),
z.object({
type: z.literal('USER_ACTION'),
ip: z.string(),
params: apiStringUserSchema.extend({
lat: z.string().optional(),
lon: z.string().optional(),
timeout: z.string().optional(),
}),
cgi: z.enum([
PlaneTrackerUserActions.TRACK_ICAO,
PlaneTrackerUserActions.RESET_ICAO,
PlaneTrackerUserActions.SET_PRIORITY_LIST,
PlaneTrackerUserActions.SET_BLACK_LIST,
PlaneTrackerUserActions.SET_WHITE_LIST,
PlaneTrackerUserActions.GO_TO_COORDINATES,
PlaneTrackerUserActions.SET_TRACKING_MODE,
PlaneTrackerUserActions.SET_ZONES,
PlaneTrackerUserActions.RESET_PTZ_CALIBRATION,
PlaneTrackerUserActions.LOCK_API,
PlaneTrackerUserActions.UNLOCK_API,
]),
postJsonBody: z.any(),
}),
z.object({
type: z.literal('CONNECTED_USERS'),
users: z.array(apiUserSchema),
}),
z.object({
type: z.literal('FORCE_TRACKING_STATUS'),
enabled: z.boolean(),
icao: z.string().optional(),
}),
z.object({
type: z.literal('API_LOCK_STATUS'),
isLocked: z.boolean(),
user: apiUserSchema.optional(),
}),
]);
export const ptrEventsSchema = z.discriminatedUnion('type', [
z.object({ type: z.literal('init'), data: ptrEventsDataSchema }),
...ptrEventsDataSchema.options,
]);