camstreamerlib
Version:
Helper library for CamStreamer ACAP applications.
308 lines (307 loc) • 9.45 kB
JavaScript
import { z } from 'zod';
export const wsAliasResponseSchema = z.object({
alias: z.string(),
ws: z.string(),
ws_initial_message: z.string(),
});
export const connectionSchema = z.object({
protocol: z.union([z.literal('http'), z.literal('https'), z.literal('https_insecure')]),
ip: z.union([z.string().ip(), z.literal('')]),
port: z.number().positive().lt(65535),
user: z.string(),
pass: z.string(),
});
export const widgetSchema = z.object({
enabled: z.boolean().default(true),
coord: z.union([
z.literal('top_left'),
z.literal('top_right'),
z.literal('bottom_left'),
z.literal('bottom_right'),
]),
posX: z.number().nonnegative(),
posY: z.number().nonnegative(),
scale: z.number().positive(),
});
const labelOptionsSchema = z.union([
z.literal('blank'),
z.literal('registration'),
z.literal('call_sign'),
z.literal('flight_number'),
z.literal('icao'),
]);
const identificationLabelSchema = z.object({
firstRow: labelOptionsSchema,
secondRow: labelOptionsSchema,
thirdRow: labelOptionsSchema,
fourthRow: labelOptionsSchema,
opacity: z.number().positive(),
});
export const cameraSettingsSchema = z.object({
units: z.union([z.literal('metric'), z.literal('imperial')]).default('imperial'),
adsbSource: z
.object({
ip: z.union([z.string().ip(), z.literal('')]),
port: z.number().positive().lt(65535),
})
.default({ ip: '', port: 30334 }),
camera: connectionSchema.default({
protocol: 'http',
ip: '127.0.0.1',
port: 80,
user: 'root',
pass: '',
}),
cameraCalibrationProcessConfig: z
.object({
nightSkyCalibrationEnabled: z.boolean(),
scheduleNightSkyCalibrationTimestamp: z.number(),
focusCalibrationPoints: z.string().default(''),
})
.default({
nightSkyCalibrationEnabled: false,
scheduleNightSkyCalibrationTimestamp: 0,
focusCalibrationPoints: '',
}),
cameraConfig: z
.object({
maxZoomLevel: z.number().optional(),
defaultCaptureSizeMeters: z.number().positive().default(120),
captureSizeExtensionMeters: z.number().positive().default(80),
})
.default({
maxZoomLevel: 30,
defaultCaptureSizeMeters: 120,
captureSizeExtensionMeters: 80,
}),
stream: z
.object({
width: z.number().positive(),
height: z.number().positive(),
})
.default({ width: 1920, height: 1080 }),
imageConfig: z
.object({
dayAperture: z.number().nonnegative().min(0).max(100),
nightAperture: z.number().nonnegative().min(0).max(100),
maxGain: z.number().nonnegative().min(0).max(100).default(100),
})
.default({ dayAperture: 50, nightAperture: 0, maxGain: 100 }),
airportConfig: z
.object({
icao: z.string().default(''),
centerLat: z.number(),
centerLon: z.number(),
radius: z.number().nonnegative().default(10000),
})
.default({
icao: '',
centerLat: 0,
centerLon: 0,
radius: 10000,
}),
trackingConfig: z
.object({
prioritizeEmergency: z.boolean(),
trackingZoneWeightIncrease: z.number().int().nonnegative().default(0),
guardTourEnabled: z.boolean().default(false),
guardTourId: z.number().int().nonnegative().default(0),
})
.default({ prioritizeEmergency: true, guardTourEnabled: false, guardTourId: 0 }),
overlayText: z
.object({
displayIcao: z.boolean().optional(),
displayRegistration: z.boolean().optional(),
displayFlightNumber: z.boolean().optional(),
displayAltitude: z.boolean().optional(),
displayVelocity: z.boolean().optional(),
displayDistance: z.boolean().optional(),
displayFOV: z.boolean().optional(),
displayPTError: z.boolean().optional(),
displayPTZSpeed: z.boolean().optional(),
displayVelocityData: z.boolean().optional(),
displaySignalQuality: z.boolean().optional(),
displayAutoTrackingInfo: z.boolean().optional(),
displayGPSCoords: z.boolean().optional(),
displayVapixQuery: z.boolean().optional(),
displayFocus: z.boolean().optional(),
displayAperture: z.boolean().optional(),
displaySunDistance: z.boolean().optional(),
displayTickTime: z.boolean().optional(),
displayAircraftInfo: z.boolean().optional(),
})
.optional(),
widget: widgetSchema.default({
enabled: true,
coord: 'top_right',
posX: 10,
posY: 10,
scale: 100,
}),
airportWidget: widgetSchema.default({
enabled: true,
coord: 'top_left',
posX: 10,
posY: 10,
scale: 100,
}),
fr24FlightInfoSource: z
.object({
enabled: z.boolean().default(false),
priority: z.number().int().positive().default(1),
apiToken: z.string().default(''),
validateFlights: z.boolean().default(true),
})
.default({
enabled: false,
priority: 1,
apiToken: '',
validateFlights: true,
}),
radarcapeFlightInfoSource: z
.object({
enabled: z.boolean().default(false),
priority: z.number().int().positive().default(2),
ip: z.union([z.string().ip(), z.literal('')]).default(''),
port: z.number().positive().lt(65535).default(80),
})
.default({
enabled: false,
priority: 2,
ip: '',
port: 80,
}),
identificationLabel: identificationLabelSchema.default({
firstRow: 'registration',
secondRow: 'blank',
thirdRow: 'blank',
fourthRow: 'blank',
opacity: 30,
}),
acs: connectionSchema
.extend({
enabled: z.boolean(),
sourceKey: z.string(),
})
.default({
enabled: false,
protocol: 'https_insecure',
ip: '',
port: 29204,
user: '',
pass: '',
sourceKey: '',
}),
genetec: connectionSchema
.extend({
enabled: z.boolean(),
baseUri: z.string().default(''),
appId: z.string().default(''),
cameraList: z.string().array().default([]),
})
.default({
enabled: false,
protocol: 'http',
ip: '',
port: 4590,
user: '',
pass: '',
baseUri: 'WebSdk',
appId: '',
cameraList: [],
}),
});
export const serverSettingsSchema = z.object({
cameraCalibration: z
.object({
posLat: z.number(),
posLon: z.number(),
geoidHN: z.number(),
altitudeAmsl: z.number(),
rotationEast: z.number(),
rotationNorth: z.number(),
rotationUp: z.number(),
tiltTransformationCoefA: z.number(),
tiltCameraKnownPoint: z.number(),
tiltRealKnownPoint: z.number(),
})
.default({
posLat: 50,
posLon: 14,
geoidHN: 45,
altitudeAmsl: 372,
rotationEast: 0,
rotationNorth: 0,
rotationUp: 0,
tiltTransformationCoefA: 1.0,
tiltCameraKnownPoint: 90,
tiltRealKnownPoint: 90,
}),
});
export const getIcaoSchema = z.object({
icao: z.string(),
});
export const trackingModeSchema = z.object({
mode: z.union([z.literal('MANUAL'), z.literal('AUTOMATIC')]),
});
export const flightInfoSchema = z.object({
callsign: z.string().optional(),
flightNumber: z.string().optional(),
registration: z.string().optional(),
aircraftType: z.string().optional(),
airlines: z.string().optional(),
originAirport: z
.object({
icao: z.string().optional(),
iata: z.string().optional(),
city: z.string().optional(),
})
.optional(),
destinationAirport: z.object({
icao: z.string().optional(),
iata: z.string().optional(),
city: z.string().optional(),
}),
flightImages: z
.array(z.object({
src: z.string().optional(),
photographer: z.string().optional(),
}))
.optional(),
});
export const priorityListSchema = z.object({
priorityList: z.array(z.string()).default([]),
});
export const whiteListSchema = z.object({
whiteList: z.array(z.string()).default([]),
});
export const blackListSchema = z.object({
blackList: z.array(z.string()).default([]),
});
export const mapTypeSchema = z.enum(['roadmap', 'satellite']);
export const mapInfoSchema = z.object({
minZoom: z.number().nonnegative(),
maxZoom: z.number().nonnegative(),
mapTypes: z.array(mapTypeSchema),
tileSize: z.number().nonnegative(),
});
export const zonesSchema = z.object({
zones: z
.array(z.object({
enabled: z.boolean().default(true),
name: z.string().optional(),
area: z
.array(z.object({
lat: z.number(),
lon: z.number(),
}))
.nonempty(),
minAltitudeAmsl: z.number().optional(),
maxAltitudeAmsl: z.number().optional(),
minSpeedKmph: z.number().optional(),
maxSpeedKmph: z.number().optional(),
flightDirection: z.enum(['all', 'arrival', 'departure']).default('all'),
weight: z.number(),
}))
.default([]),
});