camstreamerlib 4.0.0-beta.13 → 4.0.0-beta.130

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 (354) hide show
  1. package/README.md +143 -38
  2. package/cjs/CamOverlayAPI.d.ts +560 -336
  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 +3139 -14
  7. package/cjs/CamStreamerAPI.js +151 -52
  8. package/cjs/CamSwitcherAPI.d.ts +155 -42
  9. package/cjs/CamSwitcherAPI.js +134 -189
  10. package/cjs/PlaneTrackerAPI.d.ts +236 -0
  11. package/cjs/PlaneTrackerAPI.js +194 -0
  12. package/cjs/VapixAPI.d.ts +84 -43
  13. package/cjs/VapixAPI.js +312 -216
  14. package/cjs/{CreatePackage.js → bin/CreatePackage.js} +44 -18
  15. package/cjs/errors/errors.d.ts +70 -4
  16. package/cjs/errors/errors.js +140 -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} +2534 -746
  64. package/cjs/types/CamOverlayAPI/CamOverlayAPI.js +131 -0
  65. package/cjs/{models → types}/CamOverlayAPI/accuweatherSchema.d.ts +15 -15
  66. package/cjs/{models → types}/CamOverlayAPI/accuweatherSchema.js +7 -8
  67. package/cjs/{models → types}/CamOverlayAPI/customGraphicsSchema.d.ts +106 -105
  68. package/cjs/{models → types}/CamOverlayAPI/customGraphicsSchema.js +5 -6
  69. package/{esm/models → cjs/types}/CamOverlayAPI/imagesSchema.d.ts +17 -17
  70. package/cjs/types/CamOverlayAPI/imagesSchema.js +9 -0
  71. package/cjs/{models → types}/CamOverlayAPI/index.d.ts +2 -4
  72. package/cjs/{models → types}/CamOverlayAPI/index.js +2 -4
  73. package/cjs/{models → types}/CamOverlayAPI/infotickerSchema.d.ts +25 -25
  74. package/cjs/{models → types}/CamOverlayAPI/infotickerSchema.js +6 -7
  75. package/{esm/models → cjs/types}/CamOverlayAPI/pipSchema.d.ts +19 -19
  76. package/cjs/{models → types}/CamOverlayAPI/pipSchema.js +5 -6
  77. package/{esm/models → cjs/types}/CamOverlayAPI/ptzCompassSchema.d.ts +16 -13
  78. package/cjs/{models → types}/CamOverlayAPI/ptzCompassSchema.js +5 -5
  79. package/{esm/models → cjs/types}/CamOverlayAPI/ptzSchema.d.ts +26 -26
  80. package/cjs/types/CamOverlayAPI/ptzSchema.js +12 -0
  81. package/cjs/types/CamOverlayAPI/scoreBoardSchema.d.ts +357 -0
  82. package/cjs/types/CamOverlayAPI/scoreBoardSchema.js +132 -0
  83. package/cjs/{models → types}/CamOverlayAPI/screenSharingSchema.d.ts +13 -13
  84. package/cjs/types/CamOverlayAPI/screenSharingSchema.js +8 -0
  85. package/{esm/models/CamOverlayAPI/widgetCommonSchema.d.ts → cjs/types/CamOverlayAPI/serviceCommonTypes.d.ts} +75 -56
  86. package/cjs/{models/CamOverlayAPI/widgetCommonSchema.js → types/CamOverlayAPI/serviceCommonTypes.js} +33 -18
  87. package/{esm/models → cjs/types}/CamOverlayAPI/webCameraSharingSchema.d.ts +13 -13
  88. package/cjs/types/CamOverlayAPI/webCameraSharingSchema.js +8 -0
  89. package/cjs/types/CamOverlayDrawingAPI.d.ts +48 -0
  90. package/cjs/types/CamOverlayDrawingAPI.js +2 -0
  91. package/cjs/types/CamOverlayPainter.d.ts +76 -0
  92. package/cjs/types/CamOverlayPainter.js +14 -0
  93. package/cjs/types/CamScripterAPI.d.ts +86 -23
  94. package/cjs/types/CamScripterAPI.js +24 -8
  95. package/cjs/types/CamScripterAPICameraEventsGenerator.d.ts +45 -0
  96. package/cjs/types/CamScripterAPICameraEventsGenerator.js +2 -0
  97. package/cjs/types/CamStreamerAPI/CamStreamerAPI.d.ts +22299 -0
  98. package/cjs/types/CamStreamerAPI/CamStreamerAPI.js +165 -0
  99. package/cjs/types/CamStreamerAPI/facebookSchema.d.ts +501 -0
  100. package/cjs/types/CamStreamerAPI/facebookSchema.js +23 -0
  101. package/cjs/types/CamStreamerAPI/index.d.ts +6 -0
  102. package/cjs/types/CamStreamerAPI/index.js +22 -0
  103. package/cjs/types/{CamStreamerAPI.d.ts → CamStreamerAPI/oldStreamSchema.d.ts} +104 -35
  104. package/cjs/types/CamStreamerAPI/oldStreamSchema.js +53 -0
  105. package/cjs/types/CamStreamerAPI/streamCommonTypes.d.ts +500 -0
  106. package/cjs/types/CamStreamerAPI/streamCommonTypes.js +119 -0
  107. package/cjs/types/CamStreamerAPI/streamsSchema.d.ts +7379 -0
  108. package/cjs/types/CamStreamerAPI/streamsSchema.js +59 -0
  109. package/cjs/types/CamStreamerAPI/windySchema.d.ts +435 -0
  110. package/cjs/types/CamStreamerAPI/windySchema.js +11 -0
  111. package/cjs/types/CamStreamerAPI/youtubeSchema.d.ts +468 -0
  112. package/cjs/types/CamStreamerAPI/youtubeSchema.js +22 -0
  113. package/cjs/types/CamSwitcherAPI.d.ts +181 -121
  114. package/cjs/types/CamSwitcherAPI.js +31 -1
  115. package/cjs/{events → types}/GenetecAgent.d.ts +47 -47
  116. package/cjs/types/GenetecAgent.js +31 -0
  117. package/cjs/types/PlaneTrackerAPI.d.ts +980 -0
  118. package/cjs/types/PlaneTrackerAPI.js +333 -0
  119. package/cjs/types/VapixAPI.d.ts +255 -15
  120. package/cjs/types/VapixAPI.js +66 -3
  121. package/cjs/types/VapixEvents.d.ts +15 -0
  122. package/cjs/types/VapixEvents.js +2 -0
  123. package/cjs/types/common.d.ts +43 -3
  124. package/cjs/types/common.js +17 -2
  125. package/cjs/types/ws/CamOverlayEvents.d.ts +88 -0
  126. package/cjs/types/ws/CamOverlayEvents.js +19 -0
  127. package/cjs/types/ws/CamStreamerEvents.d.ts +282 -0
  128. package/cjs/types/ws/CamStreamerEvents.js +36 -0
  129. package/cjs/types/ws/PlaneTrackerEvents.d.ts +1703 -0
  130. package/cjs/types/ws/PlaneTrackerEvents.js +207 -0
  131. package/cjs/web/DefaultClient.d.ts +7 -5
  132. package/cjs/web/DefaultClient.js +25 -11
  133. package/cjs/web/WsClient.d.ts +9 -5
  134. package/cjs/web/WsClient.js +16 -18
  135. package/cjs/ws/CamOverlayEvents.d.ts +8 -0
  136. package/cjs/ws/CamOverlayEvents.js +24 -0
  137. package/cjs/ws/CamStreamerEvents.d.ts +8 -0
  138. package/cjs/ws/CamStreamerEvents.js +24 -0
  139. package/cjs/ws/CamSwitcherEvents.d.ts +8 -0
  140. package/cjs/ws/CamSwitcherEvents.js +24 -0
  141. package/cjs/ws/PlaneTrackerEvents.d.ts +9 -0
  142. package/cjs/ws/PlaneTrackerEvents.js +30 -0
  143. package/esm/CamOverlayAPI.js +99 -184
  144. package/esm/CamScripterAPI.js +51 -57
  145. package/esm/CamStreamerAPI.js +149 -51
  146. package/esm/CamSwitcherAPI.js +137 -192
  147. package/esm/PlaneTrackerAPI.js +190 -0
  148. package/esm/VapixAPI.js +314 -218
  149. package/esm/{CreatePackage.js → bin/CreatePackage.js} +16 -16
  150. package/esm/errors/errors.js +122 -6
  151. package/esm/index.js +20 -8
  152. package/esm/internal/BasicAPI.js +89 -0
  153. package/esm/internal/ProxyClient.js +28 -34
  154. package/esm/{CamSwitcherEvents.js → internal/WsEvents.js} +31 -20
  155. package/esm/internal/constants.js +1 -0
  156. package/esm/internal/convertors.js +108 -0
  157. package/esm/internal/utils.js +0 -9
  158. package/esm/{CamOverlayDrawingAPI.js → node/CamOverlayDrawingAPI.js} +26 -18
  159. package/esm/{CamOverlayPainter → node/CamOverlayPainter}/Frame.js +33 -0
  160. package/esm/{CamOverlayPainter → node/CamOverlayPainter}/Painter.js +2 -13
  161. package/esm/{CamOverlayPainter → node/CamOverlayPainter}/ResourceManager.js +7 -5
  162. package/esm/{CamScripterAPICameraEventsGenerator.js → node/CamScripterAPICameraEventsGenerator.js} +11 -11
  163. package/esm/node/DefaultClient.js +12 -16
  164. package/esm/node/Digest.test.js +11 -0
  165. package/esm/node/HttpRequestSender.js +14 -4
  166. package/esm/node/HttpServer.js +1 -1
  167. package/esm/node/TimeZoneDaemon.js +25 -0
  168. package/esm/{VapixEvents.js → node/VapixEvents.js} +10 -10
  169. package/esm/node/WsClient.js +22 -15
  170. package/esm/{events → node/events}/AxisCameraStationEvents.js +18 -13
  171. package/esm/node/events/GenetecAgent.js +120 -0
  172. package/esm/node/index.js +18 -2
  173. package/esm/types/CamOverlayAPI/CamOverlayAPI.js +110 -0
  174. package/esm/{models → types}/CamOverlayAPI/accuweatherSchema.js +3 -4
  175. package/esm/{models → types}/CamOverlayAPI/customGraphicsSchema.js +3 -4
  176. package/esm/types/CamOverlayAPI/imagesSchema.js +6 -0
  177. package/esm/{models → types}/CamOverlayAPI/index.js +2 -4
  178. package/esm/{models → types}/CamOverlayAPI/infotickerSchema.js +3 -4
  179. package/esm/{models → types}/CamOverlayAPI/pipSchema.js +4 -5
  180. package/esm/{models → types}/CamOverlayAPI/ptzCompassSchema.js +4 -4
  181. package/esm/types/CamOverlayAPI/ptzSchema.js +9 -0
  182. package/esm/types/CamOverlayAPI/scoreBoardSchema.js +129 -0
  183. package/esm/types/CamOverlayAPI/screenSharingSchema.js +5 -0
  184. package/esm/{models/CamOverlayAPI/widgetCommonSchema.js → types/CamOverlayAPI/serviceCommonTypes.js} +32 -17
  185. package/esm/types/CamOverlayAPI/webCameraSharingSchema.js +5 -0
  186. package/esm/types/CamOverlayDrawingAPI.js +1 -0
  187. package/esm/types/CamOverlayPainter.js +11 -0
  188. package/esm/types/CamScripterAPI.js +23 -7
  189. package/esm/types/CamScripterAPICameraEventsGenerator.js +1 -0
  190. package/esm/types/CamStreamerAPI/CamStreamerAPI.js +142 -0
  191. package/esm/types/CamStreamerAPI/facebookSchema.js +17 -0
  192. package/esm/types/CamStreamerAPI/index.js +6 -0
  193. package/esm/types/CamStreamerAPI/oldStreamSchema.js +50 -0
  194. package/esm/types/CamStreamerAPI/streamCommonTypes.js +116 -0
  195. package/esm/types/CamStreamerAPI/streamsSchema.js +53 -0
  196. package/esm/types/CamStreamerAPI/windySchema.js +5 -0
  197. package/esm/types/CamStreamerAPI/youtubeSchema.js +16 -0
  198. package/esm/types/CamSwitcherAPI.js +31 -1
  199. package/esm/types/GenetecAgent.js +28 -0
  200. package/esm/types/PlaneTrackerAPI.js +330 -0
  201. package/esm/types/VapixAPI.js +65 -2
  202. package/esm/types/VapixEvents.js +1 -0
  203. package/esm/types/common.js +16 -1
  204. package/esm/types/ws/CamOverlayEvents.js +16 -0
  205. package/esm/types/ws/CamStreamerEvents.js +33 -0
  206. package/esm/types/ws/PlaneTrackerEvents.js +204 -0
  207. package/esm/web/DefaultClient.js +25 -11
  208. package/esm/web/WsClient.js +16 -18
  209. package/esm/ws/CamOverlayEvents.js +20 -0
  210. package/esm/ws/CamStreamerEvents.js +20 -0
  211. package/esm/ws/CamSwitcherEvents.js +20 -0
  212. package/esm/ws/PlaneTrackerEvents.js +26 -0
  213. package/package.json +43 -9
  214. package/{esm → types}/CamOverlayAPI.d.ts +560 -336
  215. package/types/CamScripterAPI.d.ts +43 -0
  216. package/types/CamStreamerAPI.d.ts +3141 -0
  217. package/types/CamSwitcherAPI.d.ts +165 -0
  218. package/types/PlaneTrackerAPI.d.ts +236 -0
  219. package/types/VapixAPI.d.ts +119 -0
  220. package/types/bin/CreatePackage.d.ts +1 -0
  221. package/types/errors/errors.d.ts +103 -0
  222. package/types/index.d.ts +28 -0
  223. package/types/internal/BasicAPI.d.ts +15 -0
  224. package/types/internal/ProxyClient.d.ts +10 -0
  225. package/types/internal/WsEvents.d.ts +38 -0
  226. package/{esm → types}/internal/constants.d.ts +1 -0
  227. package/types/internal/convertors.d.ts +6 -0
  228. package/types/internal/types.d.ts +47 -0
  229. package/{esm → types}/internal/utils.d.ts +1 -3
  230. package/{esm → types}/internal/versionCompare.d.ts +2 -2
  231. package/types/node/CamOverlayDrawingAPI.d.ts +41 -0
  232. package/{cjs → types/node}/CamOverlayPainter/Frame.d.ts +8 -37
  233. package/{esm → types/node}/CamOverlayPainter/Painter.d.ts +5 -21
  234. package/types/node/CamOverlayPainter/ResourceManager.d.ts +15 -0
  235. package/types/node/CamScripterAPICameraEventsGenerator.d.ts +31 -0
  236. package/types/node/DefaultClient.d.ts +16 -0
  237. package/types/node/Digest.test.d.ts +1 -0
  238. package/{esm → types}/node/HttpRequestSender.d.ts +1 -0
  239. package/{esm → types}/node/HttpServer.d.ts +1 -1
  240. package/types/node/TimeZoneDaemon.d.ts +6 -0
  241. package/types/node/VapixEvents.d.ts +16 -0
  242. package/types/node/WsClient.d.ts +30 -0
  243. package/types/node/events/AxisCameraStationEvents.d.ts +12 -0
  244. package/types/node/events/GenetecAgent.d.ts +16 -0
  245. package/types/node/index.d.ts +18 -0
  246. package/{esm/models/CamOverlayAPI/widgetsSchema.d.ts → types/types/CamOverlayAPI/CamOverlayAPI.d.ts} +2534 -746
  247. package/{esm/models → types/types}/CamOverlayAPI/accuweatherSchema.d.ts +15 -15
  248. package/{esm/models → types/types}/CamOverlayAPI/customGraphicsSchema.d.ts +106 -105
  249. package/{cjs/models → types/types}/CamOverlayAPI/imagesSchema.d.ts +17 -17
  250. package/{esm/models → types/types}/CamOverlayAPI/index.d.ts +2 -4
  251. package/{esm/models → types/types}/CamOverlayAPI/infotickerSchema.d.ts +25 -25
  252. package/{cjs/models → types/types}/CamOverlayAPI/pipSchema.d.ts +19 -19
  253. package/{cjs/models → types/types}/CamOverlayAPI/ptzCompassSchema.d.ts +16 -13
  254. package/{cjs/models → types/types}/CamOverlayAPI/ptzSchema.d.ts +26 -26
  255. package/types/types/CamOverlayAPI/scoreBoardSchema.d.ts +357 -0
  256. package/{esm/models → types/types}/CamOverlayAPI/screenSharingSchema.d.ts +13 -13
  257. package/{cjs/models/CamOverlayAPI/widgetCommonSchema.d.ts → types/types/CamOverlayAPI/serviceCommonTypes.d.ts} +75 -56
  258. package/{cjs/models → types/types}/CamOverlayAPI/webCameraSharingSchema.d.ts +13 -13
  259. package/types/types/CamOverlayDrawingAPI.d.ts +48 -0
  260. package/types/types/CamOverlayPainter.d.ts +76 -0
  261. package/types/types/CamScripterAPI.d.ts +130 -0
  262. package/types/types/CamScripterAPICameraEventsGenerator.d.ts +45 -0
  263. package/types/types/CamStreamerAPI/CamStreamerAPI.d.ts +22299 -0
  264. package/types/types/CamStreamerAPI/facebookSchema.d.ts +501 -0
  265. package/types/types/CamStreamerAPI/index.d.ts +6 -0
  266. package/{esm/types/CamStreamerAPI.d.ts → types/types/CamStreamerAPI/oldStreamSchema.d.ts} +104 -35
  267. package/types/types/CamStreamerAPI/streamCommonTypes.d.ts +500 -0
  268. package/types/types/CamStreamerAPI/streamsSchema.d.ts +7379 -0
  269. package/types/types/CamStreamerAPI/windySchema.d.ts +435 -0
  270. package/types/types/CamStreamerAPI/youtubeSchema.d.ts +468 -0
  271. package/{esm → types}/types/CamSwitcherAPI.d.ts +181 -121
  272. package/{esm/events → types/types}/GenetecAgent.d.ts +47 -47
  273. package/types/types/PlaneTrackerAPI.d.ts +980 -0
  274. package/{esm → types}/types/VapixAPI.d.ts +255 -15
  275. package/types/types/VapixEvents.d.ts +15 -0
  276. package/types/types/common.d.ts +77 -0
  277. package/types/types/ws/CamOverlayEvents.d.ts +88 -0
  278. package/types/types/ws/CamStreamerEvents.d.ts +282 -0
  279. package/types/types/ws/PlaneTrackerEvents.d.ts +1703 -0
  280. package/types/web/DefaultClient.d.ts +8 -0
  281. package/types/web/WsClient.d.ts +17 -0
  282. package/types/ws/CamOverlayEvents.d.ts +8 -0
  283. package/types/ws/CamStreamerEvents.d.ts +8 -0
  284. package/types/ws/CamSwitcherEvents.d.ts +8 -0
  285. package/types/ws/PlaneTrackerEvents.d.ts +9 -0
  286. package/cjs/CamOverlayDrawingAPI.d.ts +0 -86
  287. package/cjs/CamOverlayPainter/ResourceManager.d.ts +0 -14
  288. package/cjs/CamOverlayPainter/ResourceManager.js +0 -46
  289. package/cjs/CamScripterAPICameraEventsGenerator.d.ts +0 -74
  290. package/cjs/CamSwitcherEvents.d.ts +0 -18
  291. package/cjs/VapixEvents.d.ts +0 -43
  292. package/cjs/events/AxisCameraStationEvents.d.ts +0 -10
  293. package/cjs/events/GenetecAgent.js +0 -123
  294. package/cjs/models/CamOverlayAPI/constants.d.ts +0 -11
  295. package/cjs/models/CamOverlayAPI/constants.js +0 -14
  296. package/cjs/models/CamOverlayAPI/fileSchema.d.ts +0 -28
  297. package/cjs/models/CamOverlayAPI/fileSchema.js +0 -17
  298. package/cjs/models/CamOverlayAPI/imagesSchema.js +0 -10
  299. package/cjs/models/CamOverlayAPI/ptzSchema.js +0 -13
  300. package/cjs/models/CamOverlayAPI/screenSharingSchema.js +0 -9
  301. package/cjs/models/CamOverlayAPI/webCameraSharingSchema.js +0 -9
  302. package/cjs/models/CamOverlayAPI/widgetsSchema.js +0 -27
  303. package/cjs/node/WsEventClient.d.ts +0 -13
  304. package/cjs/node/WsEventClient.js +0 -22
  305. package/cjs/types/CamOverlayAPI.d.ts +0 -328
  306. package/cjs/types/CamOverlayAPI.js +0 -26
  307. package/cjs/types/CamStreamerAPI.js +0 -28
  308. package/esm/CamOverlayDrawingAPI.d.ts +0 -86
  309. package/esm/CamOverlayPainter/ResourceManager.d.ts +0 -14
  310. package/esm/CamScripterAPI.d.ts +0 -19
  311. package/esm/CamScripterAPICameraEventsGenerator.d.ts +0 -74
  312. package/esm/CamStreamerAPI.d.ts +0 -16
  313. package/esm/CamSwitcherAPI.d.ts +0 -52
  314. package/esm/CamSwitcherEvents.d.ts +0 -18
  315. package/esm/VapixAPI.d.ts +0 -78
  316. package/esm/VapixEvents.d.ts +0 -43
  317. package/esm/errors/errors.d.ts +0 -37
  318. package/esm/events/AxisCameraStationEvents.d.ts +0 -10
  319. package/esm/events/GenetecAgent.js +0 -119
  320. package/esm/index.d.ts +0 -16
  321. package/esm/internal/ProxyClient.d.ts +0 -11
  322. package/esm/internal/types.d.ts +0 -35
  323. package/esm/models/CamOverlayAPI/constants.d.ts +0 -11
  324. package/esm/models/CamOverlayAPI/constants.js +0 -11
  325. package/esm/models/CamOverlayAPI/fileSchema.d.ts +0 -28
  326. package/esm/models/CamOverlayAPI/fileSchema.js +0 -14
  327. package/esm/models/CamOverlayAPI/imagesSchema.js +0 -7
  328. package/esm/models/CamOverlayAPI/ptzSchema.js +0 -10
  329. package/esm/models/CamOverlayAPI/screenSharingSchema.js +0 -6
  330. package/esm/models/CamOverlayAPI/webCameraSharingSchema.js +0 -6
  331. package/esm/models/CamOverlayAPI/widgetsSchema.js +0 -24
  332. package/esm/node/DefaultClient.d.ts +0 -16
  333. package/esm/node/WsClient.d.ts +0 -39
  334. package/esm/node/WsEventClient.d.ts +0 -13
  335. package/esm/node/WsEventClient.js +0 -18
  336. package/esm/types/CamOverlayAPI.d.ts +0 -328
  337. package/esm/types/CamOverlayAPI.js +0 -14
  338. package/esm/types/CamScripterAPI.d.ts +0 -67
  339. package/esm/types/CamStreamerAPI.js +0 -25
  340. package/esm/types/common.d.ts +0 -37
  341. package/esm/web/DefaultClient.d.ts +0 -6
  342. package/esm/web/WsClient.d.ts +0 -13
  343. package/esm/web/index.d.ts +0 -2
  344. package/cjs/{CreatePackage.d.ts → bin/CreatePackage.d.ts} +0 -0
  345. package/cjs/{internal → node}/Digest.d.ts +0 -0
  346. package/{esm/CreatePackage.d.ts → cjs/node/Digest.test.d.ts} +0 -0
  347. package/{esm/types → cjs/types/ws}/CamSwitcherEvents.d.ts +8 -8
  348. package/cjs/types/{CamSwitcherEvents.js → ws/CamSwitcherEvents.js} +0 -0
  349. package/esm/{internal → node}/Digest.js +0 -0
  350. package/esm/types/{CamSwitcherEvents.js → ws/CamSwitcherEvents.js} +0 -0
  351. package/{esm → types}/internal/transformers.d.ts +0 -0
  352. package/{esm/internal → types/node}/Digest.d.ts +0 -0
  353. package/{cjs/types → types/types/ws}/CamSwitcherEvents.d.ts +8 -8
  354. /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, 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 { 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
+ postJson = async (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;
36
+ };
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
+ }));
30
44
  }
31
- async getCameraImage(params, proxy = null) {
32
- return await this.client.get(proxy, '/axis-cgi/jpg/image.cgi', params);
33
- }
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('/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,52 +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);
192
- const textXml = await res.text();
193
- const parser = new XMLParser({
194
- ignoreAttributes: false,
195
- attributeNamePrefix: '',
196
- allowBooleanAttributes: true,
197
- });
198
- const result = parser.parse(textXml);
199
- if (isNullish(result.body.data)) {
224
+ async fetchRemoteDeviceInfo(payload, options) {
225
+ const res = await this._postJsonEncoded('/axis-cgi/basicdeviceinfo.cgi', payload, undefined, options);
226
+ const json = await res.json();
227
+ if (isNullish(json.data)) {
200
228
  throw new NoDeviceInfoError();
201
229
  }
202
- return result.data;
230
+ return json.data;
203
231
  }
204
- async getHeaders(proxy = null) {
232
+ async getHeaders(options) {
205
233
  const data = { apiVersion: '1.0', method: 'list' };
206
- const res = await this.postJson(proxy, '/axis-cgi/customhttpheader.cgi', data);
234
+ const res = await this._postJsonEncoded('/axis-cgi/customhttpheader.cgi', data, undefined, options);
207
235
  return z.object({ data: z.record(z.string()) }).parse(await res.json()).data;
208
236
  }
209
- async setHeaders(headers, proxy = null) {
237
+ async setHeaders(headers, options) {
210
238
  const data = { apiVersion: '1.0', method: 'set', params: headers };
211
- return this.postJson(proxy, '/axis-cgi/customhttpheader.cgi', data);
239
+ return this._postJsonEncoded('/axis-cgi/customhttpheader.cgi', data, undefined, options);
212
240
  }
213
- async getParameter(paramNames, proxy = null) {
214
- 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', {
215
243
  action: 'list',
216
244
  group: arrayToUrl(paramNames),
217
- });
218
- return parseParameters(await response.text());
245
+ }, options);
246
+ return VapixAPI.parseParameters(await response.text());
219
247
  }
220
- async setParameter(params, proxy = null) {
221
- 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', {
222
250
  ...params,
223
251
  action: 'update',
224
- });
252
+ }, options);
225
253
  const responseText = await res.text();
226
254
  if (responseText.startsWith('# Error')) {
227
- throw new Error(responseText);
255
+ throw new SettingParameterError(responseText);
228
256
  }
229
- return true;
230
257
  }
231
- async getGuardTourList(proxy = null) {
258
+ async getGuardTourList(options) {
232
259
  const gTourList = new Array();
233
- const response = await this.getParameter('GuardTour', proxy);
260
+ const response = await this.getParameter('GuardTour', options);
234
261
  for (let i = 0; i < 20; i++) {
235
- const gTourBaseName = 'root.GuardTour.G' + i;
262
+ const gTourBaseName = 'GuardTour.G' + i;
236
263
  if (gTourBaseName + '.CamNbr' in response) {
237
264
  const gTour = {
238
265
  id: gTourBaseName,
@@ -244,7 +271,7 @@ export class VapixAPI {
244
271
  tour: [],
245
272
  };
246
273
  for (let j = 0; j < 100; j++) {
247
- const tourBaseName = 'root.GuardTour.G' + i + '.Tour.T' + j;
274
+ const tourBaseName = 'GuardTour.G' + i + '.Tour.T' + j;
248
275
  if (tourBaseName + '.MoveSpeed' in response) {
249
276
  const tour = {
250
277
  moveSpeed: response[tourBaseName + '.MoveSpeed'],
@@ -262,18 +289,18 @@ export class VapixAPI {
262
289
  break;
263
290
  }
264
291
  }
265
- return gTourList;
292
+ return guardTourSchema.parse(gTourList);
266
293
  }
267
- setGuardTourEnabled(guardTourID, enable, proxy = null) {
268
- const options = {};
269
- options[guardTourID + '.Running'] = enable ? 'yes' : 'no';
270
- 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);
271
298
  }
272
- async getPTZPresetList(channel, proxy = null) {
273
- 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', {
274
301
  query: 'presetposcam',
275
- camera: channel.toString(),
276
- });
302
+ camera: channel,
303
+ }, options);
277
304
  const text = await res.text();
278
305
  const lines = text.split(/[\r\n]/);
279
306
  const positions = [];
@@ -286,68 +313,111 @@ export class VapixAPI {
286
313
  }
287
314
  }
288
315
  }
289
- return positions;
316
+ return z.array(z.string()).parse(positions);
290
317
  }
291
- async listPTZ(camera, proxy = null) {
318
+ async listPTZ(camera, options) {
292
319
  const url = `/axis-cgi/com/ptz.cgi`;
293
- const response = await this.getUrlEncoded(proxy, url, {
320
+ const response = await this._postUrlEncoded(url, {
294
321
  camera,
295
322
  query: 'presetposcamdata',
296
323
  format: 'json',
297
- });
324
+ }, options);
298
325
  const text = await response.text();
299
326
  if (text === '') {
300
327
  throw new PtzNotSupportedError();
301
328
  }
302
- return parseCameraPtzResponse(text)[camera] ?? [];
329
+ return VapixAPI.parseCameraPtzResponse(text)[camera] ?? [];
303
330
  }
304
- async listPtzVideoSourceOverview(proxy = null) {
305
- 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', {
306
333
  query: 'presetposall',
307
334
  format: 'json',
308
- });
335
+ }, options);
309
336
  const text = await response.text();
310
337
  if (text === '') {
311
338
  throw new PtzNotSupportedError();
312
339
  }
313
- const data = parseCameraPtzResponse(text);
340
+ const data = VapixAPI.parseCameraPtzResponse(text);
314
341
  const res = {};
315
342
  Object.keys(data)
316
343
  .map(Number)
317
344
  .forEach((camera) => {
318
- if (data[camera] !== undefined) {
319
- 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);
320
348
  }
321
349
  });
322
- return res;
350
+ return ptzOverviewSchema.parse(res);
323
351
  }
324
- goToPreset(channel, presetName, proxy = null) {
325
- return this.getUrlEncoded(proxy, '/axis-cgi/com/ptz.cgi', {
352
+ goToPreset(channel, presetName, options) {
353
+ return this._postUrlEncoded('/axis-cgi/com/ptz.cgi', {
326
354
  camera: channel.toString(),
327
355
  gotoserverpresetname: presetName,
328
- });
356
+ }, options);
329
357
  }
330
- async getPtzPosition(camera, proxy = null) {
331
- 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', {
332
360
  query: 'position',
333
361
  camera: camera.toString(),
334
- });
335
- const params = parseParameters(await res.text());
336
- return {
362
+ }, options);
363
+ const params = VapixAPI.parseParameters(await res.text());
364
+ return cameraPTZItemDataSchema.parse({
337
365
  pan: Number(params.pan),
338
366
  tilt: Number(params.tilt),
339
367
  zoom: Number(params.zoom),
340
- };
341
- }
342
- async getInputState(port, proxy = null) {
343
- const response = await (await this.getUrlEncoded(proxy, '/axis-cgi/io/port.cgi', { checkactive: port.toString() })).text();
344
- return response.split('=')[1]?.indexOf('active') === 0;
368
+ });
345
369
  }
346
- async setOutputState(port, active, proxy = null) {
347
- return this.getUrlEncoded(proxy, '/axis-cgi/io/port.cgi', { action: active ? `${port}:/` : `${port}:\\` });
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);
348
417
  }
349
- async getApplicationList(proxy = null) {
350
- const res = await this.client.get(proxy, '/axis-cgi/applications/list.cgi');
418
+ async getApplicationList(options) {
419
+ const agent = this.getClient(options?.proxyParams);
420
+ const res = await agent.get({ path: '/axis-cgi/applications/list.cgi', timeout: options?.timeout });
351
421
  const xml = await res.text();
352
422
  const parser = new XMLParser({
353
423
  ignoreAttributes: false,
@@ -355,121 +425,147 @@ export class VapixAPI {
355
425
  allowBooleanAttributes: true,
356
426
  });
357
427
  const result = parser.parse(xml);
358
- return result.reply.application.map((app) => {
428
+ let apps = result.reply.application ?? [];
429
+ if (!Array.isArray(apps)) {
430
+ apps = [apps];
431
+ }
432
+ const appList = apps.map((app) => {
359
433
  return {
360
434
  ...app,
361
435
  appId: APP_IDS.find((id) => id.toLowerCase() === app.Name.toLowerCase()) ?? null,
362
436
  };
363
437
  });
364
- }
365
- async startApplication(applicationID, proxy = null) {
366
- const res = await this.client.get(proxy, '/axis-cgi/applications/control.cgi', {
367
- package: applicationID.toLowerCase(),
368
- action: 'start',
438
+ return applicationListSchema.parse(appList);
439
+ }
440
+ async startApplication(applicationId, options) {
441
+ const agent = this.getClient(options?.proxyParams);
442
+ const res = await agent.get({
443
+ path: '/axis-cgi/applications/control.cgi',
444
+ parameters: {
445
+ package: applicationId.toLowerCase(),
446
+ action: 'start',
447
+ },
448
+ timeout: options?.timeout,
369
449
  });
370
450
  const text = (await res.text()).trim().toLowerCase();
371
451
  if (text !== 'ok' && !(text.startsWith('error:') && text.substring(7) === '6')) {
372
- throw new ApplicationAPIError('START', await responseStringify(res));
452
+ throw new ApplicationAPIError('START', text);
373
453
  }
374
454
  }
375
- async restartApplication(applicationID, proxy = null) {
376
- const res = await this.client.get(proxy, '/axis-cgi/applications/control.cgi', {
377
- package: applicationID.toLowerCase(),
378
- action: 'restart',
455
+ async restartApplication(applicationId, options) {
456
+ const agent = this.getClient(options?.proxyParams);
457
+ const res = await agent.get({
458
+ path: '/axis-cgi/applications/control.cgi',
459
+ parameters: {
460
+ package: applicationId.toLowerCase(),
461
+ action: 'restart',
462
+ },
463
+ timeout: options?.timeout,
379
464
  });
380
465
  const text = (await res.text()).trim().toLowerCase();
381
466
  if (text !== 'ok') {
382
- throw new ApplicationAPIError('RESTART', await responseStringify(res));
467
+ throw new ApplicationAPIError('RESTART', text);
383
468
  }
384
469
  }
385
- async stopApplication(applicationID, proxy = null) {
386
- const res = await this.client.get(proxy, '/axis-cgi/applications/control.cgi', {
387
- package: applicationID.toLowerCase(),
388
- action: 'stop',
470
+ async stopApplication(applicationId, options) {
471
+ const agent = this.getClient(options?.proxyParams);
472
+ const res = await agent.get({
473
+ path: '/axis-cgi/applications/control.cgi',
474
+ parameters: {
475
+ package: applicationId.toLowerCase(),
476
+ action: 'stop',
477
+ },
478
+ timeout: options?.timeout,
389
479
  });
390
480
  const text = (await res.text()).trim().toLowerCase();
391
481
  if (text !== 'ok' && !(text.startsWith('error:') && text.substring(7) === '6')) {
392
- throw new ApplicationAPIError('STOP', await responseStringify(res));
482
+ throw new ApplicationAPIError('STOP', text);
393
483
  }
394
484
  }
395
- async installApplication(data, fileName) {
396
- const formData = new FormData();
485
+ async installApplication(data, fileName, options) {
486
+ const formData = new this.CustomFormData();
397
487
  formData.append('packfil', data, fileName);
398
- const res = await this.client.post(null, '/axis-cgi/applications/upload.cgi', formData, {}, {
399
- contentType: 'application/octet-stream',
488
+ const agent = this.getClient(options?.proxyParams);
489
+ const res = await agent.post({
490
+ path: '/axis-cgi/applications/upload.cgi',
491
+ data: formData,
492
+ headers: {
493
+ contentType: 'application/octet-stream',
494
+ },
495
+ timeout: options?.timeout ?? 120000,
400
496
  });
401
497
  if (!res.ok) {
402
- throw new Error(await responseStringify(res));
498
+ throw new ErrorWithResponse(res);
403
499
  }
404
500
  const text = await res.text();
405
501
  if (text.length > 5) {
406
- throw new Error('installing error: ' + text);
502
+ throw new ApplicationAPIError('INSTALL', text);
407
503
  }
408
504
  }
409
- }
410
- const parseParameters = (response) => {
411
- const params = {};
412
- const lines = response.split(/[\r\n]/);
413
- for (const line of lines) {
414
- if (line.length === 0 || line.substring(0, 7) === '# Error') {
415
- continue;
416
- }
417
- const delimiterPos = line.indexOf('=');
418
- if (delimiterPos !== -1) {
419
- const paramName = line.substring(0, delimiterPos).replace('root.', '');
420
- const paramValue = line.substring(delimiterPos + 1);
421
- params[paramName] = paramValue;
422
- }
423
- }
424
- return params;
425
- };
426
- const parseCameraPtzResponse = (response) => {
427
- const json = JSON.parse(response);
428
- const parsed = {};
429
- Object.keys(json).forEach((key) => {
430
- if (!key.startsWith('Camera ')) {
431
- return;
432
- }
433
- const camera = Number(key.replace('Camera ', ''));
434
- if (json[key].presets !== undefined) {
435
- parsed[camera] = parsePtz(json[key].presets);
436
- }
437
- });
438
- return parsed;
439
- };
440
- const parsePtz = (parsed) => {
441
- const res = [];
442
- parsed.forEach((value) => {
443
- const delimiterPos = value.indexOf('=');
444
- if (delimiterPos === -1) {
445
- return;
446
- }
447
- if (!value.startsWith('presetposno')) {
448
- return;
449
- }
450
- const id = Number(value.substring(11, delimiterPos));
451
- if (Number.isNaN(id)) {
452
- return;
505
+ static parseParameters = (response) => {
506
+ const params = {};
507
+ const lines = response.split(/[\r\n]/);
508
+ for (const line of lines) {
509
+ if (line.length === 0 || line.substring(0, 7) === '# Error') {
510
+ continue;
511
+ }
512
+ const delimiterPos = line.indexOf('=');
513
+ if (delimiterPos !== -1) {
514
+ const paramName = line.substring(0, delimiterPos).replace('root.', '');
515
+ const paramValue = line.substring(delimiterPos + 1);
516
+ params[paramName] = paramValue;
517
+ }
453
518
  }
454
- const data = value.substring(delimiterPos + 1).split(':');
455
- const getValue = (valueName) => {
456
- for (const d of data) {
457
- const p = d.split('=');
458
- if (p[0] === valueName) {
459
- return Number(p[1]);
460
- }
519
+ return params;
520
+ };
521
+ static parseCameraPtzResponse = (response) => {
522
+ const json = JSON.parse(response);
523
+ const parsed = {};
524
+ Object.keys(json).forEach((key) => {
525
+ if (!key.startsWith('Camera ')) {
526
+ return;
461
527
  }
462
- return 0;
463
- };
464
- res.push({
465
- id,
466
- name: data[0] ?? 'Preset ' + id,
467
- data: {
468
- pan: getValue('pan'),
469
- tilt: getValue('tilt'),
470
- zoom: getValue('zoom'),
471
- },
528
+ const camera = Number(key.replace('Camera ', ''));
529
+ if (json[key].presets !== undefined) {
530
+ parsed[camera] = VapixAPI.parsePtz(json[key].presets);
531
+ }
532
+ });
533
+ return parsed;
534
+ };
535
+ static parsePtz = (parsed) => {
536
+ const res = [];
537
+ parsed.forEach((value) => {
538
+ const delimiterPos = value.indexOf('=');
539
+ if (delimiterPos === -1) {
540
+ return;
541
+ }
542
+ if (!value.startsWith('presetposno')) {
543
+ return;
544
+ }
545
+ const id = Number(value.substring(11, delimiterPos));
546
+ if (Number.isNaN(id)) {
547
+ return;
548
+ }
549
+ const data = value.substring(delimiterPos + 1).split(':');
550
+ const getValue = (valueName) => {
551
+ for (const d of data) {
552
+ const p = d.split('=');
553
+ if (p[0] === valueName) {
554
+ return Number(p[1]);
555
+ }
556
+ }
557
+ return 0;
558
+ };
559
+ res.push({
560
+ id,
561
+ name: data[0] ?? 'Preset ' + id,
562
+ data: {
563
+ pan: getValue('pan'),
564
+ tilt: getValue('tilt'),
565
+ zoom: getValue('zoom'),
566
+ },
567
+ });
472
568
  });
473
- });
474
- return res;
475
- };
569
+ return res;
570
+ };
571
+ }