@camera.ui/browser 0.0.92 → 0.0.93

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.
@@ -1,4 +1,4 @@
1
- import type { CoreManager as CoreManagerProxyMethods, IceServer } from '../../../../../shared/types/index.js';
1
+ import type { CoreManagerProxyMethods, IceServer } from '../../../../../shared/types/index.js';
2
2
  import type { SocketService } from '../socket.js';
3
3
  import type { BaseLogger } from '../types.js';
4
4
  export declare class CoreManager implements CoreManagerProxyMethods {
@@ -1,5 +1,5 @@
1
+ import type { AuthConfig } from '@camera.ui/common';
1
2
  import type { Readable } from 'node:stream';
2
- import type { AuthConfig } from '../../decoder/types.js';
3
3
  import type { CameraExtension, PLUGIN_STATUS, PluginContract, RootSchema } from '../../plugins/types.js';
4
4
  import type { LoggingLevel } from '../../services/config/types.js';
5
5
  import type { CameraExtensions, CameraZone, DBCamera, DBCamviewLayout, DBRoles, DBUser } from '../database/types.js';
@@ -1,9 +1,8 @@
1
1
  import { CameraDevice, CameraPrebufferInterface, CameraPTZInterface } from '@camera.ui/plugineer';
2
2
  import type { Logger } from '@camera.ui/common/logger';
3
3
  import type { Camera } from '../api/database/types.js';
4
- import type { MotionFrame, VideoFrame } from '../decoder/types.js';
5
4
  import type { ProxyServer } from '../nats/index.js';
6
- import type { CameraConfigInputSettings, CameraDelegate, CameraSource, SetValues } from './types.js';
5
+ import type { CameraConfigInputSettings, CameraDelegate, CameraSource, MotionFrame, SetValues, VideoFrame } from './types.js';
7
6
  export declare class CameraController extends CameraDevice {
8
7
  proxy: ProxyServer;
9
8
  private motionTimeout?;
@@ -1,6 +1,8 @@
1
- import type { CameraInterface, CameraPrebufferInterface, CameraPTZInterface } from '@camera.ui/plugineer';
2
- import type { CameraInformation, CameraInput, CameraInputSettings, Point, ZoneFilter, ZoneType } from '../api/database/types.js';
3
- import type { FrameData, FrameMetadata } from '../decoder/types.js';
1
+ import type { CameraInterface, CameraPrebufferInterface, CameraPTZInterface, StreamingConnectionOptions } from '@camera.ui/plugineer';
2
+ import type { Observable, ReplaySubject, Subject, Subscription } from 'rxjs';
3
+ import type { ConnectionState, RTCSessionDescription, RtpPacket, RTCIceCandidate as WeriftRTCICECandidate } from 'werift';
4
+ import type { Camera, CameraActivitySettings, CameraFrameWorkerSettings, CameraInformation, CameraInput, CameraInputSettings, CameraType, Point, ZoneFilter, ZoneType } from '../api/database/types.js';
5
+ import type { DecoderFormat, FrameBuffer, FrameData, FrameImage, FrameMetadata, ImageOptions } from '../decoder/types.js';
4
6
  import type { JsonSchema, JsonSchemaForm, SchemaConfig } from '../plugins/types.js';
5
7
  export type SpawnInput = string | number;
6
8
  export interface FfmpegOptions {
@@ -212,3 +214,115 @@ export interface StorageController {
212
214
  getCameraStorage<T extends Record<string, any> = Record<string, any>>(cameraId: string): CameraStorage<T> | undefined;
213
215
  removeCameraStorage(cameraId: string): void;
214
216
  }
217
+ export interface WeriftSession extends Subscribed {
218
+ readonly onCallEnded: ReplaySubject<void>;
219
+ readonly onVideoRtp: Subject<RtpPacket>;
220
+ readonly onAudioRtp: Subject<RtpPacket>;
221
+ readonly isUsingOpus: Promise<boolean>;
222
+ reservePort(bufferPorts?: number): Promise<number>;
223
+ startTranscoding(ffmpegOptions: FfmpegOptions): Promise<void>;
224
+ transcodeReturnAudio(ffmpegOptions: {
225
+ ffmpegPath: string;
226
+ input: SpawnInput[];
227
+ }): Promise<void>;
228
+ stop(): void;
229
+ sendAudioPacket(rtp: RtpPacket): void;
230
+ requestKeyFrame(): void;
231
+ }
232
+ export interface CameraDevice {
233
+ readonly id: string;
234
+ readonly nativeId: string | undefined;
235
+ readonly pluginId: string;
236
+ readonly connected: boolean;
237
+ readonly disabled: boolean;
238
+ readonly name: string;
239
+ readonly type: CameraType;
240
+ readonly info: CameraInformation;
241
+ readonly isCloud: boolean;
242
+ readonly hasLight: boolean;
243
+ readonly hasSiren: boolean;
244
+ readonly hasBinarySensor: boolean;
245
+ readonly hasBattery: boolean;
246
+ readonly hasMotionDetector: boolean;
247
+ readonly hasAudioDetector: boolean;
248
+ readonly hasObjectDetector: boolean;
249
+ readonly hasPtz: boolean;
250
+ readonly hasPrebuffer: boolean;
251
+ readonly activityZones: DetectionZone[];
252
+ readonly activitySettings: CameraActivitySettings;
253
+ readonly frameWorkerSettings: CameraFrameWorkerSettings;
254
+ readonly streamSource: CameraSource;
255
+ readonly snapshotSource: CameraSource | undefined;
256
+ readonly highResolutionSource: CameraSource | undefined;
257
+ readonly midResolutionSource: CameraSource | undefined;
258
+ readonly lowResolutionSource: CameraSource | undefined;
259
+ readonly ptz: CameraPTZDelegate;
260
+ readonly sources: CameraSource[];
261
+ readonly onConnected: Observable<boolean>;
262
+ readonly onLightSwitched: Observable<LightState>;
263
+ readonly onMotionDetected: Observable<MotionState>;
264
+ readonly onAudioDetected: Observable<AudioState>;
265
+ readonly onObjectDetected: Observable<ObjectState>;
266
+ readonly onDoorbellPressed: Observable<DoorbellState>;
267
+ readonly onSirenDetected: Observable<SirenState>;
268
+ readonly onBatteryChanged: Observable<BatteryState>;
269
+ snapshot(forceNew?: boolean): Promise<ArrayBuffer | undefined>;
270
+ onStateChange<T extends keyof StateValues>(stateName: T): Observable<{
271
+ newState: StateValues[T];
272
+ oldState: StateValues[T];
273
+ }>;
274
+ onPropertyChange<T extends keyof Camera>(property: T | T[]): Observable<{
275
+ property: T;
276
+ oldData: Camera[T];
277
+ newData: Camera[T];
278
+ }>;
279
+ getValue<T extends keyof StateValues>(stateName: T): StateValues[T];
280
+ setDelegate<T extends keyof CameraDelegates>(name: T, delegate: CameraDelegates[T]): void;
281
+ connect(): Promise<void>;
282
+ disconnect(): Promise<void>;
283
+ getFrames(prebufferDuration?: number): AsyncIterableIterator<VideoFrame>;
284
+ getMotionFrames(): AsyncIterableIterator<MotionFrame>;
285
+ updateState(stateName: 'light', eventData: LightSetEvent): Promise<void>;
286
+ updateState(stateName: 'motion', eventData: MotionSetEvent, frame?: VideoFrame): Promise<void>;
287
+ updateState(stateName: 'audio', eventData: AudioSetEvent): Promise<void>;
288
+ updateState(stateName: 'object', eventData: ObjectSetEvent): Promise<void>;
289
+ updateState(stateName: 'doorbell', eventData: DoorbellSetEvent): Promise<void>;
290
+ updateState(stateName: 'siren', eventData: SirenSetEvent): Promise<void>;
291
+ updateState(stateName: 'battery', eventData: BatterySetEvent): Promise<void>;
292
+ addCameraSource(source: CameraConfigInputSettings): Promise<void>;
293
+ updateCameraSource(sourceId: string, source: Partial<CameraConfigInputSettings>): Promise<void>;
294
+ removeCameraSource(sourceId: string): Promise<void>;
295
+ createSession(sourceName: string, options?: StreamingConnectionOptions): Promise<WeriftSession>;
296
+ }
297
+ export interface VideoFrame {
298
+ readonly frameData: FrameData;
299
+ readonly metadata: FrameMetadata;
300
+ readonly inputWidth: number;
301
+ readonly inputHeight: number;
302
+ readonly inputFormat: DecoderFormat;
303
+ toBuffer(options?: ImageOptions): Promise<FrameBuffer>;
304
+ toImage(options?: ImageOptions): Promise<FrameImage>;
305
+ save(path: string, options?: ImageOptions): Promise<void>;
306
+ }
307
+ export interface MotionFrame extends VideoFrame {
308
+ readonly motion: MotionState;
309
+ }
310
+ export interface BasicPeerConnection {
311
+ createOffer(): Promise<RTCSessionDescription>;
312
+ acceptAnswer(answer: {
313
+ type: 'answer';
314
+ sdp: string;
315
+ }): Promise<void>;
316
+ addIceCandidate(candidate: Partial<WeriftRTCICECandidate>): Promise<void>;
317
+ onIceCandidate: Subject<WeriftRTCICECandidate>;
318
+ onConnectionState: Observable<ConnectionState>;
319
+ close(): void;
320
+ requestKeyFrame?: () => void;
321
+ }
322
+ interface Subscribed {
323
+ addSubscriptions(...subscriptions: Subscription[]): void;
324
+ addAdditionalSubscriptions(...subscriptions: Subscription[]): void;
325
+ unsubscribe(): void;
326
+ unsubscribeAdditional(): void;
327
+ }
328
+ export {};
@@ -1,5 +1,5 @@
1
+ import type { AuthConfig } from '@camera.ui/common';
1
2
  import type { Sharp } from 'sharp';
2
- import type { MotionState } from '../camera/types.js';
3
3
  export type DecoderFormat = 'yuv' | 'rgb';
4
4
  export interface ImageMetadata {
5
5
  width: number;
@@ -56,23 +56,6 @@ export interface FrameImage {
56
56
  image: Sharp;
57
57
  info: ImageInformation;
58
58
  }
59
- export interface VideoFrame {
60
- readonly frameData: FrameData;
61
- readonly metadata: FrameMetadata;
62
- readonly inputWidth: number;
63
- readonly inputHeight: number;
64
- readonly inputFormat: DecoderFormat;
65
- toBuffer: (options?: ImageOptions) => Promise<FrameBuffer>;
66
- toImage: (options?: ImageOptions) => Promise<FrameImage>;
67
- save: (path: string, options?: ImageOptions) => Promise<void>;
68
- }
69
- export interface MotionFrame extends VideoFrame {
70
- motion: MotionState;
71
- }
72
- export interface AuthConfig {
73
- user: string;
74
- password: string;
75
- }
76
59
  export interface BaseFrameWorkerConfig {
77
60
  frameWorkerId: string;
78
61
  cameraId: string;
@@ -1,7 +1,7 @@
1
+ import type { AuthConfig } from '@camera.ui/common';
1
2
  import { Subscribed } from '@camera.ui/common';
2
3
  import { PLUGIN_STATUS } from '../plugins/types.js';
3
4
  import type { CameraController } from '../camera/controller.js';
4
- import type { AuthConfig } from './types.js';
5
5
  export declare class FrameWorker extends Subscribed {
6
6
  readonly frameWorkerId: string;
7
7
  name: string;
@@ -3,7 +3,7 @@ import { CameraDeviceProxy } from './proxy/cameraDevice.js';
3
3
  import { CoreManagerProxy } from './proxy/coreManager.js';
4
4
  import { DeviceManagerProxy } from './proxy/deviceManager.js';
5
5
  import { NatsServer } from './server.js';
6
- import type { ProxySubscription } from '@camera.ui/common';
6
+ import type { ProxySubscription } from '@camera.ui/common/nats';
7
7
  import type { CameraStorage, StateValues } from '../camera/types.js';
8
8
  import type { MethodKeys, MethodType } from '../types.js';
9
9
  import type { CameraDeviceListenerMessagePayload, CoreManagerProxyEvents, DeviceManagerProxyEvents, PluginMap, ProxyAuth } from './types.js';
@@ -1,4 +1,4 @@
1
- import type { MessageQueue, ProxyMessageStructure } from '@camera.ui/common/messaging';
1
+ import type { MessageQueue, ProxyMessageStructure } from '@camera.ui/common';
2
2
  import type { CameraConfigInputSettings, CameraInterfaces, SetValues } from '../../camera/types.js';
3
3
  import type { MethodKeys, MethodType } from '../../types.js';
4
4
  import type { CameraDeviceProxyMethods, RefreshedStates } from '../types.js';
@@ -1,7 +1,7 @@
1
- import type { MessageQueue, ProxyMessageStructure } from '@camera.ui/common/messaging';
1
+ import type { MessageQueue, ProxyMessageStructure } from '@camera.ui/common';
2
2
  import type { IceServer } from '../../services/config/types.js';
3
- import type { CoreManager } from '../types.js';
4
- export declare class CoreManagerProxy implements CoreManager {
3
+ import type { CoreManagerProxyMethods } from '../types.js';
4
+ export declare class CoreManagerProxy implements CoreManagerProxyMethods {
5
5
  private configService;
6
6
  private pluginsService;
7
7
  private systemService;
@@ -1,8 +1,8 @@
1
- import type { MessageQueue, ProxyMessageStructure } from '@camera.ui/common/messaging';
1
+ import type { MessageQueue, ProxyMessageStructure } from '@camera.ui/common';
2
2
  import type { Camera } from '../../api/database/types.js';
3
3
  import type { CameraConfig } from '../../camera/types.js';
4
- import type { DeviceManager } from '../types.js';
5
- export declare class DeviceManagerProxy implements DeviceManager {
4
+ import type { DeviceManagerProxyMethods } from '../types.js';
5
+ export declare class DeviceManagerProxy implements DeviceManagerProxyMethods {
6
6
  private camerasService;
7
7
  private pluginsService;
8
8
  private messageQueue;
@@ -1,7 +1,7 @@
1
+ import type { AuthConfig } from '@camera.ui/common';
1
2
  import type { CameraDevice } from '@camera.ui/plugineer';
2
3
  import type { Camera, DBSystem, VideoStreamingMode } from '../api/database/types.js';
3
4
  import type { CameraConfig, CameraConfigInputSettings, SetValues, StateValues } from '../camera/types.js';
4
- import type { AuthConfig } from '../decoder/types.js';
5
5
  import type { AudioDetectionPlugin } from '../plugins/interfaces/audioDetection.js';
6
6
  import type { BasePlugin } from '../plugins/interfaces/base.js';
7
7
  import type { MotionDetectionPlugin } from '../plugins/interfaces/motionDetection.js';
@@ -42,7 +42,14 @@ export interface CameraDeviceListenerMessagePayload {
42
42
  type: 'removed' | 'updated' | 'cameraState';
43
43
  data?: any;
44
44
  }
45
- export interface DeviceManager {
45
+ export interface DeviceManager extends DeviceManagerProxyMethods {
46
+ on<E extends keyof DeviceManagerProxyEventCallbacks>(event: E, listener: DeviceManagerProxyEventCallbacks[E]): this;
47
+ once<E extends keyof DeviceManagerProxyEventCallbacks>(event: E, listener: DeviceManagerProxyEventCallbacks[E]): this;
48
+ off<E extends keyof DeviceManagerProxyEventCallbacks>(event: E, listener: DeviceManagerProxyEventCallbacks[E]): this;
49
+ removeListener<E extends keyof DeviceManagerProxyEventCallbacks>(event: E, listener: DeviceManagerProxyEventCallbacks[E]): this;
50
+ removeAllListeners<E extends keyof DeviceManagerProxyEventCallbacks>(event?: E): this;
51
+ }
52
+ export interface DeviceManagerProxyMethods {
46
53
  createCamera(cameraConfig: CameraConfig): Promise<CameraDevice>;
47
54
  getCameraByName(cameraName: string): Promise<CameraDevice | undefined>;
48
55
  getCameraById(cameraId: string): Promise<CameraDevice | undefined>;
@@ -71,7 +78,14 @@ export interface DeviceManagerProxyGenericEvent<K extends keyof DeviceManagerPro
71
78
  type: K;
72
79
  data: DeviceManagerProxyEvents[K];
73
80
  }
74
- export interface CoreManager {
81
+ export declare interface CoreManager extends CoreManagerProxyMethods {
82
+ on<E extends keyof CoreManagerProxyEventCallbacks>(event: E, listener: CoreManagerProxyEventCallbacks[E]): this;
83
+ once<E extends keyof CoreManagerProxyEventCallbacks>(event: E, listener: CoreManagerProxyEventCallbacks[E]): this;
84
+ off<E extends keyof CoreManagerProxyEventCallbacks>(event: E, listener: CoreManagerProxyEventCallbacks[E]): this;
85
+ removeListener<E extends keyof CoreManagerProxyEventCallbacks>(event: E, listener: CoreManagerProxyEventCallbacks[E]): this;
86
+ removeAllListeners<E extends keyof CoreManagerProxyEventCallbacks>(event?: E): this;
87
+ }
88
+ export interface CoreManagerProxyMethods {
75
89
  getFFmpegPath(): Promise<string>;
76
90
  getServerAddresses(): Promise<string[]>;
77
91
  getIceServers(): Promise<IceServer[]>;
@@ -1,2 +1,2 @@
1
- import type { AuthConfig } from '../decoder/types.js';
1
+ import type { AuthConfig } from '@camera.ui/common';
2
2
  export declare function generateCredentials(): AuthConfig;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camera.ui/browser",
3
- "version": "0.0.92",
3
+ "version": "0.0.93",
4
4
  "description": "camera.ui browser client",
5
5
  "author": "seydx (https://github.com/seydx/camera.ui)",
6
6
  "module": "./dist/bundle.js",
@@ -25,7 +25,7 @@
25
25
  "prepublishOnly": "npm i --package-lock-only && npm run lint && npm run format && npm run build"
26
26
  },
27
27
  "dependencies": {
28
- "lru-cache": "^11.0.0",
28
+ "lru-cache": "^11.0.1",
29
29
  "rxjs": "^7.8.1",
30
30
  "socket.io-client": "^4.7.5"
31
31
  },