camstreamerlib 4.0.0-beta.8 → 4.0.0-beta.80

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 (343) hide show
  1. package/README.md +143 -38
  2. package/cjs/CamOverlayAPI.d.ts +863 -27
  3. package/cjs/CamOverlayAPI.js +135 -92
  4. package/cjs/CamScripterAPI.d.ts +44 -17
  5. package/cjs/CamScripterAPI.js +52 -42
  6. package/cjs/CamStreamerAPI.d.ts +70 -14
  7. package/cjs/CamStreamerAPI.js +100 -44
  8. package/cjs/CamSwitcherAPI.d.ts +158 -43
  9. package/cjs/CamSwitcherAPI.js +138 -122
  10. package/cjs/PlaneTrackerAPI.d.ts +239 -0
  11. package/cjs/PlaneTrackerAPI.js +247 -0
  12. package/cjs/VapixAPI.d.ts +94 -42
  13. package/cjs/VapixAPI.js +314 -232
  14. package/cjs/{CreatePackage.js → bin/CreatePackage.js} +44 -18
  15. package/cjs/errors/errors.d.ts +65 -4
  16. package/cjs/errors/errors.js +138 -7
  17. package/cjs/index.d.ts +20 -4
  18. package/cjs/index.js +28 -5
  19. package/cjs/internal/ProxyClient.d.ts +8 -9
  20. package/cjs/internal/ProxyClient.js +28 -32
  21. package/cjs/internal/WsEvents.d.ts +37 -0
  22. package/cjs/{CamSwitcherEvents.js → internal/WsEvents.js} +28 -22
  23. package/cjs/internal/types.d.ts +47 -0
  24. package/cjs/internal/types.js +2 -0
  25. package/cjs/internal/utils.d.ts +3 -1
  26. package/cjs/internal/utils.js +15 -3
  27. package/cjs/internal/versionCompare.d.ts +2 -2
  28. package/cjs/node/CamOverlayDrawingAPI.d.ts +41 -0
  29. package/cjs/{CamOverlayDrawingAPI.js → node/CamOverlayDrawingAPI.js} +28 -20
  30. package/cjs/{CamOverlayPainter → node/CamOverlayPainter}/Frame.d.ts +8 -37
  31. package/cjs/{CamOverlayPainter → node/CamOverlayPainter}/Frame.js +33 -0
  32. package/cjs/{CamOverlayPainter → node/CamOverlayPainter}/Painter.d.ts +5 -21
  33. package/cjs/{CamOverlayPainter → node/CamOverlayPainter}/Painter.js +5 -17
  34. package/cjs/node/CamOverlayPainter/ResourceManager.d.ts +15 -0
  35. package/cjs/node/CamOverlayPainter/ResourceManager.js +72 -0
  36. package/cjs/node/CamScripterAPICameraEventsGenerator.d.ts +31 -0
  37. package/cjs/{CamScripterAPICameraEventsGenerator.js → node/CamScripterAPICameraEventsGenerator.js} +13 -13
  38. package/cjs/node/DefaultClient.d.ts +6 -5
  39. package/cjs/node/DefaultClient.js +10 -12
  40. package/cjs/{internal → node}/Digest.js +24 -1
  41. package/cjs/node/Digest.test.js +13 -0
  42. package/cjs/node/HttpRequestSender.d.ts +1 -0
  43. package/cjs/node/HttpRequestSender.js +14 -4
  44. package/cjs/node/HttpServer.d.ts +1 -1
  45. package/cjs/node/HttpServer.js +29 -6
  46. package/cjs/node/TimeZoneDaemon.d.ts +6 -0
  47. package/cjs/node/TimeZoneDaemon.js +29 -0
  48. package/cjs/node/VapixEvents.d.ts +16 -0
  49. package/cjs/{VapixEvents.js → node/VapixEvents.js} +10 -10
  50. package/cjs/node/WsClient.d.ts +9 -18
  51. package/cjs/node/WsClient.js +27 -20
  52. package/cjs/node/events/AxisCameraStationEvents.d.ts +12 -0
  53. package/cjs/node/events/AxisCameraStationEvents.js +53 -0
  54. package/cjs/node/events/GenetecAgent.d.ts +16 -0
  55. package/cjs/node/events/GenetecAgent.js +124 -0
  56. package/cjs/node/index.d.ts +18 -2
  57. package/cjs/node/index.js +39 -5
  58. package/cjs/types/CamOverlayAPI/CamOverlayAPI.d.ts +4330 -0
  59. package/cjs/types/CamOverlayAPI/CamOverlayAPI.js +92 -0
  60. package/cjs/types/CamOverlayAPI/accuweatherSchema.d.ts +84 -0
  61. package/cjs/types/CamOverlayAPI/accuweatherSchema.js +47 -0
  62. package/cjs/types/CamOverlayAPI/customGraphicsSchema.d.ts +700 -0
  63. package/cjs/types/CamOverlayAPI/customGraphicsSchema.js +72 -0
  64. package/cjs/types/CamOverlayAPI/imagesSchema.d.ts +95 -0
  65. package/cjs/types/CamOverlayAPI/imagesSchema.js +9 -0
  66. package/cjs/types/CamOverlayAPI/index.d.ts +11 -0
  67. package/cjs/types/CamOverlayAPI/index.js +27 -0
  68. package/cjs/types/CamOverlayAPI/infotickerSchema.d.ts +96 -0
  69. package/cjs/types/CamOverlayAPI/infotickerSchema.js +26 -0
  70. package/cjs/types/CamOverlayAPI/pipSchema.d.ts +125 -0
  71. package/cjs/types/CamOverlayAPI/pipSchema.js +39 -0
  72. package/cjs/types/CamOverlayAPI/ptzCompassSchema.d.ts +96 -0
  73. package/cjs/types/CamOverlayAPI/ptzCompassSchema.js +26 -0
  74. package/cjs/types/CamOverlayAPI/ptzSchema.d.ts +118 -0
  75. package/cjs/types/CamOverlayAPI/ptzSchema.js +12 -0
  76. package/cjs/types/CamOverlayAPI/scoreBoardSchema.d.ts +357 -0
  77. package/cjs/types/CamOverlayAPI/scoreBoardSchema.js +132 -0
  78. package/cjs/types/CamOverlayAPI/screenSharingSchema.d.ts +58 -0
  79. package/cjs/types/CamOverlayAPI/screenSharingSchema.js +8 -0
  80. package/cjs/types/CamOverlayAPI/serviceCommonTypes.d.ts +145 -0
  81. package/cjs/types/CamOverlayAPI/serviceCommonTypes.js +91 -0
  82. package/cjs/types/CamOverlayAPI/webCameraSharingSchema.d.ts +58 -0
  83. package/cjs/types/CamOverlayAPI/webCameraSharingSchema.js +8 -0
  84. package/cjs/types/CamOverlayDrawingAPI.d.ts +48 -0
  85. package/cjs/types/CamOverlayDrawingAPI.js +2 -0
  86. package/cjs/types/CamOverlayPainter.d.ts +76 -0
  87. package/cjs/types/CamOverlayPainter.js +14 -0
  88. package/cjs/types/CamScripterAPI.d.ts +86 -23
  89. package/cjs/types/CamScripterAPI.js +24 -8
  90. package/cjs/types/CamScripterAPICameraEventsGenerator.d.ts +45 -0
  91. package/cjs/types/CamScripterAPICameraEventsGenerator.js +2 -0
  92. package/cjs/types/CamStreamerAPI/CamStreamerAPI.d.ts +239 -0
  93. package/cjs/types/CamStreamerAPI/CamStreamerAPI.js +48 -0
  94. package/cjs/types/CamStreamerAPI/facebookSchema.d.ts +18 -0
  95. package/cjs/types/CamStreamerAPI/facebookSchema.js +11 -0
  96. package/cjs/types/CamStreamerAPI/hlsSchema.d.ts +18 -0
  97. package/cjs/types/CamStreamerAPI/hlsSchema.js +11 -0
  98. package/cjs/types/CamStreamerAPI/index.d.ts +9 -0
  99. package/cjs/types/CamStreamerAPI/index.js +25 -0
  100. package/cjs/types/CamStreamerAPI/mpegDvbSchema.d.ts +69 -0
  101. package/cjs/types/CamStreamerAPI/mpegDvbSchema.js +28 -0
  102. package/{esm/types/CamStreamerAPI.d.ts → cjs/types/CamStreamerAPI/oldStreamSchema.d.ts} +41 -43
  103. package/cjs/types/CamStreamerAPI/oldStreamSchema.js +50 -0
  104. package/cjs/types/CamStreamerAPI/rtmpSchema.d.ts +18 -0
  105. package/cjs/types/CamStreamerAPI/rtmpSchema.js +11 -0
  106. package/cjs/types/CamStreamerAPI/sdCardSchema.d.ts +18 -0
  107. package/cjs/types/CamStreamerAPI/sdCardSchema.js +11 -0
  108. package/cjs/types/CamStreamerAPI/streamCommonTypes.d.ts +17 -0
  109. package/cjs/types/CamStreamerAPI/streamCommonTypes.js +18 -0
  110. package/cjs/types/CamStreamerAPI/windySchema.d.ts +18 -0
  111. package/cjs/types/CamStreamerAPI/windySchema.js +11 -0
  112. package/cjs/types/CamStreamerAPI/youtubeSchema.d.ts +18 -0
  113. package/cjs/types/CamStreamerAPI/youtubeSchema.js +11 -0
  114. package/cjs/types/CamSwitcherAPI.d.ts +145 -66
  115. package/cjs/types/CamSwitcherAPI.js +38 -1
  116. package/cjs/{events → types}/GenetecAgent.d.ts +47 -47
  117. package/cjs/types/GenetecAgent.js +31 -0
  118. package/cjs/types/PlaneTrackerAPI.d.ts +980 -0
  119. package/cjs/types/PlaneTrackerAPI.js +333 -0
  120. package/cjs/types/VapixAPI.d.ts +254 -164
  121. package/cjs/types/VapixAPI.js +66 -11
  122. package/cjs/types/VapixEvents.d.ts +15 -0
  123. package/cjs/types/VapixEvents.js +2 -0
  124. package/cjs/types/common.d.ts +18 -5
  125. package/cjs/types/common.js +5 -2
  126. package/cjs/types/ws/CamOverlayEvents.d.ts +88 -0
  127. package/cjs/types/ws/CamOverlayEvents.js +19 -0
  128. package/cjs/types/ws/CamStreamerEvents.d.ts +249 -0
  129. package/cjs/types/ws/CamStreamerEvents.js +32 -0
  130. package/cjs/types/ws/PlaneTrackerEvents.d.ts +1637 -0
  131. package/cjs/types/ws/PlaneTrackerEvents.js +196 -0
  132. package/cjs/web/DefaultClient.d.ts +7 -5
  133. package/cjs/web/DefaultClient.js +26 -10
  134. package/cjs/web/WsClient.d.ts +9 -5
  135. package/cjs/web/WsClient.js +16 -18
  136. package/cjs/ws/CamOverlayEvents.d.ts +8 -0
  137. package/cjs/ws/CamOverlayEvents.js +24 -0
  138. package/cjs/ws/CamStreamerEvents.d.ts +8 -0
  139. package/cjs/ws/CamStreamerEvents.js +24 -0
  140. package/cjs/ws/CamSwitcherEvents.d.ts +8 -0
  141. package/cjs/ws/CamSwitcherEvents.js +24 -0
  142. package/cjs/ws/PlaneTrackerEvents.d.ts +9 -0
  143. package/cjs/ws/PlaneTrackerEvents.js +30 -0
  144. package/esm/CamOverlayAPI.js +135 -92
  145. package/esm/CamScripterAPI.js +50 -40
  146. package/esm/CamStreamerAPI.js +98 -43
  147. package/esm/CamSwitcherAPI.js +136 -120
  148. package/esm/PlaneTrackerAPI.js +243 -0
  149. package/esm/VapixAPI.js +314 -232
  150. package/esm/{CreatePackage.js → bin/CreatePackage.js} +16 -16
  151. package/esm/errors/errors.js +120 -6
  152. package/esm/index.js +20 -4
  153. package/esm/internal/ProxyClient.js +28 -32
  154. package/esm/{CamSwitcherEvents.js → internal/WsEvents.js} +26 -20
  155. package/esm/internal/types.js +1 -0
  156. package/esm/internal/utils.js +11 -1
  157. package/esm/{CamOverlayDrawingAPI.js → node/CamOverlayDrawingAPI.js} +26 -18
  158. package/esm/{CamOverlayPainter → node/CamOverlayPainter}/Frame.js +33 -0
  159. package/esm/{CamOverlayPainter → node/CamOverlayPainter}/Painter.js +2 -13
  160. package/esm/{CamOverlayPainter → node/CamOverlayPainter}/ResourceManager.js +7 -5
  161. package/esm/{CamScripterAPICameraEventsGenerator.js → node/CamScripterAPICameraEventsGenerator.js} +11 -11
  162. package/esm/node/DefaultClient.js +10 -12
  163. package/esm/node/Digest.test.js +11 -0
  164. package/esm/node/HttpRequestSender.js +14 -4
  165. package/esm/node/HttpServer.js +1 -1
  166. package/esm/node/TimeZoneDaemon.js +25 -0
  167. package/esm/{VapixEvents.js → node/VapixEvents.js} +10 -10
  168. package/esm/node/WsClient.js +22 -15
  169. package/esm/{events → node/events}/AxisCameraStationEvents.js +18 -13
  170. package/esm/node/events/GenetecAgent.js +120 -0
  171. package/esm/node/index.js +18 -2
  172. package/esm/types/CamOverlayAPI/CamOverlayAPI.js +76 -0
  173. package/esm/types/CamOverlayAPI/accuweatherSchema.js +44 -0
  174. package/esm/types/CamOverlayAPI/customGraphicsSchema.js +69 -0
  175. package/esm/types/CamOverlayAPI/imagesSchema.js +6 -0
  176. package/esm/types/CamOverlayAPI/index.js +11 -0
  177. package/esm/types/CamOverlayAPI/infotickerSchema.js +23 -0
  178. package/esm/types/CamOverlayAPI/pipSchema.js +36 -0
  179. package/esm/types/CamOverlayAPI/ptzCompassSchema.js +23 -0
  180. package/esm/types/CamOverlayAPI/ptzSchema.js +9 -0
  181. package/esm/types/CamOverlayAPI/scoreBoardSchema.js +129 -0
  182. package/esm/types/CamOverlayAPI/screenSharingSchema.js +5 -0
  183. package/esm/types/CamOverlayAPI/serviceCommonTypes.js +88 -0
  184. package/esm/types/CamOverlayAPI/webCameraSharingSchema.js +5 -0
  185. package/esm/types/CamOverlayDrawingAPI.js +1 -0
  186. package/esm/types/CamOverlayPainter.js +11 -0
  187. package/esm/types/CamScripterAPI.js +23 -7
  188. package/esm/types/CamScripterAPICameraEventsGenerator.js +1 -0
  189. package/esm/types/CamStreamerAPI/CamStreamerAPI.js +38 -0
  190. package/esm/types/CamStreamerAPI/facebookSchema.js +5 -0
  191. package/esm/types/CamStreamerAPI/hlsSchema.js +5 -0
  192. package/esm/types/CamStreamerAPI/index.js +9 -0
  193. package/esm/types/CamStreamerAPI/mpegDvbSchema.js +22 -0
  194. package/esm/types/CamStreamerAPI/oldStreamSchema.js +47 -0
  195. package/esm/types/CamStreamerAPI/rtmpSchema.js +5 -0
  196. package/esm/types/CamStreamerAPI/sdCardSchema.js +5 -0
  197. package/esm/types/CamStreamerAPI/streamCommonTypes.js +15 -0
  198. package/esm/types/CamStreamerAPI/windySchema.js +5 -0
  199. package/esm/types/CamStreamerAPI/youtubeSchema.js +5 -0
  200. package/esm/types/CamSwitcherAPI.js +38 -1
  201. package/esm/types/GenetecAgent.js +28 -0
  202. package/esm/types/PlaneTrackerAPI.js +330 -0
  203. package/esm/types/VapixAPI.js +65 -10
  204. package/esm/types/VapixEvents.js +1 -0
  205. package/esm/types/common.js +4 -1
  206. package/esm/types/ws/CamOverlayEvents.js +16 -0
  207. package/esm/types/ws/CamStreamerEvents.js +29 -0
  208. package/esm/types/ws/PlaneTrackerEvents.js +193 -0
  209. package/esm/web/DefaultClient.js +26 -10
  210. package/esm/web/WsClient.js +16 -18
  211. package/esm/ws/CamOverlayEvents.js +20 -0
  212. package/esm/ws/CamStreamerEvents.js +20 -0
  213. package/esm/ws/CamSwitcherEvents.js +20 -0
  214. package/esm/ws/PlaneTrackerEvents.js +26 -0
  215. package/package.json +44 -11
  216. package/types/CamOverlayAPI.d.ts +867 -0
  217. package/types/CamScripterAPI.d.ts +46 -0
  218. package/types/CamStreamerAPI.d.ts +72 -0
  219. package/types/CamSwitcherAPI.d.ts +167 -0
  220. package/types/PlaneTrackerAPI.d.ts +239 -0
  221. package/types/VapixAPI.d.ts +118 -0
  222. package/types/bin/CreatePackage.d.ts +1 -0
  223. package/types/errors/errors.d.ts +98 -0
  224. package/types/index.d.ts +27 -0
  225. package/types/internal/ProxyClient.d.ts +10 -0
  226. package/types/internal/WsEvents.d.ts +37 -0
  227. package/types/internal/types.d.ts +47 -0
  228. package/{esm → types}/internal/utils.d.ts +3 -1
  229. package/{esm → types}/internal/versionCompare.d.ts +2 -2
  230. package/types/node/CamOverlayDrawingAPI.d.ts +41 -0
  231. package/{esm → types/node}/CamOverlayPainter/Frame.d.ts +8 -37
  232. package/{esm → types/node}/CamOverlayPainter/Painter.d.ts +5 -21
  233. package/types/node/CamOverlayPainter/ResourceManager.d.ts +15 -0
  234. package/types/node/CamScripterAPICameraEventsGenerator.d.ts +31 -0
  235. package/types/node/DefaultClient.d.ts +16 -0
  236. package/types/node/Digest.test.d.ts +1 -0
  237. package/{esm → types}/node/HttpRequestSender.d.ts +1 -0
  238. package/{esm → types}/node/HttpServer.d.ts +1 -1
  239. package/types/node/TimeZoneDaemon.d.ts +6 -0
  240. package/types/node/VapixEvents.d.ts +16 -0
  241. package/types/node/WsClient.d.ts +30 -0
  242. package/types/node/events/AxisCameraStationEvents.d.ts +12 -0
  243. package/types/node/events/GenetecAgent.d.ts +16 -0
  244. package/types/node/index.d.ts +18 -0
  245. package/types/types/CamOverlayAPI/CamOverlayAPI.d.ts +4330 -0
  246. package/types/types/CamOverlayAPI/accuweatherSchema.d.ts +84 -0
  247. package/types/types/CamOverlayAPI/customGraphicsSchema.d.ts +700 -0
  248. package/types/types/CamOverlayAPI/imagesSchema.d.ts +95 -0
  249. package/types/types/CamOverlayAPI/index.d.ts +11 -0
  250. package/types/types/CamOverlayAPI/infotickerSchema.d.ts +96 -0
  251. package/types/types/CamOverlayAPI/pipSchema.d.ts +125 -0
  252. package/types/types/CamOverlayAPI/ptzCompassSchema.d.ts +96 -0
  253. package/types/types/CamOverlayAPI/ptzSchema.d.ts +118 -0
  254. package/types/types/CamOverlayAPI/scoreBoardSchema.d.ts +357 -0
  255. package/types/types/CamOverlayAPI/screenSharingSchema.d.ts +58 -0
  256. package/types/types/CamOverlayAPI/serviceCommonTypes.d.ts +145 -0
  257. package/types/types/CamOverlayAPI/webCameraSharingSchema.d.ts +58 -0
  258. package/types/types/CamOverlayDrawingAPI.d.ts +48 -0
  259. package/types/types/CamOverlayPainter.d.ts +76 -0
  260. package/types/types/CamScripterAPI.d.ts +130 -0
  261. package/types/types/CamScripterAPICameraEventsGenerator.d.ts +45 -0
  262. package/types/types/CamStreamerAPI/CamStreamerAPI.d.ts +239 -0
  263. package/types/types/CamStreamerAPI/facebookSchema.d.ts +18 -0
  264. package/types/types/CamStreamerAPI/hlsSchema.d.ts +18 -0
  265. package/types/types/CamStreamerAPI/index.d.ts +9 -0
  266. package/types/types/CamStreamerAPI/mpegDvbSchema.d.ts +69 -0
  267. package/{cjs/types/CamStreamerAPI.d.ts → types/types/CamStreamerAPI/oldStreamSchema.d.ts} +41 -43
  268. package/types/types/CamStreamerAPI/rtmpSchema.d.ts +18 -0
  269. package/types/types/CamStreamerAPI/sdCardSchema.d.ts +18 -0
  270. package/types/types/CamStreamerAPI/streamCommonTypes.d.ts +17 -0
  271. package/types/types/CamStreamerAPI/windySchema.d.ts +18 -0
  272. package/types/types/CamStreamerAPI/youtubeSchema.d.ts +18 -0
  273. package/{esm → types}/types/CamSwitcherAPI.d.ts +145 -66
  274. package/{esm/events → types/types}/GenetecAgent.d.ts +47 -47
  275. package/types/types/PlaneTrackerAPI.d.ts +980 -0
  276. package/{esm → types}/types/VapixAPI.d.ts +254 -164
  277. package/types/types/VapixEvents.d.ts +15 -0
  278. package/{esm → types}/types/common.d.ts +18 -5
  279. package/types/types/ws/CamOverlayEvents.d.ts +88 -0
  280. package/types/types/ws/CamStreamerEvents.d.ts +249 -0
  281. package/types/types/ws/PlaneTrackerEvents.d.ts +1637 -0
  282. package/types/web/DefaultClient.d.ts +8 -0
  283. package/types/web/WsClient.d.ts +17 -0
  284. package/types/ws/CamOverlayEvents.d.ts +8 -0
  285. package/types/ws/CamStreamerEvents.d.ts +8 -0
  286. package/types/ws/CamSwitcherEvents.d.ts +8 -0
  287. package/types/ws/PlaneTrackerEvents.d.ts +9 -0
  288. package/cjs/CamOverlayDrawingAPI.d.ts +0 -86
  289. package/cjs/CamOverlayPainter/ResourceManager.d.ts +0 -14
  290. package/cjs/CamOverlayPainter/ResourceManager.js +0 -46
  291. package/cjs/CamScripterAPICameraEventsGenerator.d.ts +0 -74
  292. package/cjs/CamSwitcherEvents.d.ts +0 -18
  293. package/cjs/VapixEvents.d.ts +0 -43
  294. package/cjs/events/AxisCameraStationEvents.d.ts +0 -9
  295. package/cjs/events/AxisCameraStationEvents.js +0 -48
  296. package/cjs/events/GenetecAgent.js +0 -123
  297. package/cjs/internal/common.d.ts +0 -39
  298. package/cjs/internal/common.js +0 -27
  299. package/cjs/node/WsEventClient.d.ts +0 -13
  300. package/cjs/node/WsEventClient.js +0 -22
  301. package/cjs/types/CamOverlayAPI.d.ts +0 -188
  302. package/cjs/types/CamOverlayAPI.js +0 -47
  303. package/cjs/types/CamStreamerAPI.js +0 -28
  304. package/esm/CamOverlayAPI.d.ts +0 -31
  305. package/esm/CamOverlayDrawingAPI.d.ts +0 -86
  306. package/esm/CamOverlayPainter/ResourceManager.d.ts +0 -14
  307. package/esm/CamScripterAPI.d.ts +0 -19
  308. package/esm/CamScripterAPICameraEventsGenerator.d.ts +0 -74
  309. package/esm/CamStreamerAPI.d.ts +0 -16
  310. package/esm/CamSwitcherAPI.d.ts +0 -52
  311. package/esm/CamSwitcherEvents.d.ts +0 -18
  312. package/esm/VapixAPI.d.ts +0 -66
  313. package/esm/VapixEvents.d.ts +0 -43
  314. package/esm/errors/errors.d.ts +0 -37
  315. package/esm/events/AxisCameraStationEvents.d.ts +0 -9
  316. package/esm/events/GenetecAgent.js +0 -119
  317. package/esm/index.d.ts +0 -11
  318. package/esm/internal/ProxyClient.d.ts +0 -11
  319. package/esm/internal/common.d.ts +0 -39
  320. package/esm/internal/common.js +0 -20
  321. package/esm/node/DefaultClient.d.ts +0 -15
  322. package/esm/node/WsClient.d.ts +0 -39
  323. package/esm/node/WsEventClient.d.ts +0 -13
  324. package/esm/node/WsEventClient.js +0 -18
  325. package/esm/types/CamOverlayAPI.d.ts +0 -188
  326. package/esm/types/CamOverlayAPI.js +0 -44
  327. package/esm/types/CamScripterAPI.d.ts +0 -67
  328. package/esm/types/CamStreamerAPI.js +0 -25
  329. package/esm/web/DefaultClient.d.ts +0 -6
  330. package/esm/web/WsClient.d.ts +0 -13
  331. package/esm/web/index.d.ts +0 -2
  332. /package/cjs/{CreatePackage.d.ts → bin/CreatePackage.d.ts} +0 -0
  333. /package/cjs/{internal → node}/Digest.d.ts +0 -0
  334. /package/{esm/CreatePackage.d.ts → cjs/node/Digest.test.d.ts} +0 -0
  335. /package/cjs/types/{CamSwitcherEvents.d.ts → ws/CamSwitcherEvents.d.ts} +0 -0
  336. /package/cjs/types/{CamSwitcherEvents.js → ws/CamSwitcherEvents.js} +0 -0
  337. /package/esm/{internal → node}/Digest.js +0 -0
  338. /package/esm/types/{CamSwitcherEvents.js → ws/CamSwitcherEvents.js} +0 -0
  339. /package/{esm → types}/internal/constants.d.ts +0 -0
  340. /package/{esm → types}/internal/transformers.d.ts +0 -0
  341. /package/{esm/internal → types/node}/Digest.d.ts +0 -0
  342. /package/{esm/types → types/types/ws}/CamSwitcherEvents.d.ts +0 -0
  343. /package/{esm/node → types/web}/index.d.ts +0 -0
package/esm/VapixAPI.js CHANGED
@@ -1,55 +1,69 @@
1
- import * as prettifyXml from 'prettify-xml';
2
- import { parseStringPromise } from 'xml2js';
3
- import { isNullish, responseStringify } from './internal/common';
4
- import { sdCardWatchedStatuses, APP_IDS, maxFpsResponseSchema, dateTimeinfoSchema, audioDeviceRequestSchema, audioSampleRatesResponseSchema, } from './types/VapixAPI';
5
- import { ApplicationAPIError, MaxFPSError, NoDeviceInfoError, PtzNotSupportedError, SDCardActionError, SDCardJobError, } from './errors/errors';
1
+ import { arrayToUrl, isNullish, paramToUrl } from './internal/utils';
2
+ import { sdCardWatchedStatuses, APP_IDS, maxFpsResponseSchema, dateTimeinfoSchema, audioDeviceRequestSchema, audioSampleRatesResponseSchema, timeZoneSchema, getPortsResponseSchema, guardTourSchema, ptzOverviewSchema, cameraPTZItemDataSchema, applicationListSchema, sdCardInfoSchema, } from './types/VapixAPI';
3
+ import { ApplicationAPIError, MaxFPSError, NoDeviceInfoError, PtzNotSupportedError, ErrorWithResponse, SDCardActionError, SDCardJobError, SettingParameterError, TimezoneFetchError, TimezoneNotSetupError, } from './errors/errors';
6
4
  import { ProxyClient } from './internal/ProxyClient';
7
- import { arrayToUrl, paramToUrl } from './internal/utils';
8
5
  import { z } from 'zod';
6
+ import { XMLParser } from 'fast-xml-parser';
9
7
  export class VapixAPI {
10
8
  client;
11
- constructor(client, getProxyUrl) {
12
- this.client = new ProxyClient(client, getProxyUrl);
9
+ CustomFormData;
10
+ constructor(client, CustomFormData = FormData) {
11
+ this.client = client;
12
+ this.CustomFormData = CustomFormData;
13
13
  }
14
- async getUrlEncoded(proxy, path, parameters, headers = {}) {
14
+ getClient(proxyParams) {
15
+ return proxyParams ? new ProxyClient(this.client, proxyParams) : this.client;
16
+ }
17
+ async postUrlEncoded(path, parameters, headers, options) {
15
18
  const data = paramToUrl(parameters);
16
19
  const head = { ...headers, 'Content-Type': 'application/x-www-form-urlencoded' };
17
- const res = await this.client.post(proxy, path, data, {}, head);
20
+ const agent = this.getClient(options?.proxyParams);
21
+ const res = await agent.post({ path, data, headers: head, timeout: options?.timeout });
18
22
  if (!res.ok) {
19
- throw new Error(await responseStringify(res));
23
+ throw new ErrorWithResponse(res);
20
24
  }
21
25
  return res;
22
26
  }
23
- async postJson(proxy, path, jsonData, headers = {}) {
27
+ async postJson(path, jsonData, headers, options) {
24
28
  const data = JSON.stringify(jsonData);
25
29
  const head = { ...headers, 'Content-Type': 'application/json' };
26
- const res = await this.client.post(proxy, path, data, {}, head);
30
+ const agent = this.getClient(options?.proxyParams);
31
+ const res = await agent.post({ path, data, headers: head, timeout: options?.timeout });
27
32
  if (!res.ok) {
28
- throw new Error(await responseStringify(res));
33
+ throw new ErrorWithResponse(res);
29
34
  }
30
35
  return res;
31
36
  }
32
- async getCameraImage(params, proxy = null) {
33
- return await this.client.get(proxy, '/axis-cgi/jpg/image.cgi', params);
37
+ async getCameraImage(parameters, options) {
38
+ const agent = this.getClient(options?.proxyParams);
39
+ return (await agent.get({
40
+ path: '/axis-cgi/jpg/image.cgi',
41
+ parameters,
42
+ timeout: options?.timeout,
43
+ }));
34
44
  }
35
- async getEventDeclarations(proxy = null) {
45
+ async getEventDeclarations(options) {
36
46
  const data = '<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope">' +
37
47
  '<s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"' +
38
48
  'xmlns:xsd="http://www.w3.org/2001/XMLSchema">' +
39
49
  '<GetEventInstances xmlns="http://www.axis.com/vapix/ws/event1"/>' +
40
50
  '</s:Body>' +
41
51
  '</s:Envelope>';
42
- const res = await this.client.post(proxy, '/vapix/services', data, { 'Content-Type': 'application/soap+xml' });
52
+ const agent = this.getClient(options?.proxyParams);
53
+ const res = await agent.post({
54
+ path: '/vapix/services',
55
+ data,
56
+ headers: { 'Content-Type': 'application/soap+xml' },
57
+ });
43
58
  if (!res.ok) {
44
- throw new Error(await responseStringify(res));
59
+ throw new ErrorWithResponse(res);
45
60
  }
46
- const declarations = await res.text();
47
- return prettifyXml(declarations);
61
+ return await res.text();
48
62
  }
49
- async getSupportedAudioSampleRate(proxy = null) {
50
- const url = '/axis-cgi/audio/streamingcapabilities.cgi';
63
+ async getSupportedAudioSampleRate(options) {
64
+ const path = '/axis-cgi/audio/streamingcapabilities.cgi';
51
65
  const jsonData = { apiVersion: '1.0', method: 'list' };
52
- const res = await this.postJson(proxy, url, jsonData);
66
+ const res = await this.postJson(path, jsonData, undefined, options);
53
67
  const encoders = audioSampleRatesResponseSchema.parse(await res.json()).data.encoders;
54
68
  const data = encoders.aac ?? encoders.AAC ?? [];
55
69
  return data.map((item) => {
@@ -59,7 +73,7 @@ export class VapixAPI {
59
73
  };
60
74
  });
61
75
  }
62
- async performAutofocus(proxy = null) {
76
+ async performAutofocus(options) {
63
77
  try {
64
78
  const data = {
65
79
  apiVersion: '1',
@@ -72,78 +86,83 @@ export class VapixAPI {
72
86
  ],
73
87
  },
74
88
  };
75
- await this.postJson(proxy, '/axis-cgi/opticscontrol.cgi', data);
89
+ await this.postJson('/axis-cgi/opticscontrol.cgi', data, undefined, options);
76
90
  }
77
91
  catch (err) {
78
- await this.getUrlEncoded(proxy, '/axis-cgi/opticssetup.cgi', {
92
+ await this.postUrlEncoded('/axis-cgi/opticssetup.cgi', {
79
93
  autofocus: 'perform',
80
94
  source: '1',
81
- });
95
+ }, undefined, options);
82
96
  }
83
97
  }
84
- async checkSDCard(proxy = null) {
85
- const res = await this.getUrlEncoded(proxy, '/axis-cgi/disks/list.cgi', {
98
+ async checkSDCard(options) {
99
+ const res = await this.postUrlEncoded('/axis-cgi/disks/list.cgi', {
86
100
  diskid: 'SD_DISK',
101
+ }, undefined, options);
102
+ const xmlText = await res.text();
103
+ const parser = new XMLParser({
104
+ ignoreAttributes: false,
105
+ attributeNamePrefix: '',
106
+ allowBooleanAttributes: true,
87
107
  });
88
- const result = await parseStringPromise(await res.text(), {
89
- ignoreAttrs: false,
90
- mergeAttrs: true,
91
- explicitArray: false,
92
- });
108
+ const result = parser.parse(xmlText);
93
109
  const data = result.root.disks.disk;
94
- return {
110
+ return sdCardInfoSchema.parse({
95
111
  totalSize: parseInt(data.totalsize),
96
112
  freeSize: parseInt(data.freesize),
97
113
  status: sdCardWatchedStatuses.includes(data.status) ? data.status : 'disconnected',
98
- };
114
+ });
99
115
  }
100
- mountSDCard(proxy = null) {
101
- return this._doSDCardMountAction('MOUNT', proxy);
116
+ mountSDCard(options) {
117
+ return this._doSDCardMountAction('MOUNT', options);
102
118
  }
103
- unmountSDCard(proxy = null) {
104
- return this._doSDCardMountAction('UNMOUNT', proxy);
119
+ unmountSDCard(options) {
120
+ return this._doSDCardMountAction('UNMOUNT', options);
105
121
  }
106
- async _doSDCardMountAction(action, proxy = null) {
107
- const res = await this.getUrlEncoded(proxy, '/axis-cgi/disks/mount.cgi', {
122
+ async _doSDCardMountAction(action, options) {
123
+ const res = await this.postUrlEncoded('/axis-cgi/disks/mount.cgi', {
108
124
  action: action,
109
125
  diskid: 'SD_DISK',
126
+ }, undefined, options);
127
+ const textXml = await res.text();
128
+ const parser = new XMLParser({
129
+ ignoreAttributes: false,
130
+ attributeNamePrefix: '',
131
+ allowBooleanAttributes: true,
110
132
  });
111
- const result = await parseStringPromise(await res.text(), {
112
- ignoreAttrs: false,
113
- mergeAttrs: true,
114
- explicitArray: false,
115
- });
133
+ const result = parser.parse(textXml);
116
134
  const job = result.root.job;
117
135
  if (job.result !== 'OK') {
118
- throw new SDCardActionError(action, await responseStringify(res));
136
+ throw new SDCardActionError(action, job.description);
119
137
  }
120
138
  return Number(job.jobid);
121
139
  }
122
- async fetchSDCardJobProgress(jobId, proxy = null) {
123
- const res = await this.getUrlEncoded(proxy, '/disks/job.cgi', {
140
+ async fetchSDCardJobProgress(jobId, options) {
141
+ const res = await this.postUrlEncoded('/disks/job.cgi', {
124
142
  jobid: String(jobId),
125
143
  diskid: 'SD_DISK',
144
+ }, undefined, options);
145
+ const textXml = await res.text();
146
+ const parser = new XMLParser({
147
+ ignoreAttributes: false,
148
+ attributeNamePrefix: '',
149
+ allowBooleanAttributes: true,
126
150
  });
127
- const result = await parseStringPromise(await res.text(), {
128
- ignoreAttrs: false,
129
- mergeAttrs: true,
130
- explicitArray: false,
131
- });
132
- const job = result.root.job;
151
+ const job = parser.parse(textXml).root.job;
133
152
  if (job.result !== 'OK') {
134
- throw new SDCardJobError();
153
+ throw new SDCardJobError(job.description);
135
154
  }
136
155
  return Number(job.progress);
137
156
  }
138
- downloadCameraReport(proxy = null) {
139
- return this.getUrlEncoded(proxy, '/axis-cgi/serverreport.cgi', { mode: 'text' });
157
+ downloadCameraReport(options) {
158
+ return this.postUrlEncoded('/axis-cgi/serverreport.cgi', { mode: 'text' }, undefined, options);
140
159
  }
141
- getSystemLog(proxy = null) {
142
- return this.getUrlEncoded(proxy, '/axis-cgi/admin/systemlog.cgi');
160
+ getSystemLog(options) {
161
+ return this.postUrlEncoded('/axis-cgi/admin/systemlog.cgi', undefined, undefined, options);
143
162
  }
144
- async getMaxFps(channel, proxy = null) {
163
+ async getMaxFps(channel, options) {
145
164
  const data = { apiVersion: '1.0', method: 'getCaptureModes' };
146
- const res = await this.postJson(proxy, '/axis-cgi/capturemode.cgi', data);
165
+ const res = await this.postJson('/axis-cgi/capturemode.cgi', data, undefined, options);
147
166
  const response = maxFpsResponseSchema.parse(await res.json());
148
167
  const channels = response.data;
149
168
  if (channels === undefined) {
@@ -161,21 +180,40 @@ export class VapixAPI {
161
180
  if (isNullish(captureMode.maxFPS)) {
162
181
  throw new MaxFPSError('FPS_NOT_SPECIFIED');
163
182
  }
164
- return captureMode.maxFPS;
183
+ return z.number().parse(captureMode.maxFPS);
165
184
  }
166
- async getTimezone(proxy = null) {
167
- const data = { apiVersion: '1.0', method: 'getDateTimeInfo' };
168
- const res = await this.postJson(proxy, '/axis-cgi/time.cgi', data);
169
- return (await res.json())?.timeZone ?? 'Europe/Prague';
185
+ async getTimezone(options) {
186
+ try {
187
+ const agent = this.getClient(options?.proxyParams);
188
+ const resV2 = await agent.get({ path: '/config/rest/time/v2/timeZone', timeout: options?.timeout });
189
+ if (!resV2.ok) {
190
+ throw new ErrorWithResponse(resV2);
191
+ }
192
+ const json = await resV2.json();
193
+ const data = timeZoneSchema.parse(json);
194
+ if (data.status === 'error') {
195
+ throw new TimezoneFetchError(data.error.message);
196
+ }
197
+ return data.data.activeTimeZone;
198
+ }
199
+ catch (error) {
200
+ console.warn('Failed to fetch time zone data from time API v2:', error instanceof Error ? error.message : JSON.stringify(error));
201
+ console.warn('Falling back to deprecated time API v1');
202
+ }
203
+ const data = await this.getDateTimeInfo(options);
204
+ if (data.data.timeZone === undefined) {
205
+ throw new TimezoneNotSetupError();
206
+ }
207
+ return z.string().parse(data.data.timeZone);
170
208
  }
171
- async getDateTimeInfo(proxy = null) {
209
+ async getDateTimeInfo(options) {
172
210
  const data = { apiVersion: '1.0', method: 'getDateTimeInfo' };
173
- const res = await this.postJson(proxy, '/axis-cgi/time.cgi', data);
211
+ const res = await this.postJson('/axis-cgi/time.cgi', data, undefined, options);
174
212
  return dateTimeinfoSchema.parse(await res.json());
175
213
  }
176
- async getDevicesSettings(proxy = null) {
214
+ async getDevicesSettings(options) {
177
215
  const data = { apiVersion: '1.0', method: 'getDevicesSettings' };
178
- const res = await this.postJson(proxy, '/axis-cgi/audiodevicecontrol.cgi', data);
216
+ const res = await this.postJson('/axis-cgi/audiodevicecontrol.cgi', data, undefined, options);
179
217
  const result = audioDeviceRequestSchema.parse(await res.json());
180
218
  return result.data.devices.map((device) => ({
181
219
  ...device,
@@ -183,50 +221,45 @@ export class VapixAPI {
183
221
  outputs: (device.outputs || []).sort((a, b) => a.id.localeCompare(b.id)),
184
222
  }));
185
223
  }
186
- async fetchRemoteDeviceInfo(payload, proxy = null) {
187
- const res = await this.postJson(proxy, '/axis-cgi/basicdeviceinfo.cgi', payload);
188
- const result = await parseStringPromise(await res.text(), {
189
- ignoreAttrs: false,
190
- mergeAttrs: true,
191
- explicitArray: false,
192
- });
193
- if (isNullish(result.body.data)) {
224
+ async fetchRemoteDeviceInfo(payload, options) {
225
+ const res = await this.postJson('/axis-cgi/basicdeviceinfo.cgi', payload, undefined, options);
226
+ const json = await res.json();
227
+ if (isNullish(json.data)) {
194
228
  throw new NoDeviceInfoError();
195
229
  }
196
- return result.data;
230
+ return json.data;
197
231
  }
198
- async getHeaders(proxy = null) {
232
+ async getHeaders(options) {
199
233
  const data = { apiVersion: '1.0', method: 'list' };
200
- const res = await this.postJson(proxy, '/axis-cgi/customhttpheader.cgi', data);
234
+ const res = await this.postJson('/axis-cgi/customhttpheader.cgi', data, undefined, options);
201
235
  return z.object({ data: z.record(z.string()) }).parse(await res.json()).data;
202
236
  }
203
- async setHeaders(headers, proxy = null) {
237
+ async setHeaders(headers, options) {
204
238
  const data = { apiVersion: '1.0', method: 'set', params: headers };
205
- return this.postJson(proxy, '/axis-cgi/customhttpheader.cgi', data);
239
+ return this.postJson('/axis-cgi/customhttpheader.cgi', data, undefined, options);
206
240
  }
207
- async getParameter(paramNames, proxy = null) {
208
- const response = await this.getUrlEncoded(proxy, '/axis-cgi/param.cgi', {
241
+ async getParameter(paramNames, options) {
242
+ const response = await this.postUrlEncoded('/axis-cgi/param.cgi', {
209
243
  action: 'list',
210
244
  group: arrayToUrl(paramNames),
211
- });
212
- return parseParameters(await response.text());
245
+ }, undefined, options);
246
+ return VapixAPI.parseParameters(await response.text());
213
247
  }
214
- async setParameter(params, proxy = null) {
215
- const res = await this.getUrlEncoded(proxy, '/axis-cgi/param.cgi', {
248
+ async setParameter(params, options) {
249
+ const res = await this.postUrlEncoded('/axis-cgi/param.cgi', {
216
250
  ...params,
217
251
  action: 'update',
218
- });
252
+ }, undefined, options);
219
253
  const responseText = await res.text();
220
254
  if (responseText.startsWith('# Error')) {
221
- throw new Error(responseText);
255
+ throw new SettingParameterError(responseText);
222
256
  }
223
- return true;
224
257
  }
225
- async getGuardTourList(proxy = null) {
258
+ async getGuardTourList(options) {
226
259
  const gTourList = new Array();
227
- const response = await this.getParameter('GuardTour', proxy);
260
+ const response = await this.getParameter('GuardTour', options);
228
261
  for (let i = 0; i < 20; i++) {
229
- const gTourBaseName = 'root.GuardTour.G' + i;
262
+ const gTourBaseName = 'GuardTour.G' + i;
230
263
  if (gTourBaseName + '.CamNbr' in response) {
231
264
  const gTour = {
232
265
  id: gTourBaseName,
@@ -238,7 +271,7 @@ export class VapixAPI {
238
271
  tour: [],
239
272
  };
240
273
  for (let j = 0; j < 100; j++) {
241
- const tourBaseName = 'root.GuardTour.G' + i + '.Tour.T' + j;
274
+ const tourBaseName = 'GuardTour.G' + i + '.Tour.T' + j;
242
275
  if (tourBaseName + '.MoveSpeed' in response) {
243
276
  const tour = {
244
277
  moveSpeed: response[tourBaseName + '.MoveSpeed'],
@@ -256,18 +289,18 @@ export class VapixAPI {
256
289
  break;
257
290
  }
258
291
  }
259
- return gTourList;
292
+ return guardTourSchema.parse(gTourList);
260
293
  }
261
- setGuardTourEnabled(guardTourID, enable, proxy = null) {
262
- const options = {};
263
- options[guardTourID + '.Running'] = enable ? 'yes' : 'no';
264
- return this.setParameter(options, proxy);
294
+ setGuardTourEnabled(guardTourId, enable, options) {
295
+ const params = {};
296
+ params[guardTourId + '.Running'] = enable ? 'yes' : 'no';
297
+ return this.setParameter(params, options);
265
298
  }
266
- async getPTZPresetList(channel, proxy = null) {
267
- const res = await this.getUrlEncoded(proxy, '/axis-cgi/com/ptz.cgi', {
299
+ async getPTZPresetList(channel, options) {
300
+ const res = await this.postUrlEncoded('/axis-cgi/com/ptz.cgi', {
268
301
  query: 'presetposcam',
269
- camera: channel.toString(),
270
- });
302
+ camera: channel,
303
+ }, undefined, options);
271
304
  const text = await res.text();
272
305
  const lines = text.split(/[\r\n]/);
273
306
  const positions = [];
@@ -280,187 +313,236 @@ export class VapixAPI {
280
313
  }
281
314
  }
282
315
  }
283
- return positions;
316
+ return z.array(z.string()).parse(positions);
284
317
  }
285
- async listPTZ(camera, proxy = null) {
318
+ async listPTZ(camera, options) {
286
319
  const url = `/axis-cgi/com/ptz.cgi`;
287
- const response = await this.getUrlEncoded(proxy, url, {
320
+ const response = await this.postUrlEncoded(url, {
288
321
  camera,
289
322
  query: 'presetposcamdata',
290
323
  format: 'json',
291
- });
324
+ }, undefined, options);
292
325
  const text = await response.text();
293
326
  if (text === '') {
294
327
  throw new PtzNotSupportedError();
295
328
  }
296
- return parseCameraPtzResponse(text)[camera] ?? [];
329
+ return VapixAPI.parseCameraPtzResponse(text)[camera] ?? [];
297
330
  }
298
- async listPtzVideoSourceOverview(proxy = null) {
299
- const response = await this.getUrlEncoded(proxy, '/axis-cgi/com/ptz.cgi', {
331
+ async listPtzVideoSourceOverview(options) {
332
+ const response = await this.postUrlEncoded('/axis-cgi/com/ptz.cgi', {
300
333
  query: 'presetposall',
301
334
  format: 'json',
302
- });
335
+ }, undefined, options);
303
336
  const text = await response.text();
304
337
  if (text === '') {
305
338
  throw new PtzNotSupportedError();
306
339
  }
307
- const data = parseCameraPtzResponse(text);
340
+ const data = VapixAPI.parseCameraPtzResponse(text);
308
341
  const res = {};
309
342
  Object.keys(data)
310
343
  .map(Number)
311
344
  .forEach((camera) => {
312
- if (data[camera] !== undefined) {
313
- res[camera - 1] = data[camera]?.map(({ data: itemData, ...d }) => d);
345
+ const item = data[camera];
346
+ if (item !== undefined) {
347
+ res[camera - 1] = item.map(({ data: itemData, ...d }) => d);
314
348
  }
315
349
  });
316
- return res;
350
+ return ptzOverviewSchema.parse(res);
317
351
  }
318
- goToPreset(channel, presetName, proxy = null) {
319
- return this.getUrlEncoded(proxy, '/axis-cgi/com/ptz.cgi', {
352
+ goToPreset(channel, presetName, options) {
353
+ return this.postUrlEncoded('/axis-cgi/com/ptz.cgi', {
320
354
  camera: channel.toString(),
321
355
  gotoserverpresetname: presetName,
322
- });
356
+ }, undefined, options);
323
357
  }
324
- async getPtzPosition(camera, proxy = null) {
325
- const res = await this.getUrlEncoded(proxy, '/axis-cgi/com/ptz.cgi', {
358
+ async getPtzPosition(camera, options) {
359
+ const res = await this.postUrlEncoded('/axis-cgi/com/ptz.cgi', {
326
360
  query: 'position',
327
361
  camera: camera.toString(),
328
- });
329
- const params = parseParameters(await res.text());
330
- return {
362
+ }, undefined, options);
363
+ const params = VapixAPI.parseParameters(await res.text());
364
+ return cameraPTZItemDataSchema.parse({
331
365
  pan: Number(params.pan),
332
366
  tilt: Number(params.tilt),
333
367
  zoom: Number(params.zoom),
334
- };
335
- }
336
- async getInputState(port, proxy = null) {
337
- const response = await (await this.getUrlEncoded(proxy, '/axis-cgi/io/port.cgi', { checkactive: port.toString() })).text();
338
- return response.split('=')[1]?.indexOf('active') === 0;
339
- }
340
- async setOutputState(port, active, proxy = null) {
341
- return this.getUrlEncoded(proxy, '/axis-cgi/io/port.cgi', { action: active ? `${port}:/` : `${port}:\\` });
368
+ });
342
369
  }
343
- async getApplicationList(proxy = null) {
344
- const res = await this.client.get(proxy, '/axis-cgi/applications/list.cgi');
370
+ async getPorts(options) {
371
+ const res = await this.postJson('/axis-cgi/io/portmanagement.cgi', {
372
+ apiVersion: '1.0',
373
+ context: '',
374
+ method: 'getPorts',
375
+ }, undefined, options);
376
+ const portResponseParsed = getPortsResponseSchema.parse(await res.json());
377
+ return portResponseParsed.data.items;
378
+ }
379
+ async setPorts(ports, options) {
380
+ await this.postJson('/axis-cgi/io/portmanagement.cgi', {
381
+ apiVersion: '1.0',
382
+ context: '',
383
+ method: 'setPorts',
384
+ params: { ports },
385
+ }, undefined, options);
386
+ }
387
+ async setPortStateSequence(port, sequence, options) {
388
+ await this.postJson('/axis-cgi/io/portmanagement.cgi', {
389
+ apiVersion: '1.0',
390
+ context: '',
391
+ method: 'setStateSequence',
392
+ params: { port, sequence },
393
+ }, undefined, options);
394
+ }
395
+ async getApplicationList(options) {
396
+ const agent = this.getClient(options?.proxyParams);
397
+ const res = await agent.get({ path: '/axis-cgi/applications/list.cgi', timeout: options?.timeout });
345
398
  const xml = await res.text();
346
- const result = (await parseStringPromise(xml));
347
- const apps = [];
348
- for (const app of result.reply.application) {
349
- apps.push({
350
- ...app.$,
351
- appId: APP_IDS.find((id) => id.toLowerCase() === app.$.Name.toLowerCase()) ?? null,
352
- });
399
+ const parser = new XMLParser({
400
+ ignoreAttributes: false,
401
+ attributeNamePrefix: '',
402
+ allowBooleanAttributes: true,
403
+ });
404
+ const result = parser.parse(xml);
405
+ let apps = result.reply.application ?? [];
406
+ if (!Array.isArray(apps)) {
407
+ apps = [apps];
353
408
  }
354
- return apps;
355
- }
356
- async startApplication(applicationID, proxy = null) {
357
- const res = await this.client.get(proxy, '/axis-cgi/applications/control.cgi', {
358
- package: applicationID.toLowerCase(),
359
- action: 'start',
409
+ const appList = apps.map((app) => {
410
+ return {
411
+ ...app,
412
+ appId: APP_IDS.find((id) => id.toLowerCase() === app.Name.toLowerCase()) ?? null,
413
+ };
414
+ });
415
+ return applicationListSchema.parse(appList);
416
+ }
417
+ async startApplication(applicationId, options) {
418
+ const agent = this.getClient(options?.proxyParams);
419
+ const res = await agent.get({
420
+ path: '/axis-cgi/applications/control.cgi',
421
+ parameters: {
422
+ package: applicationId.toLowerCase(),
423
+ action: 'start',
424
+ },
425
+ timeout: options?.timeout,
360
426
  });
361
427
  const text = (await res.text()).trim().toLowerCase();
362
428
  if (text !== 'ok' && !(text.startsWith('error:') && text.substring(7) === '6')) {
363
- throw new ApplicationAPIError('START', await responseStringify(res));
429
+ throw new ApplicationAPIError('START', text);
364
430
  }
365
431
  }
366
- async restartApplication(applicationID, proxy = null) {
367
- const res = await this.client.get(proxy, '/axis-cgi/applications/control.cgi', {
368
- package: applicationID.toLowerCase(),
369
- action: 'restart',
432
+ async restartApplication(applicationId, options) {
433
+ const agent = this.getClient(options?.proxyParams);
434
+ const res = await agent.get({
435
+ path: '/axis-cgi/applications/control.cgi',
436
+ parameters: {
437
+ package: applicationId.toLowerCase(),
438
+ action: 'restart',
439
+ },
440
+ timeout: options?.timeout,
370
441
  });
371
442
  const text = (await res.text()).trim().toLowerCase();
372
443
  if (text !== 'ok') {
373
- throw new ApplicationAPIError('RESTART', await responseStringify(res));
444
+ throw new ApplicationAPIError('RESTART', text);
374
445
  }
375
446
  }
376
- async stopApplication(applicationID, proxy = null) {
377
- const res = await this.client.get(proxy, '/axis-cgi/applications/control.cgi', {
378
- package: applicationID.toLowerCase(),
379
- action: 'stop',
447
+ async stopApplication(applicationId, options) {
448
+ const agent = this.getClient(options?.proxyParams);
449
+ const res = await agent.get({
450
+ path: '/axis-cgi/applications/control.cgi',
451
+ parameters: {
452
+ package: applicationId.toLowerCase(),
453
+ action: 'stop',
454
+ },
455
+ timeout: options?.timeout,
380
456
  });
381
457
  const text = (await res.text()).trim().toLowerCase();
382
458
  if (text !== 'ok' && !(text.startsWith('error:') && text.substring(7) === '6')) {
383
- throw new ApplicationAPIError('STOP', await responseStringify(res));
459
+ throw new ApplicationAPIError('STOP', text);
384
460
  }
385
461
  }
386
- async installApplication(data, fileName) {
387
- const formData = new FormData();
462
+ async installApplication(data, fileName, options) {
463
+ const formData = new this.CustomFormData();
388
464
  formData.append('packfil', data, fileName);
389
- const res = await this.client.post(null, '/axis-cgi/applications/upload.cgi', formData, {}, {
390
- contentType: 'application/octet-stream',
465
+ const agent = this.getClient(options?.proxyParams);
466
+ const res = await agent.post({
467
+ path: '/axis-cgi/applications/upload.cgi',
468
+ data: formData,
469
+ headers: {
470
+ contentType: 'application/octet-stream',
471
+ },
472
+ timeout: options?.timeout ?? 120000,
391
473
  });
392
474
  if (!res.ok) {
393
- throw new Error(await responseStringify(res));
475
+ throw new ErrorWithResponse(res);
394
476
  }
395
477
  const text = await res.text();
396
478
  if (text.length > 5) {
397
- throw new Error('installing error: ' + text);
398
- }
399
- }
400
- }
401
- const parseParameters = (response) => {
402
- const params = {};
403
- const lines = response.split(/[\r\n]/);
404
- for (const line of lines) {
405
- if (line.length === 0 || line.substring(0, 7) === '# Error') {
406
- continue;
407
- }
408
- const delimiterPos = line.indexOf('=');
409
- if (delimiterPos !== -1) {
410
- const paramName = line.substring(0, delimiterPos).replace('root.', '');
411
- const paramValue = line.substring(delimiterPos + 1);
412
- params[paramName] = paramValue;
479
+ throw new ApplicationAPIError('INSTALL', text);
413
480
  }
414
481
  }
415
- return params;
416
- };
417
- const parseCameraPtzResponse = (response) => {
418
- const json = JSON.parse(response);
419
- const parsed = {};
420
- Object.keys(json).forEach((key) => {
421
- if (!key.startsWith('Camera ')) {
422
- return;
423
- }
424
- const camera = Number(key.replace('Camera ', ''));
425
- if (json[key].presets !== undefined) {
426
- parsed[camera] = parsePtz(json[key].presets);
427
- }
428
- });
429
- return parsed;
430
- };
431
- const parsePtz = (parsed) => {
432
- const res = [];
433
- parsed.forEach((value) => {
434
- const delimiterPos = value.indexOf('=');
435
- if (delimiterPos === -1) {
436
- return;
437
- }
438
- if (!value.startsWith('presetposno')) {
439
- return;
440
- }
441
- const id = Number(value.substring(11, delimiterPos));
442
- if (Number.isNaN(id)) {
443
- return;
482
+ static parseParameters = (response) => {
483
+ const params = {};
484
+ const lines = response.split(/[\r\n]/);
485
+ for (const line of lines) {
486
+ if (line.length === 0 || line.substring(0, 7) === '# Error') {
487
+ continue;
488
+ }
489
+ const delimiterPos = line.indexOf('=');
490
+ if (delimiterPos !== -1) {
491
+ const paramName = line.substring(0, delimiterPos).replace('root.', '');
492
+ const paramValue = line.substring(delimiterPos + 1);
493
+ params[paramName] = paramValue;
494
+ }
444
495
  }
445
- const data = value.substring(delimiterPos + 1).split(':');
446
- const getValue = (valueName) => {
447
- for (const d of data) {
448
- const p = d.split('=');
449
- if (p[0] === valueName) {
450
- return Number(p[1]);
451
- }
496
+ return params;
497
+ };
498
+ static parseCameraPtzResponse = (response) => {
499
+ const json = JSON.parse(response);
500
+ const parsed = {};
501
+ Object.keys(json).forEach((key) => {
502
+ if (!key.startsWith('Camera ')) {
503
+ return;
452
504
  }
453
- return 0;
454
- };
455
- res.push({
456
- id,
457
- name: data[0] ?? 'Preset ' + id,
458
- data: {
459
- pan: getValue('pan'),
460
- tilt: getValue('tilt'),
461
- zoom: getValue('zoom'),
462
- },
505
+ const camera = Number(key.replace('Camera ', ''));
506
+ if (json[key].presets !== undefined) {
507
+ parsed[camera] = VapixAPI.parsePtz(json[key].presets);
508
+ }
509
+ });
510
+ return parsed;
511
+ };
512
+ static parsePtz = (parsed) => {
513
+ const res = [];
514
+ parsed.forEach((value) => {
515
+ const delimiterPos = value.indexOf('=');
516
+ if (delimiterPos === -1) {
517
+ return;
518
+ }
519
+ if (!value.startsWith('presetposno')) {
520
+ return;
521
+ }
522
+ const id = Number(value.substring(11, delimiterPos));
523
+ if (Number.isNaN(id)) {
524
+ return;
525
+ }
526
+ const data = value.substring(delimiterPos + 1).split(':');
527
+ const getValue = (valueName) => {
528
+ for (const d of data) {
529
+ const p = d.split('=');
530
+ if (p[0] === valueName) {
531
+ return Number(p[1]);
532
+ }
533
+ }
534
+ return 0;
535
+ };
536
+ res.push({
537
+ id,
538
+ name: data[0] ?? 'Preset ' + id,
539
+ data: {
540
+ pan: getValue('pan'),
541
+ tilt: getValue('tilt'),
542
+ zoom: getValue('zoom'),
543
+ },
544
+ });
463
545
  });
464
- });
465
- return res;
466
- };
546
+ return res;
547
+ };
548
+ }