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