@camera.ui/browser 0.0.1 → 0.0.3

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 (158) hide show
  1. package/package.json +9 -1
  2. package/dist/client/node/src/api.js +0 -27
  3. package/dist/client/node/src/api.js.map +0 -1
  4. package/dist/client/node/src/client.js +0 -106
  5. package/dist/client/node/src/client.js.map +0 -1
  6. package/dist/client/node/src/index.js +0 -19
  7. package/dist/client/node/src/index.js.map +0 -1
  8. package/dist/client/node/src/proxy/cameraDevice/cameraDevice.browser.js +0 -176
  9. package/dist/client/node/src/proxy/cameraDevice/cameraDevice.browser.js.map +0 -1
  10. package/dist/client/node/src/proxy/cameraDevice/cameraDevice.mock.js +0 -3
  11. package/dist/client/node/src/proxy/cameraDevice/cameraDevice.mock.js.map +0 -1
  12. package/dist/client/node/src/proxy/cameraDevice/cameraDevice.node.js +0 -51
  13. package/dist/client/node/src/proxy/cameraDevice/cameraDevice.node.js.map +0 -1
  14. package/dist/client/node/src/proxy/cameraDevice/index.js +0 -11
  15. package/dist/client/node/src/proxy/cameraDevice/index.js.map +0 -1
  16. package/dist/client/node/src/proxy/deviceManager.js +0 -67
  17. package/dist/client/node/src/proxy/deviceManager.js.map +0 -1
  18. package/dist/client/node/src/proxy/index.js +0 -21
  19. package/dist/client/node/src/proxy/index.js.map +0 -1
  20. package/dist/client/node/src/proxy/pluginsManager.js +0 -25
  21. package/dist/client/node/src/proxy/pluginsManager.js.map +0 -1
  22. package/dist/client/node/src/proxy/systemManager.js +0 -25
  23. package/dist/client/node/src/proxy/systemManager.js.map +0 -1
  24. package/dist/client/node/src/socket.js +0 -45
  25. package/dist/client/node/src/socket.js.map +0 -1
  26. package/dist/client/node/src/types.js +0 -3
  27. package/dist/client/node/src/types.js.map +0 -1
  28. package/dist/package.json +0 -149
  29. package/dist/shared/common/utils.js +0 -66
  30. package/dist/shared/common/utils.js.map +0 -1
  31. package/dist/shared/types/index.js +0 -23
  32. package/dist/shared/types/index.js.map +0 -1
  33. package/dist/src/api/database/index.js +0 -203
  34. package/dist/src/api/database/index.js.map +0 -1
  35. package/dist/src/api/database/types.js +0 -3
  36. package/dist/src/api/database/types.js.map +0 -1
  37. package/dist/src/api/go2rtc/api/application.js +0 -32
  38. package/dist/src/api/go2rtc/api/application.js.map +0 -1
  39. package/dist/src/api/go2rtc/api/index.js +0 -33
  40. package/dist/src/api/go2rtc/api/index.js.map +0 -1
  41. package/dist/src/api/go2rtc/api/snapshot.js +0 -22
  42. package/dist/src/api/go2rtc/api/snapshot.js.map +0 -1
  43. package/dist/src/api/go2rtc/api/streams.js +0 -32
  44. package/dist/src/api/go2rtc/api/streams.js.map +0 -1
  45. package/dist/src/api/go2rtc/index.js +0 -13
  46. package/dist/src/api/go2rtc/index.js.map +0 -1
  47. package/dist/src/api/go2rtc/types.js +0 -3
  48. package/dist/src/api/go2rtc/types.js.map +0 -1
  49. package/dist/src/api/middlewares/socketAuth.middleware.js +0 -90
  50. package/dist/src/api/middlewares/socketAuth.middleware.js.map +0 -1
  51. package/dist/src/api/schemas/backup.schema.js +0 -94
  52. package/dist/src/api/schemas/backup.schema.js.map +0 -1
  53. package/dist/src/api/schemas/cameras.schema.js +0 -124
  54. package/dist/src/api/schemas/cameras.schema.js.map +0 -1
  55. package/dist/src/api/schemas/config.schema.js +0 -94
  56. package/dist/src/api/schemas/config.schema.js.map +0 -1
  57. package/dist/src/api/schemas/go2rtc.schema.js +0 -204
  58. package/dist/src/api/schemas/go2rtc.schema.js.map +0 -1
  59. package/dist/src/api/schemas/users.schema.js +0 -131
  60. package/dist/src/api/schemas/users.schema.js.map +0 -1
  61. package/dist/src/api/services/auth.service.js +0 -104
  62. package/dist/src/api/services/auth.service.js.map +0 -1
  63. package/dist/src/api/services/cameras.service.js +0 -535
  64. package/dist/src/api/services/cameras.service.js.map +0 -1
  65. package/dist/src/api/services/plugins.service.js +0 -115
  66. package/dist/src/api/services/plugins.service.js.map +0 -1
  67. package/dist/src/api/services/users.service.js +0 -54
  68. package/dist/src/api/services/users.service.js.map +0 -1
  69. package/dist/src/api/types/index.js +0 -12
  70. package/dist/src/api/types/index.js.map +0 -1
  71. package/dist/src/api/utils/cert.js +0 -437
  72. package/dist/src/api/utils/cert.js.map +0 -1
  73. package/dist/src/api/ws/index.js +0 -89
  74. package/dist/src/api/ws/index.js.map +0 -1
  75. package/dist/src/api/ws/nsp/logs.js +0 -121
  76. package/dist/src/api/ws/nsp/logs.js.map +0 -1
  77. package/dist/src/api/ws/nsp/main.js +0 -49
  78. package/dist/src/api/ws/nsp/main.js.map +0 -1
  79. package/dist/src/api/ws/nsp/metrics.js +0 -225
  80. package/dist/src/api/ws/nsp/metrics.js.map +0 -1
  81. package/dist/src/api/ws/nsp/notifications.js +0 -39
  82. package/dist/src/api/ws/nsp/notifications.js.map +0 -1
  83. package/dist/src/api/ws/nsp/plugins.js +0 -33
  84. package/dist/src/api/ws/nsp/plugins.js.map +0 -1
  85. package/dist/src/api/ws/nsp/status.js +0 -41
  86. package/dist/src/api/ws/nsp/status.js.map +0 -1
  87. package/dist/src/api/ws/nsp/streams.js +0 -140
  88. package/dist/src/api/ws/nsp/streams.js.map +0 -1
  89. package/dist/src/api/ws/types.js +0 -3
  90. package/dist/src/api/ws/types.js.map +0 -1
  91. package/dist/src/api.js +0 -66
  92. package/dist/src/api.js.map +0 -1
  93. package/dist/src/camera/index.js +0 -210
  94. package/dist/src/camera/index.js.map +0 -1
  95. package/dist/src/camera/streaming/peer-connection.js +0 -157
  96. package/dist/src/camera/streaming/peer-connection.js.map +0 -1
  97. package/dist/src/camera/streaming/streaming-session.js +0 -172
  98. package/dist/src/camera/streaming/streaming-session.js.map +0 -1
  99. package/dist/src/camera/streaming/webrtc-connection.js +0 -156
  100. package/dist/src/camera/streaming/webrtc-connection.js.map +0 -1
  101. package/dist/src/camera/subscribed.js +0 -14
  102. package/dist/src/camera/subscribed.js.map +0 -1
  103. package/dist/src/camera/types.js +0 -3
  104. package/dist/src/camera/types.js.map +0 -1
  105. package/dist/src/go2rtc/index.js +0 -220
  106. package/dist/src/go2rtc/index.js.map +0 -1
  107. package/dist/src/go2rtc/types.js +0 -76
  108. package/dist/src/go2rtc/types.js.map +0 -1
  109. package/dist/src/plugins/base.js +0 -26
  110. package/dist/src/plugins/base.js.map +0 -1
  111. package/dist/src/plugins/cameraStorage.js +0 -290
  112. package/dist/src/plugins/cameraStorage.js.map +0 -1
  113. package/dist/src/plugins/child.js +0 -140
  114. package/dist/src/plugins/child.js.map +0 -1
  115. package/dist/src/plugins/config.js +0 -234
  116. package/dist/src/plugins/config.js.map +0 -1
  117. package/dist/src/plugins/index.js +0 -328
  118. package/dist/src/plugins/index.js.map +0 -1
  119. package/dist/src/plugins/plugin.js +0 -215
  120. package/dist/src/plugins/plugin.js.map +0 -1
  121. package/dist/src/plugins/schema.js +0 -717
  122. package/dist/src/plugins/schema.js.map +0 -1
  123. package/dist/src/plugins/storage.js +0 -45
  124. package/dist/src/plugins/storage.js.map +0 -1
  125. package/dist/src/plugins/types.js +0 -21
  126. package/dist/src/plugins/types.js.map +0 -1
  127. package/dist/src/plugins/worker.js +0 -236
  128. package/dist/src/plugins/worker.js.map +0 -1
  129. package/dist/src/proxy/client/cameraDevice.js +0 -171
  130. package/dist/src/proxy/client/cameraDevice.js.map +0 -1
  131. package/dist/src/proxy/client/deviceManager.js +0 -239
  132. package/dist/src/proxy/client/deviceManager.js.map +0 -1
  133. package/dist/src/proxy/client/index.js +0 -21
  134. package/dist/src/proxy/client/index.js.map +0 -1
  135. package/dist/src/proxy/client/pluginsManager.js +0 -237
  136. package/dist/src/proxy/client/pluginsManager.js.map +0 -1
  137. package/dist/src/proxy/client/systemManager.js +0 -163
  138. package/dist/src/proxy/client/systemManager.js.map +0 -1
  139. package/dist/src/proxy/index.js +0 -98
  140. package/dist/src/proxy/index.js.map +0 -1
  141. package/dist/src/proxy/proxies/camera.js +0 -72
  142. package/dist/src/proxy/proxies/camera.js.map +0 -1
  143. package/dist/src/proxy/proxies/plugin.js +0 -110
  144. package/dist/src/proxy/proxies/plugin.js.map +0 -1
  145. package/dist/src/proxy/proxies/server.js +0 -92
  146. package/dist/src/proxy/proxies/server.js.map +0 -1
  147. package/dist/src/proxy/types.js +0 -3
  148. package/dist/src/proxy/types.js.map +0 -1
  149. package/dist/src/proxy/utils/generateKeys.js +0 -13
  150. package/dist/src/proxy/utils/generateKeys.js.map +0 -1
  151. package/dist/src/proxy/ws/index.js +0 -75
  152. package/dist/src/proxy/ws/index.js.map +0 -1
  153. package/dist/src/services/config/index.js +0 -319
  154. package/dist/src/services/config/index.js.map +0 -1
  155. package/dist/src/services/config/types.js +0 -13
  156. package/dist/src/services/config/types.js.map +0 -1
  157. package/dist/src/services/logger/index.js +0 -181
  158. package/dist/src/services/logger/index.js.map +0 -1
@@ -1,535 +0,0 @@
1
- "use strict";
2
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
- return c > 3 && r && Object.defineProperty(target, key, r), r;
7
- };
8
- var __metadata = (this && this.__metadata) || function (k, v) {
9
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
- };
11
- var __importDefault = (this && this.__importDefault) || function (mod) {
12
- return (mod && mod.__esModule) ? mod : { "default": mod };
13
- };
14
- Object.defineProperty(exports, "__esModule", { value: true });
15
- const lodash_clonedeep_1 = __importDefault(require("lodash.clonedeep"));
16
- const lodash_mergewith_1 = __importDefault(require("lodash.mergewith"));
17
- const tsyringe_1 = require("tsyringe");
18
- const plugins_service_1 = __importDefault(require("./plugins.service"));
19
- const users_service_1 = __importDefault(require("./users.service"));
20
- const index_1 = require("../go2rtc/index");
21
- const database_1 = require("../database");
22
- const types_1 = require("../../plugins/types");
23
- let CamerasService = class CamerasService {
24
- configService;
25
- api;
26
- dbs;
27
- proxy;
28
- usersService;
29
- pluginsService;
30
- constructor() {
31
- this.configService = tsyringe_1.container.resolve('configService');
32
- this.api = tsyringe_1.container.resolve('api');
33
- this.dbs = tsyringe_1.container.resolve('dbs');
34
- this.proxy = tsyringe_1.container.resolve('proxy');
35
- this.usersService = new users_service_1.default();
36
- this.pluginsService = new plugins_service_1.default();
37
- }
38
- async createCamera(cameraData) {
39
- const camerasDoc = await this.dbs.db.get(this.configService.CAMERAS_ID);
40
- camerasDoc.cameras.push(cameraData);
41
- for (const source of cameraData.sources) {
42
- let urls = source.urls.filter((source) => source !== '' && source !== 'null');
43
- urls = urls.length ? urls : null;
44
- const sourceName = `${cameraData.name.replace(/ /g, '_').toLowerCase()}_${source.name}`;
45
- this.configService.go2rtcConfig.streams[sourceName] = urls;
46
- const ffmpegSourceName = `${sourceName}_ffmpeg`;
47
- this.configService.go2rtcConfig.streams[ffmpegSourceName] = `ffmpeg:${sourceName}#video=copy#audio=aac#audio=opus`;
48
- }
49
- this.configService.writeGo2RtcConfig();
50
- await this.dbs.db.put(camerasDoc, { force: true });
51
- await index_1.ApplicationApi.restart();
52
- this.api.addCamera(this.transformCamera(cameraData));
53
- return cameraData;
54
- }
55
- async createTransformedCamera(cameraData) {
56
- const camerasDoc = await this.dbs.db.get(this.configService.CAMERAS_ID);
57
- camerasDoc.cameras.push(cameraData);
58
- for (const source of cameraData.sources) {
59
- let urls = source.urls.filter((source) => source !== '' && source !== 'null');
60
- urls = urls.length ? urls : null;
61
- const sourceName = `${cameraData.name.replace(/ /g, '_').toLowerCase()}_${source.name}`;
62
- this.configService.go2rtcConfig.streams[sourceName] = urls;
63
- const ffmpegSourceName = `${sourceName}_ffmpeg`;
64
- this.configService.go2rtcConfig.streams[ffmpegSourceName] = `ffmpeg:${sourceName}#video=copy#audio=aac#audio=opus`;
65
- }
66
- this.configService.writeGo2RtcConfig();
67
- await this.dbs.db.put(camerasDoc, { force: true });
68
- await index_1.ApplicationApi.restart();
69
- this.api.addCamera(this.transformCamera(cameraData));
70
- return this.transformCamera(cameraData);
71
- }
72
- async list() {
73
- const camerasDoc = await this.dbs.db.get(this.configService.CAMERAS_ID);
74
- return camerasDoc.cameras;
75
- }
76
- async listTransformed() {
77
- const camerasDoc = await this.dbs.db.get(this.configService.CAMERAS_ID);
78
- const transformedCameras = camerasDoc.cameras.map((camera) => this.transformCamera(camera));
79
- return transformedCameras;
80
- }
81
- async listByPluginId(pluginId) {
82
- const camerasDoc = await this.dbs.db.get(this.configService.CAMERAS_ID);
83
- return camerasDoc.cameras.filter((camera) => camera.pluginId === pluginId);
84
- }
85
- async listTransformedByPluginId(pluginId) {
86
- const camerasDoc = await this.dbs.db.get(this.configService.CAMERAS_ID);
87
- const cameras = camerasDoc.cameras.filter((camera) => camera.pluginId === pluginId);
88
- const transformedCameras = cameras.map((camera) => this.transformCamera(camera));
89
- return transformedCameras;
90
- }
91
- async listByExtension(pluginName) {
92
- const camerasDoc = await this.dbs.db.get(this.configService.CAMERAS_ID);
93
- return camerasDoc.cameras.filter((camera) => camera.extensions.plugins.includes(pluginName));
94
- }
95
- async listTransformedByExtension(pluginName) {
96
- const camerasDoc = await this.dbs.db.get(this.configService.CAMERAS_ID);
97
- const cameras = camerasDoc.cameras.filter((camera) => camera.extensions.plugins.includes(pluginName));
98
- const transformedCameras = cameras.map((camera) => this.transformCamera(camera));
99
- return transformedCameras;
100
- }
101
- async findById(id) {
102
- const camerasDoc = await this.dbs.db.get(this.configService.CAMERAS_ID);
103
- return camerasDoc.cameras?.find((cameraObj) => cameraObj._id === id);
104
- }
105
- async findTransformedById(id) {
106
- const camerasDoc = await this.dbs.db.get(this.configService.CAMERAS_ID);
107
- const camera = camerasDoc.cameras?.find((cameraObj) => cameraObj._id === id);
108
- if (camera) {
109
- return this.transformCamera(camera);
110
- }
111
- }
112
- async findByName(cameraname) {
113
- const camerasDoc = await this.dbs.db.get(this.configService.CAMERAS_ID);
114
- return camerasDoc.cameras?.find((cameraObj) => cameraObj.name === cameraname);
115
- }
116
- async findTransformedByName(cameraname) {
117
- const camerasDoc = await this.dbs.db.get(this.configService.CAMERAS_ID);
118
- const camera = camerasDoc.cameras?.find((cameraObj) => cameraObj.name === cameraname);
119
- if (camera) {
120
- return this.transformCamera(camera);
121
- }
122
- }
123
- async findByPluginAndName(cameraname, pluginId) {
124
- const camerasDoc = await this.dbs.db.get(this.configService.CAMERAS_ID);
125
- return camerasDoc.cameras?.find((cameraObj) => cameraObj.name === cameraname && cameraObj.pluginId === pluginId);
126
- }
127
- async findTransformedByPluginAndName(cameraname, pluginId) {
128
- const camerasDoc = await this.dbs.db.get(this.configService.CAMERAS_ID);
129
- const camera = camerasDoc.cameras?.find((cameraObj) => cameraObj.name === cameraname && cameraObj.pluginId === pluginId);
130
- if (camera) {
131
- return this.transformCamera(camera);
132
- }
133
- }
134
- async patchCameraByName(cameraname, cameraData) {
135
- const camerasDoc = await this.dbs.db.get(this.configService.CAMERAS_ID);
136
- const camera = camerasDoc.cameras.find((camera) => camera.name === cameraname);
137
- const cameraOld = (0, lodash_clonedeep_1.default)(camera);
138
- if (camera && cameraOld) {
139
- const sourcesToRemove = camera.sources.map((source) => `${cameraname.replace(/ /g, '_').toLowerCase()}_${source.name}`);
140
- for (const sourceName of Object.keys(this.configService.go2rtcConfig.streams)) {
141
- if (sourcesToRemove.includes(sourceName)) {
142
- const ffmpegSourceName = `${sourceName}_ffmpeg`;
143
- delete this.configService.go2rtcConfig.streams[sourceName];
144
- delete this.configService.go2rtcConfig.streams[ffmpegSourceName];
145
- }
146
- }
147
- (0, lodash_mergewith_1.default)(camera, cameraData);
148
- camera.extensions = cameraOld.extensions;
149
- for (const source of camera.sources) {
150
- let urls = source.urls.filter((source) => source !== '' && source !== 'null');
151
- urls = urls.length ? urls : null;
152
- const sourceName = `${cameraname.replace(/ /g, '_').toLowerCase()}_${source.name}`;
153
- this.configService.go2rtcConfig.streams[sourceName] = urls;
154
- const ffmpegSourceName = `${sourceName}_ffmpeg`;
155
- this.configService.go2rtcConfig.streams[ffmpegSourceName] = `ffmpeg:${sourceName}#video=copy#audio=aac#audio=opus`;
156
- }
157
- this.configService.writeGo2RtcConfig();
158
- await this.dbs.db.put(camerasDoc);
159
- await index_1.ApplicationApi.restart();
160
- const transformedCamera = this.transformCamera(camera);
161
- await this.api.updateCamera(transformedCamera);
162
- await Promise.all(camera.extensions.plugins.filter((pluginName) => {
163
- const plugin = this.pluginsService.getPluginByName(pluginName);
164
- if (plugin) {
165
- return this.proxy.publishEvent(`dm-sub-${plugin.id}`, 'cameraUpdated', transformedCamera);
166
- }
167
- }));
168
- }
169
- return camera;
170
- }
171
- async enableExtensionByName(cameraname, pluginName, type) {
172
- const camerasDoc = await this.dbs.db.get(this.configService.CAMERAS_ID);
173
- const plugin = this.pluginsService.getPluginByName(pluginName);
174
- const camera = camerasDoc.cameras.find((camera) => camera.name === cameraname);
175
- const cameraOld = (0, lodash_clonedeep_1.default)(camera);
176
- if (camera && cameraOld && plugin && (plugin?.contract.extension || type)) {
177
- const extensionType = (plugin?.contract.extension || type);
178
- if (types_1.CAMERA_EXTENSIONS.includes(extensionType) &&
179
- extensionType !== 'hub' &&
180
- camera.extensions[extensionType] !== pluginName &&
181
- (camera.extensions.plugins.includes(pluginName) || plugin.contract.builtIns?.includes(extensionType))) {
182
- const transformedCamera = this.transformCamera(camera);
183
- const oldPluginName = camera.extensions[extensionType];
184
- const oldPlugin = oldPluginName ? this.pluginsService.getPluginByName(oldPluginName) : undefined;
185
- if (oldPlugin) {
186
- await this.proxy.publishEvent(`dm-sub-${oldPlugin.id}`, 'cameraRemoved', transformedCamera);
187
- }
188
- camera.extensions[extensionType] = pluginName;
189
- await this.dbs.db.put(camerasDoc, { force: true });
190
- await this.api.updateCamera(transformedCamera);
191
- await this.proxy.publishEvent(`dm-sub-${plugin.id}`, 'cameraAdded', transformedCamera);
192
- }
193
- }
194
- return camera;
195
- }
196
- async disableExtensionByName(cameraname, pluginName, type) {
197
- const camerasDoc = await this.dbs.db.get(this.configService.CAMERAS_ID);
198
- const plugin = this.pluginsService.getPluginByName(pluginName);
199
- const camera = camerasDoc.cameras.find((camera) => camera.name === cameraname);
200
- const cameraOld = (0, lodash_clonedeep_1.default)(camera);
201
- if (camera && cameraOld && plugin && (plugin?.contract.extension || type)) {
202
- const extensionType = (plugin?.contract.extension || type);
203
- if (types_1.CAMERA_EXTENSIONS.includes(extensionType) &&
204
- extensionType !== 'hub' &&
205
- camera.extensions[extensionType] === pluginName &&
206
- (camera.extensions.plugins.includes(pluginName) || plugin.contract.builtIns?.includes(extensionType))) {
207
- camera.extensions[extensionType] = undefined;
208
- await this.dbs.db.put(camerasDoc, { force: true });
209
- const transformedCamera = this.transformCamera(camera);
210
- await this.api.updateCamera(transformedCamera);
211
- await this.proxy.publishEvent(`dm-sub-${plugin.id}`, 'cameraRemoved', transformedCamera);
212
- }
213
- }
214
- return camera;
215
- }
216
- async addExtensionByName(cameraname, pluginName) {
217
- const camerasDoc = await this.dbs.db.get(this.configService.CAMERAS_ID);
218
- const plugin = this.pluginsService.getPluginByName(pluginName);
219
- const camera = camerasDoc.cameras.find((camera) => camera.name === cameraname);
220
- const cameraOld = (0, lodash_clonedeep_1.default)(camera);
221
- if (camera && cameraOld && plugin?.contract.extension && !camera.extensions.plugins.includes(pluginName)) {
222
- camera.extensions.plugins.push(pluginName);
223
- let extensionEnabled = false;
224
- const extensionType = plugin.contract.extension;
225
- if (extensionType !== 'hub') {
226
- if (!camera.extensions[extensionType]) {
227
- extensionEnabled = true;
228
- camera.extensions[extensionType] = pluginName;
229
- }
230
- }
231
- else {
232
- extensionEnabled = true;
233
- if (!camera.extensions[extensionType]) {
234
- camera.extensions[extensionType] = [];
235
- }
236
- camera.extensions[extensionType].push(pluginName);
237
- }
238
- await this.dbs.db.put(camerasDoc, { force: true });
239
- const transformedCamera = this.transformCamera(camera);
240
- await this.api.updateCamera(transformedCamera);
241
- if (extensionEnabled) {
242
- await this.proxy.publishEvent(`dm-sub-${plugin.id}`, 'cameraAdded', transformedCamera);
243
- }
244
- }
245
- return camera;
246
- }
247
- async removeExtensionByName(cameraname, pluginName) {
248
- const camerasDoc = await this.dbs.db.get(this.configService.CAMERAS_ID);
249
- const plugin = this.pluginsService.getPluginByName(pluginName);
250
- const camera = camerasDoc.cameras.find((camera) => camera.name === cameraname);
251
- const cameraOld = (0, lodash_clonedeep_1.default)(camera);
252
- if (camera && cameraOld && plugin?.contract.extension && camera.extensions.plugins.includes(pluginName)) {
253
- camera.extensions.plugins = camera.extensions.plugins.filter((plugin) => plugin !== pluginName);
254
- let extensionRemoved = false;
255
- const extensionType = plugin.contract.extension;
256
- if (extensionType !== 'hub') {
257
- if (camera.extensions[extensionType] === pluginName) {
258
- extensionRemoved = true;
259
- camera.extensions[extensionType] = undefined;
260
- }
261
- }
262
- else {
263
- extensionRemoved = true;
264
- if (!camera.extensions[extensionType]) {
265
- camera.extensions[extensionType] = [];
266
- }
267
- camera.extensions[extensionType] = camera.extensions[extensionType].filter((plugin) => plugin !== pluginName);
268
- }
269
- await this.dbs.db.put(camerasDoc, { force: true });
270
- const transformedCamera = this.transformCamera(camera);
271
- await this.api.updateCamera(transformedCamera);
272
- if (extensionRemoved) {
273
- await this.proxy.publishEvent(`dm-sub-${plugin.id}`, 'cameraRemoved', transformedCamera);
274
- }
275
- }
276
- return camera;
277
- }
278
- async removeByName(cameraname) {
279
- const camerasDoc = await this.dbs.db.get(this.configService.CAMERAS_ID);
280
- const camera = camerasDoc.cameras.find((cameraObj) => cameraObj.name === cameraname);
281
- if (camera) {
282
- const sourcesToRemove = camera.sources.map((source) => `${camera.name.replace(/ /g, '_').toLowerCase()}_${source.name}`);
283
- for (const sourceName of Object.keys(this.configService.go2rtcConfig.streams)) {
284
- if (sourcesToRemove.includes(sourceName)) {
285
- const ffmpegSourceName = `${sourceName}_ffmpeg`;
286
- delete this.configService.go2rtcConfig.streams[sourceName];
287
- delete this.configService.go2rtcConfig.streams[ffmpegSourceName];
288
- }
289
- }
290
- camerasDoc.cameras = camerasDoc.cameras.filter((cameraObj) => cameraObj.name !== camera.name);
291
- //remove also from user preferences list
292
- const users = await this.usersService.list();
293
- for (const user of users) {
294
- const userGrids = user.preferences.camview.grids;
295
- await this.usersService.patchUser(user.username, {
296
- preferences: {
297
- camview: {
298
- grids: userGrids.map((layout) => {
299
- layout.cameras = layout.cameras.filter((cam) => cam.name !== camera.name);
300
- return layout;
301
- }),
302
- },
303
- },
304
- });
305
- }
306
- this.configService.writeGo2RtcConfig();
307
- await this.dbs.db.put(camerasDoc, { force: true });
308
- await index_1.ApplicationApi.restart();
309
- const transformedCamera = this.transformCamera(camera);
310
- await this.api.removeCamera(camera._id);
311
- if (camera.pluginId !== 'native') {
312
- await this.proxy.publishEvent(`dm-sub-${camera.pluginId}`, 'cameraRemoved', transformedCamera);
313
- }
314
- }
315
- }
316
- async removeById(id) {
317
- const camerasDoc = await this.dbs.db.get(this.configService.CAMERAS_ID);
318
- const camera = camerasDoc.cameras.find((cameraObj) => cameraObj._id === id);
319
- if (camera) {
320
- const sourcesToRemove = camera.sources.map((source) => `${camera.name.replace(/ /g, '_').toLowerCase()}_${source.name}`);
321
- for (const sourceName of Object.keys(this.configService.go2rtcConfig.streams)) {
322
- if (sourcesToRemove.includes(sourceName)) {
323
- const ffmpegSourceName = `${sourceName}_ffmpeg`;
324
- delete this.configService.go2rtcConfig.streams[sourceName];
325
- delete this.configService.go2rtcConfig.streams[ffmpegSourceName];
326
- }
327
- }
328
- camerasDoc.cameras = camerasDoc.cameras.filter((cameraObj) => cameraObj.name !== camera.name);
329
- //remove also from user preferences list
330
- const users = await this.usersService.list();
331
- for (const user of users) {
332
- const userGrids = user.preferences.camview.grids;
333
- await this.usersService.patchUser(user.username, {
334
- preferences: {
335
- camview: {
336
- grids: userGrids.map((layout) => {
337
- layout.cameras = layout.cameras.filter((cam) => cam.name !== camera.name);
338
- return layout;
339
- }),
340
- },
341
- },
342
- });
343
- }
344
- this.configService.writeGo2RtcConfig();
345
- await this.dbs.db.put(camerasDoc, { force: true });
346
- await index_1.ApplicationApi.restart();
347
- const transformedCamera = this.transformCamera(camera);
348
- await this.api.removeCamera(camera._id);
349
- if (camera.pluginId !== 'native') {
350
- await this.proxy.publishEvent(`dm-sub-${camera.pluginId}`, 'cameraRemoved', transformedCamera);
351
- }
352
- }
353
- }
354
- async removeByPluginId(pluginId) {
355
- const camerasDoc = await this.dbs.db.get(this.configService.CAMERAS_ID);
356
- const camera = camerasDoc.cameras.find((cameraObj) => cameraObj._id === pluginId);
357
- if (camera) {
358
- const sourcesToRemove = camera.sources.map((source) => `${camera.name.replace(/ /g, '_').toLowerCase()}_${source.name}`);
359
- for (const sourceName of Object.keys(this.configService.go2rtcConfig.streams)) {
360
- if (sourcesToRemove.includes(sourceName)) {
361
- const ffmpegSourceName = `${sourceName}_ffmpeg`;
362
- delete this.configService.go2rtcConfig.streams[sourceName];
363
- delete this.configService.go2rtcConfig.streams[ffmpegSourceName];
364
- }
365
- }
366
- camerasDoc.cameras = camerasDoc.cameras.filter((cameraObj) => cameraObj._id !== camera._id);
367
- //remove also from user preferences list
368
- const users = await this.usersService.list();
369
- for (const user of users) {
370
- const userGrids = user.preferences.camview.grids;
371
- await this.usersService.patchUser(user.username, {
372
- preferences: {
373
- camview: {
374
- grids: userGrids.map((layout) => {
375
- layout.cameras = layout.cameras.filter((cam) => cam.name !== camera.name);
376
- return layout;
377
- }),
378
- },
379
- },
380
- });
381
- }
382
- this.configService.writeGo2RtcConfig();
383
- await this.dbs.db.put(camerasDoc, { force: true });
384
- await index_1.ApplicationApi.restart();
385
- const transformedCamera = this.transformCamera(camera);
386
- await this.api.removeCamera(camera._id);
387
- await this.proxy.publishEvent(`dm-sub-${camera.pluginId}`, 'cameraRemoved', transformedCamera);
388
- }
389
- }
390
- async removeByPluginIdAndName(cameraname, pluginId) {
391
- const camerasDoc = await this.dbs.db.get(this.configService.CAMERAS_ID);
392
- const camera = camerasDoc.cameras.find((cameraObj) => cameraObj.name === cameraname && cameraObj._id === pluginId);
393
- if (camera) {
394
- const sourcesToRemove = camera.sources.map((source) => `${camera.name.replace(/ /g, '_').toLowerCase()}_${source.name}`);
395
- for (const sourceName of Object.keys(this.configService.go2rtcConfig.streams)) {
396
- if (sourcesToRemove.includes(sourceName)) {
397
- const ffmpegSourceName = `${sourceName}_ffmpeg`;
398
- delete this.configService.go2rtcConfig.streams[sourceName];
399
- delete this.configService.go2rtcConfig.streams[ffmpegSourceName];
400
- }
401
- }
402
- camerasDoc.cameras = camerasDoc.cameras.filter((cameraObj) => cameraObj._id !== camera._id);
403
- //remove also from user preferences list
404
- const users = await this.usersService.list();
405
- for (const user of users) {
406
- const userGrids = user.preferences.camview.grids;
407
- await this.usersService.patchUser(user.username, {
408
- preferences: {
409
- camview: {
410
- grids: userGrids.map((layout) => {
411
- layout.cameras = layout.cameras.filter((cam) => cam.name !== camera.name);
412
- return layout;
413
- }),
414
- },
415
- },
416
- });
417
- }
418
- this.configService.writeGo2RtcConfig();
419
- await this.dbs.db.put(camerasDoc, { force: true });
420
- await index_1.ApplicationApi.restart();
421
- const transformedCamera = this.transformCamera(camera);
422
- await this.api.removeCamera(camera._id);
423
- await this.proxy.publishEvent(`dm-sub-${camera.pluginId}`, 'cameraRemoved', transformedCamera);
424
- }
425
- }
426
- async removeAll() {
427
- const camerasDoc = await this.dbs.db.get(this.configService.CAMERAS_ID);
428
- const sourcesToRemove = [];
429
- const camerasToRemove = [];
430
- camerasDoc.cameras.forEach((camera) => {
431
- camerasToRemove.push(camera);
432
- camera.sources.forEach((source) => sourcesToRemove.push(`${camera.name.replace(/ /g, '_').toLowerCase()}_${source.name}`));
433
- });
434
- for (const sourceName of Object.keys(this.configService.go2rtcConfig.streams)) {
435
- if (sourcesToRemove.includes(sourceName)) {
436
- const ffmpegSourceName = `${sourceName}_ffmpeg`;
437
- delete this.configService.go2rtcConfig.streams[sourceName];
438
- delete this.configService.go2rtcConfig.streams[ffmpegSourceName];
439
- }
440
- }
441
- camerasDoc.cameras = [];
442
- //remove also from user preferences list
443
- const users = await this.usersService.list();
444
- for (const user of users) {
445
- const userGrids = user.preferences.camview.grids;
446
- await this.usersService.patchUser(user.username, {
447
- preferences: {
448
- camview: {
449
- grids: userGrids.map((layout) => {
450
- layout.cameras = [];
451
- return layout;
452
- }),
453
- },
454
- },
455
- });
456
- }
457
- this.configService.writeGo2RtcConfig();
458
- await this.dbs.db.put(camerasDoc, { force: true });
459
- await index_1.ApplicationApi.restart();
460
- await Promise.all(camerasToRemove.filter((camera) => this.api.removeCamera(camera._id)));
461
- await Promise.all(camerasToRemove.filter((camera) => {
462
- if (camera.pluginId !== 'native') {
463
- const transformedCamera = this.transformCamera(camera);
464
- return this.proxy.publishEvent(`dm-sub-${camera.pluginId}`, 'cameraRemoved', transformedCamera);
465
- }
466
- }));
467
- }
468
- transformCamera(camera) {
469
- const transformedCamera = {
470
- _id: camera._id,
471
- nativeId: camera.nativeId,
472
- pluginId: camera._id,
473
- name: camera.name,
474
- disabled: camera.disabled,
475
- model: camera.model,
476
- type: camera.type,
477
- sources: camera.sources.map((source) => {
478
- const sourceName = `${camera.name.replace(/ /g, '_').toLowerCase()}_${source.name}`;
479
- const ffmpegSourceName = `${sourceName}_ffmpeg`;
480
- const baseWebRtcUrl = `ws://localhost${this.configService.go2rtcConfig.api.listen}/api/ws?src=${sourceName}`;
481
- const baseRtspUrl = `rtsp://localhost${this.configService.go2rtcConfig.rtsp.listen}/${sourceName}`;
482
- const baseRtspFFmpegUrl = `rtsp://localhost${this.configService.go2rtcConfig.rtsp.listen}/${ffmpegSourceName}`;
483
- const baseStreamUrl = `http://localhost${this.configService.go2rtcConfig.api.listen}/stream.html?src=${sourceName}`;
484
- const baseMjpegStreamUrl = `http://localhost${this.configService.go2rtcConfig.api.listen}/api/stream.mjpeg?src=${sourceName}`;
485
- const baseMp4StreamUrl = `http://localhost${this.configService.go2rtcConfig.api.listen}/api/stream.mp4?src=${sourceName}`;
486
- const baseFrameMp4StreamUrl = `http://localhost${this.configService.go2rtcConfig.api.listen}/api/frame.mp4?src=${sourceName}`;
487
- const baseFrameJpegStreamUrl = `http://localhost${this.configService.go2rtcConfig.api.listen}/api/frame.jpeg?src=${sourceName}`;
488
- const baseHlsStreamUrl = `http://localhost${this.configService.go2rtcConfig.api.listen}/api/stream.m3u8?src=${sourceName}`;
489
- const sources = {
490
- name: source.name,
491
- roles: source.roles,
492
- sources: {
493
- webrtc: baseWebRtcUrl,
494
- rtsp: {
495
- single: baseRtspUrl,
496
- default: `${baseRtspUrl}?video=all&audio=all`,
497
- mp4: `${baseRtspUrl}?mp4`,
498
- },
499
- ffmpeg: {
500
- aac: `${baseRtspFFmpegUrl}?video&audio=aac`,
501
- opus: `${baseRtspFFmpegUrl}?video&audio=opus`,
502
- },
503
- endpoint: {
504
- webrtc: `${baseStreamUrl}&mode=webrtc`,
505
- mse: `${baseStreamUrl}&mode=mse`,
506
- lmp4: baseMp4StreamUrl,
507
- mmp4: `${baseMp4StreamUrl}&mp4=flac`,
508
- mp4: `${baseMp4StreamUrl}&mp4=all`,
509
- mp4Snapshot: baseFrameMp4StreamUrl,
510
- jpegSnapshot: baseFrameJpegStreamUrl,
511
- lHlsTs: baseHlsStreamUrl,
512
- lHlsFmp4: `${baseHlsStreamUrl}&mp4`,
513
- mHlsFmp4: `${baseHlsStreamUrl}&mp4=flac`,
514
- mjpeg: baseMjpegStreamUrl,
515
- mjpegHtml: `${baseStreamUrl}&mode=mjpeg`,
516
- },
517
- },
518
- };
519
- return sources;
520
- }),
521
- };
522
- return transformedCamera;
523
- }
524
- };
525
- CamerasService = __decorate([
526
- (0, tsyringe_1.registry)([
527
- {
528
- token: 'dbs',
529
- useValue: (0, tsyringe_1.delay)(() => database_1.Database),
530
- },
531
- ]),
532
- __metadata("design:paramtypes", [])
533
- ], CamerasService);
534
- exports.default = CamerasService;
535
- //# sourceMappingURL=cameras.service.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cameras.service.js","sourceRoot":"","sources":["../../../../../../src/api/services/cameras.service.ts"],"names":[],"mappings":"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"}