UNPKG

camstreamerlib

Version:

Helper library for CamStreamer ACAP applications.

144 lines (143 loc) 5.99 kB
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)); } } }