@camera.ui/browser 0.0.76 → 0.0.79

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 (54) hide show
  1. package/dist/bundle.js +1 -1
  2. package/dist/types/packages/client/browser/src/proxy/cameraDevice.d.ts +7 -5
  3. package/dist/types/packages/client/browser/src/socket.d.ts +6 -5
  4. package/dist/types/packages/client/browser/src/streaming/go2rts-session.d.ts +54 -0
  5. package/dist/types/packages/client/browser/src/types.d.ts +13 -7
  6. package/dist/types/packages/client/browser/src/utils.d.ts +12 -0
  7. package/dist/types/server/src/api/database/index.d.ts +1 -1
  8. package/dist/types/server/src/api/database/types.d.ts +11 -6
  9. package/dist/types/server/src/api/go2rtc/api/config.d.ts +3 -4
  10. package/dist/types/server/src/api/go2rtc/api/index.d.ts +1 -2
  11. package/dist/types/server/src/api/go2rtc/api/streams.d.ts +4 -5
  12. package/dist/types/server/src/api/index.d.ts +0 -1
  13. package/dist/types/server/src/api/schemas/cameras.schema.d.ts +180 -121
  14. package/dist/types/server/src/api/schemas/config.schema.d.ts +2 -2
  15. package/dist/types/server/src/api/schemas/go2rtc.schema.d.ts +18 -18
  16. package/dist/types/server/src/api/schemas/users.schema.d.ts +8 -8
  17. package/dist/types/server/src/api/services/plugins.service.d.ts +1 -0
  18. package/dist/types/server/src/api/types/index.d.ts +0 -2
  19. package/dist/types/server/src/api/utils/fetch.d.ts +2 -0
  20. package/dist/types/server/src/api/websocket/types.d.ts +1 -15
  21. package/dist/types/server/src/api.d.ts +1 -2
  22. package/dist/types/server/src/camera/controller.d.ts +8 -3
  23. package/dist/types/server/src/camera/device.d.ts +2 -3
  24. package/dist/types/server/src/camera/index.d.ts +20 -18
  25. package/dist/types/server/src/camera/polygon.d.ts +5 -2
  26. package/dist/types/server/src/camera/streaming/peer-connection.d.ts +1 -1
  27. package/dist/types/server/src/camera/types.d.ts +7 -6
  28. package/dist/types/server/src/camera/videoFrame.d.ts +10 -11
  29. package/dist/types/server/src/decoder/types.d.ts +31 -22
  30. package/dist/types/server/src/decoder/worker.d.ts +3 -3
  31. package/dist/types/server/src/nats/proxy/cameraDevice.d.ts +0 -2
  32. package/dist/types/server/src/nats/server.d.ts +10 -7
  33. package/dist/types/server/src/nats/types.d.ts +7 -8
  34. package/dist/types/server/src/nats/websocket.d.ts +8 -0
  35. package/dist/types/server/src/plugins/index.d.ts +1 -0
  36. package/dist/types/server/src/polyglot/node/plugins/api.d.ts +1 -2
  37. package/dist/types/server/src/polyglot/node/plugins/cameraStorage.d.ts +2 -2
  38. package/dist/types/server/src/polyglot/node/plugins/proxy/cameraDevice.d.ts +8 -9
  39. package/dist/types/server/src/polyglot/node/plugins/proxy/deviceManager.d.ts +3 -3
  40. package/dist/types/server/src/polyglot/node/plugins/proxy/pluginsManager.d.ts +3 -3
  41. package/dist/types/server/src/polyglot/node/plugins/proxy/systemManager.d.ts +3 -3
  42. package/dist/types/server/src/polyglot/node/plugins/schema.d.ts +8 -1
  43. package/dist/types/server/src/polyglot/node/plugins/storageController.d.ts +1 -1
  44. package/dist/types/server/src/services/config/constants.d.ts +0 -2
  45. package/dist/types/server/src/services/config/index.d.ts +1 -1
  46. package/dist/types/server/src/utils/packer.d.ts +2 -0
  47. package/dist/types/server/src/utils/pythonInstaller.d.ts +1 -1
  48. package/dist/types/server/src/utils/utils.d.ts +5 -0
  49. package/package.json +6 -8
  50. package/dist/types/packages/client/browser/src/streaming/peer-connection.d.ts +0 -24
  51. package/dist/types/packages/client/browser/src/streaming/streaming-session.d.ts +0 -25
  52. package/dist/types/packages/client/browser/src/streaming/webrtc-connection.d.ts +0 -26
  53. package/dist/types/server/src/api/utils/axios.d.ts +0 -2
  54. package/dist/types/server/src/api/websocket/nsp/streams.d.ts +0 -15
@@ -18,10 +18,10 @@ export declare const logSchema: zod.ZodObject<{
18
18
  webrtc: zod.ZodUnion<[zod.ZodLiteral<"info">, zod.ZodLiteral<"debug">, zod.ZodLiteral<"trace">, zod.ZodLiteral<"warn">, zod.ZodLiteral<"error">, zod.ZodLiteral<"fatal">]>;
19
19
  }, "strict", zod.ZodTypeAny, {
20
20
  mp4: "error" | "info" | "debug" | "warn" | "trace" | "fatal";
21
- rtsp: "error" | "info" | "debug" | "warn" | "trace" | "fatal";
22
21
  webrtc: "error" | "info" | "debug" | "warn" | "trace" | "fatal";
23
22
  mjpeg: "error" | "info" | "debug" | "warn" | "trace" | "fatal";
24
23
  hls: "error" | "info" | "debug" | "warn" | "trace" | "fatal";
24
+ rtsp: "error" | "info" | "debug" | "warn" | "trace" | "fatal";
25
25
  level: "error" | "info" | "debug" | "warn" | "trace" | "fatal";
26
26
  format: string;
27
27
  api: "error" | "info" | "debug" | "warn" | "trace" | "fatal";
@@ -34,10 +34,10 @@ export declare const logSchema: zod.ZodObject<{
34
34
  streams: "error" | "info" | "debug" | "warn" | "trace" | "fatal";
35
35
  }, {
36
36
  mp4: "error" | "info" | "debug" | "warn" | "trace" | "fatal";
37
- rtsp: "error" | "info" | "debug" | "warn" | "trace" | "fatal";
38
37
  webrtc: "error" | "info" | "debug" | "warn" | "trace" | "fatal";
39
38
  mjpeg: "error" | "info" | "debug" | "warn" | "trace" | "fatal";
40
39
  hls: "error" | "info" | "debug" | "warn" | "trace" | "fatal";
40
+ rtsp: "error" | "info" | "debug" | "warn" | "trace" | "fatal";
41
41
  api: "error" | "info" | "debug" | "warn" | "trace" | "fatal";
42
42
  exec: "error" | "info" | "debug" | "warn" | "trace" | "fatal";
43
43
  ngrok: "error" | "info" | "debug" | "warn" | "trace" | "fatal";
@@ -323,10 +323,10 @@ export declare const patchGo2RtcSchema: zod.ZodObject<{
323
323
  webrtc: zod.ZodOptional<zod.ZodUnion<[zod.ZodLiteral<"info">, zod.ZodLiteral<"debug">, zod.ZodLiteral<"trace">, zod.ZodLiteral<"warn">, zod.ZodLiteral<"error">, zod.ZodLiteral<"fatal">]>>;
324
324
  }, "strict", zod.ZodTypeAny, {
325
325
  mp4?: "error" | "info" | "debug" | "warn" | "trace" | "fatal" | undefined;
326
- rtsp?: "error" | "info" | "debug" | "warn" | "trace" | "fatal" | undefined;
327
326
  webrtc?: "error" | "info" | "debug" | "warn" | "trace" | "fatal" | undefined;
328
327
  mjpeg?: "error" | "info" | "debug" | "warn" | "trace" | "fatal" | undefined;
329
328
  hls?: "error" | "info" | "debug" | "warn" | "trace" | "fatal" | undefined;
329
+ rtsp?: "error" | "info" | "debug" | "warn" | "trace" | "fatal" | undefined;
330
330
  level?: "error" | "info" | "debug" | "warn" | "trace" | "fatal" | undefined;
331
331
  format?: string | undefined;
332
332
  api?: "error" | "info" | "debug" | "warn" | "trace" | "fatal" | undefined;
@@ -339,10 +339,10 @@ export declare const patchGo2RtcSchema: zod.ZodObject<{
339
339
  streams?: "error" | "info" | "debug" | "warn" | "trace" | "fatal" | undefined;
340
340
  }, {
341
341
  mp4?: "error" | "info" | "debug" | "warn" | "trace" | "fatal" | undefined;
342
- rtsp?: "error" | "info" | "debug" | "warn" | "trace" | "fatal" | undefined;
343
342
  webrtc?: "error" | "info" | "debug" | "warn" | "trace" | "fatal" | undefined;
344
343
  mjpeg?: "error" | "info" | "debug" | "warn" | "trace" | "fatal" | undefined;
345
344
  hls?: "error" | "info" | "debug" | "warn" | "trace" | "fatal" | undefined;
345
+ rtsp?: "error" | "info" | "debug" | "warn" | "trace" | "fatal" | undefined;
346
346
  level?: "error" | "info" | "debug" | "warn" | "trace" | "fatal" | undefined;
347
347
  format?: string | undefined;
348
348
  api?: "error" | "info" | "debug" | "warn" | "trace" | "fatal" | undefined;
@@ -542,12 +542,6 @@ export declare const patchGo2RtcSchema: zod.ZodObject<{
542
542
  command?: string | undefined;
543
543
  }>>;
544
544
  }, "strict", zod.ZodTypeAny, {
545
- rtsp: {
546
- password: string;
547
- listen: string;
548
- username: string;
549
- default_query: string;
550
- };
551
545
  webrtc: {
552
546
  listen: string;
553
547
  candidates: string[];
@@ -564,6 +558,12 @@ export declare const patchGo2RtcSchema: zod.ZodObject<{
564
558
  udp_ports: string[];
565
559
  } | undefined;
566
560
  };
561
+ rtsp: {
562
+ password: string;
563
+ listen: string;
564
+ username: string;
565
+ default_query: string;
566
+ };
567
567
  api: {
568
568
  password: string;
569
569
  listen: string;
@@ -583,10 +583,10 @@ export declare const patchGo2RtcSchema: zod.ZodObject<{
583
583
  };
584
584
  log: {
585
585
  mp4?: "error" | "info" | "debug" | "warn" | "trace" | "fatal" | undefined;
586
- rtsp?: "error" | "info" | "debug" | "warn" | "trace" | "fatal" | undefined;
587
586
  webrtc?: "error" | "info" | "debug" | "warn" | "trace" | "fatal" | undefined;
588
587
  mjpeg?: "error" | "info" | "debug" | "warn" | "trace" | "fatal" | undefined;
589
588
  hls?: "error" | "info" | "debug" | "warn" | "trace" | "fatal" | undefined;
589
+ rtsp?: "error" | "info" | "debug" | "warn" | "trace" | "fatal" | undefined;
590
590
  level?: "error" | "info" | "debug" | "warn" | "trace" | "fatal" | undefined;
591
591
  format?: string | undefined;
592
592
  api?: "error" | "info" | "debug" | "warn" | "trace" | "fatal" | undefined;
@@ -621,12 +621,6 @@ export declare const patchGo2RtcSchema: zod.ZodObject<{
621
621
  } | undefined;
622
622
  streams?: Record<string, string | string[] | null> | undefined;
623
623
  }, {
624
- rtsp?: {
625
- password?: string | undefined;
626
- listen?: string | undefined;
627
- username?: string | undefined;
628
- default_query?: string | undefined;
629
- } | undefined;
630
624
  webrtc?: {
631
625
  ice_servers: {
632
626
  urls?: string[] | undefined;
@@ -643,6 +637,12 @@ export declare const patchGo2RtcSchema: zod.ZodObject<{
643
637
  udp_ports?: string[] | undefined;
644
638
  } | undefined;
645
639
  } | undefined;
640
+ rtsp?: {
641
+ password?: string | undefined;
642
+ listen?: string | undefined;
643
+ username?: string | undefined;
644
+ default_query?: string | undefined;
645
+ } | undefined;
646
646
  api?: {
647
647
  password?: string | undefined;
648
648
  listen?: string | undefined;
@@ -681,10 +681,10 @@ export declare const patchGo2RtcSchema: zod.ZodObject<{
681
681
  }) | undefined;
682
682
  log?: {
683
683
  mp4?: "error" | "info" | "debug" | "warn" | "trace" | "fatal" | undefined;
684
- rtsp?: "error" | "info" | "debug" | "warn" | "trace" | "fatal" | undefined;
685
684
  webrtc?: "error" | "info" | "debug" | "warn" | "trace" | "fatal" | undefined;
686
685
  mjpeg?: "error" | "info" | "debug" | "warn" | "trace" | "fatal" | undefined;
687
686
  hls?: "error" | "info" | "debug" | "warn" | "trace" | "fatal" | undefined;
687
+ rtsp?: "error" | "info" | "debug" | "warn" | "trace" | "fatal" | undefined;
688
688
  level?: "error" | "info" | "debug" | "warn" | "trace" | "fatal" | undefined;
689
689
  format?: string | undefined;
690
690
  api?: "error" | "info" | "debug" | "warn" | "trace" | "fatal" | undefined;
@@ -259,7 +259,7 @@ export declare const createUserSchema: zod.ZodEffects<zod.ZodObject<{
259
259
  };
260
260
  username: string;
261
261
  passwordConfirm: string;
262
- role: "user" | "admin";
262
+ role: "admin" | "user";
263
263
  sessionTimer: number;
264
264
  rememberMe: boolean;
265
265
  oneLogin: boolean;
@@ -268,7 +268,7 @@ export declare const createUserSchema: zod.ZodEffects<zod.ZodObject<{
268
268
  password: string;
269
269
  username: string;
270
270
  passwordConfirm: string;
271
- role: "user" | "admin";
271
+ role: "admin" | "user";
272
272
  _id?: string | undefined;
273
273
  preferences?: {
274
274
  camview: {
@@ -303,7 +303,7 @@ export declare const createUserSchema: zod.ZodEffects<zod.ZodObject<{
303
303
  };
304
304
  username: string;
305
305
  passwordConfirm: string;
306
- role: "user" | "admin";
306
+ role: "admin" | "user";
307
307
  sessionTimer: number;
308
308
  rememberMe: boolean;
309
309
  oneLogin: boolean;
@@ -312,7 +312,7 @@ export declare const createUserSchema: zod.ZodEffects<zod.ZodObject<{
312
312
  password: string;
313
313
  username: string;
314
314
  passwordConfirm: string;
315
- role: "user" | "admin";
315
+ role: "admin" | "user";
316
316
  _id?: string | undefined;
317
317
  preferences?: {
318
318
  camview: {
@@ -441,7 +441,7 @@ export declare const patchUserSchema: zod.ZodEffects<zod.ZodObject<{
441
441
  } | undefined;
442
442
  upload?: MultipartFile | File | undefined;
443
443
  passwordConfirm?: string | undefined;
444
- role?: "user" | "admin" | undefined;
444
+ role?: "admin" | "user" | undefined;
445
445
  sessionTimer?: number | undefined;
446
446
  rememberMe?: boolean | undefined;
447
447
  oneLogin?: boolean | undefined;
@@ -462,7 +462,7 @@ export declare const patchUserSchema: zod.ZodEffects<zod.ZodObject<{
462
462
  } | undefined;
463
463
  upload?: MultipartFile | File | undefined;
464
464
  passwordConfirm?: string | undefined;
465
- role?: "user" | "admin" | undefined;
465
+ role?: "admin" | "user" | undefined;
466
466
  sessionTimer?: number | undefined;
467
467
  rememberMe?: boolean | undefined;
468
468
  oneLogin?: boolean | undefined;
@@ -483,7 +483,7 @@ export declare const patchUserSchema: zod.ZodEffects<zod.ZodObject<{
483
483
  } | undefined;
484
484
  upload?: MultipartFile | File | undefined;
485
485
  passwordConfirm?: string | undefined;
486
- role?: "user" | "admin" | undefined;
486
+ role?: "admin" | "user" | undefined;
487
487
  sessionTimer?: number | undefined;
488
488
  rememberMe?: boolean | undefined;
489
489
  oneLogin?: boolean | undefined;
@@ -504,7 +504,7 @@ export declare const patchUserSchema: zod.ZodEffects<zod.ZodObject<{
504
504
  } | undefined;
505
505
  upload?: MultipartFile | File | undefined;
506
506
  passwordConfirm?: string | undefined;
507
- role?: "user" | "admin" | undefined;
507
+ role?: "admin" | "user" | undefined;
508
508
  sessionTimer?: number | undefined;
509
509
  rememberMe?: boolean | undefined;
510
510
  oneLogin?: boolean | undefined;
@@ -21,4 +21,5 @@ export declare class PluginsService {
21
21
  removePluginDbById(id: string): Promise<void>;
22
22
  removeAllPluginsDb(): Promise<void>;
23
23
  removeOrphanPluginsDb(): Promise<void>;
24
+ handleDisabledPlugins(): Promise<void>;
24
25
  }
@@ -1,5 +1,3 @@
1
- /// <reference types="node" resolution-mode="require"/>
2
- /// <reference types="node" resolution-mode="require"/>
3
1
  import type { Readable } from 'node:stream';
4
2
  import type { CameraExtension, PLUGIN_STATUS, PluginContract, PluginRootSchema } from '../../plugins/types.js';
5
3
  import type { LoggingLevel } from '../../services/config/types.js';
@@ -0,0 +1,2 @@
1
+ declare const fetchWithTimeout: (url: string, options?: RequestInit) => Promise<Response>;
2
+ export default fetchWithTimeout;
@@ -1,8 +1,6 @@
1
1
  import type { Namespace } from 'socket.io';
2
- import type { WebSocket } from 'ws';
3
2
  import type { PLUGIN_STATUS } from '../../plugins/types.js';
4
- import type { VideoStreamingMode } from '../database/types.js';
5
- export type SocketNsp = '/camera.ui' | '/metrics' | '/logs' | '/status' | '/notifications' | '/streams' | '/plugins' | '/proxy' | '/frame' | '/frameWorker';
3
+ export type SocketNsp = '/camera.ui' | '/metrics' | '/logs' | '/status' | '/notifications' | '/plugins' | '/proxy' | '/frame' | '/frameWorker';
6
4
  export interface SocketNspMap {
7
5
  nsp: Namespace;
8
6
  [key: string]: any;
@@ -86,15 +84,3 @@ export interface PluginRuntime {
86
84
  name: string;
87
85
  status: PLUGIN_STATUS;
88
86
  }
89
- export interface StreamPayload {
90
- type: Exclude<VideoStreamingMode, 'webrtc' | 'webrtc/tcp'> | 'webrtc/offer' | 'webrtc/candidate';
91
- value: string;
92
- }
93
- export interface Go2RtcWs {
94
- id: string;
95
- ws?: WebSocket;
96
- connect: () => void;
97
- reconnect: () => void;
98
- close: (destroy?: boolean) => void;
99
- send: (data: StreamPayload) => void;
100
- }
@@ -1,4 +1,3 @@
1
- /// <reference types="node" resolution-mode="require"/>
2
1
  import 'reflect-metadata';
3
2
  import { EventEmitter } from 'node:events';
4
3
  import { CameraController } from './camera/controller.js';
@@ -37,7 +36,7 @@ export declare class CameraUiAPI extends EventEmitter {
37
36
  controller: CameraController;
38
37
  worker: FrameWorker;
39
38
  }[];
40
- updateCamera(camera: Camera, extensions: CameraExtensions): void;
39
+ updateCamera(camera: Camera): void;
41
40
  removeCamera(camera: Camera, extensions: CameraExtensions): Promise<void>;
42
41
  selectCamera(pluginId: string, camera: Camera, extension: CameraExtension): void;
43
42
  deselectCamera(pluginId: string, camera: Camera, extension: CameraExtension): void;
@@ -3,13 +3,16 @@ import type { Camera } from '../api/database/types.js';
3
3
  import type { MotionFrame, VideoFrame } from '../decoder/types.js';
4
4
  import type { ProxyServer } from '../nats/index.js';
5
5
  import type { IceServer } from '../services/config/types.js';
6
- import type { BaseLogger, CameraSource } from './types.js';
6
+ import type { BaseLogger, CameraSource, SetValues } from './types.js';
7
7
  export declare class CameraController extends CameraDevice {
8
8
  private proxy;
9
9
  private motionTimeout?;
10
+ private objectTimeout?;
11
+ private objectTimeoutDuration;
10
12
  private doorbellTimeout?;
11
13
  private doorbellTimeoutDuration;
12
14
  private prebufferStateSubscriptions;
15
+ get camera(): Camera;
13
16
  get sources(): CameraSource[];
14
17
  constructor(camera: Camera, logger: BaseLogger, proxy: ProxyServer);
15
18
  connect(): Promise<void>;
@@ -20,14 +23,16 @@ export declare class CameraController extends CameraDevice {
20
23
  getPrebufferedFrames(): AsyncIterableIterator<VideoFrame>;
21
24
  getFfmpegPath(): Promise<string>;
22
25
  getIceServers(): Promise<IceServer[]>;
26
+ updateState<T extends keyof SetValues>(stateName: T, eventData: SetValues[T]): Promise<void>;
23
27
  updateCamera(updatedCamera: Camera): void;
24
28
  cleanup(): void;
25
29
  private subscribeToCameraState;
26
30
  private subscribeToCameraSourcesState;
27
- private subscribeToMotionState;
28
- private subscribeToDoorbellState;
29
31
  private subscribeToCameraChanges;
30
32
  private subscribeToStateChanges;
33
+ private subscribeToMotionState;
34
+ private subscribeToObjectState;
35
+ private subscribeToDoorbellState;
31
36
  private triggerProxyEvent;
32
37
  private isCameraEvent;
33
38
  }
@@ -1,7 +1,7 @@
1
- import type { Observable } from 'rxjs';
2
1
  import { BehaviorSubject } from 'rxjs';
3
2
  import { BaseCameraDevice } from './index.js';
4
3
  import { StreamingSession } from './streaming/streaming-session.js';
4
+ import type { Observable } from 'rxjs';
5
5
  import type { MotionFrame, VideoFrame } from '../decoder/types.js';
6
6
  import type { StreamingConnectionOptions } from './streaming/peer-connection.js';
7
7
  import type { CameraDelegate, CameraPrebufferDelegate, FfmpegOptions, FrameState } from './types.js';
@@ -14,9 +14,8 @@ export declare abstract class CameraDevice extends BaseCameraDevice {
14
14
  set delegate(delegate: CameraDelegate);
15
15
  get prebufferDelegate(): CameraPrebufferDelegate | undefined;
16
16
  set prebufferDelegate(delegate: CameraPrebufferDelegate);
17
- abstract getFrames(): AsyncIterableIterator<VideoFrame>;
17
+ abstract getFrames(prebufferDuration?: number): AsyncIterableIterator<VideoFrame>;
18
18
  abstract getMotionFrames(): AsyncIterableIterator<MotionFrame>;
19
- abstract getPrebufferedFrames(): AsyncIterableIterator<VideoFrame>;
20
19
  abstract getFfmpegPath(): Promise<string>;
21
20
  snapshot(forceNew?: boolean): Promise<ArrayBuffer>;
22
21
  createSession(sourceName: string, options?: StreamingConnectionOptions): Promise<StreamingSession>;
@@ -1,8 +1,8 @@
1
- /// <reference types="node" resolution-mode="require"/>
2
1
  import { LRUCache } from 'lru-cache';
3
2
  import { BehaviorSubject } from 'rxjs';
4
3
  import type { Observable, Subscription } from 'rxjs';
5
- import type { Camera, CameraActivitySettings, CameraInformation, CameraPublicProperties, CameraType } from '../api/database/types.js';
4
+ import type { Camera, CameraActivitySettings, CameraFrameWorkerSettings, CameraInformation, CameraType } from '../api/database/types.js';
5
+ import type { VideoFrame } from '../decoder/types.js';
6
6
  import type { IceServer } from '../services/config/types.js';
7
7
  import type { AudioSetEvent, AudioState, BaseLogger, BatterySetEvent, BatteryState, CameraSource, Container, DetectionZone, DoorbellSetEvent, DoorbellState, LightSetEvent, LightState, MotionSetEvent, MotionState, ObjectSetEvent, ObjectState, PrebufferState, SetValues, Sets, SirenSetEvent, SirenState, StateValues, States } from './types.js';
8
8
  declare class Subscribed {
@@ -59,6 +59,7 @@ export declare abstract class BaseCameraDevice extends Subscribed {
59
59
  get hasIntercom(): boolean;
60
60
  get activityZones(): DetectionZone[];
61
61
  get activitySettings(): CameraActivitySettings;
62
+ get frameWorkerSettings(): CameraFrameWorkerSettings;
62
63
  get sources(): CameraSource[];
63
64
  get streamSource(): CameraSource;
64
65
  get snapshotSource(): CameraSource;
@@ -72,19 +73,20 @@ export declare abstract class BaseCameraDevice extends Subscribed {
72
73
  abstract getIceServers(): Promise<IceServer[]>;
73
74
  protected abstract cleanup(): void;
74
75
  getValue<T extends keyof StateValues>(stateName: T): StateValues[T];
75
- updateState(stateName: 'light', eventData: LightSetEvent): Promise<void>;
76
- updateState(stateName: 'motion', eventData: MotionSetEvent, frame?: Buffer): Promise<void>;
77
- updateState(stateName: 'audio', eventData: AudioSetEvent): Promise<void>;
78
- updateState(stateName: 'object', eventData: ObjectSetEvent): Promise<void>;
79
- updateState(stateName: 'doorbell', eventData: DoorbellSetEvent): Promise<void>;
80
- updateState(stateName: 'siren', eventData: SirenSetEvent): Promise<void>;
81
- updateState(stateName: 'battery', eventData: BatterySetEvent): Promise<void>;
82
- protected updateStateInternal<T extends keyof SetValues>(stateName: T, eventData: SetValues[T], skipCheck?: boolean, frame?: Buffer): Promise<void>;
76
+ abstract updateState(stateName: 'light', eventData: LightSetEvent): Promise<void>;
77
+ abstract updateState(stateName: 'motion', eventData: MotionSetEvent, frame?: VideoFrame): Promise<void>;
78
+ abstract updateState(stateName: 'audio', eventData: AudioSetEvent): Promise<void>;
79
+ abstract updateState(stateName: 'object', eventData: ObjectSetEvent): Promise<void>;
80
+ abstract updateState(stateName: 'doorbell', eventData: DoorbellSetEvent): Promise<void>;
81
+ abstract updateState(stateName: 'siren', eventData: SirenSetEvent): Promise<void>;
82
+ abstract updateState(stateName: 'battery', eventData: BatterySetEvent): Promise<void>;
83
+ protected updateStateInternal<T extends keyof SetValues>(stateName: T, eventData: SetValues[T], skipCheck?: boolean): void;
83
84
  onStateChange<T extends keyof StateValues>(stateName: T): Observable<{
84
85
  newState: StateValues[T];
85
86
  oldState: StateValues[T];
86
87
  }>;
87
- onPropertyChange<T extends keyof CameraPublicProperties>(property: T): Observable<{
88
+ onPropertyChange<T extends keyof Camera>(property: T | T[]): Observable<{
89
+ property: T;
88
90
  oldData: Camera[T];
89
91
  newData: Camera[T];
90
92
  }>;
@@ -93,13 +95,13 @@ export declare abstract class BaseCameraDevice extends Subscribed {
93
95
  changed: boolean;
94
96
  event: StateValues[T];
95
97
  };
96
- protected getAudioState(event: AudioSetEvent): AudioState;
97
- protected getMotionState(event: MotionSetEvent): MotionState;
98
- protected getObjectState(event: ObjectSetEvent): ObjectState;
99
- protected getDoorbellState(event: DoorbellSetEvent): DoorbellState;
100
- protected getLightState(event: LightSetEvent | LightState): LightState;
101
- protected getSirenState(event: SirenSetEvent): SirenState;
102
- protected getBatteryState(event: BatterySetEvent): BatteryState;
98
+ protected getAudioState(event: AudioSetEvent, ignoreLastEvet?: boolean): AudioState;
99
+ protected getMotionState(event: MotionSetEvent, ignoreLastEvet?: boolean): MotionState;
100
+ protected getObjectState(event: ObjectSetEvent, ignoreLastEvet?: boolean): ObjectState;
101
+ protected getDoorbellState(event: DoorbellSetEvent, ignoreLastEvet?: boolean): DoorbellState;
102
+ protected getLightState(event: LightSetEvent, ignoreLastEvet?: boolean): LightState;
103
+ protected getSirenState(event: SirenSetEvent, ignoreLastEvet?: boolean): SirenState;
104
+ protected getBatteryState(event: BatterySetEvent, ignoreLastEvet?: boolean): BatteryState;
103
105
  protected updateCamera(updatedCamera: Camera): void;
104
106
  protected updatePrebuffer(sourceId: string, container: Container, state: PrebufferState): Promise<void>;
105
107
  protected updateCameraSourcesState(): void;
@@ -1,3 +1,6 @@
1
+ import type { CameraActivitySettings } from '../api/database/types.js';
1
2
  import type { Detection, DetectionZone } from './types.js';
2
- export declare const areObjectDetectionsValid: (detections: Detection[], zones: DetectionZone[]) => Detection[];
3
- export declare const areMotionDetectionsValid: (detections: Detection[], zones: DetectionZone[]) => Detection[];
3
+ export declare const convertZonePointsToPixels: (zone: DetectionZone, detection: Detection) => DetectionZone;
4
+ export declare const convertBoundingBoxToPixels: (detection: Detection) => Detection;
5
+ export declare const areObjectDetectionsValid: (detections: Detection[], zones: DetectionZone[], activitySettings: CameraActivitySettings) => Detection[];
6
+ export declare const areMotionDetectionsValid: (detections: Detection[], zones: DetectionZone[], activitySettings: CameraActivitySettings) => Detection[];
@@ -27,7 +27,7 @@ export declare class WeriftPeerConnection extends Subscribed implements BasicPee
27
27
  onVideoRtp: Subject<RtpPacket>;
28
28
  onVideoRtcp: Subject<RtcpPacket>;
29
29
  onIceCandidate: Subject<RTCIceCandidate>;
30
- onConnectionState: ReplaySubject<"connected" | "disconnected" | "closed" | "failed" | "new" | "connecting">;
30
+ onConnectionState: ReplaySubject<"closed" | "failed" | "disconnected" | "new" | "connecting" | "connected">;
31
31
  returnAudioTrack: MediaStreamTrack;
32
32
  private onRequestKeyFrame;
33
33
  private cameraDevice;
@@ -1,6 +1,6 @@
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
4
  export interface BaseLogger {
5
5
  log: (...args: any[]) => void;
6
6
  error: (...args: any[]) => void;
@@ -101,7 +101,7 @@ export type CameraConfig = (BaseCameraConfig & {
101
101
  });
102
102
  export interface Detection {
103
103
  id?: string;
104
- label: ObjectClasses;
104
+ label: ObjectClass;
105
105
  confidence: number;
106
106
  boundingBox: [number, number, number, number];
107
107
  inputWidth: number;
@@ -114,12 +114,12 @@ export interface DetectionZone {
114
114
  points: Point[];
115
115
  type: ZoneType;
116
116
  filter: ZoneFilter;
117
- classes: ObjectClasses[];
117
+ classes: ObjectClass[];
118
118
  isPrivacyMask: boolean;
119
119
  }
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';
120
+ 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
121
  export interface BaseState<T extends LightState | AudioState | MotionState | ObjectState | SirenState | BatteryState | DoorbellState> {
122
- timestamp: string;
122
+ timestamp: number;
123
123
  lastEvent?: Omit<T, 'lastEvent'>;
124
124
  }
125
125
  export interface MotionSetEvent {
@@ -156,7 +156,8 @@ export type SirenState = BaseState<SirenState> & SirenSetEvent;
156
156
  export type ObjectState = BaseState<ObjectState> & ObjectSetEvent;
157
157
  export type BatteryState = BaseState<BatteryState> & BatterySetEvent;
158
158
  export interface FrameState extends MotionState {
159
- frame: Buffer;
159
+ frameData: FrameData;
160
+ metadata: FrameMetadata;
160
161
  }
161
162
  export type States = LightState | MotionState | AudioState | ObjectState | DoorbellState | SirenState | BatteryState;
162
163
  export type Sets = LightSetEvent | MotionSetEvent | AudioSetEvent | ObjectSetEvent | DoorbellSetEvent | SirenSetEvent | BatterySetEvent;
@@ -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
+ }
@@ -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,4 +1,3 @@
1
- /// <reference types="node" resolution-mode="require"/>
2
1
  import type { Camera } from '../../api/database/types.js';
3
2
  import type { CameraDelegate, CameraPrebufferDelegate, Container, FfmpegOptions, PrebufferState, SetValues, StateValues, StreamInfo } from '../../camera/types.js';
4
3
  import type { IceServer } from '../../services/config/types.js';
@@ -9,7 +8,6 @@ export declare class CameraDeviceProxy implements CameraDeviceProxyMethods {
9
8
  private configService;
10
9
  private camerasService;
11
10
  private pluginsService;
12
- private socketService;
13
11
  private messageQueue;
14
12
  constructor(messageQueue: MessageQueue);
15
13
  connect(data: {