camstreamerlib 4.0.0-beta.4 → 4.0.0-beta.41

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.
Files changed (240) hide show
  1. package/README.md +112 -0
  2. package/cjs/CamOverlayAPI.js +135 -92
  3. package/cjs/CamScripterAPI.js +52 -42
  4. package/cjs/CamStreamerAPI.js +83 -39
  5. package/cjs/CamSwitcherAPI.js +141 -123
  6. package/cjs/CamSwitcherEvents.js +4 -60
  7. package/cjs/PlaneTrackerAPI.js +210 -0
  8. package/cjs/VapixAPI.js +323 -233
  9. package/cjs/{CreatePackage.js → bin/CreatePackage.js} +22 -19
  10. package/cjs/errors/errors.js +78 -1
  11. package/cjs/index.js +17 -4
  12. package/cjs/internal/ProxyClient.js +28 -32
  13. package/cjs/internal/WsEvents.js +72 -0
  14. package/cjs/internal/types.js +2 -0
  15. package/cjs/internal/utils.js +22 -3
  16. package/cjs/{CamOverlayDrawingAPI.js → node/CamOverlayDrawingAPI.js} +7 -4
  17. package/cjs/{CamOverlayPainter → node/CamOverlayPainter}/Frame.js +33 -0
  18. package/cjs/{CamOverlayPainter → node/CamOverlayPainter}/Painter.js +5 -17
  19. package/cjs/node/CamOverlayPainter/ResourceManager.js +72 -0
  20. package/cjs/{CamScripterAPICameraEventsGenerator.js → node/CamScripterAPICameraEventsGenerator.js} +7 -4
  21. package/cjs/node/DefaultClient.js +10 -12
  22. package/cjs/{internal → node}/Digest.js +8 -5
  23. package/cjs/node/HttpRequestSender.js +14 -4
  24. package/cjs/node/HttpServer.js +15 -12
  25. package/cjs/{VapixEvents.js → node/VapixEvents.js} +1 -1
  26. package/cjs/node/WsClient.js +12 -9
  27. package/cjs/node/events/AxisCameraStationEvents.js +53 -0
  28. package/cjs/node/events/GenetecAgent.js +123 -0
  29. package/cjs/node/index.js +38 -5
  30. package/cjs/types/CamOverlayAPI/CamOverlayAPI.js +92 -0
  31. package/cjs/types/CamOverlayAPI/accuweatherSchema.js +47 -0
  32. package/cjs/types/CamOverlayAPI/customGraphicsSchema.js +72 -0
  33. package/cjs/types/CamOverlayAPI/imagesSchema.js +9 -0
  34. package/cjs/types/CamOverlayAPI/index.js +27 -0
  35. package/cjs/types/CamOverlayAPI/infotickerSchema.js +26 -0
  36. package/cjs/types/CamOverlayAPI/pipSchema.js +39 -0
  37. package/cjs/types/CamOverlayAPI/ptzCompassSchema.js +25 -0
  38. package/cjs/types/CamOverlayAPI/ptzSchema.js +12 -0
  39. package/cjs/types/CamOverlayAPI/scoreBoardSchema.js +132 -0
  40. package/cjs/types/CamOverlayAPI/screenSharingSchema.js +8 -0
  41. package/cjs/types/CamOverlayAPI/serviceCommonTypes.js +91 -0
  42. package/cjs/types/CamOverlayAPI/webCameraSharingSchema.js +8 -0
  43. package/cjs/types/CamOverlayDrawingAPI.js +2 -0
  44. package/cjs/types/CamOverlayPainter.js +14 -0
  45. package/cjs/types/CamScripterAPI.js +22 -7
  46. package/cjs/types/CamScripterAPICameraEventsGenerator.js +2 -0
  47. package/cjs/types/CamStreamerAPI.js +34 -3
  48. package/cjs/types/CamSwitcherAPI.js +38 -1
  49. package/cjs/types/CamSwitcherEvents.js +8 -0
  50. package/cjs/types/GenetecAgent.js +31 -0
  51. package/cjs/types/PlaneTrackerAPI.js +286 -0
  52. package/cjs/types/VapixAPI.js +71 -13
  53. package/cjs/types/VapixEvents.js +2 -0
  54. package/cjs/web/DefaultClient.js +22 -10
  55. package/cjs/web/WsClient.js +3 -3
  56. package/esm/CamOverlayAPI.js +131 -88
  57. package/esm/CamScripterAPI.js +48 -38
  58. package/esm/CamStreamerAPI.js +81 -38
  59. package/esm/CamSwitcherAPI.js +137 -119
  60. package/esm/CamSwitcherEvents.js +5 -61
  61. package/esm/PlaneTrackerAPI.js +206 -0
  62. package/esm/VapixAPI.js +315 -225
  63. package/esm/{CreatePackage.js → bin/CreatePackage.js} +3 -3
  64. package/esm/errors/errors.js +66 -0
  65. package/esm/index.js +12 -3
  66. package/esm/internal/ProxyClient.js +28 -32
  67. package/esm/internal/WsEvents.js +68 -0
  68. package/esm/internal/utils.js +17 -1
  69. package/esm/{CamOverlayDrawingAPI.js → node/CamOverlayDrawingAPI.js} +2 -2
  70. package/esm/{CamOverlayPainter → node/CamOverlayPainter}/Frame.js +33 -0
  71. package/esm/{CamOverlayPainter → node/CamOverlayPainter}/Painter.js +2 -13
  72. package/esm/{CamOverlayPainter → node/CamOverlayPainter}/ResourceManager.js +7 -5
  73. package/esm/{CamScripterAPICameraEventsGenerator.js → node/CamScripterAPICameraEventsGenerator.js} +2 -2
  74. package/esm/node/DefaultClient.js +10 -12
  75. package/esm/{internal → node}/Digest.js +1 -1
  76. package/esm/node/HttpRequestSender.js +14 -4
  77. package/esm/node/HttpServer.js +5 -5
  78. package/esm/{VapixEvents.js → node/VapixEvents.js} +1 -1
  79. package/esm/node/WsClient.js +3 -3
  80. package/esm/{events → node/events}/AxisCameraStationEvents.js +18 -13
  81. package/esm/node/events/GenetecAgent.js +119 -0
  82. package/esm/node/index.js +17 -2
  83. package/esm/types/CamOverlayAPI/CamOverlayAPI.js +76 -0
  84. package/esm/types/CamOverlayAPI/accuweatherSchema.js +44 -0
  85. package/esm/types/CamOverlayAPI/customGraphicsSchema.js +69 -0
  86. package/esm/types/CamOverlayAPI/imagesSchema.js +6 -0
  87. package/esm/types/CamOverlayAPI/index.js +11 -0
  88. package/esm/types/CamOverlayAPI/infotickerSchema.js +23 -0
  89. package/esm/types/CamOverlayAPI/pipSchema.js +36 -0
  90. package/esm/types/CamOverlayAPI/ptzCompassSchema.js +22 -0
  91. package/esm/types/CamOverlayAPI/ptzSchema.js +9 -0
  92. package/esm/types/CamOverlayAPI/scoreBoardSchema.js +129 -0
  93. package/esm/types/CamOverlayAPI/screenSharingSchema.js +5 -0
  94. package/esm/types/CamOverlayAPI/serviceCommonTypes.js +88 -0
  95. package/esm/types/CamOverlayAPI/webCameraSharingSchema.js +5 -0
  96. package/esm/types/CamOverlayPainter.js +11 -0
  97. package/esm/types/CamScripterAPI.js +21 -6
  98. package/esm/types/CamScripterAPICameraEventsGenerator.js +1 -0
  99. package/esm/types/CamStreamerAPI.js +33 -2
  100. package/esm/types/CamSwitcherAPI.js +38 -1
  101. package/esm/types/CamSwitcherEvents.js +8 -0
  102. package/esm/types/GenetecAgent.js +28 -0
  103. package/esm/types/PlaneTrackerAPI.js +283 -0
  104. package/esm/types/VapixAPI.js +70 -12
  105. package/esm/types/VapixEvents.js +1 -0
  106. package/esm/web/DefaultClient.js +22 -10
  107. package/esm/web/WsClient.js +3 -3
  108. package/package.json +30 -12
  109. package/types/CamOverlayAPI.d.ts +865 -0
  110. package/types/CamScripterAPI.d.ts +47 -0
  111. package/types/CamStreamerAPI.d.ts +64 -0
  112. package/types/CamSwitcherAPI.d.ts +167 -0
  113. package/types/CamSwitcherEvents.d.ts +8 -0
  114. package/types/PlaneTrackerAPI.d.ts +230 -0
  115. package/types/VapixAPI.d.ts +118 -0
  116. package/types/bin/CreatePackage.d.ts +1 -0
  117. package/types/errors/errors.d.ts +68 -0
  118. package/types/index.d.ts +20 -0
  119. package/types/internal/ProxyClient.d.ts +10 -0
  120. package/types/internal/WsEvents.d.ts +41 -0
  121. package/types/internal/types.d.ts +45 -0
  122. package/{cjs → types}/internal/utils.d.ts +4 -1
  123. package/{cjs → types}/internal/versionCompare.d.ts +2 -2
  124. package/types/node/CamOverlayDrawingAPI.d.ts +41 -0
  125. package/{esm → types/node}/CamOverlayPainter/Frame.d.ts +8 -37
  126. package/{cjs → types/node}/CamOverlayPainter/Painter.d.ts +5 -21
  127. package/types/node/CamOverlayPainter/ResourceManager.d.ts +15 -0
  128. package/types/node/CamScripterAPICameraEventsGenerator.d.ts +31 -0
  129. package/types/node/DefaultClient.d.ts +16 -0
  130. package/{esm → types}/node/HttpRequestSender.d.ts +1 -0
  131. package/{cjs → types}/node/HttpServer.d.ts +2 -2
  132. package/types/node/VapixEvents.d.ts +16 -0
  133. package/{cjs → types}/node/WsClient.d.ts +3 -2
  134. package/types/node/events/AxisCameraStationEvents.d.ts +12 -0
  135. package/types/node/events/GenetecAgent.d.ts +16 -0
  136. package/types/node/index.d.ts +17 -0
  137. package/types/types/CamOverlayAPI/CamOverlayAPI.d.ts +4321 -0
  138. package/types/types/CamOverlayAPI/accuweatherSchema.d.ts +84 -0
  139. package/types/types/CamOverlayAPI/customGraphicsSchema.d.ts +700 -0
  140. package/types/types/CamOverlayAPI/imagesSchema.d.ts +95 -0
  141. package/types/types/CamOverlayAPI/index.d.ts +11 -0
  142. package/types/types/CamOverlayAPI/infotickerSchema.d.ts +96 -0
  143. package/types/types/CamOverlayAPI/pipSchema.d.ts +125 -0
  144. package/types/types/CamOverlayAPI/ptzCompassSchema.d.ts +93 -0
  145. package/types/types/CamOverlayAPI/ptzSchema.d.ts +118 -0
  146. package/types/types/CamOverlayAPI/scoreBoardSchema.d.ts +357 -0
  147. package/types/types/CamOverlayAPI/screenSharingSchema.d.ts +58 -0
  148. package/types/types/CamOverlayAPI/serviceCommonTypes.d.ts +145 -0
  149. package/types/types/CamOverlayAPI/webCameraSharingSchema.d.ts +58 -0
  150. package/types/types/CamOverlayDrawingAPI.d.ts +48 -0
  151. package/types/types/CamOverlayPainter.d.ts +76 -0
  152. package/types/types/CamScripterAPI.d.ts +130 -0
  153. package/types/types/CamScripterAPICameraEventsGenerator.d.ts +45 -0
  154. package/types/types/CamStreamerAPI.d.ts +272 -0
  155. package/{esm → types}/types/CamSwitcherAPI.d.ts +115 -36
  156. package/{cjs → types}/types/CamSwitcherEvents.d.ts +77 -0
  157. package/{esm/events → types/types}/GenetecAgent.d.ts +47 -47
  158. package/types/types/PlaneTrackerAPI.d.ts +890 -0
  159. package/{cjs → types}/types/VapixAPI.d.ts +647 -465
  160. package/types/types/VapixEvents.d.ts +15 -0
  161. package/{esm → types}/types/common.d.ts +15 -5
  162. package/types/web/DefaultClient.d.ts +6 -0
  163. package/cjs/CamOverlayAPI.d.ts +0 -31
  164. package/cjs/CamOverlayDrawingAPI.d.ts +0 -86
  165. package/cjs/CamOverlayPainter/Frame.d.ts +0 -96
  166. package/cjs/CamOverlayPainter/ResourceManager.d.ts +0 -14
  167. package/cjs/CamOverlayPainter/ResourceManager.js +0 -46
  168. package/cjs/CamScripterAPI.d.ts +0 -19
  169. package/cjs/CamScripterAPICameraEventsGenerator.d.ts +0 -74
  170. package/cjs/CamStreamerAPI.d.ts +0 -16
  171. package/cjs/CamSwitcherAPI.d.ts +0 -48
  172. package/cjs/CamSwitcherEvents.d.ts +0 -18
  173. package/cjs/VapixAPI.d.ts +0 -66
  174. package/cjs/VapixEvents.d.ts +0 -43
  175. package/cjs/errors/errors.d.ts +0 -34
  176. package/cjs/events/AxisCameraStationEvents.d.ts +0 -9
  177. package/cjs/events/AxisCameraStationEvents.js +0 -48
  178. package/cjs/events/GenetecAgent.d.ts +0 -174
  179. package/cjs/events/GenetecAgent.js +0 -123
  180. package/cjs/index.d.ts +0 -11
  181. package/cjs/internal/ProxyClient.d.ts +0 -11
  182. package/cjs/internal/common.d.ts +0 -39
  183. package/cjs/internal/common.js +0 -27
  184. package/cjs/node/DefaultClient.d.ts +0 -15
  185. package/cjs/node/HttpRequestSender.d.ts +0 -28
  186. package/cjs/node/WsEventClient.d.ts +0 -13
  187. package/cjs/node/WsEventClient.js +0 -22
  188. package/cjs/types/CamOverlayAPI.d.ts +0 -188
  189. package/cjs/types/CamOverlayAPI.js +0 -47
  190. package/cjs/types/CamScripterAPI.d.ts +0 -67
  191. package/cjs/types/CamStreamerAPI.d.ts +0 -139
  192. package/cjs/types/CamSwitcherAPI.d.ts +0 -814
  193. package/cjs/types/common.d.ts +0 -37
  194. package/cjs/web/DefaultClient.d.ts +0 -6
  195. package/cjs/web/index.d.ts +0 -2
  196. package/esm/CamOverlayAPI.d.ts +0 -31
  197. package/esm/CamOverlayDrawingAPI.d.ts +0 -86
  198. package/esm/CamOverlayPainter/Painter.d.ts +0 -48
  199. package/esm/CamOverlayPainter/ResourceManager.d.ts +0 -14
  200. package/esm/CamScripterAPI.d.ts +0 -19
  201. package/esm/CamScripterAPICameraEventsGenerator.d.ts +0 -74
  202. package/esm/CamStreamerAPI.d.ts +0 -16
  203. package/esm/CamSwitcherAPI.d.ts +0 -48
  204. package/esm/CamSwitcherEvents.d.ts +0 -18
  205. package/esm/VapixAPI.d.ts +0 -66
  206. package/esm/VapixEvents.d.ts +0 -43
  207. package/esm/errors/errors.d.ts +0 -34
  208. package/esm/events/AxisCameraStationEvents.d.ts +0 -9
  209. package/esm/events/GenetecAgent.js +0 -119
  210. package/esm/index.d.ts +0 -11
  211. package/esm/internal/Digest.d.ts +0 -4
  212. package/esm/internal/ProxyClient.d.ts +0 -11
  213. package/esm/internal/common.d.ts +0 -39
  214. package/esm/internal/common.js +0 -20
  215. package/esm/internal/constants.d.ts +0 -1
  216. package/esm/internal/transformers.d.ts +0 -5
  217. package/esm/internal/utils.d.ts +0 -11
  218. package/esm/internal/versionCompare.d.ts +0 -6
  219. package/esm/node/DefaultClient.d.ts +0 -15
  220. package/esm/node/HttpServer.d.ts +0 -21
  221. package/esm/node/WsClient.d.ts +0 -39
  222. package/esm/node/WsEventClient.d.ts +0 -13
  223. package/esm/node/WsEventClient.js +0 -18
  224. package/esm/node/index.d.ts +0 -2
  225. package/esm/types/CamOverlayAPI.d.ts +0 -188
  226. package/esm/types/CamOverlayAPI.js +0 -44
  227. package/esm/types/CamScripterAPI.d.ts +0 -67
  228. package/esm/types/CamStreamerAPI.d.ts +0 -139
  229. package/esm/types/CamSwitcherEvents.d.ts +0 -491
  230. package/esm/types/VapixAPI.d.ts +0 -1683
  231. package/esm/web/DefaultClient.d.ts +0 -6
  232. package/esm/web/WsClient.d.ts +0 -13
  233. package/esm/web/index.d.ts +0 -2
  234. /package/{cjs/CreatePackage.d.ts → esm/internal/types.js} +0 -0
  235. /package/esm/{CreatePackage.d.ts → types/CamOverlayDrawingAPI.js} +0 -0
  236. /package/{cjs → types}/internal/constants.d.ts +0 -0
  237. /package/{cjs → types}/internal/transformers.d.ts +0 -0
  238. /package/{cjs/internal → types/node}/Digest.d.ts +0 -0
  239. /package/{cjs → types}/web/WsClient.d.ts +0 -0
  240. /package/{cjs/node → types/web}/index.d.ts +0 -0
@@ -0,0 +1,119 @@
1
+ import { responseStringify, pad } from '../../internal/utils';
2
+ import { cameraDetailsResponseSchema, cameraGuidsResponseSchema, successResponseSchema, } from '../../types/GenetecAgent';
3
+ export class GenetecAgent {
4
+ settings;
5
+ baseUrl;
6
+ credentials;
7
+ constructor(options = {}) {
8
+ this.settings = {
9
+ protocol: options.protocol ?? 'http',
10
+ ip: options.ip ?? '127.0.0.1',
11
+ port: options.port ?? 80,
12
+ baseUri: options.baseUri ?? 'WebSdk',
13
+ user: options.user ?? 'root',
14
+ pass: options.pass ?? '',
15
+ appId: options.appId ?? '',
16
+ timeout: options.timeout ?? 10000,
17
+ };
18
+ this.baseUrl = `${this.settings.protocol}://${this.settings.ip}:${this.settings.port}/${this.settings.baseUri}`;
19
+ this.credentials = btoa(`${this.settings.user};${this.settings.appId}:${this.settings.pass}`);
20
+ }
21
+ async checkConnection() {
22
+ const requestOptions = this.getRequestOptions('GET');
23
+ const res = await this.fetchWithTimeout(new URL(this.baseUrl), requestOptions);
24
+ if (!res.ok) {
25
+ throw new Error(await responseStringify(res));
26
+ }
27
+ const responseBody = await res.text();
28
+ const result = await successResponseSchema.safeParseAsync(JSON.parse(responseBody));
29
+ if (!result.success) {
30
+ throw new Error('Genetec connection test failed: ' + JSON.stringify(result.error.issues) + '\n' + responseBody);
31
+ }
32
+ }
33
+ async getAllCameraGuids() {
34
+ const requestOptions = this.getRequestOptions('GET');
35
+ const url = new URL(`${this.baseUrl}/report/EntityConfiguration`);
36
+ url.searchParams.set('q', 'EntityTypes@Camera');
37
+ const res = await this.fetchWithTimeout(url, requestOptions);
38
+ if (!res.ok) {
39
+ throw new Error(await responseStringify(res));
40
+ }
41
+ const responseBody = await res.text();
42
+ const result = await cameraGuidsResponseSchema.safeParseAsync(JSON.parse(responseBody));
43
+ if (!result.success) {
44
+ throw new Error('Genetec get camera guids failed: ' + JSON.stringify(result.error.issues) + '\n' + responseBody);
45
+ }
46
+ return result.data;
47
+ }
48
+ async getCameraDetails(guids, parameters) {
49
+ const params = parameters.join(',');
50
+ const requestOptions = this.getRequestOptions('GET');
51
+ const allCameras = [];
52
+ const chunkSize = 10;
53
+ while (guids.length > 0) {
54
+ const chunk = guids.slice(0, chunkSize);
55
+ guids.splice(0, chunkSize);
56
+ const url = new URL(`${this.baseUrl}/entity`);
57
+ url.searchParams.set('q', chunk.map((item) => `entity=${item.Guid},${params}`).join(','));
58
+ const res = await this.fetchWithTimeout(url, requestOptions);
59
+ if (!res.ok) {
60
+ throw new Error(await responseStringify(res));
61
+ }
62
+ const responseBody = await res.text();
63
+ const result = await cameraDetailsResponseSchema.safeParseAsync(JSON.parse(responseBody));
64
+ if (!result.success) {
65
+ throw new Error('Genetec get camera details failed: ' + JSON.stringify(result.error.issues) + '\n' + responseBody);
66
+ }
67
+ const data = result.data;
68
+ const resultArray = Array.isArray(data.Rsp.Result) ? data.Rsp.Result : [data.Rsp.Result];
69
+ allCameras.push(...resultArray);
70
+ }
71
+ return allCameras;
72
+ }
73
+ async sendBookmark(guids, bookmarkText) {
74
+ const timeStamp = this.getTimeStamp();
75
+ const requestOptions = this.getRequestOptions('POST');
76
+ const url = new URL(`${this.baseUrl}/action`);
77
+ url.searchParams.set('q', guids.map((guid) => `AddCameraBookmark(${guid},${timeStamp},${bookmarkText})`).join(','));
78
+ const res = await this.fetchWithTimeout(url, requestOptions);
79
+ if (!res.ok) {
80
+ throw new Error(await responseStringify(res));
81
+ }
82
+ const responseBody = await res.text();
83
+ const result = await successResponseSchema.safeParseAsync(JSON.parse(responseBody));
84
+ if (!result.success) {
85
+ throw new Error('Genetec send bookmark failed: ' + JSON.stringify(result.error.issues) + '\n' + responseBody);
86
+ }
87
+ }
88
+ getRequestOptions(method) {
89
+ return {
90
+ method,
91
+ headers: new Headers({
92
+ Authorization: `Basic ${this.credentials}`,
93
+ Accept: 'text/json',
94
+ }),
95
+ redirect: 'follow',
96
+ };
97
+ }
98
+ getTimeStamp() {
99
+ const date = new Date();
100
+ const year = date.getUTCFullYear();
101
+ const month = pad(date.getUTCMonth() + 1, 2);
102
+ const day = pad(date.getUTCDate(), 2);
103
+ const hours = pad(date.getUTCHours(), 2);
104
+ const minutes = pad(date.getUTCMinutes(), 2);
105
+ const seconds = pad(date.getUTCSeconds(), 2);
106
+ const miliSeconds = pad(date.getUTCMilliseconds(), 2);
107
+ return `${year}-${month}-${day}T${hours}:${minutes}:${seconds}.${miliSeconds}Z`;
108
+ }
109
+ async fetchWithTimeout(url, options) {
110
+ const controller = new AbortController();
111
+ const timeoutId = setTimeout(() => controller.abort(), this.settings.timeout);
112
+ try {
113
+ return await fetch(url, { ...options, signal: controller.signal });
114
+ }
115
+ finally {
116
+ clearTimeout(timeoutId);
117
+ }
118
+ }
119
+ }
package/esm/node/index.js CHANGED
@@ -1,2 +1,17 @@
1
- export { DefaultClient } from './DefaultClient';
2
- export { WsClient } from './WsClient';
1
+ export * from './DefaultClient';
2
+ export * from './WsClient';
3
+ export * from './HttpServer';
4
+ export * from './HttpRequestSender';
5
+ export * from './events/AxisCameraStationEvents';
6
+ export * from './events/GenetecAgent';
7
+ export * from '../types/GenetecAgent';
8
+ export { ResourceManager } from './CamOverlayPainter/ResourceManager';
9
+ export { Painter } from './CamOverlayPainter/Painter';
10
+ export { Frame } from './CamOverlayPainter/Frame';
11
+ export * from '../types/CamOverlayPainter';
12
+ export { CamOverlayDrawingAPI } from './CamOverlayDrawingAPI';
13
+ export * from '../types/CamOverlayDrawingAPI';
14
+ export { CamScripterAPICameraEventsGenerator } from './CamScripterAPICameraEventsGenerator';
15
+ export * from '../types/CamScripterAPICameraEventsGenerator';
16
+ export { VapixEvents } from './VapixEvents';
17
+ 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,6 @@
1
+ import { z } from 'zod';
2
+ import { serviceNames, overlaySchema, serviceCommonSchema } from './serviceCommonTypes';
3
+ export const imagesSchema = serviceCommonSchema.extend({
4
+ name: z.literal(serviceNames.images),
5
+ overlayList: z.array(overlaySchema),
6
+ });
@@ -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';
@@ -0,0 +1,23 @@
1
+ import { z } from 'zod';
2
+ import { serviceNames, fontSchema, languageSchema, weatherUnitSchema, serviceCommonSchema } from './serviceCommonTypes';
3
+ export const infoTickerSchema = serviceCommonSchema.extend({
4
+ name: z.literal(serviceNames.infoticker),
5
+ showClock: z.union([z.literal(0), z.literal(1)]),
6
+ clockType: z.union([z.literal('12h'), z.literal('24h')]),
7
+ textColor: z.string(),
8
+ bgColor: z.string(),
9
+ weatherLocation: z.string(),
10
+ weatherLocationName: z.string(),
11
+ weatherLang: languageSchema,
12
+ weatherUnits: weatherUnitSchema,
13
+ numberOfLines: z.number().positive(),
14
+ switchingTime: z.number().nonnegative(),
15
+ crawlLeft: z.boolean(),
16
+ crawlSpeed: z.number(),
17
+ coordSystem: z.union([z.literal('top'), z.literal('bottom')]),
18
+ pos_y: z.number(),
19
+ font: fontSchema,
20
+ fontSize: z.number().nonnegative(),
21
+ sourceType: z.union([z.literal('text'), z.literal('url')]),
22
+ source: z.string(),
23
+ });
@@ -0,0 +1,36 @@
1
+ import { z } from 'zod';
2
+ import { serviceNames, coordinateSystemSchema, serviceCommonSchema } from './serviceCommonTypes';
3
+ export const pipSchema = serviceCommonSchema.extend({
4
+ name: z.literal(serviceNames.pip),
5
+ coordSystem: coordinateSystemSchema,
6
+ pos_x: z.number(),
7
+ pos_y: z.number(),
8
+ fps: z.number(),
9
+ compression: z.number().nonnegative(),
10
+ screenSize: z.number().nonnegative(),
11
+ source_type: z.union([z.literal('axis_camera'), z.literal('mjpeg_url')]),
12
+ mjpeg_url: z.union([z.string().url(), z.literal('')]),
13
+ camera_ip: z.union([z.string().ip(), z.literal('')]),
14
+ camera_port: z.number().nonnegative(),
15
+ camera_user: z.string(),
16
+ camera_pass: z.string(),
17
+ camera_width: z.number().nonnegative(),
18
+ camera_height: z.number().nonnegative(),
19
+ camera_view_area: z.string(),
20
+ camera_overlay_params: z.union([
21
+ z.literal('overlays=off'),
22
+ z.literal('overlays=all'),
23
+ z.literal('overlays=text'),
24
+ z.literal('overlays=image'),
25
+ z.literal('overlays=application'),
26
+ ]),
27
+ rotate: z.union([z.literal(0), z.literal(90), z.literal(180), z.literal(270)]),
28
+ dewarping: z.object({
29
+ enabled: z.boolean(),
30
+ rectangle: z.array(z.tuple([z.number(), z.number()])),
31
+ aspectRatioCorrection: z.number(),
32
+ }),
33
+ borderColor: z.string(),
34
+ borderWidth: z.number(),
35
+ scale: z.number(),
36
+ });
@@ -0,0 +1,22 @@
1
+ import { z } from 'zod';
2
+ import { serviceNames, coordinateSystemSchema, serviceCommonSchema } from './serviceCommonTypes';
3
+ export const ptzCompassSchema = serviceCommonSchema.extend({
4
+ name: z.literal(serviceNames.ptzCompass),
5
+ pos_x: z.number(),
6
+ pos_y: z.number(),
7
+ coordSystem: coordinateSystemSchema,
8
+ scale: z.number().nonnegative(),
9
+ type: z.union([z.literal('compass'), z.literal('map'), z.literal('image')]),
10
+ image: z.union([z.string().url(), z.literal('')]),
11
+ northPan: z.number(),
12
+ cameraPosX: z.number(),
13
+ cameraPosY: z.number(),
14
+ colorScheme: z.enum(['black', 'white', 'orange']),
15
+ generalLng: z.number().optional(),
16
+ generalLat: z.number().optional(),
17
+ generalZoom: z.number().nonnegative().optional(),
18
+ generalMapType: z.string().optional(),
19
+ generalIframeWidth: z.number().optional(),
20
+ generalIframeHeight: z.number().optional(),
21
+ generalAddress: z.string().optional(),
22
+ });
@@ -0,0 +1,9 @@
1
+ import { z } from 'zod';
2
+ import { serviceNames, overlaySchema, serviceCommonSchema } from './serviceCommonTypes';
3
+ export const ptzSchema = serviceCommonSchema.extend({
4
+ name: z.literal(serviceNames.ptz),
5
+ ptz_positions: z.record(z.string(), z.object({
6
+ overlayList: z.array(overlaySchema.omit({ active: true, fps: true })),
7
+ loop: z.boolean(),
8
+ })),
9
+ });
@@ -0,0 +1,129 @@
1
+ import { z } from 'zod';
2
+ import { coordinateSystemSchema, serviceNames } from './serviceCommonTypes';
3
+ export const sportFontSchema = z.union([
4
+ z.literal('classic'),
5
+ z.custom((val) => {
6
+ return typeof val === 'string';
7
+ }),
8
+ ]);
9
+ export const scoreBoardSchema = z.object({
10
+ id: z.number().nonnegative(),
11
+ enabled: z.union([z.literal(0), z.literal(1)]),
12
+ schedule: z.string().optional(),
13
+ cameraList: z.array(z.number()),
14
+ zIndex: z.number().nonnegative(),
15
+ name: z.literal(serviceNames.scoreBoard),
16
+ pos_x: z.number(),
17
+ pos_y: z.number(),
18
+ coordSystem: coordinateSystemSchema,
19
+ width: z.number(),
20
+ height: z.number(),
21
+ scale: z.number(),
22
+ teamHomeShortname: z.string(),
23
+ teamGuestShortname: z.string(),
24
+ teamHomeBackgroundColor: z.string(),
25
+ teamGuestBackgroundColor: z.string(),
26
+ teamHomeTextColor: z.string(),
27
+ teamGuestTextColor: z.string(),
28
+ teamHomeImgPath: z.string(),
29
+ teamGuestImgPath: z.string(),
30
+ teamHomeCurrentScore: z.number(),
31
+ teamGuestCurrentScore: z.number(),
32
+ baseTimeTimestamp: z.number(),
33
+ baseTimePlaytime: z.number(),
34
+ currentPeriodPlaytime: z.number(),
35
+ timeIsRunning: z.boolean(),
36
+ currentPeriodLength: z.number(),
37
+ currentPeriod: z.number(),
38
+ font: sportFontSchema.default('classic'),
39
+ });
40
+ export const baseballScoreBoardSchema = z.object({
41
+ id: z.number().nonnegative(),
42
+ enabled: z.union([z.literal(0), z.literal(1)]),
43
+ schedule: z.string().optional(),
44
+ cameraList: z.array(z.number()),
45
+ zIndex: z.number().nonnegative(),
46
+ name: z.literal(serviceNames.baseballScoreBoard),
47
+ pos_x: z.number(),
48
+ pos_y: z.number(),
49
+ coordSystem: coordinateSystemSchema,
50
+ width: z.number(),
51
+ height: z.number(),
52
+ scale: z.number(),
53
+ matchFinished: z.boolean(),
54
+ bases: z.tuple([z.boolean(), z.boolean(), z.boolean()]),
55
+ homeInning: z.boolean(),
56
+ inning: z.number().nonnegative(),
57
+ outs: z.number().nonnegative(),
58
+ balls: z.number().nonnegative(),
59
+ strikes: z.number().nonnegative(),
60
+ baseTimeTimestamp: z.number(),
61
+ baseTimePlaytime: z.number(),
62
+ timeIsRunning: z.boolean(),
63
+ teamHomeShortname: z.string(),
64
+ teamGuestShortname: z.string(),
65
+ teamHomeBackgroundColor: z.string(),
66
+ teamGuestBackgroundColor: z.string(),
67
+ teamHomeTextColor: z.string(),
68
+ teamGuestTextColor: z.string(),
69
+ teamHomeCurrentScore: z.number(),
70
+ teamGuestCurrentScore: z.number(),
71
+ footerImgPath: z.string().optional(),
72
+ footerText: z.string().optional(),
73
+ footerBackgroundColor: z.string().optional(),
74
+ footerTextColor: z.string().optional(),
75
+ font: sportFontSchema.default('classic'),
76
+ });
77
+ export const baseballScoreBoardAutomaticSchema = z.object({
78
+ id: z.number().nonnegative(),
79
+ enabled: z.union([z.literal(0), z.literal(1)]),
80
+ schedule: z.string().optional(),
81
+ cameraList: z.array(z.number()),
82
+ zIndex: z.number().nonnegative(),
83
+ name: z.literal(serviceNames.myBallBaseballWidgets),
84
+ width: z.number(),
85
+ height: z.number(),
86
+ scale: z.number(),
87
+ matchDetailLink: z.string(),
88
+ matchListLink: z.string(),
89
+ mirrored: z.boolean(),
90
+ pregameWidgetText: z.string(),
91
+ teamHomeBackgroundColor: z.string(),
92
+ teamGuestBackgroundColor: z.string(),
93
+ teamHomeTextColor: z.string(),
94
+ teamGuestTextColor: z.string(),
95
+ homeLogoPath: z.string(),
96
+ guestLogoPath: z.string(),
97
+ footerImgPath: z.string().optional(),
98
+ footerText: z.string().optional(),
99
+ footerBackgroundColor: z.string().optional(),
100
+ footerTextColor: z.string().optional(),
101
+ font: sportFontSchema.default('classic'),
102
+ });
103
+ export const scoreOverviewSchema = z.object({
104
+ id: z.number().nonnegative(),
105
+ enabled: z.union([z.literal(0), z.literal(1)]),
106
+ cameraList: z.array(z.number()),
107
+ zIndex: z.number().nonnegative(),
108
+ name: z.literal(serviceNames.scoreOverview),
109
+ pos_x: z.number(),
110
+ pos_y: z.number(),
111
+ coordSystem: coordinateSystemSchema,
112
+ width: z.number(),
113
+ height: z.number(),
114
+ scale: z.number(),
115
+ teamHomeName: z.string(),
116
+ teamGuestName: z.string(),
117
+ teamHomeBackgroundColor: z.string(),
118
+ teamGuestBackgroundColor: z.string(),
119
+ teamHomeTextColor: z.string(),
120
+ teamGuestTextColor: z.string(),
121
+ teamHomeImgPath: z.string(),
122
+ teamGuestImgPath: z.string(),
123
+ teamHomeCurrentScore: z.number(),
124
+ teamGuestCurrentScore: z.number(),
125
+ scoreVisible: z.boolean(),
126
+ description: z.string(),
127
+ textFont: sportFontSchema.default('classic'),
128
+ scoreFont: z.literal('classic'),
129
+ });
@@ -0,0 +1,5 @@
1
+ import { z } from 'zod';
2
+ import { serviceNames, sharingSchema } from './serviceCommonTypes';
3
+ export const screenSharingSchema = sharingSchema.extend({
4
+ name: z.literal(serviceNames.screenSharing),
5
+ });
@@ -0,0 +1,88 @@
1
+ import { z } from 'zod';
2
+ export const serviceNames = {
3
+ accuweather: 'accuweather',
4
+ infoticker: 'infoticker',
5
+ customGraphics: 'customGraphics',
6
+ ptzCompass: 'ptzCompass',
7
+ images: 'images',
8
+ ptz: 'ptz',
9
+ pip: 'pip',
10
+ screenSharing: 'screenSharing',
11
+ web_camera: 'web_camera',
12
+ scoreBoard: 'scoreBoard',
13
+ baseballScoreBoard: 'baseballScoreBoard',
14
+ myBallBaseballWidgets: 'myBallBaseballWidgets',
15
+ scoreOverview: 'scoreOverview',
16
+ };
17
+ export const coordinateSystemSchema = z.union([
18
+ z.literal('top_left'),
19
+ z.literal('top'),
20
+ z.literal('top_right'),
21
+ z.literal('left'),
22
+ z.literal('center'),
23
+ z.literal('right'),
24
+ z.literal('bottom_left'),
25
+ z.literal('bottom'),
26
+ z.literal('bottom_right'),
27
+ ]);
28
+ export const languageSchema = z.union([
29
+ z.literal('en-us'),
30
+ z.literal('fr-fr'),
31
+ z.literal('ja-jp'),
32
+ z.literal('pt-pt'),
33
+ z.literal('es-es'),
34
+ z.literal('de-de'),
35
+ z.literal('ko-kr'),
36
+ z.literal('zh-hk'),
37
+ z.literal('zh-cn'),
38
+ z.literal('nl-nl'),
39
+ z.literal('cs-cz'),
40
+ z.literal('ru-ru'),
41
+ z.literal('sv-se'),
42
+ ]);
43
+ export const fontSchema = z.union([
44
+ z.literal('classic'),
45
+ z.literal('digital'),
46
+ z.custom((val) => {
47
+ return typeof val === 'string';
48
+ }),
49
+ ]);
50
+ export const weatherUnitSchema = z.union([z.literal('Metric'), z.literal('Imperial')]);
51
+ export const serviceCommonSchema = z.object({
52
+ id: z.number().nonnegative(),
53
+ enabled: z.union([z.literal(0), z.literal(1)]),
54
+ automationType: z.union([
55
+ z.literal('time'),
56
+ z.literal('manual'),
57
+ z.literal('schedule'),
58
+ z.custom((val) => {
59
+ return typeof val === 'string' ? /^input\d+$/.test(val) : false;
60
+ }),
61
+ ]),
62
+ invertInput: z.boolean().optional(),
63
+ cameraList: z.array(z.number()),
64
+ camera: z.number().nonnegative().optional(),
65
+ schedule: z.string().optional(),
66
+ customName: z.string(),
67
+ zIndex: z.number().optional(),
68
+ width: z.number().nonnegative(),
69
+ height: z.number().nonnegative(),
70
+ });
71
+ export const sharingSchema = serviceCommonSchema.extend({
72
+ pos_x: z.number().nonnegative(),
73
+ pos_y: z.number().nonnegative(),
74
+ coordSystem: coordinateSystemSchema,
75
+ screenSize: z.number().positive(),
76
+ fps: z.number(),
77
+ });
78
+ export const overlaySchema = z.object({
79
+ active: z.boolean(),
80
+ coordSystem: coordinateSystemSchema,
81
+ pos_x: z.number(),
82
+ pos_y: z.number(),
83
+ imgPath: z.string(),
84
+ imgName: z.string(),
85
+ duration: z.number(),
86
+ scale: z.number(),
87
+ fps: z.number().optional(),
88
+ });
@@ -0,0 +1,5 @@
1
+ import { z } from 'zod';
2
+ import { serviceNames, sharingSchema } from './serviceCommonTypes';
3
+ export const webCameraSharingSchema = sharingSchema.extend({
4
+ name: z.literal(serviceNames.web_camera),
5
+ });