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