@evercam/api 1.0.0-ae97ae0a0 → 1.0.0-api-fixes-7de7fc3dd

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 (40) hide show
  1. package/dist/api/api/adminApi.d.ts +61 -57
  2. package/dist/api/api/aiApi.d.ts +1 -0
  3. package/dist/api/api/evercamApi.d.ts +26 -29
  4. package/dist/api/api/ingestApi.d.ts +3 -0
  5. package/dist/api/types/aconex.d.ts +2 -1
  6. package/dist/api/types/admin.d.ts +20 -4
  7. package/dist/api/types/analytics.d.ts +2 -1
  8. package/dist/api/types/anpr.d.ts +0 -1
  9. package/dist/api/types/auditLogs.d.ts +44 -37
  10. package/dist/api/types/bim.d.ts +48 -37
  11. package/dist/api/types/camera.d.ts +56 -43
  12. package/dist/api/types/comments.d.ts +24 -16
  13. package/dist/api/types/company.d.ts +23 -12
  14. package/dist/api/types/compare.d.ts +27 -23
  15. package/dist/api/types/hdd.d.ts +58 -24
  16. package/dist/api/types/kit.d.ts +19 -15
  17. package/dist/api/types/media.d.ts +13 -0
  18. package/dist/api/types/notification.d.ts +34 -28
  19. package/dist/api/types/nvr.d.ts +28 -0
  20. package/dist/api/types/oauth.d.ts +1 -0
  21. package/dist/api/types/progressPhoto.d.ts +24 -21
  22. package/dist/api/types/project.d.ts +57 -14
  23. package/dist/api/types/recording.d.ts +4 -3
  24. package/dist/api/types/roi.d.ts +2 -1
  25. package/dist/api/types/router.d.ts +23 -2
  26. package/dist/api/types/shared.d.ts +50 -43
  27. package/dist/api/types/sim.d.ts +1 -4
  28. package/dist/api/types/snapshots.d.ts +55 -8
  29. package/dist/api/types/storageProvider.d.ts +15 -3
  30. package/dist/api/types/timelapse.d.ts +38 -12
  31. package/dist/api/types/user.d.ts +76 -64
  32. package/dist/api/types/videoWall.d.ts +8 -8
  33. package/dist/api/types/weather.d.ts +90 -16
  34. package/dist/api/types/widget.d.ts +56 -47
  35. package/dist/index.js +259 -238
  36. package/dist/index.js.map +1 -1
  37. package/dist/index.umd.cjs +1 -1
  38. package/dist/index.umd.cjs.map +1 -1
  39. package/dist/shared/types/components.d.ts +6 -1
  40. package/package.json +1 -1
@@ -21,11 +21,12 @@ export type BimModelRequestPayload = {
21
21
  apiId?: string;
22
22
  };
23
23
  export type BimModelResponsePayload = {
24
- dates?: [string];
24
+ id?: number;
25
+ dates?: string[] | null;
25
26
  height?: number;
26
27
  imageUrl?: string;
27
28
  model?: string;
28
- models?: [string];
29
+ models?: string[];
29
30
  rotation?: number;
30
31
  scaleX?: number;
31
32
  scaleY?: number;
@@ -40,13 +41,13 @@ export type BimCompareExportRequestPayload = {
40
41
  cameraExid: string;
41
42
  snapshotDate: string;
42
43
  bimDate: string;
43
- embed: string;
44
+ embed?: string;
44
45
  compareExid: string;
45
- createAnimation: boolean;
46
- bimTransparency?: number;
47
- model?: string;
48
- layerId?: number;
49
- maskId?: number;
46
+ createAnimation?: boolean;
47
+ bimTransparency: number;
48
+ model: string;
49
+ layerId: number;
50
+ maskId: number;
50
51
  evercamWatermark?: boolean;
51
52
  logo?: CompareLogoPosition;
52
53
  };
@@ -66,16 +67,16 @@ export declare enum BimUploadStatus {
66
67
  }
67
68
  export type BimCreationPayload = {
68
69
  title: string;
69
- software: "synchro" | "navisworks" | "revit" | "tekla" | "archicad" | "solibri" | "bim360" | "other";
70
- model: string;
71
- apiKey: string;
72
- apiId: string;
73
- displayName: string;
74
70
  fileUrl: string;
75
- requestor: string;
76
- finalView: boolean;
77
- enableDistortion: boolean;
78
- startAt: string;
71
+ software?: "navisworks" | "synchro";
72
+ model?: string;
73
+ apiKey?: string;
74
+ apiId?: string;
75
+ displayName?: string;
76
+ requestor?: string;
77
+ finalView?: boolean;
78
+ enableDistortion?: boolean;
79
+ startAt?: string;
79
80
  };
80
81
  export declare enum BIMLayerTypes {
81
82
  Mask = "mask",
@@ -93,49 +94,51 @@ export declare enum BIMLayerTypes {
93
94
  ForgeBimMep = "forge_bim_mep"
94
95
  }
95
96
  export type BimLayersQueryParams = {
96
- layerType: BIMLayerTypes;
97
- timestamp: DateType;
97
+ layerType?: BIMLayerTypes;
98
+ timestamp?: DateType;
98
99
  };
99
100
  export type BIMLayerPostPayload = {
100
- name: string;
101
- layerType: BIMLayerTypes;
102
- startAt: DateType;
103
101
  shapes: string;
104
- zIndex: number;
102
+ startAt: DateType;
103
+ name?: string;
104
+ displayName?: string;
105
+ layerType?: BIMLayerTypes;
106
+ zIndex?: number;
105
107
  };
106
108
  export type BIMLayer = {
107
109
  id: number;
108
110
  name: string;
109
111
  layerType: BIMLayerTypes;
112
+ displayName?: string | null;
110
113
  startAt: DateType;
111
114
  insertedAt: DateType;
112
115
  updatedAt: DateType;
113
116
  shapes: string;
114
117
  };
115
118
  export type BimPendingImage = {
116
- url: string;
117
- s3Url: string;
119
+ url?: string;
120
+ key?: string;
118
121
  };
119
122
  export type BimUploadCameraParameters = {
120
- distortionFov: [number];
121
- horizontalFov: number;
122
- verticalFov: number;
123
- focalLength1: number;
124
- focalLength2: number;
125
- centerX: number;
126
- centerY: number;
123
+ distortionCoeffs?: number[][];
124
+ horizontalFov?: number;
125
+ verticalFov?: number;
126
+ focalLength1?: number;
127
+ focalLength2?: number;
128
+ centerX?: number;
129
+ centerY?: number;
127
130
  };
128
131
  export type PendingBimImagesParams = {
129
132
  model: string;
130
- apiKey: string;
131
- apiId: string;
133
+ apiKey?: string;
134
+ apiId?: string;
132
135
  };
133
136
  export type ProcessPendingImagesBimParams = {
134
137
  model: string;
135
138
  names: string[];
136
- enableDistortion: boolean;
137
- apiId: string;
138
- apiKey: string;
139
+ enableDistortion?: boolean;
140
+ apiId?: string;
141
+ apiKey?: string;
139
142
  };
140
143
  export type BimUploadsQueryParams = {
141
144
  page: number;
@@ -168,3 +171,11 @@ export declare enum ForgeBimDialogTrigger {
168
171
  AddModel = "add_model",
169
172
  InitialSetup = "initial_setup"
170
173
  }
174
+ export type BimUpdatedWebhookPayload = {
175
+ eventName: "bim.updated";
176
+ projectId: string;
177
+ data: {
178
+ updatedAt: string;
179
+ bimIdentifier: string;
180
+ };
181
+ };
@@ -1,4 +1,4 @@
1
- import { AuditLogActionType, DateType, EntityByExid, KitAlarm, NvrDeviceType, PaginationParams, PowerSchedule, PowerType, ProjectExid, ProjectFeatureFlag, Schedule, ScheduleLowercase, TimestampPositionCoordinates } from "@evercam/api/types";
1
+ import { AuditLogActionType, DateType, EntityByExid, KitAlarm, NvrDeviceType, NvrHddStatus, PaginationParams, PowerSchedule, PowerType, ProjectExid, ProjectFeatureFlag, Schedule, ScheduleLowercase, StorageProvider, TimestampPositionCoordinates } from "@evercam/api/types";
2
2
  import { DateRangeFilter } from "@evercam/api/types/time";
3
3
  import { GeoPoint, TuplePoint2D } from "@evercam/api/types/shared";
4
4
  export type CameraExid = string;
@@ -148,13 +148,20 @@ export type AdminCamera = {
148
148
  cloudRecordingStorageDuration?: number | null;
149
149
  liveViewFrequency?: number | null;
150
150
  anprSources?: string[];
151
- storageProviders?: string[];
151
+ storageProviders?: StorageProvider[];
152
152
  featureFlags?: CameraFeatureFlag[];
153
153
  zohoId?: string | null;
154
154
  offlineReason?: string | null;
155
155
  macAddress?: string | null;
156
156
  type?: string[];
157
157
  thumbnailUrl?: string;
158
+ channel?: string | null;
159
+ nvrSnapshotUrl?: string | null;
160
+ ptz?: boolean;
161
+ hddInfo?: Record<string, unknown>[];
162
+ cameraFirmwareVersion?: string | null;
163
+ cameraTimezone?: string | null;
164
+ resolution?: string | null;
158
165
  };
159
166
  export type CameraMapMarker = {
160
167
  isOnline: boolean;
@@ -215,7 +222,7 @@ export type CameraLogsRequestPayload = {
215
222
  export type CameraUpdateRequestPayload = {
216
223
  status?: string;
217
224
  timezone?: string;
218
- isPuclic?: boolean;
225
+ isPublic?: boolean;
219
226
  discoverable?: boolean;
220
227
  fullname?: string;
221
228
  lastOnline?: string;
@@ -264,6 +271,7 @@ export type CameraStatusLog = {
264
271
  start: string;
265
272
  end: string;
266
273
  state: CameraStatus;
274
+ status?: string;
267
275
  };
268
276
  export type Log = {
269
277
  details: {
@@ -343,6 +351,10 @@ export type CameraPath = {
343
351
  export type CheckCameraPortPayload = {
344
352
  address: string;
345
353
  port: number;
354
+ };
355
+ export type CheckCameraPortResponse = {
356
+ address: string;
357
+ port: number;
346
358
  open: boolean;
347
359
  };
348
360
  export type CameraCreateRequestPayload = {
@@ -401,10 +413,8 @@ export type CameraNote = {
401
413
  insertedAt: DateType;
402
414
  };
403
415
  export type CreateCameraNotePayload = {
404
- id?: number;
405
- cameraExid: CameraExid;
406
- customMessage: string;
407
- action: string;
416
+ noteType: string;
417
+ content: string;
408
418
  };
409
419
  export declare enum HddStatus {
410
420
  Error = "error",
@@ -414,11 +424,11 @@ export declare enum HddStatus {
414
424
  Ok = "ok"
415
425
  }
416
426
  export type NvrQueryParams = PaginationParams & {
417
- ownerId: number;
418
- cameraName: string;
419
- cameraExid: CameraExid;
420
- cameraIp: string;
421
- hddStatus: HddStatus;
427
+ ownerId?: number;
428
+ cameraName?: string;
429
+ cameraExid?: CameraExid;
430
+ cameraIp?: string;
431
+ hddStatus?: NvrHddStatus[];
422
432
  };
423
433
  export type OfflineCamera = {
424
434
  id: number;
@@ -447,14 +457,14 @@ export type OfflineCamera = {
447
457
  }[];
448
458
  };
449
459
  export type OfflineCameraQueryParams = PaginationParams & {
450
- status: CameraStatus;
451
- cameraExid: CameraExid;
452
- cameraName: string;
453
- timezone: string;
454
- cameraOwner: string;
455
- powerType: PowerType;
456
- powerSchedule: PowerSchedule;
457
- batteryReadingsLastVoltage: number;
460
+ status?: CameraStatus;
461
+ cameraExid?: CameraExid;
462
+ cameraName?: string;
463
+ timezone?: string;
464
+ cameraOwner?: string;
465
+ powerType?: PowerType;
466
+ powerSchedule?: PowerSchedule;
467
+ batteryReadingsLastVoltage?: number;
458
468
  };
459
469
  export type OfflineCameraNote = {
460
470
  action: AuditLogActionType;
@@ -504,29 +514,32 @@ export type MergeDuplicatedCameraPayload = {
504
514
  shareeCameras: Record<string, unknown>;
505
515
  };
506
516
  export type FetchCameraQueryParams = PaginationParams & {
507
- status: CameraStatus;
508
- isPublic: boolean;
509
- featureFlags: CameraFeatureFlag[];
510
- ptz: boolean;
511
- frequency: number;
512
- channel: number;
513
- cameraExid: CameraExid;
514
- cameraExids: CameraExid[];
515
- cameraName: string;
516
- projectName: string;
517
- timezone: string;
518
- region: string;
519
- cameraModel: CameraModel;
520
- nvrModel: NvrModel;
521
- cameraOwner: string;
522
- ownerEmail: string;
523
- isRecording: boolean;
524
- cloudRecordingStorageDuration: number;
525
- cameraIds: string;
526
- hasLocation: boolean;
527
- externalHttpPort: string;
528
- externalRsptPort: string;
529
- nvrHttpPort: string;
517
+ status?: CameraStatus;
518
+ statuses?: string[];
519
+ isPublic?: boolean;
520
+ featureFlags?: CameraFeatureFlag[];
521
+ ptz?: boolean;
522
+ frequency?: number;
523
+ channel?: number;
524
+ cameraExid?: CameraExid;
525
+ cameraExids?: CameraExid[];
526
+ cameraName?: string;
527
+ projectName?: string;
528
+ timezone?: string;
529
+ region?: string;
530
+ cameraModel?: CameraModel;
531
+ nvrModel?: NvrModel;
532
+ cameraOwner?: string;
533
+ ownerEmail?: string;
534
+ isRecording?: boolean;
535
+ cloudRecordingStorageDuration?: number;
536
+ cameraIds?: string;
537
+ hasLocation?: boolean;
538
+ externalHttpPort?: string;
539
+ externalRtspPort?: string;
540
+ nvrHttpPort?: string;
541
+ createdAtFrom?: string;
542
+ createdAtTo?: string;
530
543
  };
531
544
  export declare enum BimType {
532
545
  TwoD = "2D",
@@ -1,18 +1,22 @@
1
1
  import { CameraExid, DateType, ProjectExid, PaginationParams, TuplePoint3D, TuplePoint2D } from "@evercam/api/types";
2
2
  export declare enum CommentsScope {
3
3
  Recordings = "recordings",
4
+ Project = "project",
4
5
  ThreeSixty = "360",
5
6
  Drone = "drone",
7
+ Bim = "bim",
6
8
  Timeline = "timeline"
7
9
  }
8
10
  export declare enum CommentsLabel {
9
11
  Info = "Info",
10
12
  Danger = "Danger",
11
- Restricted = "Restricted"
13
+ Restricted = "Restricted",
14
+ Hyperlink = "Hyperlink"
12
15
  }
13
16
  export type CommentsRequestPayload = {
14
- scope: CommentsScope;
17
+ scope?: CommentsScope;
15
18
  cameraExid?: CameraExid;
19
+ archived?: "true" | "false";
16
20
  };
17
21
  export type CommentsListRequestPayload = PaginationParams & {
18
22
  projectExid?: ProjectExid;
@@ -25,30 +29,34 @@ export type CommentsListRequestPayload = PaginationParams & {
25
29
  includeArchived?: boolean;
26
30
  };
27
31
  export type Comment = {
28
- fromDate?: string;
29
- toDate?: string;
30
- timestamp: string;
31
- projectExid: ProjectExid;
32
- updatedAt?: string;
33
32
  id?: number;
34
- cameraExid: CameraExid;
35
- content: string;
33
+ cameraExid?: CameraExid;
34
+ content?: string;
35
+ scope?: CommentsScope;
36
+ visibility?: string[];
37
+ timestamp?: string;
38
+ fromTimestamp?: string;
39
+ toTimestamp?: string;
40
+ label?: CommentsLabel;
41
+ position2d?: TuplePoint2D;
42
+ position3d?: TuplePoint3D;
36
43
  createdAt?: string;
44
+ archivedAt?: string;
37
45
  creatorEmail?: string;
38
46
  creatorName?: string;
39
- position2d?: TuplePoint2D;
40
- position3d?: TuplePoint3D;
41
47
  context?: Record<string, unknown>;
48
+ projectExid?: ProjectExid;
49
+ updatedAt?: string;
42
50
  canDelete?: boolean;
43
- archivedAt?: string;
44
- label?: CommentsLabel;
45
51
  };
46
52
  export type CommentCreationRequestPayload = {
47
- fromDate?: DateType;
48
- toDate?: DateType;
53
+ fromTimestamp?: DateType;
54
+ toTimestamp?: DateType;
49
55
  timestamp?: DateType;
50
56
  scope?: CommentsScope;
51
- projectExid: ProjectExid;
57
+ visibility?: string[];
58
+ label?: CommentsLabel;
59
+ projectExid?: ProjectExid;
52
60
  cameraExid?: CameraExid;
53
61
  content: string;
54
62
  position2d?: TuplePoint2D;
@@ -4,8 +4,7 @@ export type CompanyUser = {
4
4
  fullname: string;
5
5
  email: string;
6
6
  eventsCount: number;
7
- lastSeenAt: string;
8
- active: boolean;
7
+ lastLoginAt: string | null;
9
8
  };
10
9
  export type AdminCompanyUser = {
11
10
  id: number;
@@ -14,10 +13,14 @@ export type AdminCompanyUser = {
14
13
  lastLoginAt: string;
15
14
  };
16
15
  export type CompanyProject = {
16
+ id: number;
17
17
  exid: string;
18
18
  name: string;
19
- status: string;
20
- startedAt: DateType;
19
+ status: string | null;
20
+ archiveTier: string | null;
21
+ insertedAt: DateType;
22
+ startDate: DateType | null;
23
+ endDate: DateType | null;
21
24
  };
22
25
  export type AdminCompanyProject = {
23
26
  id: number;
@@ -95,16 +98,18 @@ export type CompanyCameraSummary = {
95
98
  ownerEmail: string;
96
99
  ownerFullname: string;
97
100
  usersCount: number;
101
+ apiId?: string;
102
+ apiKey?: string;
98
103
  };
99
104
  export type CompanyQueryParams = PaginationParams & {
100
- name: string;
101
- exid: string;
102
- domains: string;
103
- projects: string;
104
- cameras: string;
105
- users: string;
106
- activeUsers: string;
107
- sessions: string;
105
+ name?: string;
106
+ exid?: string;
107
+ domains?: string;
108
+ projects?: string;
109
+ cameras?: string;
110
+ users?: string;
111
+ sessions?: string;
112
+ activeUsers?: string;
108
113
  };
109
114
  export type CompanyUpdatePayload = {
110
115
  name: string;
@@ -113,3 +118,9 @@ export type CompanyUpdatePayload = {
113
118
  domains?: string;
114
119
  zohoId?: string;
115
120
  };
121
+ export type CompanyUpdateResponse = {
122
+ name?: string;
123
+ exid?: string;
124
+ domains?: string;
125
+ zohoId?: string;
126
+ };
@@ -1,26 +1,29 @@
1
1
  import { DateType, PaginationParams } from "@evercam/api/types";
2
2
  export type Compare = {
3
+ id: number;
4
+ exid: string;
3
5
  cameraExid: string;
6
+ title: string;
7
+ fromDate: string;
8
+ toDate: string;
4
9
  createdAt: string;
10
+ status: string;
11
+ requesterEmail: string;
12
+ requesterName: string;
5
13
  embedCode: string;
6
- embedTime: boolean;
7
- fileName: string;
8
- frames: number;
9
- fromDate: string;
10
- id: number;
11
- exid: string;
12
- mediaUrls: {
14
+ public: boolean;
15
+ notes?: string | null;
16
+ category?: string | null;
17
+ isUrgent?: boolean;
18
+ embedTime?: boolean;
19
+ fileName?: string;
20
+ frames?: number;
21
+ mediaUrls?: {
13
22
  gif: string;
14
23
  mp4: string;
15
24
  };
16
- public: boolean;
17
- requesterEmail: string;
18
- requesterName: string;
19
- status: string;
20
- thumbnailUrl: string;
21
- title: string;
22
- toDate: string;
23
- type: string;
25
+ thumbnailUrl?: string;
26
+ type?: string;
24
27
  };
25
28
  export declare enum CompareStatus {
26
29
  Processing = 0,
@@ -32,17 +35,17 @@ export type CompareRequestPayload = {
32
35
  name: string;
33
36
  beforeDate: string;
34
37
  afterDate: string;
35
- cameraExid: string;
36
38
  embed: string;
39
+ cameraExid?: string;
37
40
  bim?: boolean;
38
41
  custom?: boolean;
39
42
  options?: {
40
- type: string;
41
- beforeSnap: string;
42
- afterSnap: string;
43
+ type?: string;
44
+ beforeSnap?: string;
45
+ afterSnap?: string;
43
46
  };
44
- createAnimation: boolean;
45
- evercamWatermark: boolean;
47
+ createAnimation?: boolean;
48
+ evercamWatermark?: boolean;
46
49
  logo?: CompareLogoPosition;
47
50
  };
48
51
  export type CompareLogoPosition = {
@@ -67,6 +70,7 @@ export type AdminCompare = {
67
70
  insertedAt: DateType;
68
71
  };
69
72
  export type AdminCompareQueryParams = PaginationParams & {
70
- name: string;
71
- camera: string;
73
+ name?: string;
74
+ camera?: string;
75
+ sort?: string;
72
76
  };
@@ -38,28 +38,37 @@ export declare enum HddSize {
38
38
  TenTB = "10 TB"
39
39
  }
40
40
  export type FootageCreateUpdatePayload = {
41
- cameraId: string;
41
+ cameraId?: number;
42
+ hddId?: number;
42
43
  startDate: string;
43
- endDate: string;
44
+ endDate?: string;
44
45
  };
45
46
  export type HDDCreateUpdatePayload = {
46
- size: string;
47
- type: string;
48
- format: string;
49
- locationId: string;
50
- serialNumber: string;
51
- hddStatus: string;
52
- shelfBlock: string;
47
+ locationId: number;
48
+ kitId?: number | null;
49
+ serialNumber?: string;
50
+ size?: string;
51
+ hddStatus?: string;
52
+ type?: string;
53
+ shelfBlock?: string;
54
+ format?: string;
55
+ errorStatus?: string;
56
+ reportedCapacity?: string;
57
+ reportedFreeSpace?: string;
58
+ reportedProperty?: string;
59
+ reportedPath?: string;
60
+ reportedHddType?: string;
53
61
  };
54
62
  export type HDDsQueryParams = PaginationParams & {
55
- id: number;
56
- location: string;
57
- serialNumber: string;
58
- shelfBlock: string;
59
- format: string;
60
- size: string;
61
- type: string;
62
- hddStatus: string;
63
+ id?: number;
64
+ location?: string;
65
+ serialNumber?: string;
66
+ shelfBlock?: string;
67
+ format?: string;
68
+ size?: string;
69
+ type?: string;
70
+ hddStatus?: string;
71
+ sort?: string;
63
72
  };
64
73
  export type AdminHddFootage = {
65
74
  id: number;
@@ -70,19 +79,44 @@ export type AdminHddFootage = {
70
79
  };
71
80
  export type AdminHdd = {
72
81
  id: number;
73
- size: string;
74
- type: string;
75
- format: string;
76
- location: string;
82
+ size: string | null;
83
+ type: string | null;
84
+ format: string | null;
85
+ location: string | null;
77
86
  errorStatus: string | null;
78
87
  createdAt: string;
79
- serialNumber: string;
80
- hddStatus: string;
88
+ serialNumber: string | null;
89
+ hddStatus: string | null;
81
90
  reportedCapacity: string | null;
82
91
  reportedFreeSpace: string | null;
83
92
  reportedHddType: string | null;
84
93
  reportedPath: string | null;
85
94
  reportedProperty: string | null;
86
- shelfBlock: string;
95
+ shelfBlock: string | null;
87
96
  footages: AdminHddFootage[];
88
97
  };
98
+ export type HddDetail = {
99
+ id: number;
100
+ locationId: number | null;
101
+ kitId: number | null;
102
+ serialNumber: string | null;
103
+ size: string | null;
104
+ hddStatus: string | null;
105
+ type: string | null;
106
+ shelfBlock: string | null;
107
+ format: string | null;
108
+ errorStatus: string | null;
109
+ reportedCapacity: string | null;
110
+ reportedFreeSpace: string | null;
111
+ reportedProperty: string | null;
112
+ reportedPath: string | null;
113
+ reportedHddType: string | null;
114
+ createdAt: string;
115
+ };
116
+ export type HddFootageItem = {
117
+ id: number;
118
+ cameraId: number | null;
119
+ hddId: number | null;
120
+ startDate: string;
121
+ endDate: string | null;
122
+ };