camstreamerlib 4.0.0-beta.1 → 4.0.0-beta.11

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 (227) hide show
  1. package/README.md +5 -1
  2. package/cjs/CamOverlayAPI.d.ts +629 -0
  3. package/cjs/CamOverlayAPI.js +255 -0
  4. package/{CamOverlayDrawingAPI.d.ts → cjs/CamOverlayDrawingAPI.d.ts} +1 -1
  5. package/cjs/CamOverlayDrawingAPI.js +235 -0
  6. package/cjs/CamOverlayPainter/Frame.js +301 -0
  7. package/{CamOverlayPainter → cjs/CamOverlayPainter}/Painter.d.ts +14 -3
  8. package/cjs/CamOverlayPainter/Painter.js +171 -0
  9. package/cjs/CamOverlayPainter/ResourceManager.js +46 -0
  10. package/{CamScripterAPI.d.ts → cjs/CamScripterAPI.d.ts} +5 -5
  11. package/cjs/CamScripterAPI.js +64 -0
  12. package/{CamScripterAPICameraEventsGenerator.d.ts → cjs/CamScripterAPICameraEventsGenerator.d.ts} +1 -1
  13. package/cjs/CamScripterAPICameraEventsGenerator.js +162 -0
  14. package/{CamStreamerAPI.d.ts → cjs/CamStreamerAPI.d.ts} +5 -5
  15. package/cjs/CamStreamerAPI.js +59 -0
  16. package/{CamSwitcherAPI.d.ts → cjs/CamSwitcherAPI.d.ts} +10 -6
  17. package/cjs/CamSwitcherAPI.js +351 -0
  18. package/{CamSwitcherEvents.d.ts → cjs/CamSwitcherEvents.d.ts} +2 -2
  19. package/cjs/CamSwitcherEvents.js +67 -0
  20. package/cjs/CreatePackage.js +106 -0
  21. package/{VapixAPI.d.ts → cjs/VapixAPI.d.ts} +18 -6
  22. package/cjs/VapixAPI.js +479 -0
  23. package/{VapixEvents.d.ts → cjs/VapixEvents.d.ts} +1 -1
  24. package/cjs/VapixEvents.js +88 -0
  25. package/{errors → cjs/errors}/errors.d.ts +3 -0
  26. package/cjs/errors/errors.js +86 -0
  27. package/{events → cjs/events}/AxisCameraStationEvents.d.ts +3 -2
  28. package/cjs/events/AxisCameraStationEvents.js +48 -0
  29. package/cjs/events/GenetecAgent.js +123 -0
  30. package/cjs/index.d.ts +14 -0
  31. package/cjs/index.js +35 -0
  32. package/cjs/internal/Digest.js +42 -0
  33. package/cjs/internal/ProxyClient.d.ts +11 -0
  34. package/cjs/internal/ProxyClient.js +46 -0
  35. package/cjs/internal/constants.js +4 -0
  36. package/cjs/internal/transformers.js +32 -0
  37. package/cjs/internal/types.d.ts +35 -0
  38. package/cjs/internal/types.js +2 -0
  39. package/{internal → cjs/internal}/utils.d.ts +5 -1
  40. package/cjs/internal/utils.js +69 -0
  41. package/{internal → cjs/internal}/versionCompare.d.ts +2 -2
  42. package/cjs/internal/versionCompare.js +53 -0
  43. package/cjs/models/CamOverlayAPI/accuweatherSchema.d.ts +84 -0
  44. package/cjs/models/CamOverlayAPI/accuweatherSchema.js +48 -0
  45. package/cjs/models/CamOverlayAPI/constants.d.ts +11 -0
  46. package/cjs/models/CamOverlayAPI/constants.js +14 -0
  47. package/cjs/models/CamOverlayAPI/customGraphicsSchema.d.ts +699 -0
  48. package/cjs/models/CamOverlayAPI/customGraphicsSchema.js +73 -0
  49. package/cjs/models/CamOverlayAPI/fileSchema.d.ts +28 -0
  50. package/cjs/models/CamOverlayAPI/fileSchema.js +17 -0
  51. package/cjs/models/CamOverlayAPI/imagesSchema.d.ts +95 -0
  52. package/cjs/models/CamOverlayAPI/imagesSchema.js +10 -0
  53. package/cjs/models/CamOverlayAPI/index.d.ts +13 -0
  54. package/cjs/models/CamOverlayAPI/index.js +29 -0
  55. package/cjs/models/CamOverlayAPI/infotickerSchema.d.ts +96 -0
  56. package/cjs/models/CamOverlayAPI/infotickerSchema.js +27 -0
  57. package/cjs/models/CamOverlayAPI/pipSchema.d.ts +125 -0
  58. package/cjs/models/CamOverlayAPI/pipSchema.js +40 -0
  59. package/cjs/models/CamOverlayAPI/ptzCompassSchema.d.ts +93 -0
  60. package/cjs/models/CamOverlayAPI/ptzCompassSchema.js +26 -0
  61. package/cjs/models/CamOverlayAPI/ptzSchema.d.ts +118 -0
  62. package/cjs/models/CamOverlayAPI/ptzSchema.js +13 -0
  63. package/cjs/models/CamOverlayAPI/screenSharingSchema.d.ts +58 -0
  64. package/cjs/models/CamOverlayAPI/screenSharingSchema.js +9 -0
  65. package/cjs/models/CamOverlayAPI/webCameraSharingSchema.d.ts +58 -0
  66. package/cjs/models/CamOverlayAPI/webCameraSharingSchema.js +9 -0
  67. package/cjs/models/CamOverlayAPI/widgetCommonSchema.d.ts +126 -0
  68. package/cjs/models/CamOverlayAPI/widgetCommonSchema.js +76 -0
  69. package/cjs/models/CamOverlayAPI/widgetsSchema.d.ts +2823 -0
  70. package/cjs/models/CamOverlayAPI/widgetsSchema.js +27 -0
  71. package/cjs/node/DefaultClient.d.ts +16 -0
  72. package/cjs/node/DefaultClient.js +56 -0
  73. package/cjs/node/HttpRequestSender.js +89 -0
  74. package/cjs/node/HttpServer.js +96 -0
  75. package/{node → cjs/node}/WsClient.d.ts +1 -1
  76. package/cjs/node/WsClient.js +149 -0
  77. package/{node → cjs/node}/WsEventClient.d.ts +1 -1
  78. package/cjs/node/WsEventClient.js +22 -0
  79. package/cjs/node/index.d.ts +2 -0
  80. package/cjs/node/index.js +7 -0
  81. package/cjs/types/CamOverlayAPI.d.ts +328 -0
  82. package/cjs/types/CamOverlayAPI.js +26 -0
  83. package/{types → cjs/types}/CamScripterAPI.d.ts +1 -1
  84. package/cjs/types/CamScripterAPI.js +20 -0
  85. package/{types → cjs/types}/CamStreamerAPI.d.ts +5 -5
  86. package/cjs/types/CamStreamerAPI.js +28 -0
  87. package/{types → cjs/types}/CamSwitcherAPI.d.ts +5 -5
  88. package/cjs/types/CamSwitcherAPI.js +137 -0
  89. package/{types/CamswitcherEvents.d.ts → cjs/types/CamSwitcherEvents.d.ts} +110 -0
  90. package/cjs/types/CamSwitcherEvents.js +70 -0
  91. package/{types → cjs/types}/VapixAPI.d.ts +442 -521
  92. package/cjs/types/VapixAPI.js +125 -0
  93. package/cjs/types/common.js +14 -0
  94. package/cjs/web/DefaultClient.d.ts +6 -0
  95. package/cjs/web/DefaultClient.js +22 -0
  96. package/cjs/web/WsClient.js +62 -0
  97. package/cjs/web/index.d.ts +2 -0
  98. package/cjs/web/index.js +7 -0
  99. package/esm/CamOverlayAPI.d.ts +629 -0
  100. package/esm/CamOverlayAPI.js +251 -0
  101. package/esm/CamOverlayDrawingAPI.d.ts +86 -0
  102. package/{CamOverlayDrawingAPI.js → esm/CamOverlayDrawingAPI.js} +6 -3
  103. package/esm/CamOverlayPainter/Frame.d.ts +96 -0
  104. package/esm/CamOverlayPainter/Painter.d.ts +48 -0
  105. package/{CamOverlayPainter → esm/CamOverlayPainter}/Painter.js +4 -1
  106. package/esm/CamOverlayPainter/ResourceManager.d.ts +14 -0
  107. package/{CamOverlayPainter → esm/CamOverlayPainter}/ResourceManager.js +6 -10
  108. package/esm/CamScripterAPI.d.ts +19 -0
  109. package/{CamScripterAPI.js → esm/CamScripterAPI.js} +3 -9
  110. package/esm/CamScripterAPICameraEventsGenerator.d.ts +74 -0
  111. package/{CamScripterAPICameraEventsGenerator.js → esm/CamScripterAPICameraEventsGenerator.js} +6 -3
  112. package/esm/CamStreamerAPI.d.ts +16 -0
  113. package/{CamStreamerAPI.js → esm/CamStreamerAPI.js} +4 -10
  114. package/esm/CamSwitcherAPI.d.ts +52 -0
  115. package/{CamSwitcherAPI.js → esm/CamSwitcherAPI.js} +24 -27
  116. package/esm/CamSwitcherEvents.d.ts +18 -0
  117. package/{CamSwitcherEvents.js → esm/CamSwitcherEvents.js} +1 -1
  118. package/esm/CreatePackage.d.ts +1 -0
  119. package/esm/VapixAPI.d.ts +78 -0
  120. package/{VapixAPI.js → esm/VapixAPI.js} +76 -56
  121. package/esm/VapixEvents.d.ts +43 -0
  122. package/{VapixEvents.js → esm/VapixEvents.js} +3 -3
  123. package/esm/errors/errors.d.ts +37 -0
  124. package/{errors → esm/errors}/errors.js +6 -0
  125. package/esm/events/AxisCameraStationEvents.d.ts +10 -0
  126. package/{events → esm/events}/AxisCameraStationEvents.js +1 -1
  127. package/esm/events/GenetecAgent.d.ts +174 -0
  128. package/{events → esm/events}/GenetecAgent.js +1 -1
  129. package/esm/index.d.ts +14 -0
  130. package/esm/index.js +14 -0
  131. package/esm/internal/Digest.d.ts +4 -0
  132. package/{internal → esm/internal}/Digest.js +6 -6
  133. package/esm/internal/ProxyClient.d.ts +11 -0
  134. package/{internal → esm/internal}/ProxyClient.js +4 -2
  135. package/esm/internal/constants.d.ts +1 -0
  136. package/esm/internal/transformers.d.ts +5 -0
  137. package/esm/internal/types.d.ts +35 -0
  138. package/esm/internal/types.js +1 -0
  139. package/esm/internal/utils.d.ts +15 -0
  140. package/{internal → esm/internal}/utils.js +21 -2
  141. package/esm/internal/versionCompare.d.ts +6 -0
  142. package/esm/models/CamOverlayAPI/accuweatherSchema.d.ts +84 -0
  143. package/esm/models/CamOverlayAPI/accuweatherSchema.js +45 -0
  144. package/esm/models/CamOverlayAPI/constants.d.ts +11 -0
  145. package/esm/models/CamOverlayAPI/constants.js +11 -0
  146. package/esm/models/CamOverlayAPI/customGraphicsSchema.d.ts +699 -0
  147. package/esm/models/CamOverlayAPI/customGraphicsSchema.js +70 -0
  148. package/esm/models/CamOverlayAPI/fileSchema.d.ts +28 -0
  149. package/esm/models/CamOverlayAPI/fileSchema.js +14 -0
  150. package/esm/models/CamOverlayAPI/imagesSchema.d.ts +95 -0
  151. package/esm/models/CamOverlayAPI/imagesSchema.js +7 -0
  152. package/esm/models/CamOverlayAPI/index.d.ts +13 -0
  153. package/esm/models/CamOverlayAPI/index.js +13 -0
  154. package/esm/models/CamOverlayAPI/infotickerSchema.d.ts +96 -0
  155. package/esm/models/CamOverlayAPI/infotickerSchema.js +24 -0
  156. package/esm/models/CamOverlayAPI/pipSchema.d.ts +125 -0
  157. package/esm/models/CamOverlayAPI/pipSchema.js +37 -0
  158. package/esm/models/CamOverlayAPI/ptzCompassSchema.d.ts +93 -0
  159. package/esm/models/CamOverlayAPI/ptzCompassSchema.js +23 -0
  160. package/esm/models/CamOverlayAPI/ptzSchema.d.ts +118 -0
  161. package/esm/models/CamOverlayAPI/ptzSchema.js +10 -0
  162. package/esm/models/CamOverlayAPI/screenSharingSchema.d.ts +58 -0
  163. package/esm/models/CamOverlayAPI/screenSharingSchema.js +6 -0
  164. package/esm/models/CamOverlayAPI/webCameraSharingSchema.d.ts +58 -0
  165. package/esm/models/CamOverlayAPI/webCameraSharingSchema.js +6 -0
  166. package/esm/models/CamOverlayAPI/widgetCommonSchema.d.ts +126 -0
  167. package/esm/models/CamOverlayAPI/widgetCommonSchema.js +73 -0
  168. package/esm/models/CamOverlayAPI/widgetsSchema.d.ts +2823 -0
  169. package/esm/models/CamOverlayAPI/widgetsSchema.js +24 -0
  170. package/esm/node/DefaultClient.d.ts +16 -0
  171. package/{node → esm/node}/DefaultClient.js +9 -7
  172. package/esm/node/HttpRequestSender.d.ts +28 -0
  173. package/esm/node/HttpServer.d.ts +21 -0
  174. package/{node → esm/node}/HttpServer.js +1 -1
  175. package/esm/node/WsClient.d.ts +39 -0
  176. package/esm/node/WsEventClient.d.ts +13 -0
  177. package/esm/node/index.d.ts +2 -0
  178. package/esm/node/index.js +2 -0
  179. package/esm/types/CamOverlayAPI.d.ts +328 -0
  180. package/esm/types/CamOverlayAPI.js +14 -0
  181. package/esm/types/CamScripterAPI.d.ts +67 -0
  182. package/esm/types/CamStreamerAPI.d.ts +139 -0
  183. package/esm/types/CamSwitcherAPI.d.ts +814 -0
  184. package/esm/types/CamSwitcherEvents.d.ts +568 -0
  185. package/{types/CamswitcherEvents.js → esm/types/CamSwitcherEvents.js} +12 -0
  186. package/esm/types/VapixAPI.d.ts +1625 -0
  187. package/{types → esm/types}/VapixAPI.js +16 -23
  188. package/esm/types/common.d.ts +37 -0
  189. package/esm/web/DefaultClient.d.ts +6 -0
  190. package/{web → esm/web}/DefaultClient.js +6 -4
  191. package/esm/web/WsClient.d.ts +13 -0
  192. package/esm/web/index.d.ts +2 -0
  193. package/esm/web/index.js +2 -0
  194. package/package.json +6 -6
  195. package/CamOverlayAPI.d.ts +0 -31
  196. package/CamOverlayAPI.js +0 -172
  197. package/internal/ProxyClient.d.ts +0 -11
  198. package/internal/common.d.ts +0 -40
  199. package/internal/common.js +0 -23
  200. package/node/DefaultClient.d.ts +0 -15
  201. package/types/CamOverlayAPI.d.ts +0 -188
  202. package/types/CamOverlayAPI.js +0 -44
  203. package/web/DefaultClient.d.ts +0 -6
  204. package/{CamOverlayPainter → cjs/CamOverlayPainter}/Frame.d.ts +0 -0
  205. package/{CamOverlayPainter → cjs/CamOverlayPainter}/ResourceManager.d.ts +0 -0
  206. package/{CreatePackage.d.ts → cjs/CreatePackage.d.ts} +0 -0
  207. package/{events → cjs/events}/GenetecAgent.d.ts +0 -0
  208. package/{internal → cjs/internal}/Digest.d.ts +0 -0
  209. package/{internal → cjs/internal}/constants.d.ts +0 -0
  210. package/{internal → cjs/internal}/transformers.d.ts +0 -0
  211. package/{node → cjs/node}/HttpRequestSender.d.ts +0 -0
  212. package/{node → cjs/node}/HttpServer.d.ts +0 -0
  213. package/{types → cjs/types}/common.d.ts +2 -2
  214. /package/{web → cjs/web}/WsClient.d.ts +0 -0
  215. /package/{CamOverlayPainter → esm/CamOverlayPainter}/Frame.js +0 -0
  216. /package/{CreatePackage.js → esm/CreatePackage.js} +0 -0
  217. /package/{internal → esm/internal}/constants.js +0 -0
  218. /package/{internal → esm/internal}/transformers.js +0 -0
  219. /package/{internal → esm/internal}/versionCompare.js +0 -0
  220. /package/{node → esm/node}/HttpRequestSender.js +0 -0
  221. /package/{node → esm/node}/WsClient.js +0 -0
  222. /package/{node → esm/node}/WsEventClient.js +0 -0
  223. /package/{types → esm/types}/CamScripterAPI.js +0 -0
  224. /package/{types → esm/types}/CamStreamerAPI.js +0 -0
  225. /package/{types → esm/types}/CamSwitcherAPI.js +0 -0
  226. /package/{types → esm/types}/common.js +0 -0
  227. /package/{web → esm/web}/WsClient.js +0 -0
@@ -0,0 +1,301 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Frame = void 0;
4
+ const events_1 = require("events");
5
+ class Frame extends events_1.EventEmitter {
6
+ enabled;
7
+ posX;
8
+ posY;
9
+ width;
10
+ height;
11
+ text = '';
12
+ fontColor;
13
+ fontName;
14
+ font;
15
+ align = 'A_LEFT';
16
+ textType = 'TFM_OVERFLOW';
17
+ bgColor;
18
+ bgImageName;
19
+ bgImage;
20
+ bgType;
21
+ borderRadius;
22
+ borderWidth;
23
+ borderColor;
24
+ customDraw;
25
+ layer;
26
+ children = new Array();
27
+ constructor(opt) {
28
+ super();
29
+ this.enabled = opt.enabled ?? true;
30
+ this.posX = opt.x;
31
+ this.posY = opt.y;
32
+ this.width = opt.width;
33
+ this.height = opt.height;
34
+ this.setText(opt.text ?? '', 'A_LEFT');
35
+ this.fontColor = opt.fontColor ?? [1.0, 1.0, 1.0];
36
+ this.fontName = opt.font;
37
+ this.bgColor = opt.bgColor;
38
+ this.bgImageName = opt.bgImage;
39
+ this.bgType = opt.bgType;
40
+ this.borderRadius = opt.borderRadius ?? 0;
41
+ this.borderWidth = opt.borderWidth ?? 0;
42
+ this.borderColor = opt.borderColor ?? [1, 1, 1, 1];
43
+ this.customDraw = opt.customDraw;
44
+ this.layer = opt.layer ?? 0;
45
+ }
46
+ enable() {
47
+ this.enabled = true;
48
+ }
49
+ disable() {
50
+ this.enabled = false;
51
+ }
52
+ setFramePosition(x, y) {
53
+ this.posX = x;
54
+ this.posY = y;
55
+ }
56
+ setFrameSize(width, height) {
57
+ this.width = width;
58
+ this.height = height;
59
+ }
60
+ setText(text, align, textType = 'TFM_OVERFLOW', fontColor) {
61
+ this.text = text;
62
+ this.align = align;
63
+ this.textType = textType;
64
+ if (fontColor) {
65
+ this.fontColor = fontColor;
66
+ }
67
+ }
68
+ setFontColor(fontColor) {
69
+ this.fontColor = fontColor;
70
+ }
71
+ setFont(fontName) {
72
+ this.fontName = fontName;
73
+ this.font = undefined;
74
+ }
75
+ setFontData(fontData) {
76
+ this.fontName = undefined;
77
+ this.font = fontData;
78
+ }
79
+ setBgColor(color) {
80
+ this.bgColor = color;
81
+ }
82
+ setBgImage(imageName, type = 'fit') {
83
+ this.bgImageName = imageName;
84
+ this.bgImage = undefined;
85
+ this.bgType = type;
86
+ }
87
+ setBgImageData(imageData, type = 'fit') {
88
+ this.bgImageName = undefined;
89
+ this.bgImage = imageData;
90
+ this.bgType = type;
91
+ }
92
+ setBgType(type) {
93
+ this.bgType = type;
94
+ }
95
+ setBorderRadius(radius) {
96
+ this.borderRadius = radius;
97
+ }
98
+ setBorderWidth(width) {
99
+ this.borderWidth = width;
100
+ }
101
+ setBorderColor(color) {
102
+ this.borderColor = color;
103
+ }
104
+ setCustomDraw(customDraw) {
105
+ this.customDraw = customDraw;
106
+ }
107
+ resetFont() {
108
+ this.font = undefined;
109
+ }
110
+ resetBgColor() {
111
+ this.bgColor = undefined;
112
+ }
113
+ resetBgImage() {
114
+ this.bgImage = undefined;
115
+ this.bgType = undefined;
116
+ }
117
+ resetCustomDraw() {
118
+ this.customDraw = undefined;
119
+ }
120
+ clear() {
121
+ this.text = '';
122
+ this.align = 'A_LEFT';
123
+ this.textType = 'TFM_OVERFLOW';
124
+ this.fontColor = [1.0, 1.0, 1.0];
125
+ this.font = undefined;
126
+ this.bgColor = undefined;
127
+ this.bgImage = undefined;
128
+ this.bgType = undefined;
129
+ this.customDraw = undefined;
130
+ }
131
+ insert(...frames) {
132
+ this.children.push(...frames);
133
+ for (const frame of frames) {
134
+ frame.on('layoutChanged', () => this.layoutChanged());
135
+ }
136
+ this.layoutChanged();
137
+ }
138
+ getLayers() {
139
+ const uniqueLayers = new Set();
140
+ uniqueLayers.add(this.layer);
141
+ for (const child of this.children) {
142
+ for (const layer of child.getLayers()) {
143
+ uniqueLayers.add(layer);
144
+ }
145
+ }
146
+ return uniqueLayers;
147
+ }
148
+ layoutChanged() {
149
+ this.emit('layoutChanged');
150
+ }
151
+ async displayImage(cod, resourceManager, cairo, ppX, ppY, scale, layer) {
152
+ if (this.enabled) {
153
+ const posX = ppX + this.posX;
154
+ const posY = ppY + this.posY;
155
+ await this.prepareResources(resourceManager);
156
+ await cod.cairo('cairo_save', cairo);
157
+ await this.clipDrawing(cod, cairo, scale, posX, posY);
158
+ if (this.layer === layer) {
159
+ await this.displayOwnImage(cod, cairo, posX, posY, scale);
160
+ }
161
+ for (const child of this.children) {
162
+ await child.displayImage(cod, resourceManager, cairo, posX, posY, scale, layer);
163
+ }
164
+ await cod.cairo('cairo_restore', cairo);
165
+ }
166
+ }
167
+ async prepareResources(resourceManager) {
168
+ if (this.bgImageName !== undefined) {
169
+ this.bgImage = await resourceManager.image(this.bgImageName);
170
+ }
171
+ if (this.fontName !== undefined) {
172
+ this.font = await resourceManager.font(this.fontName);
173
+ }
174
+ }
175
+ async displayOwnImage(cod, cairo, ppX, ppY, scale) {
176
+ if (!this.enabled) {
177
+ return;
178
+ }
179
+ const promises = new Array();
180
+ if (this.font !== undefined) {
181
+ promises.push(cod.cairo('cairo_set_font_face', cairo, this.font.var));
182
+ }
183
+ else {
184
+ promises.push(cod.cairo('cairo_set_font_face', cairo, 'NULL'));
185
+ }
186
+ if (this.bgColor !== undefined) {
187
+ promises.push(this.drawFrame(cod, cairo, scale, ppX, ppY));
188
+ }
189
+ if (this.bgImage !== undefined) {
190
+ promises.push(this.drawImage(cod, cairo, scale, ppX, ppY));
191
+ }
192
+ if (this.borderWidth > 0) {
193
+ promises.push(this.drawBorder(cod, cairo, scale, ppX, ppY));
194
+ }
195
+ if (this.text) {
196
+ promises.push(this.drawText(cod, cairo, scale, ppX, ppY));
197
+ }
198
+ if (this.customDraw) {
199
+ promises.push(cod.cairo('cairo_identity_matrix', cairo));
200
+ promises.push(cod.cairo('cairo_translate', cairo, scale * ppX, scale * ppY));
201
+ promises.push(cod.cairo('cairo_scale', cairo, scale, scale));
202
+ promises.push(this.customDraw(cod, cairo, { width: this.width, height: this.height }));
203
+ }
204
+ await Promise.all(promises);
205
+ }
206
+ async clipDrawing(cod, cairo, scale, ppX, ppY) {
207
+ if (this.borderRadius === 0) {
208
+ return;
209
+ }
210
+ await Promise.all([
211
+ this.drawRectPath(cod, cairo, scale, ppX, ppY, this.borderRadius),
212
+ cod.cairo('cairo_clip', cairo),
213
+ ]);
214
+ }
215
+ async drawFrame(cod, cairo, scale, ppX, ppY) {
216
+ if (this.bgColor) {
217
+ const promises = [
218
+ cod.cairo('cairo_identity_matrix', cairo),
219
+ cod.cairo('cairo_translate', cairo, scale * ppX, scale * ppY),
220
+ cod.cairo('cairo_scale', cairo, scale, scale),
221
+ cod.cairo('cairo_set_source_rgba', cairo, this.bgColor[0], this.bgColor[1], this.bgColor[2], this.bgColor[3]),
222
+ cod.cairo('cairo_rectangle', cairo, 0, 0, this.width, this.height),
223
+ cod.cairo('cairo_fill', cairo),
224
+ cod.cairo('cairo_stroke', cairo),
225
+ ];
226
+ await Promise.all(promises);
227
+ }
228
+ else {
229
+ throw new Error('Color of the frame is undefined.');
230
+ }
231
+ }
232
+ async drawImage(cod, cairo, scale, ppX, ppY) {
233
+ if (this.bgImage === undefined) {
234
+ return;
235
+ }
236
+ const bgImage = this.bgImage.var;
237
+ const bgWidth = this.bgImage.width;
238
+ const bgHeight = this.bgImage.height;
239
+ const promises = new Array();
240
+ promises.push(cod.cairo('cairo_identity_matrix', cairo));
241
+ promises.push(cod.cairo('cairo_translate', cairo, scale * ppX, scale * ppY));
242
+ if (this.bgType === 'fill') {
243
+ const sx = (scale * this.width) / bgWidth;
244
+ const sy = (scale * this.height) / bgHeight;
245
+ promises.push(cod.cairo('cairo_scale', cairo, sx, sy));
246
+ }
247
+ else if (this.bgType === 'fit') {
248
+ const sx = this.width / bgWidth;
249
+ const sy = this.height / bgHeight;
250
+ const scaleRatio = scale * Math.min(sx, sy);
251
+ promises.push(cod.cairo('cairo_scale', cairo, scaleRatio, scaleRatio));
252
+ }
253
+ else {
254
+ promises.push(cod.cairo('cairo_scale', cairo, scale, scale));
255
+ }
256
+ promises.push(cod.cairo('cairo_set_source_surface', cairo, bgImage, 0, 0));
257
+ promises.push(cod.cairo('cairo_paint', cairo));
258
+ await Promise.all(promises);
259
+ }
260
+ async drawText(cod, cairo, scale, ppX, ppY) {
261
+ const promises = [
262
+ cod.cairo('cairo_identity_matrix', cairo),
263
+ cod.cairo('cairo_set_source_rgb', cairo, this.fontColor[0], this.fontColor[1], this.fontColor[2]),
264
+ cod.writeText(cairo, '' + this.text, Math.floor(scale * ppX), Math.floor(scale * ppY), Math.floor(scale * this.width), Math.floor(scale * this.height), this.align, this.textType),
265
+ ];
266
+ await Promise.all(promises);
267
+ }
268
+ async drawBorder(cod, cairo, scale, ppX, ppY) {
269
+ await Promise.all([
270
+ this.drawRectPath(cod, cairo, scale, ppX, ppY, this.borderRadius),
271
+ cod.cairo('cairo_set_source_rgba', cairo, this.borderColor[0], this.borderColor[1], this.borderColor[2], this.borderColor[3]),
272
+ cod.cairo('cairo_set_line_width', cairo, this.borderWidth),
273
+ cod.cairo('cairo_stroke', cairo),
274
+ ]);
275
+ }
276
+ async drawRectPath(cod, cairo, scale, ppX, ppY, radius) {
277
+ if (radius === 0) {
278
+ return await Promise.all([
279
+ cod.cairo('cairo_identity_matrix', cairo),
280
+ cod.cairo('cairo_translate', cairo, scale * ppX, scale * ppY),
281
+ cod.cairo('cairo_scale', cairo, scale, scale),
282
+ cod.cairo('cairo_rectangle', cairo, 0, 0, this.width, this.height),
283
+ ]);
284
+ }
285
+ else {
286
+ const degrees = Math.PI / 180;
287
+ return await Promise.all([
288
+ cod.cairo('cairo_identity_matrix', cairo),
289
+ cod.cairo('cairo_translate', cairo, scale * ppX, scale * ppY),
290
+ cod.cairo('cairo_scale', cairo, scale, scale),
291
+ cod.cairo('cairo_new_sub_path', cairo),
292
+ cod.cairo('cairo_arc', cairo, this.width - radius, radius, radius, -90 * degrees, 0 * degrees),
293
+ cod.cairo('cairo_arc', cairo, this.width - radius, this.height - radius, radius, 0 * degrees, 90 * degrees),
294
+ cod.cairo('cairo_arc', cairo, radius, this.height - radius, radius, 90 * degrees, 180 * degrees),
295
+ cod.cairo('cairo_arc', cairo, radius, radius, radius, 180 * degrees, 270 * degrees),
296
+ cod.cairo('cairo_close_path', cairo),
297
+ ]);
298
+ }
299
+ }
300
+ }
301
+ exports.Frame = Frame;
@@ -1,11 +1,22 @@
1
1
  import { CamOverlayDrawingAPI, CamOverlayDrawingOptions } from '../CamOverlayDrawingAPI';
2
2
  import ResourceManager from './ResourceManager';
3
3
  import { Frame, TFrameOptions } from './Frame';
4
- export declare const COORD: Record<string, [number, number]>;
4
+ export declare const COORD: {
5
+ readonly top_left: readonly [-1, -1];
6
+ readonly center_left: readonly [-1, 0];
7
+ readonly bottom_left: readonly [-1, 1];
8
+ readonly top_center: readonly [0, -1];
9
+ readonly center: readonly [0, 0];
10
+ readonly bottom_center: readonly [0, 1];
11
+ readonly top_right: readonly [1, -1];
12
+ readonly center_right: readonly [1, 0];
13
+ readonly bottom_right: readonly [1, 1];
14
+ };
15
+ type TCoAlignment = keyof typeof COORD;
5
16
  export type TPainterOptions = TFrameOptions & {
6
17
  screenWidth: number;
7
18
  screenHeight: number;
8
- coAlignment: string;
19
+ coAlignment: TCoAlignment;
9
20
  };
10
21
  export declare class Painter extends Frame {
11
22
  private screenWidth;
@@ -24,7 +35,7 @@ export declare class Painter extends Frame {
24
35
  registerImage(moniker: string, fileName: string): void;
25
36
  registerFont(moniker: string, fileName: string): void;
26
37
  setScreenSize(sw: number, sh: number): void;
27
- setCoAlignment(coAlignment: string): void;
38
+ setCoAlignment(coAlignment: TCoAlignment): void;
28
39
  protected layoutChanged(): void;
29
40
  display(scale?: number): Promise<void>;
30
41
  hide(): Promise<void>;
@@ -0,0 +1,171 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ResourceManager = exports.Frame = exports.Painter = exports.COORD = void 0;
4
+ const CamOverlayDrawingAPI_1 = require("../CamOverlayDrawingAPI");
5
+ const ResourceManager_1 = require("./ResourceManager");
6
+ exports.ResourceManager = ResourceManager_1.default;
7
+ const Frame_1 = require("./Frame");
8
+ Object.defineProperty(exports, "Frame", { enumerable: true, get: function () { return Frame_1.Frame; } });
9
+ exports.COORD = {
10
+ top_left: [-1, -1],
11
+ center_left: [-1, 0],
12
+ bottom_left: [-1, 1],
13
+ top_center: [0, -1],
14
+ center: [0, 0],
15
+ bottom_center: [0, 1],
16
+ top_right: [1, -1],
17
+ center_right: [1, 0],
18
+ bottom_right: [1, 1],
19
+ };
20
+ class Painter extends Frame_1.Frame {
21
+ screenWidth;
22
+ screenHeight;
23
+ coAlignment;
24
+ cod;
25
+ rm;
26
+ refreshLayers = true;
27
+ layers = [];
28
+ constructor(opt, coopt) {
29
+ super(opt);
30
+ this.coAlignment = exports.COORD[opt.coAlignment];
31
+ this.screenWidth = opt.screenWidth;
32
+ this.screenHeight = opt.screenHeight;
33
+ this.cod = new CamOverlayDrawingAPI_1.CamOverlayDrawingAPI(coopt);
34
+ this.rm = new ResourceManager_1.default(this.cod);
35
+ }
36
+ get camOverlayDrawingAPI() {
37
+ return this.cod;
38
+ }
39
+ get resourceManager() {
40
+ return this.rm;
41
+ }
42
+ connect() {
43
+ this.cod.on('open', () => {
44
+ this.rm.clear();
45
+ this.layers = [];
46
+ this.refreshLayers = true;
47
+ this.emit('open');
48
+ });
49
+ this.cod.on('close', () => {
50
+ this.emit('close');
51
+ });
52
+ this.cod.on('error', (err) => {
53
+ console.error('Painter:', err);
54
+ });
55
+ this.cod.connect();
56
+ }
57
+ disconnect() {
58
+ this.cod.disconnect();
59
+ }
60
+ isConnected() {
61
+ return this.cod.isConnected();
62
+ }
63
+ registerImage(moniker, fileName) {
64
+ this.rm.registerImage(moniker, fileName);
65
+ }
66
+ registerFont(moniker, fileName) {
67
+ this.rm.registerFont(moniker, fileName);
68
+ }
69
+ setScreenSize(sw, sh) {
70
+ this.screenWidth = sw;
71
+ this.screenHeight = sh;
72
+ }
73
+ setCoAlignment(coAlignment) {
74
+ this.coAlignment = exports.COORD[coAlignment];
75
+ }
76
+ layoutChanged() {
77
+ this.refreshLayers = true;
78
+ }
79
+ async display(scale = 1.0) {
80
+ if (this.enabled) {
81
+ if (this.refreshLayers) {
82
+ this.refreshLayers = false;
83
+ await this.prepareLayers();
84
+ }
85
+ let cairo;
86
+ let surface;
87
+ let lastCachedLayer;
88
+ for (let i = 0; i < this.layers.length; i++) {
89
+ const layer = this.layers[i];
90
+ if (layer === undefined) {
91
+ continue;
92
+ }
93
+ if (layer.cairoCache !== undefined &&
94
+ layer.surfaceCache !== undefined &&
95
+ surface === undefined &&
96
+ cairo === undefined) {
97
+ lastCachedLayer = layer;
98
+ continue;
99
+ }
100
+ if (surface === undefined || cairo === undefined) {
101
+ [surface, cairo] = await this.prepareSurface(scale, lastCachedLayer?.surfaceCache, lastCachedLayer?.cairoCache);
102
+ }
103
+ await this.displayImage(this.cod, this.rm, cairo, -this.posX, -this.posY, scale, layer.layer);
104
+ if (i < this.layers.length - 1) {
105
+ const [surfaceToCache, cairoToCache] = await this.prepareSurface(scale, surface, cairo);
106
+ layer.surfaceCache = surfaceToCache;
107
+ layer.cairoCache = cairoToCache;
108
+ }
109
+ }
110
+ if (surface !== undefined && cairo !== undefined) {
111
+ await this.cod.showCairoImage(surface, this.positionConvertor(this.coAlignment[0], this.screenWidth, this.posX, scale * this.width), this.positionConvertor(this.coAlignment[1], this.screenHeight, this.posY, scale * this.height));
112
+ await this.cleanupSurface(surface, cairo);
113
+ }
114
+ }
115
+ }
116
+ async hide() {
117
+ await this.cod.removeImage();
118
+ }
119
+ async invalidateLayer(layer) {
120
+ const layerIdx = this.layers.findIndex((l) => l.layer === layer);
121
+ if (layerIdx === -1) {
122
+ return;
123
+ }
124
+ for (let i = layerIdx; i < this.layers.length; i++) {
125
+ const currentLayer = this.layers[i];
126
+ if (currentLayer?.surfaceCache !== undefined && currentLayer.cairoCache !== undefined) {
127
+ await this.cleanupSurface(currentLayer.surfaceCache, currentLayer.cairoCache);
128
+ currentLayer.surfaceCache = undefined;
129
+ currentLayer.cairoCache = undefined;
130
+ }
131
+ }
132
+ }
133
+ async prepareLayers() {
134
+ for (const layer of this.layers) {
135
+ if (layer.surfaceCache !== undefined && layer.cairoCache !== undefined) {
136
+ await this.cleanupSurface(layer.surfaceCache, layer.cairoCache);
137
+ }
138
+ }
139
+ const uniqueLayers = this.getLayers();
140
+ const sortedLayers = Array.from(uniqueLayers).sort((a, b) => a - b);
141
+ this.layers = sortedLayers.map((layer) => {
142
+ return { layer };
143
+ });
144
+ }
145
+ async prepareSurface(scale, cachedSurface, cachedCairo) {
146
+ const surface = (await this.cod.cairo('cairo_image_surface_create', 'CAIRO_FORMAT_ARGB32', Math.floor(this.width * scale), Math.floor(this.height * scale)));
147
+ const cairo = (await this.cod.cairo('cairo_create', surface.var));
148
+ if (cachedSurface !== undefined && cachedCairo !== undefined) {
149
+ await this.cod.cairo('cairo_set_source_surface', cairo.var, cachedSurface, 0, 0);
150
+ await this.cod.cairo('cairo_paint', cairo.var);
151
+ }
152
+ return [surface.var, cairo.var];
153
+ }
154
+ async cleanupSurface(surface, cairo) {
155
+ await this.cod.cairo('cairo_surface_destroy', surface);
156
+ await this.cod.cairo('cairo_destroy', cairo);
157
+ }
158
+ positionConvertor(alignment, screenSize, position, graphicsSize) {
159
+ switch (alignment) {
160
+ case -1:
161
+ return alignment + (2.0 * position) / screenSize;
162
+ case 0:
163
+ return alignment - (2.0 * (position + graphicsSize / 2)) / screenSize;
164
+ case 1:
165
+ return alignment - (2.0 * (position + graphicsSize)) / screenSize;
166
+ default:
167
+ throw new Error('Invalid graphics alignment.');
168
+ }
169
+ }
170
+ }
171
+ exports.Painter = Painter;
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const fs = require("fs/promises");
4
+ class ResourceManager {
5
+ co;
6
+ imgFileNames = {};
7
+ fontFileNames = {};
8
+ images = {};
9
+ fonts = {};
10
+ constructor(co) {
11
+ this.co = co;
12
+ }
13
+ registerImage(moniker, fileName) {
14
+ this.imgFileNames[moniker] = process.env.INSTALL_PATH + '/images/' + fileName;
15
+ }
16
+ registerFont(moniker, fileName) {
17
+ this.fontFileNames[moniker] = process.env.INSTALL_PATH + '/fonts/' + fileName;
18
+ }
19
+ async image(moniker) {
20
+ if (this.images[moniker] !== undefined) {
21
+ return this.images[moniker];
22
+ }
23
+ if (this.imgFileNames[moniker] !== undefined) {
24
+ const imgData = await fs.readFile(this.imgFileNames[moniker]);
25
+ this.images[moniker] = await this.co.uploadImageData(imgData);
26
+ return this.images[moniker];
27
+ }
28
+ throw new Error('Error! Unknown image requested!');
29
+ }
30
+ async font(moniker) {
31
+ if (this.fonts[moniker] !== undefined) {
32
+ return this.fonts[moniker];
33
+ }
34
+ if (this.fontFileNames[moniker] !== undefined) {
35
+ const fontData = await fs.readFile(this.fontFileNames[moniker]);
36
+ this.fonts[moniker] = await this.co.uploadFontData(fontData);
37
+ return this.fonts[moniker];
38
+ }
39
+ throw new Error('Error! Unknown font requested!');
40
+ }
41
+ clear() {
42
+ this.images = {};
43
+ this.fonts = {};
44
+ }
45
+ }
46
+ exports.default = ResourceManager;
@@ -1,9 +1,9 @@
1
- import { IClient } from './internal/common';
2
- import { CamScripterOptions, TNodeState, TPackageInfoList, TStorage, TStorageType } from './types/CamScripterAPI';
1
+ import { IClient, TResponse } from './internal/types';
2
+ import { TNodeState, TPackageInfoList, TStorage, TStorageType } from './types/CamScripterAPI';
3
3
  import { TNetworkCamera } from './types/common';
4
- export declare class CamOverlayAPI {
5
- private client;
6
- constructor(options?: CamScripterOptions | IClient);
4
+ export declare class CamOverlayAPI<Client extends IClient<TResponse>> {
5
+ client: Client;
6
+ constructor(client: Client);
7
7
  checkCameraTime(): Promise<boolean>;
8
8
  getStorageInfo(): Promise<TStorage>;
9
9
  getNetworkCameraList(): Promise<TNetworkCamera[]>;
@@ -0,0 +1,64 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CamOverlayAPI = void 0;
4
+ const utils_1 = require("./internal/utils");
5
+ const CamScripterAPI_1 = require("./types/CamScripterAPI");
6
+ const common_1 = require("./types/common");
7
+ class CamOverlayAPI {
8
+ client;
9
+ constructor(client) {
10
+ this.client = client;
11
+ }
12
+ async checkCameraTime() {
13
+ return (await this.get('/local/camscripter/camera_time.cgi')).state;
14
+ }
15
+ async getStorageInfo() {
16
+ const data = await this.get(`/local/camscripter/package/get_storage.cgi`);
17
+ return CamScripterAPI_1.storageSchema.parse(data);
18
+ }
19
+ async getNetworkCameraList() {
20
+ const response = await this.get('/local/camscripter/network_camera_list.cgi');
21
+ return common_1.networkCameraListSchema.parse(response.camera_list);
22
+ }
23
+ async getPackageList() {
24
+ const data = await this.get('/local/camscripter/package/list.cgi');
25
+ return CamScripterAPI_1.packageInfoListSchema.parse(data);
26
+ }
27
+ async installPackages(formData, storage) {
28
+ await this.post(`/local/camscripter/package/install.cgi?storage=${storage}`, formData);
29
+ }
30
+ async uninstallPackage(packageId) {
31
+ await this.get(`/local/camscripter/package/remove.cgi?package_name=${packageId}`);
32
+ }
33
+ async importSettings(packageId, formData) {
34
+ await this.post(`/local/camscripter/package/data.cgi?action=IMPORT&package_name=${packageId}`, formData);
35
+ }
36
+ async exportSettings(packageId, formData) {
37
+ await this.post(`/local/camscripter/package/data.cgi?action=EXPORT&package_name=${packageId}`, formData);
38
+ }
39
+ async getNodejsStatus() {
40
+ return (await this.get('/local/camscripter/diagnostics.cgi')).node_state;
41
+ }
42
+ async installNodejs(storage) {
43
+ await this.get(`/local/camscripter/node_update.cgi?storage=${storage}`);
44
+ }
45
+ async get(path, params) {
46
+ const res = await this.client.get(path, params);
47
+ if (res.ok) {
48
+ return await res.json();
49
+ }
50
+ else {
51
+ throw new Error(await (0, utils_1.responseStringify)(res));
52
+ }
53
+ }
54
+ async post(path, data, params) {
55
+ const res = await this.client.post(path, data, params);
56
+ if (res.ok) {
57
+ return await res.json();
58
+ }
59
+ else {
60
+ throw new Error(await (0, utils_1.responseStringify)(res));
61
+ }
62
+ }
63
+ }
64
+ exports.CamOverlayAPI = CamOverlayAPI;
@@ -1,6 +1,6 @@
1
1
  /// <reference types="node" />
2
2
  import * as EventEmitter from 'events';
3
- import { WsOptions } from './internal/common';
3
+ import { WsOptions } from './internal/types';
4
4
  export type CamScripterOptions = WsOptions;
5
5
  export type TDeclaration = {
6
6
  type?: '' | 'SOURCE' | 'DATA';