@3deye-toolkit/core 0.0.4 → 0.0.5
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 +36 -143
- package/dist/core.js +1 -1
- package/dist/tsdoc-metadata.json +1 -1
- package/package.json +1 -6
package/dist/core.d.ts
CHANGED
|
@@ -30,34 +30,7 @@ declare class AccountStore extends ApiStore {
|
|
|
30
30
|
updateCustomPreferences: (preferences: Partial<Preferences>) => Observable<RawUser>;
|
|
31
31
|
setDefaultGroup(groupId: number): Observable<RawUser> | undefined;
|
|
32
32
|
get preferences(): Preferences;
|
|
33
|
-
getPreference: <T extends
|
|
34
|
-
utc: boolean;
|
|
35
|
-
hour12: boolean;
|
|
36
|
-
startOfWeek: "monday" | "sunday";
|
|
37
|
-
defaultVideoResizeMode?: VideoResizeMode | undefined;
|
|
38
|
-
camerasResizeMode?: [number, VideoResizeMode][] | undefined;
|
|
39
|
-
fisheyeCameras?: [number, [number, number, number] | {
|
|
40
|
-
params: {
|
|
41
|
-
x: number;
|
|
42
|
-
y: number;
|
|
43
|
-
r: number;
|
|
44
|
-
s: number;
|
|
45
|
-
};
|
|
46
|
-
positions?: [{
|
|
47
|
-
lat: number;
|
|
48
|
-
lon: number;
|
|
49
|
-
fov: number;
|
|
50
|
-
}, {
|
|
51
|
-
lat: number;
|
|
52
|
-
lon: number;
|
|
53
|
-
fov: number;
|
|
54
|
-
}, {
|
|
55
|
-
lat: number;
|
|
56
|
-
lon: number;
|
|
57
|
-
fov: number;
|
|
58
|
-
}] | undefined;
|
|
59
|
-
} | null][] | undefined;
|
|
60
|
-
}[T];
|
|
33
|
+
getPreference: <T extends keyof Preferences>(key: T) => Preferences[T];
|
|
61
34
|
private retryOnVersionMismatch;
|
|
62
35
|
}
|
|
63
36
|
|
|
@@ -115,6 +88,18 @@ declare abstract class ApiStore {
|
|
|
115
88
|
dispose(): void;
|
|
116
89
|
}
|
|
117
90
|
|
|
91
|
+
declare interface App {
|
|
92
|
+
cameras: CamerasStore;
|
|
93
|
+
archives: ArchivesStore;
|
|
94
|
+
events: EventsStore;
|
|
95
|
+
eventSchema: EventSchemaStore;
|
|
96
|
+
thumbnails: ThumbnailsStore;
|
|
97
|
+
account: AccountStore;
|
|
98
|
+
notification: NotificationService;
|
|
99
|
+
auth: Auth;
|
|
100
|
+
api: Api<IApi> & IApi;
|
|
101
|
+
}
|
|
102
|
+
|
|
118
103
|
/**
|
|
119
104
|
* @alpha
|
|
120
105
|
*/
|
|
@@ -264,7 +249,7 @@ declare class Camera {
|
|
|
264
249
|
get supportsWebRTC(): boolean;
|
|
265
250
|
constructor(raw: RawCamera);
|
|
266
251
|
update: (raw: RawCamera) => void;
|
|
267
|
-
can: (permission: CameraPermissions) =>
|
|
252
|
+
can: (permission: CameraPermissions) => boolean;
|
|
268
253
|
}
|
|
269
254
|
|
|
270
255
|
declare interface CameraAddress {
|
|
@@ -357,44 +342,6 @@ declare interface ChunksQuery {
|
|
|
357
342
|
to: Date;
|
|
358
343
|
}
|
|
359
344
|
|
|
360
|
-
declare class Clip {
|
|
361
|
-
id: number;
|
|
362
|
-
cameraId: number;
|
|
363
|
-
name: string;
|
|
364
|
-
startTime: Date;
|
|
365
|
-
endTime: Date;
|
|
366
|
-
type: 'Archive' | 'Timelaps' | 'Timelaps to do';
|
|
367
|
-
createdAt: Date;
|
|
368
|
-
/**
|
|
369
|
-
* clip duration in seconds
|
|
370
|
-
*/
|
|
371
|
-
duration: number;
|
|
372
|
-
chunks: ArchiveChunk[];
|
|
373
|
-
clipUrl?: string;
|
|
374
|
-
description: string;
|
|
375
|
-
version: string;
|
|
376
|
-
raw: RawClip;
|
|
377
|
-
isDownloading: boolean;
|
|
378
|
-
archives?: ArchiveChunk[];
|
|
379
|
-
constructor(raw: RawClip);
|
|
380
|
-
get isTimelapse(): boolean;
|
|
381
|
-
update(raw: RawClip): void;
|
|
382
|
-
}
|
|
383
|
-
|
|
384
|
-
declare interface ClipParams {
|
|
385
|
-
cameraId: number;
|
|
386
|
-
startTime: Date;
|
|
387
|
-
endTime: Date;
|
|
388
|
-
name: string;
|
|
389
|
-
description?: string;
|
|
390
|
-
}
|
|
391
|
-
|
|
392
|
-
declare interface ClipsQuery {
|
|
393
|
-
cameraId: number;
|
|
394
|
-
from: Date;
|
|
395
|
-
to: Date;
|
|
396
|
-
}
|
|
397
|
-
|
|
398
345
|
declare interface Connection {
|
|
399
346
|
state: CONNECTION_STATE;
|
|
400
347
|
stop: () => void;
|
|
@@ -439,8 +386,8 @@ declare type DetectedObject = Car | LicensePlate | {
|
|
|
439
386
|
};
|
|
440
387
|
|
|
441
388
|
declare interface DetectedObjectOption {
|
|
442
|
-
|
|
443
|
-
|
|
389
|
+
value: string;
|
|
390
|
+
label: string;
|
|
444
391
|
color: string;
|
|
445
392
|
highlightColor: string;
|
|
446
393
|
type: 'detectedObject';
|
|
@@ -641,7 +588,7 @@ declare interface IApi {
|
|
|
641
588
|
UpdateCamgroup: (params: any) => Observable<ApiResult<RawCamgroup>>;
|
|
642
589
|
};
|
|
643
590
|
sound: {
|
|
644
|
-
GetPushSoundServiceUrl: (id: number) => Observable<
|
|
591
|
+
GetPushSoundServiceUrl: (id: number) => Observable<ApiResult<string>>;
|
|
645
592
|
};
|
|
646
593
|
thumbnails: {
|
|
647
594
|
GetThumbnailsInfo: (params: {
|
|
@@ -673,6 +620,7 @@ declare interface InitParams {
|
|
|
673
620
|
widgetId: string;
|
|
674
621
|
widgetToken: string;
|
|
675
622
|
};
|
|
623
|
+
clientId?: string;
|
|
676
624
|
tokenStorage?: Storage_2;
|
|
677
625
|
tokenStorageKey?: string;
|
|
678
626
|
apiUrl?: string;
|
|
@@ -693,42 +641,6 @@ declare type IntervalState = {
|
|
|
693
641
|
request: Observable<Thumbnail[]>;
|
|
694
642
|
};
|
|
695
643
|
|
|
696
|
-
declare class LibraryStore extends ApiStore {
|
|
697
|
-
private notification?;
|
|
698
|
-
data: crossfilter.Crossfilter<Clip>;
|
|
699
|
-
clipsByCameraId: crossfilter.Dimension<Clip, number>;
|
|
700
|
-
clipsByCreationDate: crossfilter.Dimension<Clip, number>;
|
|
701
|
-
clipsByStart: crossfilter.Dimension<Clip, number>;
|
|
702
|
-
clipsByEnd: crossfilter.Dimension<Clip, number>;
|
|
703
|
-
clipsByType: crossfilter.Dimension<Clip, string>;
|
|
704
|
-
clipsById: crossfilter.Dimension<Clip, number>;
|
|
705
|
-
clipsMap: Map<number, Clip>;
|
|
706
|
-
loaded: boolean;
|
|
707
|
-
loading: boolean;
|
|
708
|
-
updates: number;
|
|
709
|
-
constructor(notification?: NotificationService | undefined);
|
|
710
|
-
/**
|
|
711
|
-
* Fetches all clips from the server and updates the store
|
|
712
|
-
*/
|
|
713
|
-
fetch(): Observable<Clip[]>;
|
|
714
|
-
add: (clips: Clip[]) => void;
|
|
715
|
-
addOrUpdate: (clips: Clip[]) => void;
|
|
716
|
-
removeFromStore: (clips: {
|
|
717
|
-
id: number;
|
|
718
|
-
}[]) => void;
|
|
719
|
-
getClips({ cameraId, from, to }: ClipsQuery): Clip[];
|
|
720
|
-
getTimelapses(): Clip[];
|
|
721
|
-
getRecentlyAdded(): Clip[];
|
|
722
|
-
all(): Clip[];
|
|
723
|
-
getOnly(type: 'clips' | 'timelapses' | null, sortDirection?: 'asc' | 'desc'): Clip[];
|
|
724
|
-
createClip: (data: ClipParams) => void;
|
|
725
|
-
createTimelapse: (data: TimelapseParams) => void;
|
|
726
|
-
rename(clip: Clip, name: string): void;
|
|
727
|
-
delete(clip: Clip): void;
|
|
728
|
-
protected afterInit(): void;
|
|
729
|
-
dispose(): void;
|
|
730
|
-
}
|
|
731
|
-
|
|
732
644
|
declare interface LicensePlate {
|
|
733
645
|
Type: 'LicensePlate';
|
|
734
646
|
Value: string;
|
|
@@ -804,20 +716,11 @@ declare interface PendingRequest_2 {
|
|
|
804
716
|
request: Observable<Thumbnail[]>;
|
|
805
717
|
}
|
|
806
718
|
|
|
807
|
-
declare enum PREFERENCES {
|
|
808
|
-
DEFAULT_VIDEO_RESIZE_MODE = "defaultVideoResizeMode",
|
|
809
|
-
RESIZE_MODE_PER_CAMERA = "camerasResizeMode",
|
|
810
|
-
FISHEYE_CAMERAS = "fisheyeCameras",
|
|
811
|
-
UTC = "utc",
|
|
812
|
-
HOUR12 = "hour12",
|
|
813
|
-
START_OF_WEEK = "startOfWeek"
|
|
814
|
-
}
|
|
815
|
-
|
|
816
719
|
declare type Preferences = z.infer<typeof preferencesSchema>;
|
|
817
720
|
|
|
818
721
|
declare const preferencesSchema: z.ZodObject<{
|
|
819
|
-
defaultVideoResizeMode: z.ZodOptional<z.
|
|
820
|
-
camerasResizeMode: z.ZodOptional<z.ZodArray<z.ZodTuple<[z.ZodNumber, z.
|
|
722
|
+
defaultVideoResizeMode: z.ZodOptional<z.ZodEnum<["fill", "contain"]>>;
|
|
723
|
+
camerasResizeMode: z.ZodOptional<z.ZodArray<z.ZodTuple<[z.ZodNumber, z.ZodEnum<["fill", "contain"]>], null>, "many">>;
|
|
821
724
|
fisheyeCameras: z.ZodOptional<z.ZodArray<z.ZodTuple<[z.ZodNumber, z.ZodUnion<[z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>, z.ZodObject<{
|
|
822
725
|
params: z.ZodObject<{
|
|
823
726
|
x: z.ZodNumber;
|
|
@@ -827,13 +730,13 @@ declare const preferencesSchema: z.ZodObject<{
|
|
|
827
730
|
}, "strip", z.ZodTypeAny, {
|
|
828
731
|
x: number;
|
|
829
732
|
y: number;
|
|
830
|
-
r: number;
|
|
831
733
|
s: number;
|
|
734
|
+
r: number;
|
|
832
735
|
}, {
|
|
833
736
|
x: number;
|
|
834
737
|
y: number;
|
|
835
|
-
r: number;
|
|
836
738
|
s: number;
|
|
739
|
+
r: number;
|
|
837
740
|
}>;
|
|
838
741
|
positions: z.ZodOptional<z.ZodTuple<[z.ZodObject<{
|
|
839
742
|
lat: z.ZodNumber;
|
|
@@ -876,8 +779,8 @@ declare const preferencesSchema: z.ZodObject<{
|
|
|
876
779
|
params: {
|
|
877
780
|
x: number;
|
|
878
781
|
y: number;
|
|
879
|
-
r: number;
|
|
880
782
|
s: number;
|
|
783
|
+
r: number;
|
|
881
784
|
};
|
|
882
785
|
positions?: [{
|
|
883
786
|
lat: number;
|
|
@@ -896,8 +799,8 @@ declare const preferencesSchema: z.ZodObject<{
|
|
|
896
799
|
params: {
|
|
897
800
|
x: number;
|
|
898
801
|
y: number;
|
|
899
|
-
r: number;
|
|
900
802
|
s: number;
|
|
803
|
+
r: number;
|
|
901
804
|
};
|
|
902
805
|
positions?: [{
|
|
903
806
|
lat: number;
|
|
@@ -920,14 +823,14 @@ declare const preferencesSchema: z.ZodObject<{
|
|
|
920
823
|
utc: boolean;
|
|
921
824
|
hour12: boolean;
|
|
922
825
|
startOfWeek: "monday" | "sunday";
|
|
923
|
-
defaultVideoResizeMode?:
|
|
924
|
-
camerasResizeMode?: [number,
|
|
925
|
-
fisheyeCameras?: [number,
|
|
826
|
+
defaultVideoResizeMode?: "contain" | "fill" | undefined;
|
|
827
|
+
camerasResizeMode?: [number, "contain" | "fill"][] | undefined;
|
|
828
|
+
fisheyeCameras?: [number, {
|
|
926
829
|
params: {
|
|
927
830
|
x: number;
|
|
928
831
|
y: number;
|
|
929
|
-
r: number;
|
|
930
832
|
s: number;
|
|
833
|
+
r: number;
|
|
931
834
|
};
|
|
932
835
|
positions?: [{
|
|
933
836
|
lat: number;
|
|
@@ -942,16 +845,16 @@ declare const preferencesSchema: z.ZodObject<{
|
|
|
942
845
|
lon: number;
|
|
943
846
|
fov: number;
|
|
944
847
|
}] | undefined;
|
|
945
|
-
} | null][] | undefined;
|
|
848
|
+
} | [number, number, number] | null][] | undefined;
|
|
946
849
|
}, {
|
|
947
|
-
defaultVideoResizeMode?:
|
|
948
|
-
camerasResizeMode?: [number,
|
|
949
|
-
fisheyeCameras?: [number,
|
|
850
|
+
defaultVideoResizeMode?: "contain" | "fill" | undefined;
|
|
851
|
+
camerasResizeMode?: [number, "contain" | "fill"][] | undefined;
|
|
852
|
+
fisheyeCameras?: [number, {
|
|
950
853
|
params: {
|
|
951
854
|
x: number;
|
|
952
855
|
y: number;
|
|
953
|
-
r: number;
|
|
954
856
|
s: number;
|
|
857
|
+
r: number;
|
|
955
858
|
};
|
|
956
859
|
positions?: [{
|
|
957
860
|
lat: number;
|
|
@@ -966,7 +869,7 @@ declare const preferencesSchema: z.ZodObject<{
|
|
|
966
869
|
lon: number;
|
|
967
870
|
fov: number;
|
|
968
871
|
}] | undefined;
|
|
969
|
-
} | null][] | undefined;
|
|
872
|
+
} | [number, number, number] | null][] | undefined;
|
|
970
873
|
utc?: boolean | undefined;
|
|
971
874
|
hour12?: boolean | undefined;
|
|
972
875
|
startOfWeek?: "monday" | "sunday" | undefined;
|
|
@@ -1293,10 +1196,6 @@ declare class ThumbnailsStore extends ApiStore {
|
|
|
1293
1196
|
}) => Thumbnail;
|
|
1294
1197
|
}
|
|
1295
1198
|
|
|
1296
|
-
declare type TimelapseParams = ClipParams & {
|
|
1297
|
-
duration: number;
|
|
1298
|
-
};
|
|
1299
|
-
|
|
1300
1199
|
declare class Token {
|
|
1301
1200
|
accessToken: string;
|
|
1302
1201
|
accessTokenExpires: Date;
|
|
@@ -1315,7 +1214,7 @@ declare class Token {
|
|
|
1315
1214
|
constructor(raw: RawToken);
|
|
1316
1215
|
}
|
|
1317
1216
|
|
|
1318
|
-
declare class ToolkitApp {
|
|
1217
|
+
declare class ToolkitApp implements App {
|
|
1319
1218
|
readonly name: string;
|
|
1320
1219
|
initialized: boolean;
|
|
1321
1220
|
cameras: CamerasStore;
|
|
@@ -1325,13 +1224,12 @@ declare class ToolkitApp {
|
|
|
1325
1224
|
thumbnails: ThumbnailsStore;
|
|
1326
1225
|
account: AccountStore;
|
|
1327
1226
|
notification: NotificationService;
|
|
1328
|
-
library: LibraryStore;
|
|
1329
1227
|
auth: Auth;
|
|
1330
1228
|
api: Api<IApi> & IApi;
|
|
1331
1229
|
private disposables;
|
|
1332
1230
|
private tokenUpdateReactions;
|
|
1333
1231
|
constructor(name: string);
|
|
1334
|
-
init({ token, tokenStorage: storage, tokenStorageKey, apiUrl, tokenServiceUrl }: InitParams, name?: string): ToolkitApp;
|
|
1232
|
+
init({ clientId, token, tokenStorage: storage, tokenStorageKey, apiUrl, tokenServiceUrl }: InitParams, name?: string): ToolkitApp;
|
|
1335
1233
|
dispose: () => void;
|
|
1336
1234
|
/**
|
|
1337
1235
|
* Adds a reaction to token changes
|
|
@@ -1344,9 +1242,4 @@ declare class ToolkitApp {
|
|
|
1344
1242
|
|
|
1345
1243
|
declare type User = RawUser;
|
|
1346
1244
|
|
|
1347
|
-
declare enum VideoResizeMode {
|
|
1348
|
-
Fit = "contain",
|
|
1349
|
-
Stretch = "fill"
|
|
1350
|
-
}
|
|
1351
|
-
|
|
1352
1245
|
export { }
|
package/dist/core.js
CHANGED
|
@@ -1 +1 @@
|
|
|
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 I,pairwise as P,concatMap as A,Subscription as T,shareReplay as k,skip as S,exhaustMap as C,map as B}from"rxjs";import E from"jqueryless-signalr";import{StatusCodes as _}from"http-status-codes";import{mergeMap as R,shareReplay as N,retry as D,filter as U,map as q,tap as M,expand as F,last as x,share as z}from"rxjs/operators";import{z as W}from"zod";import"@react-spring/web";import"backoff-rxjs";import"transformation-matrix";import L from"crossfilter2";import G from"string-natural-compare";import V from"i18next";import $ 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 Y,J,Z,Q,X;!function(e){e[e.CONNECTING=0]="CONNECTING",e[e.CONNECTED=1]="CONNECTED",e[e.RECONNECTING=2]="RECONNECTING",e[e.DISCONNECTED=3]="DISCONNECTED"}(Y||(Y={})),function(e){e[e.INFO=0]="INFO",e[e.WARN=1]="WARN",e[e.ERROR=2]="ERROR"}(J||(J={}));class ee{static create(e,t,r){return new ee(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,"logLevel",{enumerable:!0,configurable:!0,writable:!0,value:J.ERROR}),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}),Object.defineProperty(this,"log",{enumerable:!0,configurable:!0,writable:!0,value:(e,...t)=>{if(e<this.logLevel)return;console[["log","warn","error"][e]](...t)}}),Object.defineProperty(this,"createHubMethod",{enumerable:!0,configurable:!0,writable:!0,value:(e,t)=>{const r=(...i)=>this.connection$.pipe(f(Boolean),f((e=>e.state===Y.CONNECTED)),p(1)).pipe(v((r=>new Promise(((n,a)=>{r.proxies[e].invoke(t,...i).done((e=>n(e))).fail((e=>a(e)))})))),m((e=>e instanceof Error&&e.message&&("Connection started reconnecting before invocation result was received."===e.message||"Connection was disconnected before invocation result was received."===e.message)?(this.log(J.WARN,e.message),r(...i)):e instanceof Error&&e.message&&e.message.startsWith("Caller is not authorized to invoke the ")?(this.log(J.WARN,e.message),this.connection$.getValue().stop(),this.authStore.invalidateToken(),r(...i)):y((()=>e)))),g(this.connectionShutdown$));return r}}),Object.defineProperty(this,"subscribeToEvents",{enumerable:!0,configurable:!0,writable:!0,value:e=>{Object.entries(K).forEach((([t,r])=>{r&&e.proxies[t]&&e.state===Y.CONNECTED&&r.filter((({explicit:e})=>e)).forEach((({name:r})=>{e.proxies[t].invoke("SubscribeToEvent",r)}))}))}}),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!==Y.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.log(J.WARN,"disconnected by some reason"),h(5e3)))),f((()=>r.isAuthenticated&&!!r.token&&!r.token.invalid))).subscribe((()=>{this.connect(r.token),this.log(J.WARN,"attempting to reconnect")})),this.connection$.pipe(f(Boolean),b(100)).subscribe(this.subscribeToEvents)}connect(e){if(this.connection$.getValue()&&this.connection$.getValue().state===Y.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.log(J.INFO,"connected"),this.connection$.next(r)})).fail((e=>{var t,r,i;!e.source||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(),this.log(J.ERROR,"connection failed",e)})),r.error((e=>{if(e.source&&(401===e.source.status||403===e.source.status||409===e.source.status))return this.log(J.WARN,"authentication error, invalidating token"),this.authStore.invalidateToken();this.log(J.ERROR,"connection error",e)})),r.disconnected((()=>{this.connection$.getValue()?this.log(J.WARN,"disconnected",this.connection$.getValue().lastError):this.log(J.WARN,"disconnected. this connection is already null"),this.connection$.next(null)})),r.reconnecting((()=>this.log(J.WARN,"reconnecting"))),r.reconnected((()=>{this.connection$.getValue()===r&&(this.log(J.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)}))}))}}class te{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 re{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 te(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(I(null),P(),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 te(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 te(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 te({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 ie{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 ne{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 T?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"}(Q||(Q={})),function(e){e.Fit="contain",e.Stretch="fill"}(X||(X={}));const ae=W.object({lat:W.number(),lon:W.number(),fov:W.number()});var se,oe;!function(e){e.Ceiling="ceiling",e.Wall="wall"}(se||(se={})),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"}(oe||(oe={}));const le=W.nativeEnum(X),ue=W.object({params:W.object({x:W.number(),y:W.number(),r:W.number(),s:W.number()}),positions:W.tuple([ae,ae,ae]).optional()}),ce=W.tuple([W.number(),W.number(),W.number()]),de=W.object({[oe.DEFAULT_VIDEO_RESIZE_MODE]:le.optional(),[oe.RESIZE_MODE_PER_CAMERA]:W.array(W.tuple([W.number(),le])).optional(),[oe.FISHEYE_CAMERAS]:W.array(W.tuple([W.number(),W.union([ce,ue,W.null()])])).optional(),[oe.UTC]:W.boolean().default(!1),[oe.HOUR12]:W.boolean().default(!1),[oe.START_OF_WEEK]:W.enum(["monday","sunday"]).default("monday")});class he extends ne{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(),N());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:()=>D({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,isSharingUserAccount:t})}get isSharingUserAccount(){var e;return(null===(e=this.user)||void 0===e?void 0:e.email.endsWith("@share.share"))||!1}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(U((({hub:e,event:t})=>"users"===e&&"OnUserUpdateProfile"===t)),q((({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)))),M(this.setUser),N(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(),N());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(),N());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(),N());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 de.parse(JSON.parse((null===(e=this.user)||void 0===e?void 0:e.jsonField)||"{}"))}catch(e){console.error(e)}return{[oe.DEFAULT_VIDEO_RESIZE_MODE]:void 0,[oe.RESIZE_MODE_PER_CAMERA]:void 0,[oe.FISHEYE_CAMERAS]:void 0,[oe.UTC]:!1,[oe.HOUR12]:!1,[oe.START_OF_WEEK]:"monday"}}}class fe{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 be=5e-4;class pe extends ne{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+be]);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(F((({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(q((e=>({result:e,time:i}))))})),x(),q((()=>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(F((({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(q((e=>({result:e,time:n}))))})),x(),q((()=>this.getClosestChunkRight({cameraId:e,time:t}))))}}),n(this,{updates:a,add:s.bound}),this.data=L(),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=L(),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(q((e=>e.resultItems[0].chunks.map((e=>new fe(e))))),M(this.add),M((r=>this.extendKnownInterval(e,t,r))),N());return this.pendingRequests.add([{cameraId:e,startTime:t,endTime:r,request:n}]),n.pipe(M((()=>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+be]),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(U((({hub:e,event:t})=>"archives"===e&&"OnArchiveChunksCreated"===t))).subscribe((({data:e})=>{this.add(e.resultItems.map((e=>new fe(e))))}))}}class ve{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 me;!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"}(me||(me={}));class ye extends ne{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))))),k(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 ve(e))})),this.data=Array.from(this.camerasById.values()).sort(((e,t)=>G(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))))),k(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),C((()=>this.sync()))).subscribe()})))}afterInit(){this.disposables.push(this.api.events.pipe(f((({hub:e,event:t})=>"cameras"===e&&("OnCameraUpdated"===t||"OnSystemCameraUpdated"===t))),B((({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 ge={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"}},we={Person:"red",Car:"green",Animal:"blue",LicensePlate:"cyan",Fire:"deepOrange",Smoke:"deepPurple"},Oe=["green","red","blue","purple","teal","amber","pink","cyan","lightGreen","deepOrange","deepPurple","lime","indigo","lightBlue"];class je extends ne{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(we).filter((([e])=>this.foundObjectTypes.includes(e))).map((([,e])=>e)),t=Oe.filter((t=>!e.includes(t)));let r=0;return this.foundObjectTypes.map((e=>{const i=e in we?we[e]:t[r++],n=ge[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 Ie="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 Ae=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 Te=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},Se="object"==typeof Ie&&Ie&&Ie.Object===Object&&Ie,Ce=Se,Be="object"==typeof self&&self&&self.Object===Object&&self,Ee=Ce||Be||Function("return this")(),_e=Ee.Symbol,Re=_e,Ne=Object.prototype,De=Ne.hasOwnProperty,Ue=Ne.toString,qe=Re?Re.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},Fe=Object.prototype.toString;var xe=Me,ze=function(e){return Fe.call(e)},We=_e?_e.toStringTag:void 0;var Le=function(e){return null==e?void 0===e?"[object Undefined]":"[object Null]":We&&We in Object(e)?xe(e):ze(e)};var Ge=function(e){return null!=e&&"object"==typeof e},Ve=Le,$e=Ge;var He=function(e){return $e(e)&&"[object Arguments]"==Ve(e)},Ke=Ge,Ye=Object.prototype,Je=Ye.hasOwnProperty,Ze=Ye.propertyIsEnumerable,Qe=He(function(){return arguments}())?He:function(e){return Ke(e)&&Je.call(e,"callee")&&!Ze.call(e,"callee")},Xe=Array.isArray,et={exports:{}};var tt=function(){return!1};!function(e,t){var r=Ee,i=tt,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}(et,et.exports);var rt=et.exports,it=/^(?:0|[1-9]\d*)$/;var nt=function(e,t){var r=typeof e;return!!(t=null==t?9007199254740991:t)&&("number"==r||"symbol"!=r&&it.test(e))&&e>-1&&e%1==0&&e<t};var at=function(e){return"number"==typeof e&&e>-1&&e%1==0&&e<=9007199254740991},st=Le,ot=at,lt=Ge,ut={};ut["[object Float32Array]"]=ut["[object Float64Array]"]=ut["[object Int8Array]"]=ut["[object Int16Array]"]=ut["[object Int32Array]"]=ut["[object Uint8Array]"]=ut["[object Uint8ClampedArray]"]=ut["[object Uint16Array]"]=ut["[object Uint32Array]"]=!0,ut["[object Arguments]"]=ut["[object Array]"]=ut["[object ArrayBuffer]"]=ut["[object Boolean]"]=ut["[object DataView]"]=ut["[object Date]"]=ut["[object Error]"]=ut["[object Function]"]=ut["[object Map]"]=ut["[object Number]"]=ut["[object Object]"]=ut["[object RegExp]"]=ut["[object Set]"]=ut["[object String]"]=ut["[object WeakMap]"]=!1;var ct=function(e){return lt(e)&&ot(e.length)&&!!ut[st(e)]};var dt=function(e){return function(t){return e(t)}},ht={exports:{}};!function(e,t){var r=Se,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}(ht,ht.exports);var ft=ht.exports,bt=ct,pt=dt,vt=ft&&ft.isTypedArray,mt=vt?pt(vt):bt,yt=ke,gt=Qe,wt=Xe,Ot=rt,jt=nt,It=mt,Pt=Object.prototype.hasOwnProperty;var At=function(e,t){var r=wt(e),i=!r&>(e),n=!r&&!i&&Ot(e),a=!r&&!i&&!n&&It(e),s=r||i||n||a,o=s?yt(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)||jt(u,l))||o.push(u);return o},Tt=Object.prototype;var kt=function(e){var t=e&&e.constructor;return e===("function"==typeof t&&t.prototype||Tt)};var St=function(e,t){return function(r){return e(t(r))}}(Object.keys,Object),Ct=kt,Bt=St,Et=Object.prototype.hasOwnProperty;var _t=function(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)},Rt=Le,Nt=_t;var Dt=function(e){if(!Nt(e))return!1;var t=Rt(e);return"[object Function]"==t||"[object GeneratorFunction]"==t||"[object AsyncFunction]"==t||"[object Proxy]"==t},Ut=Dt,qt=at;var Mt=function(e){return null!=e&&qt(e.length)&&!Ut(e)},Ft=At,xt=function(e){if(!Ct(e))return Bt(e);var t=[];for(var r in Object(e))Et.call(e,r)&&"constructor"!=r&&t.push(r);return t},zt=Mt;var Wt=function(e){return zt(e)?Ft(e):xt(e)},Lt=Te,Gt=Wt;var Vt=Mt;var $t=function(e,t){return function(r,i){if(null==r)return r;if(!Vt(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 Ht=function(e,t,r,i){return $t(e,(function(e,n,a){t(i,e,r(e),a)})),i};var Kt=function(){this.__data__=[],this.size=0};var Yt=function(e,t){return e===t||e!=e&&t!=t},Jt=Yt;var Zt=function(e,t){for(var r=e.length;r--;)if(Jt(e[r][0],t))return r;return-1},Qt=Zt,Xt=Array.prototype.splice;var er=Zt;var tr=Zt;var rr=Zt;var ir=Kt,nr=function(e){var t=this.__data__,r=Qt(t,e);return!(r<0)&&(r==t.length-1?t.pop():Xt.call(t,r,1),--this.size,!0)},ar=function(e){var t=this.__data__,r=er(t,e);return r<0?void 0:t[r][1]},sr=function(e){return tr(this.__data__,e)>-1},or=function(e,t){var r=this.__data__,i=rr(r,e);return i<0?(++this.size,r.push([e,t])):r[i][1]=t,this};function lr(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])}}lr.prototype.clear=ir,lr.prototype.delete=nr,lr.prototype.get=ar,lr.prototype.has=sr,lr.prototype.set=or;var ur=lr,cr=ur;var dr=function(){this.__data__=new cr,this.size=0};var hr=function(e){var t=this.__data__,r=t.delete(e);return this.size=t.size,r};var fr=function(e){return this.__data__.get(e)};var br,pr=function(e){return this.__data__.has(e)},vr=Ee["__core-js_shared__"],mr=(br=/[^.]+$/.exec(vr&&vr.keys&&vr.keys.IE_PROTO||""))?"Symbol(src)_1."+br:"";var yr=function(e){return!!mr&&mr in e},gr=Function.prototype.toString;var wr=function(e){if(null!=e){try{return gr.call(e)}catch(e){}try{return e+""}catch(e){}}return""},Or=Dt,jr=yr,Ir=_t,Pr=wr,Ar=/^\[object .+?Constructor\]$/,Tr=Function.prototype,kr=Object.prototype,Sr=Tr.toString,Cr=kr.hasOwnProperty,Br=RegExp("^"+Sr.call(Cr).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");var Er=function(e){return!(!Ir(e)||jr(e))&&(Or(e)?Br:Ar).test(Pr(e))},_r=function(e,t){return null==e?void 0:e[t]};var Rr=function(e,t){var r=_r(e,t);return Er(r)?r:void 0},Nr=Rr(Ee,"Map"),Dr=Rr(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},Fr=Dr,xr=Object.prototype.hasOwnProperty;var zr=function(e){var t=this.__data__;if(Fr){var r=t[e];return"__lodash_hash_undefined__"===r?void 0:r}return xr.call(t,e)?t[e]:void 0},Wr=Dr,Lr=Object.prototype.hasOwnProperty;var Gr=Dr;var Vr=qr,$r=Mr,Hr=zr,Kr=function(e){var t=this.__data__;return Wr?void 0!==t[e]:Lr.call(t,e)},Yr=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=Vr,Jr.prototype.delete=$r,Jr.prototype.get=Hr,Jr.prototype.has=Kr,Jr.prototype.set=Yr;var Zr=Jr,Qr=ur,Xr=Nr;var ei=function(e){var t=typeof e;return"string"==t||"number"==t||"symbol"==t||"boolean"==t?"__proto__"!==e:null===e};var ti=function(e,t){var r=e.__data__;return ei(t)?r["string"==typeof t?"string":"hash"]:r.map},ri=ti;var ii=ti;var ni=ti;var ai=ti;var si=function(){this.size=0,this.__data__={hash:new Zr,map:new(Xr||Qr),string:new Zr}},oi=function(e){var t=ri(this,e).delete(e);return this.size-=t?1:0,t},li=function(e){return ii(this,e).get(e)},ui=function(e){return ni(this,e).has(e)},ci=function(e,t){var r=ai(this,e),i=r.size;return r.set(e,t),this.size+=r.size==i?0:1,this};function di(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])}}di.prototype.clear=si,di.prototype.delete=oi,di.prototype.get=li,di.prototype.has=ui,di.prototype.set=ci;var hi=di,fi=ur,bi=Nr,pi=hi;var vi=ur,mi=dr,yi=hr,gi=fr,wi=pr,Oi=function(e,t){var r=this.__data__;if(r instanceof fi){var i=r.__data__;if(!bi||i.length<199)return i.push([e,t]),this.size=++r.size,this;r=this.__data__=new pi(i)}return r.set(e,t),this.size=r.size,this};function ji(e){var t=this.__data__=new vi(e);this.size=t.size}ji.prototype.clear=mi,ji.prototype.delete=yi,ji.prototype.get=gi,ji.prototype.has=wi,ji.prototype.set=Oi;var Ii=ji;var Pi=hi,Ai=function(e){return this.__data__.set(e,"__lodash_hash_undefined__"),this},Ti=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=Ai,ki.prototype.has=Ti;var Si=ki;var Ci=function(e,t){return e.has(t)},Bi=Si,Ei=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},_i=Ci;var Ri=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(!Ei(t,(function(e,t){if(!_i(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 Ni=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=Ee.Uint8Array,qi=Yt,Mi=Ri,Fi=Ni,xi=Di,zi=_e?_e.prototype:void 0,Wi=zi?zi.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=Fi;case"[object Set]":var l=1&i;if(o||(o=xi),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(Wi)return Wi.call(e)==Wi.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},Vi=Xe;var $i=function(e,t,r){var i=t(e);return Vi(e)?i:Gi(i,r(e))};var Hi=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},Ki=function(){return[]},Yi=Object.prototype.propertyIsEnumerable,Ji=Object.getOwnPropertySymbols,Zi=$i,Qi=Ji?function(e){return null==e?[]:(e=Object(e),Hi(Ji(e),(function(t){return Yi.call(e,t)})))}:Ki,Xi=Wt;var en=function(e){return Zi(e,Xi,Qi)},tn=Object.prototype.hasOwnProperty;var rn=function(e,t,r,i,n,a){var s=1&r,o=en(e),l=o.length;if(l!=en(t).length&&!s)return!1;for(var u=l;u--;){var c=o[u];if(!(s?c in t:tn.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},nn=Rr(Ee,"DataView"),an=Rr(Ee,"Promise"),sn=Rr(Ee,"Set"),on=nn,ln=Nr,un=an,cn=sn,dn=Rr(Ee,"WeakMap"),hn=Le,fn=wr,bn="[object Map]",pn="[object Promise]",vn="[object Set]",mn="[object WeakMap]",yn="[object DataView]",gn=fn(on),wn=fn(ln),On=fn(un),jn=fn(cn),In=fn(dn),Pn=hn;(on&&Pn(new on(new ArrayBuffer(1)))!=yn||ln&&Pn(new ln)!=bn||un&&Pn(un.resolve())!=pn||cn&&Pn(new cn)!=vn||dn&&Pn(new dn)!=mn)&&(Pn=function(e){var t=hn(e),r="[object Object]"==t?e.constructor:void 0,i=r?fn(r):"";if(i)switch(i){case gn:return yn;case wn:return bn;case On:return pn;case jn:return vn;case In:return mn}return t});var An=Ii,Tn=Ri,kn=Li,Sn=rn,Cn=Pn,Bn=Xe,En=rt,_n=mt,Rn="[object Arguments]",Nn="[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?Nn:Cn(e),u=o?Nn:Cn(t),c=(l=l==Rn?Dn:l)==Dn,d=(u=u==Rn?Dn:u)==Dn,h=l==u;if(h&&En(e)){if(!En(t))return!1;s=!0,c=!1}if(h&&!c)return a||(a=new An),s||_n(e)?Tn(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 An),n(p,v,r,i,a)}}return!!h&&(a||(a=new An),Sn(e,t,r,i,n,a))},Mn=Ge;var Fn=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))},xn=Ii,zn=Fn;var Wn=_t;var Ln=function(e){return e==e&&!Wn(e)},Gn=Ln,Vn=Wt;var $n=function(e,t){return function(r){return null!=r&&(r[e]===t&&(void 0!==t||e in Object(r)))}},Hn=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 xn;if(i)var h=i(u,c,l,e,t,d);if(!(void 0===h?zn(c,u,3,i,d):h))return!1}}return!0},Kn=function(e){for(var t=Vn(e),r=t.length;r--;){var i=t[r],n=e[i];t[r]=[i,n,Gn(n)]}return t},Yn=$n;var Jn=function(e){var t=Kn(e);return 1==t.length&&t[0][2]?Yn(t[0][0],t[0][1]):function(r){return r===e||Hn(r,e,t)}},Zn=Le,Qn=Ge;var Xn=function(e){return"symbol"==typeof e||Qn(e)&&"[object Symbol]"==Zn(e)},ea=Xe,ta=Xn,ra=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,ia=/^\w*$/;var na=function(e,t){if(ea(e))return!1;var r=typeof e;return!("number"!=r&&"symbol"!=r&&"boolean"!=r&&null!=e&&!ta(e))||(ia.test(e)||!ra.test(e)||null!=t&&e in Object(t))},aa=hi;function sa(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(sa.Cache||aa),r}sa.Cache=aa;var oa=sa;var la=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,ua=/\\(\\)?/g,ca=function(e){var t=oa(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(la,(function(e,r,i,n){t.push(i?n.replace(ua,"$1"):r||e)})),t}));var da=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},ha=Xe,fa=Xn,ba=_e?_e.prototype:void 0,pa=ba?ba.toString:void 0;var va=function e(t){if("string"==typeof t)return t;if(ha(t))return da(t,e)+"";if(fa(t))return pa?pa.call(t):"";var r=t+"";return"0"==r&&1/t==-1/0?"-0":r},ma=va;var ya=Xe,ga=na,wa=ca,Oa=function(e){return null==e?"":ma(e)};var ja=function(e,t){return ya(e)?e:ga(e,t)?[e]:wa(Oa(e))},Ia=Xn;var Pa=function(e){if("string"==typeof e||Ia(e))return e;var t=e+"";return"0"==t&&1/e==-1/0?"-0":t},Aa=ja,Ta=Pa;var ka=function(e,t){for(var r=0,i=(t=Aa(t,e)).length;null!=e&&r<i;)e=e[Ta(t[r++])];return r&&r==i?e:void 0},Sa=ka;var Ca=ja,Ba=Qe,Ea=Xe,_a=nt,Ra=at,Na=Pa;var Da=function(e,t){return null!=e&&t in Object(e)},Ua=function(e,t,r){for(var i=-1,n=(t=Ca(t,e)).length,a=!1;++i<n;){var s=Na(t[i]);if(!(a=null!=e&&r(e,s)))break;e=e[s]}return a||++i!=n?a:!!(n=null==e?0:e.length)&&Ra(n)&&_a(s,n)&&(Ea(e)||Ba(e))};var qa=Fn,Ma=function(e,t,r){var i=null==e?void 0:Sa(e,t);return void 0===i?r:i},Fa=function(e,t){return null!=e&&Ua(e,t,Da)},xa=na,za=Ln,Wa=$n,La=Pa;var Ga=ka;var Va=function(e){return function(t){return null==t?void 0:t[e]}},$a=function(e){return function(t){return Ga(t,e)}},Ha=na,Ka=Pa;var Ya=Jn,Ja=function(e,t){return xa(e)&&za(t)?Wa(La(e),t):function(r){var i=Ma(r,e);return void 0===i&&i===t?Fa(r,e):qa(t,i,3)}},Za=function(e){return e},Qa=Xe,Xa=function(e){return Ha(e)?Va(Ka(e)):$a(e)};var es=function(e){return"function"==typeof e?e:null==e?Za:"object"==typeof e?Qa(e)?Ja(e[0],e[1]):Ya(e):Xa(e)},ts=Ae,rs=Ht,is=es,ns=Xe;var as=Pe(function(e,t){return function(r,i){var n=ns(r)?ts:rs,a=t?t():{};return n(r,e,is(i),a)}}((function(e,t,r){e[r?0:1].push(t)}),(function(){return[[],[]]})));var ss=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},os=function(e){return e!=e},ls=function(e,t,r){for(var i=r-1,n=e.length;++i<n;)if(e[i]===t)return i;return-1};var us=function(e,t,r){return t==t?ls(e,t,r):ss(e,os,r)};var cs=function(e,t){return!!(null==e?0:e.length)&&us(e,t,0)>-1};var ds=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 hs=sn,fs=function(){},bs=hs&&1/Di(new hs([,-0]))[1]==1/0?function(e){return new hs(e)}:fs,ps=Si,vs=cs,ms=ds,ys=Ci,gs=bs,ws=Di;var Os=function(e,t,r){var i=-1,n=vs,a=e.length,s=!0,o=[],l=o;if(r)s=!1,n=ms;else if(a>=200){var u=t?null:gs(e);if(u)return ws(u);s=!1,n=ys,l=new ps}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},js=es,Is=Os;var Ps=Pe((function(e,t){return e&&e.length?Is(e,js(t)):[]}));const As=new Set(["LicensePlate","FaceDetection","Analytic","SpeedDetection","Temperature","PoS","GPS","DigitalInput","Loitering"]);class Ts{get startTime(){return new Date(this.raw.startTime)}get endTime(){return new Date(this.raw.endTime)}get isLive(){return!As.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=As.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}window.CameraEvent=Ts;const Ss=()=>!0,Cs=5e-4;class Bs extends ne{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,"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:L()}),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,"updatesByCameraId",{enumerable:!0,configurable:!0,writable:!0,value:new Map}),Object.defineProperty(this,"recentAdditions",{enumerable:!0,configurable:!0,writable:!0,value:[]}),Object.defineProperty(this,"update",{enumerable:!0,configurable:!0,writable:!0,value:e=>{for(const t of e){const e=this.eventsById.get(t.id);if(!e)return;e.update(t.raw),this.data.remove((e=>e.id===t.id)),this.data.add([e])}}}),Object.defineProperty(this,"add",{enumerable:!0,configurable:!0,writable:!0,value:e=>{var t;const r=e.filter((e=>!this.eventsById.has(e.id)));for(const e of r)this.eventsById.set(e.id,e);if(this.data.add(r),r.length){const e=new Set(r.map((e=>e.cameraId)));for(const r of e)this.updatesByCameraId.set(r,(null!==(t=this.updatesByCameraId.get(r))&&void 0!==t?t:0)+1);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 Ts(e))),[r,i]=as(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=L(),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.pendingRequests=L(),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([Number.NEGATIVE_INFINITY,i]),this.knownIntervalsByEnd.filter([t,Number.POSITIVE_INFINITY]);const n=this.knownIntervalsByStart.bottom(Number.POSITIVE_INFINITY),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(F((e=>e.pageInfo.haveMore?o(e.pageInfo.nextPageToken):d)),q((e=>e.resultItems.map((e=>new Ts(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+Cs:Number.POSITIVE_INFINITY]),(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(Number.POSITIVE_INFINITY);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([Number.NEGATIVE_INFINITY,+r+Cs]),this.eventsByEnd.filter([+t,Number.POSITIVE_INFINITY]);const i=this.eventsByStart.bottom(Number.POSITIVE_INFINITY);return this.eventsByCameraId.filterAll(),this.eventsByStart.filterAll(),this.eventsByEnd.filterAll(),i}getLastNonAnalyticEventBefore({cameraId:e,date:t}){this.eventsByCameraId.filter(e),this.eventsByStart.filter([Number.NEGATIVE_INFINITY,+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([Number.NEGATIVE_INFINITY,+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]}getRunningEvent(e){this.eventsByCameraId.filter(e);const[t]=this.eventsByStart.top(1);if(this.eventsByCameraId.filterAll(),null==t?void 0:t.isLive)return t}getFirstNonAnalyticEventAfter({cameraId:e,date:t}){this.eventsByCameraId.filter(e),this.eventsByStart.filter([+t+Cs,Number.POSITIVE_INFINITY]),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+Cs,Number.POSITIVE_INFINITY]),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(U((({hub:e,event:t})=>"cameras"===e&&"OnCameraMotionEvent"===t))).subscribe(this.processNewEvents)}dispose(){super.dispose(),this.data.remove(Ss),this.updates++}}const Es=5e-4;class _s extends ne{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)))),q((t=>t.filter((e=>e.url)).map(this.toThumbnail(e)))),N());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=L(),this.thumbnailsByCameraId=this.thumbnails.dimension((e=>e.cameraId)),this.thumbnailsByDate=this.thumbnails.dimension((e=>+e.timestamp)),this.pendingRequests=L(),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+Es]),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(q((()=>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)))),q((t=>t.filter((e=>e.url)).map(this.toThumbnail(e)))),N());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(q((()=>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?Es: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+Es]);const i=this.thumbnails.allFiltered();return this.thumbnailsByDate.filterAll(),this.thumbnailsByCameraId.filterAll(),i}}const Rs=V.createInstance();class Ns{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 ne{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]=as(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 Ns(e)))):y((()=>e.error))))).subscribe({next:t=>{var r;null===(r=this.notification)||void 0===r||r.success(Rs.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(Rs.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 Ns(e)))):y((()=>e.error))))).subscribe({next:t=>{var r;null===(r=this.notification)||void 0===r||r.success(Rs.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(Rs.t("archiveManager.timelapseNotSavedMessage",{name:e.name}))}})}}),n(this,{loaded:a,loading:a,updates:a,add:s,addOrUpdate:s,removeFromStore:s}),this.data=L(),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 Ns(e)))):(console.error(e.error),[]))),N());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(Rs.t("clips.renameSuccess"),{duration:3e3})},error:e=>{var t;console.error(e),null===(t=this.notification)||void 0===t||t.error(Rs.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 Ns(e)))):y((()=>e.error))))).subscribe({next:()=>{var t;this.removeFromStore([e]),null===(t=this.notification)||void 0===t||t.success(Rs.t("clipDeleted",{name:e.name}))},error:t=>{var r;console.error(t),null===(r=this.notification)||void 0===r||r.error(Rs.t("archiveManager.archiveNotDeletedMessage",{name:e.name}))}})}afterInit(){this.api.events.pipe(U((({hub:e,event:t})=>"archives"===e&&"OnArchiveAdded"===t))).subscribe((({data:e})=>{this.add(e.resultItems.map((e=>new Ns(e))))})),this.api.events.pipe(U((({hub:e,event:t})=>"archives"===e&&"OnTimelapsAdded"===t))).subscribe((({data:e})=>{this.addOrUpdate(e.resultItems.map((e=>new Ns({...e,recordType:"Timelaps"}))))})),this.api.events.pipe(U((({hub:e,event:t})=>"archives"===e&&"OnArchiveDeleted"===t))).subscribe((({data:e})=>{this.removeFromStore(e.resultItems)}))}dispose(){this.data.remove(Ss),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 Fs{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 ye}),Object.defineProperty(this,"archives",{enumerable:!0,configurable:!0,writable:!0,value:new pe(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 je}),Object.defineProperty(this,"thumbnails",{enumerable:!0,configurable:!0,writable:!0,value:new _s}),Object.defineProperty(this,"account",{enumerable:!0,configurable:!0,writable:!0,value:new he}),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 T?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 ie,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 Fs(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 re({tokenServiceUrl:a,tokenStorageKey:r,storage:t,clientId:o,deviceInfo:null}),this.api=ee.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 xs=new Fs(qs),zs=$.createContext(null);export{zs as AppContext,xs as app};
|
|
1
|
+
import e from"jqueryless-signalr";import{makeObservable as t,observable as n,action as s,computed as r,reaction as i,when as a,runInAction as o,observe as u}from"mobx";import{Subscription as c,filter as l,map as h,mergeMap as d,of as p,throwError as f,tap as m,shareReplay as v,retry as y,expand as g,EMPTY as b,last as I,Subject as w,skip as T,exhaustMap as k,takeUntil as S,share as C,BehaviorSubject as B,switchMap as _,timer as E,delay as O,take as A,catchError as R,Observable as j,startWith as N,pairwise as q,concatMap as U}from"rxjs";import D from"string-natural-compare";import P from"crossfilter2";import{z as F}from"zod";import x from"react";var M="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function z(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var L="object"==typeof M&&M&&M.Object===Object&&M,W=L,V="object"==typeof self&&self&&self.Object===Object&&self,G=W||V||Function("return this")(),$=G.Symbol,H=$,Y=Object.prototype,K=Y.hasOwnProperty,J=Y.toString,Z=H?H.toStringTag:void 0;var Q=function(e){var t=K.call(e,Z),n=e[Z];try{e[Z]=void 0;var s=!0}catch(e){}var r=J.call(e);return s&&(t?e[Z]=n:delete e[Z]),r},X=Object.prototype.toString;var ee=Q,te=function(e){return X.call(e)},ne=$?$.toStringTag:void 0;var se=function(e){return null==e?void 0===e?"[object Undefined]":"[object Null]":ne&&ne in Object(e)?ee(e):te(e)};var re=function(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)},ie=se,ae=re;var oe,ue=function(e){if(!ae(e))return!1;var t=ie(e);return"[object Function]"==t||"[object GeneratorFunction]"==t||"[object AsyncFunction]"==t||"[object Proxy]"==t},ce=G["__core-js_shared__"],le=(oe=/[^.]+$/.exec(ce&&ce.keys&&ce.keys.IE_PROTO||""))?"Symbol(src)_1."+oe:"";var he=function(e){return!!le&&le in e},de=Function.prototype.toString;var pe=function(e){if(null!=e){try{return de.call(e)}catch(e){}try{return e+""}catch(e){}}return""},fe=ue,me=he,ve=re,ye=pe,ge=/^\[object .+?Constructor\]$/,be=Function.prototype,Ie=Object.prototype,we=be.toString,Te=Ie.hasOwnProperty,ke=RegExp("^"+we.call(Te).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");var Se=function(e){return!(!ve(e)||me(e))&&(fe(e)?ke:ge).test(ye(e))},Ce=function(e,t){return null==e?void 0:e[t]};var Be=function(e,t){var n=Ce(e,t);return Se(n)?n:void 0},_e=Be(Object,"create"),Ee=_e;var Oe=function(){this.__data__=Ee?Ee(null):{},this.size=0};var Ae=function(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t},Re=_e,je=Object.prototype.hasOwnProperty;var Ne=function(e){var t=this.__data__;if(Re){var n=t[e];return"__lodash_hash_undefined__"===n?void 0:n}return je.call(t,e)?t[e]:void 0},qe=_e,Ue=Object.prototype.hasOwnProperty;var De=_e;var Pe=Oe,Fe=Ae,xe=Ne,Me=function(e){var t=this.__data__;return qe?void 0!==t[e]:Ue.call(t,e)},ze=function(e,t){var n=this.__data__;return this.size+=this.has(e)?0:1,n[e]=De&&void 0===t?"__lodash_hash_undefined__":t,this};function Le(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var s=e[t];this.set(s[0],s[1])}}Le.prototype.clear=Pe,Le.prototype.delete=Fe,Le.prototype.get=xe,Le.prototype.has=Me,Le.prototype.set=ze;var We=Le;var Ve=function(){this.__data__=[],this.size=0};var Ge=function(e,t){return e===t||e!=e&&t!=t},$e=Ge;var He=function(e,t){for(var n=e.length;n--;)if($e(e[n][0],t))return n;return-1},Ye=He,Ke=Array.prototype.splice;var Je=He;var Ze=He;var Qe=He;var Xe=Ve,et=function(e){var t=this.__data__,n=Ye(t,e);return!(n<0)&&(n==t.length-1?t.pop():Ke.call(t,n,1),--this.size,!0)},tt=function(e){var t=this.__data__,n=Je(t,e);return n<0?void 0:t[n][1]},nt=function(e){return Ze(this.__data__,e)>-1},st=function(e,t){var n=this.__data__,s=Qe(n,e);return s<0?(++this.size,n.push([e,t])):n[s][1]=t,this};function rt(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var s=e[t];this.set(s[0],s[1])}}rt.prototype.clear=Xe,rt.prototype.delete=et,rt.prototype.get=tt,rt.prototype.has=nt,rt.prototype.set=st;var it=rt,at=Be(G,"Map"),ot=We,ut=it,ct=at;var lt=function(e){var t=typeof e;return"string"==t||"number"==t||"symbol"==t||"boolean"==t?"__proto__"!==e:null===e};var ht=function(e,t){var n=e.__data__;return lt(t)?n["string"==typeof t?"string":"hash"]:n.map},dt=ht;var pt=ht;var ft=ht;var mt=ht;var vt=function(){this.size=0,this.__data__={hash:new ot,map:new(ct||ut),string:new ot}},yt=function(e){var t=dt(this,e).delete(e);return this.size-=t?1:0,t},gt=function(e){return pt(this,e).get(e)},bt=function(e){return ft(this,e).has(e)},It=function(e,t){var n=mt(this,e),s=n.size;return n.set(e,t),this.size+=n.size==s?0:1,this};function wt(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var s=e[t];this.set(s[0],s[1])}}wt.prototype.clear=vt,wt.prototype.delete=yt,wt.prototype.get=gt,wt.prototype.has=bt,wt.prototype.set=It;var Tt=wt,kt=Tt;function St(e,t){if("function"!=typeof e||null!=t&&"function"!=typeof t)throw new TypeError("Expected a function");var n=function(){var s=arguments,r=t?t.apply(this,s):s[0],i=n.cache;if(i.has(r))return i.get(r);var a=e.apply(this,s);return n.cache=i.set(r,a)||i,a};return n.cache=new(St.Cache||kt),n}St.Cache=kt;var Ct=St;class Bt{values=new Map;getItem(e){return this.values.get(e)||null}setItem(e,t){this.values.set(e,t)}removeItem(e){this.values.delete(e)}}function _t(e){if(e.length<2)return e;const t=[e[0]];for(let n=1;n<e.length;n++){const s=t.length-1,r=t[s],i=e[n];i[0]>r[1]?t.push(i):t[s]=[r[0],new Date(Math.max(+r[1],+i[1]))]}return t}const Et=()=>!0;class Ot{api;disposables=[];initWith(e){this.api=e,this.afterInit&&this.afterInit()}dispose(){for(const e of this.disposables)e instanceof c?e.closed||e.unsubscribe():e()}}var At;!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"}(At||(At={}));const Rt=F.enum(["fill","contain"]),jt=F.object({lat:F.number(),lon:F.number(),fov:F.number()}),Nt=F.object({params:F.object({x:F.number(),y:F.number(),r:F.number(),s:F.number()}),positions:F.tuple([jt,jt,jt]).optional()}),qt=F.tuple([F.number(),F.number(),F.number()]),Ut=F.object({[At.DEFAULT_VIDEO_RESIZE_MODE]:Rt.optional(),[At.RESIZE_MODE_PER_CAMERA]:F.array(F.tuple([F.number(),Rt])).optional(),[At.FISHEYE_CAMERAS]:F.array(F.tuple([F.number(),F.union([qt,Nt,F.null()])])).optional(),[At.UTC]:F.boolean().default(!1),[At.HOUR12]:F.boolean().default(!1),[At.START_OF_WEEK]:F.enum(["monday","sunday"]).default("monday")});class Dt extends Ot{notification;user=null;auth;constructor(e){super(),this.notification=e,t(this,{user:n.ref,setUser:s,userDisplayName:r,preferences:r,isSharingUserAccount:r})}get isSharingUserAccount(){return this.user?.email.endsWith("@share.share")||!1}get userDisplayName(){return this.user?this.user.firstName?.trim()||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(l((({hub:e,event:t})=>"users"===e&&"OnUserUpdateProfile"===t)),h((({data:e})=>e.resultItems[0]))).subscribe(this.setUser))}loadUser$(){return this.api.users.GetUser().pipe(d((e=>e.success?p(e.resultItems[0]):f((()=>e.error)))),m(this.setUser),v(1))}setUser=e=>{this.user=e};setAuthStore(e){this.auth=e,this.disposables.push(i((()=>this.auth.isAuthenticated),(()=>{this.auth.isAuthenticated&&this.loadUser$().subscribe()})))}async updateUserPassword(e){const t=function(){throw new Error("Config not initialized")}().changePasswordUrl,n=this.auth?.token?.accessToken,s=JSON.stringify({currentPassword:e.previous,newPassword:e.new}),r=new Headers;r.append("content-type","application/json"),r.append("accept","application/json"),r.append("authorization",`bearer ${n}`);const i=await fetch(t,{method:"PUT",headers:r,body:s}),{status:a}=i;if(200!==a){const e=await i.json();throw new Error(e.errors[0].message)}}updateUserSettings({firstName:e,lastName:t}){const n=p(null).pipe(d((()=>{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})})),d((e=>e.success?p(e.resultItems[0]):f((()=>e.error)))),this.retryOnVersionMismatch(),v());return n.subscribe((e=>{this.setUser(e)})),n}updateUserLanguage(e){const t=p(null).pipe(d((()=>{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})})),d((e=>e.success?p(e.resultItems[0]):f((()=>e.error)))),this.retryOnVersionMismatch(),v());return t.subscribe((e=>{this.setUser(e)})),t}updateCustomPreferences=e=>{const t=p(null).pipe(d((()=>{if(!this.user)return f((()=>"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)})),d((e=>e.success?p(e.resultItems[0]):f((()=>e.error)))),this.retryOnVersionMismatch(),v());return t.subscribe((e=>{this.setUser(e)})),t};setDefaultGroup(e){const t=p(null).pipe(d((()=>{if(!this.user)return f((()=>"user is not initialized"));const t={id:this.user.id,layoutStartId:e,layoutStartType:"camgroup",version:this.user.version};return this.api.users.UserUpdateProfile(t)})),d((e=>e.success?p(e.resultItems[0]):f((()=>e.error)))),this.retryOnVersionMismatch(),v());return t.subscribe({next:e=>{this.setUser(e),this.notification?.success("Successfully set default group")},error:e=>{console.error(e),this.notification?.error(e.message)}}),t}get preferences(){try{return Ut.parse(JSON.parse(this.user?.jsonField||"{}"))}catch(e){console.error(e)}return{[At.DEFAULT_VIDEO_RESIZE_MODE]:void 0,[At.RESIZE_MODE_PER_CAMERA]:void 0,[At.FISHEYE_CAMERAS]:void 0,[At.UTC]:!1,[At.HOUR12]:!1,[At.START_OF_WEEK]:"monday"}}getPreference=e=>this.preferences[e];retryOnVersionMismatch=()=>y({delay:(e,t)=>t>1?f((()=>e)):-4===e?.code?this.loadUser$():f((()=>e))})}class Pt{json;startTime;endTime;streamUrl;duration;isLive=!1;cameraId;id;constructor(e){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 Ft{id;name;imageUrl;streamUrl;dashStreamUrl;address;archiveDuration;dvrWindowLength;stateUpdatedAt;raw;enabled;isMicEnabled;state;pin;webRtcUrl;isPtz;permissions;get isOnline(){return this.enabled&&"Started"===this.state}get supportsWebRTC(){return!!this.webRtcUrl}constructor(e){t(this,{name:n,streamUrl:n,dashStreamUrl:n,enabled:n,isMicEnabled:n,state:n,pin:n,webRtcUrl:n,permissions:n,isOnline:r,update:s}),this.update(e)}update=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)};can=e=>!!(this.permissions&e)}var xt;!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"}(xt||(xt={}));const Mt=new Set(["LicensePlate","FaceDetection","Analytic","SpeedDetection","Temperature","PoS","GPS","DigitalInput","Loitering"]);class zt{id;cameraId;type;raw;thumbnailUrl;thumbnailWidth=0;thumbnailHeight=0;detectedObjects;faces;instant;get startTime(){return new Date(this.raw.startTime)}get endTime(){return new Date(this.raw.endTime)}get isLive(){return!Mt.has(this.type)&&+this.startTime==+this.endTime}get acknowledged(){return"sensorId"in this.raw&&!!this.raw.ackEventType}update=e=>{this.raw=e};constructor(e){if(t(this,{startTime:r,endTime:r,acknowledged:r,isLive:r,raw:n.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=Mt.has(this.type),this.detectedObjects||(this.detectedObjects=[])}}const Lt=5e-4;class Wt extends Ot{camerasStore;data;chunksByCameraId;chunksByStart;chunksByEnd;chunksById=new Map;pendingRequests;pendingRequestsByEnd;pendingRequestsByStart;pendingRequestsByCameraId;knownIntervals=new Map;updates=0;constructor(e){super(),this.camerasStore=e,t(this,{updates:n,add:s.bound}),this.data=P(),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=P(),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,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 s.request;if(this.knownIntervals.has(e)){const[s,r]=this.knownIntervals.get(e);if(s<=t&&r>=n)return p(this.getChunks({cameraId:e,from:t,to:n}));s<=t&&r<n&&(t=r),s>t&&r>=n&&(n=s),n<s&&(n=s),t>r&&(t=r)}const r=this.api.archives.PopulateArchive({cameraId:e,startTime:t,endTime:n}).pipe(h((e=>e.resultItems[0].chunks.map((e=>new Pt(e))))),m(this.add),m((n=>this.extendKnownInterval(e,t,n))),v());return this.pendingRequests.add([{cameraId:e,startTime:t,endTime:n,request:r}]),r.pipe(m((()=>this.pendingRequests.remove((e=>e.request===r))))).subscribe(),r}extendKnownInterval(e,t,n){t=new Date(Math.min(+t,...n.map((e=>+e.startTime))));const s=new Date(Math.max(...n.map((e=>+e.endTime))));if(this.knownIntervals.has(e)){const n=this.knownIntervals.get(e);t<n[0]&&(n[0]=t),s>n[1]&&(n[1]=s)}else this.knownIntervals.set(e,[t,s])}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:n}){this.chunksByStart.filter([-1/0,+n+Lt]),this.chunksByEnd.filter([t,1/0]),e&&this.chunksByCameraId.filter(e);const s=this.chunksByStart.top(1/0);return e&&this.chunksByCameraId.filterAll(),this.chunksByStart.filterAll(),this.chunksByEnd.filterAll(),s}getClosestChunkRight=({cameraId:e,time:t})=>{this.chunksByCameraId.filter(e),this.chunksByEnd.filter([t,1/0]);const n=this.chunksByStart.bottom(1);return this.chunksByCameraId.filterAll(),this.chunksByEnd.filterAll(),n[0]};getClosestChunkLeft=({cameraId:e,time:t})=>{this.chunksByCameraId.filter(e),this.chunksByStart.filter([-1/0,+t+Lt]);const n=this.chunksByStart.top(1);return this.chunksByCameraId.filterAll(),this.chunksByEnd.filterAll(),n[0]};fetchNextChunk=({cameraId:e,time:t})=>{if(this.knownIntervals.has(e)){const[n,s]=this.knownIntervals.get(e);if(n<=t&&s>=t){const n=this.getClosestChunkRight({cameraId:e,time:t});if(n)return p(n)}}return p({result:[],time:t}).pipe(g((({result:t,time:n})=>{if(t.length||n>=new Date)return b;const s=new Date(+n+36e5);return this.fetch(e,n,s).pipe(h((e=>({result:e,time:s}))))})),I(),h((()=>this.getClosestChunkRight({cameraId:e,time:t}))))};fetchPrevChunk=({cameraId:e,time:t})=>{if(this.knownIntervals.has(e)){const[n,s]=this.knownIntervals.get(e);if(n<=t&&s>=t){const n=this.getClosestChunkLeft({cameraId:e,time:t});if(n)return p(n)}}const n=this.camerasStore.camerasById.get(e);if(!n)return p(void 0);const s=new Date(Date.now()-3600*n.archiveDuration*1e3);return this.knownIntervals.get(e)&&this.knownIntervals.get(e)[0]<=s?p(void 0):p({result:[],time:t}).pipe(g((({result:t,time:n})=>{if(t.length||n<=s)return b;const r=new Date(Math.max(+n-36e5,+s));return this.fetch(e,r,n).pipe(h((e=>({result:e,time:r}))))})),I(),h((()=>this.getClosestChunkRight({cameraId:e,time:t}))))};afterInit(){this.api.events.pipe(l((({hub:e,event:t})=>"archives"===e&&"OnArchiveChunksCreated"===t))).subscribe((({data:e})=>{this.add(e.resultItems.map((e=>new Pt(e))))}))}}class Vt extends Ot{camerasById=new Map;data=[];loading=!1;loaded=!1;pendingLoadRequest;requestsCanceler=new w;constructor(){super(),t(this,{data:n.ref,loading:n,loaded:n,add:s}),this.disposables.push(a((()=>this.loaded),(()=>{this.api.connection$.pipe(T(1),k((()=>this.sync()))).subscribe()})))}load=()=>{if(this.loaded)return p([]);if(this.pendingLoadRequest)return this.pendingLoadRequest;o((()=>{this.loading=!0})),this.pendingLoadRequest=this.api.cameras.GetCameras({},null).pipe(d((e=>e.success?p(e.resultItems):(console.error(e.error),f((()=>e.error))))),v(1),S(this.requestsCanceler));const e=this.pendingLoadRequest;return e.subscribe((e=>{this.pendingLoadRequest=void 0,o((()=>{this.add(e),this.loading=!1,this.loaded=!0}))})),e};add=e=>{for(const t of e)this.camerasById.has(t.id)?this.camerasById.get(t.id)?.update(t):this.camerasById.set(t.id,new Ft(t));this.data=Array.from(this.camerasById.values()).sort(((e,t)=>D(e.name,t.name,{caseInsensitive:!0})))};sync=()=>{const e=this.data.reduce(((e,t)=>Math.max(e,+t.stateUpdatedAt)),0);if(!e)return b;const t=this.api.cameras.GetCameras({},new Date(1e3*(Math.floor(e/1e3)+1))).pipe(d((e=>e.success?p(e.resultItems):(console.error(e.error),f((()=>e.error))))),v(1),S(this.requestsCanceler));return t.subscribe((e=>this.add(e))),t};afterInit(){this.disposables.push(this.api.events.pipe(l((({hub:e,event:t})=>"cameras"===e&&("OnCameraUpdated"===t||"OnSystemCameraUpdated"===t))),h((({data:e,event:t})=>"resultItems"in e?{data:e.resultItems[0],event:t}:{data:e,event:t}))).subscribe((({data:e,event:t})=>{const n=this.camerasById.get(e.id);if(!n)return console.warn("got update for unknown camera:",e.id);if("OnSystemCameraUpdated"===t){const t=n.raw;for(const[n,s]of Object.entries(e))null===s&&(e[n]=t[n])}n.update(e)})))}dispose(){this.requestsCanceler.next(),this.camerasById.clear(),this.data=[],this.loading=!1,this.loaded=!1,super.dispose()}}var Gt=function(e,t,n,s){for(var r=-1,i=null==e?0:e.length;++r<i;){var a=e[r];t(s,a,n(a),e)}return s};var $t=function(e){return function(t,n,s){for(var r=-1,i=Object(t),a=s(t),o=a.length;o--;){var u=a[e?o:++r];if(!1===n(i[u],u,i))break}return t}}();var Ht=function(e,t){for(var n=-1,s=Array(e);++n<e;)s[n]=t(n);return s};var Yt=function(e){return null!=e&&"object"==typeof e},Kt=se,Jt=Yt;var Zt=function(e){return Jt(e)&&"[object Arguments]"==Kt(e)},Qt=Yt,Xt=Object.prototype,en=Xt.hasOwnProperty,tn=Xt.propertyIsEnumerable,nn=Zt(function(){return arguments}())?Zt:function(e){return Qt(e)&&en.call(e,"callee")&&!tn.call(e,"callee")},sn=Array.isArray,rn={exports:{}};var an=function(){return!1};!function(e,t){var n=G,s=an,r=t&&!t.nodeType&&t,i=r&&e&&!e.nodeType&&e,a=i&&i.exports===r?n.Buffer:void 0,o=(a?a.isBuffer:void 0)||s;e.exports=o}(rn,rn.exports);var on=rn.exports,un=/^(?:0|[1-9]\d*)$/;var cn=function(e,t){var n=typeof e;return!!(t=null==t?9007199254740991:t)&&("number"==n||"symbol"!=n&&un.test(e))&&e>-1&&e%1==0&&e<t};var ln=function(e){return"number"==typeof e&&e>-1&&e%1==0&&e<=9007199254740991},hn=se,dn=ln,pn=Yt,fn={};fn["[object Float32Array]"]=fn["[object Float64Array]"]=fn["[object Int8Array]"]=fn["[object Int16Array]"]=fn["[object Int32Array]"]=fn["[object Uint8Array]"]=fn["[object Uint8ClampedArray]"]=fn["[object Uint16Array]"]=fn["[object Uint32Array]"]=!0,fn["[object Arguments]"]=fn["[object Array]"]=fn["[object ArrayBuffer]"]=fn["[object Boolean]"]=fn["[object DataView]"]=fn["[object Date]"]=fn["[object Error]"]=fn["[object Function]"]=fn["[object Map]"]=fn["[object Number]"]=fn["[object Object]"]=fn["[object RegExp]"]=fn["[object Set]"]=fn["[object String]"]=fn["[object WeakMap]"]=!1;var mn=function(e){return pn(e)&&dn(e.length)&&!!fn[hn(e)]};var vn=function(e){return function(t){return e(t)}},yn={exports:{}};!function(e,t){var n=L,s=t&&!t.nodeType&&t,r=s&&e&&!e.nodeType&&e,i=r&&r.exports===s&&n.process,a=function(){try{var e=r&&r.require&&r.require("util").types;return e||i&&i.binding&&i.binding("util")}catch(e){}}();e.exports=a}(yn,yn.exports);var gn=yn.exports,bn=mn,In=vn,wn=gn&&gn.isTypedArray,Tn=wn?In(wn):bn,kn=Ht,Sn=nn,Cn=sn,Bn=on,_n=cn,En=Tn,On=Object.prototype.hasOwnProperty;var An=function(e,t){var n=Cn(e),s=!n&&Sn(e),r=!n&&!s&&Bn(e),i=!n&&!s&&!r&&En(e),a=n||s||r||i,o=a?kn(e.length,String):[],u=o.length;for(var c in e)!t&&!On.call(e,c)||a&&("length"==c||r&&("offset"==c||"parent"==c)||i&&("buffer"==c||"byteLength"==c||"byteOffset"==c)||_n(c,u))||o.push(c);return o},Rn=Object.prototype;var jn=function(e){var t=e&&e.constructor;return e===("function"==typeof t&&t.prototype||Rn)};var Nn=function(e,t){return function(n){return e(t(n))}}(Object.keys,Object),qn=jn,Un=Nn,Dn=Object.prototype.hasOwnProperty;var Pn=ue,Fn=ln;var xn=function(e){return null!=e&&Fn(e.length)&&!Pn(e)},Mn=An,zn=function(e){if(!qn(e))return Un(e);var t=[];for(var n in Object(e))Dn.call(e,n)&&"constructor"!=n&&t.push(n);return t},Ln=xn;var Wn=function(e){return Ln(e)?Mn(e):zn(e)},Vn=$t,Gn=Wn;var $n=xn;var Hn=function(e,t){return function(n,s){if(null==n)return n;if(!$n(n))return e(n,s);for(var r=n.length,i=t?r:-1,a=Object(n);(t?i--:++i<r)&&!1!==s(a[i],i,a););return n}}((function(e,t){return e&&Vn(e,t,Gn)}));var Yn=function(e,t,n,s){return Hn(e,(function(e,r,i){t(s,e,n(e),i)})),s},Kn=it;var Jn=it,Zn=at,Qn=Tt;var Xn=it,es=function(){this.__data__=new Kn,this.size=0},ts=function(e){var t=this.__data__,n=t.delete(e);return this.size=t.size,n},ns=function(e){return this.__data__.get(e)},ss=function(e){return this.__data__.has(e)},rs=function(e,t){var n=this.__data__;if(n instanceof Jn){var s=n.__data__;if(!Zn||s.length<199)return s.push([e,t]),this.size=++n.size,this;n=this.__data__=new Qn(s)}return n.set(e,t),this.size=n.size,this};function is(e){var t=this.__data__=new Xn(e);this.size=t.size}is.prototype.clear=es,is.prototype.delete=ts,is.prototype.get=ns,is.prototype.has=ss,is.prototype.set=rs;var as=is;var os=Tt,us=function(e){return this.__data__.set(e,"__lodash_hash_undefined__"),this},cs=function(e){return this.__data__.has(e)};function ls(e){var t=-1,n=null==e?0:e.length;for(this.__data__=new os;++t<n;)this.add(e[t])}ls.prototype.add=ls.prototype.push=us,ls.prototype.has=cs;var hs=ls;var ds=function(e,t){return e.has(t)},ps=hs,fs=function(e,t){for(var n=-1,s=null==e?0:e.length;++n<s;)if(t(e[n],n,e))return!0;return!1},ms=ds;var vs=function(e,t,n,s,r,i){var a=1&n,o=e.length,u=t.length;if(o!=u&&!(a&&u>o))return!1;var c=i.get(e),l=i.get(t);if(c&&l)return c==t&&l==e;var h=-1,d=!0,p=2&n?new ps:void 0;for(i.set(e,t),i.set(t,e);++h<o;){var f=e[h],m=t[h];if(s)var v=a?s(m,f,h,t,e,i):s(f,m,h,e,t,i);if(void 0!==v){if(v)continue;d=!1;break}if(p){if(!fs(t,(function(e,t){if(!ms(p,t)&&(f===e||r(f,e,n,s,i)))return p.push(t)}))){d=!1;break}}else if(f!==m&&!r(f,m,n,s,i)){d=!1;break}}return i.delete(e),i.delete(t),d};var ys=function(e){var t=-1,n=Array(e.size);return e.forEach((function(e,s){n[++t]=[s,e]})),n};var gs=function(e){var t=-1,n=Array(e.size);return e.forEach((function(e){n[++t]=e})),n},bs=G.Uint8Array,Is=Ge,ws=vs,Ts=ys,ks=gs,Ss=$?$.prototype:void 0,Cs=Ss?Ss.valueOf:void 0;var Bs=function(e,t,n,s,r,i,a){switch(n){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||!i(new bs(e),new bs(t)));case"[object Boolean]":case"[object Date]":case"[object Number]":return Is(+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=Ts;case"[object Set]":var u=1&s;if(o||(o=ks),e.size!=t.size&&!u)return!1;var c=a.get(e);if(c)return c==t;s|=2,a.set(e,t);var l=ws(o(e),o(t),s,r,i,a);return a.delete(e),l;case"[object Symbol]":if(Cs)return Cs.call(e)==Cs.call(t)}return!1};var _s=function(e,t){for(var n=-1,s=t.length,r=e.length;++n<s;)e[r+n]=t[n];return e},Es=sn;var Os=function(e,t,n){var s=t(e);return Es(e)?s:_s(s,n(e))};var As=function(e,t){for(var n=-1,s=null==e?0:e.length,r=0,i=[];++n<s;){var a=e[n];t(a,n,e)&&(i[r++]=a)}return i},Rs=function(){return[]},js=Object.prototype.propertyIsEnumerable,Ns=Object.getOwnPropertySymbols,qs=Os,Us=Ns?function(e){return null==e?[]:(e=Object(e),As(Ns(e),(function(t){return js.call(e,t)})))}:Rs,Ds=Wn;var Ps=function(e){return qs(e,Ds,Us)},Fs=Object.prototype.hasOwnProperty;var xs=function(e,t,n,s,r,i){var a=1&n,o=Ps(e),u=o.length;if(u!=Ps(t).length&&!a)return!1;for(var c=u;c--;){var l=o[c];if(!(a?l in t:Fs.call(t,l)))return!1}var h=i.get(e),d=i.get(t);if(h&&d)return h==t&&d==e;var p=!0;i.set(e,t),i.set(t,e);for(var f=a;++c<u;){var m=e[l=o[c]],v=t[l];if(s)var y=a?s(v,m,l,t,e,i):s(m,v,l,e,t,i);if(!(void 0===y?m===v||r(m,v,n,s,i):y)){p=!1;break}f||(f="constructor"==l)}if(p&&!f){var g=e.constructor,b=t.constructor;g==b||!("constructor"in e)||!("constructor"in t)||"function"==typeof g&&g instanceof g&&"function"==typeof b&&b instanceof b||(p=!1)}return i.delete(e),i.delete(t),p},Ms=Be(G,"DataView"),zs=Be(G,"Promise"),Ls=Be(G,"Set"),Ws=Ms,Vs=at,Gs=zs,$s=Ls,Hs=Be(G,"WeakMap"),Ys=se,Ks=pe,Js="[object Map]",Zs="[object Promise]",Qs="[object Set]",Xs="[object WeakMap]",er="[object DataView]",tr=Ks(Ws),nr=Ks(Vs),sr=Ks(Gs),rr=Ks($s),ir=Ks(Hs),ar=Ys;(Ws&&ar(new Ws(new ArrayBuffer(1)))!=er||Vs&&ar(new Vs)!=Js||Gs&&ar(Gs.resolve())!=Zs||$s&&ar(new $s)!=Qs||Hs&&ar(new Hs)!=Xs)&&(ar=function(e){var t=Ys(e),n="[object Object]"==t?e.constructor:void 0,s=n?Ks(n):"";if(s)switch(s){case tr:return er;case nr:return Js;case sr:return Zs;case rr:return Qs;case ir:return Xs}return t});var or=as,ur=vs,cr=Bs,lr=xs,hr=ar,dr=sn,pr=on,fr=Tn,mr="[object Arguments]",vr="[object Array]",yr="[object Object]",gr=Object.prototype.hasOwnProperty;var br=function(e,t,n,s,r,i){var a=dr(e),o=dr(t),u=a?vr:hr(e),c=o?vr:hr(t),l=(u=u==mr?yr:u)==yr,h=(c=c==mr?yr:c)==yr,d=u==c;if(d&&pr(e)){if(!pr(t))return!1;a=!0,l=!1}if(d&&!l)return i||(i=new or),a||fr(e)?ur(e,t,n,s,r,i):cr(e,t,u,n,s,r,i);if(!(1&n)){var p=l&&gr.call(e,"__wrapped__"),f=h&&gr.call(t,"__wrapped__");if(p||f){var m=p?e.value():e,v=f?t.value():t;return i||(i=new or),r(m,v,n,s,i)}}return!!d&&(i||(i=new or),lr(e,t,n,s,r,i))},Ir=Yt;var wr=function e(t,n,s,r,i){return t===n||(null==t||null==n||!Ir(t)&&!Ir(n)?t!=t&&n!=n:br(t,n,s,r,e,i))},Tr=as,kr=wr;var Sr=re;var Cr=function(e){return e==e&&!Sr(e)},Br=Cr,_r=Wn;var Er=function(e,t){return function(n){return null!=n&&(n[e]===t&&(void 0!==t||e in Object(n)))}},Or=function(e,t,n,s){var r=n.length,i=r,a=!s;if(null==e)return!i;for(e=Object(e);r--;){var o=n[r];if(a&&o[2]?o[1]!==e[o[0]]:!(o[0]in e))return!1}for(;++r<i;){var u=(o=n[r])[0],c=e[u],l=o[1];if(a&&o[2]){if(void 0===c&&!(u in e))return!1}else{var h=new Tr;if(s)var d=s(c,l,u,e,t,h);if(!(void 0===d?kr(l,c,3,s,h):d))return!1}}return!0},Ar=function(e){for(var t=_r(e),n=t.length;n--;){var s=t[n],r=e[s];t[n]=[s,r,Br(r)]}return t},Rr=Er;var jr=function(e){var t=Ar(e);return 1==t.length&&t[0][2]?Rr(t[0][0],t[0][1]):function(n){return n===e||Or(n,e,t)}},Nr=se,qr=Yt;var Ur=function(e){return"symbol"==typeof e||qr(e)&&"[object Symbol]"==Nr(e)},Dr=sn,Pr=Ur,Fr=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,xr=/^\w*$/;var Mr=function(e,t){if(Dr(e))return!1;var n=typeof e;return!("number"!=n&&"symbol"!=n&&"boolean"!=n&&null!=e&&!Pr(e))||(xr.test(e)||!Fr.test(e)||null!=t&&e in Object(t))},zr=Ct;var Lr=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,Wr=/\\(\\)?/g,Vr=function(e){var t=zr(e,(function(e){return 500===n.size&&n.clear(),e})),n=t.cache;return t}((function(e){var t=[];return 46===e.charCodeAt(0)&&t.push(""),e.replace(Lr,(function(e,n,s,r){t.push(s?r.replace(Wr,"$1"):n||e)})),t}));var Gr=function(e,t){for(var n=-1,s=null==e?0:e.length,r=Array(s);++n<s;)r[n]=t(e[n],n,e);return r},$r=sn,Hr=Ur,Yr=$?$.prototype:void 0,Kr=Yr?Yr.toString:void 0;var Jr=function e(t){if("string"==typeof t)return t;if($r(t))return Gr(t,e)+"";if(Hr(t))return Kr?Kr.call(t):"";var n=t+"";return"0"==n&&1/t==-1/0?"-0":n},Zr=Jr;var Qr=sn,Xr=Mr,ei=Vr,ti=function(e){return null==e?"":Zr(e)};var ni=function(e,t){return Qr(e)?e:Xr(e,t)?[e]:ei(ti(e))},si=Ur;var ri=function(e){if("string"==typeof e||si(e))return e;var t=e+"";return"0"==t&&1/e==-1/0?"-0":t},ii=ni,ai=ri;var oi=function(e,t){for(var n=0,s=(t=ii(t,e)).length;null!=e&&n<s;)e=e[ai(t[n++])];return n&&n==s?e:void 0},ui=oi;var ci=ni,li=nn,hi=sn,di=cn,pi=ln,fi=ri;var mi=function(e,t){return null!=e&&t in Object(e)},vi=function(e,t,n){for(var s=-1,r=(t=ci(t,e)).length,i=!1;++s<r;){var a=fi(t[s]);if(!(i=null!=e&&n(e,a)))break;e=e[a]}return i||++s!=r?i:!!(r=null==e?0:e.length)&&pi(r)&&di(a,r)&&(hi(e)||li(e))};var yi=wr,gi=function(e,t,n){var s=null==e?void 0:ui(e,t);return void 0===s?n:s},bi=function(e,t){return null!=e&&vi(e,t,mi)},Ii=Mr,wi=Cr,Ti=Er,ki=ri;var Si=oi;var Ci=function(e){return function(t){return null==t?void 0:t[e]}},Bi=function(e){return function(t){return Si(t,e)}},_i=Mr,Ei=ri;var Oi=jr,Ai=function(e,t){return Ii(e)&&wi(t)?Ti(ki(e),t):function(n){var s=gi(n,e);return void 0===s&&s===t?bi(n,e):yi(t,s,3)}},Ri=function(e){return e},ji=sn,Ni=function(e){return _i(e)?Ci(Ei(e)):Bi(e)};var qi=function(e){return"function"==typeof e?e:null==e?Ri:"object"==typeof e?ji(e)?Ai(e[0],e[1]):Oi(e):Ni(e)},Ui=Gt,Di=Yn,Pi=qi,Fi=sn;var xi=z(function(e,t){return function(n,s){var r=Fi(n)?Ui:Di,i=t?t():{};return r(n,e,Pi(s),i)}}((function(e,t,n){e[n?0:1].push(t)}),(function(){return[[],[]]})));var Mi=function(e,t,n,s){for(var r=e.length,i=n+(s?1:-1);s?i--:++i<r;)if(t(e[i],i,e))return i;return-1},zi=function(e){return e!=e},Li=function(e,t,n){for(var s=n-1,r=e.length;++s<r;)if(e[s]===t)return s;return-1};var Wi=function(e,t,n){return t==t?Li(e,t,n):Mi(e,zi,n)};var Vi=function(e,t){return!!(null==e?0:e.length)&&Wi(e,t,0)>-1};var Gi=function(e,t,n){for(var s=-1,r=null==e?0:e.length;++s<r;)if(n(t,e[s]))return!0;return!1};var $i=Ls,Hi=function(){},Yi=$i&&1/gs(new $i([,-0]))[1]==1/0?function(e){return new $i(e)}:Hi,Ki=hs,Ji=Vi,Zi=Gi,Qi=ds,Xi=Yi,ea=gs;var ta=function(e,t,n){var s=-1,r=Ji,i=e.length,a=!0,o=[],u=o;if(n)a=!1,r=Zi;else if(i>=200){var c=t?null:Xi(e);if(c)return ea(c);a=!1,r=Qi,u=new Ki}else u=t?[]:o;e:for(;++s<i;){var l=e[s],h=t?t(l):l;if(l=n||0!==l?l:0,a&&h==h){for(var d=u.length;d--;)if(u[d]===h)continue e;t&&u.push(h),o.push(l)}else r(u,h,n)||(u!==o&&u.push(h),o.push(l))}return o},na=qi,sa=ta;var ra=z((function(e,t){return e&&e.length?sa(e,na(t)):[]}));const ia={Person:"red",Car:"green",Animal:"blue",LicensePlate:"cyan",Fire:"deepOrange",Smoke:"deepPurple"},aa={red:["#f44336","#ff1744"],green:["#4caf50","#00e676"],blue:["#2196f3","#2979ff"],purple:["#9c27b0","#d500f9"],teal:["#009688","#1de9b6"],amber:["#ff8f00","#ffc400"],pink:["#e91e63","#f50057"],cyan:["#00bcd4","#00e5ff"],lightGreen:["#9ccc65","#76ff03"],deepOrange:["#ff5722","#ff3d00"],deepPurple:["#7e57c2","#651fff"],lime:["#cddc39","#c6ff00"],indigo:["#3f51b5","#3d5afe"],lightBlue:["#03a9f4","#00b0ff"]};class oa extends Ot{schemaDescription=[];constructor(){super(),t(this,{schemaDescription:n.ref,foundObjectTypes:r,foundObjectTypesForSelect:r,colorsByFoundObjectType:r})}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(ia).filter((([e])=>this.foundObjectTypes.includes(e))).map((([,e])=>e)),t=Object.keys(aa).filter((t=>!e.includes(t)));let n=0;return this.foundObjectTypes.map((e=>{const s=e in ia?ia[e]:t[n++],r=aa[s];return{value:e,label:e.toLowerCase(),color:r?.[0],highlightColor:r?.[1],type:"detectedObject"}}))}get colorsByFoundObjectType(){const e=new Map;for(const{value:t,highlightColor:n}of this.foundObjectTypesForSelect)e.set(t,n);return e}fetchAnalyticEventSchema=()=>{this.api.cameras.GetSensorDataSchema("Analytic").subscribe({next:e=>{e.success?o((()=>{this.schemaDescription=e.resultItems})):console.error(e)},error:console.error})};afterInit(){this.fetchAnalyticEventSchema()}dispose(){super.dispose(),this.schemaDescription=[]}}const ua=5e-4;class ca extends Ot{camerasStore;data;eventsByCameraId;eventsByStart;eventsByEnd;eventsByType;eventsByFoundObjects;eventsByColor;pendingRequests;pendingRequestsByEnd;pendingRequestsByStart;pendingRequestsByCameraId;knownIntervals=P();knownIntervalsByCameraId;knownIntervalsByStart;knownIntervalsByEnd;eventsById=new Map;updates=0;updatesByCameraId=new Map;recentAdditions=[];constructor(e){super(),this.camerasStore=e,t(this,{updates:n,recentAdditions:n.ref,processNewEvents:s,update:s,add:s,dispose:s}),this.data=P(),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)=>e.concat(..."Colors"in t?t.Colors?.map((e=>e.Color))??[]:[])),[])),!0),this.pendingRequests=P(),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,n){const s=null===n?new Date(Date.now()-6e5):n;-1===e?this.knownIntervalsByCameraId.filter(-1):this.knownIntervalsByCameraId.filter((t=>-1===t||t===e)),this.knownIntervalsByStart.filter([Number.NEGATIVE_INFINITY,s]),this.knownIntervalsByEnd.filter([t,Number.POSITIVE_INFINITY]);const r=this.knownIntervalsByStart.bottom(Number.POSITIVE_INFINITY),i=[];if(this.knownIntervalsByCameraId.filterAll(),this.knownIntervalsByStart.filterAll(),this.knownIntervalsByEnd.filterAll(),r.length){const a=_t(r.map((e=>[e.from,e.to])));a[0][0]>t&&i.push([t,a[0][0]]);for(let e=0;e<a.length-1;e++)i.push([a[e][1],a[e+1][0]]);a[_t.length-1][1]<s&&i.push([a[_t.length-1][1],s]),i.length&&(t=i[0][0],+i[i.length-1][1]<=+s&&(n=i[i.length-1][1]),this.knownIntervals.add([{cameraId:e,from:t,to:s}]))}else this.knownIntervals.add([{cameraId:e,from:t,to:s}]);this.pendingRequestsByCameraId.filter(e),this.pendingRequestsByStart.filter(t),this.pendingRequestsByEnd.filter(s);const a=this.pendingRequests.allFiltered()[0];if(this.pendingRequestsByCameraId.filterAll(),this.pendingRequestsByStart.filterAll(),this.pendingRequestsByEnd.filterAll(),a)return;if(r.length&&!i.length)return;const o=s=>this.api.cameras.GetSensorEventsPage({sensorIds:[e],sensorType:"camera",sensorEventTypes:[],startTime:t,endTime:n,rowsLimit:100,isDescending:!0,pageToken:s},null,[]).pipe(d((e=>e.success?p(e):(console.error(e.error),f((()=>e.error)))))),u=o().pipe(g((e=>e.pageInfo.haveMore?o(e.pageInfo.nextPageToken):b)),h((e=>e.resultItems.map((e=>new zt(e))))),C());this.pendingRequests.add([{cameraId:e,startTime:t,endTime:n||new Date,request:u}]),u.subscribe({next:this.add,error:e=>{console.error(e),this.pendingRequests.remove((e=>e.request===u))},complete:()=>{this.pendingRequests.remove((e=>e.request===u))}})}update=e=>{for(const t of e){const e=this.eventsById.get(t.id);if(!e)return;e.update(t.raw),this.data.remove((e=>e.id===t.id)),this.data.add([e])}};add=e=>{const t=e.filter((e=>!this.eventsById.has(e.id)));for(const e of t)this.eventsById.set(e.id,e);if(this.data.add(t),t.length){const e=new Set(t.map((e=>e.cameraId)));for(const t of e)this.updatesByCameraId.set(t,(this.updatesByCameraId.get(t)??0)+1);this.updates++}};getEvents({cameraIds:e,from:t,to:n,detectedObjectTypes:s,eventTypes:r,colors:i,probability:a}){this.eventsByStart.filter([+t,n?+n+ua:Number.POSITIVE_INFINITY]),e?.length&&this.eventsByCameraId.filter((t=>e.includes(t))),r?.length&&this.eventsByType.filter((e=>r.includes(e))),s?.length&&this.eventsByFoundObjects.filter((e=>s.includes(e))),i?.size&&this.eventsByColor.filter((e=>i.has(e)));let o=this.eventsByStart.top(Number.POSITIVE_INFINITY);return r?.length&&this.eventsByType.filterAll(),e?.length&&this.eventsByCameraId.filterAll(),s?.length&&this.eventsByFoundObjects.filterAll(),i?.size&&this.eventsByColor.filterAll(),this.eventsByStart.filterAll(),void 0!==a&&s?.length&&(o=o.filter((e=>e.detectedObjects.some((e=>e.Probability>=a&&s.includes(e.Type)))))),o}getOverlappedEvents({cameraId:e,from:t,to:n}){this.eventsByCameraId.filter(e),this.eventsByStart.filter([Number.NEGATIVE_INFINITY,+n+ua]),this.eventsByEnd.filter([+t,Number.POSITIVE_INFINITY]);const s=this.eventsByStart.bottom(Number.POSITIVE_INFINITY);return this.eventsByCameraId.filterAll(),this.eventsByStart.filterAll(),this.eventsByEnd.filterAll(),s}getLastNonAnalyticEventBefore({cameraId:e,date:t}){this.eventsByCameraId.filter(e),this.eventsByStart.filter([Number.NEGATIVE_INFINITY,+t]),this.eventsByType.filter((e=>"Analytic"!==e));const n=this.eventsByStart.top(1);return this.eventsByType.filterAll(),this.eventsByStart.filterAll(),this.eventsByCameraId.filterAll(),n[0]}getLastObjectBefore({cameraId:e,date:t,objectFilters:n}){this.eventsByCameraId.filter(e),this.eventsByStart.filter([Number.NEGATIVE_INFINITY,+t]),this.eventsByType.filter((e=>"Analytic"===e));const{cars:s,people:r,misc:i}=n;r&&s&&i||this.eventsByFoundObjects.filter((e=>i?r||s?!(!r||!s)||(r?"Car"!==e:"Person"!==e):"Person"!==e&&"Car"!==e:r&&s?"Person"===e||"Car"===e:r?"Person"===e:"Car"===e));const a=this.eventsByStart.top(1);return this.eventsByFoundObjects.filterAll(),this.eventsByType.filterAll(),this.eventsByStart.filterAll(),this.eventsByCameraId.filterAll(),a[0]}getRunningEvent(e){this.eventsByCameraId.filter(e);const[t]=this.eventsByStart.top(1);if(this.eventsByCameraId.filterAll(),t?.isLive)return t}getFirstNonAnalyticEventAfter({cameraId:e,date:t}){this.eventsByCameraId.filter(e),this.eventsByStart.filter([+t+ua,Number.POSITIVE_INFINITY]),this.eventsByType.filter((e=>"Analytic"!==e));const n=this.eventsByEnd.bottom(1);return this.eventsByType.filterAll(),this.eventsByCameraId.filterAll(),this.eventsByStart.filterAll(),n[0]}getFirstObjectAfter({cameraId:e,date:t,objectFilters:n}){this.eventsByCameraId.filter(e),this.eventsByStart.filter([+t+ua,Number.POSITIVE_INFINITY]),this.eventsByType.filter((e=>"Analytic"===e));const{cars:s,people:r,misc:i}=n;r&&s&&i||this.eventsByFoundObjects.filter((e=>i?r||s?!(!r||!s)||(r?"Car"!==e:"Person"!==e):"Person"!==e&&"Car"!==e:r&&s?"Person"===e||"Car"===e:r?"Person"===e:"Car"===e));const a=this.eventsByStart.bottom(1);return this.eventsByFoundObjects.filterAll(),this.eventsByType.filterAll(),this.eventsByStart.filterAll(),this.eventsByCameraId.filterAll(),a[0]}afterInit(){this.api.events.pipe(l((({hub:e,event:t})=>"cameras"===e&&"OnCameraMotionEvent"===t))).subscribe(this.processNewEvents)}processNewEvents=({data:e})=>{const t=ra(e.filter((e=>"PeopleCounter"!==e.eventType&&this.camerasStore.camerasById.has(e.sensorId))).reverse(),"id").map((e=>new zt(e))),[n,s]=xi(t,(e=>this.eventsById.has(e.id)));this.update(n),this.add(s),s.length&&(this.recentAdditions=s.map((e=>e.id)))};dispose(){super.dispose(),this.data.remove(Et),this.updates++}}const la=5e-4;class ha extends Ot{thumbnails;thumbnailsByCameraId;thumbnailsByDate;pendingRequests;pendingRequestsByEnd;pendingRequestsByStart;pendingRequestsByCameraId;pendingRequestsByCount;constructor(){super(),this.thumbnails=P(),this.thumbnailsByCameraId=this.thumbnails.dimension((e=>e.cameraId)),this.thumbnailsByDate=this.thumbnails.dimension((e=>+e.timestamp)),this.pendingRequests=P(),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,n,s)=>{this.pendingRequestsByCameraId.filter(e),this.pendingRequestsByStart.filter(t),this.pendingRequestsByEnd.filter(n),this.pendingRequestsByCount.filter(s);const r=this.pendingRequests.allFiltered()[0];if(this.pendingRequestsByCameraId.filterAll(),this.pendingRequestsByStart.filterAll(),this.pendingRequestsByEnd.filterAll(),this.pendingRequestsByCount.filterAll(),r)return r.request;const i=this.api.thumbnails.GetThumbnailsInfo({cameraId:e,from:t,to:n,count:s}).pipe(d((e=>e.success?p(e.resultItems):f((()=>e.error)))),h((t=>t.filter((e=>e.url)).map(this.toThumbnail(e)))),v());return this.pendingRequests.add([{cameraId:e,from:t,to:n,count:s,request:i}]),i.subscribe((e=>{this.thumbnails.add(e),this.pendingRequests.remove((e=>e.request===i))})),i};getIntervalState(e,t,n){const s=this.getThumbnail({cameraId:e,from:t,to:n});if(s)return{state:"fulfilled",data:s};this.pendingRequestsByCameraId.filter(e),this.pendingRequestsByStart.filter([Number.NEGATIVE_INFINITY,+n+la]),this.pendingRequestsByEnd.filter([t,Number.POSITIVE_INFINITY]);let r=this.pendingRequests.allFiltered();return this.pendingRequestsByCameraId.filterAll(),this.pendingRequestsByStart.filterAll(),this.pendingRequestsByEnd.filterAll(),r=r.filter((e=>1===e.count?+e.from==+t&&+e.to==+n:Math.abs((+e.to-+e.from)/e.count-(+n-+t))<=1)),r.length?{state:"pending",request:r[0].request}:null}fetchThumbnail(e,t,n){const s=this.getIntervalState(e,t,n);if(null!==s){if("fulfilled"===s.state)return p(s.data);if("pending"===s.state)return s.request.pipe(h((()=>this.getThumbnail({cameraId:e,from:t,to:n}))))}const r=this.api.thumbnails.GetThumbnailInfo({cameraId:e,from:t,to:n}).pipe(d((e=>e.success?p(e.resultItems):f((()=>e.error)))),h((t=>t.filter((e=>e.url)).map(this.toThumbnail(e)))),v());return r.subscribe((e=>{this.thumbnails.add(e),this.pendingRequests.remove((e=>e.request===r))})),this.pendingRequests.add([{cameraId:e,from:t,to:n,count:1,request:r}]),r.pipe(h((()=>this.getThumbnail({cameraId:e,from:t,to:n}))))}getThumbnail({cameraId:e,from:t,to:n}){this.thumbnailsByCameraId.filter(e),this.thumbnailsByDate.filter([+t,+n+(+t==+n?la:0)]);const s=this.thumbnails.allFiltered()[0];return this.thumbnailsByDate.filterAll(),this.thumbnailsByCameraId.filterAll(),s}getThumbnails({cameraId:e,from:t,to:n}){this.thumbnailsByCameraId.filter(e),this.thumbnailsByDate.filter([+t,+n+la]);const s=this.thumbnails.allFiltered();return this.thumbnailsByDate.filterAll(),this.thumbnailsByCameraId.filterAll(),s}toThumbnail=e=>({realtimestamp:t,url:n})=>({cameraId:e,url:n,timestamp:new Date(t)})}const da={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}};var pa,fa,ma={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"}]};!function(e){e[e.CONNECTING=0]="CONNECTING",e[e.CONNECTED=1]="CONNECTED",e[e.RECONNECTING=2]="RECONNECTING",e[e.DISCONNECTED=3]="DISCONNECTED"}(pa||(pa={})),function(e){e[e.INFO=0]="INFO",e[e.WARN=1]="WARN",e[e.ERROR=2]="ERROR"}(fa||(fa={}));class va{static create(e,t,n){return new va(null!==e?e:da,t,n)}connectionShutdown$=new w;connection$=new B(null);events=new w;logLevel=fa.ERROR;authStore;createConnection;apiConfig;constructor(e,t,n){this.apiConfig=e,this.init(),this.createConnection=n,this.authStore=t,i((()=>t.token),(e=>{if(!e)return void this.shutdownConnection();if(e.invalid)return;if(!e.accessToken)return;const t=this.connection$.getValue();t&&t.state!==pa.DISCONNECTED?t.qs.access_token=e.accessToken:this.connect(e)})),this.connection$.pipe(_((e=>null!==e||!t.isAuthenticated||t.token&&t.token.invalid?b:(this.log(fa.WARN,"disconnected by some reason"),E(5e3)))),l((()=>t.isAuthenticated&&!!t.token&&!t.token.invalid))).subscribe((()=>{this.connect(t.token),this.log(fa.WARN,"attempting to reconnect")})),this.connection$.pipe(l(Boolean),O(100)).subscribe(this.subscribeToEvents)}log=(e,...t)=>{if(e<this.logLevel)return;console[["log","warn","error"][e]](...t)};connect(e){if(this.connection$.getValue()&&this.connection$.getValue().state===pa.CONNECTED)return;const{accessToken:t}=e,n=this.createConnection(t);Object.keys(this.apiConfig).forEach((e=>n.createHubProxy(e))),Object.entries(ma).forEach((([e,t])=>{t&&n.proxies[e]&&t.forEach((({name:t})=>{n.proxies[e].on(t,(n=>this.events.next({hub:e,event:t,data:n})))}))})),n.start().done((()=>{this.log(fa.INFO,"connected"),this.connection$.next(n)})).fail((e=>{!e.source||401!==e.source?.status&&403!==e.source?.status&&409!==e.source?.status||this.authStore.invalidateToken(),this.log(fa.ERROR,"connection failed",e)})),n.error((e=>{if(e.source&&(401===e.source.status||403===e.source.status||409===e.source.status))return this.log(fa.WARN,"authentication error, invalidating token"),this.authStore.invalidateToken();this.log(fa.ERROR,"connection error",e)})),n.disconnected((()=>{this.connection$.getValue()?this.log(fa.WARN,"disconnected",this.connection$.getValue().lastError):this.log(fa.WARN,"disconnected. this connection is already null"),this.connection$.next(null)})),n.reconnecting((()=>this.log(fa.WARN,"reconnecting"))),n.reconnected((()=>{this.connection$.getValue()===n&&(this.log(fa.WARN,"reconnected"),this.connection$.next(n))}))}shutdownConnection(){const e=this.connection$.getValue();e&&e.stop(),this.connectionShutdown$.next(null)}init(){for(const[e,t]of Object.entries(this.apiConfig)){this[e]={};for(const n of Object.keys(t))this[e][n]=this.createHubMethod(e,n)}}createHubMethod=(e,t)=>{const n=(...s)=>this.connection$.pipe(l(Boolean),l((e=>e.state===pa.CONNECTED)),A(1)).pipe(d((n=>new Promise(((r,i)=>{n.proxies[e].invoke(t,...s).done((e=>r(e))).fail((e=>i(e)))})))),R((e=>e instanceof Error&&e.message&&("Connection started reconnecting before invocation result was received."===e.message||"Connection was disconnected before invocation result was received."===e.message)?(this.log(fa.WARN,e.message),n(...s)):e instanceof Error&&e.message&&e.message.startsWith("Caller is not authorized to invoke the ")?(this.log(fa.WARN,e.message),this.connection$.getValue().stop(),this.authStore.invalidateToken(),n(...s)):f((()=>e)))),S(this.connectionShutdown$));return n};subscribeToEvents=e=>{Object.entries(ma).forEach((([t,n])=>{n&&e.proxies[t]&&e.state===pa.CONNECTED&&n.filter((({explicit:e})=>e)).forEach((({name:n})=>{e.proxies[t].invoke("SubscribeToEvent",n)}))}))}}class ya{accessToken;accessTokenExpires;accessTokenIssued;clientId;expiresIn;refreshToken;refreshTokenExpires;refreshTokenIssued;tokenType;userName;invalid;widgetId;widgetToken;json;constructor(e){this.json=e,this.accessToken=e.access_token||e.accessToken,this.accessTokenExpires=new Date(e.access_token_expires||e.accessTokenExpires||(this.accessToken?1e3*JSON.parse(atob(this.accessToken.split(".")[1])).exp:0)),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 ga{token=null;isAuthenticating=!1;storage;tokenServiceUrl;tokenStorageKey;deviceInfo;clientId;pendingUpdateTokenRequest=null;get isAuthenticated(){return Boolean(this.token&&!this.isAuthenticating)}constructor({tokenServiceUrl:e,storage:i,tokenStorageKey:a,deviceInfo:c,clientId:h}){t(this,{token:n.ref,isAuthenticating:n,isAuthenticated:r,signOut:s,invalidateToken:s}),this.isAuthenticating=!0,this.storage=i,this.tokenServiceUrl=e,this.tokenStorageKey=a,this.deviceInfo=c,this.clientId=h;const m=function(e,t=!1){const n=r(e);return new j((e=>{const s=u(n,(({newValue:t})=>e.next(t)),t);return()=>s()}))}((()=>this.token)),v=m.pipe(_((e=>{if(null===e)return b;const t=p(e).pipe(d((e=>e.widgetId?this.fetchWidgetToken(e):this.updateToken(e.refreshToken))),y({delay:(e,t)=>e.status&&![500,502,503,504].includes(e.status)?f((()=>e)):E(2**Math.min(t+1,6)*1e3)}));if(!e.invalid){const n=Math.max(.75*(+e.accessTokenExpires-Date.now()),0);return E(n).pipe(d((()=>t)))}return t})),R((e=>(console.error(e),o((()=>this.token=null)),v))));v.subscribe((e=>{o((()=>this.token=e))})),m.pipe(N(null),q(),l((([e,t])=>!!(t||!t&&e))),U((([,e])=>this.storeToken(e)))).subscribe(),this.getInitialToken().then((e=>{o((()=>{this.token=e,this.isAuthenticating=!1}))}))}signOut=()=>{this.isAuthenticating||o((()=>this.token=null))};signIn=e=>{if(this.isAuthenticating)return;o((()=>this.isAuthenticating=!0)),!1===e.agreedWithTerms&&(e={...e,agreedWithTerms:void 0});return this.fetchToken(e).then((e=>(o((()=>{this.token=e,this.isAuthenticating=!1})),e))).catch((e=>{throw o((()=>{this.isAuthenticating=!1})),e}))};signInWithToken=e=>{this.isAuthenticating?console.warn("Attempt to sign in with token while authenticating"):o((()=>{this.token=new ya(e)}))};invalidateToken=()=>{this.token&&o((()=>{this.token={...this.token,invalid:!0}}))};async getTokenFromStorage(){const e=await this.storage.getItem(this.tokenStorageKey);return e?new ya(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,client_id:this.clientId,device:this.deviceInfo,...e},n=new Headers;n.append("Content-Type","application/x-www-form-urlencoded"),n.append("accept","application/json");const s=await fetch(this.tokenServiceUrl,{method:"POST",headers:n,body:new URLSearchParams(t)});try{const e=await s.json();return 200!==s.status?Promise.reject({status:s.status,data:e}):new ya(e)}catch(e){return Promise.reject(s)}}async updateToken(e){try{return this.pendingUpdateTokenRequest&&this.pendingUpdateTokenRequest.refreshToken===e||(this.pendingUpdateTokenRequest={refreshToken:e,request:this.fetchToken({refreshToken:e,refresh_token:e})}),await this.pendingUpdateTokenRequest.request}finally{this.pendingUpdateTokenRequest?.refreshToken===e&&(this.pendingUpdateTokenRequest=null)}}async fetchWidgetToken(e){const{widgetId:t,widgetToken:n}=e;if(!t||!n)throw new Error("token must contain widgetId and widgetToken");const s={widgetId:t,widgetToken:n},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(s)});try{const e=await i.json();return 200!==i.status?Promise.reject({status:i.status,data:e}):new ya({widgetId:t,widgetToken:n,...e})}catch(e){return Promise.reject(i)}}}class ba{notifier;constructor(e){this.notifier=e}error(e){this.notifier.error(e)}success(e,t){this.notifier.success(e,t)}warn(e){this.notifier.warn(e)}}const Ia="default",wa=new Map;class Ta{name;initialized=!1;cameras=new Vt;archives=new Wt(this.cameras);events=new ca(this.cameras);eventSchema=new oa;thumbnails=new ha;account=new Dt;notification=new ba({success:console.log,warn:console.warn,error:console.error});auth;api;disposables=[];tokenUpdateReactions=new Set;constructor(e){this.name=e,t(this,{initialized:n}),this.disposables.push(a((()=>!!this.account.user),(()=>{this.cameras.load()})))}init({clientId:t="WebApp",token:n,tokenStorage:s=new Bt,tokenStorageKey:r,apiUrl:i="https://services.3deye.me/reactiveapi",tokenServiceUrl:a="https://admin.3deye.me/webapi/v3/auth/token"},u=Ia){return r||(r=`@3deye-toolkit/${u}/token`),wa.has(u)?(console.warn("Can`t init two apps with the same name"),wa.get(u)):this.auth&&u===this.name?(console.warn("Can`t init already inited app"),this):this.auth||this.name===Ia&&u!==Ia?new Ta(u).init({token:n,tokenStorage:s,tokenStorageKey:r,apiUrl:i,tokenServiceUrl:a},u):(t=n&&"clientId"in n?n.clientId:t,n&&s.setItem(r,JSON.stringify(n)),this.auth=new ga({tokenServiceUrl:a,tokenStorageKey:r,storage:s,clientId:t,deviceInfo:null}),this.api=va.create(da,this.auth,(t=>e(i,{qs:{access_token:t}}))),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),o((()=>{this.initialized=!0})),wa.set(u,this),this)}dispose=()=>{for(const e of this.disposables)e instanceof c?e.closed||e.unsubscribe():e();for(const e of this.tokenUpdateReactions)e();this.tokenUpdateReactions.clear(),this.auth.signOut(),this.cameras.dispose(),this.events.dispose(),this.thumbnails.dispose(),this.eventSchema.dispose(),this.account.dispose(),wa.delete(this.name)};onTokenUpdate=e=>{if(!this.auth)throw new Error("app has to be inited first");const t=i((()=>this.auth.token),(t=>e(t?.json||null)));return this.tokenUpdateReactions.add(t),()=>{t(),this.tokenUpdateReactions.delete(t)}}}var ka=new Ta(Ia);var Sa=x.createContext(null);export{Sa as AppContext,ka as app};
|
package/dist/tsdoc-metadata.json
CHANGED
package/package.json
CHANGED
|
@@ -1,23 +1,18 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@3deye-toolkit/core",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.5",
|
|
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
|
-
"@react-spring/web": "^9.7.3",
|
|
11
|
-
"backoff-rxjs": "^7.0.0",
|
|
12
10
|
"crossfilter2": "^1.5.4",
|
|
13
|
-
"http-status-codes": "^2.2.0",
|
|
14
|
-
"i18next": "23.5.1",
|
|
15
11
|
"jqueryless-signalr": "1.0.0",
|
|
16
12
|
"lodash": "4.17.21",
|
|
17
13
|
"mobx": "^6.10.2",
|
|
18
14
|
"rxjs": "^7.8.1",
|
|
19
15
|
"string-natural-compare": "^3.0.1",
|
|
20
|
-
"transformation-matrix": "^2.15.0",
|
|
21
16
|
"zod": "^3.22.2"
|
|
22
17
|
},
|
|
23
18
|
"peerDependencies": {
|