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
@@ -1,65 +1,109 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.CamStreamerAPI = void 0;
4
- const common_1 = require("./internal/common");
5
- const DefaultClient_1 = require("./node/DefaultClient");
3
+ exports.parseCameraStreamResponse = exports.CamStreamerAPI = void 0;
4
+ const zod_1 = require("zod");
5
+ const ProxyClient_1 = require("./internal/ProxyClient");
6
+ const utils_1 = require("./internal/utils");
6
7
  const CamStreamerAPI_1 = require("./types/CamStreamerAPI");
8
+ const errors_1 = require("./errors/errors");
9
+ const BASE_PATH = '/local/camstreamer';
7
10
  class CamStreamerAPI {
8
11
  client;
9
- constructor(options = {}) {
10
- if ((0, common_1.isClient)(options)) {
11
- this.client = options;
12
+ constructor(client) {
13
+ this.client = client;
14
+ }
15
+ getClient(proxyParams) {
16
+ return proxyParams ? new ProxyClient_1.ProxyClient(this.client, proxyParams) : this.client;
17
+ }
18
+ async wsAuthorization(options) {
19
+ const res = await this._getJson(`${BASE_PATH}/ws_authorization.cgi`, undefined, options);
20
+ if (res.status !== 200) {
21
+ throw new errors_1.WsAuthorizationError(res.message);
12
22
  }
13
- else {
14
- this.client = new DefaultClient_1.DefaultClient(options);
23
+ return zod_1.z.string().parse(res.data);
24
+ }
25
+ async getUtcTime(options) {
26
+ const res = await this._getJson(`${BASE_PATH}/get_utc_time.cgi`, undefined, options);
27
+ if (res.status !== 200) {
28
+ throw new errors_1.UtcTimeFetchError(res.message);
15
29
  }
30
+ return zod_1.z.number().parse(res.data);
16
31
  }
17
- async getStreamList() {
18
- const streamListRes = await this.get('/local/camstreamer/stream/list.cgi');
19
- return CamStreamerAPI_1.streamListSchema.parse(streamListRes.data);
32
+ async getStreamList(options) {
33
+ const res = await this._getJson(`${BASE_PATH}/stream/list.cgi`, undefined, options);
34
+ const list = zod_1.z.record(zod_1.z.string(), CamStreamerAPI_1.cameraStreamSchema).parse(res.data);
35
+ const streamList = {};
36
+ for (const [key, data] of Object.entries(list)) {
37
+ const streamId = parseInt(key);
38
+ streamList[streamId] = (0, exports.parseCameraStreamResponse)(data);
39
+ }
40
+ return streamList;
20
41
  }
21
- async getStream(streamID) {
22
- const stream = await this.get(`/local/camstreamer/stream/get.cgi?stream_id=${streamID}`);
23
- return CamStreamerAPI_1.streamAttributesSchema.parse(stream.data);
42
+ async getStream(streamId, options) {
43
+ const res = await this._getJson(`${BASE_PATH}/stream/get.cgi`, { stream_id: streamId }, options);
44
+ const cameraData = CamStreamerAPI_1.cameraStreamSchema.parse(res.data);
45
+ return (0, exports.parseCameraStreamResponse)(cameraData);
24
46
  }
25
- async getStreamParameter(streamID, paramName) {
26
- const stream = await this.get(`/local/camstreamer/stream/get.cgi?stream_id=${streamID}`);
27
- return stream.data[paramName];
47
+ async getStreamParameter(streamId, paramName, options) {
48
+ const res = await this._getJson(`${BASE_PATH}/stream/get.cgi`, { stream_id: streamId }, options);
49
+ return zod_1.z.string().parse(res.data[paramName]);
28
50
  }
29
- async setStream(streamID, params) {
51
+ async setStream(streamId, params, options) {
30
52
  const { streamDelay, startTime, stopTime, ...rest } = params;
31
- await this.get('/local/camstreamer/stream/set.cgi', {
32
- stream_id: streamID,
53
+ await this._getJson(`${BASE_PATH}/stream/set.cgi`, {
54
+ stream_id: streamId,
33
55
  streamDelay: streamDelay ?? '',
34
- startTime: startTime ?? 'null',
35
- stopTime: stopTime ?? 'null',
56
+ startTime: startTime ?? null,
57
+ stopTime: stopTime ?? null,
36
58
  ...rest,
37
- });
38
- }
39
- async setStreamParameter(streamID, paramName, value) {
40
- await this.get(`/local/camstreamer/stream/set.cgi?stream_id=${streamID}&${paramName}=${value}`);
41
- }
42
- async isStreaming(streamID) {
43
- const response = await this.get(`/local/camstreamer/get_streamstat.cgi?stream_id=${streamID}`);
44
- return response.data.is_streaming === 1;
59
+ }, options);
45
60
  }
46
- async deleteStream(streamID) {
47
- await this.get('/local/camstreamer/stream/remove.cgi', { stream_id: streamID });
61
+ async setStreamParameter(streamId, paramName, value, options) {
62
+ await this._getJson(`${BASE_PATH}/stream/set.cgi`, { stream_id: streamId, [paramName]: value }, options);
48
63
  }
49
- wsAutoratization() {
50
- return this.get('/local/camstreamer/ws_authorization.cgi');
64
+ async isStreaming(streamId, options) {
65
+ const res = await this._getJson(`${BASE_PATH}/get_streamstat.cgi`, { stream_id: streamId }, options);
66
+ return res.data.is_streaming === 1;
51
67
  }
52
- async getUtcTime() {
53
- return await this.get('/local/camstreamer/get_utc_time.cgi');
68
+ async deleteStream(streamId, options) {
69
+ const res = await this._getJson(`${BASE_PATH}/stream/remove.cgi`, { stream_id: streamId }, options);
70
+ return res.data.status === 200;
54
71
  }
55
- async get(path, parameters) {
56
- const res = await this.client.get(path, parameters);
72
+ async _getJson(path, parameters, options) {
73
+ const agent = this.getClient(options?.proxyParams);
74
+ const res = await agent.get({ path, parameters, timeout: options?.timeout });
57
75
  if (res.ok) {
58
76
  return await res.json();
59
77
  }
60
78
  else {
61
- throw new Error(await (0, common_1.responseStringify)(res));
79
+ throw new Error(await (0, utils_1.responseStringify)(res));
62
80
  }
63
81
  }
64
82
  }
65
83
  exports.CamStreamerAPI = CamStreamerAPI;
84
+ const parseCameraStreamResponse = (cameraStreamData) => {
85
+ return {
86
+ enabled: parseInt(cameraStreamData.enabled),
87
+ active: parseInt(cameraStreamData.active),
88
+ audioSource: cameraStreamData.audioSource,
89
+ avSyncMsec: parseInt(cameraStreamData.avSyncMsec),
90
+ internalVapixParameters: cameraStreamData.internalVapixParameters,
91
+ userVapixParameters: cameraStreamData.userVapixParameters,
92
+ outputParameters: cameraStreamData.outputParameters,
93
+ outputType: cameraStreamData.outputType,
94
+ mediaServerUrl: cameraStreamData.mediaServerUrl,
95
+ inputType: cameraStreamData.inputType,
96
+ inputUrl: cameraStreamData.inputUrl,
97
+ forceStereo: parseInt(cameraStreamData.forceStereo),
98
+ streamDelay: isNaN(parseInt(cameraStreamData.streamDelay)) ? null : parseInt(cameraStreamData.streamDelay),
99
+ statusLed: parseInt(cameraStreamData.statusLed),
100
+ statusPort: cameraStreamData.statusPort,
101
+ callApi: parseInt(cameraStreamData.callApi),
102
+ trigger: cameraStreamData.trigger,
103
+ schedule: cameraStreamData.schedule,
104
+ prepareAhead: parseInt(cameraStreamData.prepareAhead),
105
+ startTime: isNaN(parseInt(cameraStreamData.startTime)) ? null : parseInt(cameraStreamData.startTime),
106
+ stopTime: isNaN(parseInt(cameraStreamData.stopTime)) ? null : parseInt(cameraStreamData.stopTime),
107
+ };
108
+ };
109
+ exports.parseCameraStreamResponse = parseCameraStreamResponse;
@@ -3,124 +3,142 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.CamSwitcherAPI = void 0;
4
4
  const zod_1 = require("zod");
5
5
  const errors_1 = require("./errors/errors");
6
- const common_1 = require("./internal/common");
6
+ const utils_1 = require("./internal/utils");
7
7
  const CamSwitcherAPI_1 = require("./types/CamSwitcherAPI");
8
- const common_2 = require("./types/common");
8
+ const common_1 = require("./types/common");
9
9
  const VapixAPI_1 = require("./VapixAPI");
10
10
  const versionCompare_1 = require("./internal/versionCompare");
11
- const utils_1 = require("./internal/utils");
12
11
  const constants_1 = require("./internal/constants");
13
- const baseUrl = '/local/camswitcher/api';
12
+ const ProxyClient_1 = require("./internal/ProxyClient");
13
+ const BASE_PATH = '/local/camswitcher/api';
14
14
  class CamSwitcherAPI {
15
15
  client;
16
+ CustomFormData;
16
17
  vapixAgent;
17
- constructor(client) {
18
+ constructor(client, CustomFormData = FormData) {
18
19
  this.client = client;
19
- this.vapixAgent = new VapixAPI_1.VapixAPI(client, () => '');
20
- }
21
- static getProxyUrlPath = () => `${baseUrl}/proxy.cgi`;
22
- static getWsEventsUrlPath = () => `/local/camswitcher/events`;
23
- static getClipPreviewUrlPath = (id, storage) => `${baseUrl}/clip_preview.cgi?clip_name=${id}&storage=${storage}`;
24
- async generateSilence(sampleRate, channels) {
25
- await this.client.get(`${baseUrl}/generate_silence.cgi`, {
26
- sample_rate: sampleRate.toString(),
27
- channels,
20
+ this.CustomFormData = CustomFormData;
21
+ this.vapixAgent = new VapixAPI_1.VapixAPI(client);
22
+ }
23
+ static getProxyPath = () => `${BASE_PATH}/proxy.cgi`;
24
+ static getWsEventsPath = () => `/local/camswitcher/events`;
25
+ static getClipPreviewPath = (id, storage) => `${BASE_PATH}/clip_preview.cgi?clip_name=${id}&storage=${storage}`;
26
+ getClient(proxyParams) {
27
+ return proxyParams ? new ProxyClient_1.ProxyClient(this.client, proxyParams) : this.client;
28
+ }
29
+ async checkCameraTime(options) {
30
+ const res = await this._getJson(`${BASE_PATH}/camera_time.cgi`, undefined, options);
31
+ return zod_1.z.boolean().parse(res.data);
32
+ }
33
+ async getNetworkCameraList(options) {
34
+ const res = await this._getJson(`${BASE_PATH}/network_camera_list.cgi`, undefined, options);
35
+ return common_1.networkCameraListSchema.parse(res.data);
36
+ }
37
+ async generateSilence(sampleRate, channels, options) {
38
+ const agent = this.getClient(options?.proxyParams);
39
+ await agent.get({
40
+ path: `${BASE_PATH}/generate_silence.cgi`,
41
+ parameters: {
42
+ sample_rate: sampleRate.toString(),
43
+ channels,
44
+ },
45
+ timeout: options?.timeout,
28
46
  });
29
47
  }
30
- async checkCameraTime() {
31
- const data = await this.get(`${baseUrl}/camera_time.cgi`);
32
- return zod_1.z.boolean().parse(data);
33
- }
34
- async getIpListFromNetworkCheck() {
35
- const data = await this.get(`${baseUrl}/network_camera_list.cgi`);
36
- return common_2.networkCameraListSchema.parse(data);
48
+ async getMaxFps(source, options) {
49
+ const res = await this._getJson(`${BASE_PATH}/get_max_framerate.cgi`, {
50
+ video_source: source,
51
+ }, options);
52
+ return zod_1.z.number().parse(res.data);
37
53
  }
38
- async getMaxFps(source) {
39
- const data = await this.get(`${baseUrl}/get_max_framerate.cgi`, {
40
- video_source: source.toString(),
41
- });
42
- return zod_1.z.number().parse(data);
43
- }
44
- async getStorageInfo() {
45
- const data = await this.get(`${baseUrl}/get_storage.cgi`);
46
- return CamSwitcherAPI_1.storageInfoListSchema.parse(data);
54
+ async getStorageInfo(options) {
55
+ const res = await this._getJson(`${BASE_PATH}/get_storage.cgi`, undefined, options);
56
+ return CamSwitcherAPI_1.storageInfoListSchema.parse(res.data);
47
57
  }
48
- async wsAuthorization() {
49
- const data = await this.get(`${baseUrl}/ws_authorization.cgi`);
50
- return zod_1.z.string().parse(data);
58
+ async wsAuthorization(options) {
59
+ const res = await this._getJson(`${BASE_PATH}/ws_authorization.cgi`, undefined, options);
60
+ return zod_1.z.string().parse(res.data);
51
61
  }
52
- async getOutputInfo() {
53
- const data = await this.get(`${baseUrl}/output_info.cgi`);
54
- return CamSwitcherAPI_1.outputInfoSchema.parse(data);
62
+ async getOutputInfo(options) {
63
+ const res = await this._getJson(`${BASE_PATH}/output_info.cgi`, undefined, options);
64
+ return CamSwitcherAPI_1.outputInfoSchema.parse(res.data);
55
65
  }
56
- async getAudioPushInfo() {
57
- const data = await this.get(`${baseUrl}/audio_push_info.cgi`);
58
- return CamSwitcherAPI_1.audioPushInfoSchema.parse(data);
66
+ async getAudioPushInfo(options) {
67
+ const res = await this._getJson(`${BASE_PATH}/audio_push_info.cgi`, undefined, options);
68
+ return CamSwitcherAPI_1.audioPushInfoSchema.parse(res.data);
59
69
  }
60
- async getStreamSaveList() {
61
- const data = await this.get(`${baseUrl}/streams.cgi`, { action: 'get' });
62
- return CamSwitcherAPI_1.streamSaveLoadSchema.parse(data);
70
+ async getStreamSaveList(options) {
71
+ const res = await this._getJson(`${BASE_PATH}/streams.cgi`, { action: 'get' }, options);
72
+ return CamSwitcherAPI_1.streamSaveLoadSchema.parse(res.data);
63
73
  }
64
- async getClipSaveList() {
65
- const data = await this.get(`${baseUrl}/clips.cgi`, { action: 'get' });
66
- return CamSwitcherAPI_1.clipSaveLoadSchema.parse(data);
74
+ async getClipSaveList(options) {
75
+ const res = await this._getJson(`${BASE_PATH}/clips.cgi`, { action: 'get' }, options);
76
+ return CamSwitcherAPI_1.clipSaveLoadSchema.parse(res.data);
67
77
  }
68
- async getPlaylistSaveList() {
69
- const data = await this.get(`${baseUrl}/playlists.cgi`, { action: 'get' });
70
- return CamSwitcherAPI_1.playlistSaveLoadSchema.parse(data);
78
+ async getPlaylistSaveList(options) {
79
+ const res = await this._getJson(`${BASE_PATH}/playlists.cgi`, { action: 'get' }, options);
80
+ return CamSwitcherAPI_1.playlistSaveLoadSchema.parse(res.data);
71
81
  }
72
- async getTrackerSaveList() {
73
- const data = await this.get(`${baseUrl}/trackers.cgi`, { action: 'get' });
74
- return CamSwitcherAPI_1.trackerSaveLoadSchema.parse(data);
82
+ async getTrackerSaveList(options) {
83
+ const res = await this._getJson(`${BASE_PATH}/trackers.cgi`, { action: 'get' }, options);
84
+ return CamSwitcherAPI_1.trackerSaveLoadSchema.parse(res.data);
75
85
  }
76
- async setStreamSaveList(data) {
77
- return await this.set(`${baseUrl}/streams.cgi`, data, { action: 'set' });
86
+ async setStreamSaveList(data, options) {
87
+ await this._post(`${BASE_PATH}/streams.cgi`, data, { action: 'set' }, options);
78
88
  }
79
- async setClipSaveList(data) {
80
- return await this.set(`${baseUrl}/clips.cgi`, data, { action: 'set' });
89
+ async setClipSaveList(data, options) {
90
+ await this._post(`${BASE_PATH}/clips.cgi`, data, { action: 'set' }, options);
81
91
  }
82
- async setPlaylistSaveList(data) {
83
- return await this.set(`${baseUrl}/playlists.cgi`, data, { action: 'set' });
92
+ async setPlaylistSaveList(data, options) {
93
+ await this._post(`${BASE_PATH}/playlists.cgi`, data, { action: 'set' }, options);
84
94
  }
85
- async setTrackerSaveList(data) {
86
- return await this.set(`${baseUrl}/trackers.cgi`, data, { action: 'set' });
95
+ async setTrackerSaveList(data, options) {
96
+ await this._post(`${BASE_PATH}/trackers.cgi`, data, { action: 'set' }, options);
87
97
  }
88
- async playlistSwitch(playlistName) {
89
- await this.get(`${baseUrl}/playlist_switch.cgi?playlist_name=${playlistName}`);
98
+ async playlistSwitch(playlistName, options) {
99
+ await this._getJson(`${BASE_PATH}/playlist_switch.cgi`, { playlist_name: playlistName }, options);
90
100
  }
91
- async playlistQueuePush(playlistName) {
92
- await this.get(`${baseUrl}/playlist_queue_push.cgi?playlist_name=${playlistName}`);
101
+ async playlistQueuePush(playlistName, options) {
102
+ await this._getJson(`${BASE_PATH}/playlist_queue_push.cgi`, { playlist_name: playlistName }, options);
93
103
  }
94
- async playlistQueueClear() {
95
- await this.get(`${baseUrl}/playlist_queue_clear.cgi`);
104
+ async playlistQueueClear(options) {
105
+ await this._getJson(`${BASE_PATH}/playlist_queue_clear.cgi`, undefined, options);
96
106
  }
97
- async playlistQueueList() {
98
- const data = await this.get(`${baseUrl}/playlist_queue_list.cgi`);
99
- return CamSwitcherAPI_1.playlistQueueSchema.parse(data).playlistQueueList;
107
+ async playlistQueueList(options) {
108
+ const res = await this._getJson(`${BASE_PATH}/playlist_queue_list.cgi`, undefined, options);
109
+ return CamSwitcherAPI_1.playlistQueueSchema.parse(res.data).playlistQueueList;
100
110
  }
101
- async playlistQueuePlayNext() {
102
- await this.get(`${baseUrl}/playlist_queue_play_next.cgi`);
111
+ async playlistQueuePlayNext(options) {
112
+ await this._getJson(`${BASE_PATH}/playlist_queue_play_next.cgi`, undefined, options);
103
113
  }
104
- async addNewClip(file, clipType, storage, id, fileName) {
105
- const formData = new FormData();
106
- formData.append('clip_name', id);
114
+ async addNewClip(file, clipType, storage, clipId, fileName, options) {
115
+ const path = `${BASE_PATH}/clip_upload.cgi`;
116
+ const formData = new this.CustomFormData();
117
+ formData.append('clip_name', clipId);
107
118
  formData.append('clip_type', clipType);
108
119
  formData.append('file', file, fileName);
109
- const path = `${baseUrl}/clip_upload.cgi?storage=${storage}`;
110
- const res = await this.client.post(path, formData);
120
+ const agent = this.getClient(options?.proxyParams);
121
+ const res = await agent.post({
122
+ path,
123
+ data: formData,
124
+ parameters: {
125
+ storage: storage,
126
+ },
127
+ timeout: options?.timeout,
128
+ });
111
129
  const output = (await res.json());
112
130
  if (output.status !== 200) {
113
131
  throw new errors_1.AddNewClipError(output.message);
114
132
  }
115
133
  }
116
- removeClip(id, storage) {
117
- return this.get(`${baseUrl}/clip_remove.cgi`, { clip_name: id, storage });
134
+ async removeClip(clipId, storage, options) {
135
+ await this._getJson(`${BASE_PATH}/clip_remove.cgi`, { clip_name: clipId, storage }, options);
118
136
  }
119
- async getClipList() {
120
- const data = await this.get(`${baseUrl}/clip_list.cgi`);
121
- return CamSwitcherAPI_1.clipListSchema.parse(data).clip_list;
137
+ async getClipList(options) {
138
+ const res = await this._getJson(`${BASE_PATH}/clip_list.cgi`, undefined, options);
139
+ return CamSwitcherAPI_1.clipListSchema.parse(res.data).clip_list;
122
140
  }
123
- setCamSwitchOptions(data, cameraFWVersion) {
141
+ setCamSwitchOptions(data, cameraFWVersion, options) {
124
142
  const bitrateVapixParams = parseBitrateOptionsToBitrateVapixParams(cameraFWVersion, data.bitrateMode, data);
125
143
  const saveData = {
126
144
  video: {
@@ -138,9 +156,9 @@ class CamSwitcherAPI {
138
156
  },
139
157
  keyboard: data.keyboard,
140
158
  };
141
- return this.setParamFromCameraJSON(CSW_PARAM_NAMES.SETTINGS, saveData);
159
+ return this.setParamFromCameraJSON(CSW_PARAM_NAMES.SETTINGS, saveData, options);
142
160
  }
143
- setGlobalAudioSettings(settings) {
161
+ setGlobalAudioSettings(settings, options) {
144
162
  let acceptedType = 'NONE';
145
163
  if (settings.type === 'source' && settings.source) {
146
164
  if ((0, utils_1.isClip)(settings.source)) {
@@ -156,9 +174,9 @@ class CamSwitcherAPI {
156
174
  clip_name: settings.source,
157
175
  storage: settings.storage,
158
176
  };
159
- return this.setParamFromCameraJSON(CSW_PARAM_NAMES.MASTER_AUDIO, data);
177
+ return this.setParamFromCameraJSON(CSW_PARAM_NAMES.MASTER_AUDIO, data, options);
160
178
  }
161
- setSecondaryAudioSettings(settings) {
179
+ setSecondaryAudioSettings(settings, options) {
162
180
  const data = {
163
181
  type: settings.type,
164
182
  stream_name: settings.streamName ?? '',
@@ -167,34 +185,34 @@ class CamSwitcherAPI {
167
185
  secondary_audio_level: settings.secondaryAudioLevel,
168
186
  master_audio_level: settings.masterAudioLevel,
169
187
  };
170
- return this.setParamFromCameraJSON(CSW_PARAM_NAMES.SECONDARY_AUDIO, data);
188
+ return this.setParamFromCameraJSON(CSW_PARAM_NAMES.SECONDARY_AUDIO, data, options);
171
189
  }
172
- setDefaultPlaylist(id) {
173
- const value = JSON.stringify({ default_playlist_id: id });
190
+ setDefaultPlaylist(playlistId, options) {
191
+ const value = JSON.stringify({ default_playlist_id: playlistId });
174
192
  return this.vapixAgent.setParameter({
175
193
  [CSW_PARAM_NAMES.DEFAULT_PLAYLIST]: value,
176
- }, null);
194
+ }, options);
177
195
  }
178
- setPermanentRtspUrlToken(token) {
179
- return this.vapixAgent.setParameter({ [CSW_PARAM_NAMES.RTSP_TOKEN]: token }, null);
196
+ setPermanentRtspUrlToken(token, options) {
197
+ return this.vapixAgent.setParameter({ [CSW_PARAM_NAMES.RTSP_TOKEN]: token }, options);
180
198
  }
181
- async getCamSwitchOptions() {
182
- const saveData = await this.getParamFromCameraAndJSONParse(CSW_PARAM_NAMES.SETTINGS);
183
- if ((0, common_1.isNullish)(saveData.video)) {
199
+ async getCamSwitchOptions(options) {
200
+ const saveData = await this.getParamFromCameraAndJSONParse(CSW_PARAM_NAMES.SETTINGS, options);
201
+ if ((0, utils_1.isNullish)(saveData.video)) {
184
202
  return saveData;
185
203
  }
186
- if (!(0, common_1.isNullish)(saveData.video?.bitrateVapixParams)) {
204
+ if (!(0, utils_1.isNullish)(saveData.video?.bitrateVapixParams)) {
187
205
  const bitrateOptions = parseVapixParamsToBitrateOptions(saveData.video.bitrateVapixParams);
188
206
  saveData.video.bitrateMode = bitrateOptions.bitrateMode;
189
207
  saveData.video.maximumBitRate = bitrateOptions.maximumBitRate;
190
208
  saveData.video.retentionTime = bitrateOptions.retentionTime;
191
209
  saveData.video.bitRateLimit = bitrateOptions.bitRateLimit;
192
210
  }
193
- if (!(0, common_1.isNullish)(saveData.video?.bitrateLimit)) {
211
+ if (!(0, utils_1.isNullish)(saveData.video?.bitrateLimit)) {
194
212
  saveData.video.maximumBitRate = saveData.video.bitrateLimit;
195
213
  saveData.video.bitrateMode = 'MBR';
196
214
  }
197
- if (!(0, common_1.isNullish)(saveData.video?.videoClipQuality)) {
215
+ if (!(0, utils_1.isNullish)(saveData.video?.videoClipQuality)) {
198
216
  saveData.video.maximumBitRate = saveData.video.videoClipQuality;
199
217
  }
200
218
  return {
@@ -204,12 +222,12 @@ class CamSwitcherAPI {
204
222
  keyboard: saveData.keyboard,
205
223
  };
206
224
  }
207
- async getGlobalAudioSettings() {
225
+ async getGlobalAudioSettings(options) {
208
226
  const settings = {
209
227
  type: 'fromSource',
210
228
  source: 'fromSource',
211
229
  };
212
- const res = await this.getParamFromCameraAndJSONParse(CSW_PARAM_NAMES.MASTER_AUDIO);
230
+ const res = await this.getParamFromCameraAndJSONParse(CSW_PARAM_NAMES.MASTER_AUDIO, options);
213
231
  if (res.type === 'STREAM') {
214
232
  settings.type = 'source';
215
233
  settings.source = res.stream_name;
@@ -219,10 +237,10 @@ class CamSwitcherAPI {
219
237
  settings.source = res.clip_name;
220
238
  settings.storage = res.storage;
221
239
  }
222
- return settings;
240
+ return CamSwitcherAPI_1.globalAudioSettingsSchema.parse(settings);
223
241
  }
224
- async getSecondaryAudioSettings() {
225
- const res = await this.getParamFromCameraAndJSONParse(CSW_PARAM_NAMES.SECONDARY_AUDIO);
242
+ async getSecondaryAudioSettings(options) {
243
+ const res = await this.getParamFromCameraAndJSONParse(CSW_PARAM_NAMES.SECONDARY_AUDIO, options);
226
244
  const settings = {
227
245
  type: res.type ?? 'NONE',
228
246
  streamName: res.stream_name,
@@ -231,40 +249,40 @@ class CamSwitcherAPI {
231
249
  secondaryAudioLevel: res.secondary_audio_level ?? 1,
232
250
  masterAudioLevel: res.master_audio_level ?? 1,
233
251
  };
234
- return settings;
252
+ return CamSwitcherAPI_1.secondaryAudioSettingsSchema.parse(settings);
235
253
  }
236
- async getPermanentRtspUrlToken() {
254
+ async getPermanentRtspUrlToken(options) {
237
255
  const paramName = CSW_PARAM_NAMES.RTSP_TOKEN;
238
- const res = await this.vapixAgent.getParameter([paramName], null);
239
- return res[paramName] ?? '';
256
+ const res = await this.vapixAgent.getParameter([paramName], options);
257
+ return zod_1.z.string().parse(res[paramName] ?? '');
240
258
  }
241
- async get(path, parameters = {}) {
242
- const res = await this.client.get(path, parameters);
259
+ async _getJson(path, parameters, options) {
260
+ const agent = this.getClient(options?.proxyParams);
261
+ const res = await agent.get({ path, parameters, timeout: options?.timeout });
243
262
  if (res.ok) {
244
- const d = (await res.json());
245
- return d.data;
263
+ return await res.json();
246
264
  }
247
265
  else {
248
- throw new Error(await (0, common_1.responseStringify)(res));
266
+ throw new Error(await (0, utils_1.responseStringify)(res));
249
267
  }
250
268
  }
251
- async set(path, data, parameters = {}) {
252
- const res = await this.client.post(path, JSON.stringify(data), parameters);
269
+ async _post(path, data, parameters, options, headers) {
270
+ const agent = this.getClient(options?.proxyParams);
271
+ const res = await agent.post({ path, data, parameters, timeout: options?.timeout, headers });
253
272
  if (res.ok) {
254
- const parsed = await res.json();
255
- return parsed.message === 'OK';
273
+ return await res.json();
256
274
  }
257
275
  else {
258
- throw new Error(await (0, common_1.responseStringify)(res));
276
+ throw new Error(await (0, utils_1.responseStringify)(res));
259
277
  }
260
278
  }
261
- setParamFromCameraJSON(paramName, data) {
279
+ setParamFromCameraJSON(paramName, data, options) {
262
280
  const params = {};
263
281
  params[paramName] = JSON.stringify(data);
264
- return this.vapixAgent.setParameter(params, null);
282
+ return this.vapixAgent.setParameter(params, options);
265
283
  }
266
- async getParamFromCameraAndJSONParse(paramName) {
267
- const data = await this.vapixAgent.getParameter([paramName], null);
284
+ async getParamFromCameraAndJSONParse(paramName, options) {
285
+ const data = await this.vapixAgent.getParameter([paramName], options);
268
286
  if (data[paramName] !== undefined) {
269
287
  try {
270
288
  if (data[paramName] === '') {
@@ -275,10 +293,10 @@ class CamSwitcherAPI {
275
293
  }
276
294
  }
277
295
  catch {
278
- throw new Error('Error: in JSON parsing of ' + paramName + '. Cannot parse: ' + data[paramName]);
296
+ throw new errors_1.JsonParseError(paramName, data[paramName]);
279
297
  }
280
298
  }
281
- throw new Error("Error: no parametr '" + paramName + "' was found");
299
+ throw new errors_1.ParameterNotFoundError(paramName);
282
300
  }
283
301
  }
284
302
  exports.CamSwitcherAPI = CamSwitcherAPI;
@@ -293,7 +311,7 @@ const parseBitrateOptionsToBitrateVapixParams = (firmWareVersion, bitrateMode, c
293
311
  if (!(0, versionCompare_1.isFirmwareVersionAtLeast)(firmWareVersion, constants_1.FIRMWARE_WITH_BITRATE_MODES_SUPPORT)) {
294
312
  return `videomaxbitrate=${cameraOptions.maximumBitRate}`;
295
313
  }
296
- if (bitrateMode === null) {
314
+ if (bitrateMode === undefined) {
297
315
  return '';
298
316
  }
299
317
  const data = {
@@ -1,67 +1,11 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.CamSwitcherEvents = void 0;
4
+ const WsEvents_1 = require("./internal/WsEvents");
4
5
  const CamSwitcherEvents_1 = require("./types/CamSwitcherEvents");
5
- class CamSwitcherEvents {
6
- isDestroyed = false;
7
- ws = null;
8
- listeners = {};
9
- setWebsocket(ws) {
10
- if (this.ws) {
11
- this.ws.destroy();
12
- }
13
- this.ws = ws;
14
- this.ws.onmessage = (e) => this.onMessage(e);
15
- }
16
- resendInitData() {
17
- const request = {
18
- command: 'sendInitData',
19
- };
20
- this.ws?.send(JSON.stringify(request));
21
- }
22
- addListener(type, listener, id) {
23
- const typeList = this.listeners[type];
24
- if (typeList === undefined) {
25
- this.listeners[type] = { [id]: listener };
26
- return;
27
- }
28
- typeList[id] = listener;
29
- }
30
- removeListener(type, id) {
31
- const typeList = this.listeners[type];
32
- if (typeList) {
33
- delete typeList[id];
34
- }
35
- }
36
- onMessage(evt) {
37
- if (this.isDestroyed) {
38
- return;
39
- }
40
- try {
41
- const eventData = JSON.parse(evt.data);
42
- const data = CamSwitcherEvents_1.cswEventsSchema.parse(eventData);
43
- if (data.type === 'init') {
44
- this.processMessage(data.data, true);
45
- return;
46
- }
47
- this.processMessage(data, false);
48
- }
49
- catch (error) {
50
- console.error('Error parsing event data:', evt.data, error);
51
- }
52
- }
53
- processMessage(event, isInit) {
54
- const listeners = this.listeners[event.type];
55
- const list = Object.values(listeners ?? {});
56
- list.forEach((listener) => listener(event, isInit));
57
- }
58
- destroy() {
59
- this.isDestroyed = true;
60
- if (this.ws) {
61
- this.ws.destroy();
62
- this.ws = null;
63
- }
64
- this.listeners = {};
6
+ class CamSwitcherEvents extends WsEvents_1.WsEvents {
7
+ constructor(ws) {
8
+ super(CamSwitcherEvents_1.cswEventsSchema, ws);
65
9
  }
66
10
  }
67
11
  exports.CamSwitcherEvents = CamSwitcherEvents;