UNPKG

camstreamerlib

Version:

Helper library for CamStreamer ACAP applications.

124 lines (123 loc) 5.09 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.GenetecAgent = exports.cameraDetailsResponseSchema = exports.cameraDetailSchema = void 0; const zod_1 = require("zod"); const utils_1 = require("../internal/utils"); const ACTION = 'AddCameraBookmark'; const GET_CAMERAS_URL = 'report/EntityConfiguration?q=EntityTypes@Camera'; const GET_CAMERAS_DETAILS_URL = '/entity?q='; const cameraGuidsResponseSchema = zod_1.z.object({ Rsp: zod_1.z.object({ Status: zod_1.z.string(), Result: zod_1.z.array(zod_1.z.object({ Guid: zod_1.z.string() })), }), }); const connectionResponseSchema = zod_1.z.object({ Rsp: zod_1.z.object({ Status: zod_1.z.string(), }), }); exports.cameraDetailSchema = zod_1.z.object({ Guid: zod_1.z.string().optional(), Name: zod_1.z.string().optional(), EntityType: zod_1.z.string().optional(), }); exports.cameraDetailsResponseSchema = zod_1.z.object({ Rsp: zod_1.z.object({ Status: zod_1.z.string(), Result: zod_1.z.union([zod_1.z.array(exports.cameraDetailSchema), exports.cameraDetailSchema]), }), }); class GenetecAgent { settings; baseUrl; credentials; constructor(options = {}) { this.settings = { protocol: options.protocol ?? 'http', ip: options.ip ?? '127.0.0.1', port: options.port ?? 80, base_uri: options.base_uri ?? 'WebSdk', user: options.user ?? 'root', pass: options.pass ?? '', app_id: options.app_id ?? '', }; this.baseUrl = `${this.settings.protocol}://${this.settings.ip}:${this.settings.port}/${this.settings.base_uri}`; this.credentials = btoa(`${this.settings.user};${this.settings.app_id}:${this.settings.pass}`); } async checkConnection() { const requestOptions = this.getRequestOptions('GET'); const res = await fetch(`${this.baseUrl}/`, requestOptions); if (!res.ok) { throw new Error(await (0, utils_1.responseStringify)(res)); } return connectionResponseSchema.parse(await res.json()); } async getAllCameraGuids() { const requestOptions = this.getRequestOptions('GET'); const res = await fetch(`${this.baseUrl}/${GET_CAMERAS_URL}`, requestOptions); if (!res.ok) { throw new Error(await (0, utils_1.responseStringify)(res)); } return cameraGuidsResponseSchema.parse(await res.json()); } async getCameraDetails(guids, parameters) { const params = parameters.join(','); let camerasGuids = []; const requestOptions = this.getRequestOptions('GET'); const allCameras = []; const chunkSize = 10; while (guids.length > 0) { const chunk = guids.slice(0, chunkSize); guids.splice(0, chunkSize); camerasGuids = chunk.map((item) => item.Guid); const camerasDetailsUrl = []; for (const guid of camerasGuids) { camerasDetailsUrl.push(`entity=${guid},${params}`); } const res = await fetch(`${this.baseUrl}/${GET_CAMERAS_DETAILS_URL}${camerasDetailsUrl.join(',')}`, requestOptions); if (!res.ok) { throw new Error(await (0, utils_1.responseStringify)(res)); } const data = exports.cameraDetailsResponseSchema.parse(await res.json()); const resultArray = Array.isArray(data.Rsp.Result) ? data.Rsp.Result : [data.Rsp.Result]; allCameras.push(...resultArray); } return allCameras; } async sendBookmark(guids, bookmarkText) { const cameraEntitiesUrl = []; const timeStamp = this.getTimeStamp(); const requestOptions = this.getRequestOptions('POST'); for (const guid of guids) { cameraEntitiesUrl.push(`${ACTION}(${guid},${timeStamp},${bookmarkText})`); } const res = await fetch(`${this.baseUrl}/action?q=${cameraEntitiesUrl.join(',')}`, requestOptions); if (!res.ok) { throw new Error(await (0, utils_1.responseStringify)(res)); } return res; } getRequestOptions(method) { return { method, headers: new Headers({ Authorization: `Basic ${this.credentials}`, Accept: 'text/json', }), redirect: 'follow', }; } getTimeStamp() { const date = new Date(); const year = date.getUTCFullYear(); const month = (0, utils_1.pad)(date.getUTCMonth() + 1, 2); const day = (0, utils_1.pad)(date.getUTCDate(), 2); const hours = (0, utils_1.pad)(date.getUTCHours(), 2); const minutes = (0, utils_1.pad)(date.getUTCMinutes(), 2); const seconds = (0, utils_1.pad)(date.getUTCSeconds(), 2); const miliSeconds = (0, utils_1.pad)(date.getUTCMilliseconds(), 2); return `${year}-${month}-${day}T${hours}:${minutes}:${seconds}.${miliSeconds}Z`; } } exports.GenetecAgent = GenetecAgent;