@camera.ui/browser 0.0.47 → 0.0.49

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 (96) hide show
  1. package/dist/bundle.js +1 -1
  2. package/dist/{packages/client/node → types/packages/client/browser}/src/client.d.ts +6 -1
  3. package/dist/types/packages/client/browser/src/index.d.ts +2 -0
  4. package/dist/types/packages/client/browser/src/proxy/cameraDevice.d.ts +21 -0
  5. package/dist/{packages/client/node → types/packages/client/browser}/src/proxy/deviceManager.d.ts +3 -2
  6. package/dist/types/packages/client/browser/src/proxy/index.d.ts +4 -0
  7. package/dist/{packages → types/packages}/client/node/src/types.d.ts +1 -10
  8. package/dist/{server → types/server}/src/api/database/types.d.ts +1 -0
  9. package/dist/{server → types/server}/src/api/schemas/backup.schema.d.ts +52 -52
  10. package/dist/{server → types/server}/src/api/schemas/cameras.schema.d.ts +70 -64
  11. package/dist/{server → types/server}/src/api/types/index.d.ts +0 -1
  12. package/dist/{server/src/camera/index.d.ts → types/server/src/camera/base.d.ts} +37 -36
  13. package/dist/{server → types/server}/src/camera/streaming/browser/browser-peer-connection.d.ts +2 -1
  14. package/dist/{server → types/server}/src/camera/streaming/browser/browser-streaming-session.d.ts +2 -1
  15. package/dist/{server → types/server}/src/camera/streaming/browser/webrtc-browser-connection.d.ts +2 -1
  16. package/dist/{server → types/server}/src/camera/streaming/peer-connection.d.ts +3 -2
  17. package/dist/{server → types/server}/src/camera/streaming/streaming-session.d.ts +2 -1
  18. package/dist/{server → types/server}/src/camera/streaming/webrtc-connection.d.ts +2 -1
  19. package/dist/{server → types/server}/src/camera/types.d.ts +8 -63
  20. package/dist/types/server/src/camera/utils/subscribed.d.ts +9 -0
  21. package/dist/types/server/src/detector/types.d.ts +48 -0
  22. package/dist/{server → types/server}/src/plugins/types.d.ts +2 -8
  23. package/dist/{server → types/server}/src/proxy/types.d.ts +12 -13
  24. package/dist/{server → types/server}/src/services/config/types.d.ts +1 -1
  25. package/dist/{shared → types/shared}/types/index.d.ts +2 -0
  26. package/package.json +24 -14
  27. package/dist/packages/client/node/src/index.d.ts +0 -2
  28. package/dist/packages/client/node/src/proxy/cameraDevice/cameraDevice.browser.d.ts +0 -83
  29. package/dist/packages/client/node/src/proxy/cameraDevice/cameraDevice.mock.d.ts +0 -1
  30. package/dist/packages/client/node/src/proxy/cameraDevice/cameraDevice.node.d.ts +0 -19
  31. package/dist/packages/client/node/src/proxy/cameraDevice/index.d.ts +0 -2
  32. package/dist/packages/client/node/src/proxy/index.d.ts +0 -4
  33. package/dist/server/bin/python.d.ts +0 -26
  34. package/dist/server/src/api/database/index.d.ts +0 -25
  35. package/dist/server/src/api/go2rtc/api/application.d.ts +0 -9
  36. package/dist/server/src/api/go2rtc/api/config.d.ts +0 -9
  37. package/dist/server/src/api/go2rtc/api/index.d.ts +0 -3
  38. package/dist/server/src/api/go2rtc/api/snapshot.d.ts +0 -8
  39. package/dist/server/src/api/go2rtc/api/streams.d.ts +0 -11
  40. package/dist/server/src/api/go2rtc/index.d.ts +0 -13
  41. package/dist/server/src/api/go2rtc/queue.d.ts +0 -10
  42. package/dist/server/src/api/middlewares/socketAuth.middleware.d.ts +0 -41
  43. package/dist/server/src/api/services/auth.service.d.ts +0 -20
  44. package/dist/server/src/api/services/cameras.service.d.ts +0 -55
  45. package/dist/server/src/api/services/plugins.service.d.ts +0 -25
  46. package/dist/server/src/api/services/users.service.d.ts +0 -13
  47. package/dist/server/src/api/utils/constants.d.ts +0 -15
  48. package/dist/server/src/api/ws/index.d.ts +0 -15
  49. package/dist/server/src/api/ws/nsp/logs.d.ts +0 -11
  50. package/dist/server/src/api/ws/nsp/main.d.ts +0 -9
  51. package/dist/server/src/api/ws/nsp/metrics.d.ts +0 -33
  52. package/dist/server/src/api/ws/nsp/notifications.d.ts +0 -11
  53. package/dist/server/src/api/ws/nsp/plugins.d.ts +0 -13
  54. package/dist/server/src/api/ws/nsp/status.d.ts +0 -20
  55. package/dist/server/src/api/ws/nsp/streams.d.ts +0 -15
  56. package/dist/server/src/api.d.ts +0 -31
  57. package/dist/server/src/camera/utils/subscribed.d.ts +0 -6
  58. package/dist/server/src/go2rtc/index.d.ts +0 -26
  59. package/dist/server/src/plugins/index.d.ts +0 -29
  60. package/dist/server/src/plugins/node/api.d.ts +0 -37
  61. package/dist/server/src/plugins/node/cameraStorage.d.ts +0 -107
  62. package/dist/server/src/plugins/node/config.d.ts +0 -104
  63. package/dist/server/src/plugins/node/logger.d.ts +0 -11
  64. package/dist/server/src/plugins/node/proxy/cameraDevice.d.ts +0 -33
  65. package/dist/server/src/plugins/node/proxy/deviceManager.d.ts +0 -45
  66. package/dist/server/src/plugins/node/proxy/index.d.ts +0 -4
  67. package/dist/server/src/plugins/node/proxy/pluginsManager.d.ts +0 -36
  68. package/dist/server/src/plugins/node/proxy/queue.d.ts +0 -17
  69. package/dist/server/src/plugins/node/proxy/systemManager.d.ts +0 -34
  70. package/dist/server/src/plugins/node/schema.d.ts +0 -268
  71. package/dist/server/src/plugins/node/storageController.d.ts +0 -28
  72. package/dist/server/src/plugins/plugin.d.ts +0 -51
  73. package/dist/server/src/plugins/worker-ipc.d.ts +0 -16
  74. package/dist/server/src/plugins/worker.d.ts +0 -30
  75. package/dist/server/src/proxy/api.d.ts +0 -29
  76. package/dist/server/src/proxy/camera.d.ts +0 -98
  77. package/dist/server/src/proxy/constants.d.ts +0 -7
  78. package/dist/server/src/proxy/index.d.ts +0 -29
  79. package/dist/server/src/proxy/plugin.d.ts +0 -12
  80. package/dist/server/src/proxy/queue.d.ts +0 -16
  81. package/dist/server/src/proxy/utils/generateKeys.d.ts +0 -5
  82. package/dist/server/src/proxy/ws.d.ts +0 -12
  83. package/dist/server/src/services/config/constants.d.ts +0 -6
  84. package/dist/server/src/services/config/index.d.ts +0 -58
  85. package/dist/server/src/services/logger/index.d.ts +0 -28
  86. package/dist/shared/common/utils.d.ts +0 -6
  87. package/dist/{packages → types/packages}/client/node/src/api.d.ts +0 -0
  88. package/dist/{packages → types/packages}/client/node/src/proxy/pluginsManager.d.ts +0 -0
  89. package/dist/{packages → types/packages}/client/node/src/proxy/systemManager.d.ts +0 -0
  90. package/dist/{packages → types/packages}/client/node/src/socket.d.ts +0 -0
  91. package/dist/{server → types/server}/src/api/go2rtc/types.d.ts +0 -0
  92. package/dist/{server → types/server}/src/api/schemas/config.schema.d.ts +5 -5
  93. package/dist/{server → types/server}/src/api/schemas/go2rtc.schema.d.ts +79 -79
  94. package/dist/{server → types/server}/src/api/schemas/users.schema.d.ts +84 -84
  95. /package/dist/{server → types/server}/src/api/ws/types.d.ts +0 -0
  96. /package/dist/{server → types/server}/src/go2rtc/types.d.ts +0 -0
@@ -1,24 +1,24 @@
1
- import { Observable } from 'rxjs';
1
+ import { BehaviorSubject, Observable } from 'rxjs';
2
2
  import { BrowserStreamingSession } from './streaming/browser/browser-streaming-session';
3
3
  import { StreamingSession } from './streaming/streaming-session';
4
+ import { Subscribed } from './utils/subscribed';
4
5
  import type { Camera, CameraInformation, CameraPublicProperties, CameraType, CameraZone } from '../api/database/types';
5
- import type { ProxyServer } from '../proxy';
6
+ import type { Frame } from '../detector/types';
6
7
  import type { IceServer } from '../services/config/types';
7
- import type { AudioState, BaseLogger, BatteryState, CameraDelegate, CameraDevice, CameraPrebufferDelegate, CameraSource, DoorbellState, FfmpegOptions, LightState, MotionState, ObjectState, OnSetEvent, SirenState, StateValues, StreamingConnectionOptions } from './types';
8
- export declare class CameraController implements CameraDevice {
9
- private log;
10
- private proxy?;
11
- private cameraSubject;
12
- private cameraState;
13
- private lightState;
14
- private motionState;
15
- private audioState;
16
- private objectState;
17
- private doorbellState;
18
- private sirenState;
19
- private batteryState;
20
- private snapshotCache;
21
- onStarted: Observable<boolean>;
8
+ import type { AudioState, BaseLogger, BatteryState, CameraDelegate, CameraPrebufferDelegate, CameraSource, DoorbellState, FfmpegOptions, LightState, MotionState, ObjectState, OnSetEvent, SirenState, StateValues, StreamingConnectionOptions } from './types';
9
+ export type CameraDevice = ServerCameraDeviceBase | BrowserCameraDeviceBase;
10
+ export declare abstract class CameraDeviceBase extends Subscribed {
11
+ protected logger: BaseLogger;
12
+ protected cameraSubject: BehaviorSubject<Camera>;
13
+ protected cameraState: BehaviorSubject<boolean>;
14
+ protected lightState: BehaviorSubject<LightState>;
15
+ protected motionState: BehaviorSubject<MotionState>;
16
+ protected audioState: BehaviorSubject<AudioState>;
17
+ protected objectState: BehaviorSubject<ObjectState>;
18
+ protected doorbellState: BehaviorSubject<DoorbellState>;
19
+ protected sirenState: BehaviorSubject<SirenState>;
20
+ protected batteryState: BehaviorSubject<BatteryState>;
21
+ onConnected: Observable<boolean>;
22
22
  onLightSwitched: Observable<LightState>;
23
23
  onMotionDetected: Observable<MotionState>;
24
24
  onAudioDetected: Observable<AudioState>;
@@ -56,17 +56,15 @@ export declare class CameraController implements CameraDevice {
56
56
  set delegate(delegate: CameraDelegate);
57
57
  get prebufferDelegate(): CameraPrebufferDelegate | undefined;
58
58
  set prebufferDelegate(delegate: CameraPrebufferDelegate);
59
- constructor(camera: Camera, logger: BaseLogger, proxy?: ProxyServer);
60
- connect(): Promise<void>;
61
- disconnect(): Promise<void>;
62
- reboot(): Promise<void>;
63
- snapshot(forceNew?: boolean): Promise<ArrayBuffer>;
64
- getFfmpegPath(): Promise<string>;
65
- getIceServers(): Promise<IceServer[]>;
66
- createSession(sourceName: string, options?: StreamingConnectionOptions): Promise<StreamingSession>;
67
- createBrowserSession(sourceName: string, videoElement: HTMLVideoElement): Promise<BrowserStreamingSession>;
68
- streamVideo(sourceName: string, options: FfmpegOptions): Promise<StreamingSession>;
69
- recordToFile(sourceName: string, outputPath: string, duration?: number): Promise<void>;
59
+ constructor(camera: Camera, logger: BaseLogger);
60
+ abstract connect(): Promise<void>;
61
+ abstract disconnect(): Promise<void>;
62
+ abstract reboot(): Promise<void>;
63
+ abstract snapshot(forceNew?: boolean): Promise<ArrayBuffer>;
64
+ abstract generateFrames(): AsyncIterableIterator<Frame>;
65
+ abstract getFfmpegPath(): Promise<string>;
66
+ abstract getIceServers(): Promise<IceServer[]>;
67
+ abstract recordToFile(sourceName: string, outputPath: string, duration?: number): Promise<void>;
70
68
  getValue<T extends keyof StateValues>(stateName: T): StateValues[T];
71
69
  updateState<T extends keyof StateValues>(stateName: T, eventData: OnSetEvent<T>): Promise<void>;
72
70
  onStateChange<T extends keyof StateValues>(stateName: T): Observable<{
@@ -77,13 +75,16 @@ export declare class CameraController implements CameraDevice {
77
75
  oldData: Camera[T];
78
76
  newData: Camera[T];
79
77
  }>;
80
- updateCamera(updatedCamera: Camera): void;
81
- updateCameraState(state: boolean): void;
82
- removeCamera(): void;
83
- removeAllListeners(): void;
84
78
  private createStateObservable;
85
- private subscribeToCameraState;
86
- private subscribeToCameraChanges;
87
- private subscribeToStateChanges;
88
- private triggerProxyEvent;
79
+ protected updateCamera(updatedCamera: Camera): void;
80
+ protected updateCameraState(state: boolean): void;
81
+ protected removeAllListeners(): void;
82
+ }
83
+ export declare abstract class ServerCameraDeviceBase extends CameraDeviceBase {
84
+ createSession(sourceName: string, options?: StreamingConnectionOptions): Promise<StreamingSession>;
85
+ streamVideo(sourceName: string, options: FfmpegOptions): Promise<StreamingSession>;
86
+ recordToFile(sourceName: string, outputPath: string, duration?: number): Promise<void>;
87
+ }
88
+ export declare abstract class BrowserCameraDeviceBase extends CameraDeviceBase {
89
+ createBrowserSession(sourceName: string, videoElement: HTMLVideoElement): Promise<BrowserStreamingSession>;
89
90
  }
@@ -1,7 +1,8 @@
1
1
  import { ReplaySubject, Subject } from 'rxjs';
2
2
  import { Subscribed } from '../../utils/subscribed';
3
3
  import type { IceServer } from '../../../services/config/types';
4
- import type { BaseLogger, BasicBrowserPeerConnection, CameraDevice } from '../../types';
4
+ import type { BrowserCameraDeviceBase as CameraDevice } from '../../base';
5
+ import type { BaseLogger, BasicBrowserPeerConnection } from '../../types';
5
6
  export declare class BrowserPeerConnection extends Subscribed implements BasicBrowserPeerConnection {
6
7
  onIceCandidate: Subject<RTCIceCandidate>;
7
8
  onConnectionState: ReplaySubject<RTCPeerConnectionState>;
@@ -1,6 +1,7 @@
1
1
  import { Observable, ReplaySubject } from 'rxjs';
2
2
  import { Subscribed } from '../../utils/subscribed';
3
- import type { BaseLogger, CameraDevice } from '../../types';
3
+ import type { BrowserCameraDeviceBase as CameraDevice } from '../../base';
4
+ import type { BaseLogger } from '../../types';
4
5
  import type { WebrtcBrowserConnection } from './webrtc-browser-connection';
5
6
  export declare class BrowserStreamingSession extends Subscribed {
6
7
  readonly onCallAnswered: ReplaySubject<void>;
@@ -2,7 +2,8 @@ import { ReplaySubject, type Observable } from 'rxjs';
2
2
  import { Subscribed } from '../../utils/subscribed';
3
3
  import { BrowserPeerConnection } from './browser-peer-connection';
4
4
  import type { IceServer } from '../../../services/config/types';
5
- import type { BaseLogger, CameraDevice } from '../../types';
5
+ import type { BrowserCameraDeviceBase as CameraDevice } from '../../base';
6
+ import type { BaseLogger } from '../../types';
6
7
  export declare class WebrtcBrowserConnection extends Subscribed {
7
8
  readonly onCallAnswered: ReplaySubject<string>;
8
9
  readonly onCallEnded: ReplaySubject<void>;
@@ -3,14 +3,15 @@ import { MediaStreamTrack, RTCSessionDescription } from 'werift';
3
3
  import { Subscribed } from '../utils/subscribed';
4
4
  import type { RTCIceCandidate, RtcpPacket, RtpPacket } from 'werift';
5
5
  import type { IceServer } from '../../services/config/types';
6
- import type { BaseLogger, BasicPeerConnection, CameraDevice } from '../types';
6
+ import type { ServerCameraDeviceBase as CameraDevice } from '../base';
7
+ import type { BaseLogger, BasicPeerConnection } from '../types';
7
8
  export declare class WeriftPeerConnection extends Subscribed implements BasicPeerConnection {
8
9
  onAudioRtp: Subject<RtpPacket>;
9
10
  onAudioRtcp: Subject<RtcpPacket>;
10
11
  onVideoRtp: Subject<RtpPacket>;
11
12
  onVideoRtcp: Subject<RtcpPacket>;
12
13
  onIceCandidate: Subject<RTCIceCandidate>;
13
- onConnectionState: ReplaySubject<"closed" | "connected" | "connecting" | "disconnected" | "failed" | "new">;
14
+ onConnectionState: ReplaySubject<"closed" | "failed" | "disconnected" | "new" | "connecting" | "connected">;
14
15
  returnAudioTrack: MediaStreamTrack;
15
16
  private onRequestKeyFrame;
16
17
  private cameraDevice;
@@ -1,7 +1,8 @@
1
1
  import { ReplaySubject, Subject } from 'rxjs';
2
2
  import { RtpPacket } from 'werift';
3
3
  import { Subscribed } from '../utils/subscribed';
4
- import type { BaseLogger, CameraDevice, FfmpegOptions, SpawnInput } from '../types';
4
+ import type { ServerCameraDeviceBase as CameraDevice } from '../base';
5
+ import type { BaseLogger, FfmpegOptions, SpawnInput } from '../types';
5
6
  import type { WebrtcConnection } from './webrtc-connection';
6
7
  export declare class StreamingSession extends Subscribed {
7
8
  readonly onCallEnded: ReplaySubject<void>;
@@ -2,7 +2,8 @@ import { ReplaySubject, Subject, type Observable } from 'rxjs';
2
2
  import { Subscribed } from '../utils/subscribed';
3
3
  import type { RtpPacket } from 'werift';
4
4
  import type { IceServer } from '../../services/config/types';
5
- import type { BaseLogger, CameraDevice, StreamingConnectionOptions } from '../types';
5
+ import type { ServerCameraDeviceBase as CameraDevice } from '../base';
6
+ import type { BaseLogger, StreamingConnectionOptions } from '../types';
6
7
  export declare class WebrtcConnection extends Subscribed {
7
8
  readonly onCameraConnected: ReplaySubject<void>;
8
9
  readonly onCallAnswered: ReplaySubject<string>;
@@ -1,11 +1,7 @@
1
- /// <reference types="pouchdb-core" />
2
1
  /// <reference types="node" />
3
2
  import type { Observable, Subject } from 'rxjs';
4
3
  import type { ConnectionState, RTCSessionDescription, RTCIceCandidate as WeriftRTCICECandidate } from 'werift';
5
- import type { Camera, CameraInformation, CameraInput, CameraInputSettings, CameraPublicProperties, CameraType, CameraZone } from '../api/database/types';
6
- import type { IceServer } from '../services/config/types';
7
- import type { BrowserStreamingSession } from './streaming/browser/browser-streaming-session';
8
- import type { StreamingSession } from './streaming/streaming-session';
4
+ import type { CameraInformation, CameraInput, CameraInputSettings } from '../api/database/types';
9
5
  export type SpawnInput = string | number;
10
6
  export type PrebufferType = 'recording' | 'stream';
11
7
  export interface CameraSource extends CameraInput {
@@ -54,63 +50,6 @@ export interface BasicBrowserPeerConnection {
54
50
  onConnectionState: Observable<RTCPeerConnectionState>;
55
51
  close(): void;
56
52
  }
57
- export interface CameraDevice {
58
- id: string;
59
- pluginId: string;
60
- nativeId?: string;
61
- state: boolean;
62
- disabled: boolean;
63
- name: string;
64
- type: CameraType;
65
- info: CameraInformation;
66
- sources: CameraSource[];
67
- motionZones: CameraZone[];
68
- objectZones: CameraZone[];
69
- isCloud: boolean;
70
- hasLight: boolean;
71
- hasSiren: boolean;
72
- hasBinarySensor: boolean;
73
- hasBattery: boolean;
74
- hasMotionDetector: boolean;
75
- hasAudioDetector: boolean;
76
- hasObjectDetector: boolean;
77
- hasPtz: boolean;
78
- onStarted: Observable<boolean>;
79
- onLightSwitched: Observable<LightState>;
80
- onMotionDetected: Observable<MotionState>;
81
- onAudioDetected: Observable<AudioState>;
82
- onObjectDetected: Observable<ObjectState>;
83
- onDoorbellPressed: Observable<DoorbellState>;
84
- onSirenDetected: Observable<SirenState>;
85
- onBatteryChanged: Observable<BatteryState>;
86
- streamSource: CameraSource;
87
- snapshotSource: CameraSource;
88
- recordingSource: CameraSource;
89
- detectionSource: CameraSource;
90
- delegate?: CameraDelegate;
91
- prebufferDelegate?: CameraPrebufferDelegate;
92
- connect(): Promise<void>;
93
- disconnect(): Promise<void>;
94
- reboot(): Promise<void>;
95
- getFfmpegPath(): Promise<string>;
96
- getIceServers(): Promise<IceServer[]>;
97
- snapshot(forceNew?: boolean): Promise<ArrayBuffer>;
98
- createSession(sourceName: string, options?: StreamingConnectionOptions): Promise<StreamingSession>;
99
- createBrowserSession(sourceName: string, videoElement: HTMLVideoElement): Promise<BrowserStreamingSession>;
100
- streamVideo(sourceName: string, options: FfmpegOptions): Promise<StreamingSession>;
101
- recordToFile(sourceName: string, outputPath: string, duration?: number): Promise<void>;
102
- getValue<T extends keyof StateValues>(stateName: T): StateValue<T>;
103
- updateState<T extends keyof StateValues>(stateName: T, eventData: OnSetEvent<T>): Promise<void>;
104
- onStateChange<T extends keyof StateValues>(stateName: T): Observable<{
105
- newState: StateValues[T];
106
- oldState: StateValues[T];
107
- }>;
108
- onPropertyChange<T extends keyof CameraPublicProperties>(property: T): Observable<{
109
- oldData: Camera[T];
110
- newData: Camera[T];
111
- }>;
112
- removeAllListeners(): void;
113
- }
114
53
  export interface CameraDelegate {
115
54
  snapshotRequest(requestId: string): Promise<Buffer>;
116
55
  prepareStream(requestId: string): Promise<void>;
@@ -181,15 +120,21 @@ export interface BaseState {
181
120
  timestamp: number;
182
121
  lastTriggered: number;
183
122
  }
123
+ export interface Detections {
124
+ id?: string;
125
+ label?: string;
126
+ boundingBox: [number, number, number, number];
127
+ }
184
128
  export interface MotionSetEvent {
185
129
  state: boolean;
130
+ detections: Detections[];
186
131
  }
187
132
  export interface AudioSetEvent {
188
133
  state: boolean;
189
134
  }
190
135
  export interface ObjectSetEvent {
191
136
  state: boolean;
192
- detections: string[];
137
+ detections: Detections[];
193
138
  }
194
139
  export interface LightSetEvent {
195
140
  state: boolean;
@@ -0,0 +1,9 @@
1
+ import { Subscription } from 'rxjs';
2
+ export declare class Subscribed {
3
+ private readonly subscriptions;
4
+ private readonly additionalSubscriptions;
5
+ protected addSubscriptions(...subscriptions: Subscription[]): void;
6
+ protected addAdditionalSubscriptions(...subscriptions: Subscription[]): void;
7
+ protected unsubscribe(): void;
8
+ protected unsubscribeAdditional(): void;
9
+ }
@@ -0,0 +1,48 @@
1
+ /// <reference types="node" />
2
+ /// <reference types="node" />
3
+ /// <reference types="node" />
4
+ import type { ChildProcess } from 'child_process';
5
+ import type { Server } from 'net';
6
+ export interface FrameMetadata {
7
+ format: string;
8
+ frameSize: number;
9
+ width: number;
10
+ height: number;
11
+ }
12
+ export interface Frame {
13
+ metadata: FrameMetadata;
14
+ data: Buffer;
15
+ }
16
+ export interface VideoSession {
17
+ isActive(): boolean;
18
+ kill: (reason?: string) => void;
19
+ server: Server;
20
+ cp: ChildProcess;
21
+ }
22
+ export interface BaseFrameWorkerConfig {
23
+ cameraId: string;
24
+ cameraName: string;
25
+ ffmpegPath: string;
26
+ logLevel?: string;
27
+ disableTimestamps?: boolean;
28
+ }
29
+ export type WorkerMessage = 'ready' | 'getCameraSource';
30
+ export type MainMessage = 'getMetadata' | 'startWorker' | 'stopWorker' | 'startVideoSession' | 'stopVideoSession' | 'setCameraName';
31
+ export interface MainToWorkerMessage {
32
+ id: string;
33
+ message: MainMessage;
34
+ data: Record<string, any>;
35
+ }
36
+ export interface WorkerToMainResponse {
37
+ id: string;
38
+ response: any;
39
+ }
40
+ export interface WorkerToMainMessage {
41
+ id: string;
42
+ message: WorkerMessage;
43
+ data: Record<string, any>;
44
+ }
45
+ export interface MainToWorkerResponse {
46
+ id: string;
47
+ response: any;
48
+ }
@@ -1,5 +1,5 @@
1
1
  import type { Camera } from '../api/database/types';
2
- import type { CameraDevice } from '../camera/types';
2
+ import type { CameraDevice } from '../camera/base';
3
3
  export interface SchemaConfig {
4
4
  rootSchema: PluginRootSchema;
5
5
  config: Record<string, any>;
@@ -21,7 +21,6 @@ type ExtensionOrSupport = {
21
21
  supportAdditionalCameras?: boolean;
22
22
  };
23
23
  export interface PluginContractBase {
24
- pluginName: string;
25
24
  builtIns?: Exclude<CameraExtension, 'hub'>[];
26
25
  dependencies?: string[];
27
26
  pythonVersion?: string;
@@ -46,13 +45,8 @@ export interface PluginStorage {
46
45
  storagePath: string;
47
46
  configFile: string;
48
47
  }
49
- export interface ProxyInfo {
50
- routerAddress: string;
51
- pubAddress: string;
52
- publicKey: string;
53
- }
54
48
  export interface ProcessLoadMessage {
55
- proxyInfo: ProxyInfo;
49
+ publicKey: string;
56
50
  cameras: Camera[];
57
51
  pluginId: string;
58
52
  storage: PluginStorage;
@@ -1,5 +1,7 @@
1
1
  import type { Camera } from '../api/database/types';
2
- import type { CameraConfig, CameraDevice, FfmpegOptions, OnSetEvent, PrebufferType, StateValues, StreamInfo } from '../camera/types';
2
+ import type { BrowserCameraDeviceBase, CameraDevice, ServerCameraDeviceBase } from '../camera/base';
3
+ import type { CameraConfig, FfmpegOptions, OnSetEvent, PrebufferType, StateValues, StreamInfo } from '../camera/types';
4
+ import type { FrameMetadata } from '../detector/types';
3
5
  import type { CameraExtension } from '../plugins/types';
4
6
  import type { IceServer } from '../services/config/types';
5
7
  export type MethodKeys<T> = {
@@ -74,23 +76,15 @@ export interface DeviceManagerProxyEvents {
74
76
  camera: Camera;
75
77
  extension: CameraExtension;
76
78
  };
77
- cameraAdded: {
78
- camera: Camera;
79
- };
80
- cameraRemoved: {
81
- camera: Camera;
82
- };
83
79
  cameraUpdated: {
84
80
  camera: Camera;
85
81
  };
86
82
  }
87
- export type DeviceManagerProxyEventCallbacks = {
88
- cameraSelected: (camera: CameraDevice, extension: CameraExtension) => void;
83
+ export interface DeviceManagerProxyEventCallbacks {
84
+ cameraSelected: ((camera: ServerCameraDeviceBase, extension: CameraExtension) => void) | ((camera: BrowserCameraDeviceBase, extension: CameraExtension) => void);
89
85
  cameraDeselected: (cameraId: string, extension: CameraExtension) => void;
90
- cameraAdded: (camera: CameraDevice) => void;
91
- cameraRemoved: (cameraId: string) => void;
92
- cameraUpdated: (cameraId: string, camera: CameraDevice) => void;
93
- };
86
+ cameraUpdated: ((cameraId: string, camera: ServerCameraDeviceBase) => void) | ((cameraId: string, camera: BrowserCameraDeviceBase) => void);
87
+ }
94
88
  export interface DeviceManagerProxyGenericEvent<K extends keyof DeviceManagerProxyEvents> {
95
89
  type: K;
96
90
  data: DeviceManagerProxyEvents[K];
@@ -181,6 +175,11 @@ export interface CameraDeviceProxyMethods {
181
175
  pluginId?: string;
182
176
  ws?: boolean;
183
177
  }): Promise<StreamInfo | undefined>;
178
+ getFrameMetadata(data: {
179
+ cameraId: string;
180
+ pluginId?: string;
181
+ ws?: boolean;
182
+ }): Promise<FrameMetadata | undefined>;
184
183
  getFffmpegPath(data: {
185
184
  cameraId: string;
186
185
  pluginId?: string;
@@ -32,7 +32,7 @@ export interface IConfig {
32
32
  }
33
33
  export type LoggingLevel = 'info' | 'debug' | 'warn' | 'error' | 'trace';
34
34
  export interface Logger {
35
- level?: LoggingLevel;
35
+ level: LoggingLevel;
36
36
  disableTimestamps?: boolean;
37
37
  }
38
38
  export interface Mqtt {
@@ -1,9 +1,11 @@
1
1
  export * from '../../server/src/api/database/types';
2
2
  export * from '../../server/src/api/types';
3
3
  export * from '../../server/src/api/ws/types';
4
+ export * from '../../server/src/camera/base';
4
5
  export * from '../../server/src/camera/streaming/browser/browser-streaming-session';
5
6
  export * from '../../server/src/camera/streaming/browser/webrtc-browser-connection';
6
7
  export * from '../../server/src/camera/types';
8
+ export * from '../../server/src/detector/types';
7
9
  export * from '../../server/src/go2rtc/types';
8
10
  export * from '../../server/src/plugins/types';
9
11
  export * from '../../server/src/proxy/types';
package/package.json CHANGED
@@ -1,47 +1,57 @@
1
1
  {
2
2
  "name": "@camera.ui/browser",
3
- "version": "0.0.47",
3
+ "version": "0.0.49",
4
4
  "description": "camera.ui browser client",
5
5
  "author": "seydx (https://github.com/seydx/camera.ui)",
6
- "main": "./dist/bundle.js",
7
6
  "module": "./dist/bundle.js",
8
- "types": "./dist/packages/client/node/src/index.d.ts",
7
+ "types": "./dist/types/packages/client/browser/src/index.d.ts",
9
8
  "type": "commonjs",
10
9
  "exports": {
11
10
  ".": {
12
- "default": "./dist/bundle.js",
13
11
  "import": "./dist/bundle.js",
14
- "types": "./dist/packages/client/node/src/index.d.ts"
12
+ "types": "./dist/types/packages/client/browser/src/index.d.ts"
15
13
  }
16
14
  },
17
15
  "scripts": {
18
- "build": "rimraf dist && tsc && webpack --config webpack.config.ts",
16
+ "build:js": "webpack --mode production",
17
+ "build:types": "tsc --project tsconfig.json",
18
+ "build": "rimraf dist && npm run build:js && npm run build:types",
19
+ "format": "prettier --write 'src/' --ignore-unknown --no-error-on-unmatched-pattern",
20
+ "lint": "eslint --fix --ext .js,.ts .",
19
21
  "update": "updates --update ./",
20
22
  "install-updates": "npm i --save",
21
- "prepublishOnly": "npm run build"
23
+ "prepublishOnly": "npm i --package-lock-only && npm run lint && npm run format && npm run build"
22
24
  },
23
25
  "dependencies": {
26
+ "axios": "^1.6.8",
27
+ "lodash.clonedeep": "^4.5.0",
28
+ "lodash.isequal": "^4.5.0",
24
29
  "rxjs": "^7.8.1",
25
30
  "socket.io-client": "^4.7.5"
26
31
  },
27
32
  "devDependencies": {
33
+ "@rushstack/eslint-patch": "^1.10.2",
28
34
  "@swc/register": "^0.1.10",
35
+ "@types/webrtc": "^0.0.43",
36
+ "@typescript-eslint/eslint-plugin": "^7.8.0",
37
+ "@typescript-eslint/parser": "^7.8.0",
29
38
  "bufferutil": "^4.0.8",
39
+ "eslint": "^8.57.0",
40
+ "eslint-config-prettier": "^9.1.0",
41
+ "eslint-plugin-prettier": "^5.1.3",
42
+ "null-loader": "^4.0.1",
43
+ "prettier": "^3.2.5",
30
44
  "rimraf": "^5.0.5",
31
45
  "ts-loader": "^9.5.1",
32
- "typescript": "^5.4.2",
33
- "updates": "^16.0.0",
46
+ "typescript": "^5.4.5",
47
+ "updates": "^16.0.1",
34
48
  "utf-8-validate": "^6.0.3",
35
- "webpack": "^5.90.3",
49
+ "webpack": "^5.91.0",
36
50
  "webpack-cli": "^5.1.4"
37
51
  },
38
52
  "bugs": {
39
53
  "url": "https://github.com/seydx/camera.ui/issues"
40
54
  },
41
- "engines": {
42
- "camera.ui": ">=3.0.0-alpha.0",
43
- "node": ">=18.12.0"
44
- },
45
55
  "homepage": "https://github.com/seydx/camera.ui#readme",
46
56
  "keywords": [
47
57
  "camera.ui",
@@ -1,2 +0,0 @@
1
- export * from './client';
2
- export * from './types';
@@ -1,83 +0,0 @@
1
- import { Observable } from 'rxjs';
2
- import { BrowserStreamingSession } from '../../../../../../shared/types';
3
- import type { AudioState, BaseLogger, BatteryState, Camera, CameraDelegate, CameraDevice, CameraInformation, CameraPrebufferDelegate, CameraPublicProperties, CameraSource, CameraType, CameraZone, DoorbellState, FfmpegOptions, IceServer, LightState, MotionState, ObjectState, OnSetEvent, SirenState, StateValue, StateValues } from '../../../../../../shared/types';
4
- import type { SocketService } from '../../socket';
5
- export declare class CameraDeviceClient implements CameraDevice {
6
- private log;
7
- private socketService;
8
- private cameraSubject;
9
- private cameraState;
10
- private lightState;
11
- private motionState;
12
- private audioState;
13
- private objectState;
14
- private doorbellState;
15
- private sirenState;
16
- private batteryState;
17
- onStarted: Observable<boolean>;
18
- onLightSwitched: Observable<LightState>;
19
- onMotionDetected: Observable<MotionState>;
20
- onAudioDetected: Observable<AudioState>;
21
- onObjectDetected: Observable<ObjectState>;
22
- onDoorbellPressed: Observable<DoorbellState>;
23
- onSirenDetected: Observable<SirenState>;
24
- onBatteryChanged: Observable<BatteryState>;
25
- private _delegate?;
26
- private _prebufferDelegate?;
27
- get id(): string;
28
- get nativeId(): string | undefined;
29
- get pluginId(): string;
30
- get state(): boolean;
31
- get disabled(): boolean;
32
- get name(): string;
33
- get type(): CameraType;
34
- get info(): CameraInformation;
35
- get isCloud(): boolean;
36
- get hasLight(): boolean;
37
- get hasSiren(): boolean;
38
- get hasBinarySensor(): boolean;
39
- get hasBattery(): boolean;
40
- get hasMotionDetector(): boolean;
41
- get hasAudioDetector(): boolean;
42
- get hasObjectDetector(): boolean;
43
- get hasPtz(): boolean;
44
- get motionZones(): CameraZone[];
45
- get objectZones(): CameraZone[];
46
- get sources(): CameraSource[];
47
- get streamSource(): CameraSource;
48
- get snapshotSource(): CameraSource;
49
- get recordingSource(): CameraSource;
50
- get detectionSource(): CameraSource;
51
- get delegate(): CameraDelegate | undefined;
52
- set delegate(delegate: CameraDelegate);
53
- get prebufferDelegate(): CameraPrebufferDelegate | undefined;
54
- set prebufferDelegate(delegate: CameraPrebufferDelegate);
55
- constructor(camera: Camera, socketService: SocketService, logger: BaseLogger);
56
- connect(): Promise<void>;
57
- disconnect(): Promise<void>;
58
- reboot(): Promise<void>;
59
- snapshot(forceNew?: boolean): Promise<ArrayBuffer>;
60
- getFfmpegPath(): Promise<string>;
61
- getIceServers(): Promise<IceServer[]>;
62
- createSession(): Promise<any>;
63
- createBrowserSession(sourceName: string, videoElement: HTMLVideoElement): Promise<BrowserStreamingSession>;
64
- streamVideo(sourceName: string, options: FfmpegOptions): Promise<any>;
65
- recordToFile(sourceName: string, outputPath: string, duration?: number): Promise<void>;
66
- getValue<T extends keyof StateValues>(stateName: T): StateValue<T>;
67
- updateState<T extends keyof StateValues>(stateName: T, eventData: OnSetEvent<T>, isRemote?: boolean): Promise<void>;
68
- onStateChange<T extends keyof StateValues>(stateName: T): Observable<{
69
- newState: StateValues[T];
70
- oldState: StateValues[T];
71
- }>;
72
- onPropertyChange<T extends keyof CameraPublicProperties>(property: T): Observable<{
73
- oldData: Camera[T];
74
- newData: Camera[T];
75
- }>;
76
- removeAllListeners(): void;
77
- refreshStates(): Promise<void>;
78
- private updateCamera;
79
- updateCameraState(state: boolean): void;
80
- private unsubscribe;
81
- private createStateObservable;
82
- private listenToChanges;
83
- }
@@ -1,19 +0,0 @@
1
- import { CameraController } from '../../../../../../server/src/camera';
2
- import type { BaseLogger, Camera, CameraSource, IceServer, OnSetEvent, StateValues } from '../../../../../../shared/types';
3
- import type { SocketService } from '../../socket';
4
- export declare class CameraDeviceClient extends CameraController {
5
- private socketService;
6
- private logger;
7
- get sources(): CameraSource[];
8
- constructor(camera: Camera, socketService: SocketService, logger: BaseLogger);
9
- connect(): Promise<void>;
10
- disconnect(): Promise<void>;
11
- reboot(): Promise<void>;
12
- getFfmpegPath(): Promise<string>;
13
- getIceServers(): Promise<IceServer[]>;
14
- snapshot(forceNew?: boolean | undefined): Promise<ArrayBuffer>;
15
- updateState<T extends keyof StateValues>(stateName: T, eventData: OnSetEvent<T>): Promise<void>;
16
- refreshStates(): Promise<void>;
17
- private close;
18
- private listenToChanges;
19
- }
@@ -1,2 +0,0 @@
1
- declare let CameraDeviceImplementation: any;
2
- export default CameraDeviceImplementation;
@@ -1,4 +0,0 @@
1
- export * from './cameraDevice';
2
- export * from './deviceManager';
3
- export * from './pluginsManager';
4
- export * from './systemManager';