@camera.ui/browser 0.0.100 → 0.0.102

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 (33) hide show
  1. package/dist/bundle.js +2 -1
  2. package/dist/bundle.js.LICENSE.txt +23 -0
  3. package/dist/types/packages/client/browser/src/types.d.ts +1 -0
  4. package/dist/types/packages/plugineer/src/polyglot/node/camera/index.d.ts +2 -1
  5. package/dist/types/packages/plugineer/src/polyglot/node/camera/iou.d.ts +1 -1
  6. package/dist/types/packages/plugineer/src/polyglot/node/camera/polygon.d.ts +1 -2
  7. package/dist/types/packages/plugineer/src/polyglot/node/plugins/types.d.ts +4 -0
  8. package/dist/types/packages/types/src/index.d.ts +8 -4
  9. package/dist/types/server/src/api/database/checks.d.ts +55 -0
  10. package/dist/types/server/src/api/database/index.d.ts +2 -1
  11. package/dist/types/server/src/api/database/migration.d.ts +1 -0
  12. package/dist/types/server/src/api/database/selfcheck.d.ts +48 -0
  13. package/dist/types/server/src/api/schemas/cameras.schema.d.ts +26 -26
  14. package/dist/types/server/src/api/schemas/users.schema.d.ts +34 -34
  15. package/dist/types/server/src/api/services/cameras.service.d.ts +1 -0
  16. package/dist/types/server/src/api/services/plugins.service.d.ts +1 -0
  17. package/dist/types/server/src/api/types/index.d.ts +0 -5
  18. package/dist/types/server/src/api/websocket/nsp/logs.d.ts +7 -1
  19. package/dist/types/server/src/api/websocket/nsp/metrics.d.ts +1 -1
  20. package/dist/types/server/src/api/websocket/nsp/status.d.ts +1 -1
  21. package/dist/types/server/src/api.d.ts +5 -14
  22. package/dist/types/server/src/camera/controller.d.ts +16 -3
  23. package/dist/types/server/src/{decoder/worker.d.ts → camera/frameWorker.d.ts} +8 -5
  24. package/dist/types/server/src/plugins/index.d.ts +2 -4
  25. package/dist/types/server/src/plugins/plugin.d.ts +5 -0
  26. package/dist/types/server/src/plugins/worker.d.ts +16 -2
  27. package/dist/types/server/src/services/config/constants.d.ts +1 -0
  28. package/dist/types/server/src/services/config/index.d.ts +11 -2
  29. package/dist/types/server/src/services/config/types.d.ts +7 -0
  30. package/dist/types/shared/types/index.d.ts +0 -1
  31. package/package.json +4 -4
  32. package/dist/types/server/src/decoder/index.d.ts +0 -11
  33. package/dist/types/server/src/decoder/types.d.ts +0 -7
@@ -0,0 +1,23 @@
1
+ /*! *****************************************************************************
2
+ Copyright (c) Microsoft Corporation. All rights reserved.
3
+ Licensed under the Apache License, Version 2.0 (the "License"); you may not use
4
+ this file except in compliance with the License. You may obtain a copy of the
5
+ License at http://www.apache.org/licenses/LICENSE-2.0
6
+
7
+ THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
8
+ KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED
9
+ WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,
10
+ MERCHANTABLITY OR NON-INFRINGEMENT.
11
+
12
+ See the Apache Version 2.0 License for specific language governing permissions
13
+ and limitations under the License.
14
+ ***************************************************************************** */
15
+
16
+ /**
17
+ * splaytree v3.1.2
18
+ * Fast Splay tree for Node and browser
19
+ *
20
+ * @author Alexander Milevski <info@w8r.name>
21
+ * @license MIT
22
+ * @preserve
23
+ */
@@ -35,6 +35,7 @@ export interface BaseLogger {
35
35
  log: (...args: any[]) => void;
36
36
  error: (...args: any[]) => void;
37
37
  warn: (...args: any[]) => void;
38
+ success: (...args: any[]) => void;
38
39
  debug: (...args: any[]) => void;
39
40
  trace: (...args: any[]) => void;
40
41
  attention: (...args: any[]) => void;
@@ -4,7 +4,7 @@ import { BehaviorSubject } from 'rxjs';
4
4
  import type { AudioSetEvent, AudioState, BatterySetEvent, BatteryState, Camera, CameraActivitySettings, CameraDelegate, CameraFrameWorkerSettings, CameraInformation, CameraPTZDelegate, CameraPrebufferDelegate, CameraSource, CameraType, DetectionZone, DoorbellSetEvent, DoorbellState, LightSetEvent, LightState, LoggerService, MotionSetEvent, MotionState, ObjectSetEvent, ObjectState, SetValues, SirenSetEvent, SirenState, StateValues } from '@camera.ui/types';
5
5
  import type { Observable } from 'rxjs';
6
6
  export declare abstract class BaseCameraDevice extends Subscribed {
7
- protected logger: LoggerService;
7
+ readonly logger: LoggerService;
8
8
  protected snapshotCache: TTLCache<string, ArrayBuffer>;
9
9
  protected cameraSubject: BehaviorSubject<Camera>;
10
10
  protected cameraState: BehaviorSubject<boolean>;
@@ -41,6 +41,7 @@ export declare abstract class BaseCameraDevice extends Subscribed {
41
41
  get hasBinarySensor(): boolean;
42
42
  get hasBattery(): boolean;
43
43
  get hasMotionDetector(): boolean;
44
+ get extendedMotionDetector(): boolean;
44
45
  get hasAudioDetector(): boolean;
45
46
  get hasObjectDetector(): boolean;
46
47
  get hasPtz(): boolean;
@@ -1,2 +1,2 @@
1
1
  import type { Detection } from '@camera.ui/types';
2
- export declare function mergeDetections(detections: Detection[], iouThreshold?: number): Detection[];
2
+ export declare function mergeDetections(detections: Detection[], iouThreshold?: number, closeThreshold?: number): Detection[];
@@ -1,5 +1,4 @@
1
1
  import type { CameraActivitySettings, Detection, DetectionZone } from '@camera.ui/types';
2
2
  export declare const convertZonePointsToPixels: (zone: DetectionZone, detection: Detection) => DetectionZone;
3
3
  export declare const convertBoundingBoxToPixels: (detection: Detection) => Detection;
4
- export declare const areMotionDetectionsValid: (detections: Detection[], zones: DetectionZone[], activitySettings: CameraActivitySettings) => Detection[];
5
- export declare const areObjectDetectionsValid: (detections: Detection[], zones: DetectionZone[], activitySettings: CameraActivitySettings) => Detection[];
4
+ export declare const areDetectionsValid: (detections: Detection[], zones: DetectionZone[], activitySettings: CameraActivitySettings) => Detection[];
@@ -47,8 +47,12 @@ export type ExtensionOrSupport = {
47
47
  extension?: never;
48
48
  supportAdditionalCameras?: boolean;
49
49
  };
50
+ export interface PluginOptions {
51
+ extendedMotionDetection?: boolean;
52
+ }
50
53
  export interface PluginContractBase {
51
54
  builtIns?: CameraExtensionWithoutHub[];
55
+ options?: PluginOptions;
52
56
  dependencies?: string[];
53
57
  pythonVersion?: string;
54
58
  }
@@ -18,8 +18,8 @@ export type DecoderFormat = 'yuv' | 'rgb';
18
18
  export type ImageInputFormat = 'yuv' | 'rgb' | 'rgba' | 'gray';
19
19
  export type ImageOutputFormat = 'rgb' | 'rgba' | 'gray';
20
20
  export type CameraExtension = 'hub' | 'prebuffer' | 'motionDetection' | 'objectDetection' | 'audioDetection' | 'ptz';
21
- export type CameraFrameWorkerDecoder = 'pillow' | 'wasm';
22
- export type CameraFrameWorkerResolution = '640' | '480' | '320' | 'native';
21
+ export type CameraFrameWorkerDecoder = 'pillow' | 'wasm' | 'rust';
22
+ export type CameraFrameWorkerResolution = '3840x2160' | '3072x1728' | '2560x1440' | '1920x1080' | '1440x1080' | '1280x720' | '960x540' | '640x480' | '640x360' | '320x240' | '320x180';
23
23
  export type AudioCodec = 'PCMU' | 'PCMA' | 'MPEG4-GENERIC' | 'opus' | 'G722' | 'MPA' | 'PCM' | 'FLAC';
24
24
  export type AudioFFmpegCodec = 'pcm_mulaw' | 'pcm_alaw' | 'aac' | 'libopus' | 'g722' | 'mp3' | 'pcm_s16be' | 'pcm_s16le' | 'flac';
25
25
  export type VideoCodec = 'H264' | 'H265' | 'VP8' | 'VP9' | 'AV1' | 'JPEG' | 'RAW';
@@ -232,8 +232,8 @@ export interface ImageCrop {
232
232
  height: number;
233
233
  }
234
234
  export interface ImageResize {
235
- width?: number;
236
- height?: number;
235
+ width: number;
236
+ height: number;
237
237
  }
238
238
  export interface ImageFormat {
239
239
  to: ImageOutputFormat;
@@ -386,6 +386,7 @@ export interface Camera extends Omit<BaseCamera, 'activityZones'> {
386
386
  hasAudioDetector: boolean;
387
387
  hasMotionDetector: boolean;
388
388
  hasObjectDetector: boolean;
389
+ extendedMotionDetector: boolean;
389
390
  hasPtz: boolean;
390
391
  hasPrebuffer: boolean;
391
392
  sources: CameraInput[];
@@ -407,6 +408,7 @@ export interface CameraDevice {
407
408
  readonly hasBinarySensor: boolean;
408
409
  readonly hasBattery: boolean;
409
410
  readonly hasMotionDetector: boolean;
411
+ readonly extendedMotionDetector: boolean;
410
412
  readonly hasAudioDetector: boolean;
411
413
  readonly hasObjectDetector: boolean;
412
414
  readonly hasPtz: boolean;
@@ -430,6 +432,7 @@ export interface CameraDevice {
430
432
  readonly onDoorbellPressed: Observable<DoorbellState>;
431
433
  readonly onSirenDetected: Observable<SirenState>;
432
434
  readonly onBatteryChanged: Observable<BatteryState>;
435
+ readonly logger: LoggerService;
433
436
  snapshot(forceNew?: boolean): Promise<ArrayBuffer | undefined>;
434
437
  onStateChange<T extends keyof StateValues>(stateName: T): Observable<{
435
438
  newState: StateValues[T];
@@ -602,6 +605,7 @@ export interface LoggerService {
602
605
  log: (...args: any[]) => void;
603
606
  error: (...args: any[]) => void;
604
607
  warn: (...args: any[]) => void;
608
+ success: (...args: any[]) => void;
605
609
  debug: (...args: any[]) => void;
606
610
  trace: (...args: any[]) => void;
607
611
  attention: (...args: any[]) => void;
@@ -0,0 +1,55 @@
1
+ export interface PathExistenceResult {
2
+ path: string;
3
+ exists: boolean;
4
+ }
5
+ export interface FFmpegExistenceResult {
6
+ path: string;
7
+ exists: boolean;
8
+ hasPermissions: boolean;
9
+ error?: Error;
10
+ }
11
+ export interface PathPermissionsResult {
12
+ path: string;
13
+ hasPermissions: boolean;
14
+ error?: Error;
15
+ }
16
+ export interface CleanedUpFilesResult {
17
+ path: string;
18
+ wasCleaned: boolean;
19
+ error?: Error;
20
+ }
21
+ export interface DatabaseCorruptionResult {
22
+ dbPath: string;
23
+ isCorrupt: boolean;
24
+ error?: Error;
25
+ }
26
+ export interface PortAvailabilityResult {
27
+ port: number;
28
+ isAvailable: boolean;
29
+ }
30
+ export interface OrphanedProcessesResult {
31
+ processInfo: ProcInfo;
32
+ killed?: boolean;
33
+ wasOrphaned?: boolean;
34
+ error?: Error;
35
+ }
36
+ export interface PathPermission {
37
+ path: string;
38
+ mode: number;
39
+ }
40
+ export interface ProcInfo {
41
+ pid: number;
42
+ startTime: number;
43
+ command: string;
44
+ args: string[];
45
+ titles?: string[];
46
+ uniqueId?: string;
47
+ }
48
+ export declare function checkPathsExist(pathsToCheck: string[]): Promise<PathExistenceResult[]>;
49
+ export declare function checkPathPermissions(pathsWithPermissionsToCheck: PathPermission[]): Promise<PathPermissionsResult[]>;
50
+ export declare function cleanUpFiles(filesToClean: string[]): Promise<CleanedUpFilesResult[]>;
51
+ export declare function checkDatabaseCorruption(dbPath: string): Promise<DatabaseCorruptionResult>;
52
+ export declare function checkPortAvailability(portsToCheck: number[]): Promise<PortAvailabilityResult[]>;
53
+ export declare function checkFfmpegBinary(ffmpegPaths: string[]): Promise<PathExistenceResult[]>;
54
+ export declare function checkOrphanedProcesses(processInfos: ProcInfo[]): Promise<OrphanedProcessesResult[]>;
55
+ export declare function checkInstalledFFmpegs(): Promise<FFmpegExistenceResult[]>;
@@ -2,7 +2,7 @@ import type { FastifyInstance } from 'fastify';
2
2
  import type { Database as DB, RootDatabase as RootDB } from 'lmdb';
3
3
  import type { DBAuth, DBCamera, DBPlugin, DBSettings, DBSystem, DBUser } from './types.js';
4
4
  export declare class Database {
5
- static readonly VERSION = "1.0.2";
5
+ static readonly VERSION = "1.0.4";
6
6
  authDB: RootDB<DBAuth, 'auth'>;
7
7
  camerasDB: DB<DBCamera[], 'cameras'>;
8
8
  pluginsDB: DB<DBPlugin[], 'plugins'>;
@@ -11,6 +11,7 @@ export declare class Database {
11
11
  systemDB: DB<DBSystem, 'system'>;
12
12
  private lowdb;
13
13
  private databaseMigration;
14
+ private selfCheck;
14
15
  private databases;
15
16
  private app;
16
17
  private configService;
@@ -2,6 +2,7 @@ import type { CameraUiDatabase } from './types.js';
2
2
  export declare class DatabaseMigrationTable {
3
3
  private db;
4
4
  private logger;
5
+ private configService;
5
6
  private get camerasDB();
6
7
  private get pluginsDB();
7
8
  private get settingsDB();
@@ -0,0 +1,48 @@
1
+ import type { CleanedUpFilesResult, DatabaseCorruptionResult, FFmpegExistenceResult, OrphanedProcessesResult, PathExistenceResult, PathPermissionsResult, PortAvailabilityResult } from './checks.js';
2
+ export interface SelfCheckConfig {
3
+ enabled: boolean;
4
+ checks: {
5
+ pathsExistence: boolean;
6
+ pathsPermissions: boolean;
7
+ cleanupFiles: boolean;
8
+ databaseCorruption: boolean;
9
+ portAvailability: boolean;
10
+ ffmpegBinaries: boolean;
11
+ orphanedProcesses: boolean;
12
+ };
13
+ }
14
+ export interface SelfCheckResults {
15
+ status: 'success' | 'error' | 'disabled';
16
+ error?: string;
17
+ pathsExistence?: PathExistenceResult[];
18
+ pathsPermissions?: PathPermissionsResult[];
19
+ cleanedUpFiles?: CleanedUpFilesResult[];
20
+ databaseCorruption?: DatabaseCorruptionResult;
21
+ portAvailability?: PortAvailabilityResult[];
22
+ installedFFmpegs?: FFmpegExistenceResult[];
23
+ orphanedProcesses?: OrphanedProcessesResult[];
24
+ }
25
+ export declare class SelfCheck {
26
+ private logger;
27
+ private configService;
28
+ private config;
29
+ constructor(config?: Partial<SelfCheckConfig>);
30
+ run(): Promise<void>;
31
+ private performChecks;
32
+ private checkForCriticalIssues;
33
+ private checkForNonCriticalIssues;
34
+ private saveCheckReport;
35
+ private generateCheckReport;
36
+ private formatIssues;
37
+ private formatPathsExistence;
38
+ private formatPathsPermissions;
39
+ private formatCleanedUpFiles;
40
+ private formatDatabaseCorruption;
41
+ private formatPortAvailability;
42
+ private formatFfmpegBinaries;
43
+ private formatOrphanedProcesses;
44
+ private sanitizeDetails;
45
+ private serializeError;
46
+ private getPathName;
47
+ private isCriticalPath;
48
+ }
@@ -218,17 +218,17 @@ export declare const extensionsSettingsSchema: zod.ZodObject<{
218
218
  }>;
219
219
  export declare const streamingModeSchema: zod.ZodUnion<[zod.ZodLiteral<"mse">, zod.ZodLiteral<"webrtc">, zod.ZodLiteral<"webrtc/tcp">, zod.ZodLiteral<"mjpeg">, zod.ZodLiteral<"hls">, zod.ZodLiteral<"mp4">]>;
220
220
  export declare const frameWorkerSettingsSchema: zod.ZodObject<{
221
- decoder: zod.ZodUnion<[zod.ZodLiteral<"pillow">, zod.ZodLiteral<"wasm">]>;
221
+ decoder: zod.ZodUnion<[zod.ZodLiteral<"pillow">, zod.ZodLiteral<"wasm">, zod.ZodLiteral<"rust">]>;
222
222
  fps: zod.ZodNumber;
223
- resolution: zod.ZodUnion<[zod.ZodLiteral<"640">, zod.ZodLiteral<"480">, zod.ZodLiteral<"320">, zod.ZodLiteral<"native">]>;
223
+ resolution: zod.ZodUnion<[zod.ZodLiteral<"3840x2160">, zod.ZodLiteral<"3072x1728">, zod.ZodLiteral<"2560x1440">, zod.ZodLiteral<"1920x1080">, zod.ZodLiteral<"1440x1080">, zod.ZodLiteral<"1280x720">, zod.ZodLiteral<"960x540">, zod.ZodLiteral<"640x480">, zod.ZodLiteral<"640x360">, zod.ZodLiteral<"320x240">, zod.ZodLiteral<"320x180">]>;
224
224
  }, "strip", zod.ZodTypeAny, {
225
- decoder: "pillow" | "wasm";
225
+ decoder: "pillow" | "wasm" | "rust";
226
226
  fps: number;
227
- resolution: "native" | "640" | "480" | "320";
227
+ resolution: "3840x2160" | "3072x1728" | "2560x1440" | "1920x1080" | "1440x1080" | "1280x720" | "960x540" | "640x480" | "640x360" | "320x240" | "320x180";
228
228
  }, {
229
- decoder: "pillow" | "wasm";
229
+ decoder: "pillow" | "wasm" | "rust";
230
230
  fps: number;
231
- resolution: "native" | "640" | "480" | "320";
231
+ resolution: "3840x2160" | "3072x1728" | "2560x1440" | "1920x1080" | "1440x1080" | "1280x720" | "960x540" | "640x480" | "640x360" | "320x240" | "320x180";
232
232
  }>;
233
233
  export declare const cameraTypeSchema: zod.ZodUnion<[zod.ZodLiteral<"camera">, zod.ZodLiteral<"doorbell">]>;
234
234
  export declare const interfaceSettingsSchema: zod.ZodObject<{
@@ -468,17 +468,17 @@ export declare const createCameraSchema: zod.ZodObject<{
468
468
  };
469
469
  }>>;
470
470
  frameWorkerSettings: zod.ZodDefault<zod.ZodObject<{
471
- decoder: zod.ZodUnion<[zod.ZodLiteral<"pillow">, zod.ZodLiteral<"wasm">]>;
471
+ decoder: zod.ZodUnion<[zod.ZodLiteral<"pillow">, zod.ZodLiteral<"wasm">, zod.ZodLiteral<"rust">]>;
472
472
  fps: zod.ZodNumber;
473
- resolution: zod.ZodUnion<[zod.ZodLiteral<"640">, zod.ZodLiteral<"480">, zod.ZodLiteral<"320">, zod.ZodLiteral<"native">]>;
473
+ resolution: zod.ZodUnion<[zod.ZodLiteral<"3840x2160">, zod.ZodLiteral<"3072x1728">, zod.ZodLiteral<"2560x1440">, zod.ZodLiteral<"1920x1080">, zod.ZodLiteral<"1440x1080">, zod.ZodLiteral<"1280x720">, zod.ZodLiteral<"960x540">, zod.ZodLiteral<"640x480">, zod.ZodLiteral<"640x360">, zod.ZodLiteral<"320x240">, zod.ZodLiteral<"320x180">]>;
474
474
  }, "strip", zod.ZodTypeAny, {
475
- decoder: "pillow" | "wasm";
475
+ decoder: "pillow" | "wasm" | "rust";
476
476
  fps: number;
477
- resolution: "native" | "640" | "480" | "320";
477
+ resolution: "3840x2160" | "3072x1728" | "2560x1440" | "1920x1080" | "1440x1080" | "1280x720" | "960x540" | "640x480" | "640x360" | "320x240" | "320x180";
478
478
  }, {
479
- decoder: "pillow" | "wasm";
479
+ decoder: "pillow" | "wasm" | "rust";
480
480
  fps: number;
481
- resolution: "native" | "640" | "480" | "320";
481
+ resolution: "3840x2160" | "3072x1728" | "2560x1440" | "1920x1080" | "1440x1080" | "1280x720" | "960x540" | "640x480" | "640x360" | "320x240" | "320x180";
482
482
  }>>;
483
483
  }, "strict", zod.ZodTypeAny, {
484
484
  pluginId: string;
@@ -523,9 +523,9 @@ export declare const createCameraSchema: zod.ZodObject<{
523
523
  };
524
524
  };
525
525
  frameWorkerSettings: {
526
- decoder: "pillow" | "wasm";
526
+ decoder: "pillow" | "wasm" | "rust";
527
527
  fps: number;
528
- resolution: "native" | "640" | "480" | "320";
528
+ resolution: "3840x2160" | "3072x1728" | "2560x1440" | "1920x1080" | "1440x1080" | "1280x720" | "960x540" | "640x480" | "640x360" | "320x240" | "320x180";
529
529
  };
530
530
  sources: {
531
531
  _id: string;
@@ -602,9 +602,9 @@ export declare const createCameraSchema: zod.ZodObject<{
602
602
  };
603
603
  } | undefined;
604
604
  frameWorkerSettings?: {
605
- decoder: "pillow" | "wasm";
605
+ decoder: "pillow" | "wasm" | "rust";
606
606
  fps: number;
607
- resolution: "native" | "640" | "480" | "320";
607
+ resolution: "3840x2160" | "3072x1728" | "2560x1440" | "1920x1080" | "1440x1080" | "1280x720" | "960x540" | "640x480" | "640x360" | "320x240" | "320x180";
608
608
  } | undefined;
609
609
  extensions?: {
610
610
  plugins: string[];
@@ -820,17 +820,17 @@ export declare const patchCameraSchema: zod.ZodObject<{
820
820
  } | undefined;
821
821
  }>>;
822
822
  frameWorkerSettings: zod.ZodOptional<zod.ZodObject<{
823
- decoder: zod.ZodOptional<zod.ZodUnion<[zod.ZodLiteral<"pillow">, zod.ZodLiteral<"wasm">]>>;
823
+ decoder: zod.ZodOptional<zod.ZodUnion<[zod.ZodLiteral<"pillow">, zod.ZodLiteral<"wasm">, zod.ZodLiteral<"rust">]>>;
824
824
  fps: zod.ZodOptional<zod.ZodNumber>;
825
- resolution: zod.ZodOptional<zod.ZodUnion<[zod.ZodLiteral<"640">, zod.ZodLiteral<"480">, zod.ZodLiteral<"320">, zod.ZodLiteral<"native">]>>;
825
+ resolution: zod.ZodOptional<zod.ZodUnion<[zod.ZodLiteral<"3840x2160">, zod.ZodLiteral<"3072x1728">, zod.ZodLiteral<"2560x1440">, zod.ZodLiteral<"1920x1080">, zod.ZodLiteral<"1440x1080">, zod.ZodLiteral<"1280x720">, zod.ZodLiteral<"960x540">, zod.ZodLiteral<"640x480">, zod.ZodLiteral<"640x360">, zod.ZodLiteral<"320x240">, zod.ZodLiteral<"320x180">]>>;
826
826
  }, "strip", zod.ZodTypeAny, {
827
- decoder?: "pillow" | "wasm" | undefined;
827
+ decoder?: "pillow" | "wasm" | "rust" | undefined;
828
828
  fps?: number | undefined;
829
- resolution?: "native" | "640" | "480" | "320" | undefined;
829
+ resolution?: "3840x2160" | "3072x1728" | "2560x1440" | "1920x1080" | "1440x1080" | "1280x720" | "960x540" | "640x480" | "640x360" | "320x240" | "320x180" | undefined;
830
830
  }, {
831
- decoder?: "pillow" | "wasm" | undefined;
831
+ decoder?: "pillow" | "wasm" | "rust" | undefined;
832
832
  fps?: number | undefined;
833
- resolution?: "native" | "640" | "480" | "320" | undefined;
833
+ resolution?: "3840x2160" | "3072x1728" | "2560x1440" | "1920x1080" | "1440x1080" | "1280x720" | "960x540" | "640x480" | "640x360" | "320x240" | "320x180" | undefined;
834
834
  }>>;
835
835
  }, "strict", zod.ZodTypeAny, {
836
836
  type?: "camera" | "doorbell" | undefined;
@@ -868,9 +868,9 @@ export declare const patchCameraSchema: zod.ZodObject<{
868
868
  } | undefined;
869
869
  } | undefined;
870
870
  frameWorkerSettings?: {
871
- decoder?: "pillow" | "wasm" | undefined;
871
+ decoder?: "pillow" | "wasm" | "rust" | undefined;
872
872
  fps?: number | undefined;
873
- resolution?: "native" | "640" | "480" | "320" | undefined;
873
+ resolution?: "3840x2160" | "3072x1728" | "2560x1440" | "1920x1080" | "1440x1080" | "1280x720" | "960x540" | "640x480" | "640x360" | "320x240" | "320x180" | undefined;
874
874
  } | undefined;
875
875
  sources?: {
876
876
  _id: string;
@@ -931,9 +931,9 @@ export declare const patchCameraSchema: zod.ZodObject<{
931
931
  } | undefined;
932
932
  } | undefined;
933
933
  frameWorkerSettings?: {
934
- decoder?: "pillow" | "wasm" | undefined;
934
+ decoder?: "pillow" | "wasm" | "rust" | undefined;
935
935
  fps?: number | undefined;
936
- resolution?: "native" | "640" | "480" | "320" | undefined;
936
+ resolution?: "3840x2160" | "3072x1728" | "2560x1440" | "1920x1080" | "1440x1080" | "1280x720" | "960x540" | "640x480" | "640x360" | "320x240" | "320x180" | undefined;
937
937
  } | undefined;
938
938
  sources?: {
939
939
  name: string;