@camera.ui/browser 0.0.72 → 0.0.73

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 (67) hide show
  1. package/dist/bundle.js +1 -1
  2. package/dist/types/packages/client/browser/src/streaming/streaming-session.d.ts +2 -1
  3. package/dist/types/server/src/api/controllers/api.controller.d.ts +6 -0
  4. package/dist/types/server/src/api/controllers/auth.controller.d.ts +20 -0
  5. package/dist/types/server/src/api/controllers/backup.controller.d.ts +10 -0
  6. package/dist/types/server/src/api/controllers/cameras.controller.d.ts +33 -0
  7. package/dist/types/server/src/api/controllers/config.controller.d.ts +14 -0
  8. package/dist/types/server/src/api/controllers/files.controller.d.ts +8 -0
  9. package/dist/types/server/src/api/controllers/plugins.controller.d.ts +54 -0
  10. package/dist/types/server/src/api/controllers/streams.controller.d.ts +12 -0
  11. package/dist/types/server/src/api/controllers/system.controller.d.ts +14 -0
  12. package/dist/types/server/src/api/controllers/users.controller.d.ts +15 -0
  13. package/dist/types/server/src/api/database/index.d.ts +1 -1
  14. package/dist/types/server/src/api/go2rtc/api/application.d.ts +1 -1
  15. package/dist/types/server/src/api/go2rtc/api/config.d.ts +1 -1
  16. package/dist/types/server/src/api/go2rtc/api/snapshot.d.ts +1 -1
  17. package/dist/types/server/src/api/go2rtc/api/streams.d.ts +1 -1
  18. package/dist/types/server/src/api/index.d.ts +18 -0
  19. package/dist/types/server/src/api/middlewares/authPermission.middleware.d.ts +5 -0
  20. package/dist/types/server/src/api/middlewares/authValidation.middleware.d.ts +4 -0
  21. package/dist/types/server/src/api/middlewares/pagination.middleware.d.ts +3 -0
  22. package/dist/types/server/src/api/plugins/cameraui.plugin.d.ts +11 -0
  23. package/dist/types/server/src/api/plugins/database.plugin.d.ts +11 -0
  24. package/dist/types/server/src/api/plugins/go2rtc.plugin.d.ts +11 -0
  25. package/dist/types/server/src/api/plugins/logger.plugin.d.ts +7 -0
  26. package/dist/types/server/src/api/plugins/socket.plugin.d.ts +11 -0
  27. package/dist/types/server/src/api/plugins/system.plugin.d.ts +21 -0
  28. package/dist/types/server/src/api/plugins/useragent.plugin.d.ts +8 -0
  29. package/dist/types/server/src/api/routes/api.routes.d.ts +2 -0
  30. package/dist/types/server/src/api/routes/auth.routes.d.ts +2 -0
  31. package/dist/types/server/src/api/routes/backup.routes.d.ts +2 -0
  32. package/dist/types/server/src/api/routes/cameras.routes.d.ts +2 -0
  33. package/dist/types/server/src/api/routes/config.routes.d.ts +2 -0
  34. package/dist/types/server/src/api/routes/files.routes.d.ts +2 -0
  35. package/dist/types/server/src/api/routes/index.d.ts +7 -0
  36. package/dist/types/server/src/api/routes/plugins.routes.d.ts +2 -0
  37. package/dist/types/server/src/api/routes/streams.routes.d.ts +2 -0
  38. package/dist/types/server/src/api/routes/system.routes.d.ts +2 -0
  39. package/dist/types/server/src/api/routes/users.routes.d.ts +2 -0
  40. package/dist/types/server/src/api/schemas/plugins.schema.d.ts +25 -0
  41. package/dist/types/server/src/api/services/backup.service.d.ts +10 -0
  42. package/dist/types/server/src/api/utils/axios.d.ts +2 -0
  43. package/dist/types/server/src/api/utils/cert.d.ts +11 -0
  44. package/dist/types/server/src/api/utils/moveFiles.d.ts +1 -0
  45. package/dist/types/server/src/api/websocket/nsp/status.d.ts +1 -1
  46. package/dist/types/server/src/api/websocket/types.d.ts +1 -1
  47. package/dist/types/server/src/decoder/ffmpeg.d.ts +1 -0
  48. package/dist/types/server/src/decoder/index.d.ts +13 -1
  49. package/dist/types/server/src/decoder/types.d.ts +29 -21
  50. package/dist/types/server/src/decoder/worker/index.d.ts +24 -9
  51. package/dist/types/server/src/devices/camera/controller/types.d.ts +1 -2
  52. package/dist/types/server/src/devices/camera/index.d.ts +2 -1
  53. package/dist/types/server/src/devices/camera/streaming/peer-connection.d.ts +6 -5
  54. package/dist/types/server/src/main.d.ts +21 -0
  55. package/dist/types/server/src/nats/constants.d.ts +1 -0
  56. package/dist/types/server/src/nats/proxy/cameraDevice.d.ts +1 -5
  57. package/dist/types/server/src/nats/server.d.ts +3 -2
  58. package/dist/types/server/src/nats/types.d.ts +2 -6
  59. package/dist/types/server/src/plugins/node/logger.d.ts +2 -0
  60. package/dist/types/server/src/plugins/node/proxy/cameraDevice.d.ts +6 -2
  61. package/dist/types/server/src/plugins/node/proxy/queue.d.ts +1 -1
  62. package/dist/types/server/src/plugins/worker-ipc.d.ts +5 -2
  63. package/dist/types/server/src/services/logger/index.d.ts +3 -3
  64. package/dist/types/server/src/utils/pythonInstaller.d.ts +2 -1
  65. package/dist/types/server/src/utils/subscribed.d.ts +1 -1
  66. package/package.json +4 -4
  67. package/dist/types/server/src/api/websocket/nsp/frame.d.ts +0 -10
@@ -1,27 +1,42 @@
1
1
  import { Subscribed } from '../../utils/subscribed.js';
2
2
  import type { CameraController } from '../../devices/camera/controller/index.js';
3
3
  import type { FrameMetadata } from '../types.js';
4
+ interface FrameWorkerClient {
5
+ pluginId: string;
6
+ requestIds: string[];
7
+ }
4
8
  export declare class FrameWorker extends Subscribed {
5
9
  token: string;
6
- private readonly logger;
7
- private readonly configService;
8
- private readonly camera;
10
+ readonly clients: Map<string, FrameWorkerClient>;
11
+ private subject;
12
+ private ipcSubject;
13
+ private frameWorkerId;
14
+ private publisher?;
15
+ private subscriber?;
16
+ private logger;
17
+ private configService;
18
+ private camera;
9
19
  private frameWorker?;
20
+ private initialized;
10
21
  private stopped;
11
22
  private auth;
23
+ private ffmpegArgs;
24
+ private py;
12
25
  constructor(camera: CameraController, auth: {
13
26
  user: string;
14
27
  pass: string;
15
28
  });
16
- listen(): Promise<void>;
29
+ init(): Promise<void>;
17
30
  close(): Promise<void>;
18
31
  workerPID(): number;
19
32
  getMetadata(): Promise<FrameMetadata>;
20
- startVideoSession(): Promise<void>;
21
- stopVideoSession(): Promise<void>;
22
- private onMessage;
33
+ addClient(pluginId: string, requestId: string): Promise<void>;
34
+ removeClient(pluginId: string, requestId: string): Promise<void>;
35
+ private startVideoSession;
36
+ private stopVideoSession;
37
+ private startWorker;
23
38
  private sendMessage;
24
- private sendReponse;
25
- private send;
39
+ private listenToMessages;
26
40
  private getLogPrefix;
27
41
  }
42
+ export {};
@@ -89,7 +89,6 @@ export type CameraConfig = (BaseCameraConfig & {
89
89
  export interface BaseDetection {
90
90
  id?: string;
91
91
  label: string;
92
- timestamp: number;
93
92
  confidence: number;
94
93
  boundingBox: [number, number, number, number];
95
94
  inputWidth: number;
@@ -102,7 +101,7 @@ export interface MotionDetection extends BaseDetection {
102
101
  export interface ObjectDetection extends BaseDetection {
103
102
  }
104
103
  export interface BaseState<T extends LightState | AudioState | MotionState | ObjectState | SirenState | BatteryState | DoorbellState> {
105
- timestamp: number;
104
+ timestamp: string;
106
105
  lastEvent?: Omit<T, 'lastEvent'>;
107
106
  }
108
107
  export interface MotionSetEvent {
@@ -1,5 +1,6 @@
1
1
  import { LRUCache } from 'lru-cache';
2
- import { BehaviorSubject, Observable, Subscription } from 'rxjs';
2
+ import { BehaviorSubject } from 'rxjs';
3
+ import type { Observable, Subscription } from 'rxjs';
3
4
  import type { Camera, CameraInformation, CameraPublicProperties, CameraType, CameraZone } from '../../api/database/types.js';
4
5
  import type { IceServer } from '../../services/config/types.js';
5
6
  import type { AudioSetEvent, AudioState, BaseLogger, BatterySetEvent, BatteryState, CameraSource, DoorbellSetEvent, DoorbellState, LightSetEvent, LightState, MotionSetEvent, MotionState, ObjectSetEvent, ObjectState, SetValues, Sets, SirenSetEvent, SirenState, StateValues, States } from './controller/types.js';
@@ -1,7 +1,8 @@
1
- import { Observable, ReplaySubject, Subject } from 'rxjs';
2
- import { MediaStreamTrack, RTCSessionDescription, RTCIceCandidate as WeriftRTCICECandidate } from 'werift';
1
+ import { ReplaySubject, Subject } from 'rxjs';
2
+ import { MediaStreamTrack } from 'werift';
3
3
  import { Subscribed } from '../../../utils/subscribed.js';
4
- import type { ConnectionState, RTCIceCandidate, RtcpPacket, RtpPacket } from 'werift';
4
+ import type { Observable } from 'rxjs';
5
+ import type { ConnectionState, RTCIceCandidate, RTCSessionDescription, RtcpPacket, RtpPacket, RTCIceCandidate as WeriftRTCICECandidate } from 'werift';
5
6
  import type { IceServer } from '../../../services/config/types.js';
6
7
  import type { CameraDevice } from '../cameraDevice.js';
7
8
  import type { BaseLogger } from '../controller/types.js';
@@ -25,8 +26,8 @@ export declare class WeriftPeerConnection extends Subscribed implements BasicPee
25
26
  onAudioRtcp: Subject<RtcpPacket>;
26
27
  onVideoRtp: Subject<RtpPacket>;
27
28
  onVideoRtcp: Subject<RtcpPacket>;
28
- onIceCandidate: Subject<WeriftRTCICECandidate>;
29
- onConnectionState: ReplaySubject<"closed" | "failed" | "disconnected" | "new" | "connecting" | "connected">;
29
+ onIceCandidate: Subject<RTCIceCandidate>;
30
+ onConnectionState: ReplaySubject<"connected" | "disconnected" | "closed" | "failed" | "new" | "connecting">;
30
31
  returnAudioTrack: MediaStreamTrack;
31
32
  private onRequestKeyFrame;
32
33
  private cameraDevice;
@@ -0,0 +1,21 @@
1
+ import 'reflect-metadata';
2
+ export declare class CameraUi {
3
+ private started;
4
+ private api;
5
+ private logger;
6
+ private configService;
7
+ private pluginManager;
8
+ private go2rtc;
9
+ private server;
10
+ private proxy;
11
+ private frameManager;
12
+ private _restartAttempts;
13
+ private _maxRestartAttempts;
14
+ get restartAttempts(): number;
15
+ get maxRestartAttempts(): number;
16
+ constructor();
17
+ start(): Promise<void>;
18
+ close(): Promise<void>;
19
+ restart(...args: any[]): Promise<void>;
20
+ private init;
21
+ }
@@ -1 +1,2 @@
1
1
  export declare const NATS_SERVER_SUBJECT = "camera.ui-server";
2
+ export declare const NATS_SIGNALING_SUBJECT = "camera.ui-signaling";
@@ -1,6 +1,6 @@
1
1
  /// <reference types="node" resolution-mode="require"/>
2
2
  import type { Camera } from '../../api/database/types.js';
3
- import type { FrameMetadata, FrameSession } from '../../decoder/types.js';
3
+ import type { FrameMetadata } from '../../decoder/types.js';
4
4
  import type { CameraDelegate, CameraPrebufferDelegate, FfmpegOptions, PrebufferType, SetValues, StateValues, StreamInfo } from '../../devices/camera/controller/types.js';
5
5
  import type { IceServer } from '../../services/config/types.js';
6
6
  import type { MessageQueue } from '../queue.js';
@@ -46,10 +46,6 @@ export declare class CameraDeviceProxy implements CameraDeviceProxyMethods {
46
46
  cameraId: string;
47
47
  pluginId: string;
48
48
  }): Promise<FrameMetadata>;
49
- getFrameSession(data: {
50
- cameraId: string;
51
- pluginId: string;
52
- }): Promise<FrameSession>;
53
49
  getFfmpegPath(): string;
54
50
  getIceServers(): IceServer[];
55
51
  snapshot(data: {
@@ -2,14 +2,14 @@ import { RUNTIME_STATUS } from '../services/config/types.js';
2
2
  import type { ProxyAuth } from './types.js';
3
3
  export declare class NatsServer {
4
4
  readonly serverPort = 4222;
5
- readonly websocketPort = 8223;
6
5
  private readonly clusterAmount;
7
- private readonly serverClusterPort;
8
6
  private readonly auth;
7
+ private clusterPort?;
9
8
  private serverProcess?;
10
9
  private clusterProcesses;
11
10
  private logger;
12
11
  private configService;
12
+ private process;
13
13
  private tmpDir;
14
14
  private manuallyKilled;
15
15
  private shuttingDown;
@@ -27,6 +27,7 @@ export declare class NatsServer {
27
27
  private stringifyConfig;
28
28
  private kill;
29
29
  private handleClose;
30
+ private handleCloseCluster;
30
31
  private setStatus;
31
32
  private processLogger;
32
33
  private isIgnorableString;
@@ -1,5 +1,5 @@
1
1
  import type { Camera } from '../api/database/types.js';
2
- import type { FrameMetadata, FrameSession } from '../decoder/types.js';
2
+ import type { FrameMetadata } from '../decoder/types.js';
3
3
  import type { CameraDevice } from '../devices/camera/cameraDevice.js';
4
4
  import type { CameraConfig, FfmpegOptions, PrebufferType, SetValues, StateValues, StreamInfo } from '../devices/camera/controller/types.js';
5
5
  import type { BasePlugin } from '../plugins/base.js';
@@ -26,7 +26,7 @@ export interface ProxyMessageStructure {
26
26
  fn: string;
27
27
  args: any;
28
28
  timeout: number;
29
- timestamp: number;
29
+ timestamp: string;
30
30
  response?: any;
31
31
  error?: any;
32
32
  }
@@ -113,10 +113,6 @@ export interface CameraDeviceProxyMethods {
113
113
  cameraId: string;
114
114
  pluginId: string;
115
115
  }): Promise<FrameMetadata>;
116
- getFrameSession(data: {
117
- cameraId: string;
118
- pluginId: string;
119
- }): Promise<FrameSession>;
120
116
  getFfmpegPath(data: {
121
117
  cameraId: string;
122
118
  pluginId: string;
@@ -2,6 +2,8 @@ export declare class PluginLogger {
2
2
  private _prefix;
3
3
  private _loggerPrefix;
4
4
  private _disableTimestamps;
5
+ debugEnabled: boolean;
6
+ traceEnabled: boolean;
5
7
  private get prefix();
6
8
  constructor(prefix: string, disableTimestamps: boolean);
7
9
  log(...args: any[]): void;
@@ -12,8 +12,9 @@ export declare class CameraDeviceProxy extends CameraDevice {
12
12
  private client;
13
13
  private cameraSubscriber;
14
14
  private cameraPluginSubscriber;
15
+ private signalingSubscriber;
15
16
  private frameSubscriber?;
16
- private activeSockets;
17
+ private activeRequests;
17
18
  private messageQueue;
18
19
  private auth;
19
20
  private pluginID;
@@ -22,6 +23,8 @@ export declare class CameraDeviceProxy extends CameraDevice {
22
23
  private cameraSubscriberSubject;
23
24
  private cameraPluginSubscriberSubject;
24
25
  private frameSubject;
26
+ private signalingSubject;
27
+ private signalingTargetSubject;
25
28
  get sources(): CameraSource[];
26
29
  constructor(api: PluginAPI, logger: PluginLogger, camera: Camera, pluginId: string, pluginName: string, auth: {
27
30
  user: string;
@@ -37,9 +40,10 @@ export declare class CameraDeviceProxy extends CameraDevice {
37
40
  updateState<T extends keyof SetValues>(stateName: T, eventData: SetValues[T]): Promise<void>;
38
41
  refreshStates(): Promise<void>;
39
42
  cleanup(): Promise<void>;
40
- private connectToServer;
43
+ private signalDecoder;
41
44
  private closeFrameSubscriber;
42
45
  private requestHandler;
43
46
  private listenToMessages;
47
+ private listenToSignalingMessages;
44
48
  private onRequest;
45
49
  }
@@ -1,4 +1,4 @@
1
- import { type NatsConnection, type Subscription } from 'nats';
1
+ import type { NatsConnection, Subscription } from 'nats';
2
2
  import type { BaseLogger } from '../../../devices/camera/controller/types.js';
3
3
  import type { ProxyMessageStructure } from '../../../nats/types.js';
4
4
  export declare class ClientMessageQueue {
@@ -1,20 +1,23 @@
1
1
  /// <reference types="node" resolution-mode="require"/>
2
2
  import { EventEmitter } from 'node:events';
3
+ import type { Logger } from '../services/logger/index.js';
3
4
  import type { ProcessMessage, ProcessResponse } from './types.js';
4
5
  export declare interface WorkerIPC {
5
6
  on(event: 'message', listener: (message: ProcessResponse) => void): this;
6
7
  }
7
8
  export declare class WorkerIPC extends EventEmitter {
9
+ private logger;
8
10
  private publisher?;
9
11
  private subscriber?;
12
+ private name;
10
13
  private id;
11
14
  private subject;
12
15
  private targetSubject;
13
16
  private auth;
14
- constructor(id: string, auth: {
17
+ constructor(name: string, id: string, auth: {
15
18
  user: string;
16
19
  pass: string;
17
- });
20
+ }, logger: Logger);
18
21
  listen(): Promise<void>;
19
22
  close(): Promise<void>;
20
23
  sendMessage(message: ProcessMessage): void;
@@ -5,13 +5,13 @@ import type { LoggingLevel } from '../config/types.js';
5
5
  export declare class Logger {
6
6
  private _loggerPrefix;
7
7
  private _debugEnabled;
8
- private _traceLogging;
8
+ private _traceEnabled;
9
9
  private _disableTimestamps;
10
10
  notifications: UiNotification[];
11
11
  get debugEnabled(): boolean;
12
12
  set debugEnabled(state: boolean);
13
- get traceLogging(): boolean;
14
- set traceLogging(state: boolean);
13
+ get traceEnabled(): boolean;
14
+ set traceEnabled(state: boolean);
15
15
  get disableTimestamps(): boolean;
16
16
  set disableTimestamps(state: boolean);
17
17
  get prefix(): string;
@@ -1,12 +1,13 @@
1
1
  import { PortablePython } from '@bjia56/portable-python';
2
+ import { PluginLogger } from '../plugins/node/logger.js';
2
3
  export declare const SERVER_PY_VERSION = "3.11";
3
4
  export declare class PythonInstaller {
4
5
  static readonly versions: string[];
6
+ logger: PluginLogger;
5
7
  readonly python: PortablePython;
6
8
  readonly venvPath?: string;
7
9
  readonly installPath: string;
8
10
  private identifier;
9
- private logger;
10
11
  private configService;
11
12
  private needsUpdate;
12
13
  get isInstalled(): boolean;
@@ -1,4 +1,4 @@
1
- import { Subscription } from 'rxjs';
1
+ import type { Subscription } from 'rxjs';
2
2
  export declare class Subscribed {
3
3
  private readonly subscriptions;
4
4
  private readonly additionalSubscriptions;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camera.ui/browser",
3
- "version": "0.0.72",
3
+ "version": "0.0.73",
4
4
  "description": "camera.ui browser client",
5
5
  "author": "seydx (https://github.com/seydx/camera.ui)",
6
6
  "module": "./dist/bundle.js",
@@ -23,7 +23,7 @@
23
23
  "prepublishOnly": "npm i --package-lock-only && npm run lint && npm run format && npm run build"
24
24
  },
25
25
  "dependencies": {
26
- "axios": "^1.6.8",
26
+ "axios": "^1.7.2",
27
27
  "lodash.clonedeep": "^4.5.0",
28
28
  "lodash.isequal": "^4.5.0",
29
29
  "lru-cache": "^10.2.2",
@@ -34,8 +34,8 @@
34
34
  "@rushstack/eslint-patch": "^1.10.3",
35
35
  "@swc/register": "^0.1.10",
36
36
  "@types/webrtc": "^0.0.43",
37
- "@typescript-eslint/eslint-plugin": "^7.9.0",
38
- "@typescript-eslint/parser": "^7.9.0",
37
+ "@typescript-eslint/eslint-plugin": "^7.10.0",
38
+ "@typescript-eslint/parser": "^7.10.0",
39
39
  "bufferutil": "^4.0.8",
40
40
  "eslint": "^8.57.0",
41
41
  "eslint-config-prettier": "^9.1.0",
@@ -1,10 +0,0 @@
1
- import type { Namespace, Server, Socket } from 'socket.io';
2
- import type { SocketNsp } from '../types.js';
3
- export declare class FrameNamespace {
4
- nsp: Namespace;
5
- nspName: SocketNsp;
6
- readonly connectedClients: Map<string, Set<Socket>>;
7
- private decoder;
8
- constructor(io: Server);
9
- private handleConnection;
10
- }