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.
- package/README.md +143 -38
- package/cjs/CamOverlayAPI.d.ts +560 -336
- package/cjs/CamOverlayAPI.js +99 -184
- package/cjs/CamScripterAPI.d.ts +41 -17
- package/cjs/CamScripterAPI.js +50 -56
- package/cjs/CamStreamerAPI.d.ts +3139 -14
- package/cjs/CamStreamerAPI.js +151 -52
- package/cjs/CamSwitcherAPI.d.ts +155 -42
- package/cjs/CamSwitcherAPI.js +134 -189
- package/cjs/PlaneTrackerAPI.d.ts +236 -0
- package/cjs/PlaneTrackerAPI.js +194 -0
- package/cjs/VapixAPI.d.ts +84 -43
- package/cjs/VapixAPI.js +312 -216
- package/cjs/{CreatePackage.js → bin/CreatePackage.js} +44 -18
- package/cjs/errors/errors.d.ts +70 -4
- package/cjs/errors/errors.js +140 -7
- package/cjs/index.d.ts +20 -8
- package/cjs/index.js +28 -12
- 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/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} +2534 -746
- package/cjs/types/CamOverlayAPI/CamOverlayAPI.js +131 -0
- package/cjs/{models → types}/CamOverlayAPI/accuweatherSchema.d.ts +15 -15
- package/cjs/{models → types}/CamOverlayAPI/accuweatherSchema.js +7 -8
- package/cjs/{models → types}/CamOverlayAPI/customGraphicsSchema.d.ts +106 -105
- package/cjs/{models → types}/CamOverlayAPI/customGraphicsSchema.js +5 -6
- package/{esm/models → cjs/types}/CamOverlayAPI/imagesSchema.d.ts +17 -17
- package/cjs/types/CamOverlayAPI/imagesSchema.js +9 -0
- package/cjs/{models → types}/CamOverlayAPI/index.d.ts +2 -4
- package/cjs/{models → types}/CamOverlayAPI/index.js +2 -4
- package/cjs/{models → types}/CamOverlayAPI/infotickerSchema.d.ts +25 -25
- package/cjs/{models → types}/CamOverlayAPI/infotickerSchema.js +6 -7
- package/{esm/models → cjs/types}/CamOverlayAPI/pipSchema.d.ts +19 -19
- package/cjs/{models → types}/CamOverlayAPI/pipSchema.js +5 -6
- package/{esm/models → cjs/types}/CamOverlayAPI/ptzCompassSchema.d.ts +16 -13
- package/cjs/{models → types}/CamOverlayAPI/ptzCompassSchema.js +5 -5
- package/{esm/models → cjs/types}/CamOverlayAPI/ptzSchema.d.ts +26 -26
- 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/cjs/{models → types}/CamOverlayAPI/screenSharingSchema.d.ts +13 -13
- package/cjs/types/CamOverlayAPI/screenSharingSchema.js +8 -0
- package/{esm/models/CamOverlayAPI/widgetCommonSchema.d.ts → cjs/types/CamOverlayAPI/serviceCommonTypes.d.ts} +75 -56
- package/cjs/{models/CamOverlayAPI/widgetCommonSchema.js → types/CamOverlayAPI/serviceCommonTypes.js} +33 -18
- package/{esm/models → cjs/types}/CamOverlayAPI/webCameraSharingSchema.d.ts +13 -13
- 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 +86 -23
- package/cjs/types/CamScripterAPI.js +24 -8
- package/cjs/types/CamScripterAPICameraEventsGenerator.d.ts +45 -0
- package/cjs/types/CamScripterAPICameraEventsGenerator.js +2 -0
- package/cjs/types/CamStreamerAPI/CamStreamerAPI.d.ts +22299 -0
- package/cjs/types/CamStreamerAPI/CamStreamerAPI.js +165 -0
- package/cjs/types/CamStreamerAPI/facebookSchema.d.ts +501 -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 +500 -0
- package/cjs/types/CamStreamerAPI/streamCommonTypes.js +119 -0
- package/cjs/types/CamStreamerAPI/streamsSchema.d.ts +7379 -0
- package/cjs/types/CamStreamerAPI/streamsSchema.js +59 -0
- package/cjs/types/CamStreamerAPI/windySchema.d.ts +435 -0
- package/cjs/types/CamStreamerAPI/windySchema.js +11 -0
- package/cjs/types/CamStreamerAPI/youtubeSchema.d.ts +468 -0
- package/cjs/types/CamStreamerAPI/youtubeSchema.js +22 -0
- package/cjs/types/CamSwitcherAPI.d.ts +181 -121
- package/cjs/types/CamSwitcherAPI.js +31 -1
- package/cjs/{events → types}/GenetecAgent.d.ts +47 -47
- package/cjs/types/GenetecAgent.js +31 -0
- package/cjs/types/PlaneTrackerAPI.d.ts +980 -0
- package/cjs/types/PlaneTrackerAPI.js +333 -0
- package/cjs/types/VapixAPI.d.ts +255 -15
- package/cjs/types/VapixAPI.js +66 -3
- 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 +51 -57
- package/esm/CamStreamerAPI.js +149 -51
- package/esm/CamSwitcherAPI.js +137 -192
- package/esm/PlaneTrackerAPI.js +190 -0
- package/esm/VapixAPI.js +314 -218
- package/esm/{CreatePackage.js → bin/CreatePackage.js} +16 -16
- package/esm/errors/errors.js +122 -6
- package/esm/index.js +20 -8
- 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/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 +110 -0
- package/esm/{models → types}/CamOverlayAPI/accuweatherSchema.js +3 -4
- package/esm/{models → types}/CamOverlayAPI/customGraphicsSchema.js +3 -4
- package/esm/types/CamOverlayAPI/imagesSchema.js +6 -0
- package/esm/{models → types}/CamOverlayAPI/index.js +2 -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} +32 -17
- 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 +23 -7
- package/esm/types/CamScripterAPICameraEventsGenerator.js +1 -0
- package/esm/types/CamStreamerAPI/CamStreamerAPI.js +142 -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 +116 -0
- package/esm/types/CamStreamerAPI/streamsSchema.js +53 -0
- package/esm/types/CamStreamerAPI/windySchema.js +5 -0
- package/esm/types/CamStreamerAPI/youtubeSchema.js +16 -0
- package/esm/types/CamSwitcherAPI.js +31 -1
- package/esm/types/GenetecAgent.js +28 -0
- package/esm/types/PlaneTrackerAPI.js +330 -0
- package/esm/types/VapixAPI.js +65 -2
- 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 +43 -9
- package/{esm → types}/CamOverlayAPI.d.ts +560 -336
- package/types/CamScripterAPI.d.ts +43 -0
- package/types/CamStreamerAPI.d.ts +3141 -0
- package/types/CamSwitcherAPI.d.ts +165 -0
- package/types/PlaneTrackerAPI.d.ts +236 -0
- package/types/VapixAPI.d.ts +119 -0
- package/types/bin/CreatePackage.d.ts +1 -0
- package/types/errors/errors.d.ts +103 -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} +2534 -746
- package/{esm/models → types/types}/CamOverlayAPI/accuweatherSchema.d.ts +15 -15
- package/{esm/models → types/types}/CamOverlayAPI/customGraphicsSchema.d.ts +106 -105
- package/{cjs/models → types/types}/CamOverlayAPI/imagesSchema.d.ts +17 -17
- package/{esm/models → types/types}/CamOverlayAPI/index.d.ts +2 -4
- package/{esm/models → types/types}/CamOverlayAPI/infotickerSchema.d.ts +25 -25
- package/{cjs/models → types/types}/CamOverlayAPI/pipSchema.d.ts +19 -19
- package/{cjs/models → types/types}/CamOverlayAPI/ptzCompassSchema.d.ts +16 -13
- package/{cjs/models → types/types}/CamOverlayAPI/ptzSchema.d.ts +26 -26
- package/types/types/CamOverlayAPI/scoreBoardSchema.d.ts +357 -0
- package/{esm/models → types/types}/CamOverlayAPI/screenSharingSchema.d.ts +13 -13
- package/{cjs/models/CamOverlayAPI/widgetCommonSchema.d.ts → types/types/CamOverlayAPI/serviceCommonTypes.d.ts} +75 -56
- package/{cjs/models → types/types}/CamOverlayAPI/webCameraSharingSchema.d.ts +13 -13
- package/types/types/CamOverlayDrawingAPI.d.ts +48 -0
- package/types/types/CamOverlayPainter.d.ts +76 -0
- package/types/types/CamScripterAPI.d.ts +130 -0
- package/types/types/CamScripterAPICameraEventsGenerator.d.ts +45 -0
- package/types/types/CamStreamerAPI/CamStreamerAPI.d.ts +22299 -0
- package/types/types/CamStreamerAPI/facebookSchema.d.ts +501 -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 +500 -0
- package/types/types/CamStreamerAPI/streamsSchema.d.ts +7379 -0
- package/types/types/CamStreamerAPI/windySchema.d.ts +435 -0
- package/types/types/CamStreamerAPI/youtubeSchema.d.ts +468 -0
- package/{esm → types}/types/CamSwitcherAPI.d.ts +181 -121
- package/{esm/events → types/types}/GenetecAgent.d.ts +47 -47
- package/types/types/PlaneTrackerAPI.d.ts +980 -0
- package/{esm → types}/types/VapixAPI.d.ts +255 -15
- 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/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 -16
- 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
|
|
26
|
-
const
|
|
27
|
-
const
|
|
28
|
-
const res = await
|
|
26
|
+
postJson = async (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;
|
|
39
|
+
};
|
|
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
|
+
}));
|
|
33
47
|
}
|
|
34
|
-
async
|
|
35
|
-
return await this.client.get(proxy, '/axis-cgi/jpg/image.cgi', params);
|
|
36
|
-
}
|
|
37
|
-
async getEventDeclarations(proxy = null) {
|
|
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('/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,19 @@ 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
|
-
return this.
|
|
163
|
+
getSystemLog(options) {
|
|
164
|
+
return this._postUrlEncoded('/axis-cgi/admin/systemlog.cgi', {}, options);
|
|
150
165
|
}
|
|
151
|
-
async getMaxFps(channel,
|
|
166
|
+
async getMaxFps(channel, options) {
|
|
152
167
|
const data = { apiVersion: '1.0', method: 'getCaptureModes' };
|
|
153
|
-
const res = await this.
|
|
168
|
+
const res = await this._postJsonEncoded('/axis-cgi/capturemode.cgi', data, undefined, options);
|
|
154
169
|
const response = VapixAPI_1.maxFpsResponseSchema.parse(await res.json());
|
|
155
170
|
const channels = response.data;
|
|
156
171
|
if (channels === undefined) {
|
|
@@ -168,21 +183,40 @@ class VapixAPI {
|
|
|
168
183
|
if ((0, utils_1.isNullish)(captureMode.maxFPS)) {
|
|
169
184
|
throw new errors_1.MaxFPSError('FPS_NOT_SPECIFIED');
|
|
170
185
|
}
|
|
171
|
-
return captureMode.maxFPS;
|
|
186
|
+
return zod_1.z.number().parse(captureMode.maxFPS);
|
|
172
187
|
}
|
|
173
|
-
async getTimezone(
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
188
|
+
async getTimezone(options) {
|
|
189
|
+
try {
|
|
190
|
+
const agent = this.getClient(options?.proxyParams);
|
|
191
|
+
const resV2 = await agent.get({ path: '/config/rest/time/v2/timeZone', timeout: options?.timeout });
|
|
192
|
+
if (!resV2.ok) {
|
|
193
|
+
throw new errors_1.ErrorWithResponse(resV2);
|
|
194
|
+
}
|
|
195
|
+
const json = await resV2.json();
|
|
196
|
+
const data = VapixAPI_1.timeZoneSchema.parse(json);
|
|
197
|
+
if (data.status === 'error') {
|
|
198
|
+
throw new errors_1.TimezoneFetchError(data.error.message);
|
|
199
|
+
}
|
|
200
|
+
return data.data.activeTimeZone;
|
|
201
|
+
}
|
|
202
|
+
catch (error) {
|
|
203
|
+
console.warn('Failed to fetch time zone data from time API v2:', error instanceof Error ? error.message : JSON.stringify(error));
|
|
204
|
+
console.warn('Falling back to deprecated time API v1');
|
|
205
|
+
}
|
|
206
|
+
const data = await this.getDateTimeInfo(options);
|
|
207
|
+
if (data.data.timeZone === undefined) {
|
|
208
|
+
throw new errors_1.TimezoneNotSetupError();
|
|
209
|
+
}
|
|
210
|
+
return zod_1.z.string().parse(data.data.timeZone);
|
|
177
211
|
}
|
|
178
|
-
async getDateTimeInfo(
|
|
212
|
+
async getDateTimeInfo(options) {
|
|
179
213
|
const data = { apiVersion: '1.0', method: 'getDateTimeInfo' };
|
|
180
|
-
const res = await this.
|
|
214
|
+
const res = await this._postJsonEncoded('/axis-cgi/time.cgi', data, undefined, options);
|
|
181
215
|
return VapixAPI_1.dateTimeinfoSchema.parse(await res.json());
|
|
182
216
|
}
|
|
183
|
-
async getDevicesSettings(
|
|
217
|
+
async getDevicesSettings(options) {
|
|
184
218
|
const data = { apiVersion: '1.0', method: 'getDevicesSettings' };
|
|
185
|
-
const res = await this.
|
|
219
|
+
const res = await this._postJsonEncoded('/axis-cgi/audiodevicecontrol.cgi', data, undefined, options);
|
|
186
220
|
const result = VapixAPI_1.audioDeviceRequestSchema.parse(await res.json());
|
|
187
221
|
return result.data.devices.map((device) => ({
|
|
188
222
|
...device,
|
|
@@ -190,52 +224,45 @@ class VapixAPI {
|
|
|
190
224
|
outputs: (device.outputs || []).sort((a, b) => a.id.localeCompare(b.id)),
|
|
191
225
|
}));
|
|
192
226
|
}
|
|
193
|
-
async fetchRemoteDeviceInfo(payload,
|
|
194
|
-
const res = await this.
|
|
195
|
-
const
|
|
196
|
-
|
|
197
|
-
ignoreAttributes: false,
|
|
198
|
-
attributeNamePrefix: '',
|
|
199
|
-
allowBooleanAttributes: true,
|
|
200
|
-
});
|
|
201
|
-
const result = parser.parse(textXml);
|
|
202
|
-
if ((0, utils_1.isNullish)(result.body.data)) {
|
|
227
|
+
async fetchRemoteDeviceInfo(payload, options) {
|
|
228
|
+
const res = await this._postJsonEncoded('/axis-cgi/basicdeviceinfo.cgi', payload, undefined, options);
|
|
229
|
+
const json = await res.json();
|
|
230
|
+
if ((0, utils_1.isNullish)(json.data)) {
|
|
203
231
|
throw new errors_1.NoDeviceInfoError();
|
|
204
232
|
}
|
|
205
|
-
return
|
|
233
|
+
return json.data;
|
|
206
234
|
}
|
|
207
|
-
async getHeaders(
|
|
235
|
+
async getHeaders(options) {
|
|
208
236
|
const data = { apiVersion: '1.0', method: 'list' };
|
|
209
|
-
const res = await this.
|
|
237
|
+
const res = await this._postJsonEncoded('/axis-cgi/customhttpheader.cgi', data, undefined, options);
|
|
210
238
|
return zod_1.z.object({ data: zod_1.z.record(zod_1.z.string()) }).parse(await res.json()).data;
|
|
211
239
|
}
|
|
212
|
-
async setHeaders(headers,
|
|
240
|
+
async setHeaders(headers, options) {
|
|
213
241
|
const data = { apiVersion: '1.0', method: 'set', params: headers };
|
|
214
|
-
return this.
|
|
242
|
+
return this._postJsonEncoded('/axis-cgi/customhttpheader.cgi', data, undefined, options);
|
|
215
243
|
}
|
|
216
|
-
async getParameter(paramNames,
|
|
217
|
-
const response = await this.
|
|
244
|
+
async getParameter(paramNames, options) {
|
|
245
|
+
const response = await this._postUrlEncoded('/axis-cgi/param.cgi', {
|
|
218
246
|
action: 'list',
|
|
219
247
|
group: (0, utils_1.arrayToUrl)(paramNames),
|
|
220
|
-
});
|
|
221
|
-
return parseParameters(await response.text());
|
|
248
|
+
}, options);
|
|
249
|
+
return VapixAPI.parseParameters(await response.text());
|
|
222
250
|
}
|
|
223
|
-
async setParameter(params,
|
|
224
|
-
const res = await this.
|
|
251
|
+
async setParameter(params, options) {
|
|
252
|
+
const res = await this._postUrlEncoded('/axis-cgi/param.cgi', {
|
|
225
253
|
...params,
|
|
226
254
|
action: 'update',
|
|
227
|
-
});
|
|
255
|
+
}, options);
|
|
228
256
|
const responseText = await res.text();
|
|
229
257
|
if (responseText.startsWith('# Error')) {
|
|
230
|
-
throw new
|
|
258
|
+
throw new errors_1.SettingParameterError(responseText);
|
|
231
259
|
}
|
|
232
|
-
return true;
|
|
233
260
|
}
|
|
234
|
-
async getGuardTourList(
|
|
261
|
+
async getGuardTourList(options) {
|
|
235
262
|
const gTourList = new Array();
|
|
236
|
-
const response = await this.getParameter('GuardTour',
|
|
263
|
+
const response = await this.getParameter('GuardTour', options);
|
|
237
264
|
for (let i = 0; i < 20; i++) {
|
|
238
|
-
const gTourBaseName = '
|
|
265
|
+
const gTourBaseName = 'GuardTour.G' + i;
|
|
239
266
|
if (gTourBaseName + '.CamNbr' in response) {
|
|
240
267
|
const gTour = {
|
|
241
268
|
id: gTourBaseName,
|
|
@@ -247,7 +274,7 @@ class VapixAPI {
|
|
|
247
274
|
tour: [],
|
|
248
275
|
};
|
|
249
276
|
for (let j = 0; j < 100; j++) {
|
|
250
|
-
const tourBaseName = '
|
|
277
|
+
const tourBaseName = 'GuardTour.G' + i + '.Tour.T' + j;
|
|
251
278
|
if (tourBaseName + '.MoveSpeed' in response) {
|
|
252
279
|
const tour = {
|
|
253
280
|
moveSpeed: response[tourBaseName + '.MoveSpeed'],
|
|
@@ -265,18 +292,18 @@ class VapixAPI {
|
|
|
265
292
|
break;
|
|
266
293
|
}
|
|
267
294
|
}
|
|
268
|
-
return gTourList;
|
|
295
|
+
return VapixAPI_1.guardTourSchema.parse(gTourList);
|
|
269
296
|
}
|
|
270
|
-
setGuardTourEnabled(
|
|
271
|
-
const
|
|
272
|
-
|
|
273
|
-
return this.setParameter(
|
|
297
|
+
setGuardTourEnabled(guardTourId, enable, options) {
|
|
298
|
+
const params = {};
|
|
299
|
+
params[guardTourId + '.Running'] = enable ? 'yes' : 'no';
|
|
300
|
+
return this.setParameter(params, options);
|
|
274
301
|
}
|
|
275
|
-
async getPTZPresetList(channel,
|
|
276
|
-
const res = await this.
|
|
302
|
+
async getPTZPresetList(channel, options) {
|
|
303
|
+
const res = await this._postUrlEncoded('/axis-cgi/com/ptz.cgi', {
|
|
277
304
|
query: 'presetposcam',
|
|
278
|
-
camera: channel
|
|
279
|
-
});
|
|
305
|
+
camera: channel,
|
|
306
|
+
}, options);
|
|
280
307
|
const text = await res.text();
|
|
281
308
|
const lines = text.split(/[\r\n]/);
|
|
282
309
|
const positions = [];
|
|
@@ -289,68 +316,111 @@ class VapixAPI {
|
|
|
289
316
|
}
|
|
290
317
|
}
|
|
291
318
|
}
|
|
292
|
-
return positions;
|
|
319
|
+
return zod_1.z.array(zod_1.z.string()).parse(positions);
|
|
293
320
|
}
|
|
294
|
-
async listPTZ(camera,
|
|
321
|
+
async listPTZ(camera, options) {
|
|
295
322
|
const url = `/axis-cgi/com/ptz.cgi`;
|
|
296
|
-
const response = await this.
|
|
323
|
+
const response = await this._postUrlEncoded(url, {
|
|
297
324
|
camera,
|
|
298
325
|
query: 'presetposcamdata',
|
|
299
326
|
format: 'json',
|
|
300
|
-
});
|
|
327
|
+
}, options);
|
|
301
328
|
const text = await response.text();
|
|
302
329
|
if (text === '') {
|
|
303
330
|
throw new errors_1.PtzNotSupportedError();
|
|
304
331
|
}
|
|
305
|
-
return parseCameraPtzResponse(text)[camera] ?? [];
|
|
332
|
+
return VapixAPI.parseCameraPtzResponse(text)[camera] ?? [];
|
|
306
333
|
}
|
|
307
|
-
async listPtzVideoSourceOverview(
|
|
308
|
-
const response = await this.
|
|
334
|
+
async listPtzVideoSourceOverview(options) {
|
|
335
|
+
const response = await this._postUrlEncoded('/axis-cgi/com/ptz.cgi', {
|
|
309
336
|
query: 'presetposall',
|
|
310
337
|
format: 'json',
|
|
311
|
-
});
|
|
338
|
+
}, options);
|
|
312
339
|
const text = await response.text();
|
|
313
340
|
if (text === '') {
|
|
314
341
|
throw new errors_1.PtzNotSupportedError();
|
|
315
342
|
}
|
|
316
|
-
const data = parseCameraPtzResponse(text);
|
|
343
|
+
const data = VapixAPI.parseCameraPtzResponse(text);
|
|
317
344
|
const res = {};
|
|
318
345
|
Object.keys(data)
|
|
319
346
|
.map(Number)
|
|
320
347
|
.forEach((camera) => {
|
|
321
|
-
|
|
322
|
-
|
|
348
|
+
const item = data[camera];
|
|
349
|
+
if (item !== undefined) {
|
|
350
|
+
res[camera - 1] = item.map(({ data: itemData, ...d }) => d);
|
|
323
351
|
}
|
|
324
352
|
});
|
|
325
|
-
return res;
|
|
353
|
+
return VapixAPI_1.ptzOverviewSchema.parse(res);
|
|
326
354
|
}
|
|
327
|
-
goToPreset(channel, presetName,
|
|
328
|
-
return this.
|
|
355
|
+
goToPreset(channel, presetName, options) {
|
|
356
|
+
return this._postUrlEncoded('/axis-cgi/com/ptz.cgi', {
|
|
329
357
|
camera: channel.toString(),
|
|
330
358
|
gotoserverpresetname: presetName,
|
|
331
|
-
});
|
|
359
|
+
}, options);
|
|
332
360
|
}
|
|
333
|
-
async getPtzPosition(camera,
|
|
334
|
-
const res = await this.
|
|
361
|
+
async getPtzPosition(camera, options) {
|
|
362
|
+
const res = await this._postUrlEncoded('/axis-cgi/com/ptz.cgi', {
|
|
335
363
|
query: 'position',
|
|
336
364
|
camera: camera.toString(),
|
|
337
|
-
});
|
|
338
|
-
const params = parseParameters(await res.text());
|
|
339
|
-
return {
|
|
365
|
+
}, options);
|
|
366
|
+
const params = VapixAPI.parseParameters(await res.text());
|
|
367
|
+
return VapixAPI_1.cameraPTZItemDataSchema.parse({
|
|
340
368
|
pan: Number(params.pan),
|
|
341
369
|
tilt: Number(params.tilt),
|
|
342
370
|
zoom: Number(params.zoom),
|
|
343
|
-
};
|
|
344
|
-
}
|
|
345
|
-
async getInputState(port, proxy = null) {
|
|
346
|
-
const response = await (await this.getUrlEncoded(proxy, '/axis-cgi/io/port.cgi', { checkactive: port.toString() })).text();
|
|
347
|
-
return response.split('=')[1]?.indexOf('active') === 0;
|
|
371
|
+
});
|
|
348
372
|
}
|
|
349
|
-
async
|
|
350
|
-
|
|
373
|
+
async getPorts(options) {
|
|
374
|
+
const res = await this._postJsonEncoded('/axis-cgi/io/portmanagement.cgi', {
|
|
375
|
+
apiVersion: '1.0',
|
|
376
|
+
context: '',
|
|
377
|
+
method: 'getPorts',
|
|
378
|
+
}, undefined, options);
|
|
379
|
+
const portResponseParsed = VapixAPI_1.getPortsResponseSchema.parse(await res.json());
|
|
380
|
+
return portResponseParsed.data.items;
|
|
381
|
+
}
|
|
382
|
+
async setPorts(ports, options) {
|
|
383
|
+
await this._postJsonEncoded('/axis-cgi/io/portmanagement.cgi', {
|
|
384
|
+
apiVersion: '1.0',
|
|
385
|
+
context: '',
|
|
386
|
+
method: 'setPorts',
|
|
387
|
+
params: { ports },
|
|
388
|
+
}, undefined, options);
|
|
389
|
+
}
|
|
390
|
+
async setPortStateSequence(port, sequence, options) {
|
|
391
|
+
await this._postJsonEncoded('/axis-cgi/io/portmanagement.cgi', {
|
|
392
|
+
apiVersion: '1.0',
|
|
393
|
+
context: '',
|
|
394
|
+
method: 'setStateSequence',
|
|
395
|
+
params: { port, sequence },
|
|
396
|
+
}, undefined, options);
|
|
397
|
+
}
|
|
398
|
+
async addCameraUser(username, pass, sgrp, comment, options) {
|
|
399
|
+
return await this._postUrlEncoded('/axis-cgi/pwdgrp.cgi', {
|
|
400
|
+
action: 'add',
|
|
401
|
+
user: username,
|
|
402
|
+
pwd: pass,
|
|
403
|
+
grp: 'users',
|
|
404
|
+
sgrp,
|
|
405
|
+
comment,
|
|
406
|
+
}, options);
|
|
407
|
+
}
|
|
408
|
+
async getCameraUsers(options) {
|
|
409
|
+
const res = await this._postUrlEncoded('/axis-cgi/pwdgrp.cgi', {
|
|
410
|
+
action: 'get',
|
|
411
|
+
}, options);
|
|
412
|
+
return await res.text();
|
|
413
|
+
}
|
|
414
|
+
async editCameraUser(username, pass, options) {
|
|
415
|
+
return await this._postUrlEncoded('/axis-cgi/pwdgrp.cgi', {
|
|
416
|
+
action: 'update',
|
|
417
|
+
user: username,
|
|
418
|
+
pwd: pass,
|
|
419
|
+
}, options);
|
|
351
420
|
}
|
|
352
|
-
async getApplicationList(
|
|
353
|
-
const
|
|
421
|
+
async getApplicationList(options) {
|
|
422
|
+
const agent = this.getClient(options?.proxyParams);
|
|
423
|
+
const res = await agent.get({ path: '/axis-cgi/applications/list.cgi', timeout: options?.timeout });
|
|
354
424
|
const xml = await res.text();
|
|
355
425
|
const parser = new fast_xml_parser_1.XMLParser({
|
|
356
426
|
ignoreAttributes: false,
|
|
@@ -358,122 +428,148 @@ class VapixAPI {
|
|
|
358
428
|
allowBooleanAttributes: true,
|
|
359
429
|
});
|
|
360
430
|
const result = parser.parse(xml);
|
|
361
|
-
|
|
431
|
+
let apps = result.reply.application ?? [];
|
|
432
|
+
if (!Array.isArray(apps)) {
|
|
433
|
+
apps = [apps];
|
|
434
|
+
}
|
|
435
|
+
const appList = apps.map((app) => {
|
|
362
436
|
return {
|
|
363
437
|
...app,
|
|
364
438
|
appId: VapixAPI_1.APP_IDS.find((id) => id.toLowerCase() === app.Name.toLowerCase()) ?? null,
|
|
365
439
|
};
|
|
366
440
|
});
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
441
|
+
return VapixAPI_1.applicationListSchema.parse(appList);
|
|
442
|
+
}
|
|
443
|
+
async startApplication(applicationId, options) {
|
|
444
|
+
const agent = this.getClient(options?.proxyParams);
|
|
445
|
+
const res = await agent.get({
|
|
446
|
+
path: '/axis-cgi/applications/control.cgi',
|
|
447
|
+
parameters: {
|
|
448
|
+
package: applicationId.toLowerCase(),
|
|
449
|
+
action: 'start',
|
|
450
|
+
},
|
|
451
|
+
timeout: options?.timeout,
|
|
372
452
|
});
|
|
373
453
|
const text = (await res.text()).trim().toLowerCase();
|
|
374
454
|
if (text !== 'ok' && !(text.startsWith('error:') && text.substring(7) === '6')) {
|
|
375
|
-
throw new errors_1.ApplicationAPIError('START',
|
|
455
|
+
throw new errors_1.ApplicationAPIError('START', text);
|
|
376
456
|
}
|
|
377
457
|
}
|
|
378
|
-
async restartApplication(
|
|
379
|
-
const
|
|
380
|
-
|
|
381
|
-
|
|
458
|
+
async restartApplication(applicationId, options) {
|
|
459
|
+
const agent = this.getClient(options?.proxyParams);
|
|
460
|
+
const res = await agent.get({
|
|
461
|
+
path: '/axis-cgi/applications/control.cgi',
|
|
462
|
+
parameters: {
|
|
463
|
+
package: applicationId.toLowerCase(),
|
|
464
|
+
action: 'restart',
|
|
465
|
+
},
|
|
466
|
+
timeout: options?.timeout,
|
|
382
467
|
});
|
|
383
468
|
const text = (await res.text()).trim().toLowerCase();
|
|
384
469
|
if (text !== 'ok') {
|
|
385
|
-
throw new errors_1.ApplicationAPIError('RESTART',
|
|
470
|
+
throw new errors_1.ApplicationAPIError('RESTART', text);
|
|
386
471
|
}
|
|
387
472
|
}
|
|
388
|
-
async stopApplication(
|
|
389
|
-
const
|
|
390
|
-
|
|
391
|
-
|
|
473
|
+
async stopApplication(applicationId, options) {
|
|
474
|
+
const agent = this.getClient(options?.proxyParams);
|
|
475
|
+
const res = await agent.get({
|
|
476
|
+
path: '/axis-cgi/applications/control.cgi',
|
|
477
|
+
parameters: {
|
|
478
|
+
package: applicationId.toLowerCase(),
|
|
479
|
+
action: 'stop',
|
|
480
|
+
},
|
|
481
|
+
timeout: options?.timeout,
|
|
392
482
|
});
|
|
393
483
|
const text = (await res.text()).trim().toLowerCase();
|
|
394
484
|
if (text !== 'ok' && !(text.startsWith('error:') && text.substring(7) === '6')) {
|
|
395
|
-
throw new errors_1.ApplicationAPIError('STOP',
|
|
485
|
+
throw new errors_1.ApplicationAPIError('STOP', text);
|
|
396
486
|
}
|
|
397
487
|
}
|
|
398
|
-
async installApplication(data, fileName) {
|
|
399
|
-
const formData = new
|
|
488
|
+
async installApplication(data, fileName, options) {
|
|
489
|
+
const formData = new this.CustomFormData();
|
|
400
490
|
formData.append('packfil', data, fileName);
|
|
401
|
-
const
|
|
402
|
-
|
|
491
|
+
const agent = this.getClient(options?.proxyParams);
|
|
492
|
+
const res = await agent.post({
|
|
493
|
+
path: '/axis-cgi/applications/upload.cgi',
|
|
494
|
+
data: formData,
|
|
495
|
+
headers: {
|
|
496
|
+
contentType: 'application/octet-stream',
|
|
497
|
+
},
|
|
498
|
+
timeout: options?.timeout ?? 120000,
|
|
403
499
|
});
|
|
404
500
|
if (!res.ok) {
|
|
405
|
-
throw new
|
|
501
|
+
throw new errors_1.ErrorWithResponse(res);
|
|
406
502
|
}
|
|
407
503
|
const text = await res.text();
|
|
408
504
|
if (text.length > 5) {
|
|
409
|
-
throw new
|
|
505
|
+
throw new errors_1.ApplicationAPIError('INSTALL', text);
|
|
410
506
|
}
|
|
411
507
|
}
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
const
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
params[paramName] = paramValue;
|
|
426
|
-
}
|
|
427
|
-
}
|
|
428
|
-
return params;
|
|
429
|
-
};
|
|
430
|
-
const parseCameraPtzResponse = (response) => {
|
|
431
|
-
const json = JSON.parse(response);
|
|
432
|
-
const parsed = {};
|
|
433
|
-
Object.keys(json).forEach((key) => {
|
|
434
|
-
if (!key.startsWith('Camera ')) {
|
|
435
|
-
return;
|
|
436
|
-
}
|
|
437
|
-
const camera = Number(key.replace('Camera ', ''));
|
|
438
|
-
if (json[key].presets !== undefined) {
|
|
439
|
-
parsed[camera] = parsePtz(json[key].presets);
|
|
440
|
-
}
|
|
441
|
-
});
|
|
442
|
-
return parsed;
|
|
443
|
-
};
|
|
444
|
-
const parsePtz = (parsed) => {
|
|
445
|
-
const res = [];
|
|
446
|
-
parsed.forEach((value) => {
|
|
447
|
-
const delimiterPos = value.indexOf('=');
|
|
448
|
-
if (delimiterPos === -1) {
|
|
449
|
-
return;
|
|
450
|
-
}
|
|
451
|
-
if (!value.startsWith('presetposno')) {
|
|
452
|
-
return;
|
|
453
|
-
}
|
|
454
|
-
const id = Number(value.substring(11, delimiterPos));
|
|
455
|
-
if (Number.isNaN(id)) {
|
|
456
|
-
return;
|
|
508
|
+
static parseParameters = (response) => {
|
|
509
|
+
const params = {};
|
|
510
|
+
const lines = response.split(/[\r\n]/);
|
|
511
|
+
for (const line of lines) {
|
|
512
|
+
if (line.length === 0 || line.substring(0, 7) === '# Error') {
|
|
513
|
+
continue;
|
|
514
|
+
}
|
|
515
|
+
const delimiterPos = line.indexOf('=');
|
|
516
|
+
if (delimiterPos !== -1) {
|
|
517
|
+
const paramName = line.substring(0, delimiterPos).replace('root.', '');
|
|
518
|
+
const paramValue = line.substring(delimiterPos + 1);
|
|
519
|
+
params[paramName] = paramValue;
|
|
520
|
+
}
|
|
457
521
|
}
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
522
|
+
return params;
|
|
523
|
+
};
|
|
524
|
+
static parseCameraPtzResponse = (response) => {
|
|
525
|
+
const json = JSON.parse(response);
|
|
526
|
+
const parsed = {};
|
|
527
|
+
Object.keys(json).forEach((key) => {
|
|
528
|
+
if (!key.startsWith('Camera ')) {
|
|
529
|
+
return;
|
|
530
|
+
}
|
|
531
|
+
const camera = Number(key.replace('Camera ', ''));
|
|
532
|
+
if (json[key].presets !== undefined) {
|
|
533
|
+
parsed[camera] = VapixAPI.parsePtz(json[key].presets);
|
|
465
534
|
}
|
|
466
|
-
return 0;
|
|
467
|
-
};
|
|
468
|
-
res.push({
|
|
469
|
-
id,
|
|
470
|
-
name: data[0] ?? 'Preset ' + id,
|
|
471
|
-
data: {
|
|
472
|
-
pan: getValue('pan'),
|
|
473
|
-
tilt: getValue('tilt'),
|
|
474
|
-
zoom: getValue('zoom'),
|
|
475
|
-
},
|
|
476
535
|
});
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
536
|
+
return parsed;
|
|
537
|
+
};
|
|
538
|
+
static parsePtz = (parsed) => {
|
|
539
|
+
const res = [];
|
|
540
|
+
parsed.forEach((value) => {
|
|
541
|
+
const delimiterPos = value.indexOf('=');
|
|
542
|
+
if (delimiterPos === -1) {
|
|
543
|
+
return;
|
|
544
|
+
}
|
|
545
|
+
if (!value.startsWith('presetposno')) {
|
|
546
|
+
return;
|
|
547
|
+
}
|
|
548
|
+
const id = Number(value.substring(11, delimiterPos));
|
|
549
|
+
if (Number.isNaN(id)) {
|
|
550
|
+
return;
|
|
551
|
+
}
|
|
552
|
+
const data = value.substring(delimiterPos + 1).split(':');
|
|
553
|
+
const getValue = (valueName) => {
|
|
554
|
+
for (const d of data) {
|
|
555
|
+
const p = d.split('=');
|
|
556
|
+
if (p[0] === valueName) {
|
|
557
|
+
return Number(p[1]);
|
|
558
|
+
}
|
|
559
|
+
}
|
|
560
|
+
return 0;
|
|
561
|
+
};
|
|
562
|
+
res.push({
|
|
563
|
+
id,
|
|
564
|
+
name: data[0] ?? 'Preset ' + id,
|
|
565
|
+
data: {
|
|
566
|
+
pan: getValue('pan'),
|
|
567
|
+
tilt: getValue('tilt'),
|
|
568
|
+
zoom: getValue('zoom'),
|
|
569
|
+
},
|
|
570
|
+
});
|
|
571
|
+
});
|
|
572
|
+
return res;
|
|
573
|
+
};
|
|
574
|
+
}
|
|
575
|
+
exports.VapixAPI = VapixAPI;
|