@camera.ui/browser 0.0.79 → 0.0.80

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (56) hide show
  1. package/dist/bundle.js +1 -1
  2. package/dist/types/packages/client/browser/src/proxy/cameraDevice.d.ts +17 -3
  3. package/dist/types/packages/client/browser/src/proxy/deviceManager.d.ts +4 -0
  4. package/dist/types/packages/client/browser/src/socket.d.ts +2 -3
  5. package/dist/types/packages/client/browser/src/types.d.ts +0 -1
  6. package/dist/types/server/src/api/controllers/users.controller.d.ts +9 -3
  7. package/dist/types/server/src/api/database/index.d.ts +9 -2
  8. package/dist/types/server/src/api/database/types.d.ts +24 -23
  9. package/dist/types/server/src/api/go2rtc/api/streams.d.ts +2 -2
  10. package/dist/types/server/src/api/go2rtc/types.d.ts +5 -2
  11. package/dist/types/server/src/api/index.d.ts +7 -8
  12. package/dist/types/server/src/api/middlewares/pagination.middleware.d.ts +1 -1
  13. package/dist/types/server/src/api/plugins/logger.plugin.d.ts +7 -0
  14. package/dist/types/server/src/api/routes/index.d.ts +1 -2
  15. package/dist/types/server/src/api/schemas/backup.schema.d.ts +53 -155
  16. package/dist/types/server/src/api/schemas/cameras.schema.d.ts +215 -215
  17. package/dist/types/server/src/api/schemas/config.schema.d.ts +22 -22
  18. package/dist/types/server/src/api/schemas/go2rtc.schema.d.ts +66 -66
  19. package/dist/types/server/src/api/schemas/users.schema.d.ts +242 -136
  20. package/dist/types/server/src/api/services/cameras.service.d.ts +9 -7
  21. package/dist/types/server/src/api/services/users.service.d.ts +6 -2
  22. package/dist/types/server/src/api/types/index.d.ts +34 -6
  23. package/dist/types/server/src/api/websocket/nsp/status.d.ts +1 -1
  24. package/dist/types/server/src/camera/controller.d.ts +17 -10
  25. package/dist/types/server/src/camera/device.d.ts +5 -13
  26. package/dist/types/server/src/camera/index.d.ts +17 -10
  27. package/dist/types/server/src/camera/interfaces/audioDetection.d.ts +10 -0
  28. package/dist/types/server/src/camera/interfaces/camera.d.ts +19 -0
  29. package/dist/types/server/src/camera/interfaces/motionDetection.d.ts +10 -0
  30. package/dist/types/server/src/camera/interfaces/objectDetection.d.ts +10 -0
  31. package/dist/types/server/src/camera/interfaces/prebuffer.d.ts +11 -0
  32. package/dist/types/server/src/camera/interfaces/ptz.d.ts +13 -0
  33. package/dist/types/server/src/camera/streaming/webrtc-connection.d.ts +2 -1
  34. package/dist/types/server/src/camera/streaming/{streaming-session.d.ts → werift-session.d.ts} +1 -1
  35. package/dist/types/server/src/camera/types.d.ts +53 -15
  36. package/dist/types/server/src/decoder/worker.d.ts +1 -1
  37. package/dist/types/server/src/nats/index.d.ts +1 -1
  38. package/dist/types/server/src/nats/proxy/cameraDevice.d.ts +30 -34
  39. package/dist/types/server/src/nats/proxy/deviceManager.d.ts +1 -1
  40. package/dist/types/server/src/nats/proxy/pluginsManager.d.ts +1 -1
  41. package/dist/types/server/src/nats/proxy/systemManager.d.ts +1 -1
  42. package/dist/types/server/src/nats/types.d.ts +20 -45
  43. package/dist/types/server/src/nats/websocket.d.ts +1 -5
  44. package/dist/types/server/src/plugins/base.d.ts +2 -3
  45. package/dist/types/server/src/plugins/types.d.ts +22 -5
  46. package/dist/types/server/src/plugins/worker.d.ts +1 -0
  47. package/dist/types/server/src/polyglot/node/plugins/proxy/cameraDevice.d.ts +28 -6
  48. package/dist/types/server/src/polyglot/node/plugins/proxy/deviceManager.d.ts +3 -3
  49. package/dist/types/server/src/polyglot/node/plugins/proxy/pluginsManager.d.ts +3 -3
  50. package/dist/types/server/src/polyglot/node/plugins/proxy/systemManager.d.ts +3 -3
  51. package/dist/types/server/src/polyglot/node/plugins/schema.d.ts +2 -1
  52. package/dist/types/server/src/services/config/index.d.ts +29 -36
  53. package/dist/types/server/src/services/config/types.d.ts +1 -1
  54. package/dist/types/server/src/types.d.ts +4 -0
  55. package/dist/types/shared/types/index.d.ts +5 -0
  56. package/package.json +10 -10
@@ -1,5 +1,5 @@
1
- import { type CameraExtension } from '../../plugins/types.js';
2
- import type { Camera, CameraZone, DBCamera } from '../database/types.js';
1
+ import type { CameraExtension } from '../../plugins/types.js';
2
+ import type { Camera, CameraInputSettings, CameraZone, DBCamera } from '../database/types.js';
3
3
  type DeepPartial<T> = T extends object ? {
4
4
  [P in keyof T]?: DeepPartial<T[P]>;
5
5
  } : T;
@@ -12,11 +12,11 @@ export declare class CamerasService {
12
12
  private pluginsService;
13
13
  constructor();
14
14
  createCamera(cameraData: DBCamera): Promise<DBCamera>;
15
- createTransformedCamera(cameraData: DBCamera): Promise<Camera>;
15
+ createTransformedCamera(cameraData: DBCamera, cameraSources: CameraInputSettings[]): Promise<Camera>;
16
16
  createZone(cameraname: string, zoneData: CameraZone): Promise<DBCamera | undefined>;
17
17
  patchZoneByName(cameraname: string, zonename: string, zoneData: CameraZone): Promise<DBCamera | undefined>;
18
18
  removeZoneByName(cameraname: string, zonename: string): Promise<void>;
19
- createCameraSource(cameraname: string, sourceName: string, address: string): Promise<void>;
19
+ createCameraSource(cameraname: string, sourceName: string, source: string): Promise<void>;
20
20
  resetCameraSource(cameraname: string, sourceName: string): Promise<void>;
21
21
  list(): DBCamera[];
22
22
  listTransformed(): Camera[];
@@ -42,9 +42,11 @@ export declare class CamerasService {
42
42
  removeByPluginIdAndName(cameraname: string, pluginId: string): Promise<void>;
43
43
  removeAll(): Promise<void>;
44
44
  transformCamera(camera: DBCamera): Camera;
45
- cameraSourcesChanged(oldCamera: DBCamera, newCamera: DBCamera): boolean;
46
- private addCameraSources;
47
- private removeCameraSources;
45
+ createEmptySource(cameraId: string, source: CameraInputSettings): CameraInputSettings;
46
+ addCameraSources(cameraname: string, sources: CameraInputSettings[]): Promise<void>;
47
+ removeCameraSources(cameraname: string, sources: CameraInputSettings[]): Promise<void>;
48
+ private sourceExistAndEqual;
49
+ private sourceResetted;
48
50
  private generateWsUrls;
49
51
  private generateRTSPUrls;
50
52
  private generateFFmpegUrls;
@@ -1,4 +1,4 @@
1
- import type { DBUser } from '../database/types.js';
1
+ import type { DBCamviewLayout, DBUser } from '../database/types.js';
2
2
  export declare class UsersService {
3
3
  private dbs;
4
4
  constructor();
@@ -6,7 +6,11 @@ export declare class UsersService {
6
6
  findById(id: string): DBUser | undefined;
7
7
  findByName(username: string): DBUser | undefined;
8
8
  list(): DBUser[];
9
- patchUser(username: string, userData: Partial<DBUser>): Promise<DBUser | undefined>;
9
+ patchUser(username: string, userData?: Partial<DBUser>): Promise<DBUser | undefined>;
10
10
  removeByName(username: string): Promise<void>;
11
11
  removeAll(): Promise<void>;
12
+ createView(username: string, viewData: DBCamviewLayout): Promise<DBCamviewLayout>;
13
+ patchViewById(username: string, viewId: string, viewData?: Partial<DBCamviewLayout>): Promise<DBCamviewLayout | undefined>;
14
+ removeViewById(username: string, viewId: string): Promise<DBCamviewLayout[] | undefined>;
15
+ removeAllViews(username: string): Promise<DBCamviewLayout[] | undefined>;
12
16
  }
@@ -7,7 +7,7 @@ import type { RestoreBackupInput } from '../schemas/backup.schema.js';
7
7
  import type { CreateCameraInput, PatchCameraInput, PreviewCameraInput } from '../schemas/cameras.schema.js';
8
8
  import type { PatchConfigInput } from '../schemas/config.schema.js';
9
9
  import type { PatchGo2RtcConfigInput } from '../schemas/go2rtc.schema.js';
10
- import type { CreateUserInput, LoginUserInput, PatchUserInput } from '../schemas/users.schema.js';
10
+ import type { CreateUserInput, CreateViewInput, LoginUserInput, PatchUserInput, PatchViewInput } from '../schemas/users.schema.js';
11
11
  export interface BusboyFileStream extends Readable {
12
12
  truncated: boolean;
13
13
  bytesRead: number;
@@ -114,6 +114,10 @@ export interface UsersResponse {
114
114
  pagination: Pagination;
115
115
  result: DBUser[];
116
116
  }
117
+ export interface ViewsResponse {
118
+ pagination: Pagination;
119
+ result: DBCamviewLayout[];
120
+ }
117
121
  export interface CamerasResponse {
118
122
  pagination: Pagination;
119
123
  result: DBCamera[];
@@ -340,6 +344,17 @@ export type UsersPatchRequest = {
340
344
  avatar: string;
341
345
  };
342
346
  };
347
+ export type ViewsParamsRequest = {
348
+ Params: {
349
+ viewId: string;
350
+ };
351
+ };
352
+ export type ViewsInsertRequest = {
353
+ Body: CreateViewInput;
354
+ };
355
+ export type ViewsPatchRequest = {
356
+ Body: PatchViewInput;
357
+ };
343
358
  export type BackupCreateRequest = {
344
359
  Body: {
345
360
  localStorage: Partial<UiLocalStorage>;
@@ -348,6 +363,7 @@ export type BackupCreateRequest = {
348
363
  export type StreamsParamsNameRequest = {
349
364
  Params: {
350
365
  id: string;
366
+ name: string;
351
367
  };
352
368
  };
353
369
  export interface BackupInfo {
@@ -357,16 +373,28 @@ export interface BackupInfo {
357
373
  }
358
374
  export type SupportedLanguageAbbreviatons = 'de' | 'en';
359
375
  export type SupportedThemes = 'light' | 'dark';
376
+ export interface ConfigSettings {
377
+ zoom: number;
378
+ }
379
+ export interface ConsoleSettings {
380
+ zoom: number;
381
+ }
382
+ export type CamviewSettingsLayoutMode = 'dnd' | 'view';
383
+ export interface CamviewSettings {
384
+ dragDisabled?: boolean;
385
+ viewId?: string;
386
+ }
387
+ export interface UiSettingsLocalStorage {
388
+ config: ConfigSettings;
389
+ console: ConsoleSettings;
390
+ camview: CamviewSettings;
391
+ }
360
392
  export interface ThemeLocalStorage {
361
393
  theme: SupportedThemes;
362
394
  autoMode: boolean;
363
395
  }
364
- export interface CamviewLocalStorage {
365
- currentLayout: DBCamviewLayout;
366
- preferences: DBCamviewLayout[];
367
- }
368
396
  export interface UiLocalStorage {
369
- layout: CamviewLocalStorage;
397
+ ui: UiSettingsLocalStorage;
370
398
  theme: ThemeLocalStorage;
371
399
  locale: SupportedLanguageAbbreviatons;
372
400
  }
@@ -1,6 +1,6 @@
1
+ import { RUNTIME_STATUS } from '../../../services/config/types.js';
1
2
  import type { Namespace, Server, Socket } from 'socket.io';
2
3
  import type { PLUGIN_STATUS } from '../../../plugins/types.js';
3
- import { RUNTIME_STATUS } from '../../../services/config/types.js';
4
4
  import type { SocketNsp } from '../types.js';
5
5
  export declare class StatusNamespace {
6
6
  nsp: Namespace;
@@ -1,29 +1,36 @@
1
- import { CameraDevice } from './device.js';
1
+ import { BaseCameraDevice } from './index.js';
2
+ import { CameraAudioDetectionInterface } from './interfaces/audioDetection.js';
3
+ import { CameraMotionDetectionInterface } from './interfaces/motionDetection.js';
4
+ import { CameraObjectDetectionInterface } from './interfaces/objectDetection.js';
5
+ import { CameraPrebufferInterface } from './interfaces/prebuffer.js';
6
+ import { CameraPTZInterface } from './interfaces/ptz.js';
2
7
  import type { Camera } from '../api/database/types.js';
3
- import type { MotionFrame, VideoFrame } from '../decoder/types.js';
4
8
  import type { ProxyServer } from '../nats/index.js';
5
9
  import type { IceServer } from '../services/config/types.js';
6
- import type { BaseLogger, CameraSource, SetValues } from './types.js';
7
- export declare class CameraController extends CameraDevice {
8
- private proxy;
10
+ import type { BaseLogger, CameraConfigInputSettings, CameraSource, SetValues } from './types.js';
11
+ export declare class CameraController extends BaseCameraDevice {
12
+ proxy: ProxyServer;
9
13
  private motionTimeout?;
10
14
  private objectTimeout?;
11
15
  private objectTimeoutDuration;
12
16
  private doorbellTimeout?;
13
17
  private doorbellTimeoutDuration;
14
18
  private prebufferStateSubscriptions;
19
+ protected prebufferDelegate: CameraPrebufferInterface;
20
+ ptzDelegate: CameraPTZInterface;
21
+ audioDetectorDelegate: CameraAudioDetectionInterface;
22
+ motionDetectorDelegate: CameraMotionDetectionInterface;
23
+ objectDetectorDelegate: CameraObjectDetectionInterface;
15
24
  get camera(): Camera;
16
25
  get sources(): CameraSource[];
17
26
  constructor(camera: Camera, logger: BaseLogger, proxy: ProxyServer);
18
27
  connect(): Promise<void>;
19
28
  disconnect(): Promise<void>;
20
- reboot(): Promise<void>;
21
- getFrames(): AsyncIterableIterator<VideoFrame>;
22
- getMotionFrames(): AsyncIterableIterator<MotionFrame>;
23
- getPrebufferedFrames(): AsyncIterableIterator<VideoFrame>;
24
- getFfmpegPath(): Promise<string>;
25
29
  getIceServers(): Promise<IceServer[]>;
26
30
  updateState<T extends keyof SetValues>(stateName: T, eventData: SetValues[T]): Promise<void>;
31
+ addCameraSource(source: CameraConfigInputSettings): Promise<void>;
32
+ updateCameraSource(sourceId: string, source: Partial<CameraConfigInputSettings>): Promise<void>;
33
+ removeCameraSource(sourceId: string): Promise<void>;
27
34
  updateCamera(updatedCamera: Camera): void;
28
35
  cleanup(): void;
29
36
  private subscribeToCameraState;
@@ -1,26 +1,18 @@
1
1
  import { BehaviorSubject } from 'rxjs';
2
2
  import { BaseCameraDevice } from './index.js';
3
- import { StreamingSession } from './streaming/streaming-session.js';
3
+ import { WeriftSession } from './streaming/werift-session.js';
4
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
- import type { CameraDelegate, CameraPrebufferDelegate, FfmpegOptions, FrameState } from './types.js';
7
+ import type { CameraDelegates, FrameState } from './types.js';
8
8
  export declare abstract class CameraDevice extends BaseCameraDevice {
9
9
  protected readonly frameState: BehaviorSubject<FrameState>;
10
10
  protected readonly onFrame: Observable<FrameState>;
11
- private _delegate?;
12
- private _prebufferDelegate?;
13
- get delegate(): CameraDelegate | undefined;
14
- set delegate(delegate: CameraDelegate);
15
- get prebufferDelegate(): CameraPrebufferDelegate | undefined;
16
- set prebufferDelegate(delegate: CameraPrebufferDelegate);
11
+ abstract setDelegate<T extends keyof CameraDelegates>(name: T, delegate: CameraDelegates[T]): void;
12
+ createSession(sourceName: string, options?: StreamingConnectionOptions): Promise<WeriftSession>;
13
+ removeAllListeners(): void;
17
14
  abstract getFrames(prebufferDuration?: number): AsyncIterableIterator<VideoFrame>;
18
15
  abstract getMotionFrames(): AsyncIterableIterator<MotionFrame>;
19
16
  abstract getFfmpegPath(): Promise<string>;
20
- snapshot(forceNew?: boolean): Promise<ArrayBuffer>;
21
- createSession(sourceName: string, options?: StreamingConnectionOptions): Promise<StreamingSession>;
22
- streamVideo(sourceName: string, options: FfmpegOptions): Promise<StreamingSession>;
23
- recordToFile(sourceName: string, outputPath: string, duration?: number): Promise<void>;
24
- removeAllListeners(): void;
25
17
  private createMotionFrameObservable;
26
18
  }
@@ -4,7 +4,7 @@ import type { Observable, Subscription } from 'rxjs';
4
4
  import type { Camera, CameraActivitySettings, CameraFrameWorkerSettings, CameraInformation, CameraType } from '../api/database/types.js';
5
5
  import type { VideoFrame } from '../decoder/types.js';
6
6
  import type { IceServer } from '../services/config/types.js';
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';
7
+ import type { AudioSetEvent, AudioState, BaseLogger, BatterySetEvent, BatteryState, CameraAudioDetectionDelegate, CameraConfigInputSettings, CameraMotionDetectionDelegate, CameraObjectDetectionDelegate, CameraPTZDelegate, CameraPrebufferDelegate, 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 {
9
9
  private readonly subscriptions;
10
10
  private readonly additionalSubscriptions;
@@ -38,6 +38,12 @@ export declare abstract class BaseCameraDevice extends Subscribed {
38
38
  readonly onDoorbellPressed: Observable<DoorbellState>;
39
39
  readonly onSirenDetected: Observable<SirenState>;
40
40
  readonly onBatteryChanged: Observable<BatteryState>;
41
+ protected abstract prebufferDelegate: CameraPrebufferDelegate;
42
+ abstract ptzDelegate: CameraPTZDelegate;
43
+ abstract motionDetectorDelegate: CameraMotionDetectionDelegate;
44
+ abstract audioDetectorDelegate: CameraAudioDetectionDelegate;
45
+ abstract objectDetectorDelegate: CameraObjectDetectionDelegate;
46
+ protected get cameraObject(): Camera;
41
47
  get id(): string;
42
48
  get nativeId(): string | undefined;
43
49
  get pluginId(): string;
@@ -56,7 +62,6 @@ export declare abstract class BaseCameraDevice extends Subscribed {
56
62
  get hasObjectDetector(): boolean;
57
63
  get hasPtz(): boolean;
58
64
  get hasPrebuffer(): boolean;
59
- get hasIntercom(): boolean;
60
65
  get activityZones(): DetectionZone[];
61
66
  get activitySettings(): CameraActivitySettings;
62
67
  get frameWorkerSettings(): CameraFrameWorkerSettings;
@@ -66,13 +71,15 @@ export declare abstract class BaseCameraDevice extends Subscribed {
66
71
  get recordingSource(): CameraSource;
67
72
  get detectionSource(): CameraSource;
68
73
  constructor(camera: Camera, logger: BaseLogger);
74
+ getValue<T extends keyof StateValues>(stateName: T): StateValues[T];
75
+ snapshot(forceNew?: boolean): Promise<ArrayBuffer>;
76
+ onStateChange<T extends keyof StateValues>(stateName: T): Observable<{
77
+ newState: StateValues[T];
78
+ oldState: StateValues[T];
79
+ }>;
69
80
  abstract connect(): Promise<void>;
70
81
  abstract disconnect(): Promise<void>;
71
- abstract reboot(): Promise<void>;
72
- abstract snapshot(forceNew?: boolean): Promise<ArrayBuffer>;
73
82
  abstract getIceServers(): Promise<IceServer[]>;
74
- protected abstract cleanup(): void;
75
- getValue<T extends keyof StateValues>(stateName: T): StateValues[T];
76
83
  abstract updateState(stateName: 'light', eventData: LightSetEvent): Promise<void>;
77
84
  abstract updateState(stateName: 'motion', eventData: MotionSetEvent, frame?: VideoFrame): Promise<void>;
78
85
  abstract updateState(stateName: 'audio', eventData: AudioSetEvent): Promise<void>;
@@ -80,11 +87,11 @@ export declare abstract class BaseCameraDevice extends Subscribed {
80
87
  abstract updateState(stateName: 'doorbell', eventData: DoorbellSetEvent): Promise<void>;
81
88
  abstract updateState(stateName: 'siren', eventData: SirenSetEvent): Promise<void>;
82
89
  abstract updateState(stateName: 'battery', eventData: BatterySetEvent): Promise<void>;
90
+ abstract addCameraSource(source: CameraConfigInputSettings): Promise<void>;
91
+ abstract updateCameraSource(sourceId: string, source: Partial<CameraConfigInputSettings>): Promise<void>;
92
+ abstract removeCameraSource(sourceId: string): Promise<void>;
93
+ protected abstract cleanup(): void;
83
94
  protected updateStateInternal<T extends keyof SetValues>(stateName: T, eventData: SetValues[T], skipCheck?: boolean): void;
84
- onStateChange<T extends keyof StateValues>(stateName: T): Observable<{
85
- newState: StateValues[T];
86
- oldState: StateValues[T];
87
- }>;
88
95
  onPropertyChange<T extends keyof Camera>(property: T | T[]): Observable<{
89
96
  property: T;
90
97
  oldData: Camera[T];
@@ -0,0 +1,10 @@
1
+ import { CameraAudioDetectionDelegate } from '../types.js';
2
+ import type { BaseLogger } from '../types.js';
3
+ export declare class CameraAudioDetectionInterface extends CameraAudioDetectionDelegate {
4
+ delegate?: CameraAudioDetectionDelegate;
5
+ private onRequest;
6
+ private logger;
7
+ constructor(onRequest: (client: any, fn: string, args?: any[], timeout?: number) => Promise<any>, logger: BaseLogger);
8
+ detectAudio(audio: Buffer): Promise<boolean>;
9
+ private _onRequest;
10
+ }
@@ -0,0 +1,19 @@
1
+ import { CameraDelegate } from '../types.js';
2
+ import type { CameraDeviceProxy } from '../../polyglot/node/plugins/proxy/cameraDevice.js';
3
+ import type { BaseLogger } from '../types.js';
4
+ export declare class CameraInterface extends CameraDelegate {
5
+ delegate?: CameraDelegate;
6
+ private connections;
7
+ private cameraDevice;
8
+ private logger;
9
+ constructor(cameraDevice: CameraDeviceProxy, logger: BaseLogger);
10
+ snapshotRequest(requestId: string, sourceName: string): Promise<Buffer | undefined>;
11
+ startStream(requestId: string, sourceName: string, videoPort: number, audioPort: number): Promise<void>;
12
+ stopStream(requestId: string, sourceName: string): Promise<void>;
13
+ onTalkbackSdp(requestId: string, sourceName: string, sdp: string, codec: 'PCMU' | 'PCMA' | 'opus'): void;
14
+ onTalkbackRtp(requestId: string, sourceName: string, rtp: Buffer): void;
15
+ onOffer(requestId: string, sdp: string): Promise<string>;
16
+ onCandidates(requestId: string, candidate: string): Promise<void>;
17
+ private generateSdp;
18
+ private createPeerCoonection;
19
+ }
@@ -0,0 +1,10 @@
1
+ import { CameraMotionDetectionDelegate } from '../types.js';
2
+ import type { BaseLogger, Detection } from '../types.js';
3
+ export declare class CameraMotionDetectionInterface extends CameraMotionDetectionDelegate {
4
+ delegate?: CameraMotionDetectionDelegate;
5
+ private onRequest;
6
+ private logger;
7
+ constructor(onRequest: (client: any, fn: string, args?: any[], timeout?: number) => Promise<any>, logger: BaseLogger);
8
+ detectImage(image: Buffer): Promise<Detection[]>;
9
+ private _onRequest;
10
+ }
@@ -0,0 +1,10 @@
1
+ import { CameraObjectDetectionDelegate } from '../types.js';
2
+ import type { BaseLogger, Detection } from '../types.js';
3
+ export declare class CameraObjectDetectionInterface extends CameraObjectDetectionDelegate {
4
+ delegate?: CameraObjectDetectionDelegate;
5
+ private onRequest;
6
+ private logger;
7
+ constructor(onRequest: (client: any, fn: string, args?: any[], timeout?: number) => Promise<any>, logger: BaseLogger);
8
+ detectImage(image: Buffer): Promise<Detection[]>;
9
+ private _onRequest;
10
+ }
@@ -0,0 +1,11 @@
1
+ import { CameraPrebufferDelegate } from '../types.js';
2
+ import type { BaseLogger, Container, StreamInfo } from '../types.js';
3
+ export declare class CameraPrebufferInterface extends CameraPrebufferDelegate {
4
+ delegate?: CameraPrebufferDelegate;
5
+ private onRequest;
6
+ private logger;
7
+ constructor(onRequest: (client: any, fn: string, args?: Record<string, any> | any[], timeout?: number) => Promise<any>, logger: BaseLogger);
8
+ getStreamInfo(sourceName: string): Promise<StreamInfo | undefined>;
9
+ updatePrebufferState(sourceId: string, container: Container, state: boolean): Promise<void>;
10
+ private _onRequest;
11
+ }
@@ -0,0 +1,13 @@
1
+ import { CameraPTZDelegate } from '../types.js';
2
+ import type { BaseLogger } from '../types.js';
3
+ export declare class CameraPTZInterface extends CameraPTZDelegate {
4
+ delegate?: CameraPTZDelegate;
5
+ private onRequest;
6
+ private logger;
7
+ constructor(onRequest: (client: any, fn: string, args?: any[], timeout?: number) => Promise<any>, logger: BaseLogger);
8
+ moveAbsolute(pan: number, tilt: number, zoom: number): Promise<void>;
9
+ moveRelative(pan: number, tilt: number, zoom: number): Promise<void>;
10
+ moveContinuous(pan: number, tilt: number, zoom: number): Promise<void>;
11
+ stop(): Promise<void>;
12
+ private _onRequest;
13
+ }
@@ -1,5 +1,6 @@
1
- import { ReplaySubject, Subject, type Observable } from 'rxjs';
1
+ import { ReplaySubject, Subject } from 'rxjs';
2
2
  import { Subscribed } from '../../utils/subscribed.js';
3
+ import type { Observable } from 'rxjs';
3
4
  import type { RtpPacket } from 'werift';
4
5
  import type { IceServer } from '../../services/config/types.js';
5
6
  import type { CameraDevice } from '../device.js';
@@ -4,7 +4,7 @@ import { Subscribed } from '../../utils/subscribed.js';
4
4
  import type { CameraDevice } from '../device.js';
5
5
  import type { BaseLogger, FfmpegOptions, SpawnInput } from '../types.js';
6
6
  import type { WebrtcConnection } from './webrtc-connection.js';
7
- export declare class StreamingSession extends Subscribed {
7
+ export declare class WeriftSession extends Subscribed {
8
8
  readonly onCallEnded: ReplaySubject<void>;
9
9
  readonly onVideoRtp: Subject<RtpPacket>;
10
10
  readonly onAudioRtp: Subject<RtpPacket>;
@@ -1,6 +1,12 @@
1
1
  import type { Observable } from 'rxjs';
2
2
  import type { CameraInformation, CameraInput, CameraInputSettings, Point, ZoneFilter, ZoneType } from '../api/database/types.js';
3
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,11 +90,12 @@ export interface BaseCameraConfig {
94
90
  disabled?: boolean;
95
91
  info?: Partial<CameraInformation>;
96
92
  }
97
- export type CameraConfig = (BaseCameraConfig & {
98
- sources?: Omit<CameraInputSettings, '_id'>[];
99
- }) | (BaseCameraConfig & {
100
- delegate?: CameraDelegate;
101
- });
93
+ export interface CameraConfigInputSettings extends Omit<CameraInputSettings, '_id' | 'urls'> {
94
+ urls?: string[];
95
+ }
96
+ export type CameraConfig = BaseCameraConfig & {
97
+ sources: CameraConfigInputSettings[];
98
+ };
102
99
  export interface Detection {
103
100
  id?: string;
104
101
  label: ObjectClass;
@@ -185,3 +182,44 @@ export type CameraStateCallbacks = {
185
182
  export type StateValue<T extends keyof StateValues> = StateValues[T];
186
183
  export type SetValue<T extends keyof SetValues> = SetValues[T];
187
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,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;
@@ -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,6 +1,13 @@
1
1
  import type { Camera } from '../../api/database/types.js';
2
- import type { CameraDelegate, CameraPrebufferDelegate, Container, FfmpegOptions, PrebufferState, SetValues, StateValues, StreamInfo } from '../../camera/types.js';
2
+ import type { CameraAudioDetectionInterface } from '../../camera/interfaces/audioDetection.js';
3
+ import type { CameraInterface } from '../../camera/interfaces/camera.js';
4
+ import type { CameraMotionDetectionInterface } from '../../camera/interfaces/motionDetection.js';
5
+ import type { CameraObjectDetectionInterface } from '../../camera/interfaces/objectDetection.js';
6
+ import type { CameraPrebufferInterface } from '../../camera/interfaces/prebuffer.js';
7
+ import type { CameraPTZInterface } from '../../camera/interfaces/ptz.js';
8
+ import type { CameraConfigInputSettings, Container, PrebufferState, SetValues, StateValues } from '../../camera/types.js';
3
9
  import type { IceServer } from '../../services/config/types.js';
10
+ import type { MethodKeys, MethodType } from '../../types.js';
4
11
  import type { MessageQueue } from '../queue.js';
5
12
  import type { CameraDeviceProxyMethods, ProxyMessageStructure } from '../types.js';
6
13
  export declare class CameraDeviceProxy implements CameraDeviceProxyMethods {
@@ -18,45 +25,34 @@ export declare class CameraDeviceProxy implements CameraDeviceProxyMethods {
18
25
  cameraId: string;
19
26
  pluginId: string;
20
27
  }): void;
21
- reboot(data: {
22
- cameraId: string;
23
- pluginId: string;
24
- }): Promise<void>;
25
- getStreamInfo(data: {
26
- sourceName: string;
27
- cameraId: string;
28
- pluginId: string;
29
- }): Promise<StreamInfo | undefined>;
30
28
  getFfmpegPath(): string;
31
29
  getIceServers(): IceServer[];
32
- snapshot(data: {
33
- forceNew?: boolean;
30
+ updateState<T extends keyof SetValues>(data: {
31
+ stateName: T;
32
+ eventData: SetValues[T];
34
33
  cameraId: string;
35
34
  pluginId: string;
36
- }): Promise<ArrayBuffer>;
37
- streamVideo(data: {
38
- sourceName: string;
39
- options: FfmpegOptions;
35
+ }): Promise<void>;
36
+ updatePrebufferState(data: {
37
+ sourceId: string;
38
+ container: Container;
39
+ state: PrebufferState;
40
40
  cameraId: string;
41
41
  pluginId: string;
42
42
  }): Promise<void>;
43
- recordToFile(data: {
44
- sourceName: string;
45
- outputPath: string;
46
- duration?: number;
43
+ addCameraSource(data: {
44
+ source: CameraConfigInputSettings;
47
45
  cameraId: string;
48
46
  pluginId: string;
49
47
  }): Promise<void>;
50
- updateState<T extends keyof SetValues>(data: {
51
- stateName: T;
52
- eventData: SetValues[T];
48
+ updateCameraSource(data: {
49
+ id: string;
50
+ source: Partial<CameraConfigInputSettings>;
53
51
  cameraId: string;
54
52
  pluginId: string;
55
53
  }): Promise<void>;
56
- updatePrebufferState(data: {
57
- sourceId: string;
58
- container: Container;
59
- state: PrebufferState;
54
+ removeCameraSource(data: {
55
+ id: string;
60
56
  cameraId: string;
61
57
  pluginId: string;
62
58
  }): Promise<void>;
@@ -68,11 +64,11 @@ export declare class CameraDeviceProxy implements CameraDeviceProxyMethods {
68
64
  states: StateValues;
69
65
  cameraState: boolean;
70
66
  };
71
- onRequestReboot(pluginId: string, cameraId: string, ...args: Parameters<CameraDelegate['reboot']>): Promise<Buffer>;
72
- onRequestGetStreamInfo(pluginId: string, cameraId: string, ...args: Parameters<CameraPrebufferDelegate['getStreamInfo']>): Promise<StreamInfo | undefined>;
73
- onRequestSnapshotRequest(pluginId: string, cameraId: string, ...args: Parameters<CameraDelegate['snapshotRequest']>): Promise<Buffer>;
74
- onRequestPrepareStream(pluginId: string, cameraId: string, ...args: Parameters<CameraDelegate['prepareStream']>): Promise<void>;
75
- onRequestWebRTCOffer(pluginId: string, cameraId: string, ...args: Parameters<CameraDelegate['onOffer']>): Promise<string>;
76
- onRequestWebRTCIceCandidates(pluginId: string, cameraId: string, ...args: Parameters<CameraDelegate['onCandidates']>): Promise<void>;
77
- 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>;
78
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
  }