camstreamerlib 4.0.0-beta.15 → 4.0.0-beta.151

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