@3deye-toolkit/core 0.0.1 → 0.0.3-alpha.0
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.
- package/dist/core.d.ts +403 -60
- package/dist/core.js +1 -1
- package/dist/tsdoc-metadata.json +1 -1
- package/package.json +8 -5
package/dist/core.d.ts
CHANGED
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
/// <reference types="react" />
|
|
2
|
-
|
|
3
1
|
import { BehaviorSubject } from 'rxjs';
|
|
4
2
|
import crossfilter from 'crossfilter2';
|
|
5
3
|
import type { IReactionDisposer } from 'mobx';
|
|
@@ -7,6 +5,7 @@ import { Observable } from 'rxjs';
|
|
|
7
5
|
import { default as React_2 } from 'react';
|
|
8
6
|
import { Subject } from 'rxjs';
|
|
9
7
|
import { Subscription } from 'rxjs';
|
|
8
|
+
import { z } from 'zod';
|
|
10
9
|
|
|
11
10
|
declare class AccountStore extends ApiStore {
|
|
12
11
|
private notification?;
|
|
@@ -26,13 +25,42 @@ declare class AccountStore extends ApiStore {
|
|
|
26
25
|
firstName: string;
|
|
27
26
|
lastName: string;
|
|
28
27
|
}): Observable<RawUser>;
|
|
29
|
-
|
|
28
|
+
updateUserLanguage(languageCode: string): Observable<RawUser>;
|
|
29
|
+
updateCustomPreferences: (preferences: Partial<Preferences>) => Observable<RawUser>;
|
|
30
30
|
setDefaultGroup(groupId: number): Observable<RawUser> | undefined;
|
|
31
|
-
|
|
31
|
+
get preferences(): Preferences;
|
|
32
|
+
getPreference: <T extends PREFERENCES>(key: T) => {
|
|
33
|
+
utc: boolean;
|
|
34
|
+
hour12: boolean;
|
|
35
|
+
startOfWeek: "monday" | "sunday";
|
|
36
|
+
defaultVideoResizeMode?: VideoResizeMode | undefined;
|
|
37
|
+
camerasResizeMode?: [number, VideoResizeMode][] | undefined;
|
|
38
|
+
fisheyeCameras?: [number, [number, number, number] | {
|
|
39
|
+
params: {
|
|
40
|
+
x: number;
|
|
41
|
+
y: number;
|
|
42
|
+
r: number;
|
|
43
|
+
s: number;
|
|
44
|
+
};
|
|
45
|
+
positions?: [{
|
|
46
|
+
lat: number;
|
|
47
|
+
lon: number;
|
|
48
|
+
fov: number;
|
|
49
|
+
}, {
|
|
50
|
+
lat: number;
|
|
51
|
+
lon: number;
|
|
52
|
+
fov: number;
|
|
53
|
+
}, {
|
|
54
|
+
lat: number;
|
|
55
|
+
lon: number;
|
|
56
|
+
fov: number;
|
|
57
|
+
}] | undefined;
|
|
58
|
+
} | null][] | undefined;
|
|
59
|
+
}[T];
|
|
32
60
|
private retryOnVersionMismatch;
|
|
33
61
|
}
|
|
34
62
|
|
|
35
|
-
declare class Api<T
|
|
63
|
+
declare class Api<T extends DeepPartial<IApi>> {
|
|
36
64
|
[key: string]: any;
|
|
37
65
|
static create<T extends PartialApi>(apiConfig: T | null, authStore: Auth, createConnection: (accessToken: string) => Connection): Api<T> & ExtractHubs<IApi, T>;
|
|
38
66
|
connectionShutdown$: Subject<null>;
|
|
@@ -180,6 +208,7 @@ declare class Auth {
|
|
|
180
208
|
agreedWithTerms?: boolean;
|
|
181
209
|
code?: string;
|
|
182
210
|
}) => Promise<Token> | undefined;
|
|
211
|
+
signInWithToken: (token: RawToken) => void;
|
|
183
212
|
invalidateToken: () => void;
|
|
184
213
|
getTokenFromStorage(): Promise<Token | null>;
|
|
185
214
|
private storeToken;
|
|
@@ -197,6 +226,13 @@ declare interface AuthStoreOptions {
|
|
|
197
226
|
clientId: string;
|
|
198
227
|
}
|
|
199
228
|
|
|
229
|
+
declare interface BoundingBox {
|
|
230
|
+
Left: number;
|
|
231
|
+
Top: number;
|
|
232
|
+
Right: number;
|
|
233
|
+
Bottom: number;
|
|
234
|
+
}
|
|
235
|
+
|
|
200
236
|
declare interface Box {
|
|
201
237
|
Top: number;
|
|
202
238
|
Left: number;
|
|
@@ -210,10 +246,7 @@ declare class Camera {
|
|
|
210
246
|
imageUrl: string;
|
|
211
247
|
streamUrl: string;
|
|
212
248
|
dashStreamUrl: string;
|
|
213
|
-
address:
|
|
214
|
-
Lat: number;
|
|
215
|
-
Lng: number;
|
|
216
|
-
} | null;
|
|
249
|
+
address: CameraAddress | null;
|
|
217
250
|
archiveDuration: number;
|
|
218
251
|
dvrWindowLength: number;
|
|
219
252
|
stateUpdatedAt: Date;
|
|
@@ -229,31 +262,56 @@ declare class Camera {
|
|
|
229
262
|
get supportsWebRTC(): boolean;
|
|
230
263
|
constructor(raw: RawCamera);
|
|
231
264
|
update: (raw: RawCamera) => void;
|
|
265
|
+
can: (permission: CameraPermissions) => number;
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
declare interface CameraAddress {
|
|
269
|
+
Lat: number;
|
|
270
|
+
Lng: number;
|
|
271
|
+
Country: string;
|
|
272
|
+
State: string;
|
|
273
|
+
City: string;
|
|
274
|
+
Address: string;
|
|
232
275
|
}
|
|
233
276
|
|
|
234
277
|
declare class CameraEvent {
|
|
278
|
+
id: number;
|
|
235
279
|
cameraId: number;
|
|
236
280
|
type: EventType;
|
|
237
281
|
raw: RawSensorEvent;
|
|
238
282
|
thumbnailUrl: string;
|
|
283
|
+
thumbnailWidth: number;
|
|
284
|
+
thumbnailHeight: number;
|
|
239
285
|
detectedObjects: DetectedObject[];
|
|
240
286
|
faces: Face[];
|
|
241
287
|
instant: boolean;
|
|
242
|
-
get id(): number;
|
|
243
288
|
get startTime(): Date;
|
|
244
289
|
get endTime(): Date;
|
|
245
290
|
get isLive(): boolean;
|
|
246
291
|
get acknowledged(): boolean;
|
|
292
|
+
update: (raw: RawSensorEvent) => void;
|
|
247
293
|
constructor(raw: RawSensorEvent);
|
|
248
294
|
}
|
|
249
295
|
|
|
296
|
+
declare const enum CameraPermissions {
|
|
297
|
+
View = 1,
|
|
298
|
+
SaveClip = 2,
|
|
299
|
+
Share = 4,
|
|
300
|
+
Ptz = 8,
|
|
301
|
+
EditSettings = 16,
|
|
302
|
+
Timelapse = 32,
|
|
303
|
+
Delete = 64
|
|
304
|
+
}
|
|
305
|
+
|
|
250
306
|
declare class CamerasStore extends ApiStore {
|
|
251
307
|
camerasById: Map<number, Camera>;
|
|
252
308
|
data: Camera[];
|
|
253
309
|
loading: boolean;
|
|
254
310
|
loaded: boolean;
|
|
311
|
+
pendingLoadRequest?: Observable<RawCamera[]>;
|
|
312
|
+
requestsCanceler: Subject<void>;
|
|
255
313
|
constructor();
|
|
256
|
-
load: () => Observable<RawCamera[]
|
|
314
|
+
load: () => Observable<RawCamera[]>;
|
|
257
315
|
add: (cameras: RawCamera[]) => void;
|
|
258
316
|
sync: () => Observable<RawCamera[]>;
|
|
259
317
|
protected afterInit(): void;
|
|
@@ -273,6 +331,16 @@ declare interface CamgroupItem {
|
|
|
273
331
|
order: number;
|
|
274
332
|
}
|
|
275
333
|
|
|
334
|
+
declare interface Car {
|
|
335
|
+
Type: 'Car';
|
|
336
|
+
BodyType?: string;
|
|
337
|
+
Box: BoundingBox;
|
|
338
|
+
Probability: number;
|
|
339
|
+
Colors?: {
|
|
340
|
+
Color: string;
|
|
341
|
+
}[];
|
|
342
|
+
}
|
|
343
|
+
|
|
276
344
|
declare interface Chunk {
|
|
277
345
|
json?: string;
|
|
278
346
|
startTime: Date;
|
|
@@ -287,6 +355,44 @@ declare interface ChunksQuery {
|
|
|
287
355
|
to: Date;
|
|
288
356
|
}
|
|
289
357
|
|
|
358
|
+
declare class Clip {
|
|
359
|
+
id: number;
|
|
360
|
+
cameraId: number;
|
|
361
|
+
name: string;
|
|
362
|
+
startTime: Date;
|
|
363
|
+
endTime: Date;
|
|
364
|
+
type: 'Archive' | 'Timelaps' | 'Timelaps to do';
|
|
365
|
+
createdAt: Date;
|
|
366
|
+
/**
|
|
367
|
+
* clip duration in seconds
|
|
368
|
+
*/
|
|
369
|
+
duration: number;
|
|
370
|
+
chunks: ArchiveChunk[];
|
|
371
|
+
clipUrl?: string;
|
|
372
|
+
description: string;
|
|
373
|
+
version: string;
|
|
374
|
+
raw: RawClip;
|
|
375
|
+
isDownloading: boolean;
|
|
376
|
+
archives?: ArchiveChunk[];
|
|
377
|
+
constructor(raw: RawClip);
|
|
378
|
+
get isTimelapse(): boolean;
|
|
379
|
+
update(raw: RawClip): void;
|
|
380
|
+
}
|
|
381
|
+
|
|
382
|
+
declare interface ClipParams {
|
|
383
|
+
cameraId: number;
|
|
384
|
+
startTime: Date;
|
|
385
|
+
endTime: Date;
|
|
386
|
+
name: string;
|
|
387
|
+
description?: string;
|
|
388
|
+
}
|
|
389
|
+
|
|
390
|
+
declare interface ClipsQuery {
|
|
391
|
+
cameraId: number;
|
|
392
|
+
from: Date;
|
|
393
|
+
to: Date;
|
|
394
|
+
}
|
|
395
|
+
|
|
290
396
|
declare interface Connection {
|
|
291
397
|
state: CONNECTION_STATE;
|
|
292
398
|
stop: () => void;
|
|
@@ -321,21 +427,14 @@ declare type DeepPartial<T> = {
|
|
|
321
427
|
[K in keyof T]?: DeepPartial<T[K]>;
|
|
322
428
|
};
|
|
323
429
|
|
|
324
|
-
declare
|
|
325
|
-
Type:
|
|
326
|
-
|
|
327
|
-
Number?: string;
|
|
328
|
-
Box: {
|
|
329
|
-
Left: number;
|
|
330
|
-
Top: number;
|
|
331
|
-
Right: number;
|
|
332
|
-
Bottom: number;
|
|
333
|
-
};
|
|
430
|
+
declare type DetectedObject = Car | LicensePlate | {
|
|
431
|
+
Type: 'Person' | 'Animal' | 'Bicycle' | 'Luggage' | 'Boat' | 'HardHat' | 'NoHardHat' | 'Fire' | 'Smoke' | 'Face';
|
|
432
|
+
Box: BoundingBox;
|
|
334
433
|
Probability: number;
|
|
335
434
|
Colors?: {
|
|
336
435
|
Color: string;
|
|
337
436
|
}[];
|
|
338
|
-
}
|
|
437
|
+
};
|
|
339
438
|
|
|
340
439
|
declare interface DetectedObjectOption {
|
|
341
440
|
id: string;
|
|
@@ -387,10 +486,10 @@ declare class EventsStore extends ApiStore {
|
|
|
387
486
|
pendingRequestsByEnd: crossfilter.Dimension<PendingRequest, number>;
|
|
388
487
|
pendingRequestsByStart: crossfilter.Dimension<PendingRequest, number>;
|
|
389
488
|
pendingRequestsByCameraId: crossfilter.Dimension<PendingRequest, number>;
|
|
390
|
-
knownIntervals: crossfilter.Crossfilter<
|
|
391
|
-
knownIntervalsByCameraId: crossfilter.Dimension<
|
|
392
|
-
knownIntervalsByStart: crossfilter.Dimension<
|
|
393
|
-
knownIntervalsByEnd: crossfilter.Dimension<
|
|
489
|
+
knownIntervals: crossfilter.Crossfilter<Interval>;
|
|
490
|
+
knownIntervalsByCameraId: crossfilter.Dimension<Interval, number>;
|
|
491
|
+
knownIntervalsByStart: crossfilter.Dimension<Interval, number>;
|
|
492
|
+
knownIntervalsByEnd: crossfilter.Dimension<Interval, number>;
|
|
394
493
|
eventsById: Map<number, CameraEvent>;
|
|
395
494
|
updates: number;
|
|
396
495
|
/**
|
|
@@ -447,7 +546,7 @@ declare class EventsStore extends ApiStore {
|
|
|
447
546
|
dispose(): void;
|
|
448
547
|
}
|
|
449
548
|
|
|
450
|
-
declare type EventType = 'Motion' | 'Tampering' | 'PanTiltZoom' | 'CrossLine' | 'Intrusion' | 'LicensePlate' | 'FaceDetection' | 'Audio' | 'Analytic' | 'SpeedDetection' | 'PeopleCounter' | 'Temperature' | 'PoS' | 'GPS' | 'DigitalInput' | 'Normal' | 'Suspicious' | 'Loitering' | 'Vandalism' | 'Trespass' | 'Emergency' | 'LifeInDanger' | 'ErroneousAlert' | 'Misidentification' | 'Fire' | 'MedicalDuress' | 'HoldUp' | 'CheckIn' | 'CheckOut' | 'ClockIn' | 'ClockOut' | 'ParkingStart' | 'ParkingEnd' | 'ParkingViolation' | 'GateAccess' | 'DoorAccess' | 'TemperatureCheck' | 'IDCheck' | 'PPECheck' | 'WelfareCheck' | '
|
|
549
|
+
declare type EventType = 'Motion' | 'Tampering' | 'PanTiltZoom' | 'CrossLine' | 'Intrusion' | 'LicensePlate' | 'FaceDetection' | 'Audio' | 'Analytic' | 'SpeedDetection' | 'PeopleCounter' | 'Temperature' | 'PoS' | 'GPS' | 'DigitalInput' | 'Normal' | 'Suspicious' | 'Loitering' | 'Vandalism' | 'Trespass' | 'Emergency' | 'LifeInDanger' | 'ErroneousAlert' | 'Misidentification' | 'Fire' | 'MedicalDuress' | 'HoldUp' | 'CheckIn' | 'CheckOut' | 'ClockIn' | 'ClockOut' | 'ParkingStart' | 'ParkingEnd' | 'ParkingViolation' | 'GateAccess' | 'DoorAccess' | 'TemperatureCheck' | 'IDCheck' | 'PPECheck' | 'WelfareCheck' | 'VehicleBreakIn' | 'DrugTrafficking' | 'Assault' | 'PackageDelivery' | 'Uncategorized';
|
|
451
550
|
|
|
452
551
|
declare type ExtractHubs<T, K> = {
|
|
453
552
|
[P in keyof ExtractMethods<T, K>]: ExtractMethods<T[P], K[P]>;
|
|
@@ -492,9 +591,13 @@ declare interface IApi {
|
|
|
492
591
|
DeleteClip: (params: any) => Observable<any>;
|
|
493
592
|
SaveClip: (params: any) => Observable<any>;
|
|
494
593
|
SaveTimelaps: (params: any) => Observable<any>;
|
|
495
|
-
SaveArchive: (params: any) => Observable<
|
|
496
|
-
DeleteArchive: (params:
|
|
497
|
-
|
|
594
|
+
SaveArchive: (params: any) => Observable<ApiResult<RawClip>>;
|
|
595
|
+
DeleteArchive: (params: {
|
|
596
|
+
id: number;
|
|
597
|
+
cameraId: number;
|
|
598
|
+
version: string;
|
|
599
|
+
}) => Observable<ApiResult<RawClip>>;
|
|
600
|
+
ShareClip: (sharedClip: PartialExcept<RawSharedClip, 'name' | 'description' | 'recordId' | 'validTo'>) => Observable<ApiResult<RawSharedClip>>;
|
|
498
601
|
GetSharedClips: (recordId: number | null) => Observable<ApiResult<RawSharedClip>>;
|
|
499
602
|
UpdateSharedClip: (sharedClip: RawSharedClip) => Observable<ApiResult<RawSharedClip>>;
|
|
500
603
|
DeleteSharedClip: (recordId: number) => Observable<ApiResult<RawSharedClip>>;
|
|
@@ -507,6 +610,9 @@ declare interface IApi {
|
|
|
507
610
|
GetSensorDataSchema: (eventType: EventType) => Observable<any>;
|
|
508
611
|
GetSensorEvents: (params: SensorEventsParams, filter: string, box: Box) => Observable<ApiResult<RawSensorEvent>>;
|
|
509
612
|
GetSensorEventsPage: (request: SensorEventsRequest, filter: string | null, searchPolygons: string[]) => Observable<ApiPageResult<RawSensorEvent>>;
|
|
613
|
+
GetPeopleCountingData: (cameraId: number, startTime: Date, endTime: Date, box: Box) => Observable<ApiResult<RawPeopleCountingData>>;
|
|
614
|
+
GetLicensePlateLookUp: (value: string, limit: number) => Observable<ApiResult<string>>;
|
|
615
|
+
GetSensorEventsLprPage: (query: object, plates: string[]) => Observable<ApiPageResult<RawSensorEvent>>;
|
|
510
616
|
AddUserSensorEvent: (event: PartialExcept<RawSensorEvent, 'id' | 'eventType' | 'message'>) => Observable<ApiResult<RawSensorEvent>>;
|
|
511
617
|
AcknowledgeSensorEvent: (event: PartialExcept<RawSensorEvent, 'id' | 'ackEventType' | 'message'>) => Observable<ApiResult<RawSensorEvent>>;
|
|
512
618
|
MoveCamera: (camera: {
|
|
@@ -540,18 +646,18 @@ declare interface IApi {
|
|
|
540
646
|
from: Date;
|
|
541
647
|
to: Date;
|
|
542
648
|
count: number;
|
|
543
|
-
}) => Observable<
|
|
649
|
+
}) => Observable<ApiResult<RawThumbnail>>;
|
|
544
650
|
GetThumbnailInfo: (params: {
|
|
545
651
|
cameraId: number;
|
|
546
652
|
from: Date;
|
|
547
653
|
to: Date;
|
|
548
|
-
}) => Observable<
|
|
654
|
+
}) => Observable<ApiResult<RawThumbnail>>;
|
|
549
655
|
GetHeatMapsInfo: (params: {
|
|
550
656
|
cameraId: number;
|
|
551
657
|
from: Date;
|
|
552
658
|
to: Date;
|
|
553
659
|
count: number;
|
|
554
|
-
}) => Observable<
|
|
660
|
+
}) => Observable<ApiResult<RawHeatmap>>;
|
|
555
661
|
};
|
|
556
662
|
users: {
|
|
557
663
|
GetUser: () => Observable<ApiResult<RawUser>>;
|
|
@@ -570,22 +676,67 @@ declare interface InitParams {
|
|
|
570
676
|
tokenServiceUrl?: string;
|
|
571
677
|
}
|
|
572
678
|
|
|
573
|
-
declare interface
|
|
679
|
+
declare interface Interval {
|
|
574
680
|
cameraId: number;
|
|
575
681
|
from: Date;
|
|
576
682
|
to: Date;
|
|
577
683
|
}
|
|
578
684
|
|
|
579
685
|
declare type IntervalState = {
|
|
580
|
-
state: '
|
|
686
|
+
state: 'fulfilled';
|
|
581
687
|
data: Thumbnail;
|
|
582
688
|
} | {
|
|
583
689
|
state: 'pending';
|
|
584
|
-
request: Observable<
|
|
690
|
+
request: Observable<Thumbnail[]>;
|
|
585
691
|
};
|
|
586
692
|
|
|
693
|
+
declare class LibraryStore extends ApiStore {
|
|
694
|
+
private notification?;
|
|
695
|
+
data: crossfilter.Crossfilter<Clip>;
|
|
696
|
+
clipsByCameraId: crossfilter.Dimension<Clip, number>;
|
|
697
|
+
clipsByCreationDate: crossfilter.Dimension<Clip, number>;
|
|
698
|
+
clipsByStart: crossfilter.Dimension<Clip, number>;
|
|
699
|
+
clipsByEnd: crossfilter.Dimension<Clip, number>;
|
|
700
|
+
clipsByType: crossfilter.Dimension<Clip, string>;
|
|
701
|
+
clipsById: crossfilter.Dimension<Clip, number>;
|
|
702
|
+
clipsMap: Map<number, Clip>;
|
|
703
|
+
loaded: boolean;
|
|
704
|
+
loading: boolean;
|
|
705
|
+
updates: number;
|
|
706
|
+
constructor(notification?: NotificationService | undefined);
|
|
707
|
+
/**
|
|
708
|
+
* Fetches all clips from the server and updates the store
|
|
709
|
+
*/
|
|
710
|
+
fetch(): Observable<Clip[]>;
|
|
711
|
+
add: (clips: Clip[]) => void;
|
|
712
|
+
addOrUpdate: (clips: Clip[]) => void;
|
|
713
|
+
removeFromStore: (clips: {
|
|
714
|
+
id: number;
|
|
715
|
+
}[]) => void;
|
|
716
|
+
getClips({ cameraId, from, to }: ClipsQuery): Clip[];
|
|
717
|
+
getTimelapses(): Clip[];
|
|
718
|
+
getRecentlyAdded(): Clip[];
|
|
719
|
+
all(): Clip[];
|
|
720
|
+
getOnly(type: 'clips' | 'timelapses' | null, sortDirection?: 'asc' | 'desc'): Clip[];
|
|
721
|
+
createClip: (data: ClipParams) => void;
|
|
722
|
+
createTimelapse: (data: TimelapseParams) => void;
|
|
723
|
+
rename(clip: Clip, name: string): void;
|
|
724
|
+
delete(clip: Clip): void;
|
|
725
|
+
protected afterInit(): void;
|
|
726
|
+
dispose(): void;
|
|
727
|
+
}
|
|
728
|
+
|
|
729
|
+
declare interface LicensePlate {
|
|
730
|
+
Type: 'LicensePlate';
|
|
731
|
+
Value: string;
|
|
732
|
+
Number: string;
|
|
733
|
+
ParentIndex: number;
|
|
734
|
+
Box: BoundingBox;
|
|
735
|
+
Probability: number;
|
|
736
|
+
}
|
|
737
|
+
|
|
587
738
|
declare interface NotificationOptions_2 {
|
|
588
|
-
|
|
739
|
+
duration: number;
|
|
589
740
|
}
|
|
590
741
|
|
|
591
742
|
declare class NotificationService implements Notifier {
|
|
@@ -642,9 +793,177 @@ declare interface PendingRequest_2 {
|
|
|
642
793
|
from: Date;
|
|
643
794
|
to: Date;
|
|
644
795
|
count: number;
|
|
645
|
-
request: Observable<
|
|
796
|
+
request: Observable<Thumbnail[]>;
|
|
797
|
+
}
|
|
798
|
+
|
|
799
|
+
declare enum PREFERENCES {
|
|
800
|
+
DEFAULT_VIDEO_RESIZE_MODE = "defaultVideoResizeMode",
|
|
801
|
+
RESIZE_MODE_PER_CAMERA = "camerasResizeMode",
|
|
802
|
+
FISHEYE_CAMERAS = "fisheyeCameras",
|
|
803
|
+
UTC = "utc",
|
|
804
|
+
HOUR12 = "hour12",
|
|
805
|
+
START_OF_WEEK = "startOfWeek"
|
|
646
806
|
}
|
|
647
807
|
|
|
808
|
+
declare type Preferences = z.infer<typeof preferencesSchema>;
|
|
809
|
+
|
|
810
|
+
declare const preferencesSchema: z.ZodObject<{
|
|
811
|
+
defaultVideoResizeMode: z.ZodOptional<z.ZodNativeEnum<typeof VideoResizeMode>>;
|
|
812
|
+
camerasResizeMode: z.ZodOptional<z.ZodArray<z.ZodTuple<[z.ZodNumber, z.ZodNativeEnum<typeof VideoResizeMode>], null>, "many">>;
|
|
813
|
+
fisheyeCameras: z.ZodOptional<z.ZodArray<z.ZodTuple<[z.ZodNumber, z.ZodUnion<[z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>, z.ZodObject<{
|
|
814
|
+
params: z.ZodObject<{
|
|
815
|
+
x: z.ZodNumber;
|
|
816
|
+
y: z.ZodNumber;
|
|
817
|
+
r: z.ZodNumber;
|
|
818
|
+
s: z.ZodNumber;
|
|
819
|
+
}, "strip", z.ZodTypeAny, {
|
|
820
|
+
x: number;
|
|
821
|
+
y: number;
|
|
822
|
+
r: number;
|
|
823
|
+
s: number;
|
|
824
|
+
}, {
|
|
825
|
+
x: number;
|
|
826
|
+
y: number;
|
|
827
|
+
r: number;
|
|
828
|
+
s: number;
|
|
829
|
+
}>;
|
|
830
|
+
positions: z.ZodOptional<z.ZodTuple<[z.ZodObject<{
|
|
831
|
+
lat: z.ZodNumber;
|
|
832
|
+
lon: z.ZodNumber;
|
|
833
|
+
fov: z.ZodNumber;
|
|
834
|
+
}, "strip", z.ZodTypeAny, {
|
|
835
|
+
lat: number;
|
|
836
|
+
lon: number;
|
|
837
|
+
fov: number;
|
|
838
|
+
}, {
|
|
839
|
+
lat: number;
|
|
840
|
+
lon: number;
|
|
841
|
+
fov: number;
|
|
842
|
+
}>, z.ZodObject<{
|
|
843
|
+
lat: z.ZodNumber;
|
|
844
|
+
lon: z.ZodNumber;
|
|
845
|
+
fov: z.ZodNumber;
|
|
846
|
+
}, "strip", z.ZodTypeAny, {
|
|
847
|
+
lat: number;
|
|
848
|
+
lon: number;
|
|
849
|
+
fov: number;
|
|
850
|
+
}, {
|
|
851
|
+
lat: number;
|
|
852
|
+
lon: number;
|
|
853
|
+
fov: number;
|
|
854
|
+
}>, z.ZodObject<{
|
|
855
|
+
lat: z.ZodNumber;
|
|
856
|
+
lon: z.ZodNumber;
|
|
857
|
+
fov: z.ZodNumber;
|
|
858
|
+
}, "strip", z.ZodTypeAny, {
|
|
859
|
+
lat: number;
|
|
860
|
+
lon: number;
|
|
861
|
+
fov: number;
|
|
862
|
+
}, {
|
|
863
|
+
lat: number;
|
|
864
|
+
lon: number;
|
|
865
|
+
fov: number;
|
|
866
|
+
}>], null>>;
|
|
867
|
+
}, "strip", z.ZodTypeAny, {
|
|
868
|
+
params: {
|
|
869
|
+
x: number;
|
|
870
|
+
y: number;
|
|
871
|
+
r: number;
|
|
872
|
+
s: number;
|
|
873
|
+
};
|
|
874
|
+
positions?: [{
|
|
875
|
+
lat: number;
|
|
876
|
+
lon: number;
|
|
877
|
+
fov: number;
|
|
878
|
+
}, {
|
|
879
|
+
lat: number;
|
|
880
|
+
lon: number;
|
|
881
|
+
fov: number;
|
|
882
|
+
}, {
|
|
883
|
+
lat: number;
|
|
884
|
+
lon: number;
|
|
885
|
+
fov: number;
|
|
886
|
+
}] | undefined;
|
|
887
|
+
}, {
|
|
888
|
+
params: {
|
|
889
|
+
x: number;
|
|
890
|
+
y: number;
|
|
891
|
+
r: number;
|
|
892
|
+
s: number;
|
|
893
|
+
};
|
|
894
|
+
positions?: [{
|
|
895
|
+
lat: number;
|
|
896
|
+
lon: number;
|
|
897
|
+
fov: number;
|
|
898
|
+
}, {
|
|
899
|
+
lat: number;
|
|
900
|
+
lon: number;
|
|
901
|
+
fov: number;
|
|
902
|
+
}, {
|
|
903
|
+
lat: number;
|
|
904
|
+
lon: number;
|
|
905
|
+
fov: number;
|
|
906
|
+
}] | undefined;
|
|
907
|
+
}>, z.ZodNull]>], null>, "many">>;
|
|
908
|
+
utc: z.ZodDefault<z.ZodBoolean>;
|
|
909
|
+
hour12: z.ZodDefault<z.ZodBoolean>;
|
|
910
|
+
startOfWeek: z.ZodDefault<z.ZodEnum<["monday", "sunday"]>>;
|
|
911
|
+
}, "strip", z.ZodTypeAny, {
|
|
912
|
+
utc: boolean;
|
|
913
|
+
hour12: boolean;
|
|
914
|
+
startOfWeek: "monday" | "sunday";
|
|
915
|
+
defaultVideoResizeMode?: VideoResizeMode | undefined;
|
|
916
|
+
camerasResizeMode?: [number, VideoResizeMode][] | undefined;
|
|
917
|
+
fisheyeCameras?: [number, [number, number, number] | {
|
|
918
|
+
params: {
|
|
919
|
+
x: number;
|
|
920
|
+
y: number;
|
|
921
|
+
r: number;
|
|
922
|
+
s: number;
|
|
923
|
+
};
|
|
924
|
+
positions?: [{
|
|
925
|
+
lat: number;
|
|
926
|
+
lon: number;
|
|
927
|
+
fov: number;
|
|
928
|
+
}, {
|
|
929
|
+
lat: number;
|
|
930
|
+
lon: number;
|
|
931
|
+
fov: number;
|
|
932
|
+
}, {
|
|
933
|
+
lat: number;
|
|
934
|
+
lon: number;
|
|
935
|
+
fov: number;
|
|
936
|
+
}] | undefined;
|
|
937
|
+
} | null][] | undefined;
|
|
938
|
+
}, {
|
|
939
|
+
defaultVideoResizeMode?: VideoResizeMode | undefined;
|
|
940
|
+
camerasResizeMode?: [number, VideoResizeMode][] | undefined;
|
|
941
|
+
fisheyeCameras?: [number, [number, number, number] | {
|
|
942
|
+
params: {
|
|
943
|
+
x: number;
|
|
944
|
+
y: number;
|
|
945
|
+
r: number;
|
|
946
|
+
s: number;
|
|
947
|
+
};
|
|
948
|
+
positions?: [{
|
|
949
|
+
lat: number;
|
|
950
|
+
lon: number;
|
|
951
|
+
fov: number;
|
|
952
|
+
}, {
|
|
953
|
+
lat: number;
|
|
954
|
+
lon: number;
|
|
955
|
+
fov: number;
|
|
956
|
+
}, {
|
|
957
|
+
lat: number;
|
|
958
|
+
lon: number;
|
|
959
|
+
fov: number;
|
|
960
|
+
}] | undefined;
|
|
961
|
+
} | null][] | undefined;
|
|
962
|
+
utc?: boolean | undefined;
|
|
963
|
+
hour12?: boolean | undefined;
|
|
964
|
+
startOfWeek?: "monday" | "sunday" | undefined;
|
|
965
|
+
}>;
|
|
966
|
+
|
|
648
967
|
declare interface RawCamera {
|
|
649
968
|
id: number;
|
|
650
969
|
customerId: number;
|
|
@@ -705,27 +1024,18 @@ declare interface RawCamera {
|
|
|
705
1024
|
declare interface RawCamgroup {
|
|
706
1025
|
id: number;
|
|
707
1026
|
name: string | null;
|
|
708
|
-
|
|
709
|
-
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
dynamic: boolean;
|
|
713
|
-
allowDuplicates: boolean;
|
|
714
|
-
allowDrop: boolean;
|
|
715
|
-
allowNodeDropInView: boolean;
|
|
716
|
-
visible: boolean;
|
|
717
|
-
layout_id: string;
|
|
718
|
-
contentFilter: null;
|
|
719
|
-
customerWideGroup: boolean;
|
|
1027
|
+
description: string | null;
|
|
1028
|
+
imageUrl: string | null;
|
|
1029
|
+
layoutId: string | null;
|
|
1030
|
+
layout_id: string | null;
|
|
720
1031
|
cameras: CamgroupItem[];
|
|
721
1032
|
camgroups: CamgroupItem[];
|
|
722
1033
|
version: string;
|
|
723
|
-
order: number;
|
|
724
1034
|
}
|
|
725
1035
|
|
|
726
1036
|
declare interface RawClip {
|
|
727
1037
|
id: number;
|
|
728
|
-
recordType:
|
|
1038
|
+
recordType: 'Archive' | 'Timelaps' | 'Timelaps to do';
|
|
729
1039
|
isReady: boolean;
|
|
730
1040
|
name: string;
|
|
731
1041
|
description: string;
|
|
@@ -742,6 +1052,24 @@ declare interface RawClip {
|
|
|
742
1052
|
version: string;
|
|
743
1053
|
}
|
|
744
1054
|
|
|
1055
|
+
declare interface RawHeatmap {
|
|
1056
|
+
url: string;
|
|
1057
|
+
timestamp: string;
|
|
1058
|
+
minMotion: number;
|
|
1059
|
+
maxMotion: number;
|
|
1060
|
+
}
|
|
1061
|
+
|
|
1062
|
+
declare interface RawPeopleCountingData {
|
|
1063
|
+
EventId: number;
|
|
1064
|
+
TimeStamp: Date;
|
|
1065
|
+
Motions: number;
|
|
1066
|
+
Left: number;
|
|
1067
|
+
Top: number;
|
|
1068
|
+
Right: number;
|
|
1069
|
+
Bottom: number;
|
|
1070
|
+
timestamp: Date;
|
|
1071
|
+
}
|
|
1072
|
+
|
|
745
1073
|
declare interface RawSensorEvent {
|
|
746
1074
|
message: string;
|
|
747
1075
|
data: string | null;
|
|
@@ -775,6 +1103,12 @@ declare interface RawSharedClip {
|
|
|
775
1103
|
validTo: string | Date;
|
|
776
1104
|
}
|
|
777
1105
|
|
|
1106
|
+
declare interface RawThumbnail {
|
|
1107
|
+
timestamp: string;
|
|
1108
|
+
realtimestamp: string;
|
|
1109
|
+
url: string;
|
|
1110
|
+
}
|
|
1111
|
+
|
|
778
1112
|
declare type RawToken = {
|
|
779
1113
|
accessToken: string;
|
|
780
1114
|
accessTokenExpires: string;
|
|
@@ -895,8 +1229,11 @@ declare enum SensorEventType {
|
|
|
895
1229
|
IDCheck = 37,
|
|
896
1230
|
PPECheck = 38,
|
|
897
1231
|
WelfareCheck = 39,
|
|
898
|
-
|
|
899
|
-
|
|
1232
|
+
VehicleBreakIn = 40,
|
|
1233
|
+
DrugTrafficking = 41,
|
|
1234
|
+
Assault = 42,
|
|
1235
|
+
PackageDelivery = 43,
|
|
1236
|
+
Uncategorized = 999
|
|
900
1237
|
}
|
|
901
1238
|
|
|
902
1239
|
declare interface Storage_2 {
|
|
@@ -910,8 +1247,6 @@ declare interface Thumbnail {
|
|
|
910
1247
|
timestamp: Date;
|
|
911
1248
|
realTimestamp: Date;
|
|
912
1249
|
url: string;
|
|
913
|
-
width: number;
|
|
914
|
-
height: number;
|
|
915
1250
|
}
|
|
916
1251
|
|
|
917
1252
|
declare class ThumbnailsStore extends ApiStore {
|
|
@@ -933,7 +1268,7 @@ declare class ThumbnailsStore extends ApiStore {
|
|
|
933
1268
|
* @param to - end of the period
|
|
934
1269
|
* @param count - number of thumbnails
|
|
935
1270
|
*/
|
|
936
|
-
fetchThumbnails(cameraId: number, from: Date, to: Date, count: number)
|
|
1271
|
+
fetchThumbnails: (cameraId: number, from: Date, to: Date, count: number) => Observable<Thumbnail[]>;
|
|
937
1272
|
getIntervalState(cameraId: number, from: Date, to: Date): IntervalState | null;
|
|
938
1273
|
fetchThumbnail(cameraId: number, from: Date, to: Date): Observable<Thumbnail>;
|
|
939
1274
|
/**
|
|
@@ -944,14 +1279,16 @@ declare class ThumbnailsStore extends ApiStore {
|
|
|
944
1279
|
* Returns previously obtained thumbnails for given camera within period
|
|
945
1280
|
*/
|
|
946
1281
|
getThumbnails({ cameraId, from, to }: GetThumbnailParams): Thumbnail[];
|
|
947
|
-
toThumbnail: (cameraId: number) => ({ realtimestamp, url
|
|
1282
|
+
toThumbnail: (cameraId: number) => ({ realtimestamp, url }: {
|
|
948
1283
|
realtimestamp: string;
|
|
949
1284
|
url: string;
|
|
950
|
-
width: number;
|
|
951
|
-
height: number;
|
|
952
1285
|
}) => Thumbnail;
|
|
953
1286
|
}
|
|
954
1287
|
|
|
1288
|
+
declare type TimelapseParams = ClipParams & {
|
|
1289
|
+
duration: number;
|
|
1290
|
+
};
|
|
1291
|
+
|
|
955
1292
|
declare class Token {
|
|
956
1293
|
accessToken: string;
|
|
957
1294
|
accessTokenExpires: Date;
|
|
@@ -980,6 +1317,7 @@ declare class ToolkitApp {
|
|
|
980
1317
|
thumbnails: ThumbnailsStore;
|
|
981
1318
|
account: AccountStore;
|
|
982
1319
|
notification: NotificationService;
|
|
1320
|
+
library: LibraryStore;
|
|
983
1321
|
auth: Auth;
|
|
984
1322
|
api: Api<IApi> & IApi;
|
|
985
1323
|
private disposables;
|
|
@@ -998,4 +1336,9 @@ declare class ToolkitApp {
|
|
|
998
1336
|
|
|
999
1337
|
declare type User = RawUser;
|
|
1000
1338
|
|
|
1339
|
+
declare enum VideoResizeMode {
|
|
1340
|
+
Fit = "contain",
|
|
1341
|
+
Stretch = "fill"
|
|
1342
|
+
}
|
|
1343
|
+
|
|
1001
1344
|
export { }
|
package/dist/core.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{reaction as e,computed as t,runInAction as r,makeObservable as n,observable as i,action as a,when as s}from"mobx";import{Subject as o,BehaviorSubject as l,switchMap as u,EMPTY as c,timer as d,filter as h,delay as f,take as b,mergeMap as p,catchError as v,throwError as m,takeUntil as y,Observable as g,of as w,retryWhen as j,startWith as O,pairwise as I,concatMap as k,Subscription as P,share as A,shareReplay as C,skip as T,exhaustMap as B,map as S}from"rxjs";import _ from"jqueryless-signalr";import{StatusCodes as E}from"http-status-codes";import{mergeMap as R,shareReplay as q,retry as U,filter as D,map as x,tap as N,expand as M,last as F,share as z}from"rxjs/operators";import G from"crossfilter2";import L from"string-natural-compare";import $ from"react";const W={archives:{PopulateArchive:null,GetArchives:null,GetClips:null,UpdateClip:null,DeleteClip:null,SaveClip:null,SaveTimelaps:null,SaveArchive:null,DeleteArchive:null,ShareClip:null,GetSharedClips:null,UpdateSharedClip:null,DeleteSharedClip:null},cameras:{GetCameras:null,UpdateCamera:null,GetSensorDataSchema:null,GetSensorEvents:null,GetSensorEventsPage:null,AddUserSensorEvent:null,AcknowledgeSensorEvent:null,MoveCamera:null,MoveCameraContinuousStart:null,MoveCameraContinuousStop:null,GoHomePtzCamera:null,SetHomePtzCamera:null},camgroups:{GetCamgroups:null,DeleteCamgroup:null,AddCamgroup:null,UpdateCamgroup:null},sound:{GetPushSoundServiceUrl:null},thumbnails:{GetThumbnailsInfo:null,GetThumbnailInfo:null,GetHeatMapsInfo:null},users:{GetUser:null,UserUpdateProfile:null}},V={cameras:[{name:"OnCameraMotionEvent",explicit:!0},{name:"OnCameraAdded"},{name:"OnCameraUpdated"},{name:"OnSystemCameraUpdated"},{name:"OnCameraDeleted"}],users:[{name:"OnUserUpdateProfile"}],camgroups:[{name:"OnAdd"},{name:"OnUpdate"},{name:"OnDelete"}],archives:[{name:"OnTimelapsAdded"},{name:"OnClipAdded"},{name:"OnClipUpdated"},{name:"OnClipDeleted"},{name:"OnArchiveAdded"},{name:"OnArchiveUpdated"},{name:"OnArchiveDeleted"},{name:"OnArchiveRecordCreated"}]};var H,J;!function(e){e[e.CONNECTING=0]="CONNECTING",e[e.CONNECTED=1]="CONNECTED",e[e.RECONNECTING=2]="RECONNECTING",e[e.DISCONNECTED=3]="DISCONNECTED"}(H||(H={}));class K{constructor(t,r,n){Object.defineProperty(this,"connectionShutdown$",{enumerable:!0,configurable:!0,writable:!0,value:new o}),Object.defineProperty(this,"connection$",{enumerable:!0,configurable:!0,writable:!0,value:new l(null)}),Object.defineProperty(this,"events",{enumerable:!0,configurable:!0,writable:!0,value:new o}),Object.defineProperty(this,"logging",{enumerable:!0,configurable:!0,writable:!0,value:!1}),Object.defineProperty(this,"authStore",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"createConnection",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"apiConfig",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.apiConfig=t,this.init(),this.createConnection=n,this.authStore=r,e((()=>r.token),(e=>{if(!e)return void this.shutdownConnection();if(e.invalid)return;if(!e.accessToken)return;const t=this.connection$.getValue();t&&t.state!==H.DISCONNECTED?t.qs.access_token=e.accessToken:this.connect(e)})),this.connection$.pipe(u((e=>null!==e||!r.isAuthenticated||r.token&&r.token.invalid?c:(this.logging&&console.warn("disconnected by some reason"),d(5e3)))),h((()=>r.isAuthenticated&&!!r.token&&!r.token.invalid))).subscribe((()=>{this.connect(r.token),this.logging&&console.warn("attempting to reconnect")})),this.connection$.pipe(h(Boolean),f(100)).subscribe(this.subscribeToEvents)}static create(e,t,r){return new K(null!==e?e:W,t,r)}connect(e){if(this.connection$.getValue()&&this.connection$.getValue().state===H.CONNECTED)return;const{accessToken:t}=e,r=this.createConnection(t);Object.keys(this.apiConfig).forEach((e=>r.createHubProxy(e))),Object.entries(V).forEach((([e,t])=>{t&&r.proxies[e]&&t.forEach((({name:t})=>{r.proxies[e].on(t,(r=>this.events.next({hub:e,event:t,data:r})))}))})),r.start().done((()=>{this.logging&&console.warn("connected"),this.connection$.next(r)})).fail((e=>{var t,r,n;401!==(null===(t=e.source)||void 0===t?void 0:t.status)&&403!==(null===(r=e.source)||void 0===r?void 0:r.status)&&409!==(null===(n=e.source)||void 0===n?void 0:n.status)||this.authStore.invalidateToken()})),r.error((e=>{if(e.source&&(401===e.source.status||403===e.source.status||409===e.source.status))return this.logging&&console.warn("authentication error, invalidating token"),this.authStore.invalidateToken()})),r.disconnected((()=>{this.connection$.getValue()?this.logging&&console.warn("disconnected",this.connection$.getValue().lastError):this.logging&&console.warn("disconnected. this connection is already null"),this.connection$.next(null)})),r.reconnecting((()=>console.log("reconnecting"))),r.reconnected((()=>{this.connection$.getValue()===r&&(this.logging&&console.warn("reconnected"),this.connection$.next(r))}))}shutdownConnection(){const e=this.connection$.getValue();e&&e.stop(),this.connectionShutdown$.next(null)}init(){Object.keys(this.apiConfig).forEach((e=>{this[e]={},Object.keys(this.apiConfig[e]).forEach((t=>{this[e][t]=this.createHubMethod(e,t)}))}))}createHubMethod(e,t){const r=this;return function n(...i){return r.connection$.pipe(h(Boolean),h((e=>e.state===H.CONNECTED)),b(1)).pipe(p((r=>new Promise(((n,a)=>{r.proxies[e].invoke(t,...i).done((e=>n(e))).fail((e=>a(e)))})))),v((e=>!e.message||"Connection started reconnecting before invocation result was received."!==e.message&&"Connection was disconnected before invocation result was received."!==e.message?e.message&&e.message.startsWith("Caller is not authorized to invoke the ")?(console.warn(e.message),r.connection$.getValue().stop(),r.authStore.invalidateToken(),n(...i)):m(e):(console.warn(e.message),n(...i)))),y(r.connectionShutdown$))}}subscribeToEvents(e){Object.entries(V).forEach((([t,r])=>{r&&e.proxies[t]&&e.state===H.CONNECTED&&r.filter((({explicit:e})=>e)).forEach((({name:r})=>{e.proxies[t].invoke("SubscribeToEvent",r)}))}))}}class Z{constructor(e){Object.defineProperty(this,"accessToken",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"accessTokenExpires",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"accessTokenIssued",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"clientId",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"expiresIn",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"refreshToken",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"refreshTokenExpires",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"refreshTokenIssued",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"tokenType",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"userName",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"invalid",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"widgetId",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"widgetToken",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"json",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.json=e,this.accessToken=e.access_token||e.accessToken,this.accessTokenExpires=new Date(e.access_token_expires||e.accessTokenExpires),this.accessTokenIssued=new Date(e.access_token_issued||e.accessTokenIssued),this.clientId=e.client_id||e.clientId,this.expiresIn=e.expires_in||e.expiresIn,this.refreshToken=e.refresh_token||e.refreshToken,this.refreshTokenExpires=new Date(e.refresh_token_expires||e.refreshTokenExpires),this.refreshTokenIssued=new Date(e.refresh_token_issued||e.refreshTokenIssued),this.tokenType=e.token_type||e.tokenType,this.userName=e.userName,this.widgetId=e.widgetId,this.widgetToken=e.widgetToken,this.invalid=!1}}class Y{constructor({tokenServiceUrl:e,storage:s,tokenStorageKey:o,deviceInfo:l,clientId:f}){Object.defineProperty(this,"token",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"isAuthenticating",{enumerable:!0,configurable:!0,writable:!0,value:!1}),Object.defineProperty(this,"storage",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"tokenServiceUrl",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"tokenStorageKey",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"deviceInfo",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"clientId",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"pendingUpdateTokenRequest",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"signOut",{enumerable:!0,configurable:!0,writable:!0,value:()=>{this.isAuthenticating||r((()=>this.token=null))}}),Object.defineProperty(this,"signIn",{enumerable:!0,configurable:!0,writable:!0,value:e=>{if(this.isAuthenticating)return;r((()=>this.isAuthenticating=!0)),!1===e.agreedWithTerms&&(e={...e,agreedWithTerms:void 0});return this.fetchToken(e).then((e=>(r((()=>{this.token=e,this.isAuthenticating=!1})),e))).catch((e=>{throw r((()=>{this.isAuthenticating=!1})),e}))}}),Object.defineProperty(this,"invalidateToken",{enumerable:!0,configurable:!0,writable:!0,value:()=>{this.token&&r((()=>{this.token={...this.token,invalid:!0}}))}}),n(this,{token:i.ref,isAuthenticating:i,isAuthenticated:t,signOut:a,invalidateToken:a}),this.isAuthenticating=!0,this.storage=s,this.tokenServiceUrl=e,this.tokenStorageKey=o,this.deviceInfo=l,this.clientId=f;const b=function(e,r=!1){const n=t(e);return new g((e=>{const t=n.observe_((({newValue:t})=>e.next(t)),r);return()=>t()}))}((()=>this.token)),y=b.pipe(u((e=>{if(null===e)return c;const t=w(e).pipe(p((e=>e.widgetId?this.fetchWidgetToken(e):this.updateToken(e.refreshToken))),j((e=>e.pipe(p(((e,t)=>e.status&&![500,502,503,504].includes(e.status)?m((()=>e)):d(2**Math.min(t+1,6)*1e3)))))));if(!e.invalid){const r=Math.max(.75*(+e.accessTokenExpires-Date.now()),0);return d(r).pipe(p((()=>t)))}return t})),v((e=>(console.error(e),r((()=>this.token=null)),y))));y.subscribe((e=>{r((()=>this.token=e))})),b.pipe(O(null),I(),h((([e,t])=>!!(t||!t&&e))),k((([,e])=>this.storeToken(e)))).subscribe(),this.getInitialToken().then((e=>{r((()=>{this.token=e,this.isAuthenticating=!1}))}))}get isAuthenticated(){return Boolean(this.token&&!this.isAuthenticating)}async getTokenFromStorage(){const e=await this.storage.getItem(this.tokenStorageKey);return e?new Z(JSON.parse(e)):null}async storeToken(e){return!e||e.invalid?this.storage.removeItem(this.tokenStorageKey):this.storage.setItem(this.tokenStorageKey,JSON.stringify(e.json))}async getInitialToken(){const e=await this.getTokenFromStorage();return e||null}async fetchToken(e){const t={clientId:this.clientId,device:this.deviceInfo,...e},r=new Headers;r.append("Content-Type","application/json"),r.append("accept","application/json");const n=await fetch(this.tokenServiceUrl,{method:"POST",headers:r,body:JSON.stringify(t)});try{const e=await n.json();return 200!==n.status?Promise.reject({status:n.status,data:e}):new Z(e)}catch(e){return Promise.reject(n)}}async updateToken(e){var t;try{return this.pendingUpdateTokenRequest&&this.pendingUpdateTokenRequest.refreshToken===e||(this.pendingUpdateTokenRequest={refreshToken:e,request:this.fetchToken({refreshToken:e})}),await this.pendingUpdateTokenRequest.request}finally{(null===(t=this.pendingUpdateTokenRequest)||void 0===t?void 0:t.refreshToken)===e&&(this.pendingUpdateTokenRequest=null)}}async fetchWidgetToken(e){const{widgetId:t,widgetToken:r}=e;if(!t||!r)throw new Error("token must contain widgetId and widgetToken");const n={widgetId:t,widgetToken:r},i=new Headers;i.append("Content-Type","application/json"),i.append("accept","application/json");const a=await fetch(this.tokenServiceUrl,{method:"POST",headers:i,body:JSON.stringify(n)});try{const e=await a.json();return 200!==a.status?Promise.reject({status:a.status,data:e}):new Z({widgetId:t,widgetToken:r,...e})}catch(e){return Promise.reject(a)}}}!function(e){e[e.Motion=0]="Motion",e[e.Tampering=1]="Tampering",e[e.PanTiltZoom=2]="PanTiltZoom",e[e.CrossLine=3]="CrossLine",e[e.Intrusion=4]="Intrusion",e[e.LicensePlate=5]="LicensePlate",e[e.FaceDetection=6]="FaceDetection",e[e.Audio=7]="Audio",e[e.Analytic=8]="Analytic",e[e.SpeedDetection=9]="SpeedDetection",e[e.PeopleCounter=10]="PeopleCounter",e[e.Temperature=11]="Temperature",e[e.PoS=12]="PoS",e[e.GPS=13]="GPS",e[e.DigitalInput=14]="DigitalInput",e[e.Normal=15]="Normal",e[e.Suspicious=16]="Suspicious",e[e.Loitering=17]="Loitering",e[e.Vandalism=18]="Vandalism",e[e.Trespass=19]="Trespass",e[e.Emergency=20]="Emergency",e[e.LifeInDanger=21]="LifeInDanger",e[e.ErroneousAlert=22]="ErroneousAlert",e[e.Misidentification=23]="Misidentification",e[e.Fire=24]="Fire",e[e.MedicalDuress=25]="MedicalDuress",e[e.HoldUp=26]="HoldUp",e[e.CheckIn=27]="CheckIn",e[e.CheckOut=28]="CheckOut",e[e.ClockIn=29]="ClockIn",e[e.ClockOut=30]="ClockOut",e[e.ParkingStart=31]="ParkingStart",e[e.ParkingEnd=32]="ParkingEnd",e[e.ParkingViolation=33]="ParkingViolation",e[e.GateAccess=34]="GateAccess",e[e.DoorAccess=35]="DoorAccess",e[e.TemperatureCheck=36]="TemperatureCheck",e[e.IDCheck=37]="IDCheck",e[e.PPECheck=38]="PPECheck",e[e.WelfareCheck=39]="WelfareCheck",e[e.Uncategorized=40]="Uncategorized",e[e.Unknown=999]="Unknown"}(J||(J={}));class Q{constructor(){Object.defineProperty(this,"values",{enumerable:!0,configurable:!0,writable:!0,value:new Map})}getItem(e){return this.values.get(e)||null}setItem(e,t){this.values.set(e,t)}removeItem(e){this.values.delete(e)}}let X=[];class ee{constructor(){Object.defineProperty(this,"api",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"disposables",{enumerable:!0,configurable:!0,writable:!0,value:[]})}initWith(e){this.api=e,this.afterInit&&this.afterInit()}dispose(){this.disposables.forEach((e=>{e instanceof P?e.closed||e.unsubscribe():e()}))}}var te;!function(e){e.DEFAULT_VIDEO_RESIZE_MODE="defaultVideoResizeMode",e.RESIZE_MODE_PER_CAMERA="camerasResizeMode",e.FISHEYE_CAMERAS="fisheyeCameras"}(te||(te={}));class re extends ee{constructor(e){super(),Object.defineProperty(this,"notification",{enumerable:!0,configurable:!0,writable:!0,value:e}),Object.defineProperty(this,"user",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"auth",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"setUser",{enumerable:!0,configurable:!0,writable:!0,value:e=>{this.user=e}}),Object.defineProperty(this,"updateCustomPreferences",{enumerable:!0,configurable:!0,writable:!0,value:e=>{const t=w(null).pipe(R((()=>{if(!this.user)return m((()=>"user is not initialized"));const t={id:this.user.id,jsonField:JSON.stringify({...JSON.parse(this.user.jsonField||"{}"),...e}),version:this.user.version};return this.api.users.UserUpdateProfile(t)})),R((e=>e.success?w(e.resultItems[0]):m((()=>e.error)))),this.retryOnVersionMismatch(),q());return t.subscribe((e=>{this.setUser(e)})),t}}),Object.defineProperty(this,"getPreference",{enumerable:!0,configurable:!0,writable:!0,value:e=>{var t;try{return JSON.parse((null===(t=this.user)||void 0===t?void 0:t.jsonField)||"{}")[e]}catch{return null}}}),Object.defineProperty(this,"retryOnVersionMismatch",{enumerable:!0,configurable:!0,writable:!0,value:()=>U({delay:(e,t)=>t>1?m((()=>e)):-4===e.code?this.loadUser$():m((()=>e))})}),n(this,{user:i.ref,setUser:a,userDisplayName:t})}get userDisplayName(){return this.user?this.user.firstName&&this.user.firstName.trim()||this.user.lastName&&this.user.lastName.trim()?[this.user.firstName,this.user.lastName].filter(Boolean).join(" ").trim():this.user.email:null}afterInit(){this.disposables.push(this.api.events.pipe(D((({hub:e,event:t})=>"users"===e&&"OnUserUpdateProfile"===t)),x((({data:e})=>e.resultItems[0]))).subscribe(this.setUser))}loadUser$(){return this.api.users.GetUser().pipe(R((e=>e.success?w(e.resultItems[0]):m((()=>e.error)))),N(this.setUser),q(1))}setAuthStore(t){this.auth=t,this.disposables.push(e((()=>this.auth.isAuthenticated),(()=>{this.auth.isAuthenticated&&this.loadUser$().subscribe()})))}async updateUserPassword(e){var t,r;const n=(Array.isArray(X)?X[0]:X).changePasswordUrl,i=null===(r=null===(t=this.auth)||void 0===t?void 0:t.token)||void 0===r?void 0:r.accessToken,a=JSON.stringify({currentPassword:e.previous,newPassword:e.new}),s=new Headers;s.append("content-type","application/json"),s.append("accept","application/json"),s.append("authorization",`bearer ${i}`);const o=await fetch(n,{method:"PUT",headers:s,body:a}),{status:l}=o;if(l!==E.OK){const e=await o.json();throw new Error(e.errors[0].message)}}updateUserSettings({firstName:e,lastName:t}){const r=w(null).pipe(R((()=>{if(!this.user)throw new Error("user is not initialized");return this.api.users.UserUpdateProfile({id:this.user.id,firstName:e,lastName:t,version:this.user.version})})),R((e=>e.success?w(e.resultItems[0]):m((()=>e.error)))),this.retryOnVersionMismatch(),q());return r.subscribe((e=>{this.setUser(e)})),r}setDefaultGroup(e){const t=w(null).pipe(R((()=>{if(!this.user)return m((()=>"user is not initialized"));const t={id:this.user.id,layoutStartId:e,layoutStartType:"camgroup",version:this.user.version};return this.api.users.UserUpdateProfile(t)})),R((e=>e.success?w(e.resultItems[0]):m((()=>e.error)))),this.retryOnVersionMismatch(),q());return t.subscribe({next:e=>{var t;this.setUser(e),null===(t=this.notification)||void 0===t||t.success("Successfully set default group")},error:e=>{var t;console.error(e),null===(t=this.notification)||void 0===t||t.error(e.message)}}),t}}class ne{constructor(e){Object.defineProperty(this,"json",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"startTime",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"endTime",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"streamUrl",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"duration",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"isLive",{enumerable:!0,configurable:!0,writable:!0,value:!1}),Object.defineProperty(this,"cameraId",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.json=JSON.stringify(e,null,2),this.startTime=new Date(e.startTime),this.endTime=new Date(e.endTime),this.streamUrl=e.streamUrl,this.cameraId=e.cameraId,this.duration=e.duration,this.id=e.id}}class ie extends ee{constructor(e){super(),Object.defineProperty(this,"camerasStore",{enumerable:!0,configurable:!0,writable:!0,value:e}),Object.defineProperty(this,"data",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"chunksByCameraId",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"chunksByStart",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"chunksByEnd",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"chunksById",{enumerable:!0,configurable:!0,writable:!0,value:new Map}),Object.defineProperty(this,"pendingRequests",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"pendingRequestsByEnd",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"pendingRequestsByStart",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"pendingRequestsByCameraId",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"knownIntervals",{enumerable:!0,configurable:!0,writable:!0,value:new Map}),Object.defineProperty(this,"updates",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"getClosestChunkRight",{enumerable:!0,configurable:!0,writable:!0,value:({cameraId:e,time:t})=>{this.chunksByCameraId.filter(e),this.chunksByEnd.filter([t,1/0]);const r=this.chunksByStart.bottom(1);return this.chunksByCameraId.filterAll(),this.chunksByEnd.filterAll(),r[0]}}),Object.defineProperty(this,"getClosestChunkLeft",{enumerable:!0,configurable:!0,writable:!0,value:({cameraId:e,time:t})=>{this.chunksByCameraId.filter(e),this.chunksByStart.filter([-1/0,+t+5e-4]);const r=this.chunksByStart.top(1);return this.chunksByCameraId.filterAll(),this.chunksByEnd.filterAll(),r[0]}}),Object.defineProperty(this,"fetchNextChunk",{enumerable:!0,configurable:!0,writable:!0,value:({cameraId:e,time:t})=>{if(this.knownIntervals.has(e)){const[r,n]=this.knownIntervals.get(e);if(r<=t&&n>=t){const r=this.getClosestChunkRight({cameraId:e,time:t});if(r)return w(r)}}return w({result:[],time:t}).pipe(M((({result:t,time:r})=>{if(t.length||r>=new Date)return c;const n=new Date(+r+36e5);return this.fetch(e,r,n).pipe(x((e=>({result:e,time:n}))))})),F(),x((()=>this.getClosestChunkRight({cameraId:e,time:t}))))}}),Object.defineProperty(this,"fetchPrevChunk",{enumerable:!0,configurable:!0,writable:!0,value:({cameraId:e,time:t})=>{if(this.knownIntervals.has(e)){const[r,n]=this.knownIntervals.get(e);if(r<=t&&n>=t){const r=this.getClosestChunkLeft({cameraId:e,time:t});if(r)return w(r)}}const r=this.camerasStore.camerasById.get(e);if(!r)return w(void 0);const n=new Date(Date.now()-3600*r.archiveDuration*1e3);return this.knownIntervals.get(e)&&this.knownIntervals.get(e)[0]<=n?w(void 0):w({result:[],time:t}).pipe(M((({result:t,time:r})=>{if(t.length||r<=n)return c;const i=new Date(Math.max(+r-36e5,+n));return this.fetch(e,i,r).pipe(x((e=>({result:e,time:i}))))})),F(),x((()=>this.getClosestChunkRight({cameraId:e,time:t}))))}}),n(this,{updates:i,add:a.bound}),this.data=G(),this.chunksByCameraId=this.data.dimension((e=>e.cameraId)),this.chunksByStart=this.data.dimension((e=>+e.startTime)),this.chunksByEnd=this.data.dimension((e=>+e.endTime)),this.pendingRequests=G(),this.pendingRequestsByStart=this.pendingRequests.dimension((e=>+e.startTime)),this.pendingRequestsByEnd=this.pendingRequests.dimension((e=>+e.endTime)),this.pendingRequestsByCameraId=this.pendingRequests.dimension((e=>e.cameraId))}fetch(e,t,r){this.pendingRequestsByCameraId.filter(e),this.pendingRequestsByStart.filter(t),this.pendingRequestsByEnd.filter(r);const n=this.pendingRequests.allFiltered()[0];if(this.pendingRequestsByCameraId.filterAll(),this.pendingRequestsByStart.filterAll(),this.pendingRequestsByEnd.filterAll(),n)return n.request;if(this.knownIntervals.has(e)){const[n,i]=this.knownIntervals.get(e);if(n<=t&&i>=r)return w(this.getChunks({cameraId:e,from:t,to:r}));n<=t&&i<r&&(t=i),n>t&&i>=r&&(r=n),r<n&&(r=n),t>i&&(t=i)}const i=this.api.archives.PopulateArchive({cameraId:e,startTime:t,endTime:r}).pipe(x((e=>e.resultItems[0].chunks.map((e=>new ne(e))))),N(this.add),N((r=>this.extendKnownInterval(e,t,r))),q());return this.pendingRequests.add([{cameraId:e,startTime:t,endTime:r,request:i}]),i.pipe(N((()=>this.pendingRequests.remove((e=>e.request===i))))).subscribe(),i}extendKnownInterval(e,t,r){t=new Date(Math.min(+t,...r.map((e=>+e.startTime))));const n=new Date(Math.max(...r.map((e=>+e.endTime))));if(this.knownIntervals.has(e)){const r=this.knownIntervals.get(e);t<r[0]&&(r[0]=t),n>r[1]&&(r[1]=n)}else this.knownIntervals.set(e,[t,n])}add(e){const t=e.filter((e=>!this.chunksById.has(e.id)));t.forEach((e=>this.chunksById.set(e.id,e))),this.data.add(t),t.length&&this.updates++}getChunks({cameraId:e,from:t,to:r}){this.chunksByStart.filter([-1/0,+r+5e-4]),this.chunksByEnd.filter([t,1/0]),e&&this.chunksByCameraId.filter(e);const n=this.chunksByStart.top(1/0);return e&&this.chunksByCameraId.filterAll(),this.chunksByStart.filterAll(),this.chunksByEnd.filterAll(),n}afterInit(){this.api.events.pipe(D((({hub:e,event:t})=>"archives"===e&&"OnArchiveChunksCreated"===t))).subscribe((({data:e})=>{this.add(e.resultItems.map((e=>new ne(e))))}))}}class ae{constructor(e){Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"imageUrl",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"streamUrl",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"dashStreamUrl",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"address",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"archiveDuration",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"dvrWindowLength",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"stateUpdatedAt",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"raw",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"enabled",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"isMicEnabled",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"state",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"pin",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"webRtcUrl",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"isPtz",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"permissions",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"update",{enumerable:!0,configurable:!0,writable:!0,value:e=>{this.raw=e,this.id=e.id,this.name=e.name,this.isPtz=e.isPTZ,this.isMicEnabled=e.isMicEnabled,this.imageUrl=e.imageUrl,this.address=e.cameraAddress?JSON.parse(e.cameraAddress):null,this.streamUrl=e.streamUrl,this.dashStreamUrl=e.dashStreamUrl,this.enabled=e.enabled,this.state=this.raw.cameraState,this.dvrWindowLength=e.dvrWindowLength?1e3*e.dvrWindowLength:e.dvrWindowLength,this.archiveDuration=e.archiveDuration,this.pin=e.pin,this.webRtcUrl=e.webRtcUrl,this.permissions=e.permissions||0,this.stateUpdatedAt=new Date(e.cameraStateChangedTime)}}),n(this,{name:i,streamUrl:i,dashStreamUrl:i,enabled:i,isMicEnabled:i,state:i,pin:i,webRtcUrl:i,permissions:i,isOnline:t,update:a}),this.update(e)}get isOnline(){return this.enabled&&"Started"===this.state}get supportsWebRTC(){return!!this.webRtcUrl}}class se extends ee{constructor(){super(),Object.defineProperty(this,"camerasById",{enumerable:!0,configurable:!0,writable:!0,value:new Map}),Object.defineProperty(this,"data",{enumerable:!0,configurable:!0,writable:!0,value:[]}),Object.defineProperty(this,"loading",{enumerable:!0,configurable:!0,writable:!0,value:!1}),Object.defineProperty(this,"loaded",{enumerable:!0,configurable:!0,writable:!0,value:!1}),Object.defineProperty(this,"load",{enumerable:!0,configurable:!0,writable:!0,value:()=>{if(this.loaded)return;r((()=>this.loading=!0));const e=this.api.cameras.GetCameras({},null).pipe(p((e=>e.success?w(e.resultItems):(console.error(e.error),m((()=>e.error))))),A());return e.subscribe((e=>{r((()=>{this.add(e),this.loading=!1,this.loaded=!0}))})),e}}),Object.defineProperty(this,"add",{enumerable:!0,configurable:!0,writable:!0,value:e=>{e.forEach((e=>{this.camerasById.has(e.id)?this.camerasById.get(e.id).update(e):this.camerasById.set(e.id,new ae(e))})),this.data=Array.from(this.camerasById.values()).sort(((e,t)=>L(e.name,t.name,{caseInsensitive:!0})))}}),Object.defineProperty(this,"sync",{enumerable:!0,configurable:!0,writable:!0,value:()=>{const e=this.data.reduce(((e,t)=>Math.max(e,+t.stateUpdatedAt)),0);if(!e)return c;const t=this.api.cameras.GetCameras({},new Date(1e3*(Math.floor(e/1e3)+1))).pipe(p((e=>e.success?w(e.resultItems):(console.error(e.error),m((()=>e.error))))),C(1));return t.subscribe((e=>this.add(e))),t}}),n(this,{data:i.ref,loading:i,loaded:i,add:a}),this.disposables.push(s((()=>this.loaded),(()=>{this.api.connection$.pipe(T(1),B((()=>this.sync()))).subscribe()})))}afterInit(){this.disposables.push(this.api.events.pipe(h((({hub:e,event:t})=>"cameras"===e&&("OnCameraUpdated"===t||"OnSystemCameraUpdated"===t))),S((({data:e,event:t})=>e.resultItems?{data:e.resultItems[0],event:t}:{data:e,event:t}))).subscribe((({data:e,event:t})=>{const r=this.camerasById.get(e.id);if(!r)return console.warn("got update for unknown camera:",e.id);if("OnSystemCameraUpdated"===t){const t=r.raw;for(const[r,n]of Object.entries(e))null===n&&(e[r]=t[r])}r.update(e)})))}dispose(){super.dispose(),this.camerasById.clear(),this.data=[]}}const oe={amber:{50:"#fff8e1",100:"#ffecb3",200:"#ffe082",300:"#ffd54f",400:"#ffca28",500:"#ffc107",600:"#ffb300",700:"#ffa000",800:"#ff8f00",900:"#ff6f00",A100:"#ffe57f",A200:"#ffd740",A400:"#ffc400",A700:"#ffab00"},blue:{50:"#e3f2fd",100:"#bbdefb",200:"#90caf9",300:"#64b5f6",400:"#42a5f5",500:"#2196f3",600:"#1e88e5",700:"#1976d2",800:"#1565c0",900:"#0d47a1",A100:"#82b1ff",A200:"#448aff",A400:"#2979ff",A700:"#2962ff"},blueGrey:{50:"#eceff1",100:"#cfd8dc",200:"#b0bec5",300:"#90a4ae",400:"#78909c",500:"#607d8b",600:"#546e7a",700:"#455a64",800:"#37474f",900:"#263238",A100:"#cfd8dc",A200:"#b0bec5",A400:"#78909c",A700:"#455a64"},brown:{50:"#efebe9",100:"#d7ccc8",200:"#bcaaa4",300:"#a1887f",400:"#8d6e63",500:"#795548",600:"#6d4c41",700:"#5d4037",800:"#4e342e",900:"#3e2723",A100:"#d7ccc8",A200:"#bcaaa4",A400:"#8d6e63",A700:"#5d4037"},cyan:{50:"#e0f7fa",100:"#b2ebf2",200:"#80deea",300:"#4dd0e1",400:"#26c6da",500:"#00bcd4",600:"#00acc1",700:"#0097a7",800:"#00838f",900:"#006064",A100:"#84ffff",A200:"#18ffff",A400:"#00e5ff",A700:"#00b8d4"},deepOrange:{50:"#fbe9e7",100:"#ffccbc",200:"#ffab91",300:"#ff8a65",400:"#ff7043",500:"#ff5722",600:"#f4511e",700:"#e64a19",800:"#d84315",900:"#bf360c",A100:"#ff9e80",A200:"#ff6e40",A400:"#ff3d00",A700:"#dd2c00"},deepPurple:{50:"#ede7f6",100:"#d1c4e9",200:"#b39ddb",300:"#9575cd",400:"#7e57c2",500:"#673ab7",600:"#5e35b1",700:"#512da8",800:"#4527a0",900:"#311b92",A100:"#b388ff",A200:"#7c4dff",A400:"#651fff",A700:"#6200ea"},green:{50:"#e8f5e9",100:"#c8e6c9",200:"#a5d6a7",300:"#81c784",400:"#66bb6a",500:"#4caf50",600:"#43a047",700:"#388e3c",800:"#2e7d32",900:"#1b5e20",A100:"#b9f6ca",A200:"#69f0ae",A400:"#00e676",A700:"#00c853"},grey:{50:"#fafafa",100:"#f5f5f5",200:"#eeeeee",300:"#e0e0e0",400:"#bdbdbd",500:"#9e9e9e",600:"#757575",700:"#616161",800:"#424242",900:"#212121",A100:"#f5f5f5",A200:"#eeeeee",A400:"#bdbdbd",A700:"#616161"},indigo:{50:"#e8eaf6",100:"#c5cae9",200:"#9fa8da",300:"#7986cb",400:"#5c6bc0",500:"#3f51b5",600:"#3949ab",700:"#303f9f",800:"#283593",900:"#1a237e",A100:"#8c9eff",A200:"#536dfe",A400:"#3d5afe",A700:"#304ffe"},lightBlue:{50:"#e1f5fe",100:"#b3e5fc",200:"#81d4fa",300:"#4fc3f7",400:"#29b6f6",500:"#03a9f4",600:"#039be5",700:"#0288d1",800:"#0277bd",900:"#01579b",A100:"#80d8ff",A200:"#40c4ff",A400:"#00b0ff",A700:"#0091ea"},lightGreen:{50:"#f1f8e9",100:"#dcedc8",200:"#c5e1a5",300:"#aed581",400:"#9ccc65",500:"#8bc34a",600:"#7cb342",700:"#689f38",800:"#558b2f",900:"#33691e",A100:"#ccff90",A200:"#b2ff59",A400:"#76ff03",A700:"#64dd17"},lime:{50:"#f9fbe7",100:"#f0f4c3",200:"#e6ee9c",300:"#dce775",400:"#d4e157",500:"#cddc39",600:"#c0ca33",700:"#afb42b",800:"#9e9d24",900:"#827717",A100:"#f4ff81",A200:"#eeff41",A400:"#c6ff00",A700:"#aeea00"},orange:{50:"#fff3e0",100:"#ffe0b2",200:"#ffcc80",300:"#ffb74d",400:"#ffa726",500:"#ff9800",600:"#fb8c00",700:"#f57c00",800:"#ef6c00",900:"#e65100",A100:"#ffd180",A200:"#ffab40",A400:"#ff9100",A700:"#ff6d00"},pink:{50:"#fce4ec",100:"#f8bbd0",200:"#f48fb1",300:"#f06292",400:"#ec407a",500:"#e91e63",600:"#d81b60",700:"#c2185b",800:"#ad1457",900:"#880e4f",A100:"#ff80ab",A200:"#ff4081",A400:"#f50057",A700:"#c51162"},purple:{50:"#f3e5f5",100:"#e1bee7",200:"#ce93d8",300:"#ba68c8",400:"#ab47bc",500:"#9c27b0",600:"#8e24aa",700:"#7b1fa2",800:"#6a1b9a",900:"#4a148c",A100:"#ea80fc",A200:"#e040fb",A400:"#d500f9",A700:"#aa00ff"},red:{50:"#ffebee",100:"#ffcdd2",200:"#ef9a9a",300:"#e57373",400:"#ef5350",500:"#f44336",600:"#e53935",700:"#d32f2f",800:"#c62828",900:"#b71c1c",A100:"#ff8a80",A200:"#ff5252",A400:"#ff1744",A700:"#d50000"},teal:{50:"#e0f2f1",100:"#b2dfdb",200:"#80cbc4",300:"#4db6ac",400:"#26a69a",500:"#009688",600:"#00897b",700:"#00796b",800:"#00695c",900:"#004d40",A100:"#a7ffeb",A200:"#64ffda",A400:"#1de9b6",A700:"#00bfa5"},yellow:{50:"#fffde7",100:"#fff9c4",200:"#fff59d",300:"#fff176",400:"#ffee58",500:"#ffeb3b",600:"#fdd835",700:"#fbc02d",800:"#f9a825",900:"#f57f17",A100:"#ffff8d",A200:"#ffff00",A400:"#ffea00",A700:"#ffd600"}},le={Person:"red",Car:"green",Animal:"blue",LicensePlate:"cyan"},ue=["green","red","blue","purple","teal","amber","pink","cyan","lightGreen","deepOrange","deepPurple","lime","indigo","orange","lightBlue"];class ce extends ee{constructor(){super(),Object.defineProperty(this,"schemaDescription",{enumerable:!0,configurable:!0,writable:!0,value:[]}),Object.defineProperty(this,"fetchAnalyticEventSchema",{enumerable:!0,configurable:!0,writable:!0,value:()=>{this.api.cameras.GetSensorDataSchema("Analytic").subscribe({next:e=>{e.success?r((()=>{this.schemaDescription=e.resultItems})):console.error(e)},error:console.error})}}),n(this,{schemaDescription:i.ref,foundObjectTypes:t,foundObjectTypesForSelect:t,colorsByFoundObjectType:t})}get foundObjectTypes(){if(!this.schemaDescription.length)return[];const e=this.schemaDescription.filter((e=>"filter"===e.parameterType&&"Type"===e.fieldName&&"Analytic"===e.eventType))[0];return e?e.valueSet.includes("LicensePlate")?e.valueSet.split(", "):e.valueSet.split(", ").concat(["LicensePlate"]):[]}get foundObjectTypesForSelect(){const e=Object.entries(le).filter((([e])=>this.foundObjectTypes.includes(e))).map((([,e])=>e)),t=ue.filter((t=>!e.includes(t)));let r=0;return this.foundObjectTypes.map((e=>{const n=e in le?le[e]:t[r++],i=oe[n];return{id:e,name:e.toLowerCase(),color:i[500],highlightColor:i.A400,type:"detectedObject"}}))}get colorsByFoundObjectType(){const e=new Map;return this.foundObjectTypesForSelect.forEach((t=>{e.set(t.id,t.highlightColor)})),e}afterInit(){this.fetchAnalyticEventSchema()}dispose(){super.dispose(),this.schemaDescription=[]}}var de="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};var he=function(e,t,r,n){for(var i=-1,a=null==e?0:e.length;++i<a;){var s=e[i];t(n,s,r(s),e)}return n};var fe=function(e){return function(t,r,n){for(var i=-1,a=Object(t),s=n(t),o=s.length;o--;){var l=s[e?o:++i];if(!1===r(a[l],l,a))break}return t}}();var be=function(e,t){for(var r=-1,n=Array(e);++r<e;)n[r]=t(r);return n},pe="object"==typeof de&&de&&de.Object===Object&&de,ve=pe,me="object"==typeof self&&self&&self.Object===Object&&self,ye=ve||me||Function("return this")(),ge=ye.Symbol,we=ge,je=Object.prototype,Oe=je.hasOwnProperty,Ie=je.toString,ke=we?we.toStringTag:void 0;var Pe=function(e){var t=Oe.call(e,ke),r=e[ke];try{e[ke]=void 0;var n=!0}catch(e){}var i=Ie.call(e);return n&&(t?e[ke]=r:delete e[ke]),i},Ae=Object.prototype.toString;var Ce=Pe,Te=function(e){return Ae.call(e)},Be=ge?ge.toStringTag:void 0;var Se=function(e){return null==e?void 0===e?"[object Undefined]":"[object Null]":Be&&Be in Object(e)?Ce(e):Te(e)};var _e=function(e){return null!=e&&"object"==typeof e},Ee=Se,Re=_e;var qe=function(e){return Re(e)&&"[object Arguments]"==Ee(e)},Ue=_e,De=Object.prototype,xe=De.hasOwnProperty,Ne=De.propertyIsEnumerable,Me=qe(function(){return arguments}())?qe:function(e){return Ue(e)&&xe.call(e,"callee")&&!Ne.call(e,"callee")},Fe=Array.isArray,ze={exports:{}};var Ge=function(){return!1};!function(e,t){var r=ye,n=Ge,i=t&&!t.nodeType&&t,a=i&&e&&!e.nodeType&&e,s=a&&a.exports===i?r.Buffer:void 0,o=(s?s.isBuffer:void 0)||n;e.exports=o}(ze,ze.exports);var Le=/^(?:0|[1-9]\d*)$/;var $e=function(e,t){var r=typeof e;return!!(t=null==t?9007199254740991:t)&&("number"==r||"symbol"!=r&&Le.test(e))&&e>-1&&e%1==0&&e<t};var We=function(e){return"number"==typeof e&&e>-1&&e%1==0&&e<=9007199254740991},Ve=Se,He=We,Je=_e,Ke={};Ke["[object Float32Array]"]=Ke["[object Float64Array]"]=Ke["[object Int8Array]"]=Ke["[object Int16Array]"]=Ke["[object Int32Array]"]=Ke["[object Uint8Array]"]=Ke["[object Uint8ClampedArray]"]=Ke["[object Uint16Array]"]=Ke["[object Uint32Array]"]=!0,Ke["[object Arguments]"]=Ke["[object Array]"]=Ke["[object ArrayBuffer]"]=Ke["[object Boolean]"]=Ke["[object DataView]"]=Ke["[object Date]"]=Ke["[object Error]"]=Ke["[object Function]"]=Ke["[object Map]"]=Ke["[object Number]"]=Ke["[object Object]"]=Ke["[object RegExp]"]=Ke["[object Set]"]=Ke["[object String]"]=Ke["[object WeakMap]"]=!1;var Ze=function(e){return Je(e)&&He(e.length)&&!!Ke[Ve(e)]};var Ye=function(e){return function(t){return e(t)}},Qe={exports:{}};!function(e,t){var r=pe,n=t&&!t.nodeType&&t,i=n&&e&&!e.nodeType&&e,a=i&&i.exports===n&&r.process,s=function(){try{var e=i&&i.require&&i.require("util").types;return e||a&&a.binding&&a.binding("util")}catch(e){}}();e.exports=s}(Qe,Qe.exports);var Xe=Ze,et=Ye,tt=Qe.exports,rt=tt&&tt.isTypedArray,nt=rt?et(rt):Xe,it=be,at=Me,st=Fe,ot=ze.exports,lt=$e,ut=nt,ct=Object.prototype.hasOwnProperty;var dt=function(e,t){var r=st(e),n=!r&&at(e),i=!r&&!n&&ot(e),a=!r&&!n&&!i&&ut(e),s=r||n||i||a,o=s?it(e.length,String):[],l=o.length;for(var u in e)!t&&!ct.call(e,u)||s&&("length"==u||i&&("offset"==u||"parent"==u)||a&&("buffer"==u||"byteLength"==u||"byteOffset"==u)||lt(u,l))||o.push(u);return o},ht=Object.prototype;var ft=function(e){var t=e&&e.constructor;return e===("function"==typeof t&&t.prototype||ht)};var bt=function(e,t){return function(r){return e(t(r))}}(Object.keys,Object),pt=ft,vt=bt,mt=Object.prototype.hasOwnProperty;var yt=function(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)},gt=Se,wt=yt;var jt=function(e){if(!wt(e))return!1;var t=gt(e);return"[object Function]"==t||"[object GeneratorFunction]"==t||"[object AsyncFunction]"==t||"[object Proxy]"==t},Ot=jt,It=We;var kt=function(e){return null!=e&&It(e.length)&&!Ot(e)},Pt=dt,At=function(e){if(!pt(e))return vt(e);var t=[];for(var r in Object(e))mt.call(e,r)&&"constructor"!=r&&t.push(r);return t},Ct=kt;var Tt=function(e){return Ct(e)?Pt(e):At(e)},Bt=fe,St=Tt;var _t=kt;var Et=function(e,t){return function(r,n){if(null==r)return r;if(!_t(r))return e(r,n);for(var i=r.length,a=t?i:-1,s=Object(r);(t?a--:++a<i)&&!1!==n(s[a],a,s););return r}}((function(e,t){return e&&Bt(e,t,St)}));var Rt=function(e,t,r,n){return Et(e,(function(e,i,a){t(n,e,r(e),a)})),n};var qt=function(){this.__data__=[],this.size=0};var Ut=function(e,t){return e===t||e!=e&&t!=t},Dt=Ut;var xt=function(e,t){for(var r=e.length;r--;)if(Dt(e[r][0],t))return r;return-1},Nt=xt,Mt=Array.prototype.splice;var Ft=xt;var zt=xt;var Gt=xt;var Lt=qt,$t=function(e){var t=this.__data__,r=Nt(t,e);return!(r<0)&&(r==t.length-1?t.pop():Mt.call(t,r,1),--this.size,!0)},Wt=function(e){var t=this.__data__,r=Ft(t,e);return r<0?void 0:t[r][1]},Vt=function(e){return zt(this.__data__,e)>-1},Ht=function(e,t){var r=this.__data__,n=Gt(r,e);return n<0?(++this.size,r.push([e,t])):r[n][1]=t,this};function Jt(e){var t=-1,r=null==e?0:e.length;for(this.clear();++t<r;){var n=e[t];this.set(n[0],n[1])}}Jt.prototype.clear=Lt,Jt.prototype.delete=$t,Jt.prototype.get=Wt,Jt.prototype.has=Vt,Jt.prototype.set=Ht;var Kt=Jt,Zt=Kt;var Yt=function(){this.__data__=new Zt,this.size=0};var Qt=function(e){var t=this.__data__,r=t.delete(e);return this.size=t.size,r};var Xt=function(e){return this.__data__.get(e)};var er,tr=function(e){return this.__data__.has(e)},rr=ye["__core-js_shared__"],nr=(er=/[^.]+$/.exec(rr&&rr.keys&&rr.keys.IE_PROTO||""))?"Symbol(src)_1."+er:"";var ir=function(e){return!!nr&&nr in e},ar=Function.prototype.toString;var sr=function(e){if(null!=e){try{return ar.call(e)}catch(e){}try{return e+""}catch(e){}}return""},or=jt,lr=ir,ur=yt,cr=sr,dr=/^\[object .+?Constructor\]$/,hr=Function.prototype,fr=Object.prototype,br=hr.toString,pr=fr.hasOwnProperty,vr=RegExp("^"+br.call(pr).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");var mr=function(e){return!(!ur(e)||lr(e))&&(or(e)?vr:dr).test(cr(e))},yr=function(e,t){return null==e?void 0:e[t]};var gr=function(e,t){var r=yr(e,t);return mr(r)?r:void 0},wr=gr(ye,"Map"),jr=gr(Object,"create"),Or=jr;var Ir=function(){this.__data__=Or?Or(null):{},this.size=0};var kr=function(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t},Pr=jr,Ar=Object.prototype.hasOwnProperty;var Cr=function(e){var t=this.__data__;if(Pr){var r=t[e];return"__lodash_hash_undefined__"===r?void 0:r}return Ar.call(t,e)?t[e]:void 0},Tr=jr,Br=Object.prototype.hasOwnProperty;var Sr=jr;var _r=Ir,Er=kr,Rr=Cr,qr=function(e){var t=this.__data__;return Tr?void 0!==t[e]:Br.call(t,e)},Ur=function(e,t){var r=this.__data__;return this.size+=this.has(e)?0:1,r[e]=Sr&&void 0===t?"__lodash_hash_undefined__":t,this};function Dr(e){var t=-1,r=null==e?0:e.length;for(this.clear();++t<r;){var n=e[t];this.set(n[0],n[1])}}Dr.prototype.clear=_r,Dr.prototype.delete=Er,Dr.prototype.get=Rr,Dr.prototype.has=qr,Dr.prototype.set=Ur;var xr=Dr,Nr=Kt,Mr=wr;var Fr=function(e){var t=typeof e;return"string"==t||"number"==t||"symbol"==t||"boolean"==t?"__proto__"!==e:null===e};var zr=function(e,t){var r=e.__data__;return Fr(t)?r["string"==typeof t?"string":"hash"]:r.map},Gr=zr;var Lr=zr;var $r=zr;var Wr=zr;var Vr=function(){this.size=0,this.__data__={hash:new xr,map:new(Mr||Nr),string:new xr}},Hr=function(e){var t=Gr(this,e).delete(e);return this.size-=t?1:0,t},Jr=function(e){return Lr(this,e).get(e)},Kr=function(e){return $r(this,e).has(e)},Zr=function(e,t){var r=Wr(this,e),n=r.size;return r.set(e,t),this.size+=r.size==n?0:1,this};function Yr(e){var t=-1,r=null==e?0:e.length;for(this.clear();++t<r;){var n=e[t];this.set(n[0],n[1])}}Yr.prototype.clear=Vr,Yr.prototype.delete=Hr,Yr.prototype.get=Jr,Yr.prototype.has=Kr,Yr.prototype.set=Zr;var Qr=Yr,Xr=Kt,en=wr,tn=Qr;var rn=Kt,nn=Yt,an=Qt,sn=Xt,on=tr,ln=function(e,t){var r=this.__data__;if(r instanceof Xr){var n=r.__data__;if(!en||n.length<199)return n.push([e,t]),this.size=++r.size,this;r=this.__data__=new tn(n)}return r.set(e,t),this.size=r.size,this};function un(e){var t=this.__data__=new rn(e);this.size=t.size}un.prototype.clear=nn,un.prototype.delete=an,un.prototype.get=sn,un.prototype.has=on,un.prototype.set=ln;var cn=un;var dn=Qr,hn=function(e){return this.__data__.set(e,"__lodash_hash_undefined__"),this},fn=function(e){return this.__data__.has(e)};function bn(e){var t=-1,r=null==e?0:e.length;for(this.__data__=new dn;++t<r;)this.add(e[t])}bn.prototype.add=bn.prototype.push=hn,bn.prototype.has=fn;var pn=bn;var vn=function(e,t){return e.has(t)},mn=pn,yn=function(e,t){for(var r=-1,n=null==e?0:e.length;++r<n;)if(t(e[r],r,e))return!0;return!1},gn=vn;var wn=function(e,t,r,n,i,a){var s=1&r,o=e.length,l=t.length;if(o!=l&&!(s&&l>o))return!1;var u=a.get(e),c=a.get(t);if(u&&c)return u==t&&c==e;var d=-1,h=!0,f=2&r?new mn:void 0;for(a.set(e,t),a.set(t,e);++d<o;){var b=e[d],p=t[d];if(n)var v=s?n(p,b,d,t,e,a):n(b,p,d,e,t,a);if(void 0!==v){if(v)continue;h=!1;break}if(f){if(!yn(t,(function(e,t){if(!gn(f,t)&&(b===e||i(b,e,r,n,a)))return f.push(t)}))){h=!1;break}}else if(b!==p&&!i(b,p,r,n,a)){h=!1;break}}return a.delete(e),a.delete(t),h};var jn=function(e){var t=-1,r=Array(e.size);return e.forEach((function(e,n){r[++t]=[n,e]})),r};var On=function(e){var t=-1,r=Array(e.size);return e.forEach((function(e){r[++t]=e})),r},In=ye.Uint8Array,kn=Ut,Pn=wn,An=jn,Cn=On,Tn=ge?ge.prototype:void 0,Bn=Tn?Tn.valueOf:void 0;var Sn=function(e,t,r,n,i,a,s){switch(r){case"[object DataView]":if(e.byteLength!=t.byteLength||e.byteOffset!=t.byteOffset)return!1;e=e.buffer,t=t.buffer;case"[object ArrayBuffer]":return!(e.byteLength!=t.byteLength||!a(new In(e),new In(t)));case"[object Boolean]":case"[object Date]":case"[object Number]":return kn(+e,+t);case"[object Error]":return e.name==t.name&&e.message==t.message;case"[object RegExp]":case"[object String]":return e==t+"";case"[object Map]":var o=An;case"[object Set]":var l=1&n;if(o||(o=Cn),e.size!=t.size&&!l)return!1;var u=s.get(e);if(u)return u==t;n|=2,s.set(e,t);var c=Pn(o(e),o(t),n,i,a,s);return s.delete(e),c;case"[object Symbol]":if(Bn)return Bn.call(e)==Bn.call(t)}return!1};var _n=function(e,t){for(var r=-1,n=t.length,i=e.length;++r<n;)e[i+r]=t[r];return e},En=Fe;var Rn=function(e,t,r){var n=t(e);return En(e)?n:_n(n,r(e))};var qn=function(e,t){for(var r=-1,n=null==e?0:e.length,i=0,a=[];++r<n;){var s=e[r];t(s,r,e)&&(a[i++]=s)}return a},Un=function(){return[]},Dn=Object.prototype.propertyIsEnumerable,xn=Object.getOwnPropertySymbols,Nn=Rn,Mn=xn?function(e){return null==e?[]:(e=Object(e),qn(xn(e),(function(t){return Dn.call(e,t)})))}:Un,Fn=Tt;var zn=function(e){return Nn(e,Fn,Mn)},Gn=Object.prototype.hasOwnProperty;var Ln=function(e,t,r,n,i,a){var s=1&r,o=zn(e),l=o.length;if(l!=zn(t).length&&!s)return!1;for(var u=l;u--;){var c=o[u];if(!(s?c in t:Gn.call(t,c)))return!1}var d=a.get(e),h=a.get(t);if(d&&h)return d==t&&h==e;var f=!0;a.set(e,t),a.set(t,e);for(var b=s;++u<l;){var p=e[c=o[u]],v=t[c];if(n)var m=s?n(v,p,c,t,e,a):n(p,v,c,e,t,a);if(!(void 0===m?p===v||i(p,v,r,n,a):m)){f=!1;break}b||(b="constructor"==c)}if(f&&!b){var y=e.constructor,g=t.constructor;y==g||!("constructor"in e)||!("constructor"in t)||"function"==typeof y&&y instanceof y&&"function"==typeof g&&g instanceof g||(f=!1)}return a.delete(e),a.delete(t),f},$n=gr(ye,"DataView"),Wn=gr(ye,"Promise"),Vn=gr(ye,"Set"),Hn=$n,Jn=wr,Kn=Wn,Zn=Vn,Yn=gr(ye,"WeakMap"),Qn=Se,Xn=sr,ei=Xn(Hn),ti=Xn(Jn),ri=Xn(Kn),ni=Xn(Zn),ii=Xn(Yn),ai=Qn;(Hn&&"[object DataView]"!=ai(new Hn(new ArrayBuffer(1)))||Jn&&"[object Map]"!=ai(new Jn)||Kn&&"[object Promise]"!=ai(Kn.resolve())||Zn&&"[object Set]"!=ai(new Zn)||Yn&&"[object WeakMap]"!=ai(new Yn))&&(ai=function(e){var t=Qn(e),r="[object Object]"==t?e.constructor:void 0,n=r?Xn(r):"";if(n)switch(n){case ei:return"[object DataView]";case ti:return"[object Map]";case ri:return"[object Promise]";case ni:return"[object Set]";case ii:return"[object WeakMap]"}return t});var si=cn,oi=wn,li=Sn,ui=Ln,ci=ai,di=Fe,hi=ze.exports,fi=nt,bi="[object Object]",pi=Object.prototype.hasOwnProperty;var vi=function(e,t,r,n,i,a){var s=di(e),o=di(t),l=s?"[object Array]":ci(e),u=o?"[object Array]":ci(t),c=(l="[object Arguments]"==l?bi:l)==bi,d=(u="[object Arguments]"==u?bi:u)==bi,h=l==u;if(h&&hi(e)){if(!hi(t))return!1;s=!0,c=!1}if(h&&!c)return a||(a=new si),s||fi(e)?oi(e,t,r,n,i,a):li(e,t,l,r,n,i,a);if(!(1&r)){var f=c&&pi.call(e,"__wrapped__"),b=d&&pi.call(t,"__wrapped__");if(f||b){var p=f?e.value():e,v=b?t.value():t;return a||(a=new si),i(p,v,r,n,a)}}return!!h&&(a||(a=new si),ui(e,t,r,n,i,a))},mi=_e;var yi=function e(t,r,n,i,a){return t===r||(null==t||null==r||!mi(t)&&!mi(r)?t!=t&&r!=r:vi(t,r,n,i,e,a))},gi=cn,wi=yi;var ji=yt;var Oi=function(e){return e==e&&!ji(e)},Ii=Oi,ki=Tt;var Pi=function(e,t){return function(r){return null!=r&&(r[e]===t&&(void 0!==t||e in Object(r)))}},Ai=function(e,t,r,n){var i=r.length,a=i,s=!n;if(null==e)return!a;for(e=Object(e);i--;){var o=r[i];if(s&&o[2]?o[1]!==e[o[0]]:!(o[0]in e))return!1}for(;++i<a;){var l=(o=r[i])[0],u=e[l],c=o[1];if(s&&o[2]){if(void 0===u&&!(l in e))return!1}else{var d=new gi;if(n)var h=n(u,c,l,e,t,d);if(!(void 0===h?wi(c,u,3,n,d):h))return!1}}return!0},Ci=function(e){for(var t=ki(e),r=t.length;r--;){var n=t[r],i=e[n];t[r]=[n,i,Ii(i)]}return t},Ti=Pi;var Bi=function(e){var t=Ci(e);return 1==t.length&&t[0][2]?Ti(t[0][0],t[0][1]):function(r){return r===e||Ai(r,e,t)}},Si=Se,_i=_e;var Ei=function(e){return"symbol"==typeof e||_i(e)&&"[object Symbol]"==Si(e)},Ri=Fe,qi=Ei,Ui=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,Di=/^\w*$/;var xi=function(e,t){if(Ri(e))return!1;var r=typeof e;return!("number"!=r&&"symbol"!=r&&"boolean"!=r&&null!=e&&!qi(e))||(Di.test(e)||!Ui.test(e)||null!=t&&e in Object(t))},Ni=Qr;function Mi(e,t){if("function"!=typeof e||null!=t&&"function"!=typeof t)throw new TypeError("Expected a function");var r=function(){var n=arguments,i=t?t.apply(this,n):n[0],a=r.cache;if(a.has(i))return a.get(i);var s=e.apply(this,n);return r.cache=a.set(i,s)||a,s};return r.cache=new(Mi.Cache||Ni),r}Mi.Cache=Ni;var Fi=Mi;var zi=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,Gi=/\\(\\)?/g,Li=function(e){var t=Fi(e,(function(e){return 500===r.size&&r.clear(),e})),r=t.cache;return t}((function(e){var t=[];return 46===e.charCodeAt(0)&&t.push(""),e.replace(zi,(function(e,r,n,i){t.push(n?i.replace(Gi,"$1"):r||e)})),t}));var $i=function(e,t){for(var r=-1,n=null==e?0:e.length,i=Array(n);++r<n;)i[r]=t(e[r],r,e);return i},Wi=Fe,Vi=Ei,Hi=ge?ge.prototype:void 0,Ji=Hi?Hi.toString:void 0;var Ki=function e(t){if("string"==typeof t)return t;if(Wi(t))return $i(t,e)+"";if(Vi(t))return Ji?Ji.call(t):"";var r=t+"";return"0"==r&&1/t==-Infinity?"-0":r},Zi=Ki;var Yi=Fe,Qi=xi,Xi=Li,ea=function(e){return null==e?"":Zi(e)};var ta=function(e,t){return Yi(e)?e:Qi(e,t)?[e]:Xi(ea(e))},ra=Ei;var na=function(e){if("string"==typeof e||ra(e))return e;var t=e+"";return"0"==t&&1/e==-Infinity?"-0":t},ia=ta,aa=na;var sa=function(e,t){for(var r=0,n=(t=ia(t,e)).length;null!=e&&r<n;)e=e[aa(t[r++])];return r&&r==n?e:void 0},oa=sa;var la=ta,ua=Me,ca=Fe,da=$e,ha=We,fa=na;var ba=function(e,t){return null!=e&&t in Object(e)},pa=function(e,t,r){for(var n=-1,i=(t=la(t,e)).length,a=!1;++n<i;){var s=fa(t[n]);if(!(a=null!=e&&r(e,s)))break;e=e[s]}return a||++n!=i?a:!!(i=null==e?0:e.length)&&ha(i)&&da(s,i)&&(ca(e)||ua(e))};var va=yi,ma=function(e,t,r){var n=null==e?void 0:oa(e,t);return void 0===n?r:n},ya=function(e,t){return null!=e&&pa(e,t,ba)},ga=xi,wa=Oi,ja=Pi,Oa=na;var Ia=sa;var ka=function(e){return function(t){return null==t?void 0:t[e]}},Pa=function(e){return function(t){return Ia(t,e)}},Aa=xi,Ca=na;var Ta=Bi,Ba=function(e,t){return ga(e)&&wa(t)?ja(Oa(e),t):function(r){var n=ma(r,e);return void 0===n&&n===t?ya(r,e):va(t,n,3)}},Sa=function(e){return e},_a=Fe,Ea=function(e){return Aa(e)?ka(Ca(e)):Pa(e)};var Ra=function(e){return"function"==typeof e?e:null==e?Sa:"object"==typeof e?_a(e)?Ba(e[0],e[1]):Ta(e):Ea(e)},qa=he,Ua=Rt,Da=Ra,xa=Fe;var Na=function(e,t){return function(r,n){var i=xa(r)?qa:Ua,a=t?t():{};return i(r,e,Da(n),a)}}((function(e,t,r){e[r?0:1].push(t)}),(function(){return[[],[]]}));var Ma=function(e,t,r,n){for(var i=e.length,a=r+(n?1:-1);n?a--:++a<i;)if(t(e[a],a,e))return a;return-1},Fa=function(e){return e!=e},za=function(e,t,r){for(var n=r-1,i=e.length;++n<i;)if(e[n]===t)return n;return-1};var Ga=function(e,t,r){return t==t?za(e,t,r):Ma(e,Fa,r)};var La=function(e,t){return!!(null==e?0:e.length)&&Ga(e,t,0)>-1};var $a=function(e,t,r){for(var n=-1,i=null==e?0:e.length;++n<i;)if(r(t,e[n]))return!0;return!1};var Wa=Vn,Va=function(){},Ha=Wa&&1/On(new Wa([,-0]))[1]==1/0?function(e){return new Wa(e)}:Va,Ja=pn,Ka=La,Za=$a,Ya=vn,Qa=Ha,Xa=On;var es=function(e,t,r){var n=-1,i=Ka,a=e.length,s=!0,o=[],l=o;if(r)s=!1,i=Za;else if(a>=200){var u=t?null:Qa(e);if(u)return Xa(u);s=!1,i=Ya,l=new Ja}else l=t?[]:o;e:for(;++n<a;){var c=e[n],d=t?t(c):c;if(c=r||0!==c?c:0,s&&d==d){for(var h=l.length;h--;)if(l[h]===d)continue e;t&&l.push(d),o.push(c)}else i(l,d,r)||(l!==o&&l.push(d),o.push(c))}return o},ts=Ra,rs=es;var ns=function(e,t){return e&&e.length?rs(e,ts(t)):[]};const is=new Set(["LicensePlate","FaceDetection","Analytic","SpeedDetection","Temperature","PoS","GPS","DigitalInput"]);class as{constructor(e){if(Object.defineProperty(this,"cameraId",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"type",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"raw",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"thumbnailUrl",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"detectedObjects",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"faces",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"instant",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),n(this,{id:t,startTime:t,endTime:t,acknowledged:t,isLive:t,raw:i.ref}),this.raw=e,this.type=e.eventType,this.cameraId=e.sensorId,("Analytic"===this.type||"FaceDetection"===this.type)&&e.data)try{const t=JSON.parse(e.data);t.FoundObjects&&(this.type="Analytic",this.detectedObjects=t.FoundObjects),t.Faces&&(this.type="FaceDetection",this.faces=t.Faces),this.thumbnailUrl=t.ThumbnailUrl}catch{console.warn("invalid data",e.data),this.type="Motion"}this.instant=is.has(this.type),this.detectedObjects||(this.detectedObjects=[])}get id(){return this.raw.id}get startTime(){return new Date(this.raw.startTime)}get endTime(){return new Date(this.raw.endTime)}get isLive(){return!is.has(this.type)&&+this.startTime==+this.endTime}get acknowledged(){return"sensorId"in this.raw&&!!this.raw.ackEventType}}function ss(e){if(e.length<2)return e;const t=[e[0]];for(let r=1;r<e.length;r++){const n=t.length-1,i=t[n],a=e[r];a[0]>i[1]?t.push(a):t[n]=[i[0],new Date(Math.max(+i[1],+a[1]))]}return t}const os=()=>!0;/Mac|iPod|iPhone|iPad/.test(window.navigator.platform);class ls extends ee{constructor(e){super(),Object.defineProperty(this,"camerasStore",{enumerable:!0,configurable:!0,writable:!0,value:e}),Object.defineProperty(this,"data",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"eventsByCameraId",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"eventsByStart",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"eventsByEnd",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"eventsByType",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"eventsByFoundObjects",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"eventsByColor",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"eventsByLiveliness",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"pendingRequests",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"pendingRequestsByEnd",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"pendingRequestsByStart",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"pendingRequestsByCameraId",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"knownIntervals",{enumerable:!0,configurable:!0,writable:!0,value:G()}),Object.defineProperty(this,"knownIntervalsByCameraId",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"knownIntervalsByStart",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"knownIntervalsByEnd",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"eventsById",{enumerable:!0,configurable:!0,writable:!0,value:new Map}),Object.defineProperty(this,"updates",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"recentAdditions",{enumerable:!0,configurable:!0,writable:!0,value:[]}),Object.defineProperty(this,"update",{enumerable:!0,configurable:!0,writable:!0,value:e=>{e.forEach((e=>{const t=this.eventsById.get(e.id);t&&(t.raw=e.raw,this.data.remove((t=>t.id===e.id)),this.data.add([t]))}))}}),Object.defineProperty(this,"add",{enumerable:!0,configurable:!0,writable:!0,value:e=>{const t=e.filter((e=>!this.eventsById.has(e.id)));t.forEach((e=>this.eventsById.set(e.id,e))),this.data.add(t),t.length&&this.updates++}}),Object.defineProperty(this,"processNewEvents",{enumerable:!0,configurable:!0,writable:!0,value:({data:e})=>{const t=ns(e.filter((e=>this.camerasStore.camerasById.has(e.sensorId))).reverse(),"id").map((e=>new as(e))),[r,n]=Na(t,(e=>this.eventsById.has(e.id)));this.update(r),this.add(n),n.length&&(this.recentAdditions=n.map((e=>e.id)))}}),n(this,{updates:i,recentAdditions:i.ref,processNewEvents:a,update:a,add:a,dispose:a}),this.data=G(),this.eventsByCameraId=this.data.dimension((e=>e.cameraId)),this.eventsByStart=this.data.dimension((e=>+e.startTime)),this.eventsByEnd=this.data.dimension((e=>+e.endTime)),this.eventsByType=this.data.dimension((e=>e.type)),this.eventsByFoundObjects=this.data.dimension((e=>e.detectedObjects.map((e=>e.Type))),!0),this.eventsByColor=this.data.dimension((e=>e.detectedObjects.reduce(((e,t)=>{var r,n;return e.concat(...null!==(n=null===(r=t.Colors)||void 0===r?void 0:r.map((e=>e.Color)))&&void 0!==n?n:[])}),[])),!0),this.eventsByLiveliness=this.data.dimension((e=>e.isLive)),this.pendingRequests=G(),this.pendingRequestsByStart=this.pendingRequests.dimension((e=>+e.startTime)),this.pendingRequestsByEnd=this.pendingRequests.dimension((e=>+e.endTime)),this.pendingRequestsByCameraId=this.pendingRequests.dimension((e=>e.cameraId)),this.knownIntervalsByCameraId=this.knownIntervals.dimension((e=>e.cameraId)),this.knownIntervalsByStart=this.knownIntervals.dimension((e=>+e.from)),this.knownIntervalsByEnd=this.knownIntervals.dimension((e=>+e.to))}populateEvents(e,t,r){const n=null===r?new Date(Date.now()-6e5):r;-1===e?this.knownIntervalsByCameraId.filter(-1):this.knownIntervalsByCameraId.filter((t=>-1===t||t===e)),this.knownIntervalsByStart.filter([-1/0,n]),this.knownIntervalsByEnd.filter([t,1/0]);const i=this.knownIntervalsByStart.bottom(1/0),a=[];if(this.knownIntervalsByCameraId.filterAll(),this.knownIntervalsByStart.filterAll(),this.knownIntervalsByEnd.filterAll(),i.length){const s=ss(i.map((e=>[e.from,e.to])));s[0][0]>t&&a.push([t,s[0][0]]);for(let e=0;e<s.length-1;e++)a.push([s[e][1],s[e+1][0]]);s[ss.length-1][1]<n&&a.push([s[ss.length-1][1],n]),a.length&&(t=a[0][0],+a[a.length-1][1]<=+n&&(r=a[a.length-1][1]),this.knownIntervals.add([{cameraId:e,from:t,to:n}]))}else this.knownIntervals.add([{cameraId:e,from:t,to:n}]);this.pendingRequestsByCameraId.filter(e),this.pendingRequestsByStart.filter(t),this.pendingRequestsByEnd.filter(n);const s=this.pendingRequests.allFiltered()[0];if(this.pendingRequestsByCameraId.filterAll(),this.pendingRequestsByStart.filterAll(),this.pendingRequestsByEnd.filterAll(),s)return;if(i.length&&!a.length)return;const o=n=>this.api.cameras.GetSensorEventsPage({sensorIds:[e],sensorType:"camera",sensorEventTypes:[],startTime:t,endTime:r,rowsLimit:100,isDescending:!0,pageToken:n},null,[]).pipe(R((e=>e.success?w(e):(console.error(e.error),m((()=>e.error)))))),l=o().pipe(M((e=>e.pageInfo.haveMore?o(e.pageInfo.nextPageToken):c)),x((e=>e.resultItems.map((e=>new as(e))))),z());this.pendingRequests.add([{cameraId:e,startTime:t,endTime:r||new Date,request:l}]),l.subscribe({next:this.add,error:e=>{console.error(e),this.pendingRequests.remove((e=>e.request===l))},complete:()=>{this.pendingRequests.remove((e=>e.request===l))}})}getEvents({cameraIds:e,from:t,to:r,detectedObjectTypes:n,eventTypes:i,colors:a,probability:s}){this.eventsByStart.filter([+t,r?+r+5e-4:1/0]),(null==e?void 0:e.length)&&this.eventsByCameraId.filter((t=>e.includes(t))),(null==i?void 0:i.length)&&this.eventsByType.filter((e=>i.includes(e))),(null==n?void 0:n.length)&&this.eventsByFoundObjects.filter((e=>n.includes(e))),(null==a?void 0:a.size)&&this.eventsByColor.filter((e=>a.has(e)));let o=this.eventsByStart.top(1/0);return(null==i?void 0:i.length)&&this.eventsByType.filterAll(),(null==e?void 0:e.length)&&this.eventsByCameraId.filterAll(),(null==n?void 0:n.length)&&this.eventsByFoundObjects.filterAll(),(null==a?void 0:a.size)&&this.eventsByColor.filterAll(),this.eventsByStart.filterAll(),void 0!==s&&(null==n?void 0:n.length)&&(o=o.filter((e=>e.detectedObjects.some((e=>e.Probability>=s&&n.includes(e.Type)))))),o}getOverlappedEvents({cameraId:e,from:t,to:r}){this.eventsByCameraId.filter(e),this.eventsByStart.filter([-1/0,+r+5e-4]),this.eventsByEnd.filter([+t,1/0]);const n=this.eventsByStart.top(1/0);return this.eventsByCameraId.filterAll(),this.eventsByStart.filterAll(),this.eventsByStart.filterAll(),n}getLastNonAnalyticEventBefore({cameraId:e,date:t}){this.eventsByCameraId.filter(e),this.eventsByStart.filter([-1/0,+t]),this.eventsByType.filter((e=>"Analytic"!==e));const r=this.eventsByStart.top(1);return this.eventsByType.filterAll(),this.eventsByStart.filterAll(),this.eventsByCameraId.filterAll(),r[0]}getLastObjectBefore({cameraId:e,date:t,objectFilters:r}){this.eventsByCameraId.filter(e),this.eventsByStart.filter([-1/0,+t]),this.eventsByType.filter((e=>"Analytic"===e));const{cars:n,people:i,misc:a}=r;i&&n&&a||this.eventsByFoundObjects.filter((e=>a?i||n?!(!i||!n)||(i?"Car"!==e:"Person"!==e):"Person"!==e&&"Car"!==e:i&&n?"Person"===e||"Car"===e:i?"Person"===e:"Car"===e));const s=this.eventsByStart.top(1);return this.eventsByFoundObjects.filterAll(),this.eventsByType.filterAll(),this.eventsByStart.filterAll(),this.eventsByCameraId.filterAll(),s[0]}getFirstNonAnalyticEventAfter({cameraId:e,date:t}){this.eventsByCameraId.filter(e),this.eventsByStart.filter([+t+5e-4,1/0]),this.eventsByType.filter((e=>"Analytic"!==e));const r=this.eventsByEnd.bottom(1);return this.eventsByType.filterAll(),this.eventsByCameraId.filterAll(),this.eventsByStart.filterAll(),r[0]}getFirstObjectAfter({cameraId:e,date:t,objectFilters:r}){this.eventsByCameraId.filter(e),this.eventsByStart.filter([+t+5e-4,1/0]),this.eventsByType.filter((e=>"Analytic"===e));const{cars:n,people:i,misc:a}=r;i&&n&&a||this.eventsByFoundObjects.filter((e=>a?i||n?!(!i||!n)||(i?"Car"!==e:"Person"!==e):"Person"!==e&&"Car"!==e:i&&n?"Person"===e||"Car"===e:i?"Person"===e:"Car"===e));const s=this.eventsByStart.bottom(1);return this.eventsByFoundObjects.filterAll(),this.eventsByType.filterAll(),this.eventsByStart.filterAll(),this.eventsByCameraId.filterAll(),s[0]}afterInit(){this.api.events.pipe(D((({hub:e,event:t})=>"cameras"===e&&"OnCameraMotionEvent"===t))).subscribe(this.processNewEvents)}dispose(){super.dispose(),this.data.remove(os),this.updates++}}class us extends ee{constructor(){super(),Object.defineProperty(this,"thumbnails",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"thumbnailsByCameraId",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"thumbnailsByDate",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"pendingRequests",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"pendingRequestsByEnd",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"pendingRequestsByStart",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"pendingRequestsByCameraId",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"pendingRequestsByCount",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"toThumbnail",{enumerable:!0,configurable:!0,writable:!0,value:e=>({realtimestamp:t,url:r,width:n,height:i})=>({cameraId:e,url:r,width:n,height:i,timestamp:new Date(t)})}),this.thumbnails=G(),this.thumbnailsByCameraId=this.thumbnails.dimension((e=>e.cameraId)),this.thumbnailsByDate=this.thumbnails.dimension((e=>+e.timestamp)),this.pendingRequests=G(),this.pendingRequestsByStart=this.pendingRequests.dimension((e=>+e.from)),this.pendingRequestsByEnd=this.pendingRequests.dimension((e=>+e.to)),this.pendingRequestsByCameraId=this.pendingRequests.dimension((e=>e.cameraId)),this.pendingRequestsByCount=this.pendingRequests.dimension((e=>e.count))}fetchThumbnails(e,t,r,n){this.pendingRequestsByCameraId.filter(e),this.pendingRequestsByStart.filter(t),this.pendingRequestsByEnd.filter(r),this.pendingRequestsByCount.filter(n);const i=this.pendingRequests.allFiltered()[0];if(this.pendingRequestsByCameraId.filterAll(),this.pendingRequestsByStart.filterAll(),this.pendingRequestsByEnd.filterAll(),this.pendingRequestsByCount.filterAll(),i)return i.request;const a=this.api.thumbnails.GetThumbnailsInfo({cameraId:e,from:t,to:r,count:n}).pipe(x((t=>t.resultItems.filter((e=>e.url)).map(this.toThumbnail(e)))),q());return this.pendingRequests.add([{cameraId:e,from:t,to:r,count:n,request:a}]),a.subscribe((e=>{this.thumbnails.add(e),this.pendingRequests.remove((e=>e.request===a))})),a}getIntervalState(e,t,r){const n=this.getThumbnail({cameraId:e,from:t,to:r});if(n)return{state:"fullfilled",data:n};this.pendingRequestsByCameraId.filter(e),this.pendingRequestsByStart.filter([-1/0,+r+5e-4]),this.pendingRequestsByEnd.filter([t,1/0]);let i=this.pendingRequests.allFiltered();return this.pendingRequestsByCameraId.filterAll(),this.pendingRequestsByStart.filterAll(),this.pendingRequestsByEnd.filterAll(),i=i.filter((e=>1===e.count?+e.from==+t&&+e.to==+r:Math.abs((+e.to-+e.from)/e.count-(+r-+t))<=1)),i.length?{state:"pending",request:i[0].request}:null}fetchThumbnail(e,t,r){const n=this.getIntervalState(e,t,r);if(null!==n){if("fullfilled"===n.state)return w(n.data);if("pending"===n.state)return n.request.pipe(x((()=>this.getThumbnail({cameraId:e,from:t,to:r}))))}const i=this.api.thumbnails.GetThumbnailInfo({cameraId:e,from:t,to:r}).pipe(x((e=>e.resultItems)),q());return i.subscribe((t=>{const r=t.filter((e=>e.url)).map(this.toThumbnail(e));this.thumbnails.add(r),this.pendingRequests.remove((e=>e.request===i))})),this.pendingRequests.add([{cameraId:e,from:t,to:r,count:1,request:i}]),i.pipe(x((()=>this.getThumbnail({cameraId:e,from:t,to:r}))))}getThumbnail({cameraId:e,from:t,to:r}){this.thumbnailsByCameraId.filter(e),this.thumbnailsByDate.filter([+t,+r+(+t==+r?5e-4:0)]);const n=this.thumbnails.allFiltered()[0];return this.thumbnailsByDate.filterAll(),this.thumbnailsByCameraId.filterAll(),n}getThumbnails({cameraId:e,from:t,to:r}){this.thumbnailsByCameraId.filter(e),this.thumbnailsByDate.filter([+t,+r+5e-4]);const n=this.thumbnails.allFiltered();return this.thumbnailsByDate.filterAll(),this.thumbnailsByCameraId.filterAll(),n}}class cs{constructor(e){Object.defineProperty(this,"notifier",{enumerable:!0,configurable:!0,writable:!0,value:e})}error(e){this.notifier.error(e)}success(e,t){this.notifier.success(e,t)}warn(e){this.notifier.warn(e)}}const ds=new Map;class hs{constructor(t){Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:t}),Object.defineProperty(this,"initialized",{enumerable:!0,configurable:!0,writable:!0,value:!1}),Object.defineProperty(this,"cameras",{enumerable:!0,configurable:!0,writable:!0,value:new se}),Object.defineProperty(this,"archives",{enumerable:!0,configurable:!0,writable:!0,value:new ie(this.cameras)}),Object.defineProperty(this,"events",{enumerable:!0,configurable:!0,writable:!0,value:new ls(this.cameras)}),Object.defineProperty(this,"eventSchema",{enumerable:!0,configurable:!0,writable:!0,value:new ce}),Object.defineProperty(this,"thumbnails",{enumerable:!0,configurable:!0,writable:!0,value:new us}),Object.defineProperty(this,"account",{enumerable:!0,configurable:!0,writable:!0,value:new re}),Object.defineProperty(this,"notification",{enumerable:!0,configurable:!0,writable:!0,value:new cs({success:console.log,warn:console.warn,error:console.error})}),Object.defineProperty(this,"auth",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"api",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"disposables",{enumerable:!0,configurable:!0,writable:!0,value:[]}),Object.defineProperty(this,"tokenUpdateReactions",{enumerable:!0,configurable:!0,writable:!0,value:new Set}),Object.defineProperty(this,"dispose",{enumerable:!0,configurable:!0,writable:!0,value:()=>{this.disposables.forEach((e=>{e instanceof P?e.closed||e.unsubscribe():e()})),this.tokenUpdateReactions.forEach((e=>e())),this.tokenUpdateReactions.clear(),this.auth.signOut(),this.cameras.dispose(),this.events.dispose(),this.thumbnails.dispose(),this.eventSchema.dispose(),this.account.dispose(),ds.delete(this.name)}}),Object.defineProperty(this,"onTokenUpdate",{enumerable:!0,configurable:!0,writable:!0,value:t=>{if(!this.auth)throw new Error("app has to be inited first");const r=e((()=>this.auth.token),(e=>t((null==e?void 0:e.json)||null)));return this.tokenUpdateReactions.add(r),()=>{r(),this.tokenUpdateReactions.delete(r)}}}),n(this,{initialized:i}),this.disposables.push(s((()=>!!this.account.user),(()=>{this.cameras.load()})))}init({token:e,tokenStorage:t=new Q,tokenStorageKey:n,apiUrl:i="https://services.3deye.me/reactiveapi",tokenServiceUrl:a="https://admin.3deye.me/webapi/v3/auth/token"},s="default"){if(n||(n=`@3deye-toolkit/${s}/token`),ds.has(s))return console.warn("Can`t init two apps with the same name"),ds.get(s);if(this.auth&&s===this.name)return console.warn("Can`t init already inited app"),this;if(this.auth||"default"===this.name&&"default"!==s)return new hs(s).init({token:e,tokenStorage:t,tokenStorageKey:n,apiUrl:i,tokenServiceUrl:a},s);const o=e&&"clientId"in e?e.clientId:"WebApp";return e&&t.setItem(n,JSON.stringify(e)),this.auth=new Y({tokenServiceUrl:a,tokenStorageKey:n,storage:t,clientId:o,deviceInfo:null}),this.api=K.create(W,this.auth,(e=>_(i,{qs:{access_token:e}}))),this.cameras.initWith(this.api),this.archives.initWith(this.api),this.events.initWith(this.api),this.eventSchema.initWith(this.api),this.thumbnails.initWith(this.api),this.account.initWith(this.api),this.account.setAuthStore(this.auth),r((()=>{this.initialized=!0})),ds.set(s,this),this}}const fs=new hs("default"),bs=$.createContext(null);export{bs as AppContext,fs as app};
|
|
1
|
+
import{reaction as e,computed as t,observe as r,runInAction as i,makeObservable as n,observable as a,action as s,when as o}from"mobx";import{Subject as l,BehaviorSubject as u,switchMap as c,EMPTY as d,timer as h,filter as f,delay as b,take as p,mergeMap as v,catchError as m,throwError as y,takeUntil as g,Observable as w,of as O,retry as j,startWith as P,pairwise as I,concatMap as A,Subscription as k,shareReplay as T,skip as S,exhaustMap as B,map as C}from"rxjs";import E from"jqueryless-signalr";import{StatusCodes as _}from"http-status-codes";import{mergeMap as R,shareReplay as D,retry as U,filter as q,map as M,tap as x,expand as N,last as F,share as z}from"rxjs/operators";import{z as L}from"zod";import"backoff-rxjs";import G from"crossfilter2";import W from"string-natural-compare";import $ from"i18next";import V from"react";const H={archives:{PopulateArchive:null,GetArchives:null,GetClips:null,UpdateClip:null,DeleteClip:null,SaveClip:null,SaveTimelaps:null,SaveArchive:null,DeleteArchive:null,ShareClip:null,GetSharedClips:null,UpdateSharedClip:null,DeleteSharedClip:null},cameras:{GetCameras:null,UpdateCamera:null,GetSensorDataSchema:null,GetSensorEvents:null,GetSensorEventsPage:null,GetLicensePlateLookUp:null,GetSensorEventsLprPage:null,GetPeopleCountingData:null,AddUserSensorEvent:null,AcknowledgeSensorEvent:null,MoveCamera:null,MoveCameraContinuousStart:null,MoveCameraContinuousStop:null,GoHomePtzCamera:null,SetHomePtzCamera:null},camgroups:{GetCamgroups:null,DeleteCamgroup:null,AddCamgroup:null,UpdateCamgroup:null},sound:{GetPushSoundServiceUrl:null},thumbnails:{GetThumbnailsInfo:null,GetThumbnailInfo:null,GetHeatMapsInfo:null},users:{GetUser:null,UserUpdateProfile:null}},K={cameras:[{name:"OnCameraMotionEvent",explicit:!0},{name:"OnCameraAdded"},{name:"OnCameraUpdated"},{name:"OnSystemCameraUpdated"},{name:"OnCameraDeleted"}],users:[{name:"OnUserUpdateProfile"}],camgroups:[{name:"OnAdd"},{name:"OnUpdate"},{name:"OnDelete"}],archives:[{name:"OnTimelapsAdded"},{name:"OnClipAdded"},{name:"OnClipUpdated"},{name:"OnClipDeleted"},{name:"OnArchiveAdded"},{name:"OnArchiveUpdated"},{name:"OnArchiveDeleted"},{name:"OnArchiveRecordCreated"}]};var J,Z,Y,Q;!function(e){e[e.CONNECTING=0]="CONNECTING",e[e.CONNECTED=1]="CONNECTED",e[e.RECONNECTING=2]="RECONNECTING",e[e.DISCONNECTED=3]="DISCONNECTED"}(J||(J={}));class X{static create(e,t,r){return new X(null!==e?e:H,t,r)}constructor(t,r,i){Object.defineProperty(this,"connectionShutdown$",{enumerable:!0,configurable:!0,writable:!0,value:new l}),Object.defineProperty(this,"connection$",{enumerable:!0,configurable:!0,writable:!0,value:new u(null)}),Object.defineProperty(this,"events",{enumerable:!0,configurable:!0,writable:!0,value:new l}),Object.defineProperty(this,"logging",{enumerable:!0,configurable:!0,writable:!0,value:!1}),Object.defineProperty(this,"authStore",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"createConnection",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"apiConfig",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.apiConfig=t,this.init(),this.createConnection=i,this.authStore=r,e((()=>r.token),(e=>{if(!e)return void this.shutdownConnection();if(e.invalid)return;if(!e.accessToken)return;const t=this.connection$.getValue();t&&t.state!==J.DISCONNECTED?t.qs.access_token=e.accessToken:this.connect(e)})),this.connection$.pipe(c((e=>null!==e||!r.isAuthenticated||r.token&&r.token.invalid?d:(this.logging&&console.warn("disconnected by some reason"),h(5e3)))),f((()=>r.isAuthenticated&&!!r.token&&!r.token.invalid))).subscribe((()=>{this.connect(r.token),this.logging&&console.warn("attempting to reconnect")})),this.connection$.pipe(f(Boolean),b(100)).subscribe(this.subscribeToEvents)}connect(e){if(this.connection$.getValue()&&this.connection$.getValue().state===J.CONNECTED)return;const{accessToken:t}=e,r=this.createConnection(t);Object.keys(this.apiConfig).forEach((e=>r.createHubProxy(e))),Object.entries(K).forEach((([e,t])=>{t&&r.proxies[e]&&t.forEach((({name:t})=>{r.proxies[e].on(t,(r=>this.events.next({hub:e,event:t,data:r})))}))})),r.start().done((()=>{this.logging&&console.warn("connected"),this.connection$.next(r)})).fail((e=>{var t,r,i;401!==(null===(t=e.source)||void 0===t?void 0:t.status)&&403!==(null===(r=e.source)||void 0===r?void 0:r.status)&&409!==(null===(i=e.source)||void 0===i?void 0:i.status)||this.authStore.invalidateToken()})),r.error((e=>{if(e.source&&(401===e.source.status||403===e.source.status||409===e.source.status))return this.logging&&console.warn("authentication error, invalidating token"),this.authStore.invalidateToken()})),r.disconnected((()=>{this.connection$.getValue()?this.logging&&console.warn("disconnected",this.connection$.getValue().lastError):this.logging&&console.warn("disconnected. this connection is already null"),this.connection$.next(null)})),r.reconnecting((()=>console.log("reconnecting"))),r.reconnected((()=>{this.connection$.getValue()===r&&(this.logging&&console.warn("reconnected"),this.connection$.next(r))}))}shutdownConnection(){const e=this.connection$.getValue();e&&e.stop(),this.connectionShutdown$.next(null)}init(){Object.keys(this.apiConfig).forEach((e=>{this[e]={},Object.keys(this.apiConfig[e]).forEach((t=>{this[e][t]=this.createHubMethod(e,t)}))}))}createHubMethod(e,t){const r=this;return function i(...n){return r.connection$.pipe(f(Boolean),f((e=>e.state===J.CONNECTED)),p(1)).pipe(v((r=>new Promise(((i,a)=>{r.proxies[e].invoke(t,...n).done((e=>i(e))).fail((e=>a(e)))})))),m((e=>!e.message||"Connection started reconnecting before invocation result was received."!==e.message&&"Connection was disconnected before invocation result was received."!==e.message?e.message&&e.message.startsWith("Caller is not authorized to invoke the ")?(console.warn(e.message),r.connection$.getValue().stop(),r.authStore.invalidateToken(),i(...n)):y(e):(console.warn(e.message),i(...n)))),g(r.connectionShutdown$))}}subscribeToEvents(e){Object.entries(K).forEach((([t,r])=>{r&&e.proxies[t]&&e.state===J.CONNECTED&&r.filter((({explicit:e})=>e)).forEach((({name:r})=>{e.proxies[t].invoke("SubscribeToEvent",r)}))}))}}class ee{constructor(e){Object.defineProperty(this,"accessToken",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"accessTokenExpires",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"accessTokenIssued",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"clientId",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"expiresIn",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"refreshToken",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"refreshTokenExpires",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"refreshTokenIssued",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"tokenType",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"userName",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"invalid",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"widgetId",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"widgetToken",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"json",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.json=e,this.accessToken=e.access_token||e.accessToken,this.accessTokenExpires=new Date(e.access_token_expires||e.accessTokenExpires),this.accessTokenIssued=new Date(e.access_token_issued||e.accessTokenIssued),this.clientId=e.client_id||e.clientId,this.expiresIn=e.expires_in||e.expiresIn,this.refreshToken=e.refresh_token||e.refreshToken,this.refreshTokenExpires=new Date(e.refresh_token_expires||e.refreshTokenExpires),this.refreshTokenIssued=new Date(e.refresh_token_issued||e.refreshTokenIssued),this.tokenType=e.token_type||e.tokenType,this.userName=e.userName,this.widgetId=e.widgetId,this.widgetToken=e.widgetToken,this.invalid=!1}}class te{get isAuthenticated(){return Boolean(this.token&&!this.isAuthenticating)}constructor({tokenServiceUrl:e,storage:o,tokenStorageKey:l,deviceInfo:u,clientId:b}){Object.defineProperty(this,"token",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"isAuthenticating",{enumerable:!0,configurable:!0,writable:!0,value:!1}),Object.defineProperty(this,"storage",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"tokenServiceUrl",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"tokenStorageKey",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"deviceInfo",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"clientId",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"pendingUpdateTokenRequest",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"signOut",{enumerable:!0,configurable:!0,writable:!0,value:()=>{this.isAuthenticating||i((()=>this.token=null))}}),Object.defineProperty(this,"signIn",{enumerable:!0,configurable:!0,writable:!0,value:e=>{if(this.isAuthenticating)return;i((()=>this.isAuthenticating=!0)),!1===e.agreedWithTerms&&(e={...e,agreedWithTerms:void 0});return this.fetchToken(e).then((e=>(i((()=>{this.token=e,this.isAuthenticating=!1})),e))).catch((e=>{throw i((()=>{this.isAuthenticating=!1})),e}))}}),Object.defineProperty(this,"signInWithToken",{enumerable:!0,configurable:!0,writable:!0,value:e=>{this.isAuthenticating?console.warn("Attempt to sign in with token while authenticating"):i((()=>{this.token=new ee(e)}))}}),Object.defineProperty(this,"invalidateToken",{enumerable:!0,configurable:!0,writable:!0,value:()=>{this.token&&i((()=>{this.token={...this.token,invalid:!0}}))}}),n(this,{token:a.ref,isAuthenticating:a,isAuthenticated:t,signOut:s,invalidateToken:s}),this.isAuthenticating=!0,this.storage=o,this.tokenServiceUrl=e,this.tokenStorageKey=l,this.deviceInfo=u,this.clientId=b;const p=function(e,i=!1){const n=t(e);return new w((e=>{const t=r(n,(({newValue:t})=>e.next(t)),i);return()=>t()}))}((()=>this.token)),g=p.pipe(c((e=>{if(null===e)return d;const t=O(e).pipe(v((e=>e.widgetId?this.fetchWidgetToken(e):this.updateToken(e.refreshToken))),j({delay:(e,t)=>e.status&&![500,502,503,504].includes(e.status)?y((()=>e)):h(2**Math.min(t+1,6)*1e3)}));if(!e.invalid){const r=Math.max(.75*(+e.accessTokenExpires-Date.now()),0);return h(r).pipe(v((()=>t)))}return t})),m((e=>(console.error(e),i((()=>this.token=null)),g))));g.subscribe((e=>{i((()=>this.token=e))})),p.pipe(P(null),I(),f((([e,t])=>!!(t||!t&&e))),A((([,e])=>this.storeToken(e)))).subscribe(),this.getInitialToken().then((e=>{i((()=>{this.token=e,this.isAuthenticating=!1}))}))}async getTokenFromStorage(){const e=await this.storage.getItem(this.tokenStorageKey);return e?new ee(JSON.parse(e)):null}async storeToken(e){return!e||e.invalid?this.storage.removeItem(this.tokenStorageKey):this.storage.setItem(this.tokenStorageKey,JSON.stringify(e.json))}async getInitialToken(){const e=await this.getTokenFromStorage();return e||null}async fetchToken(e){const t={clientId:this.clientId,device:this.deviceInfo,...e},r=new Headers;r.append("Content-Type","application/json"),r.append("accept","application/json");const i=await fetch(this.tokenServiceUrl,{method:"POST",headers:r,body:JSON.stringify(t)});try{const e=await i.json();return 200!==i.status?Promise.reject({status:i.status,data:e}):new ee(e)}catch(e){return Promise.reject(i)}}async updateToken(e){var t;try{return this.pendingUpdateTokenRequest&&this.pendingUpdateTokenRequest.refreshToken===e||(this.pendingUpdateTokenRequest={refreshToken:e,request:this.fetchToken({refreshToken:e})}),await this.pendingUpdateTokenRequest.request}finally{(null===(t=this.pendingUpdateTokenRequest)||void 0===t?void 0:t.refreshToken)===e&&(this.pendingUpdateTokenRequest=null)}}async fetchWidgetToken(e){const{widgetId:t,widgetToken:r}=e;if(!t||!r)throw new Error("token must contain widgetId and widgetToken");const i={widgetId:t,widgetToken:r},n=new Headers;n.append("Content-Type","application/json"),n.append("accept","application/json");const a=await fetch(this.tokenServiceUrl,{method:"POST",headers:n,body:JSON.stringify(i)});try{const e=await a.json();return 200!==a.status?Promise.reject({status:a.status,data:e}):new ee({widgetId:t,widgetToken:r,...e})}catch(e){return Promise.reject(a)}}}!function(e){e[e.Motion=0]="Motion",e[e.Tampering=1]="Tampering",e[e.PanTiltZoom=2]="PanTiltZoom",e[e.CrossLine=3]="CrossLine",e[e.Intrusion=4]="Intrusion",e[e.LicensePlate=5]="LicensePlate",e[e.FaceDetection=6]="FaceDetection",e[e.Audio=7]="Audio",e[e.Analytic=8]="Analytic",e[e.SpeedDetection=9]="SpeedDetection",e[e.PeopleCounter=10]="PeopleCounter",e[e.Temperature=11]="Temperature",e[e.PoS=12]="PoS",e[e.GPS=13]="GPS",e[e.DigitalInput=14]="DigitalInput",e[e.Normal=15]="Normal",e[e.Suspicious=16]="Suspicious",e[e.Loitering=17]="Loitering",e[e.Vandalism=18]="Vandalism",e[e.Trespass=19]="Trespass",e[e.Emergency=20]="Emergency",e[e.LifeInDanger=21]="LifeInDanger",e[e.ErroneousAlert=22]="ErroneousAlert",e[e.Misidentification=23]="Misidentification",e[e.Fire=24]="Fire",e[e.MedicalDuress=25]="MedicalDuress",e[e.HoldUp=26]="HoldUp",e[e.CheckIn=27]="CheckIn",e[e.CheckOut=28]="CheckOut",e[e.ClockIn=29]="ClockIn",e[e.ClockOut=30]="ClockOut",e[e.ParkingStart=31]="ParkingStart",e[e.ParkingEnd=32]="ParkingEnd",e[e.ParkingViolation=33]="ParkingViolation",e[e.GateAccess=34]="GateAccess",e[e.DoorAccess=35]="DoorAccess",e[e.TemperatureCheck=36]="TemperatureCheck",e[e.IDCheck=37]="IDCheck",e[e.PPECheck=38]="PPECheck",e[e.WelfareCheck=39]="WelfareCheck",e[e.VehicleBreakIn=40]="VehicleBreakIn",e[e.DrugTrafficking=41]="DrugTrafficking",e[e.Assault=42]="Assault",e[e.PackageDelivery=43]="PackageDelivery",e[e.Uncategorized=999]="Uncategorized"}(Z||(Z={}));class re{constructor(){Object.defineProperty(this,"values",{enumerable:!0,configurable:!0,writable:!0,value:new Map})}getItem(e){return this.values.get(e)||null}setItem(e,t){this.values.set(e,t)}removeItem(e){this.values.delete(e)}}class ie{constructor(){Object.defineProperty(this,"api",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"disposables",{enumerable:!0,configurable:!0,writable:!0,value:[]})}initWith(e){this.api=e,this.afterInit&&this.afterInit()}dispose(){this.disposables.forEach((e=>{e instanceof k?e.closed||e.unsubscribe():e()}))}}!function(e){e.Initial="initial",e.InitiallyPaused="initially-paused",e.Playing="playing",e.Paused="paused",e.Reconnecting="reconnecting",e.Stalled="stalled",e.Error="error",e.Failed="failed"}(Y||(Y={})),function(e){e.Fit="contain",e.Stretch="fill"}(Q||(Q={}));const ne=L.object({lat:L.number(),lon:L.number(),fov:L.number()});var ae,se;!function(e){e.Ceiling="ceiling",e.Wall="wall"}(ae||(ae={})),function(e){e.DEFAULT_VIDEO_RESIZE_MODE="defaultVideoResizeMode",e.RESIZE_MODE_PER_CAMERA="camerasResizeMode",e.FISHEYE_CAMERAS="fisheyeCameras",e.UTC="utc",e.HOUR12="hour12",e.START_OF_WEEK="startOfWeek"}(se||(se={}));const oe=L.nativeEnum(Q),le=L.object({params:L.object({x:L.number(),y:L.number(),r:L.number(),s:L.number()}),positions:L.tuple([ne,ne,ne]).optional()}),ue=L.tuple([L.number(),L.number(),L.number()]),ce=L.object({[se.DEFAULT_VIDEO_RESIZE_MODE]:oe.optional(),[se.RESIZE_MODE_PER_CAMERA]:L.array(L.tuple([L.number(),oe])).optional(),[se.FISHEYE_CAMERAS]:L.array(L.tuple([L.number(),L.union([ue,le,L.null()])])).optional(),[se.UTC]:L.boolean().default(!1),[se.HOUR12]:L.boolean().default(!1),[se.START_OF_WEEK]:L.enum(["monday","sunday"]).default("monday")});class de extends ie{constructor(e){super(),Object.defineProperty(this,"notification",{enumerable:!0,configurable:!0,writable:!0,value:e}),Object.defineProperty(this,"user",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"auth",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"setUser",{enumerable:!0,configurable:!0,writable:!0,value:e=>{this.user=e}}),Object.defineProperty(this,"updateCustomPreferences",{enumerable:!0,configurable:!0,writable:!0,value:e=>{const t=O(null).pipe(R((()=>{if(!this.user)return y((()=>"user is not initialized"));const t={id:this.user.id,jsonField:JSON.stringify({...JSON.parse(this.user.jsonField||"{}"),...e}),version:this.user.version};return this.api.users.UserUpdateProfile(t)})),R((e=>e.success?O(e.resultItems[0]):y((()=>e.error)))),this.retryOnVersionMismatch(),D());return t.subscribe((e=>{this.setUser(e)})),t}}),Object.defineProperty(this,"getPreference",{enumerable:!0,configurable:!0,writable:!0,value:e=>this.preferences[e]}),Object.defineProperty(this,"retryOnVersionMismatch",{enumerable:!0,configurable:!0,writable:!0,value:()=>U({delay:(e,t)=>t>1?y((()=>e)):-4===(null==e?void 0:e.code)?this.loadUser$():y((()=>e))})}),n(this,{user:a.ref,setUser:s,userDisplayName:t,preferences:t})}get userDisplayName(){return this.user?this.user.firstName&&this.user.firstName.trim()||this.user.lastName&&this.user.lastName.trim()?[this.user.firstName,this.user.lastName].filter(Boolean).join(" ").trim():this.user.email:null}afterInit(){this.disposables.push(this.api.events.pipe(q((({hub:e,event:t})=>"users"===e&&"OnUserUpdateProfile"===t)),M((({data:e})=>e.resultItems[0]))).subscribe(this.setUser))}loadUser$(){return this.api.users.GetUser().pipe(R((e=>e.success?O(e.resultItems[0]):y((()=>e.error)))),x(this.setUser),D(1))}setAuthStore(t){this.auth=t,this.disposables.push(e((()=>this.auth.isAuthenticated),(()=>{this.auth.isAuthenticated&&this.loadUser$().subscribe()})))}async updateUserPassword(e){var t,r;const i=function(){throw new Error("Config not initialized")}().changePasswordUrl,n=null===(r=null===(t=this.auth)||void 0===t?void 0:t.token)||void 0===r?void 0:r.accessToken,a=JSON.stringify({currentPassword:e.previous,newPassword:e.new}),s=new Headers;s.append("content-type","application/json"),s.append("accept","application/json"),s.append("authorization",`bearer ${n}`);const o=await fetch(i,{method:"PUT",headers:s,body:a}),{status:l}=o;if(l!==_.OK){const e=await o.json();throw new Error(e.errors[0].message)}}updateUserSettings({firstName:e,lastName:t}){const r=O(null).pipe(R((()=>{if(!this.user)throw new Error("user is not initialized");return this.api.users.UserUpdateProfile({id:this.user.id,firstName:e,lastName:t,version:this.user.version})})),R((e=>e.success?O(e.resultItems[0]):y((()=>e.error)))),this.retryOnVersionMismatch(),D());return r.subscribe((e=>{this.setUser(e)})),r}updateUserLanguage(e){const t=O(null).pipe(R((()=>{if(!this.user)throw new Error("user is not initialized");return this.api.users.UserUpdateProfile({id:this.user.id,languageCode:e,version:this.user.version})})),R((e=>e.success?O(e.resultItems[0]):y((()=>e.error)))),this.retryOnVersionMismatch(),D());return t.subscribe((e=>{this.setUser(e)})),t}setDefaultGroup(e){const t=O(null).pipe(R((()=>{if(!this.user)return y((()=>"user is not initialized"));const t={id:this.user.id,layoutStartId:e,layoutStartType:"camgroup",version:this.user.version};return this.api.users.UserUpdateProfile(t)})),R((e=>e.success?O(e.resultItems[0]):y((()=>e.error)))),this.retryOnVersionMismatch(),D());return t.subscribe({next:e=>{var t;this.setUser(e),null===(t=this.notification)||void 0===t||t.success("Successfully set default group")},error:e=>{var t;console.error(e),null===(t=this.notification)||void 0===t||t.error(e.message)}}),t}get preferences(){var e;try{return ce.parse(JSON.parse((null===(e=this.user)||void 0===e?void 0:e.jsonField)||"{}"))}catch(e){console.error(e)}return{[se.DEFAULT_VIDEO_RESIZE_MODE]:void 0,[se.RESIZE_MODE_PER_CAMERA]:void 0,[se.FISHEYE_CAMERAS]:void 0,[se.UTC]:!1,[se.HOUR12]:!1,[se.START_OF_WEEK]:"monday"}}}class he{constructor(e){Object.defineProperty(this,"json",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"startTime",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"endTime",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"streamUrl",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"duration",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"isLive",{enumerable:!0,configurable:!0,writable:!0,value:!1}),Object.defineProperty(this,"cameraId",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.json=JSON.stringify(e,null,2),this.startTime=new Date(e.startTime),this.endTime=new Date(e.endTime),this.streamUrl=e.streamUrl,this.cameraId=e.cameraId,this.duration=e.duration,this.id=e.id}}const fe=5e-4;class be extends ie{constructor(e){super(),Object.defineProperty(this,"camerasStore",{enumerable:!0,configurable:!0,writable:!0,value:e}),Object.defineProperty(this,"data",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"chunksByCameraId",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"chunksByStart",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"chunksByEnd",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"chunksById",{enumerable:!0,configurable:!0,writable:!0,value:new Map}),Object.defineProperty(this,"pendingRequests",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"pendingRequestsByEnd",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"pendingRequestsByStart",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"pendingRequestsByCameraId",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"knownIntervals",{enumerable:!0,configurable:!0,writable:!0,value:new Map}),Object.defineProperty(this,"updates",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"getClosestChunkRight",{enumerable:!0,configurable:!0,writable:!0,value:({cameraId:e,time:t})=>{this.chunksByCameraId.filter(e),this.chunksByEnd.filter([t,1/0]);const r=this.chunksByStart.bottom(1);return this.chunksByCameraId.filterAll(),this.chunksByEnd.filterAll(),r[0]}}),Object.defineProperty(this,"getClosestChunkLeft",{enumerable:!0,configurable:!0,writable:!0,value:({cameraId:e,time:t})=>{this.chunksByCameraId.filter(e),this.chunksByStart.filter([-1/0,+t+fe]);const r=this.chunksByStart.top(1);return this.chunksByCameraId.filterAll(),this.chunksByEnd.filterAll(),r[0]}}),Object.defineProperty(this,"fetchNextChunk",{enumerable:!0,configurable:!0,writable:!0,value:({cameraId:e,time:t})=>{if(this.knownIntervals.has(e)){const[r,i]=this.knownIntervals.get(e);if(r<=t&&i>=t){const r=this.getClosestChunkRight({cameraId:e,time:t});if(r)return O(r)}}return O({result:[],time:t}).pipe(N((({result:t,time:r})=>{if(t.length||r>=new Date)return d;const i=new Date(+r+36e5);return this.fetch(e,r,i).pipe(M((e=>({result:e,time:i}))))})),F(),M((()=>this.getClosestChunkRight({cameraId:e,time:t}))))}}),Object.defineProperty(this,"fetchPrevChunk",{enumerable:!0,configurable:!0,writable:!0,value:({cameraId:e,time:t})=>{if(this.knownIntervals.has(e)){const[r,i]=this.knownIntervals.get(e);if(r<=t&&i>=t){const r=this.getClosestChunkLeft({cameraId:e,time:t});if(r)return O(r)}}const r=this.camerasStore.camerasById.get(e);if(!r)return O(void 0);const i=new Date(Date.now()-3600*r.archiveDuration*1e3);return this.knownIntervals.get(e)&&this.knownIntervals.get(e)[0]<=i?O(void 0):O({result:[],time:t}).pipe(N((({result:t,time:r})=>{if(t.length||r<=i)return d;const n=new Date(Math.max(+r-36e5,+i));return this.fetch(e,n,r).pipe(M((e=>({result:e,time:n}))))})),F(),M((()=>this.getClosestChunkRight({cameraId:e,time:t}))))}}),n(this,{updates:a,add:s.bound}),this.data=G(),this.chunksByCameraId=this.data.dimension((e=>e.cameraId)),this.chunksByStart=this.data.dimension((e=>+e.startTime)),this.chunksByEnd=this.data.dimension((e=>+e.endTime)),this.pendingRequests=G(),this.pendingRequestsByStart=this.pendingRequests.dimension((e=>+e.startTime)),this.pendingRequestsByEnd=this.pendingRequests.dimension((e=>+e.endTime)),this.pendingRequestsByCameraId=this.pendingRequests.dimension((e=>e.cameraId))}fetch(e,t,r){this.pendingRequestsByCameraId.filter(e),this.pendingRequestsByStart.filter(t),this.pendingRequestsByEnd.filter(r);const i=this.pendingRequests.allFiltered()[0];if(this.pendingRequestsByCameraId.filterAll(),this.pendingRequestsByStart.filterAll(),this.pendingRequestsByEnd.filterAll(),i)return i.request;if(this.knownIntervals.has(e)){const[i,n]=this.knownIntervals.get(e);if(i<=t&&n>=r)return O(this.getChunks({cameraId:e,from:t,to:r}));i<=t&&n<r&&(t=n),i>t&&n>=r&&(r=i),r<i&&(r=i),t>n&&(t=n)}const n=this.api.archives.PopulateArchive({cameraId:e,startTime:t,endTime:r}).pipe(M((e=>e.resultItems[0].chunks.map((e=>new he(e))))),x(this.add),x((r=>this.extendKnownInterval(e,t,r))),D());return this.pendingRequests.add([{cameraId:e,startTime:t,endTime:r,request:n}]),n.pipe(x((()=>this.pendingRequests.remove((e=>e.request===n))))).subscribe(),n}extendKnownInterval(e,t,r){t=new Date(Math.min(+t,...r.map((e=>+e.startTime))));const i=new Date(Math.max(...r.map((e=>+e.endTime))));if(this.knownIntervals.has(e)){const r=this.knownIntervals.get(e);t<r[0]&&(r[0]=t),i>r[1]&&(r[1]=i)}else this.knownIntervals.set(e,[t,i])}add(e){const t=e.filter((e=>!this.chunksById.has(e.id)));t.forEach((e=>this.chunksById.set(e.id,e))),this.data.add(t),t.length&&this.updates++}getChunks({cameraId:e,from:t,to:r}){this.chunksByStart.filter([-1/0,+r+fe]),this.chunksByEnd.filter([t,1/0]),e&&this.chunksByCameraId.filter(e);const i=this.chunksByStart.top(1/0);return e&&this.chunksByCameraId.filterAll(),this.chunksByStart.filterAll(),this.chunksByEnd.filterAll(),i}afterInit(){this.api.events.pipe(q((({hub:e,event:t})=>"archives"===e&&"OnArchiveChunksCreated"===t))).subscribe((({data:e})=>{this.add(e.resultItems.map((e=>new he(e))))}))}}class pe{get isOnline(){return this.enabled&&"Started"===this.state}get supportsWebRTC(){return!!this.webRtcUrl}constructor(e){Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"imageUrl",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"streamUrl",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"dashStreamUrl",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"address",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"archiveDuration",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"dvrWindowLength",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"stateUpdatedAt",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"raw",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"enabled",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"isMicEnabled",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"state",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"pin",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"webRtcUrl",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"isPtz",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"permissions",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"update",{enumerable:!0,configurable:!0,writable:!0,value:e=>{this.raw=e,this.id=e.id,this.name=e.name,this.isPtz=e.isPTZ,this.isMicEnabled=e.isMicEnabled,this.imageUrl=e.imageUrl,this.address=e.cameraAddress?JSON.parse(e.cameraAddress):null,this.streamUrl=e.streamUrl,this.dashStreamUrl=e.dashStreamUrl,this.enabled=e.enabled,this.state=this.raw.cameraState,this.dvrWindowLength=e.dvrWindowLength?1e3*e.dvrWindowLength:e.dvrWindowLength,this.archiveDuration=e.archiveDuration,this.pin=e.pin,this.webRtcUrl=e.webRtcUrl,this.permissions=e.permissions||0,this.stateUpdatedAt=new Date(e.cameraStateChangedTime)}}),Object.defineProperty(this,"can",{enumerable:!0,configurable:!0,writable:!0,value:e=>this.permissions&e}),n(this,{name:a,streamUrl:a,dashStreamUrl:a,enabled:a,isMicEnabled:a,state:a,pin:a,webRtcUrl:a,permissions:a,isOnline:t,update:s}),this.update(e)}}var ve;!function(e){e[e.View=1]="View",e[e.SaveClip=2]="SaveClip",e[e.Share=4]="Share",e[e.Ptz=8]="Ptz",e[e.EditSettings=16]="EditSettings",e[e.Timelapse=32]="Timelapse",e[e.Delete=64]="Delete"}(ve||(ve={}));class me extends ie{constructor(){super(),Object.defineProperty(this,"camerasById",{enumerable:!0,configurable:!0,writable:!0,value:new Map}),Object.defineProperty(this,"data",{enumerable:!0,configurable:!0,writable:!0,value:[]}),Object.defineProperty(this,"loading",{enumerable:!0,configurable:!0,writable:!0,value:!1}),Object.defineProperty(this,"loaded",{enumerable:!0,configurable:!0,writable:!0,value:!1}),Object.defineProperty(this,"pendingLoadRequest",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"requestsCanceler",{enumerable:!0,configurable:!0,writable:!0,value:new l}),Object.defineProperty(this,"load",{enumerable:!0,configurable:!0,writable:!0,value:()=>{if(this.loaded)return O([]);if(this.pendingLoadRequest)return this.pendingLoadRequest;i((()=>this.loading=!0));const e=this.pendingLoadRequest=this.api.cameras.GetCameras({},null).pipe(v((e=>e.success?O(e.resultItems):(console.error(e.error),y((()=>e.error))))),T(1),g(this.requestsCanceler));return e.subscribe((e=>{this.pendingLoadRequest=void 0,i((()=>{this.add(e),this.loading=!1,this.loaded=!0}))})),e}}),Object.defineProperty(this,"add",{enumerable:!0,configurable:!0,writable:!0,value:e=>{e.forEach((e=>{this.camerasById.has(e.id)?this.camerasById.get(e.id).update(e):this.camerasById.set(e.id,new pe(e))})),this.data=Array.from(this.camerasById.values()).sort(((e,t)=>W(e.name,t.name,{caseInsensitive:!0})))}}),Object.defineProperty(this,"sync",{enumerable:!0,configurable:!0,writable:!0,value:()=>{const e=this.data.reduce(((e,t)=>Math.max(e,+t.stateUpdatedAt)),0);if(!e)return d;const t=this.api.cameras.GetCameras({},new Date(1e3*(Math.floor(e/1e3)+1))).pipe(v((e=>e.success?O(e.resultItems):(console.error(e.error),y((()=>e.error))))),T(1),g(this.requestsCanceler));return t.subscribe((e=>this.add(e))),t}}),n(this,{data:a.ref,loading:a,loaded:a,add:s}),this.disposables.push(o((()=>this.loaded),(()=>{this.api.connection$.pipe(S(1),B((()=>this.sync()))).subscribe()})))}afterInit(){this.disposables.push(this.api.events.pipe(f((({hub:e,event:t})=>"cameras"===e&&("OnCameraUpdated"===t||"OnSystemCameraUpdated"===t))),C((({data:e,event:t})=>e.resultItems?{data:e.resultItems[0],event:t}:{data:e,event:t}))).subscribe((({data:e,event:t})=>{const r=this.camerasById.get(e.id);if(!r)return console.warn("got update for unknown camera:",e.id);if("OnSystemCameraUpdated"===t){const t=r.raw;for(const[r,i]of Object.entries(e))null===i&&(e[r]=t[r])}r.update(e)})))}dispose(){this.requestsCanceler.next(),this.camerasById.clear(),this.data=[],this.loading=!1,this.loaded=!1,super.dispose()}}const ye={amber:{50:"#fff8e1",100:"#ffecb3",200:"#ffe082",300:"#ffd54f",400:"#ffca28",500:"#ffc107",600:"#ffb300",700:"#ffa000",800:"#ff8f00",900:"#ff6f00",A100:"#ffe57f",A200:"#ffd740",A400:"#ffc400",A700:"#ffab00"},blue:{50:"#e3f2fd",100:"#bbdefb",200:"#90caf9",300:"#64b5f6",400:"#42a5f5",500:"#2196f3",600:"#1e88e5",700:"#1976d2",800:"#1565c0",900:"#0d47a1",A100:"#82b1ff",A200:"#448aff",A400:"#2979ff",A700:"#2962ff"},blueGrey:{50:"#eceff1",100:"#cfd8dc",200:"#b0bec5",300:"#90a4ae",400:"#78909c",500:"#607d8b",600:"#546e7a",700:"#455a64",800:"#37474f",900:"#263238",A100:"#cfd8dc",A200:"#b0bec5",A400:"#78909c",A700:"#455a64"},brown:{50:"#efebe9",100:"#d7ccc8",200:"#bcaaa4",300:"#a1887f",400:"#8d6e63",500:"#795548",600:"#6d4c41",700:"#5d4037",800:"#4e342e",900:"#3e2723",A100:"#d7ccc8",A200:"#bcaaa4",A400:"#8d6e63",A700:"#5d4037"},cyan:{50:"#e0f7fa",100:"#b2ebf2",200:"#80deea",300:"#4dd0e1",400:"#26c6da",500:"#00bcd4",600:"#00acc1",700:"#0097a7",800:"#00838f",900:"#006064",A100:"#84ffff",A200:"#18ffff",A400:"#00e5ff",A700:"#00b8d4"},deepOrange:{50:"#fbe9e7",100:"#ffccbc",200:"#ffab91",300:"#ff8a65",400:"#ff7043",500:"#ff5722",600:"#f4511e",700:"#e64a19",800:"#d84315",900:"#bf360c",A100:"#ff9e80",A200:"#ff6e40",A400:"#ff3d00",A700:"#dd2c00"},deepPurple:{50:"#ede7f6",100:"#d1c4e9",200:"#b39ddb",300:"#9575cd",400:"#7e57c2",500:"#673ab7",600:"#5e35b1",700:"#512da8",800:"#4527a0",900:"#311b92",A100:"#b388ff",A200:"#7c4dff",A400:"#651fff",A700:"#6200ea"},green:{50:"#e8f5e9",100:"#c8e6c9",200:"#a5d6a7",300:"#81c784",400:"#66bb6a",500:"#4caf50",600:"#43a047",700:"#388e3c",800:"#2e7d32",900:"#1b5e20",A100:"#b9f6ca",A200:"#69f0ae",A400:"#00e676",A700:"#00c853"},grey:{50:"#fafafa",100:"#f5f5f5",200:"#eeeeee",300:"#e0e0e0",400:"#bdbdbd",500:"#9e9e9e",600:"#757575",700:"#616161",800:"#424242",900:"#212121",A100:"#f5f5f5",A200:"#eeeeee",A400:"#bdbdbd",A700:"#616161"},indigo:{50:"#e8eaf6",100:"#c5cae9",200:"#9fa8da",300:"#7986cb",400:"#5c6bc0",500:"#3f51b5",600:"#3949ab",700:"#303f9f",800:"#283593",900:"#1a237e",A100:"#8c9eff",A200:"#536dfe",A400:"#3d5afe",A700:"#304ffe"},lightBlue:{50:"#e1f5fe",100:"#b3e5fc",200:"#81d4fa",300:"#4fc3f7",400:"#29b6f6",500:"#03a9f4",600:"#039be5",700:"#0288d1",800:"#0277bd",900:"#01579b",A100:"#80d8ff",A200:"#40c4ff",A400:"#00b0ff",A700:"#0091ea"},lightGreen:{50:"#f1f8e9",100:"#dcedc8",200:"#c5e1a5",300:"#aed581",400:"#9ccc65",500:"#8bc34a",600:"#7cb342",700:"#689f38",800:"#558b2f",900:"#33691e",A100:"#ccff90",A200:"#b2ff59",A400:"#76ff03",A700:"#64dd17"},lime:{50:"#f9fbe7",100:"#f0f4c3",200:"#e6ee9c",300:"#dce775",400:"#d4e157",500:"#cddc39",600:"#c0ca33",700:"#afb42b",800:"#9e9d24",900:"#827717",A100:"#f4ff81",A200:"#eeff41",A400:"#c6ff00",A700:"#aeea00"},orange:{50:"#fff3e0",100:"#ffe0b2",200:"#ffcc80",300:"#ffb74d",400:"#ffa726",500:"#ff9800",600:"#fb8c00",700:"#f57c00",800:"#ef6c00",900:"#e65100",A100:"#ffd180",A200:"#ffab40",A400:"#ff9100",A700:"#ff6d00"},pink:{50:"#fce4ec",100:"#f8bbd0",200:"#f48fb1",300:"#f06292",400:"#ec407a",500:"#e91e63",600:"#d81b60",700:"#c2185b",800:"#ad1457",900:"#880e4f",A100:"#ff80ab",A200:"#ff4081",A400:"#f50057",A700:"#c51162"},purple:{50:"#f3e5f5",100:"#e1bee7",200:"#ce93d8",300:"#ba68c8",400:"#ab47bc",500:"#9c27b0",600:"#8e24aa",700:"#7b1fa2",800:"#6a1b9a",900:"#4a148c",A100:"#ea80fc",A200:"#e040fb",A400:"#d500f9",A700:"#aa00ff"},red:{50:"#ffebee",100:"#ffcdd2",200:"#ef9a9a",300:"#e57373",400:"#ef5350",500:"#f44336",600:"#e53935",700:"#d32f2f",800:"#c62828",900:"#b71c1c",A100:"#ff8a80",A200:"#ff5252",A400:"#ff1744",A700:"#d50000"},teal:{50:"#e0f2f1",100:"#b2dfdb",200:"#80cbc4",300:"#4db6ac",400:"#26a69a",500:"#009688",600:"#00897b",700:"#00796b",800:"#00695c",900:"#004d40",A100:"#a7ffeb",A200:"#64ffda",A400:"#1de9b6",A700:"#00bfa5"},yellow:{50:"#fffde7",100:"#fff9c4",200:"#fff59d",300:"#fff176",400:"#ffee58",500:"#ffeb3b",600:"#fdd835",700:"#fbc02d",800:"#f9a825",900:"#f57f17",A100:"#ffff8d",A200:"#ffff00",A400:"#ffea00",A700:"#ffd600"}},ge={Person:"red",Car:"green",Animal:"blue",LicensePlate:"cyan",Fire:"deepOrange",Smoke:"deepPurple"},we=["green","red","blue","purple","teal","amber","pink","cyan","lightGreen","deepOrange","deepPurple","lime","indigo","lightBlue"];class Oe extends ie{constructor(){super(),Object.defineProperty(this,"schemaDescription",{enumerable:!0,configurable:!0,writable:!0,value:[]}),Object.defineProperty(this,"fetchAnalyticEventSchema",{enumerable:!0,configurable:!0,writable:!0,value:()=>{this.api.cameras.GetSensorDataSchema("Analytic").subscribe({next:e=>{e.success?i((()=>{this.schemaDescription=e.resultItems})):console.error(e)},error:console.error})}}),n(this,{schemaDescription:a.ref,foundObjectTypes:t,foundObjectTypesForSelect:t,colorsByFoundObjectType:t})}get foundObjectTypes(){if(!this.schemaDescription.length)return[];const e=this.schemaDescription.filter((e=>"filter"===e.parameterType&&"Type"===e.fieldName&&"Analytic"===e.eventType))[0];return e?e.valueSet.includes("LicensePlate")?e.valueSet.split(", "):e.valueSet.split(", ").concat(["LicensePlate"]):[]}get foundObjectTypesForSelect(){const e=Object.entries(ge).filter((([e])=>this.foundObjectTypes.includes(e))).map((([,e])=>e)),t=we.filter((t=>!e.includes(t)));let r=0;return this.foundObjectTypes.map((e=>{const i=e in ge?ge[e]:t[r++],n=ye[i];return{id:e,name:e.toLowerCase(),color:n[500],highlightColor:n.A400,type:"detectedObject"}}))}get colorsByFoundObjectType(){const e=new Map;return this.foundObjectTypesForSelect.forEach((t=>{e.set(t.id,t.highlightColor)})),e}afterInit(){this.fetchAnalyticEventSchema()}dispose(){super.dispose(),this.schemaDescription=[]}}var je="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function Pe(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var Ie=function(e,t,r,i){for(var n=-1,a=null==e?0:e.length;++n<a;){var s=e[n];t(i,s,r(s),e)}return i};var Ae=function(e){return function(t,r,i){for(var n=-1,a=Object(t),s=i(t),o=s.length;o--;){var l=s[e?o:++n];if(!1===r(a[l],l,a))break}return t}}();var ke=function(e,t){for(var r=-1,i=Array(e);++r<e;)i[r]=t(r);return i},Te="object"==typeof je&&je&&je.Object===Object&&je,Se=Te,Be="object"==typeof self&&self&&self.Object===Object&&self,Ce=Se||Be||Function("return this")(),Ee=Ce.Symbol,_e=Ee,Re=Object.prototype,De=Re.hasOwnProperty,Ue=Re.toString,qe=_e?_e.toStringTag:void 0;var Me=function(e){var t=De.call(e,qe),r=e[qe];try{e[qe]=void 0;var i=!0}catch(e){}var n=Ue.call(e);return i&&(t?e[qe]=r:delete e[qe]),n},xe=Object.prototype.toString;var Ne=Me,Fe=function(e){return xe.call(e)},ze=Ee?Ee.toStringTag:void 0;var Le=function(e){return null==e?void 0===e?"[object Undefined]":"[object Null]":ze&&ze in Object(e)?Ne(e):Fe(e)};var Ge=function(e){return null!=e&&"object"==typeof e},We=Le,$e=Ge;var Ve=function(e){return $e(e)&&"[object Arguments]"==We(e)},He=Ge,Ke=Object.prototype,Je=Ke.hasOwnProperty,Ze=Ke.propertyIsEnumerable,Ye=Ve(function(){return arguments}())?Ve:function(e){return He(e)&&Je.call(e,"callee")&&!Ze.call(e,"callee")},Qe=Array.isArray,Xe={exports:{}};var et=function(){return!1};!function(e,t){var r=Ce,i=et,n=t&&!t.nodeType&&t,a=n&&e&&!e.nodeType&&e,s=a&&a.exports===n?r.Buffer:void 0,o=(s?s.isBuffer:void 0)||i;e.exports=o}(Xe,Xe.exports);var tt=Xe.exports,rt=/^(?:0|[1-9]\d*)$/;var it=function(e,t){var r=typeof e;return!!(t=null==t?9007199254740991:t)&&("number"==r||"symbol"!=r&&rt.test(e))&&e>-1&&e%1==0&&e<t};var nt=function(e){return"number"==typeof e&&e>-1&&e%1==0&&e<=9007199254740991},at=Le,st=nt,ot=Ge,lt={};lt["[object Float32Array]"]=lt["[object Float64Array]"]=lt["[object Int8Array]"]=lt["[object Int16Array]"]=lt["[object Int32Array]"]=lt["[object Uint8Array]"]=lt["[object Uint8ClampedArray]"]=lt["[object Uint16Array]"]=lt["[object Uint32Array]"]=!0,lt["[object Arguments]"]=lt["[object Array]"]=lt["[object ArrayBuffer]"]=lt["[object Boolean]"]=lt["[object DataView]"]=lt["[object Date]"]=lt["[object Error]"]=lt["[object Function]"]=lt["[object Map]"]=lt["[object Number]"]=lt["[object Object]"]=lt["[object RegExp]"]=lt["[object Set]"]=lt["[object String]"]=lt["[object WeakMap]"]=!1;var ut=function(e){return ot(e)&&st(e.length)&&!!lt[at(e)]};var ct=function(e){return function(t){return e(t)}},dt={exports:{}};!function(e,t){var r=Te,i=t&&!t.nodeType&&t,n=i&&e&&!e.nodeType&&e,a=n&&n.exports===i&&r.process,s=function(){try{var e=n&&n.require&&n.require("util").types;return e||a&&a.binding&&a.binding("util")}catch(e){}}();e.exports=s}(dt,dt.exports);var ht=dt.exports,ft=ut,bt=ct,pt=ht&&ht.isTypedArray,vt=pt?bt(pt):ft,mt=ke,yt=Ye,gt=Qe,wt=tt,Ot=it,jt=vt,Pt=Object.prototype.hasOwnProperty;var It=function(e,t){var r=gt(e),i=!r&&yt(e),n=!r&&!i&&wt(e),a=!r&&!i&&!n&&jt(e),s=r||i||n||a,o=s?mt(e.length,String):[],l=o.length;for(var u in e)!t&&!Pt.call(e,u)||s&&("length"==u||n&&("offset"==u||"parent"==u)||a&&("buffer"==u||"byteLength"==u||"byteOffset"==u)||Ot(u,l))||o.push(u);return o},At=Object.prototype;var kt=function(e){var t=e&&e.constructor;return e===("function"==typeof t&&t.prototype||At)};var Tt=function(e,t){return function(r){return e(t(r))}}(Object.keys,Object),St=kt,Bt=Tt,Ct=Object.prototype.hasOwnProperty;var Et=function(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)},_t=Le,Rt=Et;var Dt=function(e){if(!Rt(e))return!1;var t=_t(e);return"[object Function]"==t||"[object GeneratorFunction]"==t||"[object AsyncFunction]"==t||"[object Proxy]"==t},Ut=Dt,qt=nt;var Mt=function(e){return null!=e&&qt(e.length)&&!Ut(e)},xt=It,Nt=function(e){if(!St(e))return Bt(e);var t=[];for(var r in Object(e))Ct.call(e,r)&&"constructor"!=r&&t.push(r);return t},Ft=Mt;var zt=function(e){return Ft(e)?xt(e):Nt(e)},Lt=Ae,Gt=zt;var Wt=Mt;var $t=function(e,t){return function(r,i){if(null==r)return r;if(!Wt(r))return e(r,i);for(var n=r.length,a=t?n:-1,s=Object(r);(t?a--:++a<n)&&!1!==i(s[a],a,s););return r}}((function(e,t){return e&&Lt(e,t,Gt)}));var Vt=function(e,t,r,i){return $t(e,(function(e,n,a){t(i,e,r(e),a)})),i};var Ht=function(){this.__data__=[],this.size=0};var Kt=function(e,t){return e===t||e!=e&&t!=t},Jt=Kt;var Zt=function(e,t){for(var r=e.length;r--;)if(Jt(e[r][0],t))return r;return-1},Yt=Zt,Qt=Array.prototype.splice;var Xt=Zt;var er=Zt;var tr=Zt;var rr=Ht,ir=function(e){var t=this.__data__,r=Yt(t,e);return!(r<0)&&(r==t.length-1?t.pop():Qt.call(t,r,1),--this.size,!0)},nr=function(e){var t=this.__data__,r=Xt(t,e);return r<0?void 0:t[r][1]},ar=function(e){return er(this.__data__,e)>-1},sr=function(e,t){var r=this.__data__,i=tr(r,e);return i<0?(++this.size,r.push([e,t])):r[i][1]=t,this};function or(e){var t=-1,r=null==e?0:e.length;for(this.clear();++t<r;){var i=e[t];this.set(i[0],i[1])}}or.prototype.clear=rr,or.prototype.delete=ir,or.prototype.get=nr,or.prototype.has=ar,or.prototype.set=sr;var lr=or,ur=lr;var cr=function(){this.__data__=new ur,this.size=0};var dr=function(e){var t=this.__data__,r=t.delete(e);return this.size=t.size,r};var hr=function(e){return this.__data__.get(e)};var fr,br=function(e){return this.__data__.has(e)},pr=Ce["__core-js_shared__"],vr=(fr=/[^.]+$/.exec(pr&&pr.keys&&pr.keys.IE_PROTO||""))?"Symbol(src)_1."+fr:"";var mr=function(e){return!!vr&&vr in e},yr=Function.prototype.toString;var gr=function(e){if(null!=e){try{return yr.call(e)}catch(e){}try{return e+""}catch(e){}}return""},wr=Dt,Or=mr,jr=Et,Pr=gr,Ir=/^\[object .+?Constructor\]$/,Ar=Function.prototype,kr=Object.prototype,Tr=Ar.toString,Sr=kr.hasOwnProperty,Br=RegExp("^"+Tr.call(Sr).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");var Cr=function(e){return!(!jr(e)||Or(e))&&(wr(e)?Br:Ir).test(Pr(e))},Er=function(e,t){return null==e?void 0:e[t]};var _r=function(e,t){var r=Er(e,t);return Cr(r)?r:void 0},Rr=_r(Ce,"Map"),Dr=_r(Object,"create"),Ur=Dr;var qr=function(){this.__data__=Ur?Ur(null):{},this.size=0};var Mr=function(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t},xr=Dr,Nr=Object.prototype.hasOwnProperty;var Fr=function(e){var t=this.__data__;if(xr){var r=t[e];return"__lodash_hash_undefined__"===r?void 0:r}return Nr.call(t,e)?t[e]:void 0},zr=Dr,Lr=Object.prototype.hasOwnProperty;var Gr=Dr;var Wr=qr,$r=Mr,Vr=Fr,Hr=function(e){var t=this.__data__;return zr?void 0!==t[e]:Lr.call(t,e)},Kr=function(e,t){var r=this.__data__;return this.size+=this.has(e)?0:1,r[e]=Gr&&void 0===t?"__lodash_hash_undefined__":t,this};function Jr(e){var t=-1,r=null==e?0:e.length;for(this.clear();++t<r;){var i=e[t];this.set(i[0],i[1])}}Jr.prototype.clear=Wr,Jr.prototype.delete=$r,Jr.prototype.get=Vr,Jr.prototype.has=Hr,Jr.prototype.set=Kr;var Zr=Jr,Yr=lr,Qr=Rr;var Xr=function(e){var t=typeof e;return"string"==t||"number"==t||"symbol"==t||"boolean"==t?"__proto__"!==e:null===e};var ei=function(e,t){var r=e.__data__;return Xr(t)?r["string"==typeof t?"string":"hash"]:r.map},ti=ei;var ri=ei;var ii=ei;var ni=ei;var ai=function(){this.size=0,this.__data__={hash:new Zr,map:new(Qr||Yr),string:new Zr}},si=function(e){var t=ti(this,e).delete(e);return this.size-=t?1:0,t},oi=function(e){return ri(this,e).get(e)},li=function(e){return ii(this,e).has(e)},ui=function(e,t){var r=ni(this,e),i=r.size;return r.set(e,t),this.size+=r.size==i?0:1,this};function ci(e){var t=-1,r=null==e?0:e.length;for(this.clear();++t<r;){var i=e[t];this.set(i[0],i[1])}}ci.prototype.clear=ai,ci.prototype.delete=si,ci.prototype.get=oi,ci.prototype.has=li,ci.prototype.set=ui;var di=ci,hi=lr,fi=Rr,bi=di;var pi=lr,vi=cr,mi=dr,yi=hr,gi=br,wi=function(e,t){var r=this.__data__;if(r instanceof hi){var i=r.__data__;if(!fi||i.length<199)return i.push([e,t]),this.size=++r.size,this;r=this.__data__=new bi(i)}return r.set(e,t),this.size=r.size,this};function Oi(e){var t=this.__data__=new pi(e);this.size=t.size}Oi.prototype.clear=vi,Oi.prototype.delete=mi,Oi.prototype.get=yi,Oi.prototype.has=gi,Oi.prototype.set=wi;var ji=Oi;var Pi=di,Ii=function(e){return this.__data__.set(e,"__lodash_hash_undefined__"),this},Ai=function(e){return this.__data__.has(e)};function ki(e){var t=-1,r=null==e?0:e.length;for(this.__data__=new Pi;++t<r;)this.add(e[t])}ki.prototype.add=ki.prototype.push=Ii,ki.prototype.has=Ai;var Ti=ki;var Si=function(e,t){return e.has(t)},Bi=Ti,Ci=function(e,t){for(var r=-1,i=null==e?0:e.length;++r<i;)if(t(e[r],r,e))return!0;return!1},Ei=Si;var _i=function(e,t,r,i,n,a){var s=1&r,o=e.length,l=t.length;if(o!=l&&!(s&&l>o))return!1;var u=a.get(e),c=a.get(t);if(u&&c)return u==t&&c==e;var d=-1,h=!0,f=2&r?new Bi:void 0;for(a.set(e,t),a.set(t,e);++d<o;){var b=e[d],p=t[d];if(i)var v=s?i(p,b,d,t,e,a):i(b,p,d,e,t,a);if(void 0!==v){if(v)continue;h=!1;break}if(f){if(!Ci(t,(function(e,t){if(!Ei(f,t)&&(b===e||n(b,e,r,i,a)))return f.push(t)}))){h=!1;break}}else if(b!==p&&!n(b,p,r,i,a)){h=!1;break}}return a.delete(e),a.delete(t),h};var Ri=function(e){var t=-1,r=Array(e.size);return e.forEach((function(e,i){r[++t]=[i,e]})),r};var Di=function(e){var t=-1,r=Array(e.size);return e.forEach((function(e){r[++t]=e})),r},Ui=Ce.Uint8Array,qi=Kt,Mi=_i,xi=Ri,Ni=Di,Fi=Ee?Ee.prototype:void 0,zi=Fi?Fi.valueOf:void 0;var Li=function(e,t,r,i,n,a,s){switch(r){case"[object DataView]":if(e.byteLength!=t.byteLength||e.byteOffset!=t.byteOffset)return!1;e=e.buffer,t=t.buffer;case"[object ArrayBuffer]":return!(e.byteLength!=t.byteLength||!a(new Ui(e),new Ui(t)));case"[object Boolean]":case"[object Date]":case"[object Number]":return qi(+e,+t);case"[object Error]":return e.name==t.name&&e.message==t.message;case"[object RegExp]":case"[object String]":return e==t+"";case"[object Map]":var o=xi;case"[object Set]":var l=1&i;if(o||(o=Ni),e.size!=t.size&&!l)return!1;var u=s.get(e);if(u)return u==t;i|=2,s.set(e,t);var c=Mi(o(e),o(t),i,n,a,s);return s.delete(e),c;case"[object Symbol]":if(zi)return zi.call(e)==zi.call(t)}return!1};var Gi=function(e,t){for(var r=-1,i=t.length,n=e.length;++r<i;)e[n+r]=t[r];return e},Wi=Qe;var $i=function(e,t,r){var i=t(e);return Wi(e)?i:Gi(i,r(e))};var Vi=function(e,t){for(var r=-1,i=null==e?0:e.length,n=0,a=[];++r<i;){var s=e[r];t(s,r,e)&&(a[n++]=s)}return a},Hi=function(){return[]},Ki=Object.prototype.propertyIsEnumerable,Ji=Object.getOwnPropertySymbols,Zi=$i,Yi=Ji?function(e){return null==e?[]:(e=Object(e),Vi(Ji(e),(function(t){return Ki.call(e,t)})))}:Hi,Qi=zt;var Xi=function(e){return Zi(e,Qi,Yi)},en=Object.prototype.hasOwnProperty;var tn=function(e,t,r,i,n,a){var s=1&r,o=Xi(e),l=o.length;if(l!=Xi(t).length&&!s)return!1;for(var u=l;u--;){var c=o[u];if(!(s?c in t:en.call(t,c)))return!1}var d=a.get(e),h=a.get(t);if(d&&h)return d==t&&h==e;var f=!0;a.set(e,t),a.set(t,e);for(var b=s;++u<l;){var p=e[c=o[u]],v=t[c];if(i)var m=s?i(v,p,c,t,e,a):i(p,v,c,e,t,a);if(!(void 0===m?p===v||n(p,v,r,i,a):m)){f=!1;break}b||(b="constructor"==c)}if(f&&!b){var y=e.constructor,g=t.constructor;y==g||!("constructor"in e)||!("constructor"in t)||"function"==typeof y&&y instanceof y&&"function"==typeof g&&g instanceof g||(f=!1)}return a.delete(e),a.delete(t),f},rn=_r(Ce,"DataView"),nn=_r(Ce,"Promise"),an=_r(Ce,"Set"),sn=rn,on=Rr,ln=nn,un=an,cn=_r(Ce,"WeakMap"),dn=Le,hn=gr,fn="[object Map]",bn="[object Promise]",pn="[object Set]",vn="[object WeakMap]",mn="[object DataView]",yn=hn(sn),gn=hn(on),wn=hn(ln),On=hn(un),jn=hn(cn),Pn=dn;(sn&&Pn(new sn(new ArrayBuffer(1)))!=mn||on&&Pn(new on)!=fn||ln&&Pn(ln.resolve())!=bn||un&&Pn(new un)!=pn||cn&&Pn(new cn)!=vn)&&(Pn=function(e){var t=dn(e),r="[object Object]"==t?e.constructor:void 0,i=r?hn(r):"";if(i)switch(i){case yn:return mn;case gn:return fn;case wn:return bn;case On:return pn;case jn:return vn}return t});var In=ji,An=_i,kn=Li,Tn=tn,Sn=Pn,Bn=Qe,Cn=tt,En=vt,_n="[object Arguments]",Rn="[object Array]",Dn="[object Object]",Un=Object.prototype.hasOwnProperty;var qn=function(e,t,r,i,n,a){var s=Bn(e),o=Bn(t),l=s?Rn:Sn(e),u=o?Rn:Sn(t),c=(l=l==_n?Dn:l)==Dn,d=(u=u==_n?Dn:u)==Dn,h=l==u;if(h&&Cn(e)){if(!Cn(t))return!1;s=!0,c=!1}if(h&&!c)return a||(a=new In),s||En(e)?An(e,t,r,i,n,a):kn(e,t,l,r,i,n,a);if(!(1&r)){var f=c&&Un.call(e,"__wrapped__"),b=d&&Un.call(t,"__wrapped__");if(f||b){var p=f?e.value():e,v=b?t.value():t;return a||(a=new In),n(p,v,r,i,a)}}return!!h&&(a||(a=new In),Tn(e,t,r,i,n,a))},Mn=Ge;var xn=function e(t,r,i,n,a){return t===r||(null==t||null==r||!Mn(t)&&!Mn(r)?t!=t&&r!=r:qn(t,r,i,n,e,a))},Nn=ji,Fn=xn;var zn=Et;var Ln=function(e){return e==e&&!zn(e)},Gn=Ln,Wn=zt;var $n=function(e,t){return function(r){return null!=r&&(r[e]===t&&(void 0!==t||e in Object(r)))}},Vn=function(e,t,r,i){var n=r.length,a=n,s=!i;if(null==e)return!a;for(e=Object(e);n--;){var o=r[n];if(s&&o[2]?o[1]!==e[o[0]]:!(o[0]in e))return!1}for(;++n<a;){var l=(o=r[n])[0],u=e[l],c=o[1];if(s&&o[2]){if(void 0===u&&!(l in e))return!1}else{var d=new Nn;if(i)var h=i(u,c,l,e,t,d);if(!(void 0===h?Fn(c,u,3,i,d):h))return!1}}return!0},Hn=function(e){for(var t=Wn(e),r=t.length;r--;){var i=t[r],n=e[i];t[r]=[i,n,Gn(n)]}return t},Kn=$n;var Jn=function(e){var t=Hn(e);return 1==t.length&&t[0][2]?Kn(t[0][0],t[0][1]):function(r){return r===e||Vn(r,e,t)}},Zn=Le,Yn=Ge;var Qn=function(e){return"symbol"==typeof e||Yn(e)&&"[object Symbol]"==Zn(e)},Xn=Qe,ea=Qn,ta=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,ra=/^\w*$/;var ia=function(e,t){if(Xn(e))return!1;var r=typeof e;return!("number"!=r&&"symbol"!=r&&"boolean"!=r&&null!=e&&!ea(e))||(ra.test(e)||!ta.test(e)||null!=t&&e in Object(t))},na=di;function aa(e,t){if("function"!=typeof e||null!=t&&"function"!=typeof t)throw new TypeError("Expected a function");var r=function(){var i=arguments,n=t?t.apply(this,i):i[0],a=r.cache;if(a.has(n))return a.get(n);var s=e.apply(this,i);return r.cache=a.set(n,s)||a,s};return r.cache=new(aa.Cache||na),r}aa.Cache=na;var sa=aa;var oa=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,la=/\\(\\)?/g,ua=function(e){var t=sa(e,(function(e){return 500===r.size&&r.clear(),e})),r=t.cache;return t}((function(e){var t=[];return 46===e.charCodeAt(0)&&t.push(""),e.replace(oa,(function(e,r,i,n){t.push(i?n.replace(la,"$1"):r||e)})),t}));var ca=function(e,t){for(var r=-1,i=null==e?0:e.length,n=Array(i);++r<i;)n[r]=t(e[r],r,e);return n},da=Qe,ha=Qn,fa=Ee?Ee.prototype:void 0,ba=fa?fa.toString:void 0;var pa=function e(t){if("string"==typeof t)return t;if(da(t))return ca(t,e)+"";if(ha(t))return ba?ba.call(t):"";var r=t+"";return"0"==r&&1/t==-Infinity?"-0":r},va=pa;var ma=Qe,ya=ia,ga=ua,wa=function(e){return null==e?"":va(e)};var Oa=function(e,t){return ma(e)?e:ya(e,t)?[e]:ga(wa(e))},ja=Qn;var Pa=function(e){if("string"==typeof e||ja(e))return e;var t=e+"";return"0"==t&&1/e==-Infinity?"-0":t},Ia=Oa,Aa=Pa;var ka=function(e,t){for(var r=0,i=(t=Ia(t,e)).length;null!=e&&r<i;)e=e[Aa(t[r++])];return r&&r==i?e:void 0},Ta=ka;var Sa=Oa,Ba=Ye,Ca=Qe,Ea=it,_a=nt,Ra=Pa;var Da=function(e,t){return null!=e&&t in Object(e)},Ua=function(e,t,r){for(var i=-1,n=(t=Sa(t,e)).length,a=!1;++i<n;){var s=Ra(t[i]);if(!(a=null!=e&&r(e,s)))break;e=e[s]}return a||++i!=n?a:!!(n=null==e?0:e.length)&&_a(n)&&Ea(s,n)&&(Ca(e)||Ba(e))};var qa=xn,Ma=function(e,t,r){var i=null==e?void 0:Ta(e,t);return void 0===i?r:i},xa=function(e,t){return null!=e&&Ua(e,t,Da)},Na=ia,Fa=Ln,za=$n,La=Pa;var Ga=ka;var Wa=function(e){return function(t){return null==t?void 0:t[e]}},$a=function(e){return function(t){return Ga(t,e)}},Va=ia,Ha=Pa;var Ka=Jn,Ja=function(e,t){return Na(e)&&Fa(t)?za(La(e),t):function(r){var i=Ma(r,e);return void 0===i&&i===t?xa(r,e):qa(t,i,3)}},Za=function(e){return e},Ya=Qe,Qa=function(e){return Va(e)?Wa(Ha(e)):$a(e)};var Xa=function(e){return"function"==typeof e?e:null==e?Za:"object"==typeof e?Ya(e)?Ja(e[0],e[1]):Ka(e):Qa(e)},es=Ie,ts=Vt,rs=Xa,is=Qe;var ns=Pe(function(e,t){return function(r,i){var n=is(r)?es:ts,a=t?t():{};return n(r,e,rs(i),a)}}((function(e,t,r){e[r?0:1].push(t)}),(function(){return[[],[]]})));var as=function(e,t,r,i){for(var n=e.length,a=r+(i?1:-1);i?a--:++a<n;)if(t(e[a],a,e))return a;return-1},ss=function(e){return e!=e},os=function(e,t,r){for(var i=r-1,n=e.length;++i<n;)if(e[i]===t)return i;return-1};var ls=function(e,t,r){return t==t?os(e,t,r):as(e,ss,r)};var us=function(e,t){return!!(null==e?0:e.length)&&ls(e,t,0)>-1};var cs=function(e,t,r){for(var i=-1,n=null==e?0:e.length;++i<n;)if(r(t,e[i]))return!0;return!1};var ds=an,hs=function(){},fs=ds&&1/Di(new ds([,-0]))[1]==1/0?function(e){return new ds(e)}:hs,bs=Ti,ps=us,vs=cs,ms=Si,ys=fs,gs=Di;var ws=function(e,t,r){var i=-1,n=ps,a=e.length,s=!0,o=[],l=o;if(r)s=!1,n=vs;else if(a>=200){var u=t?null:ys(e);if(u)return gs(u);s=!1,n=ms,l=new bs}else l=t?[]:o;e:for(;++i<a;){var c=e[i],d=t?t(c):c;if(c=r||0!==c?c:0,s&&d==d){for(var h=l.length;h--;)if(l[h]===d)continue e;t&&l.push(d),o.push(c)}else n(l,d,r)||(l!==o&&l.push(d),o.push(c))}return o},Os=Xa,js=ws;var Ps=Pe((function(e,t){return e&&e.length?js(e,Os(t)):[]}));const Is=new Set(["LicensePlate","FaceDetection","Analytic","SpeedDetection","Temperature","PoS","GPS","DigitalInput"]);class As{get startTime(){return new Date(this.raw.startTime)}get endTime(){return new Date(this.raw.endTime)}get isLive(){return!Is.has(this.type)&&+this.startTime==+this.endTime}get acknowledged(){return"sensorId"in this.raw&&!!this.raw.ackEventType}constructor(e){if(Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"cameraId",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"type",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"raw",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"thumbnailUrl",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"thumbnailWidth",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"thumbnailHeight",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"detectedObjects",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"faces",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"instant",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"update",{enumerable:!0,configurable:!0,writable:!0,value:e=>{this.raw=e}}),n(this,{startTime:t,endTime:t,acknowledged:t,isLive:t,raw:a.ref,update:s}),this.raw=e,this.id=e.id,this.type=e.eventType,this.cameraId=e.sensorId,("Analytic"===this.type||"FaceDetection"===this.type||"Loitering"===this.type)&&e.data)try{const t=JSON.parse(e.data);t.FoundObjects&&(this.detectedObjects=t.FoundObjects),t.Faces&&(this.type="FaceDetection",this.faces=t.Faces),t.ThumbnailSize&&(this.thumbnailWidth=t.ThumbnailSize.Width,this.thumbnailHeight=t.ThumbnailSize.Height),this.thumbnailUrl=t.ThumbnailUrl}catch{console.warn("invalid data",e.data),this.type="Motion"}this.instant=Is.has(this.type),this.detectedObjects||(this.detectedObjects=[])}}function ks(e){if(e.length<2)return e;const t=[e[0]];for(let r=1;r<e.length;r++){const i=t.length-1,n=t[i],a=e[r];a[0]>n[1]?t.push(a):t[i]=[n[0],new Date(Math.max(+n[1],+a[1]))]}return t}const Ts=()=>!0,Ss=5e-4;class Bs extends ie{constructor(e){super(),Object.defineProperty(this,"camerasStore",{enumerable:!0,configurable:!0,writable:!0,value:e}),Object.defineProperty(this,"data",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"eventsByCameraId",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"eventsByStart",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"eventsByEnd",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"eventsByType",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"eventsByFoundObjects",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"eventsByColor",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"eventsByLiveliness",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"pendingRequests",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"pendingRequestsByEnd",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"pendingRequestsByStart",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"pendingRequestsByCameraId",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"knownIntervals",{enumerable:!0,configurable:!0,writable:!0,value:G()}),Object.defineProperty(this,"knownIntervalsByCameraId",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"knownIntervalsByStart",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"knownIntervalsByEnd",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"eventsById",{enumerable:!0,configurable:!0,writable:!0,value:new Map}),Object.defineProperty(this,"updates",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"recentAdditions",{enumerable:!0,configurable:!0,writable:!0,value:[]}),Object.defineProperty(this,"update",{enumerable:!0,configurable:!0,writable:!0,value:e=>{e.forEach((e=>{const t=this.eventsById.get(e.id);t&&(t.update(e.raw),this.data.remove((t=>t.id===e.id)),this.data.add([t]))}))}}),Object.defineProperty(this,"add",{enumerable:!0,configurable:!0,writable:!0,value:e=>{const t=e.filter((e=>!this.eventsById.has(e.id)));t.forEach((e=>this.eventsById.set(e.id,e))),this.data.add(t),t.length&&this.updates++}}),Object.defineProperty(this,"processNewEvents",{enumerable:!0,configurable:!0,writable:!0,value:({data:e})=>{const t=Ps(e.filter((e=>"PeopleCounter"!==e.eventType&&this.camerasStore.camerasById.has(e.sensorId))).reverse(),"id").map((e=>new As(e))),[r,i]=ns(t,(e=>this.eventsById.has(e.id)));this.update(r),this.add(i),i.length&&(this.recentAdditions=i.map((e=>e.id)))}}),n(this,{updates:a,recentAdditions:a.ref,processNewEvents:s,update:s,add:s,dispose:s}),this.data=G(),this.eventsByCameraId=this.data.dimension((e=>e.cameraId)),this.eventsByStart=this.data.dimension((e=>+e.startTime)),this.eventsByEnd=this.data.dimension((e=>+e.endTime)),this.eventsByType=this.data.dimension((e=>e.type)),this.eventsByFoundObjects=this.data.dimension((e=>e.detectedObjects.map((e=>e.Type))),!0),this.eventsByColor=this.data.dimension((e=>e.detectedObjects.reduce(((e,t)=>{var r,i;return e.concat(..."Colors"in t&&null!==(i=null===(r=t.Colors)||void 0===r?void 0:r.map((e=>e.Color)))&&void 0!==i?i:[])}),[])),!0),this.eventsByLiveliness=this.data.dimension((e=>e.isLive)),this.pendingRequests=G(),this.pendingRequestsByStart=this.pendingRequests.dimension((e=>+e.startTime)),this.pendingRequestsByEnd=this.pendingRequests.dimension((e=>+e.endTime)),this.pendingRequestsByCameraId=this.pendingRequests.dimension((e=>e.cameraId)),this.knownIntervalsByCameraId=this.knownIntervals.dimension((e=>e.cameraId)),this.knownIntervalsByStart=this.knownIntervals.dimension((e=>+e.from)),this.knownIntervalsByEnd=this.knownIntervals.dimension((e=>+e.to))}populateEvents(e,t,r){const i=null===r?new Date(Date.now()-6e5):r;-1===e?this.knownIntervalsByCameraId.filter(-1):this.knownIntervalsByCameraId.filter((t=>-1===t||t===e)),this.knownIntervalsByStart.filter([-1/0,i]),this.knownIntervalsByEnd.filter([t,1/0]);const n=this.knownIntervalsByStart.bottom(1/0),a=[];if(this.knownIntervalsByCameraId.filterAll(),this.knownIntervalsByStart.filterAll(),this.knownIntervalsByEnd.filterAll(),n.length){const s=ks(n.map((e=>[e.from,e.to])));s[0][0]>t&&a.push([t,s[0][0]]);for(let e=0;e<s.length-1;e++)a.push([s[e][1],s[e+1][0]]);s[ks.length-1][1]<i&&a.push([s[ks.length-1][1],i]),a.length&&(t=a[0][0],+a[a.length-1][1]<=+i&&(r=a[a.length-1][1]),this.knownIntervals.add([{cameraId:e,from:t,to:i}]))}else this.knownIntervals.add([{cameraId:e,from:t,to:i}]);this.pendingRequestsByCameraId.filter(e),this.pendingRequestsByStart.filter(t),this.pendingRequestsByEnd.filter(i);const s=this.pendingRequests.allFiltered()[0];if(this.pendingRequestsByCameraId.filterAll(),this.pendingRequestsByStart.filterAll(),this.pendingRequestsByEnd.filterAll(),s)return;if(n.length&&!a.length)return;const o=i=>this.api.cameras.GetSensorEventsPage({sensorIds:[e],sensorType:"camera",sensorEventTypes:[],startTime:t,endTime:r,rowsLimit:100,isDescending:!0,pageToken:i},null,[]).pipe(R((e=>e.success?O(e):(console.error(e.error),y((()=>e.error)))))),l=o().pipe(N((e=>e.pageInfo.haveMore?o(e.pageInfo.nextPageToken):d)),M((e=>e.resultItems.map((e=>new As(e))))),z());this.pendingRequests.add([{cameraId:e,startTime:t,endTime:r||new Date,request:l}]),l.subscribe({next:this.add,error:e=>{console.error(e),this.pendingRequests.remove((e=>e.request===l))},complete:()=>{this.pendingRequests.remove((e=>e.request===l))}})}getEvents({cameraIds:e,from:t,to:r,detectedObjectTypes:i,eventTypes:n,colors:a,probability:s}){this.eventsByStart.filter([+t,r?+r+Ss:1/0]),(null==e?void 0:e.length)&&this.eventsByCameraId.filter((t=>e.includes(t))),(null==n?void 0:n.length)&&this.eventsByType.filter((e=>n.includes(e))),(null==i?void 0:i.length)&&this.eventsByFoundObjects.filter((e=>i.includes(e))),(null==a?void 0:a.size)&&this.eventsByColor.filter((e=>a.has(e)));let o=this.eventsByStart.top(1/0);return(null==n?void 0:n.length)&&this.eventsByType.filterAll(),(null==e?void 0:e.length)&&this.eventsByCameraId.filterAll(),(null==i?void 0:i.length)&&this.eventsByFoundObjects.filterAll(),(null==a?void 0:a.size)&&this.eventsByColor.filterAll(),this.eventsByStart.filterAll(),void 0!==s&&(null==i?void 0:i.length)&&(o=o.filter((e=>e.detectedObjects.some((e=>e.Probability>=s&&i.includes(e.Type)))))),o}getOverlappedEvents({cameraId:e,from:t,to:r}){this.eventsByCameraId.filter(e),this.eventsByStart.filter([-1/0,+r+Ss]),this.eventsByEnd.filter([+t,1/0]);const i=this.eventsByStart.top(1/0);return this.eventsByCameraId.filterAll(),this.eventsByStart.filterAll(),this.eventsByEnd.filterAll(),i}getLastNonAnalyticEventBefore({cameraId:e,date:t}){this.eventsByCameraId.filter(e),this.eventsByStart.filter([-1/0,+t]),this.eventsByType.filter((e=>"Analytic"!==e));const r=this.eventsByStart.top(1);return this.eventsByType.filterAll(),this.eventsByStart.filterAll(),this.eventsByCameraId.filterAll(),r[0]}getLastObjectBefore({cameraId:e,date:t,objectFilters:r}){this.eventsByCameraId.filter(e),this.eventsByStart.filter([-1/0,+t]),this.eventsByType.filter((e=>"Analytic"===e));const{cars:i,people:n,misc:a}=r;n&&i&&a||this.eventsByFoundObjects.filter((e=>a?n||i?!(!n||!i)||(n?"Car"!==e:"Person"!==e):"Person"!==e&&"Car"!==e:n&&i?"Person"===e||"Car"===e:n?"Person"===e:"Car"===e));const s=this.eventsByStart.top(1);return this.eventsByFoundObjects.filterAll(),this.eventsByType.filterAll(),this.eventsByStart.filterAll(),this.eventsByCameraId.filterAll(),s[0]}getFirstNonAnalyticEventAfter({cameraId:e,date:t}){this.eventsByCameraId.filter(e),this.eventsByStart.filter([+t+Ss,1/0]),this.eventsByType.filter((e=>"Analytic"!==e));const r=this.eventsByEnd.bottom(1);return this.eventsByType.filterAll(),this.eventsByCameraId.filterAll(),this.eventsByStart.filterAll(),r[0]}getFirstObjectAfter({cameraId:e,date:t,objectFilters:r}){this.eventsByCameraId.filter(e),this.eventsByStart.filter([+t+Ss,1/0]),this.eventsByType.filter((e=>"Analytic"===e));const{cars:i,people:n,misc:a}=r;n&&i&&a||this.eventsByFoundObjects.filter((e=>a?n||i?!(!n||!i)||(n?"Car"!==e:"Person"!==e):"Person"!==e&&"Car"!==e:n&&i?"Person"===e||"Car"===e:n?"Person"===e:"Car"===e));const s=this.eventsByStart.bottom(1);return this.eventsByFoundObjects.filterAll(),this.eventsByType.filterAll(),this.eventsByStart.filterAll(),this.eventsByCameraId.filterAll(),s[0]}afterInit(){this.api.events.pipe(q((({hub:e,event:t})=>"cameras"===e&&"OnCameraMotionEvent"===t))).subscribe(this.processNewEvents)}dispose(){super.dispose(),this.data.remove(Ts),this.updates++}}const Cs=5e-4;class Es extends ie{constructor(){super(),Object.defineProperty(this,"thumbnails",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"thumbnailsByCameraId",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"thumbnailsByDate",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"pendingRequests",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"pendingRequestsByEnd",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"pendingRequestsByStart",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"pendingRequestsByCameraId",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"pendingRequestsByCount",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"fetchThumbnails",{enumerable:!0,configurable:!0,writable:!0,value:(e,t,r,i)=>{this.pendingRequestsByCameraId.filter(e),this.pendingRequestsByStart.filter(t),this.pendingRequestsByEnd.filter(r),this.pendingRequestsByCount.filter(i);const n=this.pendingRequests.allFiltered()[0];if(this.pendingRequestsByCameraId.filterAll(),this.pendingRequestsByStart.filterAll(),this.pendingRequestsByEnd.filterAll(),this.pendingRequestsByCount.filterAll(),n)return n.request;const a=this.api.thumbnails.GetThumbnailsInfo({cameraId:e,from:t,to:r,count:i}).pipe(R((e=>e.success?O(e.resultItems):y((()=>e.error)))),M((t=>t.filter((e=>e.url)).map(this.toThumbnail(e)))),D());return this.pendingRequests.add([{cameraId:e,from:t,to:r,count:i,request:a}]),a.subscribe((e=>{this.thumbnails.add(e),this.pendingRequests.remove((e=>e.request===a))})),a}}),Object.defineProperty(this,"toThumbnail",{enumerable:!0,configurable:!0,writable:!0,value:e=>({realtimestamp:t,url:r})=>({cameraId:e,url:r,timestamp:new Date(t)})}),this.thumbnails=G(),this.thumbnailsByCameraId=this.thumbnails.dimension((e=>e.cameraId)),this.thumbnailsByDate=this.thumbnails.dimension((e=>+e.timestamp)),this.pendingRequests=G(),this.pendingRequestsByStart=this.pendingRequests.dimension((e=>+e.from)),this.pendingRequestsByEnd=this.pendingRequests.dimension((e=>+e.to)),this.pendingRequestsByCameraId=this.pendingRequests.dimension((e=>e.cameraId)),this.pendingRequestsByCount=this.pendingRequests.dimension((e=>e.count))}getIntervalState(e,t,r){const i=this.getThumbnail({cameraId:e,from:t,to:r});if(i)return{state:"fulfilled",data:i};this.pendingRequestsByCameraId.filter(e),this.pendingRequestsByStart.filter([-1/0,+r+Cs]),this.pendingRequestsByEnd.filter([t,1/0]);let n=this.pendingRequests.allFiltered();return this.pendingRequestsByCameraId.filterAll(),this.pendingRequestsByStart.filterAll(),this.pendingRequestsByEnd.filterAll(),n=n.filter((e=>1===e.count?+e.from==+t&&+e.to==+r:Math.abs((+e.to-+e.from)/e.count-(+r-+t))<=1)),n.length?{state:"pending",request:n[0].request}:null}fetchThumbnail(e,t,r){const i=this.getIntervalState(e,t,r);if(null!==i){if("fulfilled"===i.state)return O(i.data);if("pending"===i.state)return i.request.pipe(M((()=>this.getThumbnail({cameraId:e,from:t,to:r}))))}const n=this.api.thumbnails.GetThumbnailInfo({cameraId:e,from:t,to:r}).pipe(R((e=>e.success?O(e.resultItems):y((()=>e.error)))),M((t=>t.filter((e=>e.url)).map(this.toThumbnail(e)))),D());return n.subscribe((e=>{this.thumbnails.add(e),this.pendingRequests.remove((e=>e.request===n))})),this.pendingRequests.add([{cameraId:e,from:t,to:r,count:1,request:n}]),n.pipe(M((()=>this.getThumbnail({cameraId:e,from:t,to:r}))))}getThumbnail({cameraId:e,from:t,to:r}){this.thumbnailsByCameraId.filter(e),this.thumbnailsByDate.filter([+t,+r+(+t==+r?Cs:0)]);const i=this.thumbnails.allFiltered()[0];return this.thumbnailsByDate.filterAll(),this.thumbnailsByCameraId.filterAll(),i}getThumbnails({cameraId:e,from:t,to:r}){this.thumbnailsByCameraId.filter(e),this.thumbnailsByDate.filter([+t,+r+Cs]);const i=this.thumbnails.allFiltered();return this.thumbnailsByDate.filterAll(),this.thumbnailsByCameraId.filterAll(),i}}const _s=$.createInstance();class Rs{constructor(e){Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"cameraId",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"startTime",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"endTime",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"type",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"createdAt",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"duration",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"chunks",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"clipUrl",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"description",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"version",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"raw",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"isDownloading",{enumerable:!0,configurable:!0,writable:!0,value:!1}),Object.defineProperty(this,"archives",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),n(this,{name:a,clipUrl:a,isDownloading:a,update:s}),this.update(e)}get isTimelapse(){return this.type.startsWith("Timelaps")}update(e){var t;this.raw=e,this.id=e.id,this.createdAt=new Date(e.timeCreated),this.startTime=new Date(e.startTime),this.endTime=new Date(e.endTime),this.type=e.recordType,this.duration=e.duration,this.cameraId=e.cameraId,this.name=null!==(t=e.name)&&void 0!==t?t:e.tagName,this.description=e.description,this.clipUrl=e.clipUrl,this.version=e.version}}class Ds extends ie{constructor(e){super(),Object.defineProperty(this,"notification",{enumerable:!0,configurable:!0,writable:!0,value:e}),Object.defineProperty(this,"data",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"clipsByCameraId",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"clipsByCreationDate",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"clipsByStart",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"clipsByEnd",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"clipsByType",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"clipsById",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"clipsMap",{enumerable:!0,configurable:!0,writable:!0,value:new Map}),Object.defineProperty(this,"loaded",{enumerable:!0,configurable:!0,writable:!0,value:!1}),Object.defineProperty(this,"loading",{enumerable:!0,configurable:!0,writable:!0,value:!1}),Object.defineProperty(this,"updates",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"add",{enumerable:!0,configurable:!0,writable:!0,value:e=>{const t=e.filter((e=>!this.clipsMap.has(e.id)));t.forEach((e=>this.clipsMap.set(e.id,e))),this.data.add(t),t.length&&this.updates++}}),Object.defineProperty(this,"addOrUpdate",{enumerable:!0,configurable:!0,writable:!0,value:e=>{const[t,r]=ns(e,(e=>this.clipsMap.has(e.id)));r.forEach((e=>this.clipsMap.set(e.id,e))),this.data.add(r),t.forEach((e=>{var t;return null===(t=this.clipsMap.get(e.id))||void 0===t?void 0:t.update(e.raw)})),r.length&&this.updates++}}),Object.defineProperty(this,"removeFromStore",{enumerable:!0,configurable:!0,writable:!0,value:e=>{e.length&&(e.forEach((({id:e})=>{this.data.remove((t=>t.id===e)),this.clipsMap.delete(e)})),this.updates++)}}),Object.defineProperty(this,"createClip",{enumerable:!0,configurable:!0,writable:!0,value:e=>{this.api.archives.SaveArchive({...e,recordType:"Archive"}).pipe(R((e=>e.success?O(e.resultItems.map((e=>new Rs(e)))):y((()=>e.error))))).subscribe({next:t=>{var r;null===(r=this.notification)||void 0===r||r.success(_s.t("archiveManager.clipCreatedMessage",{name:e.name}),{duration:3e3}),this.add(t)},error:t=>{var r;console.error(t),null===(r=this.notification)||void 0===r||r.error(_s.t("archiveManager.clipNotSavedMessage",{name:e.name}))}})}}),Object.defineProperty(this,"createTimelapse",{enumerable:!0,configurable:!0,writable:!0,value:e=>{this.api.archives.SaveArchive({...e,recordType:"Timelaps"}).pipe(R((e=>e.success?O(e.resultItems.map((e=>new Rs(e)))):y((()=>e.error))))).subscribe({next:t=>{var r;null===(r=this.notification)||void 0===r||r.success(_s.t("archiveManager.timelapseSavedMessage",{name:e.name})),this.add(t)},error:t=>{var r;console.error(t),null===(r=this.notification)||void 0===r||r.error(_s.t("archiveManager.timelapseNotSavedMessage",{name:e.name}))}})}}),n(this,{loaded:a,loading:a,updates:a,add:s,addOrUpdate:s,removeFromStore:s}),this.data=G(),this.clipsByCameraId=this.data.dimension((e=>e.cameraId)),this.clipsByCreationDate=this.data.dimension((e=>+e.createdAt)),this.clipsByStart=this.data.dimension((e=>+e.startTime)),this.clipsByEnd=this.data.dimension((e=>+e.endTime)),this.clipsByType=this.data.dimension((e=>e.type)),this.clipsById=this.data.dimension((e=>e.id))}fetch(){this.loaded||this.loading||(this.loading=!0);const e=this.api.archives.GetArchives({}).pipe(R((e=>e.success?O(e.resultItems.map((e=>new Rs(e)))):(console.error(e.error),[]))),D());return e.subscribe((e=>{i((()=>{this.loaded=!0,this.loading=!1,this.add(e)}))})),e}getClips({cameraId:e,from:t,to:r}){this.clipsByStart.filter([-1/0,+r+5e-4]),this.clipsByEnd.filter([t,1/0]),this.clipsByType.filter("Archive"),e&&this.clipsByCameraId.filter(e);const i=this.clipsByStart.top(1/0);return e&&this.clipsByCameraId.filterAll(),this.clipsByStart.filterAll(),this.clipsByEnd.filterAll(),this.clipsByType.filterAll(),i}getTimelapses(){this.clipsByType.filterFunction((e=>e.startsWith("Timelaps")));const e=this.clipsByStart.top(1/0);return this.clipsByType.filterAll(),e}getRecentlyAdded(){const e=Date.now()-864e5;this.clipsByCreationDate.filterFunction((t=>t>e));const t=this.clipsByCreationDate.top(1/0);return this.clipsByCreationDate.filterAll(),t}all(){return this.clipsByStart.top(1/0)}getOnly(e,t="asc"){if(null===e){return"desc"===t?this.clipsByStart.top(1/0):this.clipsByStart.bottom(1/0)}this.clipsByType.filterFunction((t=>"clips"===e?!t.startsWith("Timelaps"):t.startsWith("Timelaps")));const r="desc"===t?this.clipsByStart.top(1/0):this.clipsByStart.bottom(1/0);return this.clipsByType.filterAll(),r}rename(e,t){this.api.archives.SaveArchive({...e.raw,name:t}).pipe(R((e=>e.success?O(e.resultItems):y((()=>e.error))))).subscribe({next:t=>{var r,i;null===(r=this.clipsMap.get(e.id))||void 0===r||r.update(t[0]),null===(i=this.notification)||void 0===i||i.success(_s.t("clips.renameSuccess"),{duration:3e3})},error:e=>{var t;console.error(e),null===(t=this.notification)||void 0===t||t.error(_s.t("clips.renameError"))}})}delete(e){this.api.archives.DeleteArchive({id:e.id,version:e.version,cameraId:e.cameraId}).pipe(R((e=>e.success?O(e.resultItems.map((e=>new Rs(e)))):y((()=>e.error))))).subscribe({next:()=>{var t;this.removeFromStore([e]),null===(t=this.notification)||void 0===t||t.success(_s.t("clipDeleted",{name:e.name}))},error:t=>{var r;console.error(t),null===(r=this.notification)||void 0===r||r.error(_s.t("archiveManager.archiveNotDeletedMessage",{name:e.name}))}})}afterInit(){this.api.events.pipe(q((({hub:e,event:t})=>"archives"===e&&"OnArchiveAdded"===t))).subscribe((({data:e})=>{this.add(e.resultItems.map((e=>new Rs(e))))})),this.api.events.pipe(q((({hub:e,event:t})=>"archives"===e&&"OnTimelapsAdded"===t))).subscribe((({data:e})=>{this.addOrUpdate(e.resultItems.map((e=>new Rs({...e,recordType:"Timelaps"}))))})),this.api.events.pipe(q((({hub:e,event:t})=>"archives"===e&&"OnArchiveDeleted"===t))).subscribe((({data:e})=>{this.removeFromStore(e.resultItems)}))}dispose(){this.data.remove(Ts),this.clipsMap.clear(),this.updates++,super.dispose()}}class Us{constructor(e){Object.defineProperty(this,"notifier",{enumerable:!0,configurable:!0,writable:!0,value:e})}error(e){this.notifier.error(e)}success(e,t){this.notifier.success(e,t)}warn(e){this.notifier.warn(e)}}const qs="default",Ms=new Map;class xs{constructor(t){Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:t}),Object.defineProperty(this,"initialized",{enumerable:!0,configurable:!0,writable:!0,value:!1}),Object.defineProperty(this,"cameras",{enumerable:!0,configurable:!0,writable:!0,value:new me}),Object.defineProperty(this,"archives",{enumerable:!0,configurable:!0,writable:!0,value:new be(this.cameras)}),Object.defineProperty(this,"events",{enumerable:!0,configurable:!0,writable:!0,value:new Bs(this.cameras)}),Object.defineProperty(this,"eventSchema",{enumerable:!0,configurable:!0,writable:!0,value:new Oe}),Object.defineProperty(this,"thumbnails",{enumerable:!0,configurable:!0,writable:!0,value:new Es}),Object.defineProperty(this,"account",{enumerable:!0,configurable:!0,writable:!0,value:new de}),Object.defineProperty(this,"notification",{enumerable:!0,configurable:!0,writable:!0,value:new Us({success:console.log,warn:console.warn,error:console.error})}),Object.defineProperty(this,"library",{enumerable:!0,configurable:!0,writable:!0,value:new Ds(this.notification)}),Object.defineProperty(this,"auth",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"api",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"disposables",{enumerable:!0,configurable:!0,writable:!0,value:[]}),Object.defineProperty(this,"tokenUpdateReactions",{enumerable:!0,configurable:!0,writable:!0,value:new Set}),Object.defineProperty(this,"dispose",{enumerable:!0,configurable:!0,writable:!0,value:()=>{this.disposables.forEach((e=>{e instanceof k?e.closed||e.unsubscribe():e()})),this.tokenUpdateReactions.forEach((e=>e())),this.tokenUpdateReactions.clear(),this.auth.signOut(),this.cameras.dispose(),this.events.dispose(),this.thumbnails.dispose(),this.eventSchema.dispose(),this.account.dispose(),this.library.dispose(),Ms.delete(this.name)}}),Object.defineProperty(this,"onTokenUpdate",{enumerable:!0,configurable:!0,writable:!0,value:t=>{if(!this.auth)throw new Error("app has to be inited first");const r=e((()=>this.auth.token),(e=>t((null==e?void 0:e.json)||null)));return this.tokenUpdateReactions.add(r),()=>{r(),this.tokenUpdateReactions.delete(r)}}}),n(this,{initialized:a}),this.disposables.push(o((()=>!!this.account.user),(()=>{this.cameras.load()})))}init({token:e,tokenStorage:t=new re,tokenStorageKey:r,apiUrl:n="https://services.3deye.me/reactiveapi",tokenServiceUrl:a="https://admin.3deye.me/webapi/v3/auth/token"},s=qs){if(r||(r=`@3deye-toolkit/${s}/token`),Ms.has(s))return console.warn("Can`t init two apps with the same name"),Ms.get(s);if(this.auth&&s===this.name)return console.warn("Can`t init already inited app"),this;if(this.auth||this.name===qs&&s!==qs)return new xs(s).init({token:e,tokenStorage:t,tokenStorageKey:r,apiUrl:n,tokenServiceUrl:a},s);const o=e&&"clientId"in e?e.clientId:"WebApp";return e&&t.setItem(r,JSON.stringify(e)),this.auth=new te({tokenServiceUrl:a,tokenStorageKey:r,storage:t,clientId:o,deviceInfo:null}),this.api=X.create(H,this.auth,(e=>E(n,{qs:{access_token:e}}))),this.cameras.initWith(this.api),this.archives.initWith(this.api),this.library.initWith(this.api),this.events.initWith(this.api),this.eventSchema.initWith(this.api),this.thumbnails.initWith(this.api),this.account.initWith(this.api),this.account.setAuthStore(this.auth),i((()=>{this.initialized=!0})),Ms.set(s,this),this}}const Ns=new xs(qs),Fs=V.createContext(null);export{Fs as AppContext,Ns as app};
|
package/dist/tsdoc-metadata.json
CHANGED
package/package.json
CHANGED
|
@@ -1,19 +1,22 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@3deye-toolkit/core",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.3-alpha.0",
|
|
4
4
|
"module": "dist/core.js",
|
|
5
5
|
"types": "dist/core.d.ts",
|
|
6
6
|
"files": [
|
|
7
7
|
"dist"
|
|
8
8
|
],
|
|
9
9
|
"dependencies": {
|
|
10
|
+
"backoff-rxjs": "^7.0.0",
|
|
10
11
|
"crossfilter2": "^1.5.4",
|
|
11
12
|
"http-status-codes": "^2.2.0",
|
|
13
|
+
"i18next": "23.5.1",
|
|
12
14
|
"jqueryless-signalr": "1.0.0",
|
|
13
15
|
"lodash": "4.17.21",
|
|
14
|
-
"mobx": "^6.
|
|
15
|
-
"rxjs": "^7.
|
|
16
|
-
"string-natural-compare": "^3.0.1"
|
|
16
|
+
"mobx": "^6.10.2",
|
|
17
|
+
"rxjs": "^7.8.1",
|
|
18
|
+
"string-natural-compare": "^3.0.1",
|
|
19
|
+
"zod": "^3.22.2"
|
|
17
20
|
},
|
|
18
21
|
"peerDependencies": {
|
|
19
22
|
"react": "^16.8.0 || ^17 || ^18",
|
|
@@ -25,4 +28,4 @@
|
|
|
25
28
|
},
|
|
26
29
|
"sideEffects": false,
|
|
27
30
|
"license": "mit"
|
|
28
|
-
}
|
|
31
|
+
}
|