camstreamerlib 4.0.0-beta.6 → 4.0.0-beta.60

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 (265) hide show
  1. package/README.md +142 -38
  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/PlaneTrackerAPI.js +247 -0
  7. package/cjs/VapixAPI.js +323 -233
  8. package/cjs/{CreatePackage.js → bin/CreatePackage.js} +22 -19
  9. package/cjs/errors/errors.js +113 -1
  10. package/cjs/index.js +28 -5
  11. package/cjs/internal/ProxyClient.js +28 -32
  12. package/cjs/{CamSwitcherEvents.js → internal/WsEvents.js} +28 -22
  13. package/cjs/internal/types.js +2 -0
  14. package/cjs/internal/utils.js +22 -3
  15. package/cjs/{CamOverlayDrawingAPI.js → node/CamOverlayDrawingAPI.js} +17 -14
  16. package/cjs/{CamOverlayPainter → node/CamOverlayPainter}/Frame.js +33 -0
  17. package/cjs/{CamOverlayPainter → node/CamOverlayPainter}/Painter.js +5 -17
  18. package/cjs/node/CamOverlayPainter/ResourceManager.js +72 -0
  19. package/cjs/{CamScripterAPICameraEventsGenerator.js → node/CamScripterAPICameraEventsGenerator.js} +16 -13
  20. package/cjs/node/DefaultClient.js +10 -12
  21. package/cjs/{internal → node}/Digest.js +8 -5
  22. package/cjs/node/Digest.test.js +13 -0
  23. package/cjs/node/HttpRequestSender.js +14 -4
  24. package/cjs/node/HttpServer.js +15 -12
  25. package/cjs/{VapixEvents.js → node/VapixEvents.js} +10 -10
  26. package/cjs/node/WsClient.js +30 -20
  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 +26 -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 +24 -8
  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/GenetecAgent.js +31 -0
  50. package/cjs/types/PlaneTrackerAPI.js +310 -0
  51. package/cjs/types/VapixAPI.js +71 -13
  52. package/cjs/types/VapixEvents.js +2 -0
  53. package/cjs/types/common.js +4 -2
  54. package/cjs/types/ws/CamOverlayEvents.js +19 -0
  55. package/cjs/types/ws/CamStreamerEvents.js +32 -0
  56. package/cjs/types/{CamSwitcherEvents.js → ws/CamSwitcherEvents.js} +8 -0
  57. package/cjs/types/ws/PlaneTrackerEvents.js +194 -0
  58. package/cjs/web/DefaultClient.js +26 -10
  59. package/cjs/web/WsClient.js +16 -18
  60. package/cjs/ws/CamOverlayEvents.js +24 -0
  61. package/cjs/ws/CamStreamerEvents.js +24 -0
  62. package/cjs/ws/CamSwitcherEvents.js +24 -0
  63. package/cjs/ws/PlaneTrackerEvents.js +30 -0
  64. package/esm/CamOverlayAPI.js +131 -88
  65. package/esm/CamScripterAPI.js +48 -38
  66. package/esm/CamStreamerAPI.js +81 -38
  67. package/esm/CamSwitcherAPI.js +137 -119
  68. package/esm/PlaneTrackerAPI.js +243 -0
  69. package/esm/VapixAPI.js +315 -225
  70. package/esm/{CreatePackage.js → bin/CreatePackage.js} +3 -3
  71. package/esm/errors/errors.js +96 -0
  72. package/esm/index.js +20 -4
  73. package/esm/internal/ProxyClient.js +28 -32
  74. package/esm/{CamSwitcherEvents.js → internal/WsEvents.js} +26 -20
  75. package/esm/internal/utils.js +17 -1
  76. package/esm/{CamOverlayDrawingAPI.js → node/CamOverlayDrawingAPI.js} +12 -12
  77. package/esm/{CamOverlayPainter → node/CamOverlayPainter}/Frame.js +33 -0
  78. package/esm/{CamOverlayPainter → node/CamOverlayPainter}/Painter.js +2 -13
  79. package/esm/{CamOverlayPainter → node/CamOverlayPainter}/ResourceManager.js +7 -5
  80. package/esm/{CamScripterAPICameraEventsGenerator.js → node/CamScripterAPICameraEventsGenerator.js} +11 -11
  81. package/esm/node/DefaultClient.js +10 -12
  82. package/esm/{internal → node}/Digest.js +1 -1
  83. package/esm/node/Digest.test.js +11 -0
  84. package/esm/node/HttpRequestSender.js +14 -4
  85. package/esm/node/HttpServer.js +5 -5
  86. package/esm/{VapixEvents.js → node/VapixEvents.js} +10 -10
  87. package/esm/node/WsClient.js +22 -15
  88. package/esm/{events → node/events}/AxisCameraStationEvents.js +18 -13
  89. package/esm/node/events/GenetecAgent.js +119 -0
  90. package/esm/node/index.js +17 -2
  91. package/esm/types/CamOverlayAPI/CamOverlayAPI.js +76 -0
  92. package/esm/types/CamOverlayAPI/accuweatherSchema.js +44 -0
  93. package/esm/types/CamOverlayAPI/customGraphicsSchema.js +69 -0
  94. package/esm/types/CamOverlayAPI/imagesSchema.js +6 -0
  95. package/esm/types/CamOverlayAPI/index.js +11 -0
  96. package/esm/types/CamOverlayAPI/infotickerSchema.js +23 -0
  97. package/esm/types/CamOverlayAPI/pipSchema.js +36 -0
  98. package/esm/types/CamOverlayAPI/ptzCompassSchema.js +23 -0
  99. package/esm/types/CamOverlayAPI/ptzSchema.js +9 -0
  100. package/esm/types/CamOverlayAPI/scoreBoardSchema.js +129 -0
  101. package/esm/types/CamOverlayAPI/screenSharingSchema.js +5 -0
  102. package/esm/types/CamOverlayAPI/serviceCommonTypes.js +88 -0
  103. package/esm/types/CamOverlayAPI/webCameraSharingSchema.js +5 -0
  104. package/esm/types/CamOverlayPainter.js +11 -0
  105. package/esm/types/CamScripterAPI.js +23 -7
  106. package/esm/types/CamScripterAPICameraEventsGenerator.js +1 -0
  107. package/esm/types/CamStreamerAPI.js +33 -2
  108. package/esm/types/CamSwitcherAPI.js +38 -1
  109. package/esm/types/GenetecAgent.js +28 -0
  110. package/esm/types/PlaneTrackerAPI.js +307 -0
  111. package/esm/types/VapixAPI.js +70 -12
  112. package/esm/types/VapixEvents.js +1 -0
  113. package/esm/types/common.js +3 -1
  114. package/esm/types/ws/CamOverlayEvents.js +16 -0
  115. package/esm/types/ws/CamStreamerEvents.js +29 -0
  116. package/esm/types/{CamSwitcherEvents.js → ws/CamSwitcherEvents.js} +8 -0
  117. package/esm/types/ws/PlaneTrackerEvents.js +191 -0
  118. package/esm/web/DefaultClient.js +26 -10
  119. package/esm/web/WsClient.js +16 -18
  120. package/esm/ws/CamOverlayEvents.js +20 -0
  121. package/esm/ws/CamStreamerEvents.js +20 -0
  122. package/esm/ws/CamSwitcherEvents.js +20 -0
  123. package/esm/ws/PlaneTrackerEvents.js +26 -0
  124. package/package.json +29 -11
  125. package/types/CamOverlayAPI.d.ts +867 -0
  126. package/types/CamScripterAPI.d.ts +46 -0
  127. package/types/CamStreamerAPI.d.ts +64 -0
  128. package/types/CamSwitcherAPI.d.ts +167 -0
  129. package/types/PlaneTrackerAPI.d.ts +229 -0
  130. package/types/VapixAPI.d.ts +118 -0
  131. package/types/bin/CreatePackage.d.ts +1 -0
  132. package/types/errors/errors.d.ts +83 -0
  133. package/types/index.d.ts +27 -0
  134. package/types/internal/ProxyClient.d.ts +10 -0
  135. package/types/internal/WsEvents.d.ts +37 -0
  136. package/types/internal/types.d.ts +47 -0
  137. package/{cjs → types}/internal/utils.d.ts +4 -1
  138. package/{cjs → types}/internal/versionCompare.d.ts +2 -2
  139. package/types/node/CamOverlayDrawingAPI.d.ts +41 -0
  140. package/{esm → types/node}/CamOverlayPainter/Frame.d.ts +8 -37
  141. package/{cjs → types/node}/CamOverlayPainter/Painter.d.ts +5 -21
  142. package/types/node/CamOverlayPainter/ResourceManager.d.ts +15 -0
  143. package/types/node/CamScripterAPICameraEventsGenerator.d.ts +31 -0
  144. package/types/node/DefaultClient.d.ts +16 -0
  145. package/types/node/Digest.test.d.ts +1 -0
  146. package/{esm → types}/node/HttpRequestSender.d.ts +1 -0
  147. package/{cjs → types}/node/HttpServer.d.ts +2 -2
  148. package/types/node/VapixEvents.d.ts +16 -0
  149. package/types/node/WsClient.d.ts +30 -0
  150. package/types/node/events/AxisCameraStationEvents.d.ts +12 -0
  151. package/types/node/events/GenetecAgent.d.ts +16 -0
  152. package/types/node/index.d.ts +17 -0
  153. package/types/types/CamOverlayAPI/CamOverlayAPI.d.ts +4330 -0
  154. package/types/types/CamOverlayAPI/accuweatherSchema.d.ts +84 -0
  155. package/types/types/CamOverlayAPI/customGraphicsSchema.d.ts +700 -0
  156. package/types/types/CamOverlayAPI/imagesSchema.d.ts +95 -0
  157. package/types/types/CamOverlayAPI/index.d.ts +11 -0
  158. package/types/types/CamOverlayAPI/infotickerSchema.d.ts +96 -0
  159. package/types/types/CamOverlayAPI/pipSchema.d.ts +125 -0
  160. package/types/types/CamOverlayAPI/ptzCompassSchema.d.ts +96 -0
  161. package/types/types/CamOverlayAPI/ptzSchema.d.ts +118 -0
  162. package/types/types/CamOverlayAPI/scoreBoardSchema.d.ts +357 -0
  163. package/types/types/CamOverlayAPI/screenSharingSchema.d.ts +58 -0
  164. package/types/types/CamOverlayAPI/serviceCommonTypes.d.ts +145 -0
  165. package/types/types/CamOverlayAPI/webCameraSharingSchema.d.ts +58 -0
  166. package/types/types/CamOverlayDrawingAPI.d.ts +48 -0
  167. package/types/types/CamOverlayPainter.d.ts +76 -0
  168. package/types/types/CamScripterAPI.d.ts +130 -0
  169. package/types/types/CamScripterAPICameraEventsGenerator.d.ts +45 -0
  170. package/types/types/CamStreamerAPI.d.ts +272 -0
  171. package/{esm → types}/types/CamSwitcherAPI.d.ts +145 -66
  172. package/{esm/events → types/types}/GenetecAgent.d.ts +47 -47
  173. package/types/types/PlaneTrackerAPI.d.ts +918 -0
  174. package/{cjs → types}/types/VapixAPI.d.ts +647 -465
  175. package/types/types/VapixEvents.d.ts +15 -0
  176. package/{cjs → types}/types/common.d.ts +17 -5
  177. package/types/types/ws/CamOverlayEvents.d.ts +88 -0
  178. package/types/types/ws/CamStreamerEvents.d.ts +249 -0
  179. package/{cjs/types → types/types/ws}/CamSwitcherEvents.d.ts +77 -0
  180. package/types/types/ws/PlaneTrackerEvents.d.ts +1597 -0
  181. package/types/web/DefaultClient.d.ts +8 -0
  182. package/types/web/WsClient.d.ts +17 -0
  183. package/types/ws/CamOverlayEvents.d.ts +8 -0
  184. package/types/ws/CamStreamerEvents.d.ts +8 -0
  185. package/types/ws/CamSwitcherEvents.d.ts +8 -0
  186. package/types/ws/PlaneTrackerEvents.d.ts +9 -0
  187. package/cjs/CamOverlayAPI.d.ts +0 -31
  188. package/cjs/CamOverlayDrawingAPI.d.ts +0 -86
  189. package/cjs/CamOverlayPainter/Frame.d.ts +0 -96
  190. package/cjs/CamOverlayPainter/ResourceManager.d.ts +0 -14
  191. package/cjs/CamOverlayPainter/ResourceManager.js +0 -46
  192. package/cjs/CamScripterAPI.d.ts +0 -19
  193. package/cjs/CamScripterAPICameraEventsGenerator.d.ts +0 -74
  194. package/cjs/CamStreamerAPI.d.ts +0 -16
  195. package/cjs/CamSwitcherAPI.d.ts +0 -48
  196. package/cjs/CamSwitcherEvents.d.ts +0 -18
  197. package/cjs/VapixAPI.d.ts +0 -66
  198. package/cjs/VapixEvents.d.ts +0 -43
  199. package/cjs/errors/errors.d.ts +0 -34
  200. package/cjs/events/AxisCameraStationEvents.d.ts +0 -9
  201. package/cjs/events/AxisCameraStationEvents.js +0 -48
  202. package/cjs/events/GenetecAgent.d.ts +0 -174
  203. package/cjs/events/GenetecAgent.js +0 -123
  204. package/cjs/index.d.ts +0 -11
  205. package/cjs/internal/ProxyClient.d.ts +0 -11
  206. package/cjs/internal/common.d.ts +0 -39
  207. package/cjs/internal/common.js +0 -27
  208. package/cjs/node/DefaultClient.d.ts +0 -15
  209. package/cjs/node/HttpRequestSender.d.ts +0 -28
  210. package/cjs/node/WsClient.d.ts +0 -39
  211. package/cjs/node/WsEventClient.d.ts +0 -13
  212. package/cjs/node/WsEventClient.js +0 -22
  213. package/cjs/types/CamOverlayAPI.d.ts +0 -188
  214. package/cjs/types/CamOverlayAPI.js +0 -47
  215. package/cjs/types/CamScripterAPI.d.ts +0 -67
  216. package/cjs/types/CamStreamerAPI.d.ts +0 -139
  217. package/cjs/types/CamSwitcherAPI.d.ts +0 -814
  218. package/cjs/web/DefaultClient.d.ts +0 -6
  219. package/cjs/web/WsClient.d.ts +0 -13
  220. package/cjs/web/index.d.ts +0 -2
  221. package/esm/CamOverlayAPI.d.ts +0 -31
  222. package/esm/CamOverlayDrawingAPI.d.ts +0 -86
  223. package/esm/CamOverlayPainter/Painter.d.ts +0 -48
  224. package/esm/CamOverlayPainter/ResourceManager.d.ts +0 -14
  225. package/esm/CamScripterAPI.d.ts +0 -19
  226. package/esm/CamScripterAPICameraEventsGenerator.d.ts +0 -74
  227. package/esm/CamStreamerAPI.d.ts +0 -16
  228. package/esm/CamSwitcherAPI.d.ts +0 -48
  229. package/esm/CamSwitcherEvents.d.ts +0 -18
  230. package/esm/VapixAPI.d.ts +0 -66
  231. package/esm/VapixEvents.d.ts +0 -43
  232. package/esm/errors/errors.d.ts +0 -34
  233. package/esm/events/AxisCameraStationEvents.d.ts +0 -9
  234. package/esm/events/GenetecAgent.js +0 -119
  235. package/esm/index.d.ts +0 -11
  236. package/esm/internal/Digest.d.ts +0 -4
  237. package/esm/internal/ProxyClient.d.ts +0 -11
  238. package/esm/internal/common.d.ts +0 -39
  239. package/esm/internal/common.js +0 -20
  240. package/esm/internal/constants.d.ts +0 -1
  241. package/esm/internal/transformers.d.ts +0 -5
  242. package/esm/internal/utils.d.ts +0 -11
  243. package/esm/internal/versionCompare.d.ts +0 -6
  244. package/esm/node/DefaultClient.d.ts +0 -15
  245. package/esm/node/HttpServer.d.ts +0 -21
  246. package/esm/node/WsClient.d.ts +0 -39
  247. package/esm/node/WsEventClient.d.ts +0 -13
  248. package/esm/node/WsEventClient.js +0 -18
  249. package/esm/node/index.d.ts +0 -2
  250. package/esm/types/CamOverlayAPI.d.ts +0 -188
  251. package/esm/types/CamOverlayAPI.js +0 -44
  252. package/esm/types/CamScripterAPI.d.ts +0 -67
  253. package/esm/types/CamStreamerAPI.d.ts +0 -139
  254. package/esm/types/CamSwitcherEvents.d.ts +0 -491
  255. package/esm/types/VapixAPI.d.ts +0 -1683
  256. package/esm/types/common.d.ts +0 -37
  257. package/esm/web/DefaultClient.d.ts +0 -6
  258. package/esm/web/WsClient.d.ts +0 -13
  259. package/esm/web/index.d.ts +0 -2
  260. /package/{cjs/CreatePackage.d.ts → esm/internal/types.js} +0 -0
  261. /package/esm/{CreatePackage.d.ts → types/CamOverlayDrawingAPI.js} +0 -0
  262. /package/{cjs → types}/internal/constants.d.ts +0 -0
  263. /package/{cjs → types}/internal/transformers.d.ts +0 -0
  264. /package/{cjs/internal → types/node}/Digest.d.ts +0 -0
  265. /package/{cjs/node → types/web}/index.d.ts +0 -0
@@ -0,0 +1,72 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.ResourceManager = void 0;
27
+ const fs = __importStar(require("fs/promises"));
28
+ class ResourceManager {
29
+ co;
30
+ imgFileNames = {};
31
+ fontFileNames = {};
32
+ images = {};
33
+ fonts = {};
34
+ constructor(co) {
35
+ this.co = co;
36
+ }
37
+ registerImage(moniker, fileName) {
38
+ this.imgFileNames[moniker] = process.env.INSTALL_PATH + '/images/' + fileName;
39
+ }
40
+ registerFont(moniker, fileName) {
41
+ this.fontFileNames[moniker] = process.env.INSTALL_PATH + '/fonts/' + fileName;
42
+ }
43
+ async image(moniker) {
44
+ if (this.images[moniker] !== undefined) {
45
+ return this.images[moniker];
46
+ }
47
+ const path = this.imgFileNames[moniker];
48
+ if (path !== undefined) {
49
+ const imgData = await fs.readFile(path);
50
+ this.images[moniker] = await this.co.uploadImageData(imgData);
51
+ return this.images[moniker];
52
+ }
53
+ throw new Error('Error! Unknown image requested!');
54
+ }
55
+ async font(moniker) {
56
+ if (this.fonts[moniker] !== undefined) {
57
+ return this.fonts[moniker];
58
+ }
59
+ const path = this.fontFileNames[moniker];
60
+ if (path !== undefined) {
61
+ const fontData = await fs.readFile(path);
62
+ this.fonts[moniker] = await this.co.uploadFontData(fontData);
63
+ return this.fonts[moniker];
64
+ }
65
+ throw new Error('Error! Unknown font requested!');
66
+ }
67
+ clear() {
68
+ this.images = {};
69
+ this.fonts = {};
70
+ }
71
+ }
72
+ exports.ResourceManager = ResourceManager;
@@ -1,9 +1,12 @@
1
1
  "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
2
5
  Object.defineProperty(exports, "__esModule", { value: true });
3
6
  exports.CamScripterAPICameraEventsGenerator = void 0;
4
- const EventEmitter = require("events");
5
- const WsClient_1 = require("./node/WsClient");
6
- class CamScripterAPICameraEventsGenerator extends EventEmitter {
7
+ const events_1 = __importDefault(require("events"));
8
+ const WsClient_1 = require("./WsClient");
9
+ class CamScripterAPICameraEventsGenerator extends events_1.default {
7
10
  tls;
8
11
  tlsInsecure;
9
12
  ip;
@@ -27,14 +30,14 @@ class CamScripterAPICameraEventsGenerator extends EventEmitter {
27
30
  this.sendMessages = {};
28
31
  this.wsConnected = false;
29
32
  this.createWsClient();
30
- EventEmitter.call(this);
33
+ events_1.default.call(this);
31
34
  }
32
35
  connect() {
33
36
  this.ws.open();
34
37
  this.startMsgsTimeoutCheck();
35
38
  }
36
39
  disconnect() {
37
- this.ws.close();
40
+ this.ws.destroy();
38
41
  this.stopMsgsTimeoutCheck();
39
42
  }
40
43
  declareEvent(eventDeclaration) {
@@ -70,21 +73,21 @@ class CamScripterAPICameraEventsGenerator extends EventEmitter {
70
73
  protocol: 'camera-events',
71
74
  };
72
75
  this.ws = new WsClient_1.WsClient(options);
73
- this.ws.on('open', () => {
76
+ this.ws.onOpen = () => {
74
77
  this.wsConnected = true;
75
78
  this.emit('open');
76
- });
77
- this.ws.on('message', (msgData) => this.incomingWsMessageHandler(msgData));
78
- this.ws.on('error', (error) => {
79
+ };
80
+ this.ws.onMessage = (data) => this.incomingWsMessageHandler(data.toString());
81
+ this.ws.onError = (error) => {
79
82
  this.reportErr(error);
80
- });
81
- this.ws.on('close', () => {
83
+ };
84
+ this.ws.onClose = () => {
82
85
  this.wsConnected = false;
83
86
  this.reportClose();
84
- });
87
+ };
85
88
  }
86
89
  incomingWsMessageHandler(msgData) {
87
- const dataJSON = JSON.parse(msgData.toString());
90
+ const dataJSON = JSON.parse(msgData);
88
91
  let errorResponse;
89
92
  if ('error' in dataJSON) {
90
93
  errorResponse = dataJSON;
@@ -25,29 +25,27 @@ class DefaultClient {
25
25
  }
26
26
  this.httpRequestSender = new HttpRequestSender_1.HttpRequestSender(agentOptions);
27
27
  }
28
- get url() {
29
- return `${this.tls ? 'https' : 'http'}://${this.user}:${this.pass}@${this.ip}:${this.port}`;
30
- }
31
- async get(path, parameters = {}, headers) {
32
- const options = this.getBaseConnectionParams('GET', path, parameters);
33
- options.headers = headers;
28
+ get(params) {
29
+ const { path, parameters, headers, timeout } = params;
30
+ const options = this.getBaseConnectionParams('GET', path, parameters, headers, timeout);
34
31
  return this.httpRequestSender.sendRequest(options);
35
32
  }
36
- async post(path, data, parameters = {}, headers) {
37
- const options = this.getBaseConnectionParams('POST', path, parameters);
38
- options.headers = headers;
33
+ post(params) {
34
+ const { path, data, parameters, headers, timeout } = params;
35
+ const options = this.getBaseConnectionParams('POST', path, parameters, headers, timeout);
39
36
  return this.httpRequestSender.sendRequest(options, data);
40
37
  }
41
- getBaseConnectionParams(method, path, params) {
42
- const pathName = (0, utils_1.addParametersToPath)(path, params);
38
+ getBaseConnectionParams(method, path, params, headers, timeout) {
43
39
  return {
44
40
  method: method,
45
41
  protocol: this.tls ? 'https:' : 'http:',
46
42
  host: this.ip,
47
43
  port: this.port,
48
- path: pathName,
44
+ path: (0, utils_1.addParametersToPath)(path, params),
49
45
  user: this.user,
50
46
  pass: this.pass,
47
+ headers,
48
+ timeout,
51
49
  };
52
50
  }
53
51
  }
@@ -1,7 +1,10 @@
1
1
  "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
2
5
  Object.defineProperty(exports, "__esModule", { value: true });
3
6
  exports.Digest = void 0;
4
- const crypto = require("crypto");
7
+ const crypto_1 = __importDefault(require("crypto"));
5
8
  class Digest {
6
9
  nonceCount = 1;
7
10
  getAuthHeader(user, pass, method, uri, wwwAuthenticateHeader) {
@@ -13,18 +16,18 @@ class Digest {
13
16
  const value = arg.substring(pos + 1).trim();
14
17
  digestItems[key] = value.replace(/"/g, '');
15
18
  }
16
- const HA1 = crypto.createHash('md5').update(`${user}:${digestItems['realm']}:${pass}`).digest('hex');
17
- const HA2 = crypto.createHash('md5').update(`${method}:${uri}`).digest('hex');
19
+ const HA1 = crypto_1.default.createHash('md5').update(`${user}:${digestItems['realm']}:${pass}`).digest('hex');
20
+ const HA2 = crypto_1.default.createHash('md5').update(`${method}:${uri}`).digest('hex');
18
21
  const ncValue = ('00000000' + this.nonceCount.toString(16)).slice(-8);
19
22
  let response;
20
23
  if (digestItems['qop'] !== undefined) {
21
- response = crypto
24
+ response = crypto_1.default
22
25
  .createHash('md5')
23
26
  .update(`${HA1}:${digestItems['nonce']}:${ncValue}:162d50aa594e9648:auth:${HA2}`)
24
27
  .digest('hex');
25
28
  }
26
29
  else {
27
- response = crypto.createHash('md5').update(`${HA1}:${digestItems['nonce']}:${HA2}`).digest('hex');
30
+ response = crypto_1.default.createHash('md5').update(`${HA1}:${digestItems['nonce']}:${HA2}`).digest('hex');
28
31
  }
29
32
  let header = 'Digest ' +
30
33
  `username="${user}",` +
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const Digest_1 = require("./Digest");
4
+ const globals_1 = require("@jest/globals");
5
+ (0, globals_1.describe)('Digest', () => {
6
+ (0, globals_1.describe)('getAuthHeader', () => {
7
+ (0, globals_1.test)('Checks, that Digest.getAuthHeader() returns correct value.', () => {
8
+ const testString = 'Digest realm="testrealm@host.com", qop="auth,auth-int", nonce="dcd98b7102dd2f0e8b11d0f600bfb0c093", opaque="5ccc069c403ebaf9f0171e9517f40e41"';
9
+ const value = 'Digest username="root",realm="testrealm@host.com",nonce="dcd98b7102dd2f0e8b11d0f600bfb0c093",uri="www.cz",response="63f54af3ce5cf193a7435d5c68625472",qop=auth,nc=00000001,cnonce="162d50aa594e9648"';
10
+ (0, globals_1.expect)(new Digest_1.Digest().getAuthHeader('root', 'pass', 'GET', 'www.cz', testString)).toBe(value);
11
+ });
12
+ });
13
+ });
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.HttpRequestSender = void 0;
4
- const Digest_1 = require("../internal/Digest");
4
+ const Digest_1 = require("./Digest");
5
5
  const undici_1 = require("undici");
6
6
  class HttpRequestSender {
7
7
  agent;
@@ -11,8 +11,18 @@ class HttpRequestSender {
11
11
  connect: { rejectUnauthorized: agentOptions?.rejectUnaurhorized, keepAlive: agentOptions?.keepAlive },
12
12
  });
13
13
  }
14
- sendRequest(options, postData) {
15
- return this.sendRequestWithAuth(options, postData);
14
+ async sendRequest(options, postData) {
15
+ const stackHolder = { stack: '' };
16
+ Error.captureStackTrace(stackHolder, this.sendRequest);
17
+ try {
18
+ return await this.sendRequestWithAuth(options, postData);
19
+ }
20
+ catch (err) {
21
+ if (err instanceof Error) {
22
+ err.stack = `${err.stack}\nCaptured at:\n${stackHolder.stack}`;
23
+ }
24
+ throw err;
25
+ }
16
26
  }
17
27
  async sendRequestWithAuth(options, postData, wwwAuthenticateHeader) {
18
28
  options.timeout ??= 10000;
@@ -82,7 +92,7 @@ class HttpRequestSender {
82
92
  return authData.digest.getAuthHeader(options.user, options.pass, options.method ?? 'GET', options.path, authData.wwwAuthenticateHeader);
83
93
  }
84
94
  else {
85
- return `Basic ${btoa(options.user + ':' + options.pass)}`;
95
+ return `Basic ${Buffer.from(`${options.user}:${options.pass}`).toString('base64')}`;
86
96
  }
87
97
  }
88
98
  }
@@ -1,12 +1,15 @@
1
1
  "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
2
5
  Object.defineProperty(exports, "__esModule", { value: true });
3
6
  exports.HttpServer = void 0;
4
- const http = require("http");
5
- const url = require("url");
6
- const fs = require("fs");
7
- const path = require("path");
8
- const EventEmitter = require("events");
9
- class HttpServer extends EventEmitter {
7
+ const http_1 = __importDefault(require("http"));
8
+ const url_1 = __importDefault(require("url"));
9
+ const fs_1 = __importDefault(require("fs"));
10
+ const path_1 = __importDefault(require("path"));
11
+ const events_1 = __importDefault(require("events"));
12
+ class HttpServer extends events_1.default {
10
13
  host;
11
14
  port;
12
15
  registeredPaths;
@@ -17,9 +20,9 @@ class HttpServer extends EventEmitter {
17
20
  this.host = options?.host ?? process.env.HTTP_HOST ?? '0.0.0.0';
18
21
  this.port = options?.port ?? parseInt(process.env.HTTP_PORT ?? '80');
19
22
  this.registeredPaths = new Map();
20
- this.server = http.createServer((req, res) => {
23
+ this.server = http_1.default.createServer((req, res) => {
21
24
  this.emit('access', req.method + ' ' + req.url);
22
- const parsedUrl = url.parse(req.url ?? '');
25
+ const parsedUrl = url_1.default.parse(req.url ?? '');
23
26
  parsedUrl.pathname ??= '';
24
27
  const requestCallback = this.registeredPaths.get(parsedUrl.pathname);
25
28
  if (requestCallback) {
@@ -27,7 +30,7 @@ class HttpServer extends EventEmitter {
27
30
  return;
28
31
  }
29
32
  let pathname = `./html${parsedUrl.pathname}`;
30
- const ext = path.parse(pathname).ext;
33
+ const ext = path_1.default.parse(pathname).ext;
31
34
  const map = {
32
35
  '.ico': 'image/x-icon',
33
36
  '.html': 'text/html',
@@ -42,17 +45,17 @@ class HttpServer extends EventEmitter {
42
45
  '.pdf': 'application/pdf',
43
46
  '.doc': 'application/msword',
44
47
  };
45
- fs.access(pathname, fs.constants.R_OK, (err) => {
48
+ fs_1.default.access(pathname, fs_1.default.constants.R_OK, (err) => {
46
49
  if (err) {
47
50
  res.statusCode = 404;
48
51
  res.end(`File ${pathname} not found!`);
49
52
  this.emit('error', `File ${pathname} not found!`);
50
53
  return;
51
54
  }
52
- if (fs.statSync(pathname).isDirectory()) {
55
+ if (fs_1.default.statSync(pathname).isDirectory()) {
53
56
  pathname += `/index${ext}`;
54
57
  }
55
- fs.readFile(pathname, (error, data) => {
58
+ fs_1.default.readFile(pathname, (error, data) => {
56
59
  if (error) {
57
60
  res.statusCode = 500;
58
61
  res.end(`Error getting the file: ${error}`);
@@ -2,7 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.VapixEvents = void 0;
4
4
  const eventemitter2_1 = require("eventemitter2");
5
- const WsClient_1 = require("./node/WsClient");
5
+ const WsClient_1 = require("./WsClient");
6
6
  class VapixEvents extends eventemitter2_1.EventEmitter2 {
7
7
  tls;
8
8
  tlsInsecure;
@@ -26,7 +26,7 @@ class VapixEvents extends eventemitter2_1.EventEmitter2 {
26
26
  this.ws.open();
27
27
  }
28
28
  disconnect() {
29
- this.ws.close();
29
+ this.ws.destroy();
30
30
  }
31
31
  createWsClient() {
32
32
  const options = {
@@ -39,7 +39,7 @@ class VapixEvents extends eventemitter2_1.EventEmitter2 {
39
39
  address: '/vapix/ws-data-stream?sources=events',
40
40
  };
41
41
  this.ws = new WsClient_1.WsClient(options);
42
- this.ws.on('open', () => {
42
+ this.ws.onOpen = () => {
43
43
  const topics = [];
44
44
  const eventNames = this.eventNames();
45
45
  for (const eventName of eventNames) {
@@ -58,8 +58,8 @@ class VapixEvents extends eventemitter2_1.EventEmitter2 {
58
58
  },
59
59
  };
60
60
  this.ws.send(JSON.stringify(topicFilter));
61
- });
62
- this.ws.on('message', (data) => {
61
+ };
62
+ this.ws.onMessage = (data) => {
63
63
  const dataJSON = JSON.parse(data.toString());
64
64
  if (dataJSON.method === 'events:configure') {
65
65
  if (dataJSON.error === undefined) {
@@ -73,13 +73,13 @@ class VapixEvents extends eventemitter2_1.EventEmitter2 {
73
73
  }
74
74
  const eventName = dataJSON.params.notification.topic;
75
75
  this.emit(eventName, dataJSON);
76
- });
77
- this.ws.on('error', (error) => {
76
+ };
77
+ this.ws.onError = (error) => {
78
78
  this.emit('error', error);
79
- });
80
- this.ws.on('close', () => {
79
+ };
80
+ this.ws.onClose = () => {
81
81
  this.emit('close');
82
- });
82
+ };
83
83
  }
84
84
  isReservedEventName(eventName) {
85
85
  return eventName === 'open' || eventName === 'close' || eventName === 'error';
@@ -1,10 +1,12 @@
1
1
  "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
2
5
  Object.defineProperty(exports, "__esModule", { value: true });
3
6
  exports.WsClient = void 0;
4
- const EventEmitter = require("events");
5
- const WebSocket = require("ws");
6
- const Digest_1 = require("../internal/Digest");
7
- class WsClient extends EventEmitter {
7
+ const ws_1 = __importDefault(require("ws"));
8
+ const Digest_1 = require("./Digest");
9
+ class WsClient {
8
10
  user;
9
11
  pass;
10
12
  address;
@@ -17,7 +19,6 @@ class WsClient extends EventEmitter {
17
19
  ws;
18
20
  isClosed = false;
19
21
  constructor(options) {
20
- super();
21
22
  const tls = options.tls ?? false;
22
23
  const tlsInsecure = options.tlsInsecure ?? false;
23
24
  const ip = options.ip ?? '127.0.0.1';
@@ -42,17 +43,17 @@ class WsClient extends EventEmitter {
42
43
  }
43
44
  this.isClosed = false;
44
45
  if (this.protocol === undefined) {
45
- this.ws = new WebSocket(this.address, this.wsOptions);
46
+ this.ws = new ws_1.default(this.address, this.wsOptions);
46
47
  }
47
48
  else {
48
- this.ws = new WebSocket(this.address, this.protocol, this.wsOptions);
49
+ this.ws = new ws_1.default(this.address, this.protocol, this.wsOptions);
49
50
  }
50
51
  this.ws.binaryType = 'arraybuffer';
51
52
  this.isAlive = true;
52
- this.pingTimer = setInterval(async () => {
53
- if ((this.ws && this.ws.readyState !== WebSocket.OPEN) || this.isAlive === false) {
54
- this.emit('error', new Error('Connection timeout'));
55
- await this.closeWsConnection();
53
+ this.pingTimer = setInterval(() => {
54
+ if ((this.ws && this.ws.readyState !== ws_1.default.OPEN) || this.isAlive === false) {
55
+ this.onError(new Error('Connection timeout'));
56
+ this.closeWsConnection();
56
57
  }
57
58
  else {
58
59
  this.isAlive = false;
@@ -75,23 +76,32 @@ class WsClient extends EventEmitter {
75
76
  this.open(res.headers['www-authenticate']);
76
77
  }
77
78
  else {
78
- this.emit('error', new Error('Status code: ' + res.statusCode));
79
+ this.onError(new Error('Status code: ' + res.statusCode));
79
80
  this.closeWsConnection();
80
81
  }
81
82
  });
82
- this.ws.on('open', () => this.emit('open'));
83
- this.ws.on('message', (data) => this.emit('message', data));
83
+ this.ws.on('open', () => this.onOpen());
84
+ this.ws.on('message', (data, isBinary) => {
85
+ const message = isBinary ? data : data.toString();
86
+ this.onMessage(message);
87
+ });
84
88
  this.ws.on('error', (error) => {
85
- this.emit('error', error);
89
+ this.onError(error);
86
90
  this.closeWsConnection();
87
91
  });
88
92
  this.ws.on('close', () => this.closeWsConnection());
89
93
  }
90
94
  catch (error) {
91
- this.emit('error', error instanceof Error ? error : new Error('Unknown error'));
95
+ this.onError(error instanceof Error ? error : new Error('Unknown error'));
92
96
  this.closeWsConnection();
93
97
  }
94
98
  }
99
+ onMessage = (_) => { };
100
+ onOpen = () => { };
101
+ onClose = () => { };
102
+ onError = (error) => {
103
+ console.error(error);
104
+ };
95
105
  send(data) {
96
106
  if (this.ws === undefined) {
97
107
  throw new Error("This websocket hasn't been opened yet.");
@@ -100,7 +110,7 @@ class WsClient extends EventEmitter {
100
110
  this.ws.send(data);
101
111
  }
102
112
  }
103
- close() {
113
+ destroy() {
104
114
  if (this.isClosed) {
105
115
  return;
106
116
  }
@@ -122,15 +132,15 @@ class WsClient extends EventEmitter {
122
132
  }
123
133
  wsCopy.removeAllListeners();
124
134
  wsCopy.on('error', () => { });
125
- if (wsCopy.readyState !== WebSocket.CLOSING && wsCopy.readyState !== WebSocket.CLOSED) {
135
+ if (wsCopy.readyState !== ws_1.default.CLOSING && wsCopy.readyState !== ws_1.default.CLOSED) {
126
136
  wsCopy.close();
127
137
  }
128
138
  setTimeout(() => {
129
- if (wsCopy.readyState !== WebSocket.CLOSED) {
139
+ if (wsCopy.readyState !== ws_1.default.CLOSED) {
130
140
  wsCopy.terminate();
131
141
  }
132
142
  }, 5000);
133
- this.emit('close');
143
+ this.onClose();
134
144
  }
135
145
  catch (err) {
136
146
  console.error(err);
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AxisCameraStationEvents = void 0;
4
+ const utils_1 = require("../../internal/utils");
5
+ const ProxyClient_1 = require("../../internal/ProxyClient");
6
+ const DefaultClient_1 = require("../DefaultClient");
7
+ class AxisCameraStationEvents {
8
+ sourceKey;
9
+ client;
10
+ constructor(clientOptions, sourceKey) {
11
+ this.sourceKey = sourceKey;
12
+ this.client = new DefaultClient_1.DefaultClient(clientOptions);
13
+ }
14
+ getClient(proxyParams) {
15
+ return proxyParams ? new ProxyClient_1.ProxyClient(this.client, proxyParams) : this.client;
16
+ }
17
+ async sendEvent(data, eventType, options) {
18
+ const dateString = this.getDate();
19
+ const event = {
20
+ addExternalDataRequest: {
21
+ occurrenceTime: dateString,
22
+ source: this.sourceKey,
23
+ externalDataType: eventType,
24
+ data: data,
25
+ },
26
+ };
27
+ const eventData = JSON.stringify(event);
28
+ const agent = this.getClient(options?.proxyParams);
29
+ const res = await agent.post({
30
+ path: '/Acs/Api/ExternalDataFacade/AddExternalData',
31
+ data: eventData,
32
+ headers: {
33
+ 'Content-Type': 'application/json',
34
+ 'Content-Length': eventData.length.toString(),
35
+ },
36
+ timeout: options?.timeout,
37
+ });
38
+ if (!res.ok) {
39
+ throw new Error(`ACS status code: ${res.status}`);
40
+ }
41
+ }
42
+ getDate() {
43
+ const date = new Date();
44
+ const year = date.getUTCFullYear();
45
+ const month = (0, utils_1.pad)(date.getUTCMonth() + 1, 2);
46
+ const day = (0, utils_1.pad)(date.getUTCDate(), 2);
47
+ const hours = (0, utils_1.pad)(date.getUTCHours(), 2);
48
+ const minutes = (0, utils_1.pad)(date.getUTCMinutes(), 2);
49
+ const seconds = (0, utils_1.pad)(date.getUTCSeconds(), 2);
50
+ return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
51
+ }
52
+ }
53
+ exports.AxisCameraStationEvents = AxisCameraStationEvents;