camstreamerlib
Version:
Helper library for CamStreamer ACAP applications.
144 lines (143 loc) • 5.99 kB
JavaScript
import { z } from 'zod';
import { paramToUrl, responseStringify } from './internal/utils';
import { ParsingBlobError } from './errors/errors';
export const BASE_URL = '/local/planetracker';
export class PlaneTrackerAPI {
client;
apiUser;
_apiUserQuery;
constructor(client, apiUser) {
this.client = client;
this.apiUser = apiUser;
this._apiUserQuery = paramToUrl(this.apiUser);
}
static getProxyUrlPath = () => `${BASE_URL}/proxy.cgi`;
async checkCameraTime() {
const response = await this._getJson(`${BASE_URL}/camera_time.cgi`);
return z.boolean().parse(response.state);
}
fetchCameraSettings = async () => {
return await this._getJson(`${BASE_URL}/package_camera_settings.cgi`, { action: 'get' });
};
setCameraSettings = async (settingsJsonString) => {
return await this._postJsonEncoded(`${BASE_URL}/package_camera_settings.cgi`, settingsJsonString, {
action: 'set',
});
};
fetchServerSettings = async () => {
return await this._getJson(`${BASE_URL}/package_server_settings.cgi`, { action: 'get' });
};
fetchMapInfo = async () => {
return await this._getJson(`${BASE_URL}/package/getMapInfo.cgi`);
};
fetchFlightInfo = async (icao) => {
return await this._getJson(`${BASE_URL}/package/flightInfo.cgi`, { icao: encodeURIComponent(icao) });
};
getZones = async () => {
return await this._getJson(`${BASE_URL}/package/getZones.cgi`);
};
setZones = async (zonesJsonString) => {
return await this._postJsonEncoded(`${BASE_URL}/package/setZones.cgi?${this._apiUserQuery}`, zonesJsonString);
};
getPriorityList = async () => {
return await this._getJson(`${BASE_URL}/package/getPriorityList.cgi`);
};
setPriorityList = async (priorityListJsonString) => {
return await this._postJsonEncoded(`${BASE_URL}/package/setPriorityList.cgi?${this._apiUserQuery}`, priorityListJsonString);
};
getWhiteList = async () => {
return await this._getJson(`${BASE_URL}/package/getWhiteList.cgi`);
};
setWhiteList = async (whiteListJsonString) => {
return await this._postJsonEncoded(`${BASE_URL}/package/setWhiteList.cgi?${this._apiUserQuery}`, whiteListJsonString);
};
getBlackList = async () => {
return await this._getJson(`${BASE_URL}/package/getBlackList.cgi`);
};
setBlackList = async (blackListJsonString) => {
return await this._postJsonEncoded(`${BASE_URL}/package/setBlackList.cgi?${this._apiUserQuery}`, blackListJsonString);
};
getTrackingMode = async () => {
return await this._getJson(`${BASE_URL}/package/getTrackingMode.cgi`);
};
setTrackingMode = async (modeJsonString) => {
return await this._postJsonEncoded(`${BASE_URL}/package/setTrackingMode.cgi?${this._apiUserQuery}`, modeJsonString);
};
startTrackingPlane = async (icao) => {
return await this.client.get(`${BASE_URL}/package/trackIcao.cgi?icao=${encodeURIComponent(icao)}&${this._apiUserQuery}`);
};
stopTrackingPlane = async () => {
return await this.client.get(`${BASE_URL}/package/resetIcao.cgi?${this._apiUserQuery}`);
};
goToCoordinates = async (lat, lon, alt) => {
const url = `${BASE_URL}/package/goToCoordinates.cgi?lat=${lat}&lon=${lon}&${this._apiUserQuery}`;
return await this.client.get(`${url}${alt !== undefined ? `&alt=${alt}` : ''}`);
};
exportAppSettings = async (dataType) => {
return await this._getBlob(`${BASE_URL}/package_data.cgi`, { action: 'EXPORT', dataType });
};
importAppSettings = async (dataType, formData) => {
return await this.client.post(`${BASE_URL}/package_data.cgi`, formData, { action: 'IMPORT', dataType });
};
resetPtzCalibration = async () => {
return await this.client.get(`${BASE_URL}/package/resetPtzCalibration.cgi?${this._apiUserQuery}`);
};
checkGenetecConnection = async (params) => {
return await this._postUrlEncoded(`${BASE_URL}/package/checkGenetecConnection.cgi`, params);
};
getGenetecCameraList = async (params) => {
const res = await this._postUrlEncoded(`${BASE_URL}/package/getGenetecCameraList.cgi`, params);
return await res.json();
};
serverRunCheck = async () => {
return await this.client.get(`${BASE_URL}/package/serverRunCheck.cgi`);
};
async _getJson(...args) {
const res = await this.client.get(...args);
if (res.ok) {
return await res.json();
}
else {
throw new Error(await responseStringify(res));
}
}
async _getBlob(...args) {
const res = await this.client.get(...args);
if (res.ok) {
return await this.parseBlobResponse(res);
}
else {
throw new Error(await responseStringify(res));
}
}
async parseBlobResponse(response) {
try {
return (await response.blob());
}
catch (err) {
throw new ParsingBlobError(err);
}
}
async _postJsonEncoded(...args) {
const [path, data, params, headers] = args;
const baseHeaders = { 'Accept': 'application/json', 'Content-Type': 'application/json' };
const res = await this.client.post(path, data, params, { ...baseHeaders, ...headers });
if (res.ok) {
return res;
}
else {
throw new Error(await responseStringify(res));
}
}
async _postUrlEncoded(path, params, headers) {
const data = paramToUrl(params);
const baseHeaders = { 'Content-Type': 'application/x-www-form-urlencoded' };
const res = await this.client.post(path, data, {}, { ...baseHeaders, ...headers });
if (res.ok) {
return res;
}
else {
throw new Error(await responseStringify(res));
}
}
}