@camera.ui/browser 0.0.1

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 (241) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/LICENSE.md +22 -0
  3. package/README.md +1 -0
  4. package/dist/bundle.browser.js +1 -0
  5. package/dist/client/node/src/api.d.ts +5 -0
  6. package/dist/client/node/src/api.js +27 -0
  7. package/dist/client/node/src/api.js.map +1 -0
  8. package/dist/client/node/src/client.d.ts +20 -0
  9. package/dist/client/node/src/client.js +106 -0
  10. package/dist/client/node/src/client.js.map +1 -0
  11. package/dist/client/node/src/index.d.ts +2 -0
  12. package/dist/client/node/src/index.js +19 -0
  13. package/dist/client/node/src/index.js.map +1 -0
  14. package/dist/client/node/src/proxy/cameraDevice/cameraDevice.browser.d.ts +48 -0
  15. package/dist/client/node/src/proxy/cameraDevice/cameraDevice.browser.js +176 -0
  16. package/dist/client/node/src/proxy/cameraDevice/cameraDevice.browser.js.map +1 -0
  17. package/dist/client/node/src/proxy/cameraDevice/cameraDevice.mock.d.ts +1 -0
  18. package/dist/client/node/src/proxy/cameraDevice/cameraDevice.mock.js +3 -0
  19. package/dist/client/node/src/proxy/cameraDevice/cameraDevice.mock.js.map +1 -0
  20. package/dist/client/node/src/proxy/cameraDevice/cameraDevice.node.d.ts +11 -0
  21. package/dist/client/node/src/proxy/cameraDevice/cameraDevice.node.js +51 -0
  22. package/dist/client/node/src/proxy/cameraDevice/cameraDevice.node.js.map +1 -0
  23. package/dist/client/node/src/proxy/cameraDevice/index.d.ts +6 -0
  24. package/dist/client/node/src/proxy/cameraDevice/index.js +11 -0
  25. package/dist/client/node/src/proxy/cameraDevice/index.js.map +1 -0
  26. package/dist/client/node/src/proxy/deviceManager.d.ts +15 -0
  27. package/dist/client/node/src/proxy/deviceManager.js +67 -0
  28. package/dist/client/node/src/proxy/deviceManager.js.map +1 -0
  29. package/dist/client/node/src/proxy/index.d.ts +4 -0
  30. package/dist/client/node/src/proxy/index.js +21 -0
  31. package/dist/client/node/src/proxy/index.js.map +1 -0
  32. package/dist/client/node/src/proxy/pluginsManager.d.ts +9 -0
  33. package/dist/client/node/src/proxy/pluginsManager.js +25 -0
  34. package/dist/client/node/src/proxy/pluginsManager.js.map +1 -0
  35. package/dist/client/node/src/proxy/systemManager.d.ts +9 -0
  36. package/dist/client/node/src/proxy/systemManager.js +25 -0
  37. package/dist/client/node/src/proxy/systemManager.js.map +1 -0
  38. package/dist/client/node/src/socket.d.ts +9 -0
  39. package/dist/client/node/src/socket.js +45 -0
  40. package/dist/client/node/src/socket.js.map +1 -0
  41. package/dist/client/node/src/types.d.ts +22 -0
  42. package/dist/client/node/src/types.js +3 -0
  43. package/dist/client/node/src/types.js.map +1 -0
  44. package/dist/package.json +149 -0
  45. package/dist/shared/common/utils.d.ts +6 -0
  46. package/dist/shared/common/utils.js +66 -0
  47. package/dist/shared/common/utils.js.map +1 -0
  48. package/dist/shared/types/index.d.ts +8 -0
  49. package/dist/shared/types/index.js +23 -0
  50. package/dist/shared/types/index.js.map +1 -0
  51. package/dist/src/api/database/index.d.ts +25 -0
  52. package/dist/src/api/database/index.js +203 -0
  53. package/dist/src/api/database/index.js.map +1 -0
  54. package/dist/src/api/database/types.d.ts +153 -0
  55. package/dist/src/api/database/types.js +3 -0
  56. package/dist/src/api/database/types.js.map +1 -0
  57. package/dist/src/api/go2rtc/api/application.d.ts +8 -0
  58. package/dist/src/api/go2rtc/api/application.js +32 -0
  59. package/dist/src/api/go2rtc/api/application.js.map +1 -0
  60. package/dist/src/api/go2rtc/api/index.d.ts +3 -0
  61. package/dist/src/api/go2rtc/api/index.js +33 -0
  62. package/dist/src/api/go2rtc/api/index.js.map +1 -0
  63. package/dist/src/api/go2rtc/api/snapshot.d.ts +6 -0
  64. package/dist/src/api/go2rtc/api/snapshot.js +22 -0
  65. package/dist/src/api/go2rtc/api/snapshot.js.map +1 -0
  66. package/dist/src/api/go2rtc/api/streams.d.ts +10 -0
  67. package/dist/src/api/go2rtc/api/streams.js +32 -0
  68. package/dist/src/api/go2rtc/api/streams.js.map +1 -0
  69. package/dist/src/api/go2rtc/index.d.ts +3 -0
  70. package/dist/src/api/go2rtc/index.js +13 -0
  71. package/dist/src/api/go2rtc/index.js.map +1 -0
  72. package/dist/src/api/go2rtc/types.d.ts +43 -0
  73. package/dist/src/api/go2rtc/types.js +3 -0
  74. package/dist/src/api/go2rtc/types.js.map +1 -0
  75. package/dist/src/api/middlewares/socketAuth.middleware.d.ts +41 -0
  76. package/dist/src/api/middlewares/socketAuth.middleware.js +90 -0
  77. package/dist/src/api/middlewares/socketAuth.middleware.js.map +1 -0
  78. package/dist/src/api/schemas/backup.schema.d.ts +220 -0
  79. package/dist/src/api/schemas/backup.schema.js +94 -0
  80. package/dist/src/api/schemas/backup.schema.js.map +1 -0
  81. package/dist/src/api/schemas/cameras.schema.d.ts +316 -0
  82. package/dist/src/api/schemas/cameras.schema.js +124 -0
  83. package/dist/src/api/schemas/cameras.schema.js.map +1 -0
  84. package/dist/src/api/schemas/config.schema.d.ts +202 -0
  85. package/dist/src/api/schemas/config.schema.js +94 -0
  86. package/dist/src/api/schemas/config.schema.js.map +1 -0
  87. package/dist/src/api/schemas/go2rtc.schema.d.ts +604 -0
  88. package/dist/src/api/schemas/go2rtc.schema.js +204 -0
  89. package/dist/src/api/schemas/go2rtc.schema.js.map +1 -0
  90. package/dist/src/api/schemas/users.schema.d.ts +515 -0
  91. package/dist/src/api/schemas/users.schema.js +131 -0
  92. package/dist/src/api/schemas/users.schema.js.map +1 -0
  93. package/dist/src/api/services/auth.service.d.ts +20 -0
  94. package/dist/src/api/services/auth.service.js +104 -0
  95. package/dist/src/api/services/auth.service.js.map +1 -0
  96. package/dist/src/api/services/cameras.service.d.ts +40 -0
  97. package/dist/src/api/services/cameras.service.js +535 -0
  98. package/dist/src/api/services/cameras.service.js.map +1 -0
  99. package/dist/src/api/services/plugins.service.d.ts +23 -0
  100. package/dist/src/api/services/plugins.service.js +115 -0
  101. package/dist/src/api/services/plugins.service.js.map +1 -0
  102. package/dist/src/api/services/users.service.d.ts +13 -0
  103. package/dist/src/api/services/users.service.js +54 -0
  104. package/dist/src/api/services/users.service.js.map +1 -0
  105. package/dist/src/api/types/index.d.ts +522 -0
  106. package/dist/src/api/types/index.js +12 -0
  107. package/dist/src/api/types/index.js.map +1 -0
  108. package/dist/src/api/utils/cert.d.ts +17 -0
  109. package/dist/src/api/utils/cert.js +437 -0
  110. package/dist/src/api/utils/cert.js.map +1 -0
  111. package/dist/src/api/ws/index.d.ts +15 -0
  112. package/dist/src/api/ws/index.js +89 -0
  113. package/dist/src/api/ws/index.js.map +1 -0
  114. package/dist/src/api/ws/nsp/logs.d.ts +11 -0
  115. package/dist/src/api/ws/nsp/logs.js +121 -0
  116. package/dist/src/api/ws/nsp/logs.js.map +1 -0
  117. package/dist/src/api/ws/nsp/main.d.ts +9 -0
  118. package/dist/src/api/ws/nsp/main.js +49 -0
  119. package/dist/src/api/ws/nsp/main.js.map +1 -0
  120. package/dist/src/api/ws/nsp/metrics.d.ts +33 -0
  121. package/dist/src/api/ws/nsp/metrics.js +225 -0
  122. package/dist/src/api/ws/nsp/metrics.js.map +1 -0
  123. package/dist/src/api/ws/nsp/notifications.d.ts +11 -0
  124. package/dist/src/api/ws/nsp/notifications.js +39 -0
  125. package/dist/src/api/ws/nsp/notifications.js.map +1 -0
  126. package/dist/src/api/ws/nsp/plugins.d.ts +13 -0
  127. package/dist/src/api/ws/nsp/plugins.js +33 -0
  128. package/dist/src/api/ws/nsp/plugins.js.map +1 -0
  129. package/dist/src/api/ws/nsp/status.d.ts +12 -0
  130. package/dist/src/api/ws/nsp/status.js +41 -0
  131. package/dist/src/api/ws/nsp/status.js.map +1 -0
  132. package/dist/src/api/ws/nsp/streams.d.ts +30 -0
  133. package/dist/src/api/ws/nsp/streams.js +140 -0
  134. package/dist/src/api/ws/nsp/streams.js.map +1 -0
  135. package/dist/src/api/ws/types.d.ts +82 -0
  136. package/dist/src/api/ws/types.js +3 -0
  137. package/dist/src/api/ws/types.js.map +1 -0
  138. package/dist/src/api.d.ts +60 -0
  139. package/dist/src/api.js +66 -0
  140. package/dist/src/api.js.map +1 -0
  141. package/dist/src/camera/index.d.ts +54 -0
  142. package/dist/src/camera/index.js +210 -0
  143. package/dist/src/camera/index.js.map +1 -0
  144. package/dist/src/camera/streaming/peer-connection.d.ts +31 -0
  145. package/dist/src/camera/streaming/peer-connection.js +157 -0
  146. package/dist/src/camera/streaming/peer-connection.js.map +1 -0
  147. package/dist/src/camera/streaming/streaming-session.d.ts +32 -0
  148. package/dist/src/camera/streaming/streaming-session.js +172 -0
  149. package/dist/src/camera/streaming/streaming-session.js.map +1 -0
  150. package/dist/src/camera/streaming/webrtc-connection.d.ts +33 -0
  151. package/dist/src/camera/streaming/webrtc-connection.js +156 -0
  152. package/dist/src/camera/streaming/webrtc-connection.js.map +1 -0
  153. package/dist/src/camera/subscribed.d.ts +6 -0
  154. package/dist/src/camera/subscribed.js +14 -0
  155. package/dist/src/camera/subscribed.js.map +1 -0
  156. package/dist/src/camera/types.d.ts +130 -0
  157. package/dist/src/camera/types.js +3 -0
  158. package/dist/src/camera/types.js.map +1 -0
  159. package/dist/src/go2rtc/index.d.ts +24 -0
  160. package/dist/src/go2rtc/index.js +220 -0
  161. package/dist/src/go2rtc/index.js.map +1 -0
  162. package/dist/src/go2rtc/types.d.ts +14 -0
  163. package/dist/src/go2rtc/types.js +76 -0
  164. package/dist/src/go2rtc/types.js.map +1 -0
  165. package/dist/src/plugins/base.d.ts +19 -0
  166. package/dist/src/plugins/base.js +26 -0
  167. package/dist/src/plugins/base.js.map +1 -0
  168. package/dist/src/plugins/cameraStorage.d.ts +97 -0
  169. package/dist/src/plugins/cameraStorage.js +290 -0
  170. package/dist/src/plugins/cameraStorage.js.map +1 -0
  171. package/dist/src/plugins/child.d.ts +18 -0
  172. package/dist/src/plugins/child.js +140 -0
  173. package/dist/src/plugins/child.js.map +1 -0
  174. package/dist/src/plugins/config.d.ts +113 -0
  175. package/dist/src/plugins/config.js +234 -0
  176. package/dist/src/plugins/config.js.map +1 -0
  177. package/dist/src/plugins/index.d.ts +36 -0
  178. package/dist/src/plugins/index.js +328 -0
  179. package/dist/src/plugins/index.js.map +1 -0
  180. package/dist/src/plugins/plugin.d.ts +47 -0
  181. package/dist/src/plugins/plugin.js +215 -0
  182. package/dist/src/plugins/plugin.js.map +1 -0
  183. package/dist/src/plugins/schema.d.ts +268 -0
  184. package/dist/src/plugins/schema.js +717 -0
  185. package/dist/src/plugins/schema.js.map +1 -0
  186. package/dist/src/plugins/storage.d.ts +28 -0
  187. package/dist/src/plugins/storage.js +45 -0
  188. package/dist/src/plugins/storage.js.map +1 -0
  189. package/dist/src/plugins/types.d.ts +162 -0
  190. package/dist/src/plugins/types.js +21 -0
  191. package/dist/src/plugins/types.js.map +1 -0
  192. package/dist/src/plugins/worker.d.ts +27 -0
  193. package/dist/src/plugins/worker.js +236 -0
  194. package/dist/src/plugins/worker.js.map +1 -0
  195. package/dist/src/proxy/client/cameraDevice.d.ts +29 -0
  196. package/dist/src/proxy/client/cameraDevice.js +171 -0
  197. package/dist/src/proxy/client/cameraDevice.js.map +1 -0
  198. package/dist/src/proxy/client/deviceManager.d.ts +40 -0
  199. package/dist/src/proxy/client/deviceManager.js +239 -0
  200. package/dist/src/proxy/client/deviceManager.js.map +1 -0
  201. package/dist/src/proxy/client/index.d.ts +4 -0
  202. package/dist/src/proxy/client/index.js +21 -0
  203. package/dist/src/proxy/client/index.js.map +1 -0
  204. package/dist/src/proxy/client/pluginsManager.d.ts +35 -0
  205. package/dist/src/proxy/client/pluginsManager.js +237 -0
  206. package/dist/src/proxy/client/pluginsManager.js.map +1 -0
  207. package/dist/src/proxy/client/systemManager.d.ts +29 -0
  208. package/dist/src/proxy/client/systemManager.js +163 -0
  209. package/dist/src/proxy/client/systemManager.js.map +1 -0
  210. package/dist/src/proxy/index.d.ts +20 -0
  211. package/dist/src/proxy/index.js +98 -0
  212. package/dist/src/proxy/index.js.map +1 -0
  213. package/dist/src/proxy/proxies/camera.d.ts +26 -0
  214. package/dist/src/proxy/proxies/camera.js +72 -0
  215. package/dist/src/proxy/proxies/camera.js.map +1 -0
  216. package/dist/src/proxy/proxies/plugin.d.ts +30 -0
  217. package/dist/src/proxy/proxies/plugin.js +110 -0
  218. package/dist/src/proxy/proxies/plugin.js.map +1 -0
  219. package/dist/src/proxy/proxies/server.d.ts +34 -0
  220. package/dist/src/proxy/proxies/server.js +92 -0
  221. package/dist/src/proxy/proxies/server.js.map +1 -0
  222. package/dist/src/proxy/types.d.ts +189 -0
  223. package/dist/src/proxy/types.js +3 -0
  224. package/dist/src/proxy/types.js.map +1 -0
  225. package/dist/src/proxy/utils/generateKeys.d.ts +5 -0
  226. package/dist/src/proxy/utils/generateKeys.js +13 -0
  227. package/dist/src/proxy/utils/generateKeys.js.map +1 -0
  228. package/dist/src/proxy/ws/index.d.ts +21 -0
  229. package/dist/src/proxy/ws/index.js +75 -0
  230. package/dist/src/proxy/ws/index.js.map +1 -0
  231. package/dist/src/services/config/index.d.ts +60 -0
  232. package/dist/src/services/config/index.js +319 -0
  233. package/dist/src/services/config/index.js.map +1 -0
  234. package/dist/src/services/config/types.d.ts +153 -0
  235. package/dist/src/services/config/types.js +13 -0
  236. package/dist/src/services/config/types.js.map +1 -0
  237. package/dist/src/services/logger/index.d.ts +37 -0
  238. package/dist/src/services/logger/index.js +181 -0
  239. package/dist/src/services/logger/index.js.map +1 -0
  240. package/package.json +46 -0
  241. package/webpack.config.js +29 -0
@@ -0,0 +1,72 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CameraDeviceProxy = void 0;
4
+ const tsyringe_1 = require("tsyringe");
5
+ class CameraDeviceProxy {
6
+ api;
7
+ reqServer;
8
+ pubServer;
9
+ socketBridge;
10
+ constructor(reqServer, pubServer, socketBridge) {
11
+ this.api = tsyringe_1.container.resolve('api');
12
+ this.reqServer = reqServer;
13
+ this.pubServer = pubServer;
14
+ this.socketBridge = socketBridge;
15
+ }
16
+ updateState(data) {
17
+ const camera = this.api.getCamera(data.cameraId);
18
+ camera?.updateState(data.stateName, data.eventData);
19
+ }
20
+ refreshStates(data) {
21
+ const camera = this.api.getCamera(data.cameraId);
22
+ if (camera) {
23
+ const states = {
24
+ light: camera.getValue('light'),
25
+ motion: camera.getValue('motion'),
26
+ audio: camera.getValue('audio'),
27
+ object: camera.getValue('object'),
28
+ doorbell: camera.getValue('doorbell'),
29
+ siren: camera.getValue('siren'),
30
+ };
31
+ return states;
32
+ }
33
+ }
34
+ async reqMessages(msg) {
35
+ try {
36
+ if (!msg.targetId || !msg.fn || !msg.data) {
37
+ throw new Error('Missing message parameters');
38
+ }
39
+ if (typeof this[msg.fn] !== 'function') {
40
+ throw new Error(`Unknown function: ${msg.fn}`);
41
+ }
42
+ const response = this[msg.fn]({ ...(msg.data || {}), cameraId: msg.cameraId });
43
+ await this.reqServer.send(JSON.stringify({ response: response, replyTo: msg.requestId }));
44
+ }
45
+ catch (error) {
46
+ await this.reqServer.send(JSON.stringify({ response: { error: error.message }, replyTo: msg.requestId }));
47
+ }
48
+ }
49
+ async publishCameraMessage(cameraId, stateOrType, data) {
50
+ if (this.isCameraState(stateOrType)) {
51
+ const event = { stateName: stateOrType, data };
52
+ const message = JSON.stringify(event);
53
+ const socketEvent = 'updateState';
54
+ this.socketBridge.nsp.emit(stateOrType, { cameraId, data });
55
+ this.socketBridge.nsp.emit(socketEvent, { cameraId, stateName: stateOrType, data });
56
+ await this.pubServer.send([`cam-sub-${cameraId}`, message]);
57
+ }
58
+ else {
59
+ const event = { type: stateOrType, data };
60
+ const message = JSON.stringify(event);
61
+ const socketEvent = 'updateDevice';
62
+ this.socketBridge.nsp.emit(socketEvent, { cameraId, type: stateOrType, data });
63
+ await this.pubServer.send([`cam-sub-${cameraId}`, message]);
64
+ }
65
+ }
66
+ isCameraState(value) {
67
+ const validStateNames = ['light', 'motion', 'audio', 'object', 'doorbell', 'siren'];
68
+ return validStateNames.includes(value);
69
+ }
70
+ }
71
+ exports.CameraDeviceProxy = CameraDeviceProxy;
72
+ //# sourceMappingURL=camera.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"camera.js","sourceRoot":"","sources":["../../../../../../src/proxy/proxies/camera.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ /// <reference types="node" />
2
+ /// <reference types="node" />
3
+ /// <reference types="node" />
4
+ /// <reference types="node" />
5
+ /// <reference types="node" />
6
+ import type { Router } from 'zeromq';
7
+ import { type CameraStorage, type BasePlugin } from '../../plugins/types';
8
+ import type { MethodKeys } from '../types';
9
+ export declare class PluginProxy {
10
+ private logger;
11
+ private pluginsService;
12
+ private router;
13
+ private timeout;
14
+ private pluginRequestIdCounter;
15
+ private storageRequestIdCounter;
16
+ pendingRequests: Map<string, {
17
+ resolve: (value: unknown) => void;
18
+ reject: (reason?: any) => void;
19
+ timeout: NodeJS.Timeout;
20
+ }>;
21
+ private requestQueue;
22
+ private isProcessing;
23
+ constructor(router: Router);
24
+ onRequestPluginFn<K extends Exclude<MethodKeys<BasePlugin>, 'configureCameras'>>(pluginId: string, fn: K, ...args: Parameters<BasePlugin[K]>): Promise<ReturnType<BasePlugin[K]>>;
25
+ onRequestStorageFn<K extends MethodKeys<CameraStorage>>(pluginId: string, cameraId: string, fn: K, ...args: Parameters<CameraStorage[K]>): Promise<ReturnType<CameraStorage[K]>>;
26
+ private enqueueAndProcessRequest;
27
+ private processNextRequest;
28
+ private onReply;
29
+ private resolveRequest;
30
+ }
@@ -0,0 +1,110 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.PluginProxy = void 0;
7
+ const tsyringe_1 = require("tsyringe");
8
+ const plugins_service_1 = __importDefault(require("../../api/services/plugins.service"));
9
+ class PluginProxy {
10
+ logger;
11
+ pluginsService;
12
+ router;
13
+ timeout = 30000;
14
+ pluginRequestIdCounter = 0;
15
+ storageRequestIdCounter = 0;
16
+ pendingRequests = new Map();
17
+ requestQueue = [];
18
+ isProcessing = false;
19
+ constructor(router) {
20
+ this.logger = tsyringe_1.container.resolve('logger');
21
+ this.pluginsService = new plugins_service_1.default();
22
+ this.router = router;
23
+ this.onReply();
24
+ }
25
+ onRequestPluginFn(pluginId, fn, ...args) {
26
+ const requestId = (++this.pluginRequestIdCounter).toString();
27
+ const payload = { fn, args, requestId, pluginId, targetId: `pm-dealer-${pluginId}` };
28
+ const pluginProcess = this.pluginsService.getPluginProcessById(pluginId);
29
+ if (!pluginProcess) {
30
+ throw new Error(`Plugin process with ID "${pluginId}" not found`);
31
+ }
32
+ else if (pluginProcess.status !== "started" /* PLUGIN_STATUS.STARTED */) {
33
+ throw new Error(`Plugin process "${pluginProcess.plugin.displayName}" not started`);
34
+ }
35
+ return this.enqueueAndProcessRequest(payload);
36
+ }
37
+ onRequestStorageFn(pluginId, cameraId, fn, ...args) {
38
+ const requestId = (++this.storageRequestIdCounter).toString();
39
+ const payload = { fn, args, requestId, cameraId, pluginId, targetId: `pm-dealer-${pluginId}` };
40
+ const pluginProcess = this.pluginsService.getPluginProcessById(pluginId);
41
+ if (!pluginProcess) {
42
+ throw new Error(`Plugin process with ID "${pluginId}" not found`);
43
+ }
44
+ else if (pluginProcess.status !== "started" /* PLUGIN_STATUS.STARTED */) {
45
+ throw new Error(`Plugin process "${pluginProcess.plugin.displayName}" not started`);
46
+ }
47
+ return this.enqueueAndProcessRequest(payload);
48
+ }
49
+ enqueueAndProcessRequest(payload) {
50
+ return new Promise((resolve, reject) => {
51
+ const queueItem = {
52
+ payload,
53
+ resolve,
54
+ reject,
55
+ timeout: setTimeout(() => {
56
+ reject(new Error(`Request timed out after ${this.timeout}ms.`, { cause: payload }));
57
+ this.processNextRequest();
58
+ }, this.timeout),
59
+ };
60
+ this.requestQueue.push(queueItem);
61
+ this.processNextRequest();
62
+ });
63
+ }
64
+ async processNextRequest() {
65
+ if (this.isProcessing || this.requestQueue.length === 0) {
66
+ return;
67
+ }
68
+ this.isProcessing = true;
69
+ const currentRequest = this.requestQueue.shift();
70
+ const { payload, resolve, reject, timeout } = currentRequest;
71
+ try {
72
+ await this.router.send([payload.targetId, '', JSON.stringify(payload)]);
73
+ this.pendingRequests.set(payload.requestId, { resolve, reject, timeout });
74
+ }
75
+ catch (error) {
76
+ clearTimeout(timeout);
77
+ reject(error);
78
+ this.isProcessing = false;
79
+ this.processNextRequest();
80
+ }
81
+ }
82
+ async onReply() {
83
+ for await (const [, message] of this.router) {
84
+ try {
85
+ const msg = JSON.parse(message.toString());
86
+ this.resolveRequest(msg);
87
+ }
88
+ catch (error) {
89
+ this.logger.error('Error during resolving router request:', message.toString(), error);
90
+ }
91
+ }
92
+ }
93
+ resolveRequest(msg) {
94
+ const resolver = this.pendingRequests.get(msg.replyTo);
95
+ if (resolver) {
96
+ clearTimeout(resolver.timeout);
97
+ if (msg.response?.error) {
98
+ resolver.reject(new Error(msg.response.error));
99
+ }
100
+ else {
101
+ resolver.resolve(msg.response);
102
+ }
103
+ this.pendingRequests.delete(msg.replyTo);
104
+ }
105
+ this.isProcessing = false;
106
+ this.processNextRequest();
107
+ }
108
+ }
109
+ exports.PluginProxy = PluginProxy;
110
+ //# sourceMappingURL=plugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../../../../../../src/proxy/proxies/plugin.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ import type { Reply } from 'zeromq';
2
+ import type { ApiProxyMethods, SystemProxyMethods, ProxyMessageStructure } from '../types';
3
+ import type { Camera } from '../../api/database/types';
4
+ import type { CameraConfig } from '../../camera/types';
5
+ export declare interface ServerProxy {
6
+ listen(): any;
7
+ removeListener(): any;
8
+ removeAllListeners(): any;
9
+ }
10
+ export declare class ServerProxy implements ApiProxyMethods, SystemProxyMethods {
11
+ private camerasService;
12
+ private pluginsService;
13
+ private reqServer;
14
+ constructor(reqServer: Reply);
15
+ getCameraByName(data: {
16
+ name: string;
17
+ }): Promise<Camera | undefined>;
18
+ getCameraById(data: {
19
+ id: string;
20
+ }): Promise<Camera | undefined>;
21
+ createCamera(data: {
22
+ camera: CameraConfig;
23
+ pluginId: string;
24
+ }): Promise<Camera>;
25
+ removeCameraByName(data: {
26
+ name: string;
27
+ pluginId: string;
28
+ }): Promise<void>;
29
+ removeCameraById(data: {
30
+ id: string;
31
+ pluginId: string;
32
+ }): Promise<void>;
33
+ reqMessages(msg: ProxyMessageStructure): Promise<void>;
34
+ }
@@ -0,0 +1,92 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.ServerProxy = void 0;
7
+ const zod_1 = require("zod");
8
+ const cameras_service_1 = __importDefault(require("../../api/services/cameras.service"));
9
+ const plugins_service_1 = __importDefault(require("../../api/services/plugins.service"));
10
+ const cameras_schema_1 = require("../../api/schemas/cameras.schema");
11
+ class ServerProxy {
12
+ camerasService;
13
+ pluginsService;
14
+ reqServer;
15
+ constructor(reqServer) {
16
+ this.reqServer = reqServer;
17
+ this.camerasService = new cameras_service_1.default();
18
+ this.pluginsService = new plugins_service_1.default();
19
+ }
20
+ async getCameraByName(data) {
21
+ return await this.camerasService.findTransformedByName(data.name);
22
+ }
23
+ async getCameraById(data) {
24
+ return await this.camerasService.findTransformedById(data.id);
25
+ }
26
+ async createCamera(data) {
27
+ const cameraExist = await this.camerasService.findByName(data.camera.name);
28
+ if (cameraExist) {
29
+ throw new Error(`Camera with name "${data.camera.name}" already exist`);
30
+ }
31
+ let cameraDB;
32
+ try {
33
+ cameraDB = cameras_schema_1.createCameraSchema.parse({
34
+ ...data.camera,
35
+ _id: '',
36
+ nativeId: data.camera.nativeId,
37
+ pluginId: data.pluginId,
38
+ });
39
+ }
40
+ catch (error) {
41
+ if (error instanceof zod_1.ZodError) {
42
+ throw new Error(`${error.errors[0].message} - (${JSON.stringify(error.errors[0].path)})`);
43
+ }
44
+ throw error;
45
+ }
46
+ return await this.camerasService.createTransformedCamera(cameraDB);
47
+ }
48
+ async removeCameraByName(data) {
49
+ const camera = await this.camerasService.findByName(data.name);
50
+ if (!camera) {
51
+ throw new Error(`Camera with name "${data.name}" does not exist`);
52
+ }
53
+ if (camera.pluginId !== data.pluginId) {
54
+ throw new Error(`Camera with name "${data.name}" not belong to plugin with ID "${data.pluginId}"`);
55
+ }
56
+ await this.camerasService.removeByName(data.name);
57
+ }
58
+ async removeCameraById(data) {
59
+ const camera = await this.camerasService.findById(data.id);
60
+ if (!camera) {
61
+ throw new Error(`Camera with id "${data.id}" does not exist`);
62
+ }
63
+ if (camera.pluginId !== data.pluginId) {
64
+ throw new Error(`Camera with id "${data.id}" not belong to plugin with ID "${data.pluginId}"`);
65
+ }
66
+ await this.camerasService.removeById(data.id);
67
+ }
68
+ async reqMessages(msg) {
69
+ try {
70
+ if (!msg.targetId || !msg.pluginId || !msg.fn || !msg.data) {
71
+ throw new Error('Missing message parameters');
72
+ }
73
+ const pluginProcess = this.pluginsService.getPluginProcessById(msg.pluginId);
74
+ if (!pluginProcess) {
75
+ throw new Error(`Plugin process with ID "${msg.pluginId}" not found`);
76
+ }
77
+ else if (pluginProcess.status !== "started" /* PLUGIN_STATUS.STARTED */) {
78
+ throw new Error(`Plugin process "${pluginProcess.plugin.displayName}" not started`);
79
+ }
80
+ if (typeof this[msg.fn] !== 'function') {
81
+ throw new Error(`Unknown function: ${msg.fn}`);
82
+ }
83
+ const response = await this[msg.fn]({ ...(msg.data || {}), pluginId: msg.pluginId });
84
+ await this.reqServer.send(JSON.stringify({ response: response, replyTo: msg.requestId }));
85
+ }
86
+ catch (error) {
87
+ await this.reqServer.send(JSON.stringify({ response: { error: error.message }, replyTo: msg.requestId }));
88
+ }
89
+ }
90
+ }
91
+ exports.ServerProxy = ServerProxy;
92
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../../../../../src/proxy/proxies/server.ts"],"names":[],"mappings":";;;;;;AAAA,6BAA+B;AAE/B,yFAAgE;AAChE,yFAAgE;AAChE,qEAAsE;AActE,MAAa,WAAW;IACd,cAAc,CAAiB;IAC/B,cAAc,CAAiB;IAE/B,SAAS,CAAQ;IAEzB,YAAY,SAAgB;QAC1B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAE3B,IAAI,CAAC,cAAc,GAAG,IAAI,yBAAc,EAAE,CAAC;QAC3C,IAAI,CAAC,cAAc,GAAG,IAAI,yBAAc,EAAE,CAAC;IAC7C,CAAC;IAEM,KAAK,CAAC,eAAe,CAAC,IAAsB;QACjD,OAAO,MAAM,IAAI,CAAC,cAAc,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpE,CAAC;IAEM,KAAK,CAAC,aAAa,CAAC,IAAoB;QAC7C,OAAO,MAAM,IAAI,CAAC,cAAc,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAChE,CAAC;IAEM,KAAK,CAAC,YAAY,CAAC,IAAgD;QACxE,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAE3E,IAAI,WAAW,EAAE,CAAC;YAChB,MAAM,IAAI,KAAK,CAAC,qBAAqB,IAAI,CAAC,MAAM,CAAC,IAAI,iBAAiB,CAAC,CAAC;QAC1E,CAAC;QAED,IAAI,QAAkB,CAAC;QAEvB,IAAI,CAAC;YACH,QAAQ,GAAG,mCAAkB,CAAC,KAAK,CAAC;gBAClC,GAAG,IAAI,CAAC,MAAM;gBACd,GAAG,EAAE,EAAE;gBACP,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ;gBAC9B,QAAQ,EAAE,IAAI,CAAC,QAAQ;aACxB,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,IAAI,KAAK,YAAY,cAAQ,EAAE,CAAC;gBAC9B,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC5F,CAAC;YAED,MAAM,KAAK,CAAC;QACd,CAAC;QAED,OAAO,MAAM,IAAI,CAAC,cAAc,CAAC,uBAAuB,CAAC,QAAQ,CAAC,CAAC;IACrE,CAAC;IAEM,KAAK,CAAC,kBAAkB,CAAC,IAAwC;QACtE,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAE/D,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,qBAAqB,IAAI,CAAC,IAAI,kBAAkB,CAAC,CAAC;QACpE,CAAC;QAED,IAAI,MAAM,CAAC,QAAQ,KAAK,IAAI,CAAC,QAAQ,EAAE,CAAC;YACtC,MAAM,IAAI,KAAK,CAAC,qBAAqB,IAAI,CAAC,IAAI,mCAAmC,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrG,CAAC;QAED,MAAM,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpD,CAAC;IAEM,KAAK,CAAC,gBAAgB,CAAC,IAAsC;QAClE,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAE3D,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,mBAAmB,IAAI,CAAC,EAAE,kBAAkB,CAAC,CAAC;QAChE,CAAC;QAED,IAAI,MAAM,CAAC,QAAQ,KAAK,IAAI,CAAC,QAAQ,EAAE,CAAC;YACtC,MAAM,IAAI,KAAK,CAAC,mBAAmB,IAAI,CAAC,EAAE,mCAAmC,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;QACjG,CAAC;QAED,MAAM,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAChD,CAAC;IAEM,KAAK,CAAC,WAAW,CAAC,GAA0B;QACjD,IAAI,CAAC;YACH,IAAI,CAAC,GAAG,CAAC,QAAQ,IAAI,CAAC,GAAG,CAAC,QAAQ,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;gBAC3D,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;YAChD,CAAC;YAED,MAAM,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC,oBAAoB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAE7E,IAAI,CAAC,aAAa,EAAE,CAAC;gBACnB,MAAM,IAAI,KAAK,CAAC,2BAA2B,GAAG,CAAC,QAAQ,aAAa,CAAC,CAAC;YACxE,CAAC;iBAAM,IAAI,aAAa,CAAC,MAAM,0CAA0B,EAAE,CAAC;gBAC1D,MAAM,IAAI,KAAK,CAAC,mBAAmB,aAAa,CAAC,MAAM,CAAC,WAAW,eAAe,CAAC,CAAC;YACtF,CAAC;YAED,IAAI,OAAO,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,UAAU,EAAE,CAAC;gBACvC,MAAM,IAAI,KAAK,CAAC,qBAAqB,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;YACjD,CAAC;YAED,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;YACrF,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;QAC5F,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;QAC5G,CAAC;IACH,CAAC;CACF;AApGD,kCAoGC"}
@@ -0,0 +1,189 @@
1
+ /// <reference types="node" />
2
+ import type { Camera } from '../api/database/types';
3
+ import type { BasePlugin, CameraStorage } from '../plugins/types';
4
+ import type { CameraConfig, OnSetEvent, StateValues, CameraDevice } from '../camera/types';
5
+ export type MethodKeys<T> = {
6
+ [K in keyof T]: T[K] extends Function ? K : never;
7
+ }[keyof T];
8
+ export interface RequestPayload {
9
+ fn: string;
10
+ data: Record<string, any>;
11
+ requestId: string;
12
+ }
13
+ export interface QueueRequestItem {
14
+ payload: RequestPayload;
15
+ resolve: (value: any) => void;
16
+ reject: (reason?: any) => void;
17
+ timeout: NodeJS.Timeout;
18
+ }
19
+ export interface RouterDealerPayload {
20
+ fn: keyof BasePlugin | keyof CameraStorage;
21
+ args: any[];
22
+ requestId: string;
23
+ targetId: string;
24
+ pluginId: string;
25
+ cameraId?: string;
26
+ }
27
+ export interface PluginRouterDealePayload extends RouterDealerPayload {
28
+ fn: keyof BasePlugin;
29
+ }
30
+ export interface StorageRouterDealerPayload extends RouterDealerPayload {
31
+ fn: keyof CameraStorage;
32
+ }
33
+ export interface QueueRouterDealerItem {
34
+ payload: RouterDealerPayload;
35
+ resolve: (value: any) => void;
36
+ reject: (reason?: any) => void;
37
+ timeout: NodeJS.Timeout;
38
+ }
39
+ export type CameraId = string;
40
+ export type PluginId = string;
41
+ export type TargetID = CameraId | PluginId | 'all';
42
+ export interface PendingMessagePayload {
43
+ replyTo: string;
44
+ response?: any;
45
+ }
46
+ export interface ListenerMessagePayload {
47
+ type: keyof ProxyEventCallbacks;
48
+ data: any;
49
+ }
50
+ export interface ProxyMessageStructure {
51
+ targetId: string;
52
+ targetName: string;
53
+ pluginId: string;
54
+ cameraId?: boolean;
55
+ requestId: string;
56
+ fn: ProxyMethodNames;
57
+ data: any;
58
+ timestamp: number;
59
+ }
60
+ export type ProxyEvents = SystemManagerProxyEvents & DeviceManagerProxyEvents;
61
+ export type ProxyEventCallbacks = SystemManagerProxyEventCallbacks & DeviceManagerProxyEventCallbacks;
62
+ export type ProxyMethodNames = SystemManagerProxyMethodNames | DeviceManagerProxyMethodNames;
63
+ export interface ApiProxyMethods {
64
+ createCamera(data: {
65
+ camera: CameraConfig;
66
+ pluginId: string;
67
+ }): Promise<Camera>;
68
+ getCameraByName(data: {
69
+ name: string;
70
+ pluginId: string;
71
+ }): Promise<Camera | undefined>;
72
+ getCameraById(data: {
73
+ id: string;
74
+ pluginId: string;
75
+ }): Promise<Camera | undefined>;
76
+ removeCameraByName(data: {
77
+ name: string;
78
+ pluginId: string;
79
+ }): Promise<void>;
80
+ removeCameraById(data: {
81
+ id: string;
82
+ pluginId: string;
83
+ }): Promise<void>;
84
+ }
85
+ export interface SystemProxyMethods {
86
+ }
87
+ export interface DeviceManagerListenerMessagePayload {
88
+ type: keyof DeviceManagerProxyEventCallbacks;
89
+ data: any;
90
+ }
91
+ export interface DeviceManagerProxyMethods {
92
+ createCamera(camera: CameraConfig): Promise<CameraDevice>;
93
+ getCameraByName(name: string): Promise<CameraDevice | undefined>;
94
+ getCameraById(id: string): Promise<CameraDevice | undefined>;
95
+ removeCameraByName(name: string): Promise<void>;
96
+ removeCameraById(id: string): Promise<void>;
97
+ listen<E extends keyof DeviceManagerProxyEventCallbacks>(eventType: E, callback: DeviceManagerProxyEventCallbacks[E]): void;
98
+ removeListener<E extends keyof DeviceManagerProxyEventCallbacks>(eventType: E, callbackToRemove: DeviceManagerProxyEventCallbacks[E]): void;
99
+ removeAllListeners<E extends keyof DeviceManagerProxyEventCallbacks>(eventType?: E): void;
100
+ }
101
+ export type DeviceManagerProxyMethodNames = MethodKeys<DeviceManagerProxyMethods>;
102
+ export interface DeviceManagerProxyEvents {
103
+ cameraAdded: Camera;
104
+ cameraRemoved: Camera;
105
+ cameraUpdated: Camera;
106
+ }
107
+ export type DeviceManagerProxyEventCallbacks = {
108
+ cameraAdded: (camera: CameraDevice) => void;
109
+ cameraUpdated: (cameraId: string, camera: CameraDevice) => void;
110
+ cameraRemoved: (cameraId: string) => void;
111
+ };
112
+ export interface DeviceManagerProxyGenericEvent<K extends keyof DeviceManagerProxyEvents> {
113
+ type: K;
114
+ data: DeviceManagerProxyEvents[K];
115
+ }
116
+ export interface SystemManagerListenerMessagePayload {
117
+ type: keyof SystemManagerProxyEventCallbacks;
118
+ data: any;
119
+ }
120
+ export interface SystemManagerProxyMethods {
121
+ listen<E extends keyof SystemManagerProxyEventCallbacks>(eventType: E, callback: SystemManagerProxyEventCallbacks[E]): void;
122
+ removeListener<E extends keyof SystemManagerProxyEventCallbacks>(eventType: E, callbackToRemove: SystemManagerProxyEventCallbacks[E]): void;
123
+ removeAllListeners<E extends keyof SystemManagerProxyEventCallbacks>(eventType?: E): void;
124
+ }
125
+ export type SystemManagerProxyMethodNames = MethodKeys<SystemManagerProxyMethods>;
126
+ export interface SystemManagerProxyEvents {
127
+ }
128
+ export type SystemManagerProxyEventCallbacks = {};
129
+ export interface SystemManagerProxyGenericEvent<K extends keyof SystemManagerProxyEvents> {
130
+ type: K;
131
+ data: SystemManagerProxyEvents[K];
132
+ }
133
+ export interface PluginsManagerListenerMessagePayload {
134
+ type: keyof PluginsManagerProxyEventCallbacks;
135
+ data: any;
136
+ }
137
+ export interface PluginsManagerProxyMethods {
138
+ listen<E extends keyof PluginsManagerProxyEventCallbacks>(eventType: E, callback: PluginsManagerProxyEventCallbacks[E]): void;
139
+ removeListener<E extends keyof PluginsManagerProxyEventCallbacks>(eventType: E, callbackToRemove: PluginsManagerProxyEventCallbacks[E]): void;
140
+ removeAllListeners<E extends keyof PluginsManagerProxyEventCallbacks>(eventType?: E): void;
141
+ }
142
+ export type PluginsManagerProxyMethodNames = MethodKeys<PluginsManagerProxyMethods>;
143
+ export interface PluginsManagerProxyEvents {
144
+ }
145
+ export type PluginsManagerProxyEventCallbacks = {};
146
+ export interface PluginsManagerProxyGenericEvent<K extends keyof PluginsManagerProxyEvents> {
147
+ type: K;
148
+ data: PluginsManagerProxyEvents[K];
149
+ }
150
+ export type CameraDeviceListenerSocketEventType = 'updateDevice' | 'updateState' | 'updateOptions';
151
+ export interface CameraDeviceListenerStatePayload<K extends keyof StateValues> {
152
+ stateName: K;
153
+ data: {
154
+ newEvent: StateValues[K];
155
+ oldEvent: StateValues[K];
156
+ };
157
+ }
158
+ export interface CameraDeviceListenerMessagePayload {
159
+ type: 'removed' | 'updated';
160
+ data?: any;
161
+ }
162
+ export interface CameraDeviceProxyMessageStructure {
163
+ targetId: string;
164
+ targetName: string;
165
+ pluginId: string;
166
+ cameraId?: string;
167
+ requestId: string;
168
+ fn: CameraDeviceProxyMethodNames;
169
+ data: any;
170
+ timestamp: number;
171
+ }
172
+ export interface CameraDeviceProxyMethods {
173
+ updateState<T extends keyof StateValues>(data: {
174
+ stateName: T;
175
+ eventData: OnSetEvent<T>;
176
+ cameraId: string;
177
+ }): void;
178
+ refreshStates(data: {
179
+ cameraId: string;
180
+ }): StateValues | undefined;
181
+ }
182
+ export type CameraDeviceProxyMethodNames = MethodKeys<CameraDeviceProxyMethods>;
183
+ export type CameraDeviceProxyEventCallbacks = {
184
+ [K in keyof StateValues]: (newData: StateValues[K], oldData: StateValues[K]) => void;
185
+ };
186
+ export interface CameraDeviceProxyGenericEvent<K extends keyof StateValues> {
187
+ type: K;
188
+ data: StateValues[K];
189
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../../src/proxy/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,5 @@
1
+ export interface ProxyKeyPair {
2
+ publicKey: string;
3
+ secretKey: string;
4
+ }
5
+ export declare const generateKeyPair: () => ProxyKeyPair;
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.generateKeyPair = void 0;
4
+ const zeromq_1 = require("zeromq");
5
+ const generateKeyPair = () => {
6
+ const keyPair = (0, zeromq_1.curveKeyPair)();
7
+ return {
8
+ publicKey: keyPair.publicKey,
9
+ secretKey: keyPair.secretKey,
10
+ };
11
+ };
12
+ exports.generateKeyPair = generateKeyPair;
13
+ //# sourceMappingURL=generateKeys.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generateKeys.js","sourceRoot":"","sources":["../../../../../../src/proxy/utils/generateKeys.ts"],"names":[],"mappings":";;;AAAA,mCAAsC;AAO/B,MAAM,eAAe,GAAG,GAAiB,EAAE;IAChD,MAAM,OAAO,GAAG,IAAA,qBAAY,GAAE,CAAC;IAE/B,OAAO;QACL,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,SAAS,EAAE,OAAO,CAAC,SAAS;KAC7B,CAAC;AACJ,CAAC,CAAC;AAPW,QAAA,eAAe,mBAO1B"}
@@ -0,0 +1,21 @@
1
+ import type { Server, Namespace } from 'socket.io';
2
+ import type { SocketNsp } from '../../api/ws/types';
3
+ import type { ProxyMethodNames, CameraDeviceProxyMethodNames } from '../types';
4
+ export interface ManagerClientMessage {
5
+ method: ProxyMethodNames;
6
+ args: any[];
7
+ }
8
+ export interface CameraDeviceClientMessage {
9
+ method: CameraDeviceProxyMethodNames;
10
+ args: any[];
11
+ }
12
+ export declare class ProxyBridge {
13
+ nsp: Namespace;
14
+ nspName: SocketNsp;
15
+ private logger;
16
+ private configService;
17
+ private proxy?;
18
+ constructor(io: Server);
19
+ init(): void;
20
+ private setupEventListeners;
21
+ }