@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.
- package/dist/bundle.js +1 -1
- package/dist/types/packages/client/browser/src/proxy/cameraDevice.d.ts +21 -7
- package/dist/types/packages/client/browser/src/proxy/deviceManager.d.ts +4 -0
- package/dist/types/packages/client/browser/src/socket.d.ts +7 -7
- package/dist/types/packages/client/browser/src/streaming/go2rts-session.d.ts +54 -0
- package/dist/types/packages/client/browser/src/types.d.ts +11 -8
- package/dist/types/packages/client/browser/src/utils.d.ts +12 -0
- package/dist/types/server/src/api/controllers/users.controller.d.ts +9 -3
- package/dist/types/server/src/api/database/index.d.ts +10 -3
- package/dist/types/server/src/api/database/types.d.ts +35 -29
- package/dist/types/server/src/api/go2rtc/api/config.d.ts +3 -4
- package/dist/types/server/src/api/go2rtc/api/index.d.ts +1 -2
- package/dist/types/server/src/api/go2rtc/api/streams.d.ts +5 -6
- package/dist/types/server/src/api/go2rtc/types.d.ts +5 -2
- package/dist/types/server/src/api/index.d.ts +7 -9
- package/dist/types/server/src/api/middlewares/pagination.middleware.d.ts +1 -1
- package/dist/types/server/src/api/plugins/logger.plugin.d.ts +7 -0
- package/dist/types/server/src/api/routes/index.d.ts +1 -2
- package/dist/types/server/src/api/schemas/backup.schema.d.ts +53 -155
- package/dist/types/server/src/api/schemas/cameras.schema.d.ts +201 -142
- package/dist/types/server/src/api/schemas/config.schema.d.ts +20 -20
- package/dist/types/server/src/api/schemas/go2rtc.schema.d.ts +60 -60
- package/dist/types/server/src/api/schemas/users.schema.d.ts +242 -136
- package/dist/types/server/src/api/services/cameras.service.d.ts +9 -7
- package/dist/types/server/src/api/services/plugins.service.d.ts +1 -0
- package/dist/types/server/src/api/services/users.service.d.ts +6 -2
- package/dist/types/server/src/api/types/index.d.ts +34 -8
- package/dist/types/server/src/api/utils/fetch.d.ts +2 -0
- package/dist/types/server/src/api/websocket/nsp/status.d.ts +1 -1
- package/dist/types/server/src/api/websocket/types.d.ts +1 -15
- package/dist/types/server/src/api.d.ts +1 -2
- package/dist/types/server/src/camera/controller.d.ts +23 -12
- package/dist/types/server/src/camera/device.d.ts +7 -16
- package/dist/types/server/src/camera/index.d.ts +31 -22
- package/dist/types/server/src/camera/interfaces/audioDetection.d.ts +10 -0
- package/dist/types/server/src/camera/interfaces/camera.d.ts +19 -0
- package/dist/types/server/src/camera/interfaces/motionDetection.d.ts +10 -0
- package/dist/types/server/src/camera/interfaces/objectDetection.d.ts +10 -0
- package/dist/types/server/src/camera/interfaces/prebuffer.d.ts +11 -0
- package/dist/types/server/src/camera/interfaces/ptz.d.ts +13 -0
- package/dist/types/server/src/camera/polygon.d.ts +3 -2
- package/dist/types/server/src/camera/streaming/peer-connection.d.ts +1 -1
- package/dist/types/server/src/camera/streaming/webrtc-connection.d.ts +2 -1
- package/dist/types/server/src/camera/streaming/{streaming-session.d.ts → werift-session.d.ts} +1 -1
- package/dist/types/server/src/camera/types.d.ts +60 -21
- package/dist/types/server/src/camera/videoFrame.d.ts +10 -11
- package/dist/types/server/src/decoder/types.d.ts +31 -22
- package/dist/types/server/src/decoder/worker.d.ts +4 -4
- package/dist/types/server/src/nats/index.d.ts +1 -1
- package/dist/types/server/src/nats/proxy/cameraDevice.d.ts +30 -36
- package/dist/types/server/src/nats/proxy/deviceManager.d.ts +1 -1
- package/dist/types/server/src/nats/proxy/pluginsManager.d.ts +1 -1
- package/dist/types/server/src/nats/proxy/systemManager.d.ts +1 -1
- package/dist/types/server/src/nats/server.d.ts +10 -7
- package/dist/types/server/src/nats/types.d.ts +27 -53
- package/dist/types/server/src/nats/websocket.d.ts +9 -5
- package/dist/types/server/src/plugins/base.d.ts +2 -3
- package/dist/types/server/src/plugins/index.d.ts +1 -0
- package/dist/types/server/src/plugins/types.d.ts +22 -5
- package/dist/types/server/src/plugins/worker.d.ts +1 -0
- package/dist/types/server/src/polyglot/node/plugins/api.d.ts +1 -2
- package/dist/types/server/src/polyglot/node/plugins/cameraStorage.d.ts +2 -2
- package/dist/types/server/src/polyglot/node/plugins/proxy/cameraDevice.d.ts +35 -14
- package/dist/types/server/src/polyglot/node/plugins/proxy/deviceManager.d.ts +5 -5
- package/dist/types/server/src/polyglot/node/plugins/proxy/pluginsManager.d.ts +5 -5
- package/dist/types/server/src/polyglot/node/plugins/proxy/systemManager.d.ts +5 -5
- package/dist/types/server/src/polyglot/node/plugins/schema.d.ts +10 -2
- package/dist/types/server/src/polyglot/node/plugins/storageController.d.ts +1 -1
- package/dist/types/server/src/services/config/constants.d.ts +0 -2
- package/dist/types/server/src/services/config/index.d.ts +29 -36
- package/dist/types/server/src/services/config/types.d.ts +1 -1
- package/dist/types/server/src/types.d.ts +4 -0
- package/dist/types/server/src/utils/packer.d.ts +2 -0
- package/dist/types/server/src/utils/pythonInstaller.d.ts +1 -1
- package/dist/types/server/src/utils/utils.d.ts +5 -0
- package/dist/types/shared/types/index.d.ts +5 -0
- package/package.json +10 -14
- package/dist/types/packages/client/browser/src/streaming/peer-connection.d.ts +0 -24
- package/dist/types/packages/client/browser/src/streaming/streaming-session.d.ts +0 -25
- package/dist/types/packages/client/browser/src/streaming/webrtc-connection.d.ts +0 -26
- package/dist/types/server/src/api/utils/axios.d.ts +0 -2
- 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
|
|
98
|
-
|
|
99
|
-
}
|
|
100
|
-
|
|
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:
|
|
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:
|
|
114
|
+
classes: ObjectClass[];
|
|
118
115
|
isPrivacyMask: boolean;
|
|
119
116
|
}
|
|
120
|
-
export type
|
|
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:
|
|
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
|
-
|
|
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
|
|
5
|
+
readonly frameData: FrameData;
|
|
6
|
+
readonly metadata: FrameMetadata;
|
|
7
7
|
private frameGeneratorSubject;
|
|
8
8
|
private publisher;
|
|
9
|
-
private
|
|
10
|
-
get metadata(): FrameMetadata;
|
|
9
|
+
private prebufferDuration;
|
|
11
10
|
get inputWidth(): number;
|
|
12
11
|
get inputHeight(): number;
|
|
13
|
-
get inputFormat():
|
|
14
|
-
constructor(cameraId: string, publisher: NatsConnection,
|
|
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
|
|
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,
|
|
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:
|
|
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:
|
|
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
|
-
|
|
37
|
+
prebufferDuration: number;
|
|
35
38
|
}
|
|
36
39
|
export interface ImageInformation {
|
|
37
40
|
width: number;
|
|
38
41
|
height: number;
|
|
39
|
-
channels:
|
|
42
|
+
channels: 1 | 3 | 4;
|
|
43
|
+
format: ImageInputFormat;
|
|
40
44
|
}
|
|
41
45
|
export interface FrameBuffer {
|
|
42
|
-
image:
|
|
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
|
|
51
|
-
metadata: FrameMetadata;
|
|
52
|
-
inputWidth: number;
|
|
53
|
-
inputHeight: number;
|
|
54
|
-
inputFormat:
|
|
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
|
-
|
|
79
|
-
|
|
82
|
+
proxyEndpoints: string[];
|
|
83
|
+
fps: number;
|
|
84
|
+
resolution: number;
|
|
80
85
|
}
|
|
81
|
-
export type WorkerMessage = 'started' | 'getFFmpegArgs' | 'updateClient' | 'removeClient'
|
|
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:
|
|
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:
|
|
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
|
|
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
|
|
22
|
+
private proxyEndpoints;
|
|
23
23
|
private ffmpegArgs;
|
|
24
24
|
private py;
|
|
25
25
|
private _status;
|
|
26
26
|
get status(): PLUGIN_STATUS;
|
|
27
|
-
constructor(
|
|
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 {
|
|
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
|
-
|
|
35
|
-
|
|
30
|
+
updateState<T extends keyof SetValues>(data: {
|
|
31
|
+
stateName: T;
|
|
32
|
+
eventData: SetValues[T];
|
|
36
33
|
cameraId: string;
|
|
37
34
|
pluginId: string;
|
|
38
|
-
}): Promise<
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
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
|
-
|
|
46
|
-
|
|
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
|
-
|
|
53
|
-
|
|
54
|
-
|
|
48
|
+
updateCameraSource(data: {
|
|
49
|
+
id: string;
|
|
50
|
+
source: Partial<CameraConfigInputSettings>;
|
|
55
51
|
cameraId: string;
|
|
56
52
|
pluginId: string;
|
|
57
53
|
}): Promise<void>;
|
|
58
|
-
|
|
59
|
-
|
|
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
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
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
|
|
7
|
-
private
|
|
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
|
|
19
|
-
get clusterPort(): number;
|
|
20
|
+
get endpoints(): string[];
|
|
20
21
|
constructor(auth: ProxyAuth);
|
|
21
22
|
start(): Promise<void>;
|
|
22
|
-
private
|
|
23
|
-
private
|
|
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,
|
|
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
|
-
|
|
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: '
|
|
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:
|
|
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']
|
|
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
|
|
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
|
|
19
|
-
private
|
|
20
|
-
private
|
|
21
|
-
private
|
|
21
|
+
private connectBridge;
|
|
22
|
+
private closeBridge;
|
|
23
|
+
private sendMessage;
|
|
24
|
+
private onEnd;
|
|
25
|
+
private onDestroy;
|
|
22
26
|
private isCameraState;
|
|
23
27
|
}
|