camstreamerlib 4.0.0-beta.7 → 4.0.0-beta.71
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 +143 -38
- package/cjs/CamOverlayAPI.d.ts +863 -27
- package/cjs/CamOverlayAPI.js +135 -92
- package/cjs/CamScripterAPI.d.ts +44 -17
- package/cjs/CamScripterAPI.js +52 -42
- package/cjs/CamStreamerAPI.d.ts +62 -14
- package/cjs/CamStreamerAPI.js +82 -39
- package/cjs/CamSwitcherAPI.d.ts +158 -43
- package/cjs/CamSwitcherAPI.js +138 -122
- package/cjs/PlaneTrackerAPI.d.ts +233 -0
- package/cjs/PlaneTrackerAPI.js +247 -0
- package/cjs/VapixAPI.d.ts +94 -42
- package/cjs/VapixAPI.js +323 -233
- package/cjs/{CreatePackage.js → bin/CreatePackage.js} +44 -18
- package/cjs/errors/errors.d.ts +61 -4
- package/cjs/errors/errors.js +134 -7
- package/cjs/index.d.ts +20 -4
- package/cjs/index.js +28 -5
- package/cjs/internal/ProxyClient.d.ts +8 -9
- package/cjs/internal/ProxyClient.js +28 -32
- package/cjs/internal/WsEvents.d.ts +37 -0
- package/cjs/{CamSwitcherEvents.js → internal/WsEvents.js} +28 -22
- package/cjs/internal/types.d.ts +47 -0
- package/cjs/internal/types.js +2 -0
- package/cjs/internal/utils.d.ts +3 -1
- package/cjs/internal/utils.js +15 -3
- package/cjs/internal/versionCompare.d.ts +2 -2
- package/cjs/node/CamOverlayDrawingAPI.d.ts +41 -0
- package/cjs/{CamOverlayDrawingAPI.js → node/CamOverlayDrawingAPI.js} +28 -20
- package/cjs/{CamOverlayPainter → node/CamOverlayPainter}/Frame.d.ts +8 -37
- package/cjs/{CamOverlayPainter → node/CamOverlayPainter}/Frame.js +33 -0
- package/cjs/{CamOverlayPainter → node/CamOverlayPainter}/Painter.d.ts +5 -21
- package/cjs/{CamOverlayPainter → node/CamOverlayPainter}/Painter.js +5 -17
- package/cjs/node/CamOverlayPainter/ResourceManager.d.ts +15 -0
- package/cjs/node/CamOverlayPainter/ResourceManager.js +72 -0
- package/cjs/node/CamScripterAPICameraEventsGenerator.d.ts +31 -0
- package/cjs/{CamScripterAPICameraEventsGenerator.js → node/CamScripterAPICameraEventsGenerator.js} +13 -13
- package/cjs/node/DefaultClient.d.ts +6 -5
- package/cjs/node/DefaultClient.js +10 -12
- package/cjs/{internal → node}/Digest.js +24 -1
- package/cjs/node/Digest.test.js +13 -0
- package/cjs/node/HttpRequestSender.d.ts +1 -0
- package/cjs/node/HttpRequestSender.js +14 -4
- package/cjs/node/HttpServer.d.ts +1 -1
- package/cjs/node/HttpServer.js +29 -6
- package/cjs/node/TimeZoneDaemon.d.ts +6 -0
- package/cjs/node/TimeZoneDaemon.js +29 -0
- package/cjs/node/VapixEvents.d.ts +16 -0
- package/cjs/{VapixEvents.js → node/VapixEvents.js} +10 -10
- package/cjs/node/WsClient.d.ts +9 -18
- package/cjs/node/WsClient.js +27 -20
- package/cjs/node/events/AxisCameraStationEvents.d.ts +12 -0
- package/cjs/node/events/AxisCameraStationEvents.js +53 -0
- package/cjs/node/events/GenetecAgent.d.ts +16 -0
- package/cjs/node/events/GenetecAgent.js +124 -0
- package/cjs/node/index.d.ts +18 -2
- package/cjs/node/index.js +39 -5
- package/cjs/types/CamOverlayAPI/CamOverlayAPI.d.ts +4330 -0
- package/cjs/types/CamOverlayAPI/CamOverlayAPI.js +92 -0
- package/cjs/types/CamOverlayAPI/accuweatherSchema.d.ts +84 -0
- package/cjs/types/CamOverlayAPI/accuweatherSchema.js +47 -0
- package/cjs/types/CamOverlayAPI/customGraphicsSchema.d.ts +700 -0
- package/cjs/types/CamOverlayAPI/customGraphicsSchema.js +72 -0
- package/cjs/types/CamOverlayAPI/imagesSchema.d.ts +95 -0
- package/cjs/types/CamOverlayAPI/imagesSchema.js +9 -0
- package/cjs/types/CamOverlayAPI/index.d.ts +11 -0
- package/cjs/types/CamOverlayAPI/index.js +27 -0
- package/cjs/types/CamOverlayAPI/infotickerSchema.d.ts +96 -0
- package/cjs/types/CamOverlayAPI/infotickerSchema.js +26 -0
- package/cjs/types/CamOverlayAPI/pipSchema.d.ts +125 -0
- package/cjs/types/CamOverlayAPI/pipSchema.js +39 -0
- package/cjs/types/CamOverlayAPI/ptzCompassSchema.d.ts +96 -0
- package/cjs/types/CamOverlayAPI/ptzCompassSchema.js +26 -0
- package/cjs/types/CamOverlayAPI/ptzSchema.d.ts +118 -0
- package/cjs/types/CamOverlayAPI/ptzSchema.js +12 -0
- package/cjs/types/CamOverlayAPI/scoreBoardSchema.d.ts +357 -0
- package/cjs/types/CamOverlayAPI/scoreBoardSchema.js +132 -0
- package/cjs/types/CamOverlayAPI/screenSharingSchema.d.ts +58 -0
- package/cjs/types/CamOverlayAPI/screenSharingSchema.js +8 -0
- package/cjs/types/CamOverlayAPI/serviceCommonTypes.d.ts +145 -0
- package/cjs/types/CamOverlayAPI/serviceCommonTypes.js +91 -0
- package/cjs/types/CamOverlayAPI/webCameraSharingSchema.d.ts +58 -0
- package/cjs/types/CamOverlayAPI/webCameraSharingSchema.js +8 -0
- package/cjs/types/CamOverlayDrawingAPI.d.ts +48 -0
- package/cjs/types/CamOverlayDrawingAPI.js +2 -0
- package/cjs/types/CamOverlayPainter.d.ts +76 -0
- package/cjs/types/CamOverlayPainter.js +14 -0
- package/cjs/types/CamScripterAPI.d.ts +86 -23
- package/cjs/types/CamScripterAPI.js +24 -8
- package/cjs/types/CamScripterAPICameraEventsGenerator.d.ts +45 -0
- package/cjs/types/CamScripterAPICameraEventsGenerator.js +2 -0
- package/cjs/types/CamStreamerAPI.d.ts +180 -47
- package/cjs/types/CamStreamerAPI.js +34 -3
- package/cjs/types/CamSwitcherAPI.d.ts +145 -66
- package/cjs/types/CamSwitcherAPI.js +38 -1
- package/cjs/{events → types}/GenetecAgent.d.ts +47 -47
- package/cjs/types/GenetecAgent.js +31 -0
- package/cjs/types/PlaneTrackerAPI.d.ts +952 -0
- package/cjs/types/PlaneTrackerAPI.js +320 -0
- package/cjs/types/VapixAPI.d.ts +254 -164
- package/cjs/types/VapixAPI.js +66 -11
- package/cjs/types/VapixEvents.d.ts +15 -0
- package/cjs/types/VapixEvents.js +2 -0
- package/cjs/types/common.d.ts +17 -5
- package/cjs/types/common.js +4 -2
- package/cjs/types/ws/CamOverlayEvents.d.ts +88 -0
- package/cjs/types/ws/CamOverlayEvents.js +19 -0
- package/cjs/types/ws/CamStreamerEvents.d.ts +249 -0
- package/cjs/types/ws/CamStreamerEvents.js +32 -0
- package/cjs/types/ws/PlaneTrackerEvents.d.ts +1637 -0
- package/cjs/types/ws/PlaneTrackerEvents.js +196 -0
- package/cjs/web/DefaultClient.d.ts +7 -5
- package/cjs/web/DefaultClient.js +26 -10
- package/cjs/web/WsClient.d.ts +9 -5
- package/cjs/web/WsClient.js +16 -18
- package/cjs/ws/CamOverlayEvents.d.ts +8 -0
- package/cjs/ws/CamOverlayEvents.js +24 -0
- package/cjs/ws/CamStreamerEvents.d.ts +8 -0
- package/cjs/ws/CamStreamerEvents.js +24 -0
- package/cjs/ws/CamSwitcherEvents.d.ts +8 -0
- package/cjs/ws/CamSwitcherEvents.js +24 -0
- package/cjs/ws/PlaneTrackerEvents.d.ts +9 -0
- package/cjs/ws/PlaneTrackerEvents.js +30 -0
- package/esm/CamOverlayAPI.js +135 -92
- package/esm/CamScripterAPI.js +50 -40
- package/esm/CamStreamerAPI.js +81 -39
- package/esm/CamSwitcherAPI.js +136 -120
- package/esm/PlaneTrackerAPI.js +243 -0
- package/esm/VapixAPI.js +323 -233
- package/esm/{CreatePackage.js → bin/CreatePackage.js} +16 -16
- package/esm/errors/errors.js +116 -6
- package/esm/index.js +20 -4
- package/esm/internal/ProxyClient.js +28 -32
- package/esm/{CamSwitcherEvents.js → internal/WsEvents.js} +26 -20
- package/esm/internal/types.js +1 -0
- package/esm/internal/utils.js +11 -1
- package/esm/{CamOverlayDrawingAPI.js → node/CamOverlayDrawingAPI.js} +26 -18
- package/esm/{CamOverlayPainter → node/CamOverlayPainter}/Frame.js +33 -0
- package/esm/{CamOverlayPainter → node/CamOverlayPainter}/Painter.js +2 -13
- package/esm/{CamOverlayPainter → node/CamOverlayPainter}/ResourceManager.js +7 -5
- package/esm/{CamScripterAPICameraEventsGenerator.js → node/CamScripterAPICameraEventsGenerator.js} +11 -11
- package/esm/node/DefaultClient.js +10 -12
- package/esm/node/Digest.test.js +11 -0
- package/esm/node/HttpRequestSender.js +14 -4
- package/esm/node/HttpServer.js +1 -1
- package/esm/node/TimeZoneDaemon.js +25 -0
- package/esm/{VapixEvents.js → node/VapixEvents.js} +10 -10
- package/esm/node/WsClient.js +22 -15
- package/esm/{events → node/events}/AxisCameraStationEvents.js +18 -13
- package/esm/node/events/GenetecAgent.js +120 -0
- package/esm/node/index.js +18 -2
- package/esm/types/CamOverlayAPI/CamOverlayAPI.js +76 -0
- package/esm/types/CamOverlayAPI/accuweatherSchema.js +44 -0
- package/esm/types/CamOverlayAPI/customGraphicsSchema.js +69 -0
- package/esm/types/CamOverlayAPI/imagesSchema.js +6 -0
- package/esm/types/CamOverlayAPI/index.js +11 -0
- package/esm/types/CamOverlayAPI/infotickerSchema.js +23 -0
- package/esm/types/CamOverlayAPI/pipSchema.js +36 -0
- package/esm/types/CamOverlayAPI/ptzCompassSchema.js +23 -0
- package/esm/types/CamOverlayAPI/ptzSchema.js +9 -0
- package/esm/types/CamOverlayAPI/scoreBoardSchema.js +129 -0
- package/esm/types/CamOverlayAPI/screenSharingSchema.js +5 -0
- package/esm/types/CamOverlayAPI/serviceCommonTypes.js +88 -0
- package/esm/types/CamOverlayAPI/webCameraSharingSchema.js +5 -0
- package/esm/types/CamOverlayDrawingAPI.js +1 -0
- package/esm/types/CamOverlayPainter.js +11 -0
- package/esm/types/CamScripterAPI.js +23 -7
- package/esm/types/CamScripterAPICameraEventsGenerator.js +1 -0
- package/esm/types/CamStreamerAPI.js +33 -2
- package/esm/types/CamSwitcherAPI.js +38 -1
- package/esm/types/GenetecAgent.js +28 -0
- package/esm/types/PlaneTrackerAPI.js +317 -0
- package/esm/types/VapixAPI.js +65 -10
- package/esm/types/VapixEvents.js +1 -0
- package/esm/types/common.js +3 -1
- package/esm/types/ws/CamOverlayEvents.js +16 -0
- package/esm/types/ws/CamStreamerEvents.js +29 -0
- package/esm/types/ws/PlaneTrackerEvents.js +193 -0
- package/esm/web/DefaultClient.js +26 -10
- package/esm/web/WsClient.js +16 -18
- package/esm/ws/CamOverlayEvents.js +20 -0
- package/esm/ws/CamStreamerEvents.js +20 -0
- package/esm/ws/CamSwitcherEvents.js +20 -0
- package/esm/ws/PlaneTrackerEvents.js +26 -0
- package/package.json +44 -11
- package/types/CamOverlayAPI.d.ts +867 -0
- package/types/CamScripterAPI.d.ts +46 -0
- package/types/CamStreamerAPI.d.ts +64 -0
- package/types/CamSwitcherAPI.d.ts +167 -0
- package/types/PlaneTrackerAPI.d.ts +233 -0
- package/types/VapixAPI.d.ts +118 -0
- package/types/bin/CreatePackage.d.ts +1 -0
- package/types/errors/errors.d.ts +91 -0
- package/types/index.d.ts +27 -0
- package/types/internal/ProxyClient.d.ts +10 -0
- package/types/internal/WsEvents.d.ts +37 -0
- package/types/internal/types.d.ts +47 -0
- package/{esm → types}/internal/utils.d.ts +3 -1
- package/{esm → types}/internal/versionCompare.d.ts +2 -2
- package/types/node/CamOverlayDrawingAPI.d.ts +41 -0
- package/{esm → types/node}/CamOverlayPainter/Frame.d.ts +8 -37
- package/{esm → types/node}/CamOverlayPainter/Painter.d.ts +5 -21
- package/types/node/CamOverlayPainter/ResourceManager.d.ts +15 -0
- package/types/node/CamScripterAPICameraEventsGenerator.d.ts +31 -0
- package/types/node/DefaultClient.d.ts +16 -0
- package/types/node/Digest.test.d.ts +1 -0
- package/{esm → types}/node/HttpRequestSender.d.ts +1 -0
- package/{esm → types}/node/HttpServer.d.ts +1 -1
- package/types/node/TimeZoneDaemon.d.ts +6 -0
- package/types/node/VapixEvents.d.ts +16 -0
- package/types/node/WsClient.d.ts +30 -0
- package/types/node/events/AxisCameraStationEvents.d.ts +12 -0
- package/types/node/events/GenetecAgent.d.ts +16 -0
- package/types/node/index.d.ts +18 -0
- package/types/types/CamOverlayAPI/CamOverlayAPI.d.ts +4330 -0
- package/types/types/CamOverlayAPI/accuweatherSchema.d.ts +84 -0
- package/types/types/CamOverlayAPI/customGraphicsSchema.d.ts +700 -0
- package/types/types/CamOverlayAPI/imagesSchema.d.ts +95 -0
- package/types/types/CamOverlayAPI/index.d.ts +11 -0
- package/types/types/CamOverlayAPI/infotickerSchema.d.ts +96 -0
- package/types/types/CamOverlayAPI/pipSchema.d.ts +125 -0
- package/types/types/CamOverlayAPI/ptzCompassSchema.d.ts +96 -0
- package/types/types/CamOverlayAPI/ptzSchema.d.ts +118 -0
- package/types/types/CamOverlayAPI/scoreBoardSchema.d.ts +357 -0
- package/types/types/CamOverlayAPI/screenSharingSchema.d.ts +58 -0
- package/types/types/CamOverlayAPI/serviceCommonTypes.d.ts +145 -0
- package/types/types/CamOverlayAPI/webCameraSharingSchema.d.ts +58 -0
- package/types/types/CamOverlayDrawingAPI.d.ts +48 -0
- package/types/types/CamOverlayPainter.d.ts +76 -0
- package/types/types/CamScripterAPI.d.ts +130 -0
- package/types/types/CamScripterAPICameraEventsGenerator.d.ts +45 -0
- package/types/types/CamStreamerAPI.d.ts +272 -0
- package/{esm → types}/types/CamSwitcherAPI.d.ts +145 -66
- package/{esm/events → types/types}/GenetecAgent.d.ts +47 -47
- package/types/types/PlaneTrackerAPI.d.ts +952 -0
- package/{esm → types}/types/VapixAPI.d.ts +254 -164
- package/types/types/VapixEvents.d.ts +15 -0
- package/{esm → types}/types/common.d.ts +17 -5
- package/types/types/ws/CamOverlayEvents.d.ts +88 -0
- package/types/types/ws/CamStreamerEvents.d.ts +249 -0
- package/types/types/ws/PlaneTrackerEvents.d.ts +1637 -0
- package/types/web/DefaultClient.d.ts +8 -0
- package/types/web/WsClient.d.ts +17 -0
- package/types/ws/CamOverlayEvents.d.ts +8 -0
- package/types/ws/CamStreamerEvents.d.ts +8 -0
- package/types/ws/CamSwitcherEvents.d.ts +8 -0
- package/types/ws/PlaneTrackerEvents.d.ts +9 -0
- package/cjs/CamOverlayDrawingAPI.d.ts +0 -86
- package/cjs/CamOverlayPainter/ResourceManager.d.ts +0 -14
- package/cjs/CamOverlayPainter/ResourceManager.js +0 -46
- package/cjs/CamScripterAPICameraEventsGenerator.d.ts +0 -74
- package/cjs/CamSwitcherEvents.d.ts +0 -18
- package/cjs/VapixEvents.d.ts +0 -43
- package/cjs/events/AxisCameraStationEvents.d.ts +0 -9
- package/cjs/events/AxisCameraStationEvents.js +0 -48
- package/cjs/events/GenetecAgent.js +0 -123
- package/cjs/internal/common.d.ts +0 -39
- package/cjs/internal/common.js +0 -27
- package/cjs/node/WsEventClient.d.ts +0 -13
- package/cjs/node/WsEventClient.js +0 -22
- package/cjs/types/CamOverlayAPI.d.ts +0 -188
- package/cjs/types/CamOverlayAPI.js +0 -47
- package/esm/CamOverlayAPI.d.ts +0 -31
- package/esm/CamOverlayDrawingAPI.d.ts +0 -86
- package/esm/CamOverlayPainter/ResourceManager.d.ts +0 -14
- package/esm/CamScripterAPI.d.ts +0 -19
- package/esm/CamScripterAPICameraEventsGenerator.d.ts +0 -74
- package/esm/CamStreamerAPI.d.ts +0 -16
- package/esm/CamSwitcherAPI.d.ts +0 -52
- package/esm/CamSwitcherEvents.d.ts +0 -18
- package/esm/VapixAPI.d.ts +0 -66
- package/esm/VapixEvents.d.ts +0 -43
- package/esm/errors/errors.d.ts +0 -34
- package/esm/events/AxisCameraStationEvents.d.ts +0 -9
- package/esm/events/GenetecAgent.js +0 -119
- package/esm/index.d.ts +0 -11
- package/esm/internal/ProxyClient.d.ts +0 -11
- package/esm/internal/common.d.ts +0 -39
- package/esm/internal/common.js +0 -20
- package/esm/node/DefaultClient.d.ts +0 -15
- package/esm/node/WsClient.d.ts +0 -39
- package/esm/node/WsEventClient.d.ts +0 -13
- package/esm/node/WsEventClient.js +0 -18
- package/esm/types/CamOverlayAPI.d.ts +0 -188
- package/esm/types/CamOverlayAPI.js +0 -44
- package/esm/types/CamScripterAPI.d.ts +0 -67
- package/esm/types/CamStreamerAPI.d.ts +0 -139
- package/esm/web/DefaultClient.d.ts +0 -6
- package/esm/web/WsClient.d.ts +0 -13
- package/esm/web/index.d.ts +0 -2
- /package/cjs/{CreatePackage.d.ts → bin/CreatePackage.d.ts} +0 -0
- /package/cjs/{internal → node}/Digest.d.ts +0 -0
- /package/{esm/CreatePackage.d.ts → cjs/node/Digest.test.d.ts} +0 -0
- /package/cjs/types/{CamSwitcherEvents.d.ts → ws/CamSwitcherEvents.d.ts} +0 -0
- /package/cjs/types/{CamSwitcherEvents.js → ws/CamSwitcherEvents.js} +0 -0
- /package/esm/{internal → node}/Digest.js +0 -0
- /package/esm/types/{CamSwitcherEvents.js → ws/CamSwitcherEvents.js} +0 -0
- /package/{esm → types}/internal/constants.d.ts +0 -0
- /package/{esm → types}/internal/transformers.d.ts +0 -0
- /package/{esm/internal → types/node}/Digest.d.ts +0 -0
- /package/{esm/types → types/types/ws}/CamSwitcherEvents.d.ts +0 -0
- /package/{esm/node → types/web}/index.d.ts +0 -0
|
@@ -22,29 +22,27 @@ export class DefaultClient {
|
|
|
22
22
|
}
|
|
23
23
|
this.httpRequestSender = new HttpRequestSender(agentOptions);
|
|
24
24
|
}
|
|
25
|
-
get
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
async get(path, parameters = {}, headers) {
|
|
29
|
-
const options = this.getBaseConnectionParams('GET', path, parameters);
|
|
30
|
-
options.headers = headers;
|
|
25
|
+
get(params) {
|
|
26
|
+
const { path, parameters, headers, timeout } = params;
|
|
27
|
+
const options = this.getBaseConnectionParams('GET', path, parameters, headers, timeout);
|
|
31
28
|
return this.httpRequestSender.sendRequest(options);
|
|
32
29
|
}
|
|
33
|
-
|
|
34
|
-
const
|
|
35
|
-
options
|
|
30
|
+
post(params) {
|
|
31
|
+
const { path, data, parameters, headers, timeout } = params;
|
|
32
|
+
const options = this.getBaseConnectionParams('POST', path, parameters, headers, timeout);
|
|
36
33
|
return this.httpRequestSender.sendRequest(options, data);
|
|
37
34
|
}
|
|
38
|
-
getBaseConnectionParams(method, path, params) {
|
|
39
|
-
const pathName = addParametersToPath(path, params);
|
|
35
|
+
getBaseConnectionParams(method, path, params, headers, timeout) {
|
|
40
36
|
return {
|
|
41
37
|
method: method,
|
|
42
38
|
protocol: this.tls ? 'https:' : 'http:',
|
|
43
39
|
host: this.ip,
|
|
44
40
|
port: this.port,
|
|
45
|
-
path:
|
|
41
|
+
path: addParametersToPath(path, params),
|
|
46
42
|
user: this.user,
|
|
47
43
|
pass: this.pass,
|
|
44
|
+
headers,
|
|
45
|
+
timeout,
|
|
48
46
|
};
|
|
49
47
|
}
|
|
50
48
|
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { Digest } from './Digest';
|
|
2
|
+
import { describe, test, expect } from '@jest/globals';
|
|
3
|
+
describe('Digest', () => {
|
|
4
|
+
describe('getAuthHeader', () => {
|
|
5
|
+
test('Checks, that Digest.getAuthHeader() returns correct value.', () => {
|
|
6
|
+
const testString = 'Digest realm="testrealm@host.com", qop="auth,auth-int", nonce="dcd98b7102dd2f0e8b11d0f600bfb0c093", opaque="5ccc069c403ebaf9f0171e9517f40e41"';
|
|
7
|
+
const value = 'Digest username="root",realm="testrealm@host.com",nonce="dcd98b7102dd2f0e8b11d0f600bfb0c093",uri="www.cz",response="63f54af3ce5cf193a7435d5c68625472",qop=auth,nc=00000001,cnonce="162d50aa594e9648"';
|
|
8
|
+
expect(new Digest().getAuthHeader('root', 'pass', 'GET', 'www.cz', testString)).toBe(value);
|
|
9
|
+
});
|
|
10
|
+
});
|
|
11
|
+
});
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Digest } from '
|
|
1
|
+
import { Digest } from './Digest';
|
|
2
2
|
import { Agent, fetch as undiciFetch, Request as UndiciRequest, } from 'undici';
|
|
3
3
|
export class HttpRequestSender {
|
|
4
4
|
agent;
|
|
@@ -8,8 +8,18 @@ export class HttpRequestSender {
|
|
|
8
8
|
connect: { rejectUnauthorized: agentOptions?.rejectUnaurhorized, keepAlive: agentOptions?.keepAlive },
|
|
9
9
|
});
|
|
10
10
|
}
|
|
11
|
-
sendRequest(options, postData) {
|
|
12
|
-
|
|
11
|
+
async sendRequest(options, postData) {
|
|
12
|
+
const stackHolder = { stack: '' };
|
|
13
|
+
Error.captureStackTrace(stackHolder, this.sendRequest);
|
|
14
|
+
try {
|
|
15
|
+
return await this.sendRequestWithAuth(options, postData);
|
|
16
|
+
}
|
|
17
|
+
catch (err) {
|
|
18
|
+
if (err instanceof Error) {
|
|
19
|
+
err.stack = `${err.stack}\nCaptured at:\n${stackHolder.stack}`;
|
|
20
|
+
}
|
|
21
|
+
throw err;
|
|
22
|
+
}
|
|
13
23
|
}
|
|
14
24
|
async sendRequestWithAuth(options, postData, wwwAuthenticateHeader) {
|
|
15
25
|
options.timeout ??= 10000;
|
|
@@ -79,7 +89,7 @@ export class HttpRequestSender {
|
|
|
79
89
|
return authData.digest.getAuthHeader(options.user, options.pass, options.method ?? 'GET', options.path, authData.wwwAuthenticateHeader);
|
|
80
90
|
}
|
|
81
91
|
else {
|
|
82
|
-
return `Basic ${
|
|
92
|
+
return `Basic ${Buffer.from(`${options.user}:${options.pass}`).toString('base64')}`;
|
|
83
93
|
}
|
|
84
94
|
}
|
|
85
95
|
}
|
package/esm/node/HttpServer.js
CHANGED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { exec } from 'child_process';
|
|
2
|
+
import { promisify } from 'util';
|
|
3
|
+
const execPromise = promisify(exec);
|
|
4
|
+
export class TimeZoneDaemon {
|
|
5
|
+
checkTimer;
|
|
6
|
+
constructor(checkInterval = 60000) {
|
|
7
|
+
this.checkTimer = setInterval(() => this.checkAndUpdateTimeZone(), checkInterval);
|
|
8
|
+
}
|
|
9
|
+
stop() {
|
|
10
|
+
clearInterval(this.checkTimer);
|
|
11
|
+
}
|
|
12
|
+
async checkAndUpdateTimeZone() {
|
|
13
|
+
try {
|
|
14
|
+
const { stdout } = await execPromise('timedatectl show -p Timezone --value');
|
|
15
|
+
const systemTimezone = stdout.toString().trim();
|
|
16
|
+
const nodeTimezone = Intl.DateTimeFormat().resolvedOptions().timeZone;
|
|
17
|
+
if (systemTimezone !== nodeTimezone) {
|
|
18
|
+
process.env.TZ = systemTimezone;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
catch (error) {
|
|
22
|
+
console.error('Error checking/updating timezone:', error);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { EventEmitter2 as EventEmitter } from 'eventemitter2';
|
|
2
|
-
import { WsClient } from './
|
|
2
|
+
import { WsClient } from './WsClient';
|
|
3
3
|
export class VapixEvents extends EventEmitter {
|
|
4
4
|
tls;
|
|
5
5
|
tlsInsecure;
|
|
@@ -23,7 +23,7 @@ export class VapixEvents extends EventEmitter {
|
|
|
23
23
|
this.ws.open();
|
|
24
24
|
}
|
|
25
25
|
disconnect() {
|
|
26
|
-
this.ws.
|
|
26
|
+
this.ws.destroy();
|
|
27
27
|
}
|
|
28
28
|
createWsClient() {
|
|
29
29
|
const options = {
|
|
@@ -36,7 +36,7 @@ export class VapixEvents extends EventEmitter {
|
|
|
36
36
|
address: '/vapix/ws-data-stream?sources=events',
|
|
37
37
|
};
|
|
38
38
|
this.ws = new WsClient(options);
|
|
39
|
-
this.ws.
|
|
39
|
+
this.ws.onOpen = () => {
|
|
40
40
|
const topics = [];
|
|
41
41
|
const eventNames = this.eventNames();
|
|
42
42
|
for (const eventName of eventNames) {
|
|
@@ -55,8 +55,8 @@ export class VapixEvents extends EventEmitter {
|
|
|
55
55
|
},
|
|
56
56
|
};
|
|
57
57
|
this.ws.send(JSON.stringify(topicFilter));
|
|
58
|
-
}
|
|
59
|
-
this.ws.
|
|
58
|
+
};
|
|
59
|
+
this.ws.onMessage = (data) => {
|
|
60
60
|
const dataJSON = JSON.parse(data.toString());
|
|
61
61
|
if (dataJSON.method === 'events:configure') {
|
|
62
62
|
if (dataJSON.error === undefined) {
|
|
@@ -70,13 +70,13 @@ export class VapixEvents extends EventEmitter {
|
|
|
70
70
|
}
|
|
71
71
|
const eventName = dataJSON.params.notification.topic;
|
|
72
72
|
this.emit(eventName, dataJSON);
|
|
73
|
-
}
|
|
74
|
-
this.ws.
|
|
73
|
+
};
|
|
74
|
+
this.ws.onError = (error) => {
|
|
75
75
|
this.emit('error', error);
|
|
76
|
-
}
|
|
77
|
-
this.ws.
|
|
76
|
+
};
|
|
77
|
+
this.ws.onClose = () => {
|
|
78
78
|
this.emit('close');
|
|
79
|
-
}
|
|
79
|
+
};
|
|
80
80
|
}
|
|
81
81
|
isReservedEventName(eventName) {
|
|
82
82
|
return eventName === 'open' || eventName === 'close' || eventName === 'error';
|
package/esm/node/WsClient.js
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
3
|
-
|
|
4
|
-
export class WsClient extends EventEmitter {
|
|
1
|
+
import { WebSocket } from 'ws';
|
|
2
|
+
import { Digest } from './Digest';
|
|
3
|
+
export class WsClient {
|
|
5
4
|
user;
|
|
6
5
|
pass;
|
|
7
6
|
address;
|
|
@@ -14,7 +13,6 @@ export class WsClient extends EventEmitter {
|
|
|
14
13
|
ws;
|
|
15
14
|
isClosed = false;
|
|
16
15
|
constructor(options) {
|
|
17
|
-
super();
|
|
18
16
|
const tls = options.tls ?? false;
|
|
19
17
|
const tlsInsecure = options.tlsInsecure ?? false;
|
|
20
18
|
const ip = options.ip ?? '127.0.0.1';
|
|
@@ -46,10 +44,10 @@ export class WsClient extends EventEmitter {
|
|
|
46
44
|
}
|
|
47
45
|
this.ws.binaryType = 'arraybuffer';
|
|
48
46
|
this.isAlive = true;
|
|
49
|
-
this.pingTimer = setInterval(
|
|
47
|
+
this.pingTimer = setInterval(() => {
|
|
50
48
|
if ((this.ws && this.ws.readyState !== WebSocket.OPEN) || this.isAlive === false) {
|
|
51
|
-
this.
|
|
52
|
-
|
|
49
|
+
this.onError(new Error('Connection timeout'));
|
|
50
|
+
this.closeWsConnection();
|
|
53
51
|
}
|
|
54
52
|
else {
|
|
55
53
|
this.isAlive = false;
|
|
@@ -72,23 +70,32 @@ export class WsClient extends EventEmitter {
|
|
|
72
70
|
this.open(res.headers['www-authenticate']);
|
|
73
71
|
}
|
|
74
72
|
else {
|
|
75
|
-
this.
|
|
73
|
+
this.onError(new Error('Status code: ' + res.statusCode));
|
|
76
74
|
this.closeWsConnection();
|
|
77
75
|
}
|
|
78
76
|
});
|
|
79
|
-
this.ws.on('open', () => this.
|
|
80
|
-
this.ws.on('message', (data) =>
|
|
77
|
+
this.ws.on('open', () => this.onOpen());
|
|
78
|
+
this.ws.on('message', (data, isBinary) => {
|
|
79
|
+
const message = isBinary ? data : data.toString();
|
|
80
|
+
this.onMessage(message);
|
|
81
|
+
});
|
|
81
82
|
this.ws.on('error', (error) => {
|
|
82
|
-
this.
|
|
83
|
+
this.onError(error);
|
|
83
84
|
this.closeWsConnection();
|
|
84
85
|
});
|
|
85
86
|
this.ws.on('close', () => this.closeWsConnection());
|
|
86
87
|
}
|
|
87
88
|
catch (error) {
|
|
88
|
-
this.
|
|
89
|
+
this.onError(error instanceof Error ? error : new Error('Unknown error'));
|
|
89
90
|
this.closeWsConnection();
|
|
90
91
|
}
|
|
91
92
|
}
|
|
93
|
+
onMessage = (_) => { };
|
|
94
|
+
onOpen = () => { };
|
|
95
|
+
onClose = () => { };
|
|
96
|
+
onError = (error) => {
|
|
97
|
+
console.error(error);
|
|
98
|
+
};
|
|
92
99
|
send(data) {
|
|
93
100
|
if (this.ws === undefined) {
|
|
94
101
|
throw new Error("This websocket hasn't been opened yet.");
|
|
@@ -97,7 +104,7 @@ export class WsClient extends EventEmitter {
|
|
|
97
104
|
this.ws.send(data);
|
|
98
105
|
}
|
|
99
106
|
}
|
|
100
|
-
|
|
107
|
+
destroy() {
|
|
101
108
|
if (this.isClosed) {
|
|
102
109
|
return;
|
|
103
110
|
}
|
|
@@ -127,7 +134,7 @@ export class WsClient extends EventEmitter {
|
|
|
127
134
|
wsCopy.terminate();
|
|
128
135
|
}
|
|
129
136
|
}, 5000);
|
|
130
|
-
this.
|
|
137
|
+
this.onClose();
|
|
131
138
|
}
|
|
132
139
|
catch (err) {
|
|
133
140
|
console.error(err);
|
|
@@ -1,18 +1,17 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { pad } from '../../internal/utils';
|
|
2
|
+
import { ProxyClient } from '../../internal/ProxyClient';
|
|
3
|
+
import { DefaultClient } from '../DefaultClient';
|
|
3
4
|
export class AxisCameraStationEvents {
|
|
4
5
|
sourceKey;
|
|
5
6
|
client;
|
|
6
|
-
constructor(
|
|
7
|
+
constructor(clientOptions, sourceKey) {
|
|
7
8
|
this.sourceKey = sourceKey;
|
|
8
|
-
|
|
9
|
-
this.client = opt;
|
|
10
|
-
}
|
|
11
|
-
else {
|
|
12
|
-
this.client = new DefaultClient(opt);
|
|
13
|
-
}
|
|
9
|
+
this.client = new DefaultClient(clientOptions);
|
|
14
10
|
}
|
|
15
|
-
|
|
11
|
+
getClient(proxyParams) {
|
|
12
|
+
return proxyParams ? new ProxyClient(this.client, proxyParams) : this.client;
|
|
13
|
+
}
|
|
14
|
+
async sendEvent(data, eventType, options) {
|
|
16
15
|
const dateString = this.getDate();
|
|
17
16
|
const event = {
|
|
18
17
|
addExternalDataRequest: {
|
|
@@ -23,9 +22,15 @@ export class AxisCameraStationEvents {
|
|
|
23
22
|
},
|
|
24
23
|
};
|
|
25
24
|
const eventData = JSON.stringify(event);
|
|
26
|
-
const
|
|
27
|
-
|
|
28
|
-
'
|
|
25
|
+
const agent = this.getClient(options?.proxyParams);
|
|
26
|
+
const res = await agent.post({
|
|
27
|
+
path: '/Acs/Api/ExternalDataFacade/AddExternalData',
|
|
28
|
+
data: eventData,
|
|
29
|
+
headers: {
|
|
30
|
+
'Content-Type': 'application/json',
|
|
31
|
+
'Content-Length': eventData.length.toString(),
|
|
32
|
+
},
|
|
33
|
+
timeout: options?.timeout,
|
|
29
34
|
});
|
|
30
35
|
if (!res.ok) {
|
|
31
36
|
throw new Error(`ACS status code: ${res.status}`);
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import { ErrorWithResponse } from '../../errors/errors';
|
|
2
|
+
import { pad } from '../../internal/utils';
|
|
3
|
+
import { cameraDetailsResponseSchema, cameraGuidsResponseSchema, successResponseSchema, } from '../../types/GenetecAgent';
|
|
4
|
+
export class GenetecAgent {
|
|
5
|
+
settings;
|
|
6
|
+
baseUrl;
|
|
7
|
+
credentials;
|
|
8
|
+
constructor(options = {}) {
|
|
9
|
+
this.settings = {
|
|
10
|
+
protocol: options.protocol ?? 'http',
|
|
11
|
+
ip: options.ip ?? '127.0.0.1',
|
|
12
|
+
port: options.port ?? 80,
|
|
13
|
+
baseUri: options.baseUri ?? 'WebSdk',
|
|
14
|
+
user: options.user ?? 'root',
|
|
15
|
+
pass: options.pass ?? '',
|
|
16
|
+
appId: options.appId ?? '',
|
|
17
|
+
timeout: options.timeout ?? 10000,
|
|
18
|
+
};
|
|
19
|
+
this.baseUrl = `${this.settings.protocol}://${this.settings.ip}:${this.settings.port}/${this.settings.baseUri}`;
|
|
20
|
+
this.credentials = btoa(`${this.settings.user};${this.settings.appId}:${this.settings.pass}`);
|
|
21
|
+
}
|
|
22
|
+
async checkConnection() {
|
|
23
|
+
const requestOptions = this.getRequestOptions('GET');
|
|
24
|
+
const res = await this.fetchWithTimeout(new URL(this.baseUrl), requestOptions);
|
|
25
|
+
if (!res.ok) {
|
|
26
|
+
throw new ErrorWithResponse(res);
|
|
27
|
+
}
|
|
28
|
+
const responseBody = await res.text();
|
|
29
|
+
const result = await successResponseSchema.safeParseAsync(JSON.parse(responseBody));
|
|
30
|
+
if (!result.success) {
|
|
31
|
+
throw new Error('Genetec connection test failed: ' + JSON.stringify(result.error.issues) + '\n' + responseBody);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
async getAllCameraGuids() {
|
|
35
|
+
const requestOptions = this.getRequestOptions('GET');
|
|
36
|
+
const url = new URL(`${this.baseUrl}/report/EntityConfiguration`);
|
|
37
|
+
url.searchParams.set('q', 'EntityTypes@Camera');
|
|
38
|
+
const res = await this.fetchWithTimeout(url, requestOptions);
|
|
39
|
+
if (!res.ok) {
|
|
40
|
+
throw new ErrorWithResponse(res);
|
|
41
|
+
}
|
|
42
|
+
const responseBody = await res.text();
|
|
43
|
+
const result = await cameraGuidsResponseSchema.safeParseAsync(JSON.parse(responseBody));
|
|
44
|
+
if (!result.success) {
|
|
45
|
+
throw new Error('Genetec get camera guids failed: ' + JSON.stringify(result.error.issues) + '\n' + responseBody);
|
|
46
|
+
}
|
|
47
|
+
return result.data;
|
|
48
|
+
}
|
|
49
|
+
async getCameraDetails(guids, parameters) {
|
|
50
|
+
const params = parameters.join(',');
|
|
51
|
+
const requestOptions = this.getRequestOptions('GET');
|
|
52
|
+
const allCameras = [];
|
|
53
|
+
const chunkSize = 10;
|
|
54
|
+
while (guids.length > 0) {
|
|
55
|
+
const chunk = guids.slice(0, chunkSize);
|
|
56
|
+
guids.splice(0, chunkSize);
|
|
57
|
+
const url = new URL(`${this.baseUrl}/entity`);
|
|
58
|
+
url.searchParams.set('q', chunk.map((item) => `entity=${item.Guid},${params}`).join(','));
|
|
59
|
+
const res = await this.fetchWithTimeout(url, requestOptions);
|
|
60
|
+
if (!res.ok) {
|
|
61
|
+
throw new ErrorWithResponse(res);
|
|
62
|
+
}
|
|
63
|
+
const responseBody = await res.text();
|
|
64
|
+
const result = await cameraDetailsResponseSchema.safeParseAsync(JSON.parse(responseBody));
|
|
65
|
+
if (!result.success) {
|
|
66
|
+
throw new Error('Genetec get camera details failed: ' + JSON.stringify(result.error.issues) + '\n' + responseBody);
|
|
67
|
+
}
|
|
68
|
+
const data = result.data;
|
|
69
|
+
const resultArray = Array.isArray(data.Rsp.Result) ? data.Rsp.Result : [data.Rsp.Result];
|
|
70
|
+
allCameras.push(...resultArray);
|
|
71
|
+
}
|
|
72
|
+
return allCameras;
|
|
73
|
+
}
|
|
74
|
+
async sendBookmark(guids, bookmarkText) {
|
|
75
|
+
const timeStamp = this.getTimeStamp();
|
|
76
|
+
const requestOptions = this.getRequestOptions('POST');
|
|
77
|
+
const url = new URL(`${this.baseUrl}/action`);
|
|
78
|
+
url.searchParams.set('q', guids.map((guid) => `AddCameraBookmark(${guid},${timeStamp},${bookmarkText})`).join(','));
|
|
79
|
+
const res = await this.fetchWithTimeout(url, requestOptions);
|
|
80
|
+
if (!res.ok) {
|
|
81
|
+
throw new ErrorWithResponse(res);
|
|
82
|
+
}
|
|
83
|
+
const responseBody = await res.text();
|
|
84
|
+
const result = await successResponseSchema.safeParseAsync(JSON.parse(responseBody));
|
|
85
|
+
if (!result.success) {
|
|
86
|
+
throw new Error('Genetec send bookmark failed: ' + JSON.stringify(result.error.issues) + '\n' + responseBody);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
getRequestOptions(method) {
|
|
90
|
+
return {
|
|
91
|
+
method,
|
|
92
|
+
headers: new Headers({
|
|
93
|
+
Authorization: `Basic ${this.credentials}`,
|
|
94
|
+
Accept: 'text/json',
|
|
95
|
+
}),
|
|
96
|
+
redirect: 'follow',
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
getTimeStamp() {
|
|
100
|
+
const date = new Date();
|
|
101
|
+
const year = date.getUTCFullYear();
|
|
102
|
+
const month = pad(date.getUTCMonth() + 1, 2);
|
|
103
|
+
const day = pad(date.getUTCDate(), 2);
|
|
104
|
+
const hours = pad(date.getUTCHours(), 2);
|
|
105
|
+
const minutes = pad(date.getUTCMinutes(), 2);
|
|
106
|
+
const seconds = pad(date.getUTCSeconds(), 2);
|
|
107
|
+
const miliSeconds = pad(date.getUTCMilliseconds(), 2);
|
|
108
|
+
return `${year}-${month}-${day}T${hours}:${minutes}:${seconds}.${miliSeconds}Z`;
|
|
109
|
+
}
|
|
110
|
+
async fetchWithTimeout(url, options) {
|
|
111
|
+
const controller = new AbortController();
|
|
112
|
+
const timeoutId = setTimeout(() => controller.abort(), this.settings.timeout);
|
|
113
|
+
try {
|
|
114
|
+
return await fetch(url, { ...options, signal: controller.signal });
|
|
115
|
+
}
|
|
116
|
+
finally {
|
|
117
|
+
clearTimeout(timeoutId);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
}
|
package/esm/node/index.js
CHANGED
|
@@ -1,2 +1,18 @@
|
|
|
1
|
-
export
|
|
2
|
-
export
|
|
1
|
+
export * from './DefaultClient';
|
|
2
|
+
export * from './WsClient';
|
|
3
|
+
export * from './HttpServer';
|
|
4
|
+
export * from './HttpRequestSender';
|
|
5
|
+
export * from './events/AxisCameraStationEvents';
|
|
6
|
+
export * from './TimeZoneDaemon';
|
|
7
|
+
export * from './events/GenetecAgent';
|
|
8
|
+
export * from '../types/GenetecAgent';
|
|
9
|
+
export { ResourceManager } from './CamOverlayPainter/ResourceManager';
|
|
10
|
+
export { Painter } from './CamOverlayPainter/Painter';
|
|
11
|
+
export { Frame } from './CamOverlayPainter/Frame';
|
|
12
|
+
export * from '../types/CamOverlayPainter';
|
|
13
|
+
export { CamOverlayDrawingAPI } from './CamOverlayDrawingAPI';
|
|
14
|
+
export * from '../types/CamOverlayDrawingAPI';
|
|
15
|
+
export { CamScripterAPICameraEventsGenerator } from './CamScripterAPICameraEventsGenerator';
|
|
16
|
+
export * from '../types/CamScripterAPICameraEventsGenerator';
|
|
17
|
+
export { VapixEvents } from './VapixEvents';
|
|
18
|
+
export * from '../types/VapixEvents';
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { infoTickerSchema } from './infotickerSchema';
|
|
3
|
+
import { accuweatherSchema } from './accuweatherSchema';
|
|
4
|
+
import { ptzCompassSchema } from './ptzCompassSchema';
|
|
5
|
+
import { imagesSchema } from './imagesSchema';
|
|
6
|
+
import { ptzSchema } from './ptzSchema';
|
|
7
|
+
import { pipSchema } from './pipSchema';
|
|
8
|
+
import { customGraphicsSchema } from './customGraphicsSchema';
|
|
9
|
+
import { screenSharingSchema } from './screenSharingSchema';
|
|
10
|
+
import { webCameraSharingSchema } from './webCameraSharingSchema';
|
|
11
|
+
import { baseballScoreBoardAutomaticSchema, baseballScoreBoardSchema, scoreBoardSchema, scoreOverviewSchema, } from './scoreBoardSchema';
|
|
12
|
+
export const wsResponseSchema = z.object({
|
|
13
|
+
status: z.number(),
|
|
14
|
+
message: z.string(),
|
|
15
|
+
});
|
|
16
|
+
export const servicesSchema = z.discriminatedUnion('name', [
|
|
17
|
+
infoTickerSchema,
|
|
18
|
+
accuweatherSchema,
|
|
19
|
+
ptzCompassSchema,
|
|
20
|
+
imagesSchema,
|
|
21
|
+
ptzSchema,
|
|
22
|
+
pipSchema,
|
|
23
|
+
customGraphicsSchema,
|
|
24
|
+
screenSharingSchema,
|
|
25
|
+
webCameraSharingSchema,
|
|
26
|
+
scoreBoardSchema,
|
|
27
|
+
baseballScoreBoardSchema,
|
|
28
|
+
baseballScoreBoardAutomaticSchema,
|
|
29
|
+
scoreOverviewSchema,
|
|
30
|
+
]);
|
|
31
|
+
export const serviceListSchema = z.object({
|
|
32
|
+
services: z.array(servicesSchema),
|
|
33
|
+
});
|
|
34
|
+
export const isAccuweather = (service) => service.name === 'accuweather';
|
|
35
|
+
export const isCustomGraphics = (service) => service.name === 'customGraphics';
|
|
36
|
+
export const isImages = (service) => service.name === 'images';
|
|
37
|
+
export const isInfoticker = (service) => service.name === 'infoticker';
|
|
38
|
+
export const isPip = (service) => service.name === 'pip';
|
|
39
|
+
export const isPtzCompass = (service) => service.name === 'ptzCompass';
|
|
40
|
+
export const isPtz = (service) => service.name === 'ptz';
|
|
41
|
+
export const isScreenSharing = (service) => service.name === 'screenSharing';
|
|
42
|
+
export const isWebCameraSharing = (service) => service.name === 'web_camera';
|
|
43
|
+
export const isScoreBoard = (service) => service.name === 'scoreBoard';
|
|
44
|
+
export const isBaseballScoreBoard = (service) => service.name === 'baseballScoreBoard';
|
|
45
|
+
export const isBaseballScoreBoardAutomatic = (service) => service.name === 'myBallBaseballWidgets';
|
|
46
|
+
export const isScoreOverview = (service) => service.name === 'scoreOverview';
|
|
47
|
+
export var ImageType;
|
|
48
|
+
(function (ImageType) {
|
|
49
|
+
ImageType[ImageType["PNG"] = 0] = "PNG";
|
|
50
|
+
ImageType[ImageType["JPEG"] = 1] = "JPEG";
|
|
51
|
+
})(ImageType || (ImageType = {}));
|
|
52
|
+
export const fileStorageTypeSchema = z.union([
|
|
53
|
+
z.literal('flash'),
|
|
54
|
+
z.literal('SD0'),
|
|
55
|
+
z.literal('ftp'),
|
|
56
|
+
z.literal('samba'),
|
|
57
|
+
z.literal('url'),
|
|
58
|
+
]);
|
|
59
|
+
export const storageDataListSchema = z.array(z.object({
|
|
60
|
+
type: fileStorageTypeSchema,
|
|
61
|
+
state: z.string(),
|
|
62
|
+
}));
|
|
63
|
+
export const storageResponseSchema = z.object({
|
|
64
|
+
code: z.number(),
|
|
65
|
+
list: storageDataListSchema,
|
|
66
|
+
});
|
|
67
|
+
export const fileSchema = z.object({
|
|
68
|
+
name: z.string(),
|
|
69
|
+
path: z.string().url(),
|
|
70
|
+
storage: fileStorageTypeSchema,
|
|
71
|
+
});
|
|
72
|
+
export const fileListSchema = z.array(fileSchema);
|
|
73
|
+
export const fileDataSchema = z.object({
|
|
74
|
+
code: z.number(),
|
|
75
|
+
list: fileListSchema,
|
|
76
|
+
});
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { serviceNames, coordinateSystemSchema, fontSchema, languageSchema, weatherUnitSchema, serviceCommonSchema, } from './serviceCommonTypes';
|
|
3
|
+
export const accuweatherSchema = serviceCommonSchema.extend({
|
|
4
|
+
name: z.literal(serviceNames.accuweather),
|
|
5
|
+
location: z.string(),
|
|
6
|
+
locationName: z.string(),
|
|
7
|
+
title: z.string(),
|
|
8
|
+
bgStartColor: z.union([
|
|
9
|
+
z.literal('237,143,73,0.93'),
|
|
10
|
+
z.literal('0,0,0,0.75'),
|
|
11
|
+
z.literal('31,32,73,0.9'),
|
|
12
|
+
z.literal('76,94,127,0.95'),
|
|
13
|
+
]),
|
|
14
|
+
bgEndColor: z.union([
|
|
15
|
+
z.literal('234,181,89,0.93'),
|
|
16
|
+
z.literal('0,0,0,0.75'),
|
|
17
|
+
z.literal('73,96,213,0.9'),
|
|
18
|
+
z.literal('140,150,168,0.95'),
|
|
19
|
+
]),
|
|
20
|
+
clockType: z.union([z.literal('12h'), z.literal('24h')]),
|
|
21
|
+
lang: languageSchema,
|
|
22
|
+
font: fontSchema,
|
|
23
|
+
units: weatherUnitSchema,
|
|
24
|
+
pos_x: z.number(),
|
|
25
|
+
pos_y: z.number(),
|
|
26
|
+
coordSystem: coordinateSystemSchema,
|
|
27
|
+
layout: z.union([
|
|
28
|
+
z.literal('0'),
|
|
29
|
+
z.literal('1'),
|
|
30
|
+
z.literal('2'),
|
|
31
|
+
z.literal('3'),
|
|
32
|
+
z.literal('4'),
|
|
33
|
+
z.literal('5'),
|
|
34
|
+
z.literal('6'),
|
|
35
|
+
z.literal('7'),
|
|
36
|
+
z.literal('8'),
|
|
37
|
+
z.literal('9'),
|
|
38
|
+
z.literal('10'),
|
|
39
|
+
z.literal('11'),
|
|
40
|
+
z.literal('12'),
|
|
41
|
+
z.literal('13'),
|
|
42
|
+
]),
|
|
43
|
+
scale: z.number().nonnegative(),
|
|
44
|
+
});
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { serviceNames, coordinateSystemSchema, fontSchema, serviceCommonSchema } from './serviceCommonTypes';
|
|
3
|
+
const mappingZonesCommonSchema = z.object({
|
|
4
|
+
name: z.string(),
|
|
5
|
+
pos_x: z.number(),
|
|
6
|
+
pos_y: z.number(),
|
|
7
|
+
text: z
|
|
8
|
+
.array(z.object({
|
|
9
|
+
source: z.string(),
|
|
10
|
+
active: z.boolean(),
|
|
11
|
+
}))
|
|
12
|
+
.optional(),
|
|
13
|
+
wrapText: z.boolean(),
|
|
14
|
+
textLines: z.number().positive(),
|
|
15
|
+
textWidth: z.number().nonnegative(),
|
|
16
|
+
textAlign: z.union([z.literal('A_LEFT'), z.literal('A_CENTER'), z.literal('A_RIGHT')]),
|
|
17
|
+
textVerticalAlign: z.union([z.literal('VA_TOP'), z.literal('VA_CENTER'), z.literal('VA_BOTTOM')]),
|
|
18
|
+
textColor: z.string(),
|
|
19
|
+
font: fontSchema,
|
|
20
|
+
fontSize: z.number().nonnegative(),
|
|
21
|
+
switchingTime: z.number().nonnegative(),
|
|
22
|
+
});
|
|
23
|
+
export const mappingZonesCountdownSettingsSchema = z.object({
|
|
24
|
+
startDate: z.number().nonnegative(),
|
|
25
|
+
targetDate: z.number().nonnegative(),
|
|
26
|
+
countdown: z.boolean(),
|
|
27
|
+
countup: z.boolean(),
|
|
28
|
+
displayDay: z.boolean(),
|
|
29
|
+
displayHour: z.boolean(),
|
|
30
|
+
displayMinute: z.boolean(),
|
|
31
|
+
displaySeconds: z.boolean(),
|
|
32
|
+
idleText: z.string(),
|
|
33
|
+
hideZeros: z.boolean(),
|
|
34
|
+
delimiter: z.union([z.literal('colon'), z.literal('letters')]),
|
|
35
|
+
suffixSeconds: z.string(),
|
|
36
|
+
suffixMinute: z.string(),
|
|
37
|
+
suffixHour: z.string(),
|
|
38
|
+
suffixDay: z.string(),
|
|
39
|
+
loop: z.boolean(),
|
|
40
|
+
loopPeriod: z.number().nonnegative(),
|
|
41
|
+
waitingPeriod: z.number().nonnegative(),
|
|
42
|
+
});
|
|
43
|
+
const mappingZonePlainSchema = mappingZonesCommonSchema.extend({
|
|
44
|
+
type: z.literal('plain'),
|
|
45
|
+
});
|
|
46
|
+
const mappingZoneCountdownSchema = mappingZonesCommonSchema.extend({
|
|
47
|
+
type: z.literal('countdown'),
|
|
48
|
+
settings: mappingZonesCountdownSettingsSchema,
|
|
49
|
+
});
|
|
50
|
+
export const mappingZoneSchema = z.discriminatedUnion('type', [mappingZonePlainSchema, mappingZoneCountdownSchema]);
|
|
51
|
+
export const customGraphicsSchema = serviceCommonSchema.extend({
|
|
52
|
+
name: z.literal(serviceNames.customGraphics),
|
|
53
|
+
pos_x: z.number(),
|
|
54
|
+
pos_y: z.number(),
|
|
55
|
+
coordSystem: coordinateSystemSchema,
|
|
56
|
+
clockFormat: z.union([z.literal('12h'), z.literal('24h')]),
|
|
57
|
+
background: z.enum(['custom', 'image']),
|
|
58
|
+
image: z.string(),
|
|
59
|
+
customAreaColor: z.string(),
|
|
60
|
+
customAreaWidth: z.number().nonnegative(),
|
|
61
|
+
customAreaHeight: z.number().nonnegative(),
|
|
62
|
+
customAreaCorners: z.union([z.literal('sharp'), z.literal('rounded')]),
|
|
63
|
+
mappingZones: z.array(mappingZoneSchema),
|
|
64
|
+
});
|
|
65
|
+
export const fieldSchema = z.object({
|
|
66
|
+
field_name: z.string(),
|
|
67
|
+
text: z.string(),
|
|
68
|
+
color: z.string().optional(),
|
|
69
|
+
});
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export * from './CamOverlayAPI';
|
|
2
|
+
export * from './serviceCommonTypes';
|
|
3
|
+
export * from './accuweatherSchema';
|
|
4
|
+
export * from './customGraphicsSchema';
|
|
5
|
+
export * from './imagesSchema';
|
|
6
|
+
export * from './infotickerSchema';
|
|
7
|
+
export * from './pipSchema';
|
|
8
|
+
export * from './ptzCompassSchema';
|
|
9
|
+
export * from './ptzSchema';
|
|
10
|
+
export * from './screenSharingSchema';
|
|
11
|
+
export * from './webCameraSharingSchema';
|