@camera.ui/browser 0.0.111 → 0.0.113

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 (51) hide show
  1. package/LICENSE.md +1 -1
  2. package/README.md +10 -1
  3. package/dist/index.d.ts +1269 -0
  4. package/dist/index.js +4179 -0
  5. package/package.json +55 -39
  6. package/CHANGELOG.md +0 -8
  7. package/dist/bundle.js +0 -2
  8. package/dist/bundle.js.LICENSE.txt +0 -14
  9. package/dist/types/packages/client/browser/src/api.d.ts +0 -8
  10. package/dist/types/packages/client/browser/src/client.d.ts +0 -21
  11. package/dist/types/packages/client/browser/src/index.d.ts +0 -2
  12. package/dist/types/packages/client/browser/src/proxy/cameraDevice.d.ts +0 -26
  13. package/dist/types/packages/client/browser/src/proxy/coreManager.d.ts +0 -14
  14. package/dist/types/packages/client/browser/src/proxy/deviceManager.d.ts +0 -16
  15. package/dist/types/packages/client/browser/src/proxy/index.d.ts +0 -3
  16. package/dist/types/packages/client/browser/src/proxy.d.ts +0 -7
  17. package/dist/types/packages/client/browser/src/streaming/config.d.ts +0 -21
  18. package/dist/types/packages/client/browser/src/streaming/go2rts-session.d.ts +0 -286
  19. package/dist/types/packages/client/browser/src/streaming/types.d.ts +0 -38
  20. package/dist/types/packages/client/browser/src/types.d.ts +0 -56
  21. package/dist/types/packages/client/browser/src/utils.d.ts +0 -12
  22. package/dist/types/packages/common/src/utils/subscribed.d.ts +0 -18
  23. package/dist/types/packages/types/src/index.d.ts +0 -812
  24. package/dist/types/server/src/api/database/types.d.ts +0 -80
  25. package/dist/types/server/src/api/go2rtc/types.d.ts +0 -147
  26. package/dist/types/server/src/api/schemas/backup.schema.d.ts +0 -211
  27. package/dist/types/server/src/api/schemas/cameras.schema.d.ts +0 -1864
  28. package/dist/types/server/src/api/schemas/config.schema.d.ts +0 -102
  29. package/dist/types/server/src/api/schemas/go2rtc.schema.d.ts +0 -735
  30. package/dist/types/server/src/api/schemas/plugins.schema.d.ts +0 -72
  31. package/dist/types/server/src/api/schemas/storage.schema.d.ts +0 -22
  32. package/dist/types/server/src/api/schemas/system.schema.d.ts +0 -185
  33. package/dist/types/server/src/api/schemas/users.schema.d.ts +0 -857
  34. package/dist/types/server/src/api/types/index.d.ts +0 -612
  35. package/dist/types/server/src/api/websocket/types.d.ts +0 -43
  36. package/dist/types/server/src/camera/classes.d.ts +0 -2
  37. package/dist/types/server/src/camera/index.d.ts +0 -92
  38. package/dist/types/server/src/camera/interfaces.d.ts +0 -17
  39. package/dist/types/server/src/camera/iou.d.ts +0 -2
  40. package/dist/types/server/src/camera/polygon.d.ts +0 -4
  41. package/dist/types/server/src/camera/types.d.ts +0 -17
  42. package/dist/types/server/src/go2rtc/types.d.ts +0 -15
  43. package/dist/types/server/src/manager/types.d.ts +0 -15
  44. package/dist/types/server/src/plugins/schema.d.ts +0 -27
  45. package/dist/types/server/src/plugins/types.d.ts +0 -49
  46. package/dist/types/server/src/rpc/namespaces.d.ts +0 -35
  47. package/dist/types/server/src/rpc/types.d.ts +0 -111
  48. package/dist/types/server/src/services/config/defaults.d.ts +0 -12
  49. package/dist/types/server/src/services/config/types.d.ts +0 -162
  50. package/dist/types/server/src/types.d.ts +0 -34
  51. package/dist/types/shared/types/index.d.ts +0 -22
@@ -1,812 +0,0 @@
1
- import type { Observable, ReplaySubject, Subject, Subscription } from 'rxjs';
2
- import type sharp from 'sharp';
3
- import type { ConnectionState, RTCIceCandidate, RTCSessionDescription, RtpPacket } from 'werift';
4
- export type { Observable, ReplaySubject, Subject, Subscription } from 'rxjs';
5
- export type { ConnectionState, RTCIceCandidate, RTCSessionDescription, RtpPacket, sharp };
6
- export type JSONObject = Record<string, JSONValue>;
7
- export interface JSONValue {
8
- [key: string]: string | number | boolean | JSONValue | JSONValue[];
9
- }
10
- export type JSONArray = JSONValue[];
11
- export type Path = (number | string)[] | number | string;
12
- export type CameraType = 'camera' | 'doorbell';
13
- export type ZoneType = 'intersect' | 'contain';
14
- export type ZoneFilter = 'include' | 'exclude';
15
- export type ObjectClass = 'person' | 'vehicle' | 'animal' | 'other' | 'motion';
16
- export type CameraRole = 'high-resolution' | 'mid-resolution' | 'low-resolution' | 'snapshot';
17
- export type StreamingRole = Exclude<CameraRole, 'snapshot'>;
18
- export type DecoderFormat = 'yuv420p' | 'rgb24' | 'nv12';
19
- export type ImageInputFormat = 'yuv420p' | 'nv12' | 'rgb' | 'rgba' | 'gray';
20
- export type ImageOutputFormat = 'rgb' | 'rgba' | 'gray';
21
- export type CameraExtension = 'cameraController' | 'hub' | 'motionDetection' | 'objectDetection' | 'audioDetection' | 'ptz';
22
- export type CameraFrameWorkerDecoder = 'pillow' | 'wasm' | 'rust' | 'gpu';
23
- export type CameraFrameWorkerResolution = '640x480' | '640x360' | '320x240' | '320x180';
24
- export type AudioCodec = 'PCMU' | 'PCMA' | 'MPEG4-GENERIC' | 'opus' | 'G722' | 'MPA' | 'PCM' | 'FLAC' | 'ELD' | 'PCML' | 'L16';
25
- export type AudioFFmpegCodec = 'pcm_mulaw' | 'pcm_alaw' | 'aac' | 'libopus' | 'g722' | 'mp3' | 'pcm_s16be' | 'pcm_s16le' | 'flac';
26
- export type VideoCodec = 'H264' | 'H265' | 'VP8' | 'VP9' | 'AV1' | 'JPEG' | 'RAW';
27
- export type VideoFFmpegCodec = 'h264' | 'hevc' | 'vp8' | 'vp9' | 'av1' | 'mjpeg' | 'rawvideo';
28
- export type PythonVersion = '3.9' | '3.10' | '3.11' | '3.12';
29
- export type RTSPAudioCodec = 'aac' | 'opus' | 'pcma';
30
- export type ProbeAudioCodec = 'aac' | 'opus' | 'pcma';
31
- export type HwAccelMethod = 'auto' | 'cuda' | 'vaapi' | 'videotoolbox' | 'qsv' | 'rkmpp' | 'v4l2m2m' | 'opencl' | 'vulkan' | 'amf' | 'jetson';
32
- export interface CameraInformation {
33
- model?: string;
34
- manufacturer?: string;
35
- hardware?: string;
36
- serialNumber?: string;
37
- firmwareVersion?: string;
38
- supportUrl?: string;
39
- }
40
- export type Point = [number, number];
41
- export type BoundingBox = [number, number, number, number];
42
- export interface Detection {
43
- id?: string;
44
- label: ObjectClass;
45
- confidence: number;
46
- boundingBox: BoundingBox;
47
- inputWidth: number;
48
- inputHeight: number;
49
- origWidth: number;
50
- origHeight: number;
51
- }
52
- export interface DetectionZone {
53
- name: string;
54
- points: Point[];
55
- type: ZoneType;
56
- filter: ZoneFilter;
57
- classes: ObjectClass[];
58
- isPrivacyMask: boolean;
59
- color: string;
60
- }
61
- export interface MotionDetectionSettings {
62
- timeout: number;
63
- }
64
- export interface ObjectDetectionSettings {
65
- confidence: number;
66
- }
67
- export interface CameraDetectionSettings {
68
- motion: MotionDetectionSettings;
69
- object: ObjectDetectionSettings;
70
- }
71
- export interface CameraFrameWorkerSettings {
72
- decoder: CameraFrameWorkerDecoder;
73
- fps: number;
74
- resolution: CameraFrameWorkerResolution;
75
- }
76
- export interface CameraInput {
77
- readonly _id: string;
78
- name: string;
79
- role: CameraRole;
80
- useForSnapshot: boolean;
81
- hotMode: boolean;
82
- urls: StreamUrls;
83
- }
84
- export interface RTPInfo {
85
- payload?: number;
86
- codec: string;
87
- profile?: string;
88
- rate?: number;
89
- encoding?: number;
90
- level?: number;
91
- }
92
- export interface FMTPInfo {
93
- payload: number;
94
- config: string;
95
- }
96
- export interface AudioCodecProperties {
97
- sampleRate: number;
98
- channels: number;
99
- payloadType: number;
100
- fmtpInfo?: FMTPInfo;
101
- }
102
- export interface VideoCodecProperties {
103
- clockRate: number;
104
- payloadType: number;
105
- fmtpInfo?: FMTPInfo;
106
- }
107
- export interface AudioStreamInfo {
108
- codec: AudioCodec;
109
- ffmpegCodec: AudioFFmpegCodec;
110
- properties: AudioCodecProperties;
111
- direction: 'sendonly' | 'recvonly' | 'sendrecv' | 'inactive';
112
- }
113
- export interface VideoStreamInfo {
114
- codec: VideoCodec;
115
- ffmpegCodec: VideoFFmpegCodec;
116
- properties: VideoCodecProperties;
117
- direction: 'sendonly' | 'recvonly' | 'sendrecv' | 'inactive';
118
- }
119
- export interface ProbeConfig {
120
- video?: boolean;
121
- audio?: boolean | 'all' | ProbeAudioCodec[];
122
- microphone?: boolean;
123
- }
124
- export interface ProbeStream {
125
- sdp: string;
126
- audio: AudioStreamInfo[];
127
- video: VideoStreamInfo[];
128
- }
129
- export interface StreamUrls {
130
- ws: Go2RtcWSSource;
131
- rtsp: Go2RtcRTSPSource;
132
- snapshot: Go2RtcSnapshotSource;
133
- }
134
- export interface Go2RtcWSSource {
135
- webrtc: string;
136
- mse: string;
137
- }
138
- export interface Go2RtcRTSPSource {
139
- base: string;
140
- default: string;
141
- muted: string;
142
- aac: string;
143
- opus: string;
144
- pcma: string;
145
- onvif: string;
146
- }
147
- export interface Go2RtcSnapshotSource {
148
- mp4: string;
149
- jpeg: string;
150
- mjpeg: string;
151
- }
152
- export interface BaseState<T extends LightState | AudioState | MotionState | ObjectState | SirenState | BatteryState | DoorbellState> {
153
- timestamp: number;
154
- lastEvent?: Omit<T, 'lastEvent'>;
155
- }
156
- export interface MotionSetEvent {
157
- state: boolean;
158
- detections?: Detection[];
159
- }
160
- export interface AudioSetEvent {
161
- state: boolean;
162
- db?: number;
163
- }
164
- export interface ObjectSetEvent {
165
- detections: Detection[];
166
- }
167
- export interface LightSetEvent {
168
- state: boolean;
169
- }
170
- export interface DoorbellSetEvent {
171
- state: boolean;
172
- }
173
- export interface SirenSetEvent {
174
- state: boolean;
175
- level?: number;
176
- }
177
- export interface BatterySetEvent {
178
- level: number;
179
- lowBattery?: boolean;
180
- charging?: boolean;
181
- }
182
- export type LightState = BaseState<LightState> & LightSetEvent;
183
- export type MotionState = BaseState<MotionState> & MotionSetEvent;
184
- export type AudioState = BaseState<AudioState> & AudioSetEvent;
185
- export type DoorbellState = BaseState<DoorbellState> & DoorbellSetEvent;
186
- export type SirenState = BaseState<SirenState> & SirenSetEvent;
187
- export type ObjectState = BaseState<ObjectState> & ObjectSetEvent;
188
- export type BatteryState = BaseState<BatteryState> & BatterySetEvent;
189
- export interface StateValues {
190
- light: LightState;
191
- motion: MotionState;
192
- audio: AudioState;
193
- object: ObjectState;
194
- doorbell: DoorbellState;
195
- siren: SirenState;
196
- battery: BatteryState;
197
- }
198
- export interface SetValues {
199
- light: LightSetEvent;
200
- motion: MotionSetEvent;
201
- audio: AudioSetEvent;
202
- object: ObjectSetEvent;
203
- doorbell: DoorbellSetEvent;
204
- siren: SirenSetEvent;
205
- battery: BatterySetEvent;
206
- }
207
- export interface FrameData {
208
- data: Uint8Array;
209
- timestamp: number;
210
- metadata: FrameMetadata;
211
- info: ImageInformation;
212
- }
213
- export interface FrameMetadata {
214
- format: DecoderFormat;
215
- frameSize: number;
216
- width: number;
217
- origWidth: number;
218
- height: number;
219
- origHeight: number;
220
- }
221
- export interface ImageInformation {
222
- width: number;
223
- height: number;
224
- channels: number;
225
- format: ImageInputFormat;
226
- }
227
- export interface ImageCrop {
228
- top: number;
229
- left: number;
230
- width: number;
231
- height: number;
232
- }
233
- export interface ImageResize {
234
- width: number;
235
- height: number;
236
- }
237
- export interface ImageFormat {
238
- to: ImageOutputFormat;
239
- }
240
- export interface ImageOptions {
241
- format?: ImageFormat;
242
- crop?: ImageCrop;
243
- resize?: ImageResize;
244
- }
245
- export interface FrameImage {
246
- image: sharp.Sharp;
247
- info: ImageInformation;
248
- }
249
- export interface FrameBuffer {
250
- image: Uint8Array;
251
- info: ImageInformation;
252
- }
253
- export interface MotionDetectionFrame {
254
- frame: FrameData;
255
- state: MotionSetEvent;
256
- }
257
- export interface VideoFrame {
258
- readonly data: Uint8Array;
259
- readonly metadata: FrameMetadata;
260
- readonly info: ImageInformation;
261
- readonly timestamp: number;
262
- readonly inputWidth: number;
263
- readonly inputHeight: number;
264
- readonly inputFormat: DecoderFormat;
265
- readonly motion?: MotionSetEvent;
266
- toBuffer(options?: ImageOptions): Promise<FrameBuffer>;
267
- toImage(options?: ImageOptions): Promise<FrameImage>;
268
- save(path: string, options?: ImageOptions): Promise<void>;
269
- }
270
- export type FrameType = 'stream' | 'motion';
271
- export interface CameraInputSettings {
272
- readonly _id: string;
273
- name: string;
274
- role: CameraRole;
275
- useForSnapshot: boolean;
276
- hotMode: boolean;
277
- urls: string[];
278
- }
279
- export interface CameraConfigInputSettings extends Omit<CameraInputSettings, '_id' | 'urls'> {
280
- urls?: string[];
281
- }
282
- export interface BaseCameraConfig {
283
- name: string;
284
- nativeId?: string;
285
- isCloud?: boolean;
286
- disabled?: boolean;
287
- info?: Partial<CameraInformation>;
288
- }
289
- export type CameraConfig = BaseCameraConfig & {
290
- sources: CameraConfigInputSettings[];
291
- };
292
- export interface RTSPUrlOptions {
293
- video?: boolean;
294
- audio?: boolean | RTSPAudioCodec | RTSPAudioCodec[];
295
- audioSingleTrack?: boolean;
296
- backchannel?: boolean;
297
- timeout?: number;
298
- }
299
- export interface CameraSource extends CameraInput {
300
- snapshot(forceNew?: boolean): Promise<ArrayBuffer | undefined>;
301
- probeStream(probeConfig?: ProbeConfig, refresh?: boolean): Promise<ProbeStream | undefined>;
302
- }
303
- export interface CameraDeviceSource extends CameraSource {
304
- generateRTSPUrl(options?: RTSPUrlOptions): string;
305
- createWebRTCSession(options?: WebRTCConnectionOptions): WeriftSession;
306
- createRTSPSession(options?: RTSPConnectionOptions): RTSPSession;
307
- createFMP4Session(options?: FMP4ConnectionOptions): FMP4Session;
308
- }
309
- export interface WebRTCConnectionOptions {
310
- createPeerConnection?: () => BasicPeerConnection;
311
- iceServers?: IceServer[];
312
- }
313
- export interface RTSPConnectionOptions {
314
- url?: string;
315
- }
316
- export interface FMP4ConnectionOptions {
317
- url?: string;
318
- }
319
- export interface Subscribed {
320
- addSubscriptions(...subscriptions: Subscription[]): void;
321
- addAdditionalSubscriptions(...subscriptions: Subscription[]): void;
322
- unsubscribe(): void;
323
- unsubscribeAdditional(): void;
324
- }
325
- export interface WeriftSession extends Subscribed {
326
- readonly onStarted: ReplaySubject<void>;
327
- readonly onError: ReplaySubject<Error>;
328
- readonly onCallEnded: ReplaySubject<void>;
329
- readonly onVideoRtp: Subject<RtpPacket>;
330
- readonly onAudioRtp: Subject<RtpPacket>;
331
- startTranscoding(ffmpegOptions: FfmpegOptions, streamProbe?: ProbeStream): Promise<void>;
332
- transcodeReturnAudio(ffmpegOptions: ReturnAudioFFmpegOptions, streamProbe?: ProbeStream): Promise<void>;
333
- stop(): void;
334
- sendAudioPacket(rtp: RtpPacket | Buffer): void;
335
- requestKeyFrame(): void;
336
- }
337
- export interface RTSPSession extends Subscribed {
338
- readonly onStarted: ReplaySubject<void>;
339
- readonly onError: ReplaySubject<Error>;
340
- readonly onCallEnded: ReplaySubject<void>;
341
- readonly onVideoRtp: Subject<RtpPacket>;
342
- readonly onAudioRtp: Subject<RtpPacket>;
343
- startStream(): Promise<void>;
344
- startTranscoding(ffmpegOptions: FfmpegOptions): Promise<void>;
345
- transcodeReturnAudio(ffmpegOptions: ReturnAudioFFmpegOptions): Promise<void>;
346
- stop(): void;
347
- sendAudioPacket(rtp: RtpPacket): void;
348
- }
349
- export interface FMP4Session extends Subscribed {
350
- readonly onStarted: ReplaySubject<void>;
351
- readonly onError: ReplaySubject<Error>;
352
- readonly onCallEnded: ReplaySubject<void>;
353
- readonly onFragment: Subject<Fragment>;
354
- readonly initSegment: Promise<Buffer>;
355
- startStream(): void;
356
- startTranscoding(ffmpegOptions: FragmentedFfmpegOptions): Promise<void>;
357
- stop(): void;
358
- fragments(abortSignal?: AbortSignal): AsyncGenerator<Fragment>;
359
- }
360
- export interface Fragment {
361
- data: Buffer;
362
- info: FragmentInfo;
363
- }
364
- export interface FragmentInfo {
365
- isFtyp: boolean;
366
- isMoov: boolean;
367
- isKeyframe: boolean;
368
- }
369
- export type SpawnInput = string | number;
370
- export interface FfmpegOptions {
371
- ffmpegPath: string;
372
- input?: SpawnInput[];
373
- video?: SpawnInput[];
374
- audio?: SpawnInput[];
375
- output: SpawnInput[];
376
- logPrefix?: string;
377
- }
378
- export interface ReturnAudioFFmpegOptions {
379
- ffmpegPath: string;
380
- input: SpawnInput[];
381
- logPrefix?: string;
382
- }
383
- export interface FragmentedFfmpegOptions {
384
- ffmpegPath: string;
385
- input?: SpawnInput[];
386
- video?: SpawnInput[];
387
- audio?: SpawnInput[];
388
- logPrefix?: string;
389
- }
390
- export interface BasicPeerConnection {
391
- createOffer(): Promise<RTCSessionDescription>;
392
- acceptAnswer(answer: {
393
- type: 'answer';
394
- sdp: string;
395
- }): Promise<void>;
396
- addIceCandidate(candidate: Partial<RTCIceCandidate>): Promise<void>;
397
- onIceCandidate: Subject<RTCIceCandidate>;
398
- onConnectionState: Observable<ConnectionState>;
399
- close(): void;
400
- requestKeyFrame?: () => void;
401
- }
402
- export type VideoStreamingMode = 'auto' | 'webrtc' | 'mse' | 'webrtc/tcp';
403
- export type CameraAspectRatio = '16:9' | '8:3' | '4:3' | 'auto';
404
- export interface CameraUiSettings {
405
- streamingMode: VideoStreamingMode;
406
- streamingSource: StreamingRole | 'auto';
407
- aspectRatio: CameraAspectRatio;
408
- }
409
- export interface CameraRecordingSettings {
410
- enabled: boolean;
411
- }
412
- export interface Extension {
413
- id: string;
414
- name: string;
415
- }
416
- export interface CameraExtensions {
417
- hub?: Extension[];
418
- cameraController?: Extension;
419
- motionDetection?: Extension;
420
- audioDetection?: Extension;
421
- objectDetection?: Extension;
422
- ptz?: Extension;
423
- plugins: Extension[];
424
- }
425
- export interface BaseCamera {
426
- readonly _id: string;
427
- nativeId?: string;
428
- pluginId: string;
429
- name: string;
430
- disabled: boolean;
431
- isCloud: boolean;
432
- info: CameraInformation;
433
- type: CameraType;
434
- snapshotTTL: number;
435
- detectionZones: DetectionZone[];
436
- detectionSettings: CameraDetectionSettings;
437
- frameWorkerSettings: CameraFrameWorkerSettings;
438
- interface: CameraUiSettings;
439
- recording: CameraRecordingSettings;
440
- extensions: CameraExtensions;
441
- }
442
- export interface Camera extends BaseCamera {
443
- sources: CameraInput[];
444
- }
445
- export declare enum CameraDeviceCapability {
446
- MotionSensor = "MotionSensor",
447
- MotionDetector = "MotionDetector",
448
- AudioSensor = "AudioSensor",
449
- ObjectSensor = "ObjectSensor",
450
- ObjectDetector = "ObjectDetector",
451
- Light = "Light",
452
- Siren = "Siren",
453
- Doorbell = "Doorbell",
454
- Battery = "Battery",
455
- PTZ = "PTZ",
456
- PTZZoom = "PTZZoom",
457
- PTZHome = "PTZHome",
458
- PTZPresets = "PTZPresets",
459
- Snapshot = "Snapshot",
460
- StreamUrl = "StreamUrl",
461
- Reboot = "Reboot"
462
- }
463
- export type PTZMovementType = 'absolute' | 'relative' | 'continuous' | 'home' | 'preset' | 'stop';
464
- export interface PTZSpeed {
465
- pan?: number;
466
- tilt?: number;
467
- zoom?: number;
468
- }
469
- export interface PTZBaseCommand {
470
- type: PTZMovementType;
471
- speed?: PTZSpeed;
472
- }
473
- export interface PTZStopCommand extends PTZBaseCommand {
474
- type: 'stop';
475
- }
476
- export interface PTZHomeCommand extends PTZBaseCommand {
477
- type: 'home';
478
- }
479
- export interface PTZPresetCommand extends PTZBaseCommand {
480
- type: 'preset';
481
- preset: string;
482
- }
483
- export interface PTZMoveCommand extends PTZBaseCommand {
484
- type: 'absolute' | 'relative';
485
- pan?: number;
486
- tilt?: number;
487
- zoom?: number;
488
- }
489
- export interface PTZContinuousMoveCommand extends PTZBaseCommand {
490
- type: 'continuous';
491
- pan?: number;
492
- tilt?: number;
493
- zoom?: number;
494
- timeout?: number;
495
- }
496
- export type PTZCommand = PTZHomeCommand | PTZPresetCommand | PTZMoveCommand | PTZContinuousMoveCommand | PTZStopCommand;
497
- export interface PTZInterface {
498
- ptzCommand(command: PTZCommand): Promise<void>;
499
- }
500
- export interface SnapshotInterface {
501
- snapshot(sourceId: string, forceNew?: boolean): Promise<ArrayBuffer | undefined>;
502
- }
503
- export interface StreamingInterface {
504
- streamUrl(sourceName: string): Promise<string>;
505
- }
506
- export interface CameraDevice {
507
- readonly id: string;
508
- readonly nativeId: string | undefined;
509
- readonly pluginId: string;
510
- readonly disabled: boolean;
511
- readonly name: string;
512
- readonly type: CameraType;
513
- readonly snapshotTTL: number;
514
- readonly info: CameraInformation;
515
- readonly isCloud: boolean;
516
- readonly detectionZones: DetectionZone[];
517
- readonly detectionSettings: CameraDetectionSettings;
518
- readonly frameWorkerSettings: CameraFrameWorkerSettings;
519
- readonly hasLight: boolean;
520
- readonly hasSiren: boolean;
521
- readonly hasDoorbell: boolean;
522
- readonly hasBattery: boolean;
523
- readonly hasMotionDetector: boolean;
524
- readonly hasAudioDetector: boolean;
525
- readonly hasObjectDetector: boolean;
526
- readonly hasPtz: boolean;
527
- readonly sources: CameraDeviceSource[];
528
- readonly streamSource: CameraDeviceSource;
529
- readonly highResolutionSource: CameraDeviceSource | undefined;
530
- readonly midResolutionSource: CameraDeviceSource | undefined;
531
- readonly lowResolutionSource: CameraDeviceSource | undefined;
532
- readonly snapshotSource: CameraSource | undefined;
533
- readonly connected: boolean;
534
- readonly frameWorkerConnected: boolean;
535
- readonly onConnected: Observable<boolean>;
536
- readonly onFrameWorkerConnected: Observable<boolean>;
537
- readonly onLightSwitched: Observable<LightState>;
538
- readonly onMotionDetected: Observable<MotionState>;
539
- readonly onAudioDetected: Observable<AudioState>;
540
- readonly onObjectDetected: Observable<ObjectState>;
541
- readonly onDoorbellPressed: Observable<DoorbellState>;
542
- readonly onSirenDetected: Observable<SirenState>;
543
- readonly onBatteryChanged: Observable<BatteryState>;
544
- readonly logger: LoggerService;
545
- extend(interfaces: PTZInterface | SnapshotInterface | StreamingInterface): void;
546
- connect(): Promise<void>;
547
- disconnect(): Promise<void>;
548
- getFrames(type: 'stream', options?: ImageOptions): AsyncIterableIterator<VideoFrame>;
549
- getFrames(type: 'motion', options?: ImageOptions): AsyncIterableIterator<VideoFrame>;
550
- getValue<T extends keyof StateValues>(stateName: T): StateValues[T];
551
- updateState<T extends keyof Omit<SetValues, 'motion'>>(stateName: T, eventData: SetValues[T]): Promise<void>;
552
- updateState(stateName: 'motion', eventData: MotionSetEvent, frame?: VideoFrame): Promise<void>;
553
- onStateChange<T extends keyof StateValues>(stateName: T): Observable<{
554
- newState: StateValues[T];
555
- oldState: StateValues[T];
556
- }>;
557
- onPropertyChange<T extends keyof Camera>(property: T | T[]): Observable<{
558
- property: T;
559
- oldData: Camera[T];
560
- newData: Camera[T];
561
- }>;
562
- onCapabilitiesChange(): Observable<{
563
- oldCapabilities: CameraDeviceCapability[];
564
- newCapabilities: CameraDeviceCapability[];
565
- }>;
566
- getCapabilities(): CameraDeviceCapability[];
567
- hasCapability(capability: CameraDeviceCapability): boolean;
568
- addCapabilities(capabilities: CameraDeviceCapability[]): void;
569
- removeCapabilities(capabilities: CameraDeviceCapability[]): void;
570
- }
571
- export type SensorType = 'door' | 'window' | 'garage';
572
- export declare enum SensorState {
573
- Opened = "Opened",
574
- Closed = "Closed",
575
- Jammed = "Jammed",
576
- Unknown = "Unknown"
577
- }
578
- export interface CameraDeviceSensor {
579
- readonly id: string;
580
- readonly type: SensorType;
581
- readonly state: SensorState;
582
- onStateChange(): Observable<{
583
- newState: SensorState;
584
- oldState: SensorState;
585
- }>;
586
- open(): Promise<void>;
587
- close(): Promise<void>;
588
- }
589
- export interface DeviceManager {
590
- createCamera(cameraConfig: CameraConfig): Promise<CameraDevice>;
591
- updateCamera(cameraIdOrName: string, cameraConfig: Partial<CameraConfig>): Promise<CameraDevice>;
592
- getCamera(cameraIdOrName: string): Promise<CameraDevice | undefined>;
593
- removeCamera(cameraIdOrName: string): Promise<void>;
594
- on(event: 'cameraSelected', listener: (camera: CameraDevice, extension: CameraExtension) => void): this;
595
- on(event: 'cameraDeselected', listener: (cameraId: string, extension: CameraExtension) => void): this;
596
- once(event: 'cameraSelected', listener: (camera: CameraDevice, extension: CameraExtension) => void): this;
597
- once(event: 'cameraDeselected', listener: (cameraId: string, extension: CameraExtension) => void): this;
598
- off(event: 'cameraSelected', listener: (camera: CameraDevice, extension: CameraExtension) => void): this;
599
- off(event: 'cameraDeselected', listener: (cameraId: string, extension: CameraExtension) => void): this;
600
- removeListener(event: 'cameraSelected', listener: (camera: CameraDevice, extension: CameraExtension) => void): this;
601
- removeListener(event: 'cameraDeselected', listener: (cameraId: string, extension: CameraExtension) => void): this;
602
- removeAllListeners(event?: 'cameraSelected' | 'cameraDeselected'): this;
603
- }
604
- export interface CoreManager {
605
- connectToPlugin(pluginName: string): Promise<CuiPlugin | undefined>;
606
- getFFmpegPath(): Promise<string>;
607
- getHwaccelInfo(options: HWAccelOptions): Promise<FfmpegArgs[]>;
608
- getServerAddresses(): Promise<string[]>;
609
- getIceServers(): Promise<IceServer[]>;
610
- }
611
- export interface HWAccelOptions {
612
- targetCodec: 'h264' | 'h265';
613
- keepOnHardware?: boolean;
614
- pixelFormat?: string;
615
- scale?: {
616
- width: number;
617
- height: number;
618
- };
619
- }
620
- export interface FfmpegArgs {
621
- codec: string;
622
- hwaccel: HwAccelMethod;
623
- hwaccelArgs: string[];
624
- hwaccelFilters: string[];
625
- hwDeviceArgs: string[];
626
- supported: boolean;
627
- }
628
- export interface IceServer {
629
- urls: string[];
630
- username?: string;
631
- credential?: string;
632
- }
633
- export type PluginConfig<T = Record<string, any>> = T;
634
- export type JsonSchemaType = 'string' | 'number' | 'boolean' | 'array' | 'button' | 'submit';
635
- export interface JsonFactorySchema {
636
- type: JsonSchemaType;
637
- key: string;
638
- title: string;
639
- description: string;
640
- group?: string;
641
- }
642
- export interface JsonBaseSchmaWithoutCallbacks<T extends string | string[] | number | number[] | boolean | boolean[] = any> extends JsonFactorySchema {
643
- hidden?: boolean;
644
- required?: boolean;
645
- readonly?: boolean;
646
- placeholder?: string;
647
- defaultValue?: T;
648
- }
649
- export interface JsonBaseSchema<T extends string | string[] | number | number[] | boolean | boolean[] = any> extends JsonBaseSchmaWithoutCallbacks<T> {
650
- store?: boolean;
651
- onSet?: (newValue: any, oldValue: any) => Promise<void>;
652
- onGet?: () => Promise<any>;
653
- }
654
- export interface JsonStringSchema {
655
- type: 'string';
656
- format?: 'date-time' | 'date' | 'time' | 'email' | 'uuid' | 'ipv4' | 'ipv6' | 'password' | 'qrCode' | 'image';
657
- minLength?: number;
658
- maxLength?: number;
659
- }
660
- export interface JsonNumberSchema {
661
- type: 'number';
662
- minimum?: number;
663
- maximum?: number;
664
- step?: number;
665
- }
666
- export interface JsonBooleanSchema {
667
- type: 'boolean';
668
- }
669
- export interface JsonEnumSchema {
670
- type: 'string';
671
- enum: string[];
672
- multiple?: boolean;
673
- }
674
- export interface JsonArraySchema {
675
- type: 'array';
676
- opened?: boolean;
677
- items: Omit<JsonSchemaWithoutCallbacks, 'key'>;
678
- }
679
- export interface JsonSchemaString extends JsonBaseSchema<string>, JsonStringSchema {
680
- type: 'string';
681
- }
682
- export interface JsonSchemaStringWithoutCallbacks extends JsonBaseSchmaWithoutCallbacks<string>, JsonStringSchema {
683
- type: 'string';
684
- }
685
- export interface JsonSchemaNumber extends JsonBaseSchema<number>, JsonNumberSchema {
686
- type: 'number';
687
- }
688
- export interface JsonSchemaNumberWithoutCallbacks extends JsonBaseSchmaWithoutCallbacks<number>, JsonNumberSchema {
689
- type: 'number';
690
- }
691
- export interface JsonSchemaBoolean extends JsonBaseSchema<boolean>, JsonBooleanSchema {
692
- type: 'boolean';
693
- }
694
- export interface JsonSchemaBooleanWithoutCallbacks extends JsonBaseSchmaWithoutCallbacks<boolean>, JsonBooleanSchema {
695
- type: 'boolean';
696
- }
697
- export interface JsonSchemaEnum extends JsonBaseSchema<string | string[]>, JsonEnumSchema {
698
- type: 'string';
699
- }
700
- export interface JsonSchemaEnumWithoutCallbacks extends JsonBaseSchmaWithoutCallbacks<string | string[]>, JsonEnumSchema {
701
- type: 'string';
702
- }
703
- export interface JsonSchemaArray extends JsonBaseSchema<string[] | number[] | boolean[]>, JsonArraySchema {
704
- type: 'array';
705
- }
706
- export interface JsonSchemaArrayWithoutCallbacks extends JsonBaseSchmaWithoutCallbacks<string[] | number[] | boolean[]>, JsonArraySchema {
707
- type: 'array';
708
- }
709
- export interface JsonSchemaButton extends JsonFactorySchema {
710
- type: 'button';
711
- color?: 'success' | 'info' | 'warn' | 'danger';
712
- onSet: () => Promise<void>;
713
- }
714
- export interface JsonSchemaSubmit extends JsonFactorySchema {
715
- type: 'submit';
716
- color?: 'success' | 'info' | 'warn' | 'danger';
717
- onClick: (value: any) => Promise<FormSubmitResponse | void>;
718
- }
719
- export type JsonSchema = JsonSchemaString | JsonSchemaNumber | JsonSchemaBoolean | JsonSchemaEnum | JsonSchemaArray | JsonSchemaButton | JsonSchemaSubmit;
720
- export type JsonSchemaWithoutKey = Omit<JsonSchema, 'key'>;
721
- export type JsonSchemaWithoutCallbacks = JsonSchemaStringWithoutCallbacks | JsonSchemaNumberWithoutCallbacks | JsonSchemaBooleanWithoutCallbacks | JsonSchemaEnumWithoutCallbacks | JsonSchemaArrayWithoutCallbacks;
722
- export interface ToastMessage {
723
- type: 'info' | 'success' | 'warning' | 'error';
724
- message: string;
725
- }
726
- export interface FormSubmitSchema {
727
- config: Record<string, any>;
728
- }
729
- export interface FormSubmitResponse {
730
- toast?: ToastMessage;
731
- schema?: JsonSchemaWithoutCallbacks[];
732
- }
733
- export interface SchemaConfig {
734
- schema: JsonSchema[];
735
- config: Record<string, any>;
736
- }
737
- export interface ImageMetadata {
738
- width: number;
739
- height: number;
740
- }
741
- export interface AudioMetadata {
742
- mimeType: 'audio/mpeg' | 'audio/wav' | 'audio/ogg';
743
- }
744
- export interface MotionDetectionPluginResponse {
745
- videoData: Buffer | Uint8Array;
746
- }
747
- export interface ObjectDetectionPluginResponse {
748
- detections: Detection[];
749
- }
750
- export interface AudioDetectionPluginResponse {
751
- detected: boolean;
752
- }
753
- export declare enum CuiPluginCapability {
754
- MotionDetector = "MotionDetector",
755
- ObjectDetector = "ObjectDetector",
756
- AudioDetector = "AudioDetector"
757
- }
758
- export interface CuiPlugin {
759
- configureCameras(cameras: CameraDevice[]): Promise<void>;
760
- getCapabilities(): Promise<CuiPluginCapability[]>;
761
- interfaceSchema?(): Promise<JsonSchema[] | undefined>;
762
- detectAudio?(audioData: Buffer | Uint8Array, metadata: AudioMetadata, config: Record<string, any>): Promise<AudioDetectionPluginResponse | undefined>;
763
- detectMotion?(videoData: Buffer | Uint8Array, config: Record<string, any>): Promise<MotionDetectionPluginResponse | undefined>;
764
- detectObjects?(imageData: Buffer | Uint8Array, metadata: ImageMetadata, config: Record<string, any>): Promise<ObjectDetectionPluginResponse | undefined>;
765
- }
766
- export interface LoggerService {
767
- log: (...args: any[]) => void;
768
- error: (...args: any[]) => void;
769
- warn: (...args: any[]) => void;
770
- success: (...args: any[]) => void;
771
- debug: (...args: any[]) => void;
772
- trace: (...args: any[]) => void;
773
- attention: (...args: any[]) => void;
774
- }
775
- export interface PluginAPI {
776
- readonly coreManager: CoreManager;
777
- readonly deviceManager: DeviceManager;
778
- readonly storageController: StorageController;
779
- readonly storagePath: string;
780
- on(event: 'finishLaunching', listener: () => void): this;
781
- on(event: 'shutdown', listener: () => void): this;
782
- once(event: 'finishLaunching', listener: () => void): this;
783
- once(event: 'shutdown', listener: () => void): this;
784
- off(event: 'finishLaunching', listener: () => void): this;
785
- off(event: 'shutdown', listener: () => void): this;
786
- removeListener(event: 'finishLaunching', listener: () => void): this;
787
- removeListener(event: 'shutdown', listener: () => void): this;
788
- removeAllListeners(event?: 'shutdown' | 'finishLaunching'): this;
789
- }
790
- export interface DeviceStorage<T extends Record<string, any> = Record<string, any>> {
791
- schemas: JsonSchema[];
792
- values: T;
793
- getValue<U = string>(key: string): Promise<U> | undefined;
794
- getValue<U = string>(key: string, defaultValue: U): Promise<U>;
795
- setValue<U = string>(key: string, newValue: U): Promise<void>;
796
- submitValue(key: string, newValue: any): Promise<FormSubmitResponse | void>;
797
- hasValue(key: string): boolean;
798
- getConfig(): Promise<SchemaConfig>;
799
- setConfig(newConfig: T): Promise<void>;
800
- addSchema(schema: JsonSchema): Promise<void>;
801
- removeSchema(key: string): Promise<void>;
802
- changeSchema(key: string, newSchema: Partial<JsonSchema>): Promise<void>;
803
- getSchema(key: string): JsonSchema | undefined;
804
- hasSchema(key: string): boolean;
805
- save(): Promise<void>;
806
- }
807
- export interface StorageController {
808
- createCameraStorage<T extends Record<string, any> = Record<string, any>>(instance: any, cameraId: string, schemas?: JsonSchema[]): DeviceStorage<T>;
809
- createPluginStorage<T extends Record<string, any> = Record<string, any>>(instance: any, schemas?: JsonSchema[]): DeviceStorage<T>;
810
- getCameraStorage<T extends Record<string, any> = Record<string, any>>(cameraId: string): DeviceStorage<T> | undefined;
811
- getPluginStorage<T extends Record<string, any> = Record<string, any>>(): DeviceStorage<T> | undefined;
812
- }