camstreamerlib 4.0.0-beta.2 → 4.0.0-beta.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -1
- package/cjs/CamOverlayAPI.d.ts +629 -0
- package/cjs/CamOverlayAPI.js +255 -0
- package/{CamOverlayDrawingAPI.d.ts → cjs/CamOverlayDrawingAPI.d.ts} +1 -1
- package/cjs/CamOverlayDrawingAPI.js +235 -0
- package/cjs/CamOverlayPainter/Frame.js +301 -0
- package/{CamOverlayPainter → cjs/CamOverlayPainter}/Painter.d.ts +14 -3
- package/cjs/CamOverlayPainter/Painter.js +171 -0
- package/cjs/CamOverlayPainter/ResourceManager.js +46 -0
- package/cjs/CamScripterAPI.d.ts +36 -0
- package/cjs/CamScripterAPI.js +73 -0
- package/{CamScripterAPICameraEventsGenerator.d.ts → cjs/CamScripterAPICameraEventsGenerator.d.ts} +1 -1
- package/cjs/CamScripterAPICameraEventsGenerator.js +162 -0
- package/{CamStreamerAPI.d.ts → cjs/CamStreamerAPI.d.ts} +5 -5
- package/cjs/CamStreamerAPI.js +59 -0
- package/{CamSwitcherAPI.d.ts → cjs/CamSwitcherAPI.d.ts} +10 -6
- package/cjs/CamSwitcherAPI.js +351 -0
- package/{CamSwitcherEvents.d.ts → cjs/CamSwitcherEvents.d.ts} +2 -2
- package/cjs/CamSwitcherEvents.js +67 -0
- package/cjs/CreatePackage.js +106 -0
- package/cjs/PlaneTrackerAPI.d.ts +47 -0
- package/cjs/PlaneTrackerAPI.js +176 -0
- package/{VapixAPI.d.ts → cjs/VapixAPI.d.ts} +19 -7
- package/cjs/VapixAPI.js +491 -0
- package/{VapixEvents.d.ts → cjs/VapixEvents.d.ts} +1 -1
- package/cjs/VapixEvents.js +88 -0
- package/{errors → cjs/errors}/errors.d.ts +3 -0
- package/cjs/errors/errors.js +86 -0
- package/{events → cjs/events}/AxisCameraStationEvents.d.ts +3 -2
- package/cjs/events/AxisCameraStationEvents.js +48 -0
- package/{events → cjs/events}/GenetecAgent.d.ts +4 -3
- package/cjs/events/GenetecAgent.js +123 -0
- package/cjs/index.d.ts +18 -0
- package/cjs/index.js +42 -0
- package/cjs/internal/Digest.js +42 -0
- package/cjs/internal/ProxyClient.d.ts +11 -0
- package/cjs/internal/ProxyClient.js +46 -0
- package/cjs/internal/constants.js +4 -0
- package/cjs/internal/transformers.js +32 -0
- package/cjs/internal/types.d.ts +35 -0
- package/cjs/internal/types.js +2 -0
- package/{internal → cjs/internal}/utils.d.ts +5 -1
- package/cjs/internal/utils.js +69 -0
- package/{internal → cjs/internal}/versionCompare.d.ts +2 -2
- package/cjs/internal/versionCompare.js +53 -0
- package/cjs/models/CamOverlayAPI/accuweatherSchema.d.ts +84 -0
- package/cjs/models/CamOverlayAPI/accuweatherSchema.js +48 -0
- package/cjs/models/CamOverlayAPI/constants.d.ts +11 -0
- package/cjs/models/CamOverlayAPI/constants.js +14 -0
- package/cjs/models/CamOverlayAPI/customGraphicsSchema.d.ts +699 -0
- package/cjs/models/CamOverlayAPI/customGraphicsSchema.js +73 -0
- package/cjs/models/CamOverlayAPI/fileSchema.d.ts +28 -0
- package/cjs/models/CamOverlayAPI/fileSchema.js +17 -0
- package/cjs/models/CamOverlayAPI/imagesSchema.d.ts +95 -0
- package/cjs/models/CamOverlayAPI/imagesSchema.js +10 -0
- package/cjs/models/CamOverlayAPI/index.d.ts +13 -0
- package/cjs/models/CamOverlayAPI/index.js +29 -0
- package/cjs/models/CamOverlayAPI/infotickerSchema.d.ts +96 -0
- package/cjs/models/CamOverlayAPI/infotickerSchema.js +27 -0
- package/cjs/models/CamOverlayAPI/pipSchema.d.ts +125 -0
- package/cjs/models/CamOverlayAPI/pipSchema.js +40 -0
- package/cjs/models/CamOverlayAPI/ptzCompassSchema.d.ts +93 -0
- package/cjs/models/CamOverlayAPI/ptzCompassSchema.js +26 -0
- package/cjs/models/CamOverlayAPI/ptzSchema.d.ts +118 -0
- package/cjs/models/CamOverlayAPI/ptzSchema.js +13 -0
- package/cjs/models/CamOverlayAPI/screenSharingSchema.d.ts +58 -0
- package/cjs/models/CamOverlayAPI/screenSharingSchema.js +9 -0
- package/cjs/models/CamOverlayAPI/webCameraSharingSchema.d.ts +58 -0
- package/cjs/models/CamOverlayAPI/webCameraSharingSchema.js +9 -0
- package/cjs/models/CamOverlayAPI/widgetCommonSchema.d.ts +126 -0
- package/cjs/models/CamOverlayAPI/widgetCommonSchema.js +76 -0
- package/cjs/models/CamOverlayAPI/widgetsSchema.d.ts +2823 -0
- package/cjs/models/CamOverlayAPI/widgetsSchema.js +27 -0
- package/cjs/node/DefaultClient.d.ts +16 -0
- package/cjs/node/DefaultClient.js +56 -0
- package/cjs/node/HttpRequestSender.js +89 -0
- package/cjs/node/HttpServer.js +96 -0
- package/{node → cjs/node}/WsClient.d.ts +1 -1
- package/cjs/node/WsClient.js +149 -0
- package/{node → cjs/node}/WsEventClient.d.ts +1 -1
- package/cjs/node/WsEventClient.js +22 -0
- package/cjs/node/index.d.ts +2 -0
- package/cjs/node/index.js +7 -0
- package/cjs/types/CamOverlayAPI.d.ts +328 -0
- package/cjs/types/CamOverlayAPI.js +26 -0
- package/{types → cjs/types}/CamScripterAPI.d.ts +66 -7
- package/cjs/types/CamScripterAPI.js +35 -0
- package/{types → cjs/types}/CamStreamerAPI.d.ts +16 -5
- package/cjs/types/CamStreamerAPI.js +32 -0
- package/{types → cjs/types}/CamSwitcherAPI.d.ts +5 -5
- package/cjs/types/CamSwitcherAPI.js +137 -0
- package/{types/CamswitcherEvents.d.ts → cjs/types/CamSwitcherEvents.d.ts} +77 -0
- package/cjs/types/CamSwitcherEvents.js +70 -0
- package/cjs/types/PlaneTrackerAPI.d.ts +2 -0
- package/cjs/types/PlaneTrackerAPI.js +2 -0
- package/{types → cjs/types}/VapixAPI.d.ts +479 -519
- package/cjs/types/VapixAPI.js +139 -0
- package/cjs/types/common.js +14 -0
- package/cjs/web/DefaultClient.d.ts +6 -0
- package/cjs/web/DefaultClient.js +22 -0
- package/cjs/web/WsClient.js +62 -0
- package/cjs/web/index.d.ts +2 -0
- package/cjs/web/index.js +7 -0
- package/esm/CamOverlayAPI.d.ts +629 -0
- package/esm/CamOverlayAPI.js +251 -0
- package/esm/CamOverlayDrawingAPI.d.ts +86 -0
- package/{CamOverlayDrawingAPI.js → esm/CamOverlayDrawingAPI.js} +6 -3
- package/esm/CamOverlayPainter/Frame.d.ts +96 -0
- package/esm/CamOverlayPainter/Painter.d.ts +48 -0
- package/{CamOverlayPainter → esm/CamOverlayPainter}/Painter.js +4 -1
- package/esm/CamOverlayPainter/ResourceManager.d.ts +14 -0
- package/{CamOverlayPainter → esm/CamOverlayPainter}/ResourceManager.js +6 -10
- package/esm/CamScripterAPI.d.ts +36 -0
- package/esm/CamScripterAPI.js +69 -0
- package/esm/CamScripterAPICameraEventsGenerator.d.ts +74 -0
- package/{CamScripterAPICameraEventsGenerator.js → esm/CamScripterAPICameraEventsGenerator.js} +6 -3
- package/esm/CamStreamerAPI.d.ts +16 -0
- package/{CamStreamerAPI.js → esm/CamStreamerAPI.js} +4 -10
- package/esm/CamSwitcherAPI.d.ts +52 -0
- package/{CamSwitcherAPI.js → esm/CamSwitcherAPI.js} +24 -27
- package/esm/CamSwitcherEvents.d.ts +18 -0
- package/{CamSwitcherEvents.js → esm/CamSwitcherEvents.js} +1 -1
- package/esm/CreatePackage.d.ts +1 -0
- package/esm/PlaneTrackerAPI.d.ts +47 -0
- package/esm/PlaneTrackerAPI.js +172 -0
- package/esm/VapixAPI.d.ts +78 -0
- package/{VapixAPI.js → esm/VapixAPI.js} +93 -60
- package/esm/VapixEvents.d.ts +43 -0
- package/{VapixEvents.js → esm/VapixEvents.js} +3 -3
- package/esm/errors/errors.d.ts +37 -0
- package/{errors → esm/errors}/errors.js +6 -0
- package/esm/events/AxisCameraStationEvents.d.ts +10 -0
- package/{events → esm/events}/AxisCameraStationEvents.js +1 -1
- package/esm/events/GenetecAgent.d.ts +175 -0
- package/{events → esm/events}/GenetecAgent.js +5 -5
- package/esm/index.d.ts +18 -0
- package/esm/index.js +18 -0
- package/esm/internal/Digest.d.ts +4 -0
- package/{internal → esm/internal}/Digest.js +6 -6
- package/esm/internal/ProxyClient.d.ts +11 -0
- package/{internal → esm/internal}/ProxyClient.js +6 -4
- package/esm/internal/constants.d.ts +1 -0
- package/esm/internal/transformers.d.ts +5 -0
- package/esm/internal/types.d.ts +35 -0
- package/esm/internal/types.js +1 -0
- package/esm/internal/utils.d.ts +15 -0
- package/{internal → esm/internal}/utils.js +20 -1
- package/esm/internal/versionCompare.d.ts +6 -0
- package/esm/models/CamOverlayAPI/accuweatherSchema.d.ts +84 -0
- package/esm/models/CamOverlayAPI/accuweatherSchema.js +45 -0
- package/esm/models/CamOverlayAPI/constants.d.ts +11 -0
- package/esm/models/CamOverlayAPI/constants.js +11 -0
- package/esm/models/CamOverlayAPI/customGraphicsSchema.d.ts +699 -0
- package/esm/models/CamOverlayAPI/customGraphicsSchema.js +70 -0
- package/esm/models/CamOverlayAPI/fileSchema.d.ts +28 -0
- package/esm/models/CamOverlayAPI/fileSchema.js +14 -0
- package/esm/models/CamOverlayAPI/imagesSchema.d.ts +95 -0
- package/esm/models/CamOverlayAPI/imagesSchema.js +7 -0
- package/esm/models/CamOverlayAPI/index.d.ts +13 -0
- package/esm/models/CamOverlayAPI/index.js +13 -0
- package/esm/models/CamOverlayAPI/infotickerSchema.d.ts +96 -0
- package/esm/models/CamOverlayAPI/infotickerSchema.js +24 -0
- package/esm/models/CamOverlayAPI/pipSchema.d.ts +125 -0
- package/esm/models/CamOverlayAPI/pipSchema.js +37 -0
- package/esm/models/CamOverlayAPI/ptzCompassSchema.d.ts +93 -0
- package/esm/models/CamOverlayAPI/ptzCompassSchema.js +23 -0
- package/esm/models/CamOverlayAPI/ptzSchema.d.ts +118 -0
- package/esm/models/CamOverlayAPI/ptzSchema.js +10 -0
- package/esm/models/CamOverlayAPI/screenSharingSchema.d.ts +58 -0
- package/esm/models/CamOverlayAPI/screenSharingSchema.js +6 -0
- package/esm/models/CamOverlayAPI/webCameraSharingSchema.d.ts +58 -0
- package/esm/models/CamOverlayAPI/webCameraSharingSchema.js +6 -0
- package/esm/models/CamOverlayAPI/widgetCommonSchema.d.ts +126 -0
- package/esm/models/CamOverlayAPI/widgetCommonSchema.js +73 -0
- package/esm/models/CamOverlayAPI/widgetsSchema.d.ts +2823 -0
- package/esm/models/CamOverlayAPI/widgetsSchema.js +24 -0
- package/esm/node/DefaultClient.d.ts +16 -0
- package/{node → esm/node}/DefaultClient.js +9 -7
- package/esm/node/HttpRequestSender.d.ts +28 -0
- package/esm/node/HttpServer.d.ts +21 -0
- package/{node → esm/node}/HttpServer.js +1 -1
- package/esm/node/WsClient.d.ts +39 -0
- package/esm/node/WsEventClient.d.ts +13 -0
- package/esm/node/index.d.ts +2 -0
- package/esm/node/index.js +2 -0
- package/esm/types/CamOverlayAPI.d.ts +328 -0
- package/esm/types/CamOverlayAPI.js +14 -0
- package/esm/types/CamScripterAPI.d.ts +126 -0
- package/esm/types/CamScripterAPI.js +32 -0
- package/esm/types/CamStreamerAPI.d.ts +150 -0
- package/{types → esm/types}/CamStreamerAPI.js +4 -0
- package/esm/types/CamSwitcherAPI.d.ts +814 -0
- package/esm/types/CamSwitcherEvents.d.ts +568 -0
- package/{types/CamswitcherEvents.js → esm/types/CamSwitcherEvents.js} +8 -0
- package/esm/types/PlaneTrackerAPI.d.ts +2 -0
- package/esm/types/PlaneTrackerAPI.js +1 -0
- package/esm/types/VapixAPI.d.ts +1664 -0
- package/{types → esm/types}/VapixAPI.js +30 -23
- package/esm/types/common.d.ts +37 -0
- package/esm/web/DefaultClient.d.ts +6 -0
- package/{web → esm/web}/DefaultClient.js +6 -4
- package/esm/web/WsClient.d.ts +13 -0
- package/{web → esm/web}/WsClient.js +2 -2
- package/esm/web/index.d.ts +2 -0
- package/esm/web/index.js +2 -0
- package/package.json +6 -6
- package/CamOverlayAPI.d.ts +0 -31
- package/CamOverlayAPI.js +0 -172
- package/CamScripterAPI.d.ts +0 -19
- package/CamScripterAPI.js +0 -66
- package/internal/ProxyClient.d.ts +0 -11
- package/internal/common.d.ts +0 -40
- package/internal/common.js +0 -23
- package/node/DefaultClient.d.ts +0 -15
- package/types/CamOverlayAPI.d.ts +0 -188
- package/types/CamOverlayAPI.js +0 -44
- package/types/CamScripterAPI.js +0 -17
- package/web/DefaultClient.d.ts +0 -6
- package/{CamOverlayPainter → cjs/CamOverlayPainter}/Frame.d.ts +0 -0
- package/{CamOverlayPainter → cjs/CamOverlayPainter}/ResourceManager.d.ts +0 -0
- package/{CreatePackage.d.ts → cjs/CreatePackage.d.ts} +0 -0
- package/{internal → cjs/internal}/Digest.d.ts +0 -0
- package/{internal → cjs/internal}/constants.d.ts +0 -0
- package/{internal → cjs/internal}/transformers.d.ts +0 -0
- package/{node → cjs/node}/HttpRequestSender.d.ts +0 -0
- package/{node → cjs/node}/HttpServer.d.ts +0 -0
- package/{types → cjs/types}/common.d.ts +2 -2
- /package/{web → cjs/web}/WsClient.d.ts +0 -0
- /package/{CamOverlayPainter → esm/CamOverlayPainter}/Frame.js +0 -0
- /package/{CreatePackage.js → esm/CreatePackage.js} +0 -0
- /package/{internal → esm/internal}/constants.js +0 -0
- /package/{internal → esm/internal}/transformers.js +0 -0
- /package/{internal → esm/internal}/versionCompare.js +0 -0
- /package/{node → esm/node}/HttpRequestSender.js +0 -0
- /package/{node → esm/node}/WsClient.js +0 -0
- /package/{node → esm/node}/WsEventClient.js +0 -0
- /package/{types → esm/types}/CamSwitcherAPI.js +0 -0
- /package/{types → esm/types}/common.js +0 -0
|
@@ -0,0 +1,251 @@
|
|
|
1
|
+
import { paramToUrl, responseStringify } from './internal/utils';
|
|
2
|
+
import { ImageType, } from './types/CamOverlayAPI';
|
|
3
|
+
import { ParsingBlobError, ServiceNotFoundError } from './errors/errors';
|
|
4
|
+
import { networkCameraListSchema } from './types/common';
|
|
5
|
+
import { z } from 'zod';
|
|
6
|
+
import { widgetsSchema } from './models/CamOverlayAPI/widgetsSchema';
|
|
7
|
+
import { fileListSchema, storageSchema } from './models/CamOverlayAPI/fileSchema';
|
|
8
|
+
export const BASE_URL = '/local/camoverlay/api';
|
|
9
|
+
export class CamOverlayAPI {
|
|
10
|
+
client;
|
|
11
|
+
constructor(client) {
|
|
12
|
+
this.client = client;
|
|
13
|
+
}
|
|
14
|
+
static getProxyUrlPath = () => `${BASE_URL}/proxy.cgi`;
|
|
15
|
+
static getFilePreviewPath = (path) => `${BASE_URL}/image.cgi?path=${encodeURIComponent(path)}`;
|
|
16
|
+
async checkCameraTime() {
|
|
17
|
+
const responseSchema = z.discriminatedUnion('state', [
|
|
18
|
+
z.object({
|
|
19
|
+
state: z.literal(true),
|
|
20
|
+
code: z.number(),
|
|
21
|
+
}),
|
|
22
|
+
z.object({
|
|
23
|
+
state: z.literal(false),
|
|
24
|
+
code: z.number(),
|
|
25
|
+
reason: z.union([
|
|
26
|
+
z.literal('INVALID_TIME'),
|
|
27
|
+
z.literal('COULDNT_RESOLVE_HOST'),
|
|
28
|
+
z.literal('CONNECTION_ERROR'),
|
|
29
|
+
]),
|
|
30
|
+
message: z.string(),
|
|
31
|
+
}),
|
|
32
|
+
]);
|
|
33
|
+
const response = await this._get(`${BASE_URL}/camera_time.cgi`);
|
|
34
|
+
const cameraTime = responseSchema.parse(response);
|
|
35
|
+
if (!cameraTime.state) {
|
|
36
|
+
console.error(`Camera time check failed: ${cameraTime.reason} - ${cameraTime.message}`);
|
|
37
|
+
}
|
|
38
|
+
return cameraTime.state;
|
|
39
|
+
}
|
|
40
|
+
async getNetworkCameraList() {
|
|
41
|
+
const response = await this._get(`${BASE_URL}/network_camera_list.cgi`);
|
|
42
|
+
return networkCameraListSchema.parse(response.camera_list);
|
|
43
|
+
}
|
|
44
|
+
async wsAuthorization() {
|
|
45
|
+
const responseSchema = z.object({
|
|
46
|
+
status: z.number(),
|
|
47
|
+
message: z.string(),
|
|
48
|
+
data: z.string(),
|
|
49
|
+
});
|
|
50
|
+
const response = await this._get(`${BASE_URL}/ws_authorization.cgi`);
|
|
51
|
+
return responseSchema.parse(response).data;
|
|
52
|
+
}
|
|
53
|
+
async getMjpegStreamImage(mjpegUrl) {
|
|
54
|
+
return await this._getBlob(`${BASE_URL}/fetch_mjpeg_image.cgi?mjpeg_url=${encodeURIComponent(decodeURIComponent(mjpegUrl))}`);
|
|
55
|
+
}
|
|
56
|
+
async listFiles(fileType) {
|
|
57
|
+
const fileDataSchema = z.object({
|
|
58
|
+
code: z.number(),
|
|
59
|
+
list: fileListSchema,
|
|
60
|
+
});
|
|
61
|
+
const files = await this._get(`${BASE_URL}/upload_${fileType}.cgi`, {
|
|
62
|
+
action: 'list',
|
|
63
|
+
});
|
|
64
|
+
return fileListSchema.parse(files.list);
|
|
65
|
+
}
|
|
66
|
+
async uploadFile(fileType, formData, storage) {
|
|
67
|
+
const path = `${BASE_URL}/upload_${fileType}.cgi`;
|
|
68
|
+
await this._post(path, formData, {
|
|
69
|
+
action: 'upload',
|
|
70
|
+
storage: storage,
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
async removeFile(fileType, fileParams) {
|
|
74
|
+
const path = `${BASE_URL}/upload_${fileType}.cgi`;
|
|
75
|
+
await this._postUrlEncoded(path, {
|
|
76
|
+
action: 'remove',
|
|
77
|
+
...fileParams,
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
async getFileStorage(fileType) {
|
|
81
|
+
const storageDataListSchema = z.array(z.object({
|
|
82
|
+
type: storageSchema,
|
|
83
|
+
state: z.string(),
|
|
84
|
+
}));
|
|
85
|
+
const responseSchema = z.object({
|
|
86
|
+
code: z.number(),
|
|
87
|
+
list: storageDataListSchema,
|
|
88
|
+
});
|
|
89
|
+
const data = await this._get(`${BASE_URL}/upload_${fileType}.cgi`, {
|
|
90
|
+
action: 'get_storage',
|
|
91
|
+
});
|
|
92
|
+
if (data.code !== 200) {
|
|
93
|
+
throw new Error('Error occured while fetching file storage data');
|
|
94
|
+
}
|
|
95
|
+
return storageDataListSchema.parse(data.list);
|
|
96
|
+
}
|
|
97
|
+
async getFilePreviewFromCamera(path) {
|
|
98
|
+
return await this._getBlob(CamOverlayAPI.getFilePreviewPath(path));
|
|
99
|
+
}
|
|
100
|
+
async updateInfoticker(serviceID, text) {
|
|
101
|
+
await this._get(`${BASE_URL}/infoticker.cgi?service_id=${serviceID}&text=${text}`);
|
|
102
|
+
}
|
|
103
|
+
async setEnabled(serviceID, enabled) {
|
|
104
|
+
await this._post(`${BASE_URL}/enabled.cgi?id_${serviceID}=${enabled ? 1 : 0}`, '');
|
|
105
|
+
}
|
|
106
|
+
async isEnabled(serviceID) {
|
|
107
|
+
const res = await this.client.get(`${BASE_URL}/services.cgi?action=get`);
|
|
108
|
+
if (res.ok) {
|
|
109
|
+
const data = JSON.parse(await res.text());
|
|
110
|
+
for (const service of data.services) {
|
|
111
|
+
if (service.id === serviceID) {
|
|
112
|
+
return service.enabled === 1;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
throw new ServiceNotFoundError();
|
|
116
|
+
}
|
|
117
|
+
else {
|
|
118
|
+
throw new Error(await responseStringify(res));
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
async getSingleWidget(serviceId) {
|
|
122
|
+
const data = await this._get(`${BASE_URL}/services.cgi`, {
|
|
123
|
+
action: 'get',
|
|
124
|
+
service_id: serviceId.toString(),
|
|
125
|
+
});
|
|
126
|
+
return widgetsSchema.parse(data);
|
|
127
|
+
}
|
|
128
|
+
async getWidgets() {
|
|
129
|
+
const widgetList = await this._get(`${BASE_URL}/services.cgi`, {
|
|
130
|
+
action: 'get',
|
|
131
|
+
});
|
|
132
|
+
const widgets = widgetList.services;
|
|
133
|
+
widgets.forEach((widget) => {
|
|
134
|
+
const parsedWidget = widgetsSchema.safeParse(widget);
|
|
135
|
+
if (!parsedWidget.success) {
|
|
136
|
+
console.warn(`[SERVICE SCHEMA MISMATCH]: Service ${widget.name} (${widget.id}) does not match the current schema, or is a hidden service.`);
|
|
137
|
+
}
|
|
138
|
+
});
|
|
139
|
+
return widgets;
|
|
140
|
+
}
|
|
141
|
+
async updateSingleWidget(widget) {
|
|
142
|
+
const path = `${BASE_URL}/services.cgi`;
|
|
143
|
+
await this._postJsonEncoded(path, JSON.stringify(widget), {
|
|
144
|
+
action: 'set',
|
|
145
|
+
service_id: widget.id.toString(),
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
async updateWidgets(widgets) {
|
|
149
|
+
const path = `${BASE_URL}/services.cgi`;
|
|
150
|
+
await this._postJsonEncoded(path, JSON.stringify({ services: widgets }), {
|
|
151
|
+
action: 'set',
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
updateCGText(serviceID, fields) {
|
|
155
|
+
const params = {};
|
|
156
|
+
for (const field of fields) {
|
|
157
|
+
const name = field.field_name;
|
|
158
|
+
params[name] = field.text;
|
|
159
|
+
if (field.color !== undefined) {
|
|
160
|
+
params[`${name}_color`] = field.color;
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
return this.promiseCGUpdate(serviceID, 'update_text', params);
|
|
164
|
+
}
|
|
165
|
+
updateCGImagePos(serviceID, coordinates = '', x = 0, y = 0) {
|
|
166
|
+
const params = {
|
|
167
|
+
coord_system: coordinates,
|
|
168
|
+
pos_x: x,
|
|
169
|
+
pos_y: y,
|
|
170
|
+
};
|
|
171
|
+
return this.promiseCGUpdate(serviceID, 'update_image', params);
|
|
172
|
+
}
|
|
173
|
+
updateCGImage(serviceID, path, coordinates = '', x = 0, y = 0) {
|
|
174
|
+
const params = {
|
|
175
|
+
coord_system: coordinates,
|
|
176
|
+
pos_x: x,
|
|
177
|
+
pos_y: y,
|
|
178
|
+
image: path,
|
|
179
|
+
};
|
|
180
|
+
return this.promiseCGUpdate(serviceID, 'update_image', params);
|
|
181
|
+
}
|
|
182
|
+
updateCGImageFromData(serviceID, imageType, imageData, coordinates = '', x = 0, y = 0) {
|
|
183
|
+
const contentType = imageType === ImageType.PNG ? 'image/png' : 'image/jpeg';
|
|
184
|
+
const params = {
|
|
185
|
+
coord_system: coordinates,
|
|
186
|
+
pos_x: x,
|
|
187
|
+
pos_y: y,
|
|
188
|
+
};
|
|
189
|
+
return this.promiseCGUpdate(serviceID, 'update_image', params, contentType, imageData);
|
|
190
|
+
}
|
|
191
|
+
async promiseCGUpdate(serviceID, action, params = {}, contentType, data) {
|
|
192
|
+
const path = `${BASE_URL}/customGraphics.cgi`;
|
|
193
|
+
let headers = {};
|
|
194
|
+
if (contentType !== undefined && data) {
|
|
195
|
+
headers = { 'Content-Type': contentType };
|
|
196
|
+
}
|
|
197
|
+
const res = await this.client.post(path, data ?? '', {
|
|
198
|
+
action: action,
|
|
199
|
+
service_id: serviceID.toString(),
|
|
200
|
+
...params,
|
|
201
|
+
}, headers);
|
|
202
|
+
if (!res.ok) {
|
|
203
|
+
throw new Error(await responseStringify(res));
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
async _get(...args) {
|
|
207
|
+
const res = await this.client.get(...args);
|
|
208
|
+
if (res.ok) {
|
|
209
|
+
return (await res.json());
|
|
210
|
+
}
|
|
211
|
+
else {
|
|
212
|
+
throw new Error(await responseStringify(res));
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
async _post(...args) {
|
|
216
|
+
const res = await this.client.post(...args);
|
|
217
|
+
if (res.ok) {
|
|
218
|
+
return (await res.json());
|
|
219
|
+
}
|
|
220
|
+
else {
|
|
221
|
+
throw new Error(await responseStringify(res));
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
async _getBlob(...args) {
|
|
225
|
+
const res = await this.client.get(...args);
|
|
226
|
+
if (res.ok) {
|
|
227
|
+
return await this.parseBlobResponse(res);
|
|
228
|
+
}
|
|
229
|
+
else {
|
|
230
|
+
throw new Error(await responseStringify(res));
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
async parseBlobResponse(response) {
|
|
234
|
+
try {
|
|
235
|
+
return (await response.blob());
|
|
236
|
+
}
|
|
237
|
+
catch (err) {
|
|
238
|
+
throw new ParsingBlobError(err);
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
async _postUrlEncoded(path, params, headers) {
|
|
242
|
+
const data = paramToUrl(params);
|
|
243
|
+
const baseHeaders = { 'Content-Type': 'application/x-www-form-urlencoded' };
|
|
244
|
+
return this._post(path, data, {}, { ...baseHeaders, ...headers });
|
|
245
|
+
}
|
|
246
|
+
async _postJsonEncoded(...args) {
|
|
247
|
+
const [path, data, params, headers] = args;
|
|
248
|
+
const baseHeaders = { 'Accept': 'application/json', 'Content-Type': 'application/json' };
|
|
249
|
+
return this._post(path, data, params, { ...baseHeaders, ...headers });
|
|
250
|
+
}
|
|
251
|
+
}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
/// <reference types="node" />
|
|
3
|
+
import * as EventEmitter from 'events';
|
|
4
|
+
import { WsOptions } from './internal/types';
|
|
5
|
+
export type CamOverlayDrawingOptions = WsOptions & {
|
|
6
|
+
camera?: number | number[];
|
|
7
|
+
zIndex?: number;
|
|
8
|
+
};
|
|
9
|
+
export type TCairoResponse = {
|
|
10
|
+
message: string;
|
|
11
|
+
call_id: number;
|
|
12
|
+
};
|
|
13
|
+
export type TCairoCreateResponse = {
|
|
14
|
+
var: string;
|
|
15
|
+
call_id: number;
|
|
16
|
+
};
|
|
17
|
+
export type TUploadImageResponse = {
|
|
18
|
+
var: string;
|
|
19
|
+
width: number;
|
|
20
|
+
height: number;
|
|
21
|
+
call_id: number;
|
|
22
|
+
};
|
|
23
|
+
export type TErrorResponse = {
|
|
24
|
+
error: string;
|
|
25
|
+
call_id?: number;
|
|
26
|
+
};
|
|
27
|
+
export type TService = {
|
|
28
|
+
id: number;
|
|
29
|
+
enabled: number;
|
|
30
|
+
schedule: string;
|
|
31
|
+
name: string;
|
|
32
|
+
identifier: string;
|
|
33
|
+
cameraList: number[];
|
|
34
|
+
};
|
|
35
|
+
export type TServiceList = {
|
|
36
|
+
services: TService[];
|
|
37
|
+
};
|
|
38
|
+
export type TAlign = 'A_RIGHT' | 'A_LEFT' | 'A_CENTER';
|
|
39
|
+
export type TextFit = 'TFM_SCALE' | 'TFM_TRUNCATE' | 'TFM_OVERFLOW';
|
|
40
|
+
export type TWriteTextParams = [string, string, number, number, number, number, TAlign, TextFit?];
|
|
41
|
+
export interface CamOverlayDrawingAPI {
|
|
42
|
+
on(event: 'open', listener: () => void): this;
|
|
43
|
+
on(event: 'close', listener: () => void): this;
|
|
44
|
+
on(event: 'error', listener: (err: Error) => void): this;
|
|
45
|
+
on(event: 'message', listener: (msg: string) => void): this;
|
|
46
|
+
emit(event: 'open'): boolean;
|
|
47
|
+
emit(event: 'close'): boolean;
|
|
48
|
+
emit(event: 'error', err: Error): boolean;
|
|
49
|
+
emit(event: 'message', msg: string): boolean;
|
|
50
|
+
}
|
|
51
|
+
export declare class CamOverlayDrawingAPI extends EventEmitter {
|
|
52
|
+
private tls;
|
|
53
|
+
private tlsInsecure;
|
|
54
|
+
private ip;
|
|
55
|
+
private port;
|
|
56
|
+
private user;
|
|
57
|
+
private pass;
|
|
58
|
+
private cameraList;
|
|
59
|
+
private zIndex;
|
|
60
|
+
private callId;
|
|
61
|
+
private sendMessages;
|
|
62
|
+
private timeoutCheckTimer;
|
|
63
|
+
private wsConnected;
|
|
64
|
+
private ws;
|
|
65
|
+
constructor(options?: CamOverlayDrawingOptions);
|
|
66
|
+
connect(): void;
|
|
67
|
+
disconnect(): void;
|
|
68
|
+
isConnected(): boolean;
|
|
69
|
+
cairo(command: string, ...params: unknown[]): Promise<TCairoResponse | TCairoCreateResponse>;
|
|
70
|
+
writeText(...params: TWriteTextParams): Promise<TCairoResponse>;
|
|
71
|
+
uploadImageData(imgBuffer: Buffer): Promise<TUploadImageResponse>;
|
|
72
|
+
uploadFontData(fontBuffer: Buffer): Promise<TCairoCreateResponse>;
|
|
73
|
+
showCairoImage(cairoImage: string, posX: number, posY: number): Promise<TCairoResponse>;
|
|
74
|
+
showCairoImageAbsolute(cairoImage: string, posX: number, posY: number, width: number, height: number): Promise<TCairoResponse>;
|
|
75
|
+
removeImage(): Promise<TCairoResponse>;
|
|
76
|
+
private createWsClient;
|
|
77
|
+
private incomingWsMessageHandler;
|
|
78
|
+
private sendMessage;
|
|
79
|
+
private sendBinaryMessage;
|
|
80
|
+
private startMsgsTimeoutCheck;
|
|
81
|
+
private stopMsgsTimeoutCheck;
|
|
82
|
+
private reconnectWithError;
|
|
83
|
+
private reportMessage;
|
|
84
|
+
private reportError;
|
|
85
|
+
private reportClose;
|
|
86
|
+
}
|
|
@@ -121,10 +121,10 @@ export class CamOverlayDrawingAPI extends EventEmitter {
|
|
|
121
121
|
}
|
|
122
122
|
if (dataJSON.call_id !== undefined) {
|
|
123
123
|
if (errorResponse !== undefined) {
|
|
124
|
-
this.sendMessages[dataJSON.call_id]
|
|
124
|
+
this.sendMessages[dataJSON.call_id]?.reject(new Error(errorResponse.error));
|
|
125
125
|
}
|
|
126
126
|
else {
|
|
127
|
-
this.sendMessages[dataJSON.call_id]
|
|
127
|
+
this.sendMessages[dataJSON.call_id]?.resolve(dataJSON);
|
|
128
128
|
}
|
|
129
129
|
delete this.sendMessages[dataJSON.call_id];
|
|
130
130
|
}
|
|
@@ -194,6 +194,9 @@ export class CamOverlayDrawingAPI extends EventEmitter {
|
|
|
194
194
|
const now = Date.now();
|
|
195
195
|
for (const callId in this.sendMessages) {
|
|
196
196
|
const msg = this.sendMessages[callId];
|
|
197
|
+
if (!msg) {
|
|
198
|
+
continue;
|
|
199
|
+
}
|
|
197
200
|
if (now - msg.sentTimestamp > 10000) {
|
|
198
201
|
reconnect = true;
|
|
199
202
|
msg.reject(new Error('Message timeout'));
|
|
@@ -220,7 +223,7 @@ export class CamOverlayDrawingAPI extends EventEmitter {
|
|
|
220
223
|
}
|
|
221
224
|
reportClose() {
|
|
222
225
|
for (const callId in this.sendMessages) {
|
|
223
|
-
this.sendMessages[callId]
|
|
226
|
+
this.sendMessages[callId]?.reject(new Error('Connection lost'));
|
|
224
227
|
}
|
|
225
228
|
this.sendMessages = {};
|
|
226
229
|
this.emit('close');
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import { EventEmitter } from 'events';
|
|
3
|
+
import { CamOverlayDrawingAPI, TAlign, TCairoCreateResponse, TUploadImageResponse } from '../CamOverlayDrawingAPI';
|
|
4
|
+
import ResourceManager from './ResourceManager';
|
|
5
|
+
export type TRgb = [number, number, number];
|
|
6
|
+
export type TRgba = [number, number, number, number];
|
|
7
|
+
export type TTmf = 'TFM_OVERFLOW' | 'TFM_SCALE' | 'TFM_TRUNCATE';
|
|
8
|
+
export type TObjectFitType = 'fill' | 'fit' | 'none';
|
|
9
|
+
export type TFrameOptions = {
|
|
10
|
+
enabled?: boolean;
|
|
11
|
+
x: number;
|
|
12
|
+
y: number;
|
|
13
|
+
width: number;
|
|
14
|
+
height: number;
|
|
15
|
+
text?: string;
|
|
16
|
+
fontColor?: TRgb;
|
|
17
|
+
font?: string;
|
|
18
|
+
bgColor?: TRgba;
|
|
19
|
+
bgImage?: string;
|
|
20
|
+
bgType?: TObjectFitType;
|
|
21
|
+
borderRadius?: number;
|
|
22
|
+
borderWidth?: number;
|
|
23
|
+
borderColor?: TRgba;
|
|
24
|
+
customDraw?: TDrawingCallback;
|
|
25
|
+
layer?: number;
|
|
26
|
+
};
|
|
27
|
+
export type TFrameInfo = {
|
|
28
|
+
width: number;
|
|
29
|
+
height: number;
|
|
30
|
+
};
|
|
31
|
+
export type TDrawingCallback = (cod: CamOverlayDrawingAPI, cairo: string, info: TFrameInfo) => Promise<void>;
|
|
32
|
+
export interface Frame {
|
|
33
|
+
on(event: 'open', listener: () => void): this;
|
|
34
|
+
on(event: 'close', listener: () => void): this;
|
|
35
|
+
on(event: 'layoutChanged', listener: () => void): this;
|
|
36
|
+
emit(event: 'open'): boolean;
|
|
37
|
+
emit(event: 'close'): boolean;
|
|
38
|
+
emit(event: 'layoutChanged'): boolean;
|
|
39
|
+
}
|
|
40
|
+
export declare class Frame extends EventEmitter {
|
|
41
|
+
protected enabled: boolean;
|
|
42
|
+
protected posX: number;
|
|
43
|
+
protected posY: number;
|
|
44
|
+
protected width: number;
|
|
45
|
+
protected height: number;
|
|
46
|
+
private text;
|
|
47
|
+
private fontColor;
|
|
48
|
+
private fontName?;
|
|
49
|
+
private font?;
|
|
50
|
+
private align;
|
|
51
|
+
private textType;
|
|
52
|
+
private bgColor?;
|
|
53
|
+
private bgImageName?;
|
|
54
|
+
private bgImage?;
|
|
55
|
+
private bgType?;
|
|
56
|
+
private borderRadius;
|
|
57
|
+
private borderWidth;
|
|
58
|
+
private borderColor;
|
|
59
|
+
private customDraw?;
|
|
60
|
+
private layer;
|
|
61
|
+
protected children: Frame[];
|
|
62
|
+
constructor(opt: TFrameOptions);
|
|
63
|
+
enable(): void;
|
|
64
|
+
disable(): void;
|
|
65
|
+
setFramePosition(x: number, y: number): void;
|
|
66
|
+
setFrameSize(width: number, height: number): void;
|
|
67
|
+
setText(text: string, align: TAlign, textType?: TTmf, fontColor?: TRgb): void;
|
|
68
|
+
setFontColor(fontColor: TRgb): void;
|
|
69
|
+
setFont(fontName: string): void;
|
|
70
|
+
setFontData(fontData: TCairoCreateResponse): void;
|
|
71
|
+
setBgColor(color: TRgba): void;
|
|
72
|
+
setBgImage(imageName: string, type?: TObjectFitType): void;
|
|
73
|
+
setBgImageData(imageData: TUploadImageResponse, type?: TObjectFitType): void;
|
|
74
|
+
setBgType(type: TObjectFitType): void;
|
|
75
|
+
setBorderRadius(radius: number): void;
|
|
76
|
+
setBorderWidth(width: number): void;
|
|
77
|
+
setBorderColor(color: TRgba): void;
|
|
78
|
+
setCustomDraw(customDraw: TDrawingCallback): void;
|
|
79
|
+
resetFont(): void;
|
|
80
|
+
resetBgColor(): void;
|
|
81
|
+
resetBgImage(): void;
|
|
82
|
+
resetCustomDraw(): void;
|
|
83
|
+
clear(): void;
|
|
84
|
+
insert(...frames: Frame[]): void;
|
|
85
|
+
getLayers(): Set<number>;
|
|
86
|
+
protected layoutChanged(): void;
|
|
87
|
+
displayImage(cod: CamOverlayDrawingAPI, resourceManager: ResourceManager, cairo: string, ppX: number, ppY: number, scale: number, layer: number): Promise<void>;
|
|
88
|
+
private prepareResources;
|
|
89
|
+
protected displayOwnImage(cod: CamOverlayDrawingAPI, cairo: string, ppX: number, ppY: number, scale: number): Promise<void>;
|
|
90
|
+
private clipDrawing;
|
|
91
|
+
private drawFrame;
|
|
92
|
+
private drawImage;
|
|
93
|
+
private drawText;
|
|
94
|
+
private drawBorder;
|
|
95
|
+
private drawRectPath;
|
|
96
|
+
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { CamOverlayDrawingAPI, CamOverlayDrawingOptions } from '../CamOverlayDrawingAPI';
|
|
2
|
+
import ResourceManager from './ResourceManager';
|
|
3
|
+
import { Frame, TFrameOptions } from './Frame';
|
|
4
|
+
export declare const COORD: {
|
|
5
|
+
readonly top_left: readonly [-1, -1];
|
|
6
|
+
readonly center_left: readonly [-1, 0];
|
|
7
|
+
readonly bottom_left: readonly [-1, 1];
|
|
8
|
+
readonly top_center: readonly [0, -1];
|
|
9
|
+
readonly center: readonly [0, 0];
|
|
10
|
+
readonly bottom_center: readonly [0, 1];
|
|
11
|
+
readonly top_right: readonly [1, -1];
|
|
12
|
+
readonly center_right: readonly [1, 0];
|
|
13
|
+
readonly bottom_right: readonly [1, 1];
|
|
14
|
+
};
|
|
15
|
+
type TCoAlignment = keyof typeof COORD;
|
|
16
|
+
export type TPainterOptions = TFrameOptions & {
|
|
17
|
+
screenWidth: number;
|
|
18
|
+
screenHeight: number;
|
|
19
|
+
coAlignment: TCoAlignment;
|
|
20
|
+
};
|
|
21
|
+
export declare class Painter extends Frame {
|
|
22
|
+
private screenWidth;
|
|
23
|
+
private screenHeight;
|
|
24
|
+
private coAlignment;
|
|
25
|
+
private cod;
|
|
26
|
+
private rm;
|
|
27
|
+
private refreshLayers;
|
|
28
|
+
private layers;
|
|
29
|
+
constructor(opt: TPainterOptions, coopt: CamOverlayDrawingOptions);
|
|
30
|
+
get camOverlayDrawingAPI(): CamOverlayDrawingAPI;
|
|
31
|
+
get resourceManager(): ResourceManager;
|
|
32
|
+
connect(): void;
|
|
33
|
+
disconnect(): void;
|
|
34
|
+
isConnected(): boolean;
|
|
35
|
+
registerImage(moniker: string, fileName: string): void;
|
|
36
|
+
registerFont(moniker: string, fileName: string): void;
|
|
37
|
+
setScreenSize(sw: number, sh: number): void;
|
|
38
|
+
setCoAlignment(coAlignment: TCoAlignment): void;
|
|
39
|
+
protected layoutChanged(): void;
|
|
40
|
+
display(scale?: number): Promise<void>;
|
|
41
|
+
hide(): Promise<void>;
|
|
42
|
+
invalidateLayer(layer: number): Promise<void>;
|
|
43
|
+
private prepareLayers;
|
|
44
|
+
private prepareSurface;
|
|
45
|
+
private cleanupSurface;
|
|
46
|
+
private positionConvertor;
|
|
47
|
+
}
|
|
48
|
+
export { Frame, TFrameOptions as FrameOptions, ResourceManager, CamOverlayDrawingOptions };
|
|
@@ -82,6 +82,9 @@ export class Painter extends Frame {
|
|
|
82
82
|
let lastCachedLayer;
|
|
83
83
|
for (let i = 0; i < this.layers.length; i++) {
|
|
84
84
|
const layer = this.layers[i];
|
|
85
|
+
if (layer === undefined) {
|
|
86
|
+
continue;
|
|
87
|
+
}
|
|
85
88
|
if (layer.cairoCache !== undefined &&
|
|
86
89
|
layer.surfaceCache !== undefined &&
|
|
87
90
|
surface === undefined &&
|
|
@@ -115,7 +118,7 @@ export class Painter extends Frame {
|
|
|
115
118
|
}
|
|
116
119
|
for (let i = layerIdx; i < this.layers.length; i++) {
|
|
117
120
|
const currentLayer = this.layers[i];
|
|
118
|
-
if (currentLayer
|
|
121
|
+
if (currentLayer?.surfaceCache !== undefined && currentLayer.cairoCache !== undefined) {
|
|
119
122
|
await this.cleanupSurface(currentLayer.surfaceCache, currentLayer.cairoCache);
|
|
120
123
|
currentLayer.surfaceCache = undefined;
|
|
121
124
|
currentLayer.cairoCache = undefined;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { CamOverlayDrawingAPI, TUploadImageResponse, TCairoCreateResponse } from '../CamOverlayDrawingAPI';
|
|
2
|
+
export default class ResourceManager {
|
|
3
|
+
private co;
|
|
4
|
+
private imgFileNames;
|
|
5
|
+
private fontFileNames;
|
|
6
|
+
private images;
|
|
7
|
+
private fonts;
|
|
8
|
+
constructor(co: CamOverlayDrawingAPI);
|
|
9
|
+
registerImage(moniker: string, fileName: string): void;
|
|
10
|
+
registerFont(moniker: string, fileName: string): void;
|
|
11
|
+
image(moniker: string): Promise<TUploadImageResponse>;
|
|
12
|
+
font(moniker: string): Promise<TCairoCreateResponse>;
|
|
13
|
+
clear(): void;
|
|
14
|
+
}
|
|
@@ -15,30 +15,26 @@ export default class ResourceManager {
|
|
|
15
15
|
this.fontFileNames[moniker] = process.env.INSTALL_PATH + '/fonts/' + fileName;
|
|
16
16
|
}
|
|
17
17
|
async image(moniker) {
|
|
18
|
-
if (moniker
|
|
18
|
+
if (this.images[moniker] !== undefined) {
|
|
19
19
|
return this.images[moniker];
|
|
20
20
|
}
|
|
21
|
-
|
|
21
|
+
if (this.imgFileNames[moniker] !== undefined) {
|
|
22
22
|
const imgData = await fs.readFile(this.imgFileNames[moniker]);
|
|
23
23
|
this.images[moniker] = await this.co.uploadImageData(imgData);
|
|
24
24
|
return this.images[moniker];
|
|
25
25
|
}
|
|
26
|
-
|
|
27
|
-
throw new Error('Error! Unknown image requested!');
|
|
28
|
-
}
|
|
26
|
+
throw new Error('Error! Unknown image requested!');
|
|
29
27
|
}
|
|
30
28
|
async font(moniker) {
|
|
31
|
-
if (moniker
|
|
29
|
+
if (this.fonts[moniker] !== undefined) {
|
|
32
30
|
return this.fonts[moniker];
|
|
33
31
|
}
|
|
34
|
-
|
|
32
|
+
if (this.fontFileNames[moniker] !== undefined) {
|
|
35
33
|
const fontData = await fs.readFile(this.fontFileNames[moniker]);
|
|
36
34
|
this.fonts[moniker] = await this.co.uploadFontData(fontData);
|
|
37
35
|
return this.fonts[moniker];
|
|
38
36
|
}
|
|
39
|
-
|
|
40
|
-
throw new Error('Error! Unknown font requested!');
|
|
41
|
-
}
|
|
37
|
+
throw new Error('Error! Unknown font requested!');
|
|
42
38
|
}
|
|
43
39
|
clear() {
|
|
44
40
|
this.images = {};
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { IClient, TResponse } from './internal/types';
|
|
2
|
+
import { TNodeState, TPackageInfoList, TStorage, TStorageType } from './types/CamScripterAPI';
|
|
3
|
+
import { TNetworkCamera } from './types/common';
|
|
4
|
+
export declare const BASE_URL = "/local/camscripter/package";
|
|
5
|
+
export declare class CamScripterAPI<Client extends IClient<TResponse> = IClient<TResponse>> {
|
|
6
|
+
client: Client;
|
|
7
|
+
constructor(client: Client);
|
|
8
|
+
static getProxyUrlPath: () => string;
|
|
9
|
+
checkCameraTime(): Promise<boolean>;
|
|
10
|
+
getStorageInfo(): Promise<TStorage>;
|
|
11
|
+
getNetworkCameraList(): Promise<TNetworkCamera[]>;
|
|
12
|
+
getPackageList(): Promise<TPackageInfoList>;
|
|
13
|
+
installPackages(formData: FormData, storage: TStorageType): Promise<{
|
|
14
|
+
status: number;
|
|
15
|
+
message: string;
|
|
16
|
+
}>;
|
|
17
|
+
uninstallPackage(packageId: string): Promise<{
|
|
18
|
+
status: number;
|
|
19
|
+
message: string;
|
|
20
|
+
}>;
|
|
21
|
+
importSettings(packageId: string, formData: FormData): Promise<{
|
|
22
|
+
status: number;
|
|
23
|
+
message: string;
|
|
24
|
+
}>;
|
|
25
|
+
exportSettings(packageId: string, formData: FormData): Promise<{
|
|
26
|
+
status: number;
|
|
27
|
+
message: string;
|
|
28
|
+
}>;
|
|
29
|
+
getNodejsStatus(): Promise<TNodeState>;
|
|
30
|
+
installNodejs(storage: TStorageType): Promise<{
|
|
31
|
+
status: number;
|
|
32
|
+
message: string;
|
|
33
|
+
}>;
|
|
34
|
+
private get;
|
|
35
|
+
private post;
|
|
36
|
+
}
|