@camera.ui/browser 0.0.77 → 0.0.80

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 (82) hide show
  1. package/dist/bundle.js +1 -1
  2. package/dist/types/packages/client/browser/src/proxy/cameraDevice.d.ts +21 -7
  3. package/dist/types/packages/client/browser/src/proxy/deviceManager.d.ts +4 -0
  4. package/dist/types/packages/client/browser/src/socket.d.ts +7 -7
  5. package/dist/types/packages/client/browser/src/streaming/go2rts-session.d.ts +54 -0
  6. package/dist/types/packages/client/browser/src/types.d.ts +11 -8
  7. package/dist/types/packages/client/browser/src/utils.d.ts +12 -0
  8. package/dist/types/server/src/api/controllers/users.controller.d.ts +9 -3
  9. package/dist/types/server/src/api/database/index.d.ts +10 -3
  10. package/dist/types/server/src/api/database/types.d.ts +35 -29
  11. package/dist/types/server/src/api/go2rtc/api/config.d.ts +3 -4
  12. package/dist/types/server/src/api/go2rtc/api/index.d.ts +1 -2
  13. package/dist/types/server/src/api/go2rtc/api/streams.d.ts +5 -6
  14. package/dist/types/server/src/api/go2rtc/types.d.ts +5 -2
  15. package/dist/types/server/src/api/index.d.ts +7 -9
  16. package/dist/types/server/src/api/middlewares/pagination.middleware.d.ts +1 -1
  17. package/dist/types/server/src/api/plugins/logger.plugin.d.ts +7 -0
  18. package/dist/types/server/src/api/routes/index.d.ts +1 -2
  19. package/dist/types/server/src/api/schemas/backup.schema.d.ts +53 -155
  20. package/dist/types/server/src/api/schemas/cameras.schema.d.ts +201 -142
  21. package/dist/types/server/src/api/schemas/config.schema.d.ts +20 -20
  22. package/dist/types/server/src/api/schemas/go2rtc.schema.d.ts +60 -60
  23. package/dist/types/server/src/api/schemas/users.schema.d.ts +242 -136
  24. package/dist/types/server/src/api/services/cameras.service.d.ts +9 -7
  25. package/dist/types/server/src/api/services/plugins.service.d.ts +1 -0
  26. package/dist/types/server/src/api/services/users.service.d.ts +6 -2
  27. package/dist/types/server/src/api/types/index.d.ts +34 -8
  28. package/dist/types/server/src/api/utils/fetch.d.ts +2 -0
  29. package/dist/types/server/src/api/websocket/nsp/status.d.ts +1 -1
  30. package/dist/types/server/src/api/websocket/types.d.ts +1 -15
  31. package/dist/types/server/src/api.d.ts +1 -2
  32. package/dist/types/server/src/camera/controller.d.ts +23 -12
  33. package/dist/types/server/src/camera/device.d.ts +7 -16
  34. package/dist/types/server/src/camera/index.d.ts +31 -22
  35. package/dist/types/server/src/camera/interfaces/audioDetection.d.ts +10 -0
  36. package/dist/types/server/src/camera/interfaces/camera.d.ts +19 -0
  37. package/dist/types/server/src/camera/interfaces/motionDetection.d.ts +10 -0
  38. package/dist/types/server/src/camera/interfaces/objectDetection.d.ts +10 -0
  39. package/dist/types/server/src/camera/interfaces/prebuffer.d.ts +11 -0
  40. package/dist/types/server/src/camera/interfaces/ptz.d.ts +13 -0
  41. package/dist/types/server/src/camera/polygon.d.ts +3 -2
  42. package/dist/types/server/src/camera/streaming/peer-connection.d.ts +1 -1
  43. package/dist/types/server/src/camera/streaming/webrtc-connection.d.ts +2 -1
  44. package/dist/types/server/src/camera/streaming/{streaming-session.d.ts → werift-session.d.ts} +1 -1
  45. package/dist/types/server/src/camera/types.d.ts +60 -21
  46. package/dist/types/server/src/camera/videoFrame.d.ts +10 -11
  47. package/dist/types/server/src/decoder/types.d.ts +31 -22
  48. package/dist/types/server/src/decoder/worker.d.ts +4 -4
  49. package/dist/types/server/src/nats/index.d.ts +1 -1
  50. package/dist/types/server/src/nats/proxy/cameraDevice.d.ts +30 -36
  51. package/dist/types/server/src/nats/proxy/deviceManager.d.ts +1 -1
  52. package/dist/types/server/src/nats/proxy/pluginsManager.d.ts +1 -1
  53. package/dist/types/server/src/nats/proxy/systemManager.d.ts +1 -1
  54. package/dist/types/server/src/nats/server.d.ts +10 -7
  55. package/dist/types/server/src/nats/types.d.ts +27 -53
  56. package/dist/types/server/src/nats/websocket.d.ts +9 -5
  57. package/dist/types/server/src/plugins/base.d.ts +2 -3
  58. package/dist/types/server/src/plugins/index.d.ts +1 -0
  59. package/dist/types/server/src/plugins/types.d.ts +22 -5
  60. package/dist/types/server/src/plugins/worker.d.ts +1 -0
  61. package/dist/types/server/src/polyglot/node/plugins/api.d.ts +1 -2
  62. package/dist/types/server/src/polyglot/node/plugins/cameraStorage.d.ts +2 -2
  63. package/dist/types/server/src/polyglot/node/plugins/proxy/cameraDevice.d.ts +35 -14
  64. package/dist/types/server/src/polyglot/node/plugins/proxy/deviceManager.d.ts +5 -5
  65. package/dist/types/server/src/polyglot/node/plugins/proxy/pluginsManager.d.ts +5 -5
  66. package/dist/types/server/src/polyglot/node/plugins/proxy/systemManager.d.ts +5 -5
  67. package/dist/types/server/src/polyglot/node/plugins/schema.d.ts +10 -2
  68. package/dist/types/server/src/polyglot/node/plugins/storageController.d.ts +1 -1
  69. package/dist/types/server/src/services/config/constants.d.ts +0 -2
  70. package/dist/types/server/src/services/config/index.d.ts +29 -36
  71. package/dist/types/server/src/services/config/types.d.ts +1 -1
  72. package/dist/types/server/src/types.d.ts +4 -0
  73. package/dist/types/server/src/utils/packer.d.ts +2 -0
  74. package/dist/types/server/src/utils/pythonInstaller.d.ts +1 -1
  75. package/dist/types/server/src/utils/utils.d.ts +5 -0
  76. package/dist/types/shared/types/index.d.ts +5 -0
  77. package/package.json +10 -14
  78. package/dist/types/packages/client/browser/src/streaming/peer-connection.d.ts +0 -24
  79. package/dist/types/packages/client/browser/src/streaming/streaming-session.d.ts +0 -25
  80. package/dist/types/packages/client/browser/src/streaming/webrtc-connection.d.ts +0 -26
  81. package/dist/types/server/src/api/utils/axios.d.ts +0 -2
  82. package/dist/types/server/src/api/websocket/nsp/streams.d.ts +0 -15
@@ -1,6 +1,12 @@
1
- /// <reference types="node" resolution-mode="require"/>
2
1
  import type { Observable } from 'rxjs';
3
2
  import type { CameraInformation, CameraInput, CameraInputSettings, Point, ZoneFilter, ZoneType } from '../api/database/types.js';
3
+ import type { FrameData, FrameMetadata } from '../decoder/types.js';
4
+ import type { CameraAudioDetectionInterface } from './interfaces/audioDetection.js';
5
+ import type { CameraInterface } from './interfaces/camera.js';
6
+ import type { CameraMotionDetectionInterface } from './interfaces/motionDetection.js';
7
+ import type { CameraObjectDetectionInterface } from './interfaces/objectDetection.js';
8
+ import type { CameraPrebufferInterface } from './interfaces/prebuffer.js';
9
+ import type { CameraPTZInterface } from './interfaces/ptz.js';
4
10
  export interface BaseLogger {
5
11
  log: (...args: any[]) => void;
6
12
  error: (...args: any[]) => void;
@@ -35,16 +41,6 @@ export interface CameraSource extends CameraInput {
35
41
  onPrebuffering(container: Container): Observable<PrebufferState>;
36
42
  getStreamInfo(): Promise<StreamInfo | undefined>;
37
43
  }
38
- export interface CameraPrebufferDelegate {
39
- getStreamInfo(sourceName: string): Promise<StreamInfo | undefined>;
40
- }
41
- export interface CameraDelegate {
42
- snapshotRequest(requestId: string): Promise<Buffer>;
43
- prepareStream(requestId: string): Promise<void>;
44
- onOffer(requestId: string, sdp: string): Promise<string>;
45
- onCandidates(requestId: string, candidates: string): Promise<void>;
46
- reboot(): Promise<void>;
47
- }
48
44
  export interface StreamInfo {
49
45
  audio: AudioStreamOptions;
50
46
  video: VideoStreamOptions;
@@ -94,14 +90,15 @@ export interface BaseCameraConfig {
94
90
  disabled?: boolean;
95
91
  info?: Partial<CameraInformation>;
96
92
  }
97
- export type CameraConfig = (BaseCameraConfig & {
98
- sources?: Omit<CameraInputSettings, '_id'>[];
99
- }) | (BaseCameraConfig & {
100
- delegate?: CameraDelegate;
101
- });
93
+ export interface CameraConfigInputSettings extends Omit<CameraInputSettings, '_id' | 'urls'> {
94
+ urls?: string[];
95
+ }
96
+ export type CameraConfig = BaseCameraConfig & {
97
+ sources: CameraConfigInputSettings[];
98
+ };
102
99
  export interface Detection {
103
100
  id?: string;
104
- label: ObjectClasses;
101
+ label: ObjectClass;
105
102
  confidence: number;
106
103
  boundingBox: [number, number, number, number];
107
104
  inputWidth: number;
@@ -114,12 +111,12 @@ export interface DetectionZone {
114
111
  points: Point[];
115
112
  type: ZoneType;
116
113
  filter: ZoneFilter;
117
- classes: ObjectClasses[];
114
+ classes: ObjectClass[];
118
115
  isPrivacyMask: boolean;
119
116
  }
120
- export type ObjectClasses = 'person' | 'bicycle' | 'car' | 'motorcycle' | 'airplane' | 'bus' | 'train' | 'truck' | 'boat' | 'traffic light' | 'fire hydrant' | 'stop sign' | 'parking meter' | 'bench' | 'bird' | 'cat' | 'dog' | 'horse' | 'sheep' | 'cow' | 'elephant' | 'bear' | 'zebra' | 'giraffe' | 'backpack' | 'umbrella' | 'handbag' | 'tie' | 'suitcase' | 'frisbee' | 'skis' | 'snowboard' | 'sports ball' | 'kite' | 'baseball bat' | 'baseball glove' | 'skateboard' | 'surfboard' | 'tennis racket' | 'bottle' | 'wine glass' | 'cup' | 'fork' | 'knife' | 'spoon' | 'bowl' | 'banana' | 'apple' | 'sandwich' | 'orange' | 'broccoli' | 'carrot' | 'hot dog' | 'pizza' | 'donut' | 'cake' | 'chair' | 'couch' | 'potted plant' | 'bed' | 'dining table' | 'toilet' | 'tv' | 'laptop' | 'mouse' | 'remote' | 'keyboard' | 'cell phone' | 'microwave' | 'oven' | 'toaster' | 'sink' | 'refrigerator' | 'book' | 'clock' | 'vase' | 'scissors' | 'teddy bear' | 'hair drier' | 'toothbrush' | 'motion';
117
+ export type ObjectClass = 'person' | 'bicycle' | 'car' | 'motorcycle' | 'airplane' | 'bus' | 'train' | 'truck' | 'boat' | 'traffic light' | 'fire hydrant' | 'stop sign' | 'parking meter' | 'bench' | 'bird' | 'cat' | 'dog' | 'horse' | 'sheep' | 'cow' | 'elephant' | 'bear' | 'zebra' | 'giraffe' | 'backpack' | 'umbrella' | 'handbag' | 'tie' | 'suitcase' | 'frisbee' | 'skis' | 'snowboard' | 'sports ball' | 'kite' | 'baseball bat' | 'baseball glove' | 'skateboard' | 'surfboard' | 'tennis racket' | 'bottle' | 'wine glass' | 'cup' | 'fork' | 'knife' | 'spoon' | 'bowl' | 'banana' | 'apple' | 'sandwich' | 'orange' | 'broccoli' | 'carrot' | 'hot dog' | 'pizza' | 'donut' | 'cake' | 'chair' | 'couch' | 'potted plant' | 'bed' | 'dining table' | 'toilet' | 'tv' | 'laptop' | 'mouse' | 'remote' | 'keyboard' | 'cell phone' | 'microwave' | 'oven' | 'toaster' | 'sink' | 'refrigerator' | 'book' | 'clock' | 'vase' | 'scissors' | 'teddy bear' | 'hair drier' | 'toothbrush' | 'motion';
121
118
  export interface BaseState<T extends LightState | AudioState | MotionState | ObjectState | SirenState | BatteryState | DoorbellState> {
122
- timestamp: string;
119
+ timestamp: number;
123
120
  lastEvent?: Omit<T, 'lastEvent'>;
124
121
  }
125
122
  export interface MotionSetEvent {
@@ -156,7 +153,8 @@ export type SirenState = BaseState<SirenState> & SirenSetEvent;
156
153
  export type ObjectState = BaseState<ObjectState> & ObjectSetEvent;
157
154
  export type BatteryState = BaseState<BatteryState> & BatterySetEvent;
158
155
  export interface FrameState extends MotionState {
159
- frame: Buffer;
156
+ frameData: FrameData;
157
+ metadata: FrameMetadata;
160
158
  }
161
159
  export type States = LightState | MotionState | AudioState | ObjectState | DoorbellState | SirenState | BatteryState;
162
160
  export type Sets = LightSetEvent | MotionSetEvent | AudioSetEvent | ObjectSetEvent | DoorbellSetEvent | SirenSetEvent | BatterySetEvent;
@@ -184,3 +182,44 @@ export type CameraStateCallbacks = {
184
182
  export type StateValue<T extends keyof StateValues> = StateValues[T];
185
183
  export type SetValue<T extends keyof SetValues> = SetValues[T];
186
184
  export type OnChangeCallback<T extends keyof StateValues> = (newEvent: StateValues[T], oldEvent: StateValues[T]) => void;
185
+ export declare abstract class CameraDelegate {
186
+ abstract snapshotRequest(requestId: string, sourceName: string): Promise<Buffer | undefined>;
187
+ abstract startStream(requestId: string, sourceName: string, videoPort: number, audioPort: number): Promise<void>;
188
+ abstract stopStream(requestId: string, sourceName: string): Promise<void>;
189
+ abstract onTalkbackSdp(requestId: string, sourceName: string, sdp: string, codec: 'PCMU' | 'PCMA' | 'opus'): void;
190
+ abstract onTalkbackRtp(requestId: string, sourceName: string, rtp: Buffer): void;
191
+ }
192
+ export declare abstract class CameraPrebufferDelegate {
193
+ abstract getStreamInfo(sourceName: string): Promise<StreamInfo | undefined>;
194
+ }
195
+ export declare abstract class CameraPTZDelegate {
196
+ abstract moveAbsolute(pan: number, tilt: number, zoom: number): Promise<void>;
197
+ abstract moveRelative(pan: number, tilt: number, zoom: number): Promise<void>;
198
+ abstract moveContinuous(pan: number, tilt: number, zoom: number): Promise<void>;
199
+ abstract stop(): Promise<void>;
200
+ }
201
+ export declare abstract class CameraMotionDetectionDelegate {
202
+ abstract detectImage(image: Buffer): Promise<Detection[]>;
203
+ }
204
+ export declare abstract class CameraObjectDetectionDelegate {
205
+ abstract detectImage(image: Buffer): Promise<Detection[]>;
206
+ }
207
+ export declare abstract class CameraAudioDetectionDelegate {
208
+ abstract detectAudio(audio: Buffer): Promise<boolean>;
209
+ }
210
+ export interface CameraInterfaces {
211
+ readonly cameraDelegate: CameraInterface;
212
+ readonly prebufferDelegate: CameraPrebufferInterface;
213
+ readonly ptzDelegate: CameraPTZInterface;
214
+ readonly motionDetectorDelegate: CameraMotionDetectionInterface;
215
+ readonly objectDetectorDelegate: CameraObjectDetectionInterface;
216
+ readonly audioDetectorDelegate: CameraAudioDetectionInterface;
217
+ }
218
+ export interface CameraDelegates {
219
+ readonly cameraDelegate: CameraDelegate;
220
+ readonly prebufferDelegate: CameraPrebufferDelegate;
221
+ readonly ptzDelegate: CameraPTZDelegate;
222
+ readonly motionDetectorDelegate: CameraMotionDetectionDelegate;
223
+ readonly objectDetectorDelegate: CameraObjectDetectionDelegate;
224
+ readonly audioDetectorDelegate: CameraAudioDetectionDelegate;
225
+ }
@@ -1,25 +1,24 @@
1
- /// <reference types="node" resolution-mode="require"/>
2
1
  import type { NatsConnection } from 'nats';
3
- import type { FrameBuffer, FrameImage, FrameMetadata, ImageOptions, MotionFrame as MotionFrameMethods, VideoFrame as VideoFrameMethods } from '../decoder/types.js';
2
+ import type { DecoderFormat, FrameBuffer, FrameData, FrameImage, FrameMetadata, ImageOptions, MotionFrame as MotionFrameMethods, VideoFrame as VideoFrameMethods } from '../decoder/types.js';
4
3
  import type { MotionState } from './types.js';
5
4
  export declare class VideoFrame implements VideoFrameMethods {
6
- readonly imageBuffer: Buffer;
5
+ readonly frameData: FrameData;
6
+ readonly metadata: FrameMetadata;
7
7
  private frameGeneratorSubject;
8
8
  private publisher;
9
- private _metadata;
10
- get metadata(): FrameMetadata;
9
+ private prebufferDuration;
11
10
  get inputWidth(): number;
12
11
  get inputHeight(): number;
13
- get inputFormat(): string;
14
- constructor(cameraId: string, publisher: NatsConnection, imageBuffer: Buffer, metadata: FrameMetadata);
12
+ get inputFormat(): DecoderFormat;
13
+ constructor(cameraId: string, publisher: NatsConnection, frameData: FrameData, metadata: FrameMetadata, prebufferDuration: number);
15
14
  toBuffer(options?: ImageOptions): Promise<FrameBuffer>;
16
15
  toImage(options?: ImageOptions): Promise<FrameImage>;
17
- save(path: string, options?: ImageOptions | undefined): Promise<void>;
16
+ save(path: string, options?: ImageOptions): Promise<void>;
18
17
  private send;
19
- private getImageInformation;
20
18
  private validateOptions;
19
+ private getImageInformation;
21
20
  }
22
21
  export declare class MotionFrame extends VideoFrame implements MotionFrameMethods {
23
- motion: MotionState;
24
- constructor(cameraId: string, publisher: NatsConnection, imageBuffer: Buffer, motionState: MotionState, metadata: FrameMetadata);
22
+ readonly motion: MotionState;
23
+ constructor(cameraId: string, publisher: NatsConnection, frameData: FrameData, motionState: MotionState, metadata: FrameMetadata);
25
24
  }
@@ -1,10 +1,9 @@
1
- /// <reference types="node" resolution-mode="require"/>
2
- /// <reference types="node" resolution-mode="require"/>
3
1
  import type { ChildProcess } from 'node:child_process';
4
2
  import type { Sharp } from 'sharp';
5
3
  import type { MotionState } from '../camera/types.js';
4
+ export type DecoderFormat = 'yuv' | 'rgb';
6
5
  export interface FrameMetadata {
7
- format: string;
6
+ format: DecoderFormat;
8
7
  frameSize: number;
9
8
  width: number;
10
9
  origWidth: number;
@@ -22,24 +21,29 @@ export interface ImageResize {
22
21
  height?: number;
23
22
  }
24
23
  export interface ImageFormat {
25
- to: 'rgba' | 'gray';
24
+ to: ImageOutputFormat;
26
25
  }
26
+ export type ImageInputFormat = 'yuv' | 'rgb' | 'rgba' | 'gray';
27
+ export type ImageOutputFormat = 'rgb' | 'rgba' | 'gray';
27
28
  export interface ImageOptions {
28
29
  format?: ImageFormat;
29
30
  crop?: ImageCrop;
30
31
  resize?: ImageResize;
31
32
  }
32
33
  export interface ProcessImageRequest {
34
+ frameData: FrameData;
35
+ metadata: FrameMetadata;
33
36
  options: ImageOptions;
34
- data: Buffer;
37
+ prebufferDuration: number;
35
38
  }
36
39
  export interface ImageInformation {
37
40
  width: number;
38
41
  height: number;
39
- channels: number;
42
+ channels: 1 | 3 | 4;
43
+ format: ImageInputFormat;
40
44
  }
41
45
  export interface FrameBuffer {
42
- image: Buffer;
46
+ image: Uint8Array;
43
47
  info: ImageInformation;
44
48
  }
45
49
  export interface FrameImage {
@@ -47,11 +51,11 @@ export interface FrameImage {
47
51
  info: ImageInformation;
48
52
  }
49
53
  export interface VideoFrame {
50
- readonly imageBuffer: Buffer;
51
- metadata: FrameMetadata;
52
- inputWidth: number;
53
- inputHeight: number;
54
- inputFormat: string;
54
+ readonly frameData: FrameData;
55
+ readonly metadata: FrameMetadata;
56
+ readonly inputWidth: number;
57
+ readonly inputHeight: number;
58
+ readonly inputFormat: DecoderFormat;
55
59
  toBuffer: (options?: ImageOptions) => Promise<FrameBuffer>;
56
60
  toImage: (options?: ImageOptions) => Promise<FrameImage>;
57
61
  save: (path: string, options?: ImageOptions) => Promise<void>;
@@ -75,10 +79,11 @@ export interface BaseFrameWorkerConfig {
75
79
  user: string;
76
80
  pass: string;
77
81
  };
78
- proxyPort: number;
79
- useWasm: boolean;
82
+ proxyEndpoints: string[];
83
+ fps: number;
84
+ resolution: number;
80
85
  }
81
- export type WorkerMessage = 'started' | 'getFFmpegArgs' | 'updateClient' | 'removeClient' | 'clearClients';
86
+ export type WorkerMessage = 'started' | 'getFFmpegArgs' | 'updateClient' | 'removeClient';
82
87
  export type MainMessage = 'setCameraName' | 'recoverClients';
83
88
  export interface MainToWorkerMessage {
84
89
  message: MainMessage;
@@ -94,14 +99,15 @@ export interface WorkerToMainMessage {
94
99
  export interface MainToWorkerResponse {
95
100
  response?: Record<string, any>;
96
101
  }
102
+ export type SignalingMessageType = 'connect' | 'disconnect' | 'metadata';
97
103
  export interface SignalingRequest {
98
- type: 'connect' | 'disconnect' | 'metadata';
99
- requestId: string;
100
- cameraId: string;
104
+ type: SignalingMessageType;
101
105
  pluginId: string;
106
+ cameraId: string;
107
+ requestId: string;
102
108
  }
103
109
  export interface SignalingResponse {
104
- type: 'connected' | 'disconnected' | 'metadata';
110
+ type: SignalingMessageType;
105
111
  requestId: string;
106
112
  metadata?: FrameMetadata;
107
113
  }
@@ -130,11 +136,14 @@ export interface FrameWorkerClient {
130
136
  pluginId: string;
131
137
  requestIds: string[];
132
138
  }
133
- export interface RecoveredClient {
134
- pluginId: string;
135
- requestIds: string[];
139
+ export interface RecoveredClient extends FrameWorkerClient {
136
140
  }
137
141
  export interface PrebufferContainer {
142
+ frameId: string;
138
143
  time: number;
139
144
  frame: Buffer;
140
145
  }
146
+ export interface FrameData {
147
+ frameId: string;
148
+ timestamp: number;
149
+ }
@@ -1,6 +1,6 @@
1
+ import { PLUGIN_STATUS } from '../plugins/types.js';
1
2
  import { Subscribed } from '../utils/subscribed.js';
2
3
  import type { CameraController } from '../camera/controller.js';
3
- import { PLUGIN_STATUS } from '../plugins/types.js';
4
4
  export declare class FrameWorker extends Subscribed {
5
5
  token: string;
6
6
  name: string;
@@ -13,18 +13,18 @@ export declare class FrameWorker extends Subscribed {
13
13
  private logger;
14
14
  private configService;
15
15
  private socketService;
16
- private camera;
16
+ private cameraDevice;
17
17
  private frameWorker?;
18
18
  private initialized;
19
19
  private stopped;
20
20
  private restarting;
21
21
  private auth;
22
- private proxyPort;
22
+ private proxyEndpoints;
23
23
  private ffmpegArgs;
24
24
  private py;
25
25
  private _status;
26
26
  get status(): PLUGIN_STATUS;
27
- constructor(camera: CameraController, proxyPort: number, auth: {
27
+ constructor(cameraDevice: CameraController, proxyEndpoints: string[], auth: {
28
28
  user: string;
29
29
  pass: string;
30
30
  });
@@ -1,7 +1,7 @@
1
- import { type NatsConnection, type Subscription } from 'nats';
2
1
  import { CameraDeviceProxy } from './proxy/cameraDevice.js';
3
2
  import { DeviceManagerProxy, PluginsManagerProxy, SystemManagerProxy } from './proxy/index.js';
4
3
  import { NatsServer } from './server.js';
4
+ import type { NatsConnection, Subscription } from 'nats';
5
5
  import type { StateValues } from '../camera/types.js';
6
6
  import type { CameraDeviceListenerMessagePayload, DeviceManagerProxyEvents, PluginsManagerProxyEvents, ProxyAuth, SystemManagerProxyEvents } from './types.js';
7
7
  import type { WebsocketProxy } from './websocket.js';
@@ -1,7 +1,13 @@
1
- /// <reference types="node" resolution-mode="require"/>
2
1
  import type { Camera } from '../../api/database/types.js';
3
- import type { CameraDelegate, CameraPrebufferDelegate, Container, FfmpegOptions, PrebufferState, SetValues, StateValues, StreamInfo } from '../../camera/types.js';
2
+ import type { CameraAudioDetectionInterface } from '../../camera/interfaces/audioDetection.js';
3
+ import type { CameraInterface } from '../../camera/interfaces/camera.js';
4
+ import type { CameraMotionDetectionInterface } from '../../camera/interfaces/motionDetection.js';
5
+ import type { CameraObjectDetectionInterface } from '../../camera/interfaces/objectDetection.js';
6
+ import type { CameraPrebufferInterface } from '../../camera/interfaces/prebuffer.js';
7
+ import type { CameraPTZInterface } from '../../camera/interfaces/ptz.js';
8
+ import type { CameraConfigInputSettings, Container, PrebufferState, SetValues, StateValues } from '../../camera/types.js';
4
9
  import type { IceServer } from '../../services/config/types.js';
10
+ import type { MethodKeys, MethodType } from '../../types.js';
5
11
  import type { MessageQueue } from '../queue.js';
6
12
  import type { CameraDeviceProxyMethods, ProxyMessageStructure } from '../types.js';
7
13
  export declare class CameraDeviceProxy implements CameraDeviceProxyMethods {
@@ -9,7 +15,6 @@ export declare class CameraDeviceProxy implements CameraDeviceProxyMethods {
9
15
  private configService;
10
16
  private camerasService;
11
17
  private pluginsService;
12
- private socketService;
13
18
  private messageQueue;
14
19
  constructor(messageQueue: MessageQueue);
15
20
  connect(data: {
@@ -20,45 +25,34 @@ export declare class CameraDeviceProxy implements CameraDeviceProxyMethods {
20
25
  cameraId: string;
21
26
  pluginId: string;
22
27
  }): void;
23
- reboot(data: {
24
- cameraId: string;
25
- pluginId: string;
26
- }): Promise<void>;
27
- getStreamInfo(data: {
28
- sourceName: string;
29
- cameraId: string;
30
- pluginId: string;
31
- }): Promise<StreamInfo | undefined>;
32
28
  getFfmpegPath(): string;
33
29
  getIceServers(): IceServer[];
34
- snapshot(data: {
35
- forceNew?: boolean;
30
+ updateState<T extends keyof SetValues>(data: {
31
+ stateName: T;
32
+ eventData: SetValues[T];
36
33
  cameraId: string;
37
34
  pluginId: string;
38
- }): Promise<ArrayBuffer>;
39
- streamVideo(data: {
40
- sourceName: string;
41
- options: FfmpegOptions;
35
+ }): Promise<void>;
36
+ updatePrebufferState(data: {
37
+ sourceId: string;
38
+ container: Container;
39
+ state: PrebufferState;
42
40
  cameraId: string;
43
41
  pluginId: string;
44
42
  }): Promise<void>;
45
- recordToFile(data: {
46
- sourceName: string;
47
- outputPath: string;
48
- duration?: number;
43
+ addCameraSource(data: {
44
+ source: CameraConfigInputSettings;
49
45
  cameraId: string;
50
46
  pluginId: string;
51
47
  }): Promise<void>;
52
- updateState<T extends keyof SetValues>(data: {
53
- stateName: T;
54
- eventData: SetValues[T];
48
+ updateCameraSource(data: {
49
+ id: string;
50
+ source: Partial<CameraConfigInputSettings>;
55
51
  cameraId: string;
56
52
  pluginId: string;
57
53
  }): Promise<void>;
58
- updatePrebufferState(data: {
59
- sourceId: string;
60
- container: Container;
61
- state: PrebufferState;
54
+ removeCameraSource(data: {
55
+ id: string;
62
56
  cameraId: string;
63
57
  pluginId: string;
64
58
  }): Promise<void>;
@@ -70,11 +64,11 @@ export declare class CameraDeviceProxy implements CameraDeviceProxyMethods {
70
64
  states: StateValues;
71
65
  cameraState: boolean;
72
66
  };
73
- onRequestReboot(pluginId: string, cameraId: string, ...args: Parameters<CameraDelegate['reboot']>): Promise<Buffer>;
74
- onRequestGetStreamInfo(pluginId: string, cameraId: string, ...args: Parameters<CameraPrebufferDelegate['getStreamInfo']>): Promise<StreamInfo | undefined>;
75
- onRequestSnapshotRequest(pluginId: string, cameraId: string, ...args: Parameters<CameraDelegate['snapshotRequest']>): Promise<Buffer>;
76
- onRequestPrepareStream(pluginId: string, cameraId: string, ...args: Parameters<CameraDelegate['prepareStream']>): Promise<void>;
77
- onRequestWebRTCOffer(pluginId: string, cameraId: string, ...args: Parameters<CameraDelegate['onOffer']>): Promise<string>;
78
- onRequestWebRTCIceCandidates(pluginId: string, cameraId: string, ...args: Parameters<CameraDelegate['onCandidates']>): Promise<void>;
79
- handleMessage(message: ProxyMessageStructure): Promise<void>;
67
+ onRequest<T extends MethodKeys<CameraInterface>>(delegateType: 'cameraDelegate', cameraId: string, fn: T, ...args: Parameters<MethodType<CameraInterface, T>>): Promise<ReturnType<MethodType<CameraInterface, T>>>;
68
+ onRequest<T extends MethodKeys<CameraPrebufferInterface>>(delegateType: 'prebufferDelegate', cameraId: string, fn: T, ...args: Parameters<MethodType<CameraPrebufferInterface, T>>): Promise<ReturnType<MethodType<CameraPrebufferInterface, T>>>;
69
+ onRequest<T extends MethodKeys<CameraPTZInterface>>(delegateType: 'ptzDelegate', cameraId: string, fn: T, ...args: Parameters<MethodType<CameraPTZInterface, T>>): Promise<ReturnType<MethodType<CameraPTZInterface, T>>>;
70
+ onRequest<T extends MethodKeys<CameraMotionDetectionInterface>>(delegateType: 'motionDetectorDelegate', cameraId: string, fn: T, ...args: Parameters<MethodType<CameraMotionDetectionInterface, T>>): Promise<ReturnType<MethodType<CameraMotionDetectionInterface, T>>>;
71
+ onRequest<T extends MethodKeys<CameraObjectDetectionInterface>>(delegateType: 'objectDetectorDelegate', cameraId: string, fn: T, ...args: Parameters<MethodType<CameraObjectDetectionInterface, T>>): Promise<ReturnType<MethodType<CameraObjectDetectionInterface, T>>>;
72
+ onRequest<T extends MethodKeys<CameraAudioDetectionInterface>>(delegateType: 'audioDetectorDelegate', cameraId: string, fn: T, ...args: Parameters<MethodType<CameraAudioDetectionInterface, T>>): Promise<ReturnType<MethodType<CameraAudioDetectionInterface, T>>>;
73
+ handleMessage(message: ProxyMessageStructure): Promise<void | ProxyMessageStructure>;
80
74
  }
@@ -27,5 +27,5 @@ export declare class DeviceManagerProxy implements DeviceManagerServerProxyMetho
27
27
  id: string;
28
28
  pluginId: string;
29
29
  }): Promise<void>;
30
- handleMessage(message: ProxyMessageStructure): Promise<void>;
30
+ handleMessage(message: ProxyMessageStructure): Promise<void | ProxyMessageStructure>;
31
31
  }
@@ -8,5 +8,5 @@ export declare class PluginsManagerProxy implements PluginsManagerServerProxyMet
8
8
  constructor(messageQueue: MessageQueue);
9
9
  onRequestPluginFn<K extends keyof CallablePluginMethods>(pluginId: string, fn: K, ...args: Parameters<BasePlugin[K]>): Promise<ReturnType<BasePlugin[K]>>;
10
10
  onRequestStorageFn<K extends keyof CallablePluginStorageMethods>(pluginId: string, cameraId: string, fn: K, ...args: Parameters<CameraStorage[K]>): Promise<Awaited<ReturnType<CameraStorage[K]>>>;
11
- handleMessage(message: ProxyMessageStructure): Promise<void>;
11
+ handleMessage(message: ProxyMessageStructure): Promise<void | ProxyMessageStructure>;
12
12
  }
@@ -4,5 +4,5 @@ export declare class SystemManagerProxy implements SystemManagerServerProxyMetho
4
4
  private pluginsService;
5
5
  private messageQueue;
6
6
  constructor(messageQueue: MessageQueue);
7
- handleMessage(message: ProxyMessageStructure): Promise<void>;
7
+ handleMessage(message: ProxyMessageStructure): Promise<void | ProxyMessageStructure>;
8
8
  }
@@ -3,28 +3,31 @@ import type { ProxyAuth } from './types.js';
3
3
  export declare class NatsServer {
4
4
  private readonly clusterAmount;
5
5
  private readonly auth;
6
- private _serverPort;
7
- private _clusterPort;
6
+ private serverPort;
7
+ private clusterPort;
8
+ private _endpoints;
8
9
  private serverProcess?;
9
10
  private clusterProcesses;
10
11
  private logger;
11
12
  private configService;
12
13
  private process;
13
14
  private tmpDir;
15
+ private config;
14
16
  private manuallyKilled;
15
17
  private shuttingDown;
16
18
  private _status;
17
19
  get status(): RUNTIME_STATUS;
18
- get serverPort(): number;
19
- get clusterPort(): number;
20
+ get endpoints(): string[];
20
21
  constructor(auth: ProxyAuth);
21
22
  start(): Promise<void>;
22
- private startServer;
23
- private startClusterServer;
24
- private setupProcess;
23
+ private configServer;
24
+ private configClusters;
25
25
  stop(): Promise<void>;
26
26
  restart(): Promise<void>;
27
27
  getPID(): number;
28
+ private startServer;
29
+ private startClusterServer;
30
+ private setupProcess;
28
31
  private writeConfigFile;
29
32
  private stringifyConfig;
30
33
  private kill;
@@ -1,13 +1,11 @@
1
- import type { Camera } from '../api/database/types.js';
1
+ import type { Camera, VideoStreamingMode } from '../api/database/types.js';
2
2
  import type { CameraDevice } from '../camera/device.js';
3
- import type { CameraConfig, Container, FfmpegOptions, PrebufferState, SetValues, StateValues, StreamInfo } from '../camera/types.js';
3
+ import type { CameraConfig, CameraConfigInputSettings, CameraDelegates, Container, PrebufferState, SetValues, StateValues } from '../camera/types.js';
4
4
  import type { BasePlugin } from '../plugins/base.js';
5
5
  import type { CameraExtension } from '../plugins/types.js';
6
6
  import type { CameraStorage } from '../polyglot/node/plugins/cameraStorage.js';
7
7
  import type { IceServer } from '../services/config/types.js';
8
- export type MethodKeys<T> = {
9
- [K in keyof T]: T[K] extends Function ? K : never;
10
- }[keyof T];
8
+ import type { MethodKeys } from '../types.js';
11
9
  export interface QueueItem {
12
10
  message: ProxyMessageStructure;
13
11
  resolve: (response: any) => void;
@@ -21,11 +19,11 @@ export interface ProxyMessageStructure {
21
19
  pluginId: string;
22
20
  type: 'request' | 'reply';
23
21
  proxy: 'system' | 'device' | 'plugins' | 'camera';
24
- client: 'pluginFn' | 'pluginStorage' | 'cameraFn' | 'cameraDelegate' | 'cameraPrebufferDelegate' | 'device' | 'system';
22
+ client: 'cameraFn' | 'pluginFn' | 'pluginStorage' | 'device' | 'system' | keyof CameraDelegates;
25
23
  fn: string;
26
- args: any;
24
+ args: any[] | Record<string, any>;
27
25
  timeout: number;
28
- timestamp: string;
26
+ timestamp: number;
29
27
  response?: any;
30
28
  error?: any;
31
29
  }
@@ -39,19 +37,11 @@ export interface ProxyAuth {
39
37
  pass: string;
40
38
  };
41
39
  }
42
- export interface MethodNamesByManager {
43
- systemManager: SystemManagerProxyMethodNames;
44
- deviceManager: DeviceManagerProxyMethodNames;
45
- pluginsManager: PluginsManagerProxyMethodNames;
46
- cameraDevice: CameraDeviceProxyMethodNames;
47
- }
48
- export type ManagerNames = keyof MethodNamesByManager;
49
- export interface WebsocketClientRequest<T extends keyof MethodNamesByManager> {
50
- name: T;
51
- method: MethodNamesByManager[T];
52
- args: any[];
53
- }
54
40
  export type WebsocketClientProxyEvent = 'updateDevice' | 'updateState';
41
+ export interface StreamPayload {
42
+ type: Exclude<VideoStreamingMode, 'webrtc' | 'webrtc/tcp'> | 'webrtc/offer' | 'webrtc/candidate';
43
+ value: string;
44
+ }
55
45
  export interface DeviceManagerServerProxyMethods {
56
46
  createCamera(data: {
57
47
  camera: CameraConfig;
@@ -87,15 +77,6 @@ export interface CameraDeviceProxyMethods {
87
77
  cameraId: string;
88
78
  pluginId: string;
89
79
  }): void;
90
- reboot(data: {
91
- cameraId: string;
92
- pluginId: string;
93
- }): Promise<void>;
94
- getStreamInfo(data: {
95
- sourceName: string;
96
- cameraId: string;
97
- pluginId: string;
98
- }): Promise<StreamInfo | undefined>;
99
80
  getFfmpegPath(data: {
100
81
  cameraId: string;
101
82
  pluginId: string;
@@ -104,24 +85,6 @@ export interface CameraDeviceProxyMethods {
104
85
  cameraId: string;
105
86
  pluginId: string;
106
87
  }): IceServer[];
107
- snapshot(data: {
108
- forceNew?: boolean;
109
- cameraId: string;
110
- pluginId: string;
111
- }): Promise<ArrayBuffer>;
112
- streamVideo(data: {
113
- sourceName: string;
114
- options: FfmpegOptions;
115
- cameraId: string;
116
- pluginId: string;
117
- }): Promise<void>;
118
- recordToFile(data: {
119
- sourceName: string;
120
- outputPath: string;
121
- duration?: number;
122
- cameraId: string;
123
- pluginId: string;
124
- }): Promise<void>;
125
88
  updateState<T extends keyof SetValues>(data: {
126
89
  stateName: T;
127
90
  eventData: SetValues[T];
@@ -143,11 +106,27 @@ export interface CameraDeviceProxyMethods {
143
106
  states: StateValues;
144
107
  cameraState: boolean;
145
108
  };
109
+ addCameraSource(data: {
110
+ source: CameraConfigInputSettings;
111
+ cameraId: string;
112
+ pluginId: string;
113
+ }): Promise<void>;
114
+ updateCameraSource(data: {
115
+ id: string;
116
+ source: Partial<CameraConfigInputSettings>;
117
+ cameraId: string;
118
+ pluginId: string;
119
+ }): Promise<void>;
120
+ removeCameraSource(data: {
121
+ id: string;
122
+ cameraId: string;
123
+ pluginId: string;
124
+ }): Promise<void>;
146
125
  }
147
126
  export type CameraDeviceProxyMethodNames = MethodKeys<CameraDeviceProxyMethods>;
148
127
  export interface DeviceManagerListenerMessagePayload {
149
128
  type: keyof DeviceManagerProxyEventCallbacks;
150
- data: DeviceManagerProxyEvents['cameraSelected'] | DeviceManagerProxyEvents['cameraDeselected'] | DeviceManagerProxyEvents['cameraUpdated'];
129
+ data: DeviceManagerProxyEvents['cameraSelected'] | DeviceManagerProxyEvents['cameraDeselected'];
151
130
  }
152
131
  export interface DeviceManagerProxyMethods {
153
132
  getCameraByName(name: string): Promise<CameraDevice | undefined>;
@@ -166,15 +145,10 @@ export interface DeviceManagerProxyEvents {
166
145
  camera: Camera;
167
146
  extension: CameraExtension;
168
147
  };
169
- cameraUpdated: {
170
- camera: Camera;
171
- extension: CameraExtension;
172
- };
173
148
  }
174
149
  export interface DeviceManagerProxyEventCallbacks {
175
150
  cameraSelected: (camera: CameraDevice, extension: CameraExtension) => void;
176
151
  cameraDeselected: (cameraId: string, extension: CameraExtension) => void;
177
- cameraUpdated: (cameraId: string, extension: CameraExtension) => void;
178
152
  }
179
153
  export interface DeviceManagerProxyGenericEvent<K extends keyof DeviceManagerProxyEvents> {
180
154
  type: K;
@@ -5,8 +5,11 @@ import type { CameraDeviceListenerMessagePayload } from './types.js';
5
5
  export declare class WebsocketProxy {
6
6
  nsp: Namespace;
7
7
  nspName: SocketNsp;
8
- private proxy;
8
+ private logger;
9
+ private proxyServer;
10
+ private configService;
9
11
  private camerasService;
12
+ private bridges;
10
13
  constructor(io: Server);
11
14
  init(): void;
12
15
  publishCameraEvent<K extends keyof StateValues>(cameraId: string, stateName: K, data: {
@@ -15,9 +18,10 @@ export declare class WebsocketProxy {
15
18
  }): void;
16
19
  publishCameraEvent(cameraId: string, type: CameraDeviceListenerMessagePayload['type'], data?: any): void;
17
20
  private setupEventListeners;
18
- private isSystemManagerMethod;
19
- private isDeviceManagerMethod;
20
- private isPluginsManagerMethod;
21
- private isCameraProxyMethod;
21
+ private connectBridge;
22
+ private closeBridge;
23
+ private sendMessage;
24
+ private onEnd;
25
+ private onDestroy;
22
26
  private isCameraState;
23
27
  }