camstreamerlib 4.0.0-beta.3 → 4.0.0-beta.30

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (192) hide show
  1. package/README.md +8 -2
  2. package/cjs/CamOverlayAPI.d.ts +47 -26
  3. package/cjs/CamOverlayAPI.js +171 -88
  4. package/cjs/CamOverlayDrawingAPI.d.ts +2 -47
  5. package/cjs/CamOverlayDrawingAPI.js +6 -3
  6. package/cjs/CamOverlayPainter/Frame.d.ts +8 -37
  7. package/cjs/CamOverlayPainter/Frame.js +33 -0
  8. package/cjs/CamOverlayPainter/Painter.d.ts +16 -10
  9. package/cjs/CamOverlayPainter/Painter.js +6 -5
  10. package/cjs/CamOverlayPainter/ResourceManager.d.ts +3 -2
  11. package/cjs/CamOverlayPainter/ResourceManager.js +8 -11
  12. package/cjs/CamScripterAPI.d.ts +33 -16
  13. package/cjs/CamScripterAPI.js +50 -41
  14. package/cjs/CamScripterAPICameraEventsGenerator.d.ts +1 -1
  15. package/cjs/CamScripterAPICameraEventsGenerator.js +6 -3
  16. package/cjs/CamStreamerAPI.d.ts +16 -14
  17. package/cjs/CamStreamerAPI.js +32 -32
  18. package/cjs/CamSwitcherAPI.d.ts +42 -37
  19. package/cjs/CamSwitcherAPI.js +123 -114
  20. package/cjs/CamSwitcherEvents.d.ts +1 -1
  21. package/cjs/PlaneTrackerAPI.d.ts +42 -0
  22. package/cjs/PlaneTrackerAPI.js +211 -0
  23. package/cjs/VapixAPI.d.ts +56 -43
  24. package/cjs/VapixAPI.js +305 -216
  25. package/cjs/VapixEvents.d.ts +1 -1
  26. package/cjs/VapixEvents.js +3 -3
  27. package/cjs/errors/errors.d.ts +3 -0
  28. package/cjs/errors/errors.js +8 -1
  29. package/cjs/events/AxisCameraStationEvents.d.ts +5 -4
  30. package/cjs/events/AxisCameraStationEvents.js +23 -18
  31. package/cjs/events/GenetecAgent.d.ts +6 -3
  32. package/cjs/events/GenetecAgent.js +30 -19
  33. package/cjs/index.d.ts +14 -1
  34. package/cjs/index.js +23 -2
  35. package/cjs/internal/Digest.js +6 -6
  36. package/cjs/internal/ProxyClient.d.ts +8 -9
  37. package/cjs/internal/ProxyClient.js +25 -29
  38. package/cjs/internal/types.d.ts +42 -0
  39. package/cjs/internal/types.js +2 -0
  40. package/cjs/internal/utils.d.ts +4 -1
  41. package/cjs/internal/utils.js +22 -3
  42. package/cjs/internal/versionCompare.d.ts +2 -2
  43. package/cjs/node/DefaultClient.d.ts +5 -6
  44. package/cjs/node/DefaultClient.js +12 -14
  45. package/cjs/node/HttpRequestSender.d.ts +1 -0
  46. package/cjs/node/HttpRequestSender.js +13 -3
  47. package/cjs/node/HttpServer.js +1 -1
  48. package/cjs/node/WsClient.d.ts +2 -1
  49. package/cjs/node/WsEventClient.d.ts +1 -1
  50. package/cjs/node/index.d.ts +2 -0
  51. package/cjs/node/index.js +18 -1
  52. package/cjs/types/CamOverlayAPI/CamOverlayAPI.d.ts +3073 -0
  53. package/cjs/types/CamOverlayAPI/CamOverlayAPI.js +127 -0
  54. package/cjs/types/CamOverlayAPI/accuweatherSchema.d.ts +114 -0
  55. package/cjs/types/CamOverlayAPI/accuweatherSchema.js +50 -0
  56. package/cjs/types/CamOverlayAPI/customGraphicsSchema.d.ts +783 -0
  57. package/cjs/types/CamOverlayAPI/customGraphicsSchema.js +75 -0
  58. package/cjs/types/CamOverlayAPI/imagesSchema.d.ts +122 -0
  59. package/cjs/types/CamOverlayAPI/imagesSchema.js +12 -0
  60. package/cjs/types/CamOverlayAPI/index.d.ts +9 -0
  61. package/cjs/types/CamOverlayAPI/index.js +25 -0
  62. package/cjs/types/CamOverlayAPI/infotickerSchema.d.ts +130 -0
  63. package/cjs/types/CamOverlayAPI/infotickerSchema.js +29 -0
  64. package/cjs/types/CamOverlayAPI/pipSchema.d.ts +166 -0
  65. package/cjs/types/CamOverlayAPI/pipSchema.js +42 -0
  66. package/cjs/types/CamOverlayAPI/ptzCompassSchema.d.ts +126 -0
  67. package/cjs/types/CamOverlayAPI/ptzCompassSchema.js +28 -0
  68. package/cjs/types/CamOverlayAPI/ptzSchema.d.ts +146 -0
  69. package/cjs/types/CamOverlayAPI/ptzSchema.js +15 -0
  70. package/cjs/types/CamOverlayAPI/screenSharingSchema.d.ts +79 -0
  71. package/cjs/types/CamOverlayAPI/screenSharingSchema.js +11 -0
  72. package/cjs/types/CamOverlayAPI/webCameraSharingSchema.d.ts +79 -0
  73. package/cjs/types/CamOverlayAPI/webCameraSharingSchema.js +11 -0
  74. package/cjs/types/CamOverlayDrawingAPI.d.ts +58 -0
  75. package/cjs/types/CamOverlayDrawingAPI.js +2 -0
  76. package/cjs/types/CamOverlayPainter.d.ts +74 -0
  77. package/cjs/types/CamOverlayPainter.js +2 -0
  78. package/cjs/types/CamScripterAPI.d.ts +82 -17
  79. package/cjs/types/CamScripterAPI.js +22 -7
  80. package/cjs/types/CamStreamerAPI.d.ts +16 -5
  81. package/cjs/types/CamStreamerAPI.js +5 -1
  82. package/cjs/types/CamSwitcherAPI.d.ts +5 -5
  83. package/cjs/types/CamSwitcherEvents.d.ts +77 -0
  84. package/cjs/types/CamSwitcherEvents.js +8 -0
  85. package/cjs/types/PlaneTrackerAPI.d.ts +8 -0
  86. package/cjs/types/PlaneTrackerAPI.js +2 -0
  87. package/cjs/types/VapixAPI.d.ts +636 -519
  88. package/cjs/types/VapixAPI.js +62 -24
  89. package/cjs/types/common.d.ts +14 -5
  90. package/cjs/web/DefaultClient.d.ts +5 -5
  91. package/cjs/web/DefaultClient.js +22 -10
  92. package/cjs/web/WsClient.js +2 -2
  93. package/esm/CamOverlayAPI.d.ts +47 -26
  94. package/esm/CamOverlayAPI.js +169 -86
  95. package/esm/CamOverlayDrawingAPI.d.ts +2 -47
  96. package/esm/CamOverlayDrawingAPI.js +6 -3
  97. package/esm/CamOverlayPainter/Frame.d.ts +8 -37
  98. package/esm/CamOverlayPainter/Frame.js +33 -0
  99. package/esm/CamOverlayPainter/Painter.d.ts +16 -10
  100. package/esm/CamOverlayPainter/Painter.js +5 -3
  101. package/esm/CamOverlayPainter/ResourceManager.d.ts +3 -2
  102. package/esm/CamOverlayPainter/ResourceManager.js +7 -11
  103. package/esm/CamScripterAPI.d.ts +33 -16
  104. package/esm/CamScripterAPI.js +46 -37
  105. package/esm/CamScripterAPICameraEventsGenerator.d.ts +1 -1
  106. package/esm/CamScripterAPICameraEventsGenerator.js +6 -3
  107. package/esm/CamStreamerAPI.d.ts +16 -14
  108. package/esm/CamStreamerAPI.js +32 -32
  109. package/esm/CamSwitcherAPI.d.ts +42 -37
  110. package/esm/CamSwitcherAPI.js +116 -107
  111. package/esm/CamSwitcherEvents.d.ts +1 -1
  112. package/esm/PlaneTrackerAPI.d.ts +42 -0
  113. package/esm/PlaneTrackerAPI.js +207 -0
  114. package/esm/VapixAPI.d.ts +56 -43
  115. package/esm/VapixAPI.js +297 -208
  116. package/esm/VapixEvents.d.ts +1 -1
  117. package/esm/VapixEvents.js +3 -3
  118. package/esm/errors/errors.d.ts +3 -0
  119. package/esm/errors/errors.js +6 -0
  120. package/esm/events/AxisCameraStationEvents.d.ts +5 -4
  121. package/esm/events/AxisCameraStationEvents.js +18 -13
  122. package/esm/events/GenetecAgent.d.ts +6 -3
  123. package/esm/events/GenetecAgent.js +20 -9
  124. package/esm/index.d.ts +14 -1
  125. package/esm/index.js +14 -1
  126. package/esm/internal/Digest.js +6 -6
  127. package/esm/internal/ProxyClient.d.ts +8 -9
  128. package/esm/internal/ProxyClient.js +25 -29
  129. package/esm/internal/types.d.ts +42 -0
  130. package/esm/internal/types.js +1 -0
  131. package/esm/internal/utils.d.ts +4 -1
  132. package/esm/internal/utils.js +17 -1
  133. package/esm/internal/versionCompare.d.ts +2 -2
  134. package/esm/node/DefaultClient.d.ts +5 -6
  135. package/esm/node/DefaultClient.js +12 -14
  136. package/esm/node/HttpRequestSender.d.ts +1 -0
  137. package/esm/node/HttpRequestSender.js +13 -3
  138. package/esm/node/HttpServer.js +1 -1
  139. package/esm/node/WsClient.d.ts +2 -1
  140. package/esm/node/WsEventClient.d.ts +1 -1
  141. package/esm/node/index.d.ts +2 -0
  142. package/esm/node/index.js +2 -0
  143. package/esm/types/CamOverlayAPI/CamOverlayAPI.d.ts +3073 -0
  144. package/esm/types/CamOverlayAPI/CamOverlayAPI.js +124 -0
  145. package/esm/types/CamOverlayAPI/accuweatherSchema.d.ts +114 -0
  146. package/esm/types/CamOverlayAPI/accuweatherSchema.js +46 -0
  147. package/esm/types/CamOverlayAPI/customGraphicsSchema.d.ts +783 -0
  148. package/esm/types/CamOverlayAPI/customGraphicsSchema.js +71 -0
  149. package/esm/types/CamOverlayAPI/imagesSchema.d.ts +122 -0
  150. package/esm/types/CamOverlayAPI/imagesSchema.js +8 -0
  151. package/esm/types/CamOverlayAPI/index.d.ts +9 -0
  152. package/esm/types/CamOverlayAPI/index.js +9 -0
  153. package/esm/types/CamOverlayAPI/infotickerSchema.d.ts +130 -0
  154. package/esm/types/CamOverlayAPI/infotickerSchema.js +25 -0
  155. package/esm/types/CamOverlayAPI/pipSchema.d.ts +166 -0
  156. package/esm/types/CamOverlayAPI/pipSchema.js +38 -0
  157. package/esm/types/CamOverlayAPI/ptzCompassSchema.d.ts +126 -0
  158. package/esm/types/CamOverlayAPI/ptzCompassSchema.js +24 -0
  159. package/esm/types/CamOverlayAPI/ptzSchema.d.ts +146 -0
  160. package/esm/types/CamOverlayAPI/ptzSchema.js +11 -0
  161. package/esm/types/CamOverlayAPI/screenSharingSchema.d.ts +79 -0
  162. package/esm/types/CamOverlayAPI/screenSharingSchema.js +7 -0
  163. package/esm/types/CamOverlayAPI/webCameraSharingSchema.d.ts +79 -0
  164. package/esm/types/CamOverlayAPI/webCameraSharingSchema.js +7 -0
  165. package/esm/types/CamOverlayDrawingAPI.d.ts +58 -0
  166. package/esm/types/CamOverlayDrawingAPI.js +1 -0
  167. package/esm/types/CamOverlayPainter.d.ts +74 -0
  168. package/esm/types/CamOverlayPainter.js +1 -0
  169. package/esm/types/CamScripterAPI.d.ts +82 -17
  170. package/esm/types/CamScripterAPI.js +21 -6
  171. package/esm/types/CamStreamerAPI.d.ts +16 -5
  172. package/esm/types/CamStreamerAPI.js +4 -0
  173. package/esm/types/CamSwitcherAPI.d.ts +5 -5
  174. package/esm/types/CamSwitcherEvents.d.ts +77 -0
  175. package/esm/types/CamSwitcherEvents.js +8 -0
  176. package/esm/types/PlaneTrackerAPI.d.ts +8 -0
  177. package/esm/types/PlaneTrackerAPI.js +1 -0
  178. package/esm/types/VapixAPI.d.ts +636 -519
  179. package/esm/types/VapixAPI.js +61 -23
  180. package/esm/types/common.d.ts +14 -5
  181. package/esm/web/DefaultClient.d.ts +5 -5
  182. package/esm/web/DefaultClient.js +22 -10
  183. package/esm/web/WsClient.js +2 -2
  184. package/package.json +9 -8
  185. package/cjs/internal/common.d.ts +0 -39
  186. package/cjs/internal/common.js +0 -27
  187. package/cjs/types/CamOverlayAPI.d.ts +0 -188
  188. package/cjs/types/CamOverlayAPI.js +0 -47
  189. package/esm/internal/common.d.ts +0 -39
  190. package/esm/internal/common.js +0 -20
  191. package/esm/types/CamOverlayAPI.d.ts +0 -188
  192. package/esm/types/CamOverlayAPI.js +0 -44
package/README.md CHANGED
@@ -21,19 +21,25 @@ npm install camstreamerlib
21
21
 
22
22
  - [VapixAPI](doc/VapixAPI.md) is a module to access Axis camera VAPIX interface.
23
23
 
24
+ - [VapixEvents](doc/VapixEvents.md) is a module which allows receiving camera events from the VAPIX API.
25
+
24
26
  - [CamStreamerAPI](doc/CamStreamerAPI.md) is a module for easy control of video streaming in the CamStreamer ACAP application (RTMP, HLS, SRT and MPEG-TS protocols).
25
27
 
26
- - [CamOverlayAPI](doc/CamOverlayAPI.md) is a module to access CamOverlay HTTP interface.
28
+ - [CamOverlayAPI](doc/CamOverlayAPI.md) is a module to access CamOverlay API.
27
29
 
28
30
  - [CamOverlayDrawingAPI](doc/CamOverlayDrawingAPI.md) is a module for easy control of CamOverlay drawing API. For more details on supported video overlay drawing functions see https://camstreamer.com/camoverlay-api1
29
31
 
30
32
  - [CamOverlayPainter/](doc/CamOverlayPainter.md) contains three modules which makes easier to use CamOverlayDrawingAPI.
31
33
 
34
+ - [CamScripterAPI](doc/CamScripterAPI.md) is a module to access CamScripter API.
35
+
32
36
  - [CamScripterAPICameraEventsGenerator](doc/CamScripterAPICameraEventsGenerator.md) is a module which allows generating events on an Axis camera. These events can be used for triggers in the Axis camera rule engine (events/actions). It is also an easy way how to integrate events and metadata in VMS systems which support Axis camera events.
33
37
 
38
+ - [CamSwitcherAPI](doc/CamSwitcherAPI.md) is a module to access CamSwitcher API.
39
+
34
40
  - [CamSwitcherEvents](doc/CamSwitcherEvents.md) is a module which allows receiving events from CamSwitcher ACAP application.
35
41
 
36
- - [VapixEvents](doc/VapixEvents.md) is a module which allows receiving camera events from the VAPIX API.
42
+ - [PlaneTrackerAPI](doc/PlaneTrackerAPI.md) is a module to access PlaneTracker API.
37
43
 
38
44
  - [GenetecAgent](doc/GenetecAgent.md) is a module which allows receiving and sending data to Genetec VMS.
39
45
 
@@ -1,31 +1,52 @@
1
1
  /// <reference types="node" />
2
- import { IClient } from './internal/common';
3
- import { CamOverlayOptions, ImageType, TCoordinates, TField, TFile, TFileList, TFileType, TService, TServiceList, TStorage } from './types/CamOverlayAPI';
4
- import { TNetworkCamera } from './types/common';
5
- export declare class CamOverlayAPI {
2
+ /// <reference types="node" />
3
+ import { IClient, TBlobResponse, TResponse } from './internal/types';
4
+ import { THttpRequestOptions, TNetworkCamera } from './types/common';
5
+ import { ImageType, TCoordinates, TFile, TFileList, TFileType, TStorage, TStorageDataList, TWidget } from './types/CamOverlayAPI/CamOverlayAPI';
6
+ import { TField } from './types/CamOverlayAPI';
7
+ export declare const allowedWidgetNames: {
8
+ readonly accuweather: "accuweather";
9
+ readonly infoticker: "infoticker";
10
+ readonly customGraphics: "customGraphics";
11
+ readonly ptzCompass: "ptzCompass";
12
+ readonly images: "images";
13
+ readonly ptz: "ptz";
14
+ readonly pip: "pip";
15
+ readonly screenSharing: "screenSharing";
16
+ readonly web_camera: "web_camera";
17
+ };
18
+ export declare class CamOverlayAPI<Client extends IClient<TResponse> = IClient<TResponse>> {
6
19
  private client;
7
- constructor(options?: CamOverlayOptions | IClient);
8
- checkCameraTime(): Promise<boolean>;
9
- getNetworkCameraList(): Promise<TNetworkCamera[]>;
10
- wsAutoratization(): Promise<string>;
11
- getMjpegStreamImage(mjpegUrl: string): Promise<Blob>;
12
- listFiles(fileType: TFileType): Promise<TFileList>;
13
- uploadFile(fileType: TFileType, file: Blob, fileName: string): Promise<void>;
14
- removeFile(fileType: TFileType, file: TFile): Promise<void>;
15
- getFileStorage(fileType: TFileType): Promise<TStorage>;
16
- updateInfoticker(serviceID: number, text: string): Promise<void>;
17
- setEnabled(serviceID: number, enabled: boolean): Promise<void>;
18
- isEnabled(serviceID: number): Promise<boolean>;
19
- getSingleService(serviceId: number): Promise<TService>;
20
- getServices(): Promise<TService[]>;
21
- updateSingleService(serviceId: number, serviceJson: TService): Promise<void>;
22
- updateServices(servicesJson: TServiceList): Promise<void>;
23
- updateCGText(serviceID: number, fields: TField[]): Promise<void>;
24
- updateCGImagePos(serviceID: number, coordinates?: TCoordinates, x?: number, y?: number): Promise<void>;
25
- updateCGImage(serviceID: number, path: string, coordinates?: TCoordinates, x?: number, y?: number): Promise<void>;
26
- updateCGImageFromData(serviceID: number, imageType: ImageType, imageData: Buffer, coordinates?: TCoordinates, x?: number, y?: number): Promise<void>;
20
+ constructor(client: Client);
21
+ static getBasePath: () => string;
22
+ static getProxyPath: () => string;
23
+ static getFilePreviewPath: (path: string) => string;
24
+ checkCameraTime(options?: THttpRequestOptions): Promise<boolean>;
25
+ getNetworkCameraList(options?: THttpRequestOptions): Promise<TNetworkCamera[]>;
26
+ wsAuthorization(options?: THttpRequestOptions): Promise<string>;
27
+ getMjpegStreamImage(mjpegUrl: string, options?: THttpRequestOptions): Promise<TBlobResponse<Client>>;
28
+ listFiles(fileType: TFileType, options?: THttpRequestOptions): Promise<TFileList>;
29
+ uploadFile(fileType: TFileType, formData: FormData, storage: TStorage, options?: THttpRequestOptions): Promise<void>;
30
+ removeFile(fileType: TFileType, fileParams: TFile, options?: THttpRequestOptions): Promise<void>;
31
+ getFileStorage(fileType: TFileType, options?: THttpRequestOptions): Promise<TStorageDataList>;
32
+ getFilePreviewFromCamera(path: string, options?: THttpRequestOptions): Promise<TBlobResponse<Client>>;
33
+ updateInfoticker(serviceId: number, text: string, options?: THttpRequestOptions): Promise<void>;
34
+ setEnabled(serviceId: number, enabled: boolean, options?: THttpRequestOptions): Promise<void>;
35
+ isEnabled(serviceId: number, options?: THttpRequestOptions): Promise<boolean>;
36
+ getSingleWidget(serviceId: number, options?: THttpRequestOptions): Promise<TWidget>;
37
+ getWidgets(options?: THttpRequestOptions): Promise<TWidget[]>;
38
+ updateSingleWidget(widget: TWidget, options?: THttpRequestOptions): Promise<void>;
39
+ updateWidgets(widgets: TWidget[], options?: THttpRequestOptions): Promise<void>;
40
+ updateCGText(serviceId: number, fields: TField[], options?: THttpRequestOptions): Promise<void>;
41
+ updateCGImagePos(serviceId: number, coordinates?: TCoordinates, x?: number, y?: number, options?: THttpRequestOptions): Promise<void>;
42
+ updateCGImage(serviceId: number, path: string, coordinates?: TCoordinates, x?: number, y?: number, options?: THttpRequestOptions): Promise<void>;
43
+ updateCGImageFromData(serviceId: number, imageType: ImageType, imageData: Buffer, coordinates?: TCoordinates, x?: number, y?: number, options?: THttpRequestOptions): Promise<void>;
27
44
  private promiseCGUpdate;
28
- private get;
29
- private post;
45
+ private _get;
46
+ private _post;
47
+ private _getBlob;
30
48
  private parseBlobResponse;
49
+ private _postUrlEncoded;
50
+ private _postJsonEncoded;
51
+ private getAgent;
31
52
  }
@@ -1,100 +1,152 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.CamOverlayAPI = void 0;
4
- const common_1 = require("./internal/common");
5
- const DefaultClient_1 = require("./node/DefaultClient");
6
- const CamOverlayAPI_1 = require("./types/CamOverlayAPI");
3
+ exports.CamOverlayAPI = exports.allowedWidgetNames = void 0;
4
+ const utils_1 = require("./internal/utils");
7
5
  const errors_1 = require("./errors/errors");
8
- const common_2 = require("./types/common");
6
+ const common_1 = require("./types/common");
7
+ const zod_1 = require("zod");
8
+ const ProxyClient_1 = require("./internal/ProxyClient");
9
+ const CamOverlayAPI_1 = require("./types/CamOverlayAPI/CamOverlayAPI");
10
+ exports.allowedWidgetNames = {
11
+ accuweather: 'accuweather',
12
+ infoticker: 'infoticker',
13
+ customGraphics: 'customGraphics',
14
+ ptzCompass: 'ptzCompass',
15
+ images: 'images',
16
+ ptz: 'ptz',
17
+ pip: 'pip',
18
+ screenSharing: 'screenSharing',
19
+ web_camera: 'web_camera',
20
+ };
21
+ const BASE_PATH = '/local/camoverlay/api';
9
22
  class CamOverlayAPI {
10
23
  client;
11
- constructor(options = {}) {
12
- if ((0, common_1.isClient)(options)) {
13
- this.client = options;
14
- }
15
- else {
16
- this.client = new DefaultClient_1.DefaultClient(options);
17
- }
24
+ constructor(client) {
25
+ this.client = client;
18
26
  }
19
- async checkCameraTime() {
20
- const cameraTime = await this.get('/local/camoverlay/api/camera_time.cgi');
21
- return cameraTime.state;
27
+ static getBasePath = () => BASE_PATH;
28
+ static getProxyPath = () => `${BASE_PATH}/proxy.cgi`;
29
+ static getFilePreviewPath = (path) => `${BASE_PATH}/image.cgi?path=${encodeURIComponent(path)}`;
30
+ async checkCameraTime(options) {
31
+ const response = await this._get({ path: `${BASE_PATH}/camera_time.cgi` }, options);
32
+ return zod_1.z.boolean().parse(response.state);
22
33
  }
23
- async getNetworkCameraList() {
24
- const response = await this.get('/local/camoverlay/api/network_camera_list.cgi');
25
- return common_2.networkCameraListSchema.parse(response.camera_list);
34
+ async getNetworkCameraList(options) {
35
+ const response = await this._get({ path: `${BASE_PATH}/network_camera_list.cgi` }, options);
36
+ return common_1.networkCameraListSchema.parse(response.camera_list);
26
37
  }
27
- async wsAutoratization() {
28
- const response = await this.get(`/local/camoverlay/api/ws_authorization.cgi`);
29
- return response.data;
38
+ async wsAuthorization(options) {
39
+ const response = await this._get({ path: `${BASE_PATH}/ws_authorization.cgi` }, options);
40
+ return CamOverlayAPI_1.WSResponseSchema.parse(response).data;
30
41
  }
31
- async getMjpegStreamImage(mjpegUrl) {
32
- const res = await this.get(`/local/camoverlay/api/fetch_mjpeg_image.cgi?mjpeg_url=${encodeURIComponent(decodeURIComponent(mjpegUrl))}`);
33
- return await this.parseBlobResponse(res);
42
+ async getMjpegStreamImage(mjpegUrl, options) {
43
+ return await this._getBlob({
44
+ path: `${BASE_PATH}/fetch_mjpeg_image.cgi?mjpeg_url=${encodeURIComponent(decodeURIComponent(mjpegUrl))}`,
45
+ }, options);
34
46
  }
35
- async listFiles(fileType) {
36
- const files = await this.get(`/local/camoverlay/api/upload_${fileType}.cgi?action=list`);
47
+ async listFiles(fileType, options) {
48
+ const files = await this._get({
49
+ path: `${BASE_PATH}/upload_${fileType}.cgi`,
50
+ parameters: {
51
+ action: 'list',
52
+ },
53
+ }, options);
37
54
  return CamOverlayAPI_1.fileListSchema.parse(files.list);
38
55
  }
39
- async uploadFile(fileType, file, fileName) {
40
- const formData = new FormData();
41
- formData.append('target', 'SD0');
42
- formData.append('uploadedFile[]', file, fileName);
43
- const path = `/local/camoverlay/api/upload_${fileType}.cgi?action=upload`;
44
- await this.post(path, formData);
56
+ async uploadFile(fileType, formData, storage, options) {
57
+ await this._post({
58
+ path: `${BASE_PATH}/upload_${fileType}.cgi`,
59
+ data: formData,
60
+ parameters: {
61
+ action: 'upload',
62
+ storage: storage,
63
+ },
64
+ }, options);
45
65
  }
46
- async removeFile(fileType, file) {
47
- const path = `/local/camoverlay/api/upload_${fileType}.cgi?action=remove`;
48
- await this.post(path, JSON.stringify(file));
66
+ async removeFile(fileType, fileParams, options) {
67
+ const path = `${BASE_PATH}/upload_${fileType}.cgi`;
68
+ await this._postUrlEncoded(path, {
69
+ action: 'remove',
70
+ ...fileParams,
71
+ }, undefined, options);
72
+ }
73
+ async getFileStorage(fileType, options) {
74
+ const data = await this._get({
75
+ path: `${BASE_PATH}/upload_${fileType}.cgi`,
76
+ parameters: {
77
+ action: 'get_storage',
78
+ },
79
+ }, options);
80
+ if (data.code !== 200) {
81
+ throw new Error('Error occured while fetching file storage data');
82
+ }
83
+ return CamOverlayAPI_1.storageDataListSchema.parse(data.list);
49
84
  }
50
- async getFileStorage(fileType) {
51
- const data = await this.get(`/local/camoverlay/api/upload_${fileType}.cgi?action=get_storage`);
52
- return CamOverlayAPI_1.storageSchema.parse(data);
85
+ async getFilePreviewFromCamera(path, options) {
86
+ return await this._getBlob({ path: CamOverlayAPI.getFilePreviewPath(path) }, options);
53
87
  }
54
- async updateInfoticker(serviceID, text) {
55
- await this.get(`/local/camoverlay/api/infoticker.cgi?service_id=${serviceID}&text=${text}`);
88
+ async updateInfoticker(serviceId, text, options) {
89
+ await this._get({ path: `${BASE_PATH}/infoticker.cgi?service_id=${serviceId}&text=${text}` }, options);
56
90
  }
57
- async setEnabled(serviceID, enabled) {
58
- await this.post(`/local/camoverlay/api/enabled.cgi?id_${serviceID}=${enabled ? 1 : 0}`, '');
91
+ async setEnabled(serviceId, enabled, options) {
92
+ await this._post({ path: `${BASE_PATH}/enabled.cgi?id_${serviceId}=${enabled ? 1 : 0}`, data: '' }, options);
59
93
  }
60
- async isEnabled(serviceID) {
61
- const res = await this.client.get('/local/camoverlay/api/services.cgi?action=get');
94
+ async isEnabled(serviceId, options) {
95
+ const agent = this.getAgent(options?.proxyParams);
96
+ const res = await agent.get({ path: `${BASE_PATH}/services.cgi?action=get`, timeout: options?.timeout });
62
97
  if (res.ok) {
63
98
  const data = JSON.parse(await res.text());
64
99
  for (const service of data.services) {
65
- if (service.id === serviceID) {
100
+ if (service.id === serviceId) {
66
101
  return service.enabled === 1;
67
102
  }
68
103
  }
69
104
  throw new errors_1.ServiceNotFoundError();
70
105
  }
71
106
  else {
72
- throw new Error(await (0, common_1.responseStringify)(res));
107
+ throw new Error(await (0, utils_1.responseStringify)(res));
73
108
  }
74
109
  }
75
- async getSingleService(serviceId) {
76
- const data = await this.get('/local/camoverlay/api/services.cgi', {
77
- action: 'get',
78
- service_id: serviceId.toString(),
79
- });
80
- return CamOverlayAPI_1.serviceSchema.parse(data);
110
+ async getSingleWidget(serviceId, options) {
111
+ const data = await this._get({
112
+ path: `${BASE_PATH}/services.cgi`,
113
+ parameters: {
114
+ action: 'get',
115
+ service_id: serviceId.toString(),
116
+ },
117
+ }, options);
118
+ return CamOverlayAPI_1.widgetsSchema.parse(data);
81
119
  }
82
- async getServices() {
83
- const serviceList = await this.get('/local/camoverlay/api/services.cgi?action=get');
84
- return CamOverlayAPI_1.serviceSchema.parse(serviceList).services;
120
+ async getWidgets(options) {
121
+ const widgetList = await this._get({
122
+ path: `${BASE_PATH}/services.cgi`,
123
+ parameters: {
124
+ action: 'get',
125
+ },
126
+ }, options);
127
+ const widgets = widgetList.services;
128
+ widgets.forEach((widget) => {
129
+ const parsedWidget = CamOverlayAPI_1.widgetsSchema.safeParse(widget);
130
+ if (!parsedWidget.success) {
131
+ console.warn(`[SERVICE SCHEMA MISMATCH]: Service ${widget.name} (${widget.id}) does not match the current schema, or is a hidden service.`);
132
+ }
133
+ });
134
+ return widgets;
85
135
  }
86
- async updateSingleService(serviceId, serviceJson) {
87
- const path = '/local/camoverlay/api/services.cgi';
88
- await this.post(path, JSON.stringify(serviceJson), {
136
+ async updateSingleWidget(widget, options) {
137
+ const path = `${BASE_PATH}/services.cgi`;
138
+ await this._postJsonEncoded(path, JSON.stringify(widget), {
89
139
  action: 'set',
90
- service_id: serviceId.toString(),
91
- });
140
+ service_id: widget.id.toString(),
141
+ }, undefined, options);
92
142
  }
93
- async updateServices(servicesJson) {
94
- const path = '/local/camoverlay/api/services.cgi?action=set';
95
- await this.post(path, JSON.stringify(servicesJson));
143
+ async updateWidgets(widgets, options) {
144
+ const path = `${BASE_PATH}/services.cgi`;
145
+ await this._postJsonEncoded(path, JSON.stringify({ services: widgets }), {
146
+ action: 'set',
147
+ }, undefined, options);
96
148
  }
97
- updateCGText(serviceID, fields) {
149
+ updateCGText(serviceId, fields, options) {
98
150
  const params = {};
99
151
  for (const field of fields) {
100
152
  const name = field.field_name;
@@ -103,74 +155,105 @@ class CamOverlayAPI {
103
155
  params[`${name}_color`] = field.color;
104
156
  }
105
157
  }
106
- return this.promiseCGUpdate(serviceID, 'update_text', params);
158
+ return this.promiseCGUpdate(serviceId, 'update_text', params, undefined, undefined, options);
107
159
  }
108
- updateCGImagePos(serviceID, coordinates = '', x = 0, y = 0) {
160
+ updateCGImagePos(serviceId, coordinates = '', x = 0, y = 0, options) {
109
161
  const params = {
110
162
  coord_system: coordinates,
111
163
  pos_x: x,
112
164
  pos_y: y,
113
165
  };
114
- return this.promiseCGUpdate(serviceID, 'update_image', params);
166
+ return this.promiseCGUpdate(serviceId, 'update_image', params, undefined, undefined, options);
115
167
  }
116
- updateCGImage(serviceID, path, coordinates = '', x = 0, y = 0) {
168
+ updateCGImage(serviceId, path, coordinates = '', x = 0, y = 0, options) {
117
169
  const params = {
118
170
  coord_system: coordinates,
119
171
  pos_x: x,
120
172
  pos_y: y,
121
173
  image: path,
122
174
  };
123
- return this.promiseCGUpdate(serviceID, 'update_image', params);
175
+ return this.promiseCGUpdate(serviceId, 'update_image', params, undefined, undefined, options);
124
176
  }
125
- updateCGImageFromData(serviceID, imageType, imageData, coordinates = '', x = 0, y = 0) {
177
+ updateCGImageFromData(serviceId, imageType, imageData, coordinates = '', x = 0, y = 0, options) {
126
178
  const contentType = imageType === CamOverlayAPI_1.ImageType.PNG ? 'image/png' : 'image/jpeg';
127
179
  const params = {
128
180
  coord_system: coordinates,
129
181
  pos_x: x,
130
182
  pos_y: y,
131
183
  };
132
- return this.promiseCGUpdate(serviceID, 'update_image', params, contentType, imageData);
184
+ return this.promiseCGUpdate(serviceId, 'update_image', params, contentType, imageData, options);
133
185
  }
134
- async promiseCGUpdate(serviceID, action, params = {}, contentType, data) {
135
- const path = `/local/camoverlay/api/customGraphics.cgi`;
186
+ async promiseCGUpdate(serviceId, action, params = {}, contentType, data, options) {
187
+ const path = `${BASE_PATH}/customGraphics.cgi`;
136
188
  let headers = {};
137
189
  if (contentType !== undefined && data) {
138
190
  headers = { 'Content-Type': contentType };
139
191
  }
140
- const res = await this.client.post(path, data ?? '', {
141
- action: action,
142
- service_id: serviceID.toString(),
143
- ...params,
144
- }, headers);
192
+ const agent = this.getAgent(options?.proxyParams);
193
+ const res = await agent.post({
194
+ path,
195
+ data: data ?? '',
196
+ parameters: {
197
+ action: action,
198
+ service_id: serviceId.toString(),
199
+ ...params,
200
+ },
201
+ headers,
202
+ timeout: options?.timeout,
203
+ });
145
204
  if (!res.ok) {
146
- throw new Error(await (0, common_1.responseStringify)(res));
205
+ throw new Error(await (0, utils_1.responseStringify)(res));
147
206
  }
148
207
  }
149
- async get(path, params) {
150
- const res = await this.client.get(path, params);
208
+ async _get(params, options) {
209
+ const agent = this.getAgent(options?.proxyParams);
210
+ const res = await agent.get({ ...params, timeout: options?.timeout });
151
211
  if (res.ok) {
152
- return await res.json();
212
+ return (await res.json());
153
213
  }
154
214
  else {
155
- throw new Error(await (0, common_1.responseStringify)(res));
215
+ throw new Error(await (0, utils_1.responseStringify)(res));
156
216
  }
157
217
  }
158
- async post(path, data, params) {
159
- const res = await this.client.post(path, data, params);
218
+ async _post(params, options) {
219
+ const agent = this.getAgent(options?.proxyParams);
220
+ const res = await agent.post({ ...params, timeout: options?.timeout });
160
221
  if (res.ok) {
161
- return await res.json();
222
+ return (await res.json());
162
223
  }
163
224
  else {
164
- throw new Error(await (0, common_1.responseStringify)(res));
225
+ throw new Error(await (0, utils_1.responseStringify)(res));
226
+ }
227
+ }
228
+ async _getBlob(params, options) {
229
+ const agent = this.getAgent(options?.proxyParams);
230
+ const res = await agent.get({ ...params, timeout: options?.timeout });
231
+ if (res.ok) {
232
+ return await this.parseBlobResponse(res);
233
+ }
234
+ else {
235
+ throw new Error(await (0, utils_1.responseStringify)(res));
165
236
  }
166
237
  }
167
238
  async parseBlobResponse(response) {
168
239
  try {
169
- return await response.blob();
240
+ return (await response.blob());
170
241
  }
171
242
  catch (err) {
172
243
  throw new errors_1.ParsingBlobError(err);
173
244
  }
174
245
  }
246
+ async _postUrlEncoded(path, params, headers, options) {
247
+ const data = (0, utils_1.paramToUrl)(params);
248
+ const baseHeaders = { 'Content-Type': 'application/x-www-form-urlencoded' };
249
+ return this._post({ path, data, headers: { ...baseHeaders, ...headers } }, options);
250
+ }
251
+ async _postJsonEncoded(path, data, parameters, headers, options) {
252
+ const baseHeaders = { 'Accept': 'application/json', 'Content-Type': 'application/json' };
253
+ return this._post({ path, data, parameters, headers: { ...baseHeaders, ...headers } }, options);
254
+ }
255
+ getAgent(proxyParams) {
256
+ return proxyParams ? new ProxyClient_1.ProxyClient(this.client, proxyParams) : this.client;
257
+ }
175
258
  }
176
259
  exports.CamOverlayAPI = CamOverlayAPI;
@@ -1,53 +1,8 @@
1
1
  /// <reference types="node" />
2
2
  /// <reference types="node" />
3
+ /// <reference types="node" />
3
4
  import * as EventEmitter from 'events';
4
- import { WsOptions } from './internal/common';
5
- export type CamOverlayDrawingOptions = WsOptions & {
6
- camera?: number | number[];
7
- zIndex?: number;
8
- };
9
- export type TCairoResponse = {
10
- message: string;
11
- call_id: number;
12
- };
13
- export type TCairoCreateResponse = {
14
- var: string;
15
- call_id: number;
16
- };
17
- export type TUploadImageResponse = {
18
- var: string;
19
- width: number;
20
- height: number;
21
- call_id: number;
22
- };
23
- export type TErrorResponse = {
24
- error: string;
25
- call_id?: number;
26
- };
27
- export type TService = {
28
- id: number;
29
- enabled: number;
30
- schedule: string;
31
- name: string;
32
- identifier: string;
33
- cameraList: number[];
34
- };
35
- export type TServiceList = {
36
- services: TService[];
37
- };
38
- export type TAlign = 'A_RIGHT' | 'A_LEFT' | 'A_CENTER';
39
- export type TextFit = 'TFM_SCALE' | 'TFM_TRUNCATE' | 'TFM_OVERFLOW';
40
- export type TWriteTextParams = [string, string, number, number, number, number, TAlign, TextFit?];
41
- export interface CamOverlayDrawingAPI {
42
- on(event: 'open', listener: () => void): this;
43
- on(event: 'close', listener: () => void): this;
44
- on(event: 'error', listener: (err: Error) => void): this;
45
- on(event: 'message', listener: (msg: string) => void): this;
46
- emit(event: 'open'): boolean;
47
- emit(event: 'close'): boolean;
48
- emit(event: 'error', err: Error): boolean;
49
- emit(event: 'message', msg: string): boolean;
50
- }
5
+ import { CamOverlayDrawingOptions, TCairoCreateResponse, TCairoResponse, TUploadImageResponse, TWriteTextParams } from './types/CamOverlayDrawingAPI';
51
6
  export declare class CamOverlayDrawingAPI extends EventEmitter {
52
7
  private tls;
53
8
  private tlsInsecure;
@@ -124,10 +124,10 @@ class CamOverlayDrawingAPI extends EventEmitter {
124
124
  }
125
125
  if (dataJSON.call_id !== undefined) {
126
126
  if (errorResponse !== undefined) {
127
- this.sendMessages[dataJSON.call_id].reject(new Error(errorResponse.error));
127
+ this.sendMessages[dataJSON.call_id]?.reject(new Error(errorResponse.error));
128
128
  }
129
129
  else {
130
- this.sendMessages[dataJSON.call_id].resolve(dataJSON);
130
+ this.sendMessages[dataJSON.call_id]?.resolve(dataJSON);
131
131
  }
132
132
  delete this.sendMessages[dataJSON.call_id];
133
133
  }
@@ -197,6 +197,9 @@ class CamOverlayDrawingAPI extends EventEmitter {
197
197
  const now = Date.now();
198
198
  for (const callId in this.sendMessages) {
199
199
  const msg = this.sendMessages[callId];
200
+ if (!msg) {
201
+ continue;
202
+ }
200
203
  if (now - msg.sentTimestamp > 10000) {
201
204
  reconnect = true;
202
205
  msg.reject(new Error('Message timeout'));
@@ -223,7 +226,7 @@ class CamOverlayDrawingAPI extends EventEmitter {
223
226
  }
224
227
  reportClose() {
225
228
  for (const callId in this.sendMessages) {
226
- this.sendMessages[callId].reject(new Error('Connection lost'));
229
+ this.sendMessages[callId]?.reject(new Error('Connection lost'));
227
230
  }
228
231
  this.sendMessages = {};
229
232
  this.emit('close');
@@ -1,42 +1,9 @@
1
1
  /// <reference types="node" />
2
2
  import { EventEmitter } from 'events';
3
- import { CamOverlayDrawingAPI, TAlign, TCairoCreateResponse, TUploadImageResponse } from '../CamOverlayDrawingAPI';
4
- import ResourceManager from './ResourceManager';
5
- export type TRgb = [number, number, number];
6
- export type TRgba = [number, number, number, number];
7
- export type TTmf = 'TFM_OVERFLOW' | 'TFM_SCALE' | 'TFM_TRUNCATE';
8
- export type TObjectFitType = 'fill' | 'fit' | 'none';
9
- export type TFrameOptions = {
10
- enabled?: boolean;
11
- x: number;
12
- y: number;
13
- width: number;
14
- height: number;
15
- text?: string;
16
- fontColor?: TRgb;
17
- font?: string;
18
- bgColor?: TRgba;
19
- bgImage?: string;
20
- bgType?: TObjectFitType;
21
- borderRadius?: number;
22
- borderWidth?: number;
23
- borderColor?: TRgba;
24
- customDraw?: TDrawingCallback;
25
- layer?: number;
26
- };
27
- export type TFrameInfo = {
28
- width: number;
29
- height: number;
30
- };
31
- export type TDrawingCallback = (cod: CamOverlayDrawingAPI, cairo: string, info: TFrameInfo) => Promise<void>;
32
- export interface Frame {
33
- on(event: 'open', listener: () => void): this;
34
- on(event: 'close', listener: () => void): this;
35
- on(event: 'layoutChanged', listener: () => void): this;
36
- emit(event: 'open'): boolean;
37
- emit(event: 'close'): boolean;
38
- emit(event: 'layoutChanged'): boolean;
39
- }
3
+ import { CamOverlayDrawingAPI } from '../CamOverlayDrawingAPI';
4
+ import { TAlign, TCairoCreateResponse, TUploadImageResponse } from '../types/CamOverlayDrawingAPI';
5
+ import { ResourceManager } from './ResourceManager';
6
+ import { TBg, TBorder, TDrawingCallback, TFrame, TFrameOptions, TObjectFitType, TRgb, TRgba, TText, TTmf } from '../types/CamOverlayPainter';
40
7
  export declare class Frame extends EventEmitter {
41
8
  protected enabled: boolean;
42
9
  protected posX: number;
@@ -64,17 +31,21 @@ export declare class Frame extends EventEmitter {
64
31
  disable(): void;
65
32
  setFramePosition(x: number, y: number): void;
66
33
  setFrameSize(width: number, height: number): void;
34
+ getFrameInfo(): TFrame;
67
35
  setText(text: string, align: TAlign, textType?: TTmf, fontColor?: TRgb): void;
68
36
  setFontColor(fontColor: TRgb): void;
69
37
  setFont(fontName: string): void;
70
38
  setFontData(fontData: TCairoCreateResponse): void;
39
+ getTextInfo(): TText;
71
40
  setBgColor(color: TRgba): void;
72
41
  setBgImage(imageName: string, type?: TObjectFitType): void;
73
42
  setBgImageData(imageData: TUploadImageResponse, type?: TObjectFitType): void;
74
43
  setBgType(type: TObjectFitType): void;
44
+ getBgInfo(): TBg;
75
45
  setBorderRadius(radius: number): void;
76
46
  setBorderWidth(width: number): void;
77
47
  setBorderColor(color: TRgba): void;
48
+ getBorderInfo(): TBorder;
78
49
  setCustomDraw(customDraw: TDrawingCallback): void;
79
50
  resetFont(): void;
80
51
  resetBgColor(): void;