@3deye-toolkit/core 0.0.3 → 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 CHANGED
@@ -12,6 +12,7 @@ declare class AccountStore extends ApiStore {
12
12
  user: User | null;
13
13
  auth: Auth;
14
14
  constructor(notification?: NotificationService | undefined);
15
+ get isSharingUserAccount(): boolean;
15
16
  get userDisplayName(): string | null;
16
17
  protected afterInit(): void;
17
18
  loadUser$(): Observable<RawUser | null>;
@@ -29,34 +30,7 @@ declare class AccountStore extends ApiStore {
29
30
  updateCustomPreferences: (preferences: Partial<Preferences>) => Observable<RawUser>;
30
31
  setDefaultGroup(groupId: number): Observable<RawUser> | undefined;
31
32
  get preferences(): Preferences;
32
- getPreference: <T extends PREFERENCES>(key: T) => {
33
- utc: boolean;
34
- hour12: boolean;
35
- startOfWeek: "monday" | "sunday";
36
- defaultVideoResizeMode?: VideoResizeMode | undefined;
37
- camerasResizeMode?: [number, VideoResizeMode][] | undefined;
38
- fisheyeCameras?: [number, [number, number, number] | {
39
- params: {
40
- x: number;
41
- y: number;
42
- r: number;
43
- s: number;
44
- };
45
- positions?: [{
46
- lat: number;
47
- lon: number;
48
- fov: number;
49
- }, {
50
- lat: number;
51
- lon: number;
52
- fov: number;
53
- }, {
54
- lat: number;
55
- lon: number;
56
- fov: number;
57
- }] | undefined;
58
- } | null][] | undefined;
59
- }[T];
33
+ getPreference: <T extends keyof Preferences>(key: T) => Preferences[T];
60
34
  private retryOnVersionMismatch;
61
35
  }
62
36
 
@@ -70,11 +44,12 @@ declare class Api<T extends DeepPartial<IApi>> {
70
44
  event: string;
71
45
  data: any;
72
46
  }>;
73
- logging: boolean;
47
+ logLevel: LOG_LEVEL;
74
48
  authStore: Auth;
75
49
  createConnection: (accessToken: string) => Connection;
76
50
  apiConfig: PartialApi;
77
51
  constructor(apiConfig: T, authStore: Auth, createConnection: (accessToken: string) => Connection);
52
+ log: (level: LOG_LEVEL, ...args: unknown[]) => void;
78
53
  connect(token: Token): void;
79
54
  shutdownConnection(): void;
80
55
  private init;
@@ -113,6 +88,18 @@ declare abstract class ApiStore {
113
88
  dispose(): void;
114
89
  }
115
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
+
116
103
  /**
117
104
  * @alpha
118
105
  */
@@ -262,7 +249,7 @@ declare class Camera {
262
249
  get supportsWebRTC(): boolean;
263
250
  constructor(raw: RawCamera);
264
251
  update: (raw: RawCamera) => void;
265
- can: (permission: CameraPermissions) => number;
252
+ can: (permission: CameraPermissions) => boolean;
266
253
  }
267
254
 
268
255
  declare interface CameraAddress {
@@ -355,44 +342,6 @@ declare interface ChunksQuery {
355
342
  to: Date;
356
343
  }
357
344
 
358
- declare class Clip {
359
- id: number;
360
- cameraId: number;
361
- name: string;
362
- startTime: Date;
363
- endTime: Date;
364
- type: 'Archive' | 'Timelaps' | 'Timelaps to do';
365
- createdAt: Date;
366
- /**
367
- * clip duration in seconds
368
- */
369
- duration: number;
370
- chunks: ArchiveChunk[];
371
- clipUrl?: string;
372
- description: string;
373
- version: string;
374
- raw: RawClip;
375
- isDownloading: boolean;
376
- archives?: ArchiveChunk[];
377
- constructor(raw: RawClip);
378
- get isTimelapse(): boolean;
379
- update(raw: RawClip): void;
380
- }
381
-
382
- declare interface ClipParams {
383
- cameraId: number;
384
- startTime: Date;
385
- endTime: Date;
386
- name: string;
387
- description?: string;
388
- }
389
-
390
- declare interface ClipsQuery {
391
- cameraId: number;
392
- from: Date;
393
- to: Date;
394
- }
395
-
396
345
  declare interface Connection {
397
346
  state: CONNECTION_STATE;
398
347
  stop: () => void;
@@ -406,7 +355,7 @@ declare interface Connection {
406
355
  proxies: {
407
356
  [P in keyof typeof FULL_API_CONFIG]: {
408
357
  on: (eventName: string, callback: (data: any) => void) => void;
409
- invoke: any;
358
+ invoke: (...params: unknown[]) => any;
410
359
  };
411
360
  };
412
361
  createHubProxy: (hubName: string) => void;
@@ -437,8 +386,8 @@ declare type DetectedObject = Car | LicensePlate | {
437
386
  };
438
387
 
439
388
  declare interface DetectedObjectOption {
440
- id: string;
441
- name: string;
389
+ value: string;
390
+ label: string;
442
391
  color: string;
443
392
  highlightColor: string;
444
393
  type: 'detectedObject';
@@ -481,7 +430,6 @@ declare class EventsStore extends ApiStore {
481
430
  eventsByType: crossfilter.Dimension<CameraEvent, EventType>;
482
431
  eventsByFoundObjects: crossfilter.Dimension<CameraEvent, string>;
483
432
  eventsByColor: crossfilter.Dimension<CameraEvent, string>;
484
- eventsByLiveliness: crossfilter.Dimension<CameraEvent, boolean>;
485
433
  pendingRequests: crossfilter.Crossfilter<PendingRequest>;
486
434
  pendingRequestsByEnd: crossfilter.Dimension<PendingRequest, number>;
487
435
  pendingRequestsByStart: crossfilter.Dimension<PendingRequest, number>;
@@ -492,6 +440,7 @@ declare class EventsStore extends ApiStore {
492
440
  knownIntervalsByEnd: crossfilter.Dimension<Interval, number>;
493
441
  eventsById: Map<number, CameraEvent>;
494
442
  updates: number;
443
+ updatesByCameraId: Map<number, number>;
495
444
  /**
496
445
  * Contains recent additions to the store as list of event ids
497
446
  * NOTE: do not update several times in single action as we lose info about intermediate additions that way
@@ -526,6 +475,7 @@ declare class EventsStore extends ApiStore {
526
475
  misc: boolean;
527
476
  };
528
477
  }): CameraEvent;
478
+ getRunningEvent(cameraId: number): CameraEvent | undefined;
529
479
  getFirstNonAnalyticEventAfter({ cameraId, date }: {
530
480
  cameraId: number;
531
481
  date: Date;
@@ -638,7 +588,7 @@ declare interface IApi {
638
588
  UpdateCamgroup: (params: any) => Observable<ApiResult<RawCamgroup>>;
639
589
  };
640
590
  sound: {
641
- GetPushSoundServiceUrl: (id: number) => Observable<any>;
591
+ GetPushSoundServiceUrl: (id: number) => Observable<ApiResult<string>>;
642
592
  };
643
593
  thumbnails: {
644
594
  GetThumbnailsInfo: (params: {
@@ -670,6 +620,7 @@ declare interface InitParams {
670
620
  widgetId: string;
671
621
  widgetToken: string;
672
622
  };
623
+ clientId?: string;
673
624
  tokenStorage?: Storage_2;
674
625
  tokenStorageKey?: string;
675
626
  apiUrl?: string;
@@ -690,51 +641,20 @@ declare type IntervalState = {
690
641
  request: Observable<Thumbnail[]>;
691
642
  };
692
643
 
693
- declare class LibraryStore extends ApiStore {
694
- private notification?;
695
- data: crossfilter.Crossfilter<Clip>;
696
- clipsByCameraId: crossfilter.Dimension<Clip, number>;
697
- clipsByCreationDate: crossfilter.Dimension<Clip, number>;
698
- clipsByStart: crossfilter.Dimension<Clip, number>;
699
- clipsByEnd: crossfilter.Dimension<Clip, number>;
700
- clipsByType: crossfilter.Dimension<Clip, string>;
701
- clipsById: crossfilter.Dimension<Clip, number>;
702
- clipsMap: Map<number, Clip>;
703
- loaded: boolean;
704
- loading: boolean;
705
- updates: number;
706
- constructor(notification?: NotificationService | undefined);
707
- /**
708
- * Fetches all clips from the server and updates the store
709
- */
710
- fetch(): Observable<Clip[]>;
711
- add: (clips: Clip[]) => void;
712
- addOrUpdate: (clips: Clip[]) => void;
713
- removeFromStore: (clips: {
714
- id: number;
715
- }[]) => void;
716
- getClips({ cameraId, from, to }: ClipsQuery): Clip[];
717
- getTimelapses(): Clip[];
718
- getRecentlyAdded(): Clip[];
719
- all(): Clip[];
720
- getOnly(type: 'clips' | 'timelapses' | null, sortDirection?: 'asc' | 'desc'): Clip[];
721
- createClip: (data: ClipParams) => void;
722
- createTimelapse: (data: TimelapseParams) => void;
723
- rename(clip: Clip, name: string): void;
724
- delete(clip: Clip): void;
725
- protected afterInit(): void;
726
- dispose(): void;
727
- }
728
-
729
644
  declare interface LicensePlate {
730
645
  Type: 'LicensePlate';
731
646
  Value: string;
732
- Number: string;
733
647
  ParentIndex: number;
734
648
  Box: BoundingBox;
735
649
  Probability: number;
736
650
  }
737
651
 
652
+ declare enum LOG_LEVEL {
653
+ INFO = 0,
654
+ WARN = 1,
655
+ ERROR = 2
656
+ }
657
+
738
658
  declare interface NotificationOptions_2 {
739
659
  duration: number;
740
660
  }
@@ -796,20 +716,11 @@ declare interface PendingRequest_2 {
796
716
  request: Observable<Thumbnail[]>;
797
717
  }
798
718
 
799
- declare enum PREFERENCES {
800
- DEFAULT_VIDEO_RESIZE_MODE = "defaultVideoResizeMode",
801
- RESIZE_MODE_PER_CAMERA = "camerasResizeMode",
802
- FISHEYE_CAMERAS = "fisheyeCameras",
803
- UTC = "utc",
804
- HOUR12 = "hour12",
805
- START_OF_WEEK = "startOfWeek"
806
- }
807
-
808
719
  declare type Preferences = z.infer<typeof preferencesSchema>;
809
720
 
810
721
  declare const preferencesSchema: z.ZodObject<{
811
- defaultVideoResizeMode: z.ZodOptional<z.ZodNativeEnum<typeof VideoResizeMode>>;
812
- camerasResizeMode: z.ZodOptional<z.ZodArray<z.ZodTuple<[z.ZodNumber, z.ZodNativeEnum<typeof VideoResizeMode>], null>, "many">>;
722
+ defaultVideoResizeMode: z.ZodOptional<z.ZodEnum<["fill", "contain"]>>;
723
+ camerasResizeMode: z.ZodOptional<z.ZodArray<z.ZodTuple<[z.ZodNumber, z.ZodEnum<["fill", "contain"]>], null>, "many">>;
813
724
  fisheyeCameras: z.ZodOptional<z.ZodArray<z.ZodTuple<[z.ZodNumber, z.ZodUnion<[z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>, z.ZodObject<{
814
725
  params: z.ZodObject<{
815
726
  x: z.ZodNumber;
@@ -819,13 +730,13 @@ declare const preferencesSchema: z.ZodObject<{
819
730
  }, "strip", z.ZodTypeAny, {
820
731
  x: number;
821
732
  y: number;
822
- r: number;
823
733
  s: number;
734
+ r: number;
824
735
  }, {
825
736
  x: number;
826
737
  y: number;
827
- r: number;
828
738
  s: number;
739
+ r: number;
829
740
  }>;
830
741
  positions: z.ZodOptional<z.ZodTuple<[z.ZodObject<{
831
742
  lat: z.ZodNumber;
@@ -868,8 +779,8 @@ declare const preferencesSchema: z.ZodObject<{
868
779
  params: {
869
780
  x: number;
870
781
  y: number;
871
- r: number;
872
782
  s: number;
783
+ r: number;
873
784
  };
874
785
  positions?: [{
875
786
  lat: number;
@@ -888,8 +799,8 @@ declare const preferencesSchema: z.ZodObject<{
888
799
  params: {
889
800
  x: number;
890
801
  y: number;
891
- r: number;
892
802
  s: number;
803
+ r: number;
893
804
  };
894
805
  positions?: [{
895
806
  lat: number;
@@ -912,14 +823,14 @@ declare const preferencesSchema: z.ZodObject<{
912
823
  utc: boolean;
913
824
  hour12: boolean;
914
825
  startOfWeek: "monday" | "sunday";
915
- defaultVideoResizeMode?: VideoResizeMode | undefined;
916
- camerasResizeMode?: [number, VideoResizeMode][] | undefined;
917
- fisheyeCameras?: [number, [number, number, number] | {
826
+ defaultVideoResizeMode?: "contain" | "fill" | undefined;
827
+ camerasResizeMode?: [number, "contain" | "fill"][] | undefined;
828
+ fisheyeCameras?: [number, {
918
829
  params: {
919
830
  x: number;
920
831
  y: number;
921
- r: number;
922
832
  s: number;
833
+ r: number;
923
834
  };
924
835
  positions?: [{
925
836
  lat: number;
@@ -934,16 +845,16 @@ declare const preferencesSchema: z.ZodObject<{
934
845
  lon: number;
935
846
  fov: number;
936
847
  }] | undefined;
937
- } | null][] | undefined;
848
+ } | [number, number, number] | null][] | undefined;
938
849
  }, {
939
- defaultVideoResizeMode?: VideoResizeMode | undefined;
940
- camerasResizeMode?: [number, VideoResizeMode][] | undefined;
941
- fisheyeCameras?: [number, [number, number, number] | {
850
+ defaultVideoResizeMode?: "contain" | "fill" | undefined;
851
+ camerasResizeMode?: [number, "contain" | "fill"][] | undefined;
852
+ fisheyeCameras?: [number, {
942
853
  params: {
943
854
  x: number;
944
855
  y: number;
945
- r: number;
946
856
  s: number;
857
+ r: number;
947
858
  };
948
859
  positions?: [{
949
860
  lat: number;
@@ -958,7 +869,7 @@ declare const preferencesSchema: z.ZodObject<{
958
869
  lon: number;
959
870
  fov: number;
960
871
  }] | undefined;
961
- } | null][] | undefined;
872
+ } | [number, number, number] | null][] | undefined;
962
873
  utc?: boolean | undefined;
963
874
  hour12?: boolean | undefined;
964
875
  startOfWeek?: "monday" | "sunday" | undefined;
@@ -1189,21 +1100,21 @@ declare interface SensorEventsRequest {
1189
1100
  }
1190
1101
 
1191
1102
  declare enum SensorEventType {
1192
- Motion = 0,
1193
- Tampering = 1,
1194
- PanTiltZoom = 2,
1195
- CrossLine = 3,
1196
- Intrusion = 4,
1197
- LicensePlate = 5,
1198
- FaceDetection = 6,
1199
- Audio = 7,
1200
- Analytic = 8,
1201
- SpeedDetection = 9,
1202
- PeopleCounter = 10,
1203
- Temperature = 11,
1204
- PoS = 12,
1205
- GPS = 13,
1206
- DigitalInput = 14,
1103
+ Motion = 0,// Has duration
1104
+ Tampering = 1,// Has duration
1105
+ PanTiltZoom = 2,// Has duration
1106
+ CrossLine = 3,// Has duration
1107
+ Intrusion = 4,// Has duration
1108
+ LicensePlate = 5,// Instant
1109
+ FaceDetection = 6,// Instant
1110
+ Audio = 7,// Has duration
1111
+ Analytic = 8,// Instant, has data
1112
+ SpeedDetection = 9,// Instant, has data
1113
+ PeopleCounter = 10,// Instant, has data
1114
+ Temperature = 11,// Instant, has data
1115
+ PoS = 12,// Instant, ? has data. Point of Sale transaction event
1116
+ GPS = 13,// Instant, has data. GPS coordinates event
1117
+ DigitalInput = 14,// Instant
1207
1118
  Normal = 15,
1208
1119
  Suspicious = 16,
1209
1120
  Loitering = 17,
@@ -1285,10 +1196,6 @@ declare class ThumbnailsStore extends ApiStore {
1285
1196
  }) => Thumbnail;
1286
1197
  }
1287
1198
 
1288
- declare type TimelapseParams = ClipParams & {
1289
- duration: number;
1290
- };
1291
-
1292
1199
  declare class Token {
1293
1200
  accessToken: string;
1294
1201
  accessTokenExpires: Date;
@@ -1307,7 +1214,7 @@ declare class Token {
1307
1214
  constructor(raw: RawToken);
1308
1215
  }
1309
1216
 
1310
- declare class ToolkitApp {
1217
+ declare class ToolkitApp implements App {
1311
1218
  readonly name: string;
1312
1219
  initialized: boolean;
1313
1220
  cameras: CamerasStore;
@@ -1317,13 +1224,12 @@ declare class ToolkitApp {
1317
1224
  thumbnails: ThumbnailsStore;
1318
1225
  account: AccountStore;
1319
1226
  notification: NotificationService;
1320
- library: LibraryStore;
1321
1227
  auth: Auth;
1322
1228
  api: Api<IApi> & IApi;
1323
1229
  private disposables;
1324
1230
  private tokenUpdateReactions;
1325
1231
  constructor(name: string);
1326
- init({ token, tokenStorage: storage, tokenStorageKey, apiUrl, tokenServiceUrl }: InitParams, name?: string): ToolkitApp;
1232
+ init({ clientId, token, tokenStorage: storage, tokenStorageKey, apiUrl, tokenServiceUrl }: InitParams, name?: string): ToolkitApp;
1327
1233
  dispose: () => void;
1328
1234
  /**
1329
1235
  * Adds a reaction to token changes
@@ -1336,9 +1242,4 @@ declare class ToolkitApp {
1336
1242
 
1337
1243
  declare type User = RawUser;
1338
1244
 
1339
- declare enum VideoResizeMode {
1340
- Fit = "contain",
1341
- Stretch = "fill"
1342
- }
1343
-
1344
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 P,pairwise as I,concatMap as A,Subscription as k,shareReplay as T,skip as S,exhaustMap as B,map as C}from"rxjs";import E from"jqueryless-signalr";import{StatusCodes as _}from"http-status-codes";import{mergeMap as R,shareReplay as D,retry as U,filter as q,map as M,tap as x,expand as N,last as F,share as z}from"rxjs/operators";import{z as L}from"zod";import"backoff-rxjs";import G from"crossfilter2";import W from"string-natural-compare";import $ from"i18next";import V from"react";const H={archives:{PopulateArchive:null,GetArchives:null,GetClips:null,UpdateClip:null,DeleteClip:null,SaveClip:null,SaveTimelaps:null,SaveArchive:null,DeleteArchive:null,ShareClip:null,GetSharedClips:null,UpdateSharedClip:null,DeleteSharedClip:null},cameras:{GetCameras:null,UpdateCamera:null,GetSensorDataSchema:null,GetSensorEvents:null,GetSensorEventsPage:null,GetLicensePlateLookUp:null,GetSensorEventsLprPage:null,GetPeopleCountingData:null,AddUserSensorEvent:null,AcknowledgeSensorEvent:null,MoveCamera:null,MoveCameraContinuousStart:null,MoveCameraContinuousStop:null,GoHomePtzCamera:null,SetHomePtzCamera:null},camgroups:{GetCamgroups:null,DeleteCamgroup:null,AddCamgroup:null,UpdateCamgroup:null},sound:{GetPushSoundServiceUrl:null},thumbnails:{GetThumbnailsInfo:null,GetThumbnailInfo:null,GetHeatMapsInfo:null},users:{GetUser:null,UserUpdateProfile:null}},K={cameras:[{name:"OnCameraMotionEvent",explicit:!0},{name:"OnCameraAdded"},{name:"OnCameraUpdated"},{name:"OnSystemCameraUpdated"},{name:"OnCameraDeleted"}],users:[{name:"OnUserUpdateProfile"}],camgroups:[{name:"OnAdd"},{name:"OnUpdate"},{name:"OnDelete"}],archives:[{name:"OnTimelapsAdded"},{name:"OnClipAdded"},{name:"OnClipUpdated"},{name:"OnClipDeleted"},{name:"OnArchiveAdded"},{name:"OnArchiveUpdated"},{name:"OnArchiveDeleted"},{name:"OnArchiveRecordCreated"}]};var J,Z,Y,Q;!function(e){e[e.CONNECTING=0]="CONNECTING",e[e.CONNECTED=1]="CONNECTED",e[e.RECONNECTING=2]="RECONNECTING",e[e.DISCONNECTED=3]="DISCONNECTED"}(J||(J={}));class X{static create(e,t,r){return new X(null!==e?e:H,t,r)}constructor(t,r,i){Object.defineProperty(this,"connectionShutdown$",{enumerable:!0,configurable:!0,writable:!0,value:new l}),Object.defineProperty(this,"connection$",{enumerable:!0,configurable:!0,writable:!0,value:new u(null)}),Object.defineProperty(this,"events",{enumerable:!0,configurable:!0,writable:!0,value:new l}),Object.defineProperty(this,"logging",{enumerable:!0,configurable:!0,writable:!0,value:!1}),Object.defineProperty(this,"authStore",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"createConnection",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"apiConfig",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.apiConfig=t,this.init(),this.createConnection=i,this.authStore=r,e((()=>r.token),(e=>{if(!e)return void this.shutdownConnection();if(e.invalid)return;if(!e.accessToken)return;const t=this.connection$.getValue();t&&t.state!==J.DISCONNECTED?t.qs.access_token=e.accessToken:this.connect(e)})),this.connection$.pipe(c((e=>null!==e||!r.isAuthenticated||r.token&&r.token.invalid?d:(this.logging&&console.warn("disconnected by some reason"),h(5e3)))),f((()=>r.isAuthenticated&&!!r.token&&!r.token.invalid))).subscribe((()=>{this.connect(r.token),this.logging&&console.warn("attempting to reconnect")})),this.connection$.pipe(f(Boolean),b(100)).subscribe(this.subscribeToEvents)}connect(e){if(this.connection$.getValue()&&this.connection$.getValue().state===J.CONNECTED)return;const{accessToken:t}=e,r=this.createConnection(t);Object.keys(this.apiConfig).forEach((e=>r.createHubProxy(e))),Object.entries(K).forEach((([e,t])=>{t&&r.proxies[e]&&t.forEach((({name:t})=>{r.proxies[e].on(t,(r=>this.events.next({hub:e,event:t,data:r})))}))})),r.start().done((()=>{this.logging&&console.warn("connected"),this.connection$.next(r)})).fail((e=>{var t,r,i;401!==(null===(t=e.source)||void 0===t?void 0:t.status)&&403!==(null===(r=e.source)||void 0===r?void 0:r.status)&&409!==(null===(i=e.source)||void 0===i?void 0:i.status)||this.authStore.invalidateToken()})),r.error((e=>{if(e.source&&(401===e.source.status||403===e.source.status||409===e.source.status))return this.logging&&console.warn("authentication error, invalidating token"),this.authStore.invalidateToken()})),r.disconnected((()=>{this.connection$.getValue()?this.logging&&console.warn("disconnected",this.connection$.getValue().lastError):this.logging&&console.warn("disconnected. this connection is already null"),this.connection$.next(null)})),r.reconnecting((()=>console.log("reconnecting"))),r.reconnected((()=>{this.connection$.getValue()===r&&(this.logging&&console.warn("reconnected"),this.connection$.next(r))}))}shutdownConnection(){const e=this.connection$.getValue();e&&e.stop(),this.connectionShutdown$.next(null)}init(){Object.keys(this.apiConfig).forEach((e=>{this[e]={},Object.keys(this.apiConfig[e]).forEach((t=>{this[e][t]=this.createHubMethod(e,t)}))}))}createHubMethod(e,t){const r=this;return function i(...n){return r.connection$.pipe(f(Boolean),f((e=>e.state===J.CONNECTED)),p(1)).pipe(v((r=>new Promise(((i,a)=>{r.proxies[e].invoke(t,...n).done((e=>i(e))).fail((e=>a(e)))})))),m((e=>!e.message||"Connection started reconnecting before invocation result was received."!==e.message&&"Connection was disconnected before invocation result was received."!==e.message?e.message&&e.message.startsWith("Caller is not authorized to invoke the ")?(console.warn(e.message),r.connection$.getValue().stop(),r.authStore.invalidateToken(),i(...n)):y(e):(console.warn(e.message),i(...n)))),g(r.connectionShutdown$))}}subscribeToEvents(e){Object.entries(K).forEach((([t,r])=>{r&&e.proxies[t]&&e.state===J.CONNECTED&&r.filter((({explicit:e})=>e)).forEach((({name:r})=>{e.proxies[t].invoke("SubscribeToEvent",r)}))}))}}class ee{constructor(e){Object.defineProperty(this,"accessToken",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"accessTokenExpires",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"accessTokenIssued",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"clientId",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"expiresIn",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"refreshToken",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"refreshTokenExpires",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"refreshTokenIssued",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"tokenType",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"userName",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"invalid",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"widgetId",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"widgetToken",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"json",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.json=e,this.accessToken=e.access_token||e.accessToken,this.accessTokenExpires=new Date(e.access_token_expires||e.accessTokenExpires),this.accessTokenIssued=new Date(e.access_token_issued||e.accessTokenIssued),this.clientId=e.client_id||e.clientId,this.expiresIn=e.expires_in||e.expiresIn,this.refreshToken=e.refresh_token||e.refreshToken,this.refreshTokenExpires=new Date(e.refresh_token_expires||e.refreshTokenExpires),this.refreshTokenIssued=new Date(e.refresh_token_issued||e.refreshTokenIssued),this.tokenType=e.token_type||e.tokenType,this.userName=e.userName,this.widgetId=e.widgetId,this.widgetToken=e.widgetToken,this.invalid=!1}}class te{get isAuthenticated(){return Boolean(this.token&&!this.isAuthenticating)}constructor({tokenServiceUrl:e,storage:o,tokenStorageKey:l,deviceInfo:u,clientId:b}){Object.defineProperty(this,"token",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"isAuthenticating",{enumerable:!0,configurable:!0,writable:!0,value:!1}),Object.defineProperty(this,"storage",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"tokenServiceUrl",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"tokenStorageKey",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"deviceInfo",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"clientId",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"pendingUpdateTokenRequest",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"signOut",{enumerable:!0,configurable:!0,writable:!0,value:()=>{this.isAuthenticating||i((()=>this.token=null))}}),Object.defineProperty(this,"signIn",{enumerable:!0,configurable:!0,writable:!0,value:e=>{if(this.isAuthenticating)return;i((()=>this.isAuthenticating=!0)),!1===e.agreedWithTerms&&(e={...e,agreedWithTerms:void 0});return this.fetchToken(e).then((e=>(i((()=>{this.token=e,this.isAuthenticating=!1})),e))).catch((e=>{throw i((()=>{this.isAuthenticating=!1})),e}))}}),Object.defineProperty(this,"signInWithToken",{enumerable:!0,configurable:!0,writable:!0,value:e=>{this.isAuthenticating?console.warn("Attempt to sign in with token while authenticating"):i((()=>{this.token=new ee(e)}))}}),Object.defineProperty(this,"invalidateToken",{enumerable:!0,configurable:!0,writable:!0,value:()=>{this.token&&i((()=>{this.token={...this.token,invalid:!0}}))}}),n(this,{token:a.ref,isAuthenticating:a,isAuthenticated:t,signOut:s,invalidateToken:s}),this.isAuthenticating=!0,this.storage=o,this.tokenServiceUrl=e,this.tokenStorageKey=l,this.deviceInfo=u,this.clientId=b;const p=function(e,i=!1){const n=t(e);return new w((e=>{const t=r(n,(({newValue:t})=>e.next(t)),i);return()=>t()}))}((()=>this.token)),g=p.pipe(c((e=>{if(null===e)return d;const t=O(e).pipe(v((e=>e.widgetId?this.fetchWidgetToken(e):this.updateToken(e.refreshToken))),j({delay:(e,t)=>e.status&&![500,502,503,504].includes(e.status)?y((()=>e)):h(2**Math.min(t+1,6)*1e3)}));if(!e.invalid){const r=Math.max(.75*(+e.accessTokenExpires-Date.now()),0);return h(r).pipe(v((()=>t)))}return t})),m((e=>(console.error(e),i((()=>this.token=null)),g))));g.subscribe((e=>{i((()=>this.token=e))})),p.pipe(P(null),I(),f((([e,t])=>!!(t||!t&&e))),A((([,e])=>this.storeToken(e)))).subscribe(),this.getInitialToken().then((e=>{i((()=>{this.token=e,this.isAuthenticating=!1}))}))}async getTokenFromStorage(){const e=await this.storage.getItem(this.tokenStorageKey);return e?new ee(JSON.parse(e)):null}async storeToken(e){return!e||e.invalid?this.storage.removeItem(this.tokenStorageKey):this.storage.setItem(this.tokenStorageKey,JSON.stringify(e.json))}async getInitialToken(){const e=await this.getTokenFromStorage();return e||null}async fetchToken(e){const t={clientId:this.clientId,device:this.deviceInfo,...e},r=new Headers;r.append("Content-Type","application/json"),r.append("accept","application/json");const i=await fetch(this.tokenServiceUrl,{method:"POST",headers:r,body:JSON.stringify(t)});try{const e=await i.json();return 200!==i.status?Promise.reject({status:i.status,data:e}):new ee(e)}catch(e){return Promise.reject(i)}}async updateToken(e){var t;try{return this.pendingUpdateTokenRequest&&this.pendingUpdateTokenRequest.refreshToken===e||(this.pendingUpdateTokenRequest={refreshToken:e,request:this.fetchToken({refreshToken:e})}),await this.pendingUpdateTokenRequest.request}finally{(null===(t=this.pendingUpdateTokenRequest)||void 0===t?void 0:t.refreshToken)===e&&(this.pendingUpdateTokenRequest=null)}}async fetchWidgetToken(e){const{widgetId:t,widgetToken:r}=e;if(!t||!r)throw new Error("token must contain widgetId and widgetToken");const i={widgetId:t,widgetToken:r},n=new Headers;n.append("Content-Type","application/json"),n.append("accept","application/json");const a=await fetch(this.tokenServiceUrl,{method:"POST",headers:n,body:JSON.stringify(i)});try{const e=await a.json();return 200!==a.status?Promise.reject({status:a.status,data:e}):new ee({widgetId:t,widgetToken:r,...e})}catch(e){return Promise.reject(a)}}}!function(e){e[e.Motion=0]="Motion",e[e.Tampering=1]="Tampering",e[e.PanTiltZoom=2]="PanTiltZoom",e[e.CrossLine=3]="CrossLine",e[e.Intrusion=4]="Intrusion",e[e.LicensePlate=5]="LicensePlate",e[e.FaceDetection=6]="FaceDetection",e[e.Audio=7]="Audio",e[e.Analytic=8]="Analytic",e[e.SpeedDetection=9]="SpeedDetection",e[e.PeopleCounter=10]="PeopleCounter",e[e.Temperature=11]="Temperature",e[e.PoS=12]="PoS",e[e.GPS=13]="GPS",e[e.DigitalInput=14]="DigitalInput",e[e.Normal=15]="Normal",e[e.Suspicious=16]="Suspicious",e[e.Loitering=17]="Loitering",e[e.Vandalism=18]="Vandalism",e[e.Trespass=19]="Trespass",e[e.Emergency=20]="Emergency",e[e.LifeInDanger=21]="LifeInDanger",e[e.ErroneousAlert=22]="ErroneousAlert",e[e.Misidentification=23]="Misidentification",e[e.Fire=24]="Fire",e[e.MedicalDuress=25]="MedicalDuress",e[e.HoldUp=26]="HoldUp",e[e.CheckIn=27]="CheckIn",e[e.CheckOut=28]="CheckOut",e[e.ClockIn=29]="ClockIn",e[e.ClockOut=30]="ClockOut",e[e.ParkingStart=31]="ParkingStart",e[e.ParkingEnd=32]="ParkingEnd",e[e.ParkingViolation=33]="ParkingViolation",e[e.GateAccess=34]="GateAccess",e[e.DoorAccess=35]="DoorAccess",e[e.TemperatureCheck=36]="TemperatureCheck",e[e.IDCheck=37]="IDCheck",e[e.PPECheck=38]="PPECheck",e[e.WelfareCheck=39]="WelfareCheck",e[e.VehicleBreakIn=40]="VehicleBreakIn",e[e.DrugTrafficking=41]="DrugTrafficking",e[e.Assault=42]="Assault",e[e.PackageDelivery=43]="PackageDelivery",e[e.Uncategorized=999]="Uncategorized"}(Z||(Z={}));class re{constructor(){Object.defineProperty(this,"values",{enumerable:!0,configurable:!0,writable:!0,value:new Map})}getItem(e){return this.values.get(e)||null}setItem(e,t){this.values.set(e,t)}removeItem(e){this.values.delete(e)}}class ie{constructor(){Object.defineProperty(this,"api",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"disposables",{enumerable:!0,configurable:!0,writable:!0,value:[]})}initWith(e){this.api=e,this.afterInit&&this.afterInit()}dispose(){this.disposables.forEach((e=>{e instanceof k?e.closed||e.unsubscribe():e()}))}}!function(e){e.Initial="initial",e.InitiallyPaused="initially-paused",e.Playing="playing",e.Paused="paused",e.Reconnecting="reconnecting",e.Stalled="stalled",e.Error="error",e.Failed="failed"}(Y||(Y={})),function(e){e.Fit="contain",e.Stretch="fill"}(Q||(Q={}));const ne=L.object({lat:L.number(),lon:L.number(),fov:L.number()});var ae,se;!function(e){e.Ceiling="ceiling",e.Wall="wall"}(ae||(ae={})),function(e){e.DEFAULT_VIDEO_RESIZE_MODE="defaultVideoResizeMode",e.RESIZE_MODE_PER_CAMERA="camerasResizeMode",e.FISHEYE_CAMERAS="fisheyeCameras",e.UTC="utc",e.HOUR12="hour12",e.START_OF_WEEK="startOfWeek"}(se||(se={}));const oe=L.nativeEnum(Q),le=L.object({params:L.object({x:L.number(),y:L.number(),r:L.number(),s:L.number()}),positions:L.tuple([ne,ne,ne]).optional()}),ue=L.tuple([L.number(),L.number(),L.number()]),ce=L.object({[se.DEFAULT_VIDEO_RESIZE_MODE]:oe.optional(),[se.RESIZE_MODE_PER_CAMERA]:L.array(L.tuple([L.number(),oe])).optional(),[se.FISHEYE_CAMERAS]:L.array(L.tuple([L.number(),L.union([ue,le,L.null()])])).optional(),[se.UTC]:L.boolean().default(!1),[se.HOUR12]:L.boolean().default(!1),[se.START_OF_WEEK]:L.enum(["monday","sunday"]).default("monday")});class de extends ie{constructor(e){super(),Object.defineProperty(this,"notification",{enumerable:!0,configurable:!0,writable:!0,value:e}),Object.defineProperty(this,"user",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"auth",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"setUser",{enumerable:!0,configurable:!0,writable:!0,value:e=>{this.user=e}}),Object.defineProperty(this,"updateCustomPreferences",{enumerable:!0,configurable:!0,writable:!0,value:e=>{const t=O(null).pipe(R((()=>{if(!this.user)return y((()=>"user is not initialized"));const t={id:this.user.id,jsonField:JSON.stringify({...JSON.parse(this.user.jsonField||"{}"),...e}),version:this.user.version};return this.api.users.UserUpdateProfile(t)})),R((e=>e.success?O(e.resultItems[0]):y((()=>e.error)))),this.retryOnVersionMismatch(),D());return t.subscribe((e=>{this.setUser(e)})),t}}),Object.defineProperty(this,"getPreference",{enumerable:!0,configurable:!0,writable:!0,value:e=>this.preferences[e]}),Object.defineProperty(this,"retryOnVersionMismatch",{enumerable:!0,configurable:!0,writable:!0,value:()=>U({delay:(e,t)=>t>1?y((()=>e)):-4===(null==e?void 0:e.code)?this.loadUser$():y((()=>e))})}),n(this,{user:a.ref,setUser:s,userDisplayName:t,preferences:t})}get userDisplayName(){return this.user?this.user.firstName&&this.user.firstName.trim()||this.user.lastName&&this.user.lastName.trim()?[this.user.firstName,this.user.lastName].filter(Boolean).join(" ").trim():this.user.email:null}afterInit(){this.disposables.push(this.api.events.pipe(q((({hub:e,event:t})=>"users"===e&&"OnUserUpdateProfile"===t)),M((({data:e})=>e.resultItems[0]))).subscribe(this.setUser))}loadUser$(){return this.api.users.GetUser().pipe(R((e=>e.success?O(e.resultItems[0]):y((()=>e.error)))),x(this.setUser),D(1))}setAuthStore(t){this.auth=t,this.disposables.push(e((()=>this.auth.isAuthenticated),(()=>{this.auth.isAuthenticated&&this.loadUser$().subscribe()})))}async updateUserPassword(e){var t,r;const i=function(){throw new Error("Config not initialized")}().changePasswordUrl,n=null===(r=null===(t=this.auth)||void 0===t?void 0:t.token)||void 0===r?void 0:r.accessToken,a=JSON.stringify({currentPassword:e.previous,newPassword:e.new}),s=new Headers;s.append("content-type","application/json"),s.append("accept","application/json"),s.append("authorization",`bearer ${n}`);const o=await fetch(i,{method:"PUT",headers:s,body:a}),{status:l}=o;if(l!==_.OK){const e=await o.json();throw new Error(e.errors[0].message)}}updateUserSettings({firstName:e,lastName:t}){const r=O(null).pipe(R((()=>{if(!this.user)throw new Error("user is not initialized");return this.api.users.UserUpdateProfile({id:this.user.id,firstName:e,lastName:t,version:this.user.version})})),R((e=>e.success?O(e.resultItems[0]):y((()=>e.error)))),this.retryOnVersionMismatch(),D());return r.subscribe((e=>{this.setUser(e)})),r}updateUserLanguage(e){const t=O(null).pipe(R((()=>{if(!this.user)throw new Error("user is not initialized");return this.api.users.UserUpdateProfile({id:this.user.id,languageCode:e,version:this.user.version})})),R((e=>e.success?O(e.resultItems[0]):y((()=>e.error)))),this.retryOnVersionMismatch(),D());return t.subscribe((e=>{this.setUser(e)})),t}setDefaultGroup(e){const t=O(null).pipe(R((()=>{if(!this.user)return y((()=>"user is not initialized"));const t={id:this.user.id,layoutStartId:e,layoutStartType:"camgroup",version:this.user.version};return this.api.users.UserUpdateProfile(t)})),R((e=>e.success?O(e.resultItems[0]):y((()=>e.error)))),this.retryOnVersionMismatch(),D());return t.subscribe({next:e=>{var t;this.setUser(e),null===(t=this.notification)||void 0===t||t.success("Successfully set default group")},error:e=>{var t;console.error(e),null===(t=this.notification)||void 0===t||t.error(e.message)}}),t}get preferences(){var e;try{return ce.parse(JSON.parse((null===(e=this.user)||void 0===e?void 0:e.jsonField)||"{}"))}catch(e){console.error(e)}return{[se.DEFAULT_VIDEO_RESIZE_MODE]:void 0,[se.RESIZE_MODE_PER_CAMERA]:void 0,[se.FISHEYE_CAMERAS]:void 0,[se.UTC]:!1,[se.HOUR12]:!1,[se.START_OF_WEEK]:"monday"}}}class he{constructor(e){Object.defineProperty(this,"json",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"startTime",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"endTime",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"streamUrl",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"duration",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"isLive",{enumerable:!0,configurable:!0,writable:!0,value:!1}),Object.defineProperty(this,"cameraId",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.json=JSON.stringify(e,null,2),this.startTime=new Date(e.startTime),this.endTime=new Date(e.endTime),this.streamUrl=e.streamUrl,this.cameraId=e.cameraId,this.duration=e.duration,this.id=e.id}}const fe=5e-4;class be extends ie{constructor(e){super(),Object.defineProperty(this,"camerasStore",{enumerable:!0,configurable:!0,writable:!0,value:e}),Object.defineProperty(this,"data",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"chunksByCameraId",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"chunksByStart",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"chunksByEnd",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"chunksById",{enumerable:!0,configurable:!0,writable:!0,value:new Map}),Object.defineProperty(this,"pendingRequests",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"pendingRequestsByEnd",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"pendingRequestsByStart",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"pendingRequestsByCameraId",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"knownIntervals",{enumerable:!0,configurable:!0,writable:!0,value:new Map}),Object.defineProperty(this,"updates",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"getClosestChunkRight",{enumerable:!0,configurable:!0,writable:!0,value:({cameraId:e,time:t})=>{this.chunksByCameraId.filter(e),this.chunksByEnd.filter([t,1/0]);const r=this.chunksByStart.bottom(1);return this.chunksByCameraId.filterAll(),this.chunksByEnd.filterAll(),r[0]}}),Object.defineProperty(this,"getClosestChunkLeft",{enumerable:!0,configurable:!0,writable:!0,value:({cameraId:e,time:t})=>{this.chunksByCameraId.filter(e),this.chunksByStart.filter([-1/0,+t+fe]);const r=this.chunksByStart.top(1);return this.chunksByCameraId.filterAll(),this.chunksByEnd.filterAll(),r[0]}}),Object.defineProperty(this,"fetchNextChunk",{enumerable:!0,configurable:!0,writable:!0,value:({cameraId:e,time:t})=>{if(this.knownIntervals.has(e)){const[r,i]=this.knownIntervals.get(e);if(r<=t&&i>=t){const r=this.getClosestChunkRight({cameraId:e,time:t});if(r)return O(r)}}return O({result:[],time:t}).pipe(N((({result:t,time:r})=>{if(t.length||r>=new Date)return d;const i=new Date(+r+36e5);return this.fetch(e,r,i).pipe(M((e=>({result:e,time:i}))))})),F(),M((()=>this.getClosestChunkRight({cameraId:e,time:t}))))}}),Object.defineProperty(this,"fetchPrevChunk",{enumerable:!0,configurable:!0,writable:!0,value:({cameraId:e,time:t})=>{if(this.knownIntervals.has(e)){const[r,i]=this.knownIntervals.get(e);if(r<=t&&i>=t){const r=this.getClosestChunkLeft({cameraId:e,time:t});if(r)return O(r)}}const r=this.camerasStore.camerasById.get(e);if(!r)return O(void 0);const i=new Date(Date.now()-3600*r.archiveDuration*1e3);return this.knownIntervals.get(e)&&this.knownIntervals.get(e)[0]<=i?O(void 0):O({result:[],time:t}).pipe(N((({result:t,time:r})=>{if(t.length||r<=i)return d;const n=new Date(Math.max(+r-36e5,+i));return this.fetch(e,n,r).pipe(M((e=>({result:e,time:n}))))})),F(),M((()=>this.getClosestChunkRight({cameraId:e,time:t}))))}}),n(this,{updates:a,add:s.bound}),this.data=G(),this.chunksByCameraId=this.data.dimension((e=>e.cameraId)),this.chunksByStart=this.data.dimension((e=>+e.startTime)),this.chunksByEnd=this.data.dimension((e=>+e.endTime)),this.pendingRequests=G(),this.pendingRequestsByStart=this.pendingRequests.dimension((e=>+e.startTime)),this.pendingRequestsByEnd=this.pendingRequests.dimension((e=>+e.endTime)),this.pendingRequestsByCameraId=this.pendingRequests.dimension((e=>e.cameraId))}fetch(e,t,r){this.pendingRequestsByCameraId.filter(e),this.pendingRequestsByStart.filter(t),this.pendingRequestsByEnd.filter(r);const i=this.pendingRequests.allFiltered()[0];if(this.pendingRequestsByCameraId.filterAll(),this.pendingRequestsByStart.filterAll(),this.pendingRequestsByEnd.filterAll(),i)return i.request;if(this.knownIntervals.has(e)){const[i,n]=this.knownIntervals.get(e);if(i<=t&&n>=r)return O(this.getChunks({cameraId:e,from:t,to:r}));i<=t&&n<r&&(t=n),i>t&&n>=r&&(r=i),r<i&&(r=i),t>n&&(t=n)}const n=this.api.archives.PopulateArchive({cameraId:e,startTime:t,endTime:r}).pipe(M((e=>e.resultItems[0].chunks.map((e=>new he(e))))),x(this.add),x((r=>this.extendKnownInterval(e,t,r))),D());return this.pendingRequests.add([{cameraId:e,startTime:t,endTime:r,request:n}]),n.pipe(x((()=>this.pendingRequests.remove((e=>e.request===n))))).subscribe(),n}extendKnownInterval(e,t,r){t=new Date(Math.min(+t,...r.map((e=>+e.startTime))));const i=new Date(Math.max(...r.map((e=>+e.endTime))));if(this.knownIntervals.has(e)){const r=this.knownIntervals.get(e);t<r[0]&&(r[0]=t),i>r[1]&&(r[1]=i)}else this.knownIntervals.set(e,[t,i])}add(e){const t=e.filter((e=>!this.chunksById.has(e.id)));t.forEach((e=>this.chunksById.set(e.id,e))),this.data.add(t),t.length&&this.updates++}getChunks({cameraId:e,from:t,to:r}){this.chunksByStart.filter([-1/0,+r+fe]),this.chunksByEnd.filter([t,1/0]),e&&this.chunksByCameraId.filter(e);const i=this.chunksByStart.top(1/0);return e&&this.chunksByCameraId.filterAll(),this.chunksByStart.filterAll(),this.chunksByEnd.filterAll(),i}afterInit(){this.api.events.pipe(q((({hub:e,event:t})=>"archives"===e&&"OnArchiveChunksCreated"===t))).subscribe((({data:e})=>{this.add(e.resultItems.map((e=>new he(e))))}))}}class pe{get isOnline(){return this.enabled&&"Started"===this.state}get supportsWebRTC(){return!!this.webRtcUrl}constructor(e){Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"imageUrl",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"streamUrl",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"dashStreamUrl",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"address",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"archiveDuration",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"dvrWindowLength",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"stateUpdatedAt",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"raw",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"enabled",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"isMicEnabled",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"state",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"pin",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"webRtcUrl",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"isPtz",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"permissions",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"update",{enumerable:!0,configurable:!0,writable:!0,value:e=>{this.raw=e,this.id=e.id,this.name=e.name,this.isPtz=e.isPTZ,this.isMicEnabled=e.isMicEnabled,this.imageUrl=e.imageUrl,this.address=e.cameraAddress?JSON.parse(e.cameraAddress):null,this.streamUrl=e.streamUrl,this.dashStreamUrl=e.dashStreamUrl,this.enabled=e.enabled,this.state=this.raw.cameraState,this.dvrWindowLength=e.dvrWindowLength?1e3*e.dvrWindowLength:e.dvrWindowLength,this.archiveDuration=e.archiveDuration,this.pin=e.pin,this.webRtcUrl=e.webRtcUrl,this.permissions=e.permissions||0,this.stateUpdatedAt=new Date(e.cameraStateChangedTime)}}),Object.defineProperty(this,"can",{enumerable:!0,configurable:!0,writable:!0,value:e=>this.permissions&e}),n(this,{name:a,streamUrl:a,dashStreamUrl:a,enabled:a,isMicEnabled:a,state:a,pin:a,webRtcUrl:a,permissions:a,isOnline:t,update:s}),this.update(e)}}var ve;!function(e){e[e.View=1]="View",e[e.SaveClip=2]="SaveClip",e[e.Share=4]="Share",e[e.Ptz=8]="Ptz",e[e.EditSettings=16]="EditSettings",e[e.Timelapse=32]="Timelapse",e[e.Delete=64]="Delete"}(ve||(ve={}));class me extends ie{constructor(){super(),Object.defineProperty(this,"camerasById",{enumerable:!0,configurable:!0,writable:!0,value:new Map}),Object.defineProperty(this,"data",{enumerable:!0,configurable:!0,writable:!0,value:[]}),Object.defineProperty(this,"loading",{enumerable:!0,configurable:!0,writable:!0,value:!1}),Object.defineProperty(this,"loaded",{enumerable:!0,configurable:!0,writable:!0,value:!1}),Object.defineProperty(this,"pendingLoadRequest",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"requestsCanceler",{enumerable:!0,configurable:!0,writable:!0,value:new l}),Object.defineProperty(this,"load",{enumerable:!0,configurable:!0,writable:!0,value:()=>{if(this.loaded)return O([]);if(this.pendingLoadRequest)return this.pendingLoadRequest;i((()=>this.loading=!0));const e=this.pendingLoadRequest=this.api.cameras.GetCameras({},null).pipe(v((e=>e.success?O(e.resultItems):(console.error(e.error),y((()=>e.error))))),T(1),g(this.requestsCanceler));return e.subscribe((e=>{this.pendingLoadRequest=void 0,i((()=>{this.add(e),this.loading=!1,this.loaded=!0}))})),e}}),Object.defineProperty(this,"add",{enumerable:!0,configurable:!0,writable:!0,value:e=>{e.forEach((e=>{this.camerasById.has(e.id)?this.camerasById.get(e.id).update(e):this.camerasById.set(e.id,new pe(e))})),this.data=Array.from(this.camerasById.values()).sort(((e,t)=>W(e.name,t.name,{caseInsensitive:!0})))}}),Object.defineProperty(this,"sync",{enumerable:!0,configurable:!0,writable:!0,value:()=>{const e=this.data.reduce(((e,t)=>Math.max(e,+t.stateUpdatedAt)),0);if(!e)return d;const t=this.api.cameras.GetCameras({},new Date(1e3*(Math.floor(e/1e3)+1))).pipe(v((e=>e.success?O(e.resultItems):(console.error(e.error),y((()=>e.error))))),T(1),g(this.requestsCanceler));return t.subscribe((e=>this.add(e))),t}}),n(this,{data:a.ref,loading:a,loaded:a,add:s}),this.disposables.push(o((()=>this.loaded),(()=>{this.api.connection$.pipe(S(1),B((()=>this.sync()))).subscribe()})))}afterInit(){this.disposables.push(this.api.events.pipe(f((({hub:e,event:t})=>"cameras"===e&&("OnCameraUpdated"===t||"OnSystemCameraUpdated"===t))),C((({data:e,event:t})=>e.resultItems?{data:e.resultItems[0],event:t}:{data:e,event:t}))).subscribe((({data:e,event:t})=>{const r=this.camerasById.get(e.id);if(!r)return console.warn("got update for unknown camera:",e.id);if("OnSystemCameraUpdated"===t){const t=r.raw;for(const[r,i]of Object.entries(e))null===i&&(e[r]=t[r])}r.update(e)})))}dispose(){this.requestsCanceler.next(),this.camerasById.clear(),this.data=[],this.loading=!1,this.loaded=!1,super.dispose()}}const ye={amber:{50:"#fff8e1",100:"#ffecb3",200:"#ffe082",300:"#ffd54f",400:"#ffca28",500:"#ffc107",600:"#ffb300",700:"#ffa000",800:"#ff8f00",900:"#ff6f00",A100:"#ffe57f",A200:"#ffd740",A400:"#ffc400",A700:"#ffab00"},blue:{50:"#e3f2fd",100:"#bbdefb",200:"#90caf9",300:"#64b5f6",400:"#42a5f5",500:"#2196f3",600:"#1e88e5",700:"#1976d2",800:"#1565c0",900:"#0d47a1",A100:"#82b1ff",A200:"#448aff",A400:"#2979ff",A700:"#2962ff"},blueGrey:{50:"#eceff1",100:"#cfd8dc",200:"#b0bec5",300:"#90a4ae",400:"#78909c",500:"#607d8b",600:"#546e7a",700:"#455a64",800:"#37474f",900:"#263238",A100:"#cfd8dc",A200:"#b0bec5",A400:"#78909c",A700:"#455a64"},brown:{50:"#efebe9",100:"#d7ccc8",200:"#bcaaa4",300:"#a1887f",400:"#8d6e63",500:"#795548",600:"#6d4c41",700:"#5d4037",800:"#4e342e",900:"#3e2723",A100:"#d7ccc8",A200:"#bcaaa4",A400:"#8d6e63",A700:"#5d4037"},cyan:{50:"#e0f7fa",100:"#b2ebf2",200:"#80deea",300:"#4dd0e1",400:"#26c6da",500:"#00bcd4",600:"#00acc1",700:"#0097a7",800:"#00838f",900:"#006064",A100:"#84ffff",A200:"#18ffff",A400:"#00e5ff",A700:"#00b8d4"},deepOrange:{50:"#fbe9e7",100:"#ffccbc",200:"#ffab91",300:"#ff8a65",400:"#ff7043",500:"#ff5722",600:"#f4511e",700:"#e64a19",800:"#d84315",900:"#bf360c",A100:"#ff9e80",A200:"#ff6e40",A400:"#ff3d00",A700:"#dd2c00"},deepPurple:{50:"#ede7f6",100:"#d1c4e9",200:"#b39ddb",300:"#9575cd",400:"#7e57c2",500:"#673ab7",600:"#5e35b1",700:"#512da8",800:"#4527a0",900:"#311b92",A100:"#b388ff",A200:"#7c4dff",A400:"#651fff",A700:"#6200ea"},green:{50:"#e8f5e9",100:"#c8e6c9",200:"#a5d6a7",300:"#81c784",400:"#66bb6a",500:"#4caf50",600:"#43a047",700:"#388e3c",800:"#2e7d32",900:"#1b5e20",A100:"#b9f6ca",A200:"#69f0ae",A400:"#00e676",A700:"#00c853"},grey:{50:"#fafafa",100:"#f5f5f5",200:"#eeeeee",300:"#e0e0e0",400:"#bdbdbd",500:"#9e9e9e",600:"#757575",700:"#616161",800:"#424242",900:"#212121",A100:"#f5f5f5",A200:"#eeeeee",A400:"#bdbdbd",A700:"#616161"},indigo:{50:"#e8eaf6",100:"#c5cae9",200:"#9fa8da",300:"#7986cb",400:"#5c6bc0",500:"#3f51b5",600:"#3949ab",700:"#303f9f",800:"#283593",900:"#1a237e",A100:"#8c9eff",A200:"#536dfe",A400:"#3d5afe",A700:"#304ffe"},lightBlue:{50:"#e1f5fe",100:"#b3e5fc",200:"#81d4fa",300:"#4fc3f7",400:"#29b6f6",500:"#03a9f4",600:"#039be5",700:"#0288d1",800:"#0277bd",900:"#01579b",A100:"#80d8ff",A200:"#40c4ff",A400:"#00b0ff",A700:"#0091ea"},lightGreen:{50:"#f1f8e9",100:"#dcedc8",200:"#c5e1a5",300:"#aed581",400:"#9ccc65",500:"#8bc34a",600:"#7cb342",700:"#689f38",800:"#558b2f",900:"#33691e",A100:"#ccff90",A200:"#b2ff59",A400:"#76ff03",A700:"#64dd17"},lime:{50:"#f9fbe7",100:"#f0f4c3",200:"#e6ee9c",300:"#dce775",400:"#d4e157",500:"#cddc39",600:"#c0ca33",700:"#afb42b",800:"#9e9d24",900:"#827717",A100:"#f4ff81",A200:"#eeff41",A400:"#c6ff00",A700:"#aeea00"},orange:{50:"#fff3e0",100:"#ffe0b2",200:"#ffcc80",300:"#ffb74d",400:"#ffa726",500:"#ff9800",600:"#fb8c00",700:"#f57c00",800:"#ef6c00",900:"#e65100",A100:"#ffd180",A200:"#ffab40",A400:"#ff9100",A700:"#ff6d00"},pink:{50:"#fce4ec",100:"#f8bbd0",200:"#f48fb1",300:"#f06292",400:"#ec407a",500:"#e91e63",600:"#d81b60",700:"#c2185b",800:"#ad1457",900:"#880e4f",A100:"#ff80ab",A200:"#ff4081",A400:"#f50057",A700:"#c51162"},purple:{50:"#f3e5f5",100:"#e1bee7",200:"#ce93d8",300:"#ba68c8",400:"#ab47bc",500:"#9c27b0",600:"#8e24aa",700:"#7b1fa2",800:"#6a1b9a",900:"#4a148c",A100:"#ea80fc",A200:"#e040fb",A400:"#d500f9",A700:"#aa00ff"},red:{50:"#ffebee",100:"#ffcdd2",200:"#ef9a9a",300:"#e57373",400:"#ef5350",500:"#f44336",600:"#e53935",700:"#d32f2f",800:"#c62828",900:"#b71c1c",A100:"#ff8a80",A200:"#ff5252",A400:"#ff1744",A700:"#d50000"},teal:{50:"#e0f2f1",100:"#b2dfdb",200:"#80cbc4",300:"#4db6ac",400:"#26a69a",500:"#009688",600:"#00897b",700:"#00796b",800:"#00695c",900:"#004d40",A100:"#a7ffeb",A200:"#64ffda",A400:"#1de9b6",A700:"#00bfa5"},yellow:{50:"#fffde7",100:"#fff9c4",200:"#fff59d",300:"#fff176",400:"#ffee58",500:"#ffeb3b",600:"#fdd835",700:"#fbc02d",800:"#f9a825",900:"#f57f17",A100:"#ffff8d",A200:"#ffff00",A400:"#ffea00",A700:"#ffd600"}},ge={Person:"red",Car:"green",Animal:"blue",LicensePlate:"cyan",Fire:"deepOrange",Smoke:"deepPurple"},we=["green","red","blue","purple","teal","amber","pink","cyan","lightGreen","deepOrange","deepPurple","lime","indigo","lightBlue"];class Oe extends ie{constructor(){super(),Object.defineProperty(this,"schemaDescription",{enumerable:!0,configurable:!0,writable:!0,value:[]}),Object.defineProperty(this,"fetchAnalyticEventSchema",{enumerable:!0,configurable:!0,writable:!0,value:()=>{this.api.cameras.GetSensorDataSchema("Analytic").subscribe({next:e=>{e.success?i((()=>{this.schemaDescription=e.resultItems})):console.error(e)},error:console.error})}}),n(this,{schemaDescription:a.ref,foundObjectTypes:t,foundObjectTypesForSelect:t,colorsByFoundObjectType:t})}get foundObjectTypes(){if(!this.schemaDescription.length)return[];const e=this.schemaDescription.filter((e=>"filter"===e.parameterType&&"Type"===e.fieldName&&"Analytic"===e.eventType))[0];return e?e.valueSet.includes("LicensePlate")?e.valueSet.split(", "):e.valueSet.split(", ").concat(["LicensePlate"]):[]}get foundObjectTypesForSelect(){const e=Object.entries(ge).filter((([e])=>this.foundObjectTypes.includes(e))).map((([,e])=>e)),t=we.filter((t=>!e.includes(t)));let r=0;return this.foundObjectTypes.map((e=>{const i=e in ge?ge[e]:t[r++],n=ye[i];return{id:e,name:e.toLowerCase(),color:n[500],highlightColor:n.A400,type:"detectedObject"}}))}get colorsByFoundObjectType(){const e=new Map;return this.foundObjectTypesForSelect.forEach((t=>{e.set(t.id,t.highlightColor)})),e}afterInit(){this.fetchAnalyticEventSchema()}dispose(){super.dispose(),this.schemaDescription=[]}}var je="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function Pe(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var Ie=function(e,t,r,i){for(var n=-1,a=null==e?0:e.length;++n<a;){var s=e[n];t(i,s,r(s),e)}return i};var Ae=function(e){return function(t,r,i){for(var n=-1,a=Object(t),s=i(t),o=s.length;o--;){var l=s[e?o:++n];if(!1===r(a[l],l,a))break}return t}}();var ke=function(e,t){for(var r=-1,i=Array(e);++r<e;)i[r]=t(r);return i},Te="object"==typeof je&&je&&je.Object===Object&&je,Se=Te,Be="object"==typeof self&&self&&self.Object===Object&&self,Ce=Se||Be||Function("return this")(),Ee=Ce.Symbol,_e=Ee,Re=Object.prototype,De=Re.hasOwnProperty,Ue=Re.toString,qe=_e?_e.toStringTag:void 0;var Me=function(e){var t=De.call(e,qe),r=e[qe];try{e[qe]=void 0;var i=!0}catch(e){}var n=Ue.call(e);return i&&(t?e[qe]=r:delete e[qe]),n},xe=Object.prototype.toString;var Ne=Me,Fe=function(e){return xe.call(e)},ze=Ee?Ee.toStringTag:void 0;var Le=function(e){return null==e?void 0===e?"[object Undefined]":"[object Null]":ze&&ze in Object(e)?Ne(e):Fe(e)};var Ge=function(e){return null!=e&&"object"==typeof e},We=Le,$e=Ge;var Ve=function(e){return $e(e)&&"[object Arguments]"==We(e)},He=Ge,Ke=Object.prototype,Je=Ke.hasOwnProperty,Ze=Ke.propertyIsEnumerable,Ye=Ve(function(){return arguments}())?Ve:function(e){return He(e)&&Je.call(e,"callee")&&!Ze.call(e,"callee")},Qe=Array.isArray,Xe={exports:{}};var et=function(){return!1};!function(e,t){var r=Ce,i=et,n=t&&!t.nodeType&&t,a=n&&e&&!e.nodeType&&e,s=a&&a.exports===n?r.Buffer:void 0,o=(s?s.isBuffer:void 0)||i;e.exports=o}(Xe,Xe.exports);var tt=Xe.exports,rt=/^(?:0|[1-9]\d*)$/;var it=function(e,t){var r=typeof e;return!!(t=null==t?9007199254740991:t)&&("number"==r||"symbol"!=r&&rt.test(e))&&e>-1&&e%1==0&&e<t};var nt=function(e){return"number"==typeof e&&e>-1&&e%1==0&&e<=9007199254740991},at=Le,st=nt,ot=Ge,lt={};lt["[object Float32Array]"]=lt["[object Float64Array]"]=lt["[object Int8Array]"]=lt["[object Int16Array]"]=lt["[object Int32Array]"]=lt["[object Uint8Array]"]=lt["[object Uint8ClampedArray]"]=lt["[object Uint16Array]"]=lt["[object Uint32Array]"]=!0,lt["[object Arguments]"]=lt["[object Array]"]=lt["[object ArrayBuffer]"]=lt["[object Boolean]"]=lt["[object DataView]"]=lt["[object Date]"]=lt["[object Error]"]=lt["[object Function]"]=lt["[object Map]"]=lt["[object Number]"]=lt["[object Object]"]=lt["[object RegExp]"]=lt["[object Set]"]=lt["[object String]"]=lt["[object WeakMap]"]=!1;var ut=function(e){return ot(e)&&st(e.length)&&!!lt[at(e)]};var ct=function(e){return function(t){return e(t)}},dt={exports:{}};!function(e,t){var r=Te,i=t&&!t.nodeType&&t,n=i&&e&&!e.nodeType&&e,a=n&&n.exports===i&&r.process,s=function(){try{var e=n&&n.require&&n.require("util").types;return e||a&&a.binding&&a.binding("util")}catch(e){}}();e.exports=s}(dt,dt.exports);var ht=dt.exports,ft=ut,bt=ct,pt=ht&&ht.isTypedArray,vt=pt?bt(pt):ft,mt=ke,yt=Ye,gt=Qe,wt=tt,Ot=it,jt=vt,Pt=Object.prototype.hasOwnProperty;var It=function(e,t){var r=gt(e),i=!r&&yt(e),n=!r&&!i&&wt(e),a=!r&&!i&&!n&&jt(e),s=r||i||n||a,o=s?mt(e.length,String):[],l=o.length;for(var u in e)!t&&!Pt.call(e,u)||s&&("length"==u||n&&("offset"==u||"parent"==u)||a&&("buffer"==u||"byteLength"==u||"byteOffset"==u)||Ot(u,l))||o.push(u);return o},At=Object.prototype;var kt=function(e){var t=e&&e.constructor;return e===("function"==typeof t&&t.prototype||At)};var Tt=function(e,t){return function(r){return e(t(r))}}(Object.keys,Object),St=kt,Bt=Tt,Ct=Object.prototype.hasOwnProperty;var Et=function(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)},_t=Le,Rt=Et;var Dt=function(e){if(!Rt(e))return!1;var t=_t(e);return"[object Function]"==t||"[object GeneratorFunction]"==t||"[object AsyncFunction]"==t||"[object Proxy]"==t},Ut=Dt,qt=nt;var Mt=function(e){return null!=e&&qt(e.length)&&!Ut(e)},xt=It,Nt=function(e){if(!St(e))return Bt(e);var t=[];for(var r in Object(e))Ct.call(e,r)&&"constructor"!=r&&t.push(r);return t},Ft=Mt;var zt=function(e){return Ft(e)?xt(e):Nt(e)},Lt=Ae,Gt=zt;var Wt=Mt;var $t=function(e,t){return function(r,i){if(null==r)return r;if(!Wt(r))return e(r,i);for(var n=r.length,a=t?n:-1,s=Object(r);(t?a--:++a<n)&&!1!==i(s[a],a,s););return r}}((function(e,t){return e&&Lt(e,t,Gt)}));var Vt=function(e,t,r,i){return $t(e,(function(e,n,a){t(i,e,r(e),a)})),i};var Ht=function(){this.__data__=[],this.size=0};var Kt=function(e,t){return e===t||e!=e&&t!=t},Jt=Kt;var Zt=function(e,t){for(var r=e.length;r--;)if(Jt(e[r][0],t))return r;return-1},Yt=Zt,Qt=Array.prototype.splice;var Xt=Zt;var er=Zt;var tr=Zt;var rr=Ht,ir=function(e){var t=this.__data__,r=Yt(t,e);return!(r<0)&&(r==t.length-1?t.pop():Qt.call(t,r,1),--this.size,!0)},nr=function(e){var t=this.__data__,r=Xt(t,e);return r<0?void 0:t[r][1]},ar=function(e){return er(this.__data__,e)>-1},sr=function(e,t){var r=this.__data__,i=tr(r,e);return i<0?(++this.size,r.push([e,t])):r[i][1]=t,this};function or(e){var t=-1,r=null==e?0:e.length;for(this.clear();++t<r;){var i=e[t];this.set(i[0],i[1])}}or.prototype.clear=rr,or.prototype.delete=ir,or.prototype.get=nr,or.prototype.has=ar,or.prototype.set=sr;var lr=or,ur=lr;var cr=function(){this.__data__=new ur,this.size=0};var dr=function(e){var t=this.__data__,r=t.delete(e);return this.size=t.size,r};var hr=function(e){return this.__data__.get(e)};var fr,br=function(e){return this.__data__.has(e)},pr=Ce["__core-js_shared__"],vr=(fr=/[^.]+$/.exec(pr&&pr.keys&&pr.keys.IE_PROTO||""))?"Symbol(src)_1."+fr:"";var mr=function(e){return!!vr&&vr in e},yr=Function.prototype.toString;var gr=function(e){if(null!=e){try{return yr.call(e)}catch(e){}try{return e+""}catch(e){}}return""},wr=Dt,Or=mr,jr=Et,Pr=gr,Ir=/^\[object .+?Constructor\]$/,Ar=Function.prototype,kr=Object.prototype,Tr=Ar.toString,Sr=kr.hasOwnProperty,Br=RegExp("^"+Tr.call(Sr).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");var Cr=function(e){return!(!jr(e)||Or(e))&&(wr(e)?Br:Ir).test(Pr(e))},Er=function(e,t){return null==e?void 0:e[t]};var _r=function(e,t){var r=Er(e,t);return Cr(r)?r:void 0},Rr=_r(Ce,"Map"),Dr=_r(Object,"create"),Ur=Dr;var qr=function(){this.__data__=Ur?Ur(null):{},this.size=0};var Mr=function(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t},xr=Dr,Nr=Object.prototype.hasOwnProperty;var Fr=function(e){var t=this.__data__;if(xr){var r=t[e];return"__lodash_hash_undefined__"===r?void 0:r}return Nr.call(t,e)?t[e]:void 0},zr=Dr,Lr=Object.prototype.hasOwnProperty;var Gr=Dr;var Wr=qr,$r=Mr,Vr=Fr,Hr=function(e){var t=this.__data__;return zr?void 0!==t[e]:Lr.call(t,e)},Kr=function(e,t){var r=this.__data__;return this.size+=this.has(e)?0:1,r[e]=Gr&&void 0===t?"__lodash_hash_undefined__":t,this};function Jr(e){var t=-1,r=null==e?0:e.length;for(this.clear();++t<r;){var i=e[t];this.set(i[0],i[1])}}Jr.prototype.clear=Wr,Jr.prototype.delete=$r,Jr.prototype.get=Vr,Jr.prototype.has=Hr,Jr.prototype.set=Kr;var Zr=Jr,Yr=lr,Qr=Rr;var Xr=function(e){var t=typeof e;return"string"==t||"number"==t||"symbol"==t||"boolean"==t?"__proto__"!==e:null===e};var ei=function(e,t){var r=e.__data__;return Xr(t)?r["string"==typeof t?"string":"hash"]:r.map},ti=ei;var ri=ei;var ii=ei;var ni=ei;var ai=function(){this.size=0,this.__data__={hash:new Zr,map:new(Qr||Yr),string:new Zr}},si=function(e){var t=ti(this,e).delete(e);return this.size-=t?1:0,t},oi=function(e){return ri(this,e).get(e)},li=function(e){return ii(this,e).has(e)},ui=function(e,t){var r=ni(this,e),i=r.size;return r.set(e,t),this.size+=r.size==i?0:1,this};function ci(e){var t=-1,r=null==e?0:e.length;for(this.clear();++t<r;){var i=e[t];this.set(i[0],i[1])}}ci.prototype.clear=ai,ci.prototype.delete=si,ci.prototype.get=oi,ci.prototype.has=li,ci.prototype.set=ui;var di=ci,hi=lr,fi=Rr,bi=di;var pi=lr,vi=cr,mi=dr,yi=hr,gi=br,wi=function(e,t){var r=this.__data__;if(r instanceof hi){var i=r.__data__;if(!fi||i.length<199)return i.push([e,t]),this.size=++r.size,this;r=this.__data__=new bi(i)}return r.set(e,t),this.size=r.size,this};function Oi(e){var t=this.__data__=new pi(e);this.size=t.size}Oi.prototype.clear=vi,Oi.prototype.delete=mi,Oi.prototype.get=yi,Oi.prototype.has=gi,Oi.prototype.set=wi;var ji=Oi;var Pi=di,Ii=function(e){return this.__data__.set(e,"__lodash_hash_undefined__"),this},Ai=function(e){return this.__data__.has(e)};function ki(e){var t=-1,r=null==e?0:e.length;for(this.__data__=new Pi;++t<r;)this.add(e[t])}ki.prototype.add=ki.prototype.push=Ii,ki.prototype.has=Ai;var Ti=ki;var Si=function(e,t){return e.has(t)},Bi=Ti,Ci=function(e,t){for(var r=-1,i=null==e?0:e.length;++r<i;)if(t(e[r],r,e))return!0;return!1},Ei=Si;var _i=function(e,t,r,i,n,a){var s=1&r,o=e.length,l=t.length;if(o!=l&&!(s&&l>o))return!1;var u=a.get(e),c=a.get(t);if(u&&c)return u==t&&c==e;var d=-1,h=!0,f=2&r?new Bi:void 0;for(a.set(e,t),a.set(t,e);++d<o;){var b=e[d],p=t[d];if(i)var v=s?i(p,b,d,t,e,a):i(b,p,d,e,t,a);if(void 0!==v){if(v)continue;h=!1;break}if(f){if(!Ci(t,(function(e,t){if(!Ei(f,t)&&(b===e||n(b,e,r,i,a)))return f.push(t)}))){h=!1;break}}else if(b!==p&&!n(b,p,r,i,a)){h=!1;break}}return a.delete(e),a.delete(t),h};var Ri=function(e){var t=-1,r=Array(e.size);return e.forEach((function(e,i){r[++t]=[i,e]})),r};var Di=function(e){var t=-1,r=Array(e.size);return e.forEach((function(e){r[++t]=e})),r},Ui=Ce.Uint8Array,qi=Kt,Mi=_i,xi=Ri,Ni=Di,Fi=Ee?Ee.prototype:void 0,zi=Fi?Fi.valueOf:void 0;var Li=function(e,t,r,i,n,a,s){switch(r){case"[object DataView]":if(e.byteLength!=t.byteLength||e.byteOffset!=t.byteOffset)return!1;e=e.buffer,t=t.buffer;case"[object ArrayBuffer]":return!(e.byteLength!=t.byteLength||!a(new Ui(e),new Ui(t)));case"[object Boolean]":case"[object Date]":case"[object Number]":return qi(+e,+t);case"[object Error]":return e.name==t.name&&e.message==t.message;case"[object RegExp]":case"[object String]":return e==t+"";case"[object Map]":var o=xi;case"[object Set]":var l=1&i;if(o||(o=Ni),e.size!=t.size&&!l)return!1;var u=s.get(e);if(u)return u==t;i|=2,s.set(e,t);var c=Mi(o(e),o(t),i,n,a,s);return s.delete(e),c;case"[object Symbol]":if(zi)return zi.call(e)==zi.call(t)}return!1};var Gi=function(e,t){for(var r=-1,i=t.length,n=e.length;++r<i;)e[n+r]=t[r];return e},Wi=Qe;var $i=function(e,t,r){var i=t(e);return Wi(e)?i:Gi(i,r(e))};var Vi=function(e,t){for(var r=-1,i=null==e?0:e.length,n=0,a=[];++r<i;){var s=e[r];t(s,r,e)&&(a[n++]=s)}return a},Hi=function(){return[]},Ki=Object.prototype.propertyIsEnumerable,Ji=Object.getOwnPropertySymbols,Zi=$i,Yi=Ji?function(e){return null==e?[]:(e=Object(e),Vi(Ji(e),(function(t){return Ki.call(e,t)})))}:Hi,Qi=zt;var Xi=function(e){return Zi(e,Qi,Yi)},en=Object.prototype.hasOwnProperty;var tn=function(e,t,r,i,n,a){var s=1&r,o=Xi(e),l=o.length;if(l!=Xi(t).length&&!s)return!1;for(var u=l;u--;){var c=o[u];if(!(s?c in t:en.call(t,c)))return!1}var d=a.get(e),h=a.get(t);if(d&&h)return d==t&&h==e;var f=!0;a.set(e,t),a.set(t,e);for(var b=s;++u<l;){var p=e[c=o[u]],v=t[c];if(i)var m=s?i(v,p,c,t,e,a):i(p,v,c,e,t,a);if(!(void 0===m?p===v||n(p,v,r,i,a):m)){f=!1;break}b||(b="constructor"==c)}if(f&&!b){var y=e.constructor,g=t.constructor;y==g||!("constructor"in e)||!("constructor"in t)||"function"==typeof y&&y instanceof y&&"function"==typeof g&&g instanceof g||(f=!1)}return a.delete(e),a.delete(t),f},rn=_r(Ce,"DataView"),nn=_r(Ce,"Promise"),an=_r(Ce,"Set"),sn=rn,on=Rr,ln=nn,un=an,cn=_r(Ce,"WeakMap"),dn=Le,hn=gr,fn="[object Map]",bn="[object Promise]",pn="[object Set]",vn="[object WeakMap]",mn="[object DataView]",yn=hn(sn),gn=hn(on),wn=hn(ln),On=hn(un),jn=hn(cn),Pn=dn;(sn&&Pn(new sn(new ArrayBuffer(1)))!=mn||on&&Pn(new on)!=fn||ln&&Pn(ln.resolve())!=bn||un&&Pn(new un)!=pn||cn&&Pn(new cn)!=vn)&&(Pn=function(e){var t=dn(e),r="[object Object]"==t?e.constructor:void 0,i=r?hn(r):"";if(i)switch(i){case yn:return mn;case gn:return fn;case wn:return bn;case On:return pn;case jn:return vn}return t});var In=ji,An=_i,kn=Li,Tn=tn,Sn=Pn,Bn=Qe,Cn=tt,En=vt,_n="[object Arguments]",Rn="[object Array]",Dn="[object Object]",Un=Object.prototype.hasOwnProperty;var qn=function(e,t,r,i,n,a){var s=Bn(e),o=Bn(t),l=s?Rn:Sn(e),u=o?Rn:Sn(t),c=(l=l==_n?Dn:l)==Dn,d=(u=u==_n?Dn:u)==Dn,h=l==u;if(h&&Cn(e)){if(!Cn(t))return!1;s=!0,c=!1}if(h&&!c)return a||(a=new In),s||En(e)?An(e,t,r,i,n,a):kn(e,t,l,r,i,n,a);if(!(1&r)){var f=c&&Un.call(e,"__wrapped__"),b=d&&Un.call(t,"__wrapped__");if(f||b){var p=f?e.value():e,v=b?t.value():t;return a||(a=new In),n(p,v,r,i,a)}}return!!h&&(a||(a=new In),Tn(e,t,r,i,n,a))},Mn=Ge;var xn=function e(t,r,i,n,a){return t===r||(null==t||null==r||!Mn(t)&&!Mn(r)?t!=t&&r!=r:qn(t,r,i,n,e,a))},Nn=ji,Fn=xn;var zn=Et;var Ln=function(e){return e==e&&!zn(e)},Gn=Ln,Wn=zt;var $n=function(e,t){return function(r){return null!=r&&(r[e]===t&&(void 0!==t||e in Object(r)))}},Vn=function(e,t,r,i){var n=r.length,a=n,s=!i;if(null==e)return!a;for(e=Object(e);n--;){var o=r[n];if(s&&o[2]?o[1]!==e[o[0]]:!(o[0]in e))return!1}for(;++n<a;){var l=(o=r[n])[0],u=e[l],c=o[1];if(s&&o[2]){if(void 0===u&&!(l in e))return!1}else{var d=new Nn;if(i)var h=i(u,c,l,e,t,d);if(!(void 0===h?Fn(c,u,3,i,d):h))return!1}}return!0},Hn=function(e){for(var t=Wn(e),r=t.length;r--;){var i=t[r],n=e[i];t[r]=[i,n,Gn(n)]}return t},Kn=$n;var Jn=function(e){var t=Hn(e);return 1==t.length&&t[0][2]?Kn(t[0][0],t[0][1]):function(r){return r===e||Vn(r,e,t)}},Zn=Le,Yn=Ge;var Qn=function(e){return"symbol"==typeof e||Yn(e)&&"[object Symbol]"==Zn(e)},Xn=Qe,ea=Qn,ta=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,ra=/^\w*$/;var ia=function(e,t){if(Xn(e))return!1;var r=typeof e;return!("number"!=r&&"symbol"!=r&&"boolean"!=r&&null!=e&&!ea(e))||(ra.test(e)||!ta.test(e)||null!=t&&e in Object(t))},na=di;function aa(e,t){if("function"!=typeof e||null!=t&&"function"!=typeof t)throw new TypeError("Expected a function");var r=function(){var i=arguments,n=t?t.apply(this,i):i[0],a=r.cache;if(a.has(n))return a.get(n);var s=e.apply(this,i);return r.cache=a.set(n,s)||a,s};return r.cache=new(aa.Cache||na),r}aa.Cache=na;var sa=aa;var oa=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,la=/\\(\\)?/g,ua=function(e){var t=sa(e,(function(e){return 500===r.size&&r.clear(),e})),r=t.cache;return t}((function(e){var t=[];return 46===e.charCodeAt(0)&&t.push(""),e.replace(oa,(function(e,r,i,n){t.push(i?n.replace(la,"$1"):r||e)})),t}));var ca=function(e,t){for(var r=-1,i=null==e?0:e.length,n=Array(i);++r<i;)n[r]=t(e[r],r,e);return n},da=Qe,ha=Qn,fa=Ee?Ee.prototype:void 0,ba=fa?fa.toString:void 0;var pa=function e(t){if("string"==typeof t)return t;if(da(t))return ca(t,e)+"";if(ha(t))return ba?ba.call(t):"";var r=t+"";return"0"==r&&1/t==-Infinity?"-0":r},va=pa;var ma=Qe,ya=ia,ga=ua,wa=function(e){return null==e?"":va(e)};var Oa=function(e,t){return ma(e)?e:ya(e,t)?[e]:ga(wa(e))},ja=Qn;var Pa=function(e){if("string"==typeof e||ja(e))return e;var t=e+"";return"0"==t&&1/e==-Infinity?"-0":t},Ia=Oa,Aa=Pa;var ka=function(e,t){for(var r=0,i=(t=Ia(t,e)).length;null!=e&&r<i;)e=e[Aa(t[r++])];return r&&r==i?e:void 0},Ta=ka;var Sa=Oa,Ba=Ye,Ca=Qe,Ea=it,_a=nt,Ra=Pa;var Da=function(e,t){return null!=e&&t in Object(e)},Ua=function(e,t,r){for(var i=-1,n=(t=Sa(t,e)).length,a=!1;++i<n;){var s=Ra(t[i]);if(!(a=null!=e&&r(e,s)))break;e=e[s]}return a||++i!=n?a:!!(n=null==e?0:e.length)&&_a(n)&&Ea(s,n)&&(Ca(e)||Ba(e))};var qa=xn,Ma=function(e,t,r){var i=null==e?void 0:Ta(e,t);return void 0===i?r:i},xa=function(e,t){return null!=e&&Ua(e,t,Da)},Na=ia,Fa=Ln,za=$n,La=Pa;var Ga=ka;var Wa=function(e){return function(t){return null==t?void 0:t[e]}},$a=function(e){return function(t){return Ga(t,e)}},Va=ia,Ha=Pa;var Ka=Jn,Ja=function(e,t){return Na(e)&&Fa(t)?za(La(e),t):function(r){var i=Ma(r,e);return void 0===i&&i===t?xa(r,e):qa(t,i,3)}},Za=function(e){return e},Ya=Qe,Qa=function(e){return Va(e)?Wa(Ha(e)):$a(e)};var Xa=function(e){return"function"==typeof e?e:null==e?Za:"object"==typeof e?Ya(e)?Ja(e[0],e[1]):Ka(e):Qa(e)},es=Ie,ts=Vt,rs=Xa,is=Qe;var ns=Pe(function(e,t){return function(r,i){var n=is(r)?es:ts,a=t?t():{};return n(r,e,rs(i),a)}}((function(e,t,r){e[r?0:1].push(t)}),(function(){return[[],[]]})));var as=function(e,t,r,i){for(var n=e.length,a=r+(i?1:-1);i?a--:++a<n;)if(t(e[a],a,e))return a;return-1},ss=function(e){return e!=e},os=function(e,t,r){for(var i=r-1,n=e.length;++i<n;)if(e[i]===t)return i;return-1};var ls=function(e,t,r){return t==t?os(e,t,r):as(e,ss,r)};var us=function(e,t){return!!(null==e?0:e.length)&&ls(e,t,0)>-1};var cs=function(e,t,r){for(var i=-1,n=null==e?0:e.length;++i<n;)if(r(t,e[i]))return!0;return!1};var ds=an,hs=function(){},fs=ds&&1/Di(new ds([,-0]))[1]==1/0?function(e){return new ds(e)}:hs,bs=Ti,ps=us,vs=cs,ms=Si,ys=fs,gs=Di;var ws=function(e,t,r){var i=-1,n=ps,a=e.length,s=!0,o=[],l=o;if(r)s=!1,n=vs;else if(a>=200){var u=t?null:ys(e);if(u)return gs(u);s=!1,n=ms,l=new bs}else l=t?[]:o;e:for(;++i<a;){var c=e[i],d=t?t(c):c;if(c=r||0!==c?c:0,s&&d==d){for(var h=l.length;h--;)if(l[h]===d)continue e;t&&l.push(d),o.push(c)}else n(l,d,r)||(l!==o&&l.push(d),o.push(c))}return o},Os=Xa,js=ws;var Ps=Pe((function(e,t){return e&&e.length?js(e,Os(t)):[]}));const Is=new Set(["LicensePlate","FaceDetection","Analytic","SpeedDetection","Temperature","PoS","GPS","DigitalInput","Loitering"]);class As{get startTime(){return new Date(this.raw.startTime)}get endTime(){return new Date(this.raw.endTime)}get isLive(){return!Is.has(this.type)&&+this.startTime==+this.endTime}get acknowledged(){return"sensorId"in this.raw&&!!this.raw.ackEventType}constructor(e){if(Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"cameraId",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"type",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"raw",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"thumbnailUrl",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"thumbnailWidth",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"thumbnailHeight",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"detectedObjects",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"faces",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"instant",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"update",{enumerable:!0,configurable:!0,writable:!0,value:e=>{this.raw=e}}),n(this,{startTime:t,endTime:t,acknowledged:t,isLive:t,raw:a.ref,update:s}),this.raw=e,this.id=e.id,this.type=e.eventType,this.cameraId=e.sensorId,("Analytic"===this.type||"FaceDetection"===this.type||"Loitering"===this.type)&&e.data)try{const t=JSON.parse(e.data);t.FoundObjects&&(this.detectedObjects=t.FoundObjects),t.Faces&&(this.type="FaceDetection",this.faces=t.Faces),t.ThumbnailSize&&(this.thumbnailWidth=t.ThumbnailSize.Width,this.thumbnailHeight=t.ThumbnailSize.Height),this.thumbnailUrl=t.ThumbnailUrl}catch{console.warn("invalid data",e.data),this.type="Motion"}this.instant=Is.has(this.type),this.detectedObjects||(this.detectedObjects=[])}}function ks(e){if(e.length<2)return e;const t=[e[0]];for(let r=1;r<e.length;r++){const i=t.length-1,n=t[i],a=e[r];a[0]>n[1]?t.push(a):t[i]=[n[0],new Date(Math.max(+n[1],+a[1]))]}return t}const Ts=()=>!0,Ss=5e-4;class Bs extends ie{constructor(e){super(),Object.defineProperty(this,"camerasStore",{enumerable:!0,configurable:!0,writable:!0,value:e}),Object.defineProperty(this,"data",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"eventsByCameraId",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"eventsByStart",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"eventsByEnd",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"eventsByType",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"eventsByFoundObjects",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"eventsByColor",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"eventsByLiveliness",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"pendingRequests",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"pendingRequestsByEnd",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"pendingRequestsByStart",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"pendingRequestsByCameraId",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"knownIntervals",{enumerable:!0,configurable:!0,writable:!0,value:G()}),Object.defineProperty(this,"knownIntervalsByCameraId",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"knownIntervalsByStart",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"knownIntervalsByEnd",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"eventsById",{enumerable:!0,configurable:!0,writable:!0,value:new Map}),Object.defineProperty(this,"updates",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"recentAdditions",{enumerable:!0,configurable:!0,writable:!0,value:[]}),Object.defineProperty(this,"update",{enumerable:!0,configurable:!0,writable:!0,value:e=>{e.forEach((e=>{const t=this.eventsById.get(e.id);t&&(t.update(e.raw),this.data.remove((t=>t.id===e.id)),this.data.add([t]))}))}}),Object.defineProperty(this,"add",{enumerable:!0,configurable:!0,writable:!0,value:e=>{const t=e.filter((e=>!this.eventsById.has(e.id)));t.forEach((e=>this.eventsById.set(e.id,e))),this.data.add(t),t.length&&this.updates++}}),Object.defineProperty(this,"processNewEvents",{enumerable:!0,configurable:!0,writable:!0,value:({data:e})=>{const t=Ps(e.filter((e=>"PeopleCounter"!==e.eventType&&this.camerasStore.camerasById.has(e.sensorId))).reverse(),"id").map((e=>new As(e))),[r,i]=ns(t,(e=>this.eventsById.has(e.id)));this.update(r),this.add(i),i.length&&(this.recentAdditions=i.map((e=>e.id)))}}),n(this,{updates:a,recentAdditions:a.ref,processNewEvents:s,update:s,add:s,dispose:s}),this.data=G(),this.eventsByCameraId=this.data.dimension((e=>e.cameraId)),this.eventsByStart=this.data.dimension((e=>+e.startTime)),this.eventsByEnd=this.data.dimension((e=>+e.endTime)),this.eventsByType=this.data.dimension((e=>e.type)),this.eventsByFoundObjects=this.data.dimension((e=>e.detectedObjects.map((e=>e.Type))),!0),this.eventsByColor=this.data.dimension((e=>e.detectedObjects.reduce(((e,t)=>{var r,i;return e.concat(..."Colors"in t&&null!==(i=null===(r=t.Colors)||void 0===r?void 0:r.map((e=>e.Color)))&&void 0!==i?i:[])}),[])),!0),this.eventsByLiveliness=this.data.dimension((e=>e.isLive)),this.pendingRequests=G(),this.pendingRequestsByStart=this.pendingRequests.dimension((e=>+e.startTime)),this.pendingRequestsByEnd=this.pendingRequests.dimension((e=>+e.endTime)),this.pendingRequestsByCameraId=this.pendingRequests.dimension((e=>e.cameraId)),this.knownIntervalsByCameraId=this.knownIntervals.dimension((e=>e.cameraId)),this.knownIntervalsByStart=this.knownIntervals.dimension((e=>+e.from)),this.knownIntervalsByEnd=this.knownIntervals.dimension((e=>+e.to))}populateEvents(e,t,r){const i=null===r?new Date(Date.now()-6e5):r;-1===e?this.knownIntervalsByCameraId.filter(-1):this.knownIntervalsByCameraId.filter((t=>-1===t||t===e)),this.knownIntervalsByStart.filter([-1/0,i]),this.knownIntervalsByEnd.filter([t,1/0]);const n=this.knownIntervalsByStart.bottom(1/0),a=[];if(this.knownIntervalsByCameraId.filterAll(),this.knownIntervalsByStart.filterAll(),this.knownIntervalsByEnd.filterAll(),n.length){const s=ks(n.map((e=>[e.from,e.to])));s[0][0]>t&&a.push([t,s[0][0]]);for(let e=0;e<s.length-1;e++)a.push([s[e][1],s[e+1][0]]);s[ks.length-1][1]<i&&a.push([s[ks.length-1][1],i]),a.length&&(t=a[0][0],+a[a.length-1][1]<=+i&&(r=a[a.length-1][1]),this.knownIntervals.add([{cameraId:e,from:t,to:i}]))}else this.knownIntervals.add([{cameraId:e,from:t,to:i}]);this.pendingRequestsByCameraId.filter(e),this.pendingRequestsByStart.filter(t),this.pendingRequestsByEnd.filter(i);const s=this.pendingRequests.allFiltered()[0];if(this.pendingRequestsByCameraId.filterAll(),this.pendingRequestsByStart.filterAll(),this.pendingRequestsByEnd.filterAll(),s)return;if(n.length&&!a.length)return;const o=i=>this.api.cameras.GetSensorEventsPage({sensorIds:[e],sensorType:"camera",sensorEventTypes:[],startTime:t,endTime:r,rowsLimit:100,isDescending:!0,pageToken:i},null,[]).pipe(R((e=>e.success?O(e):(console.error(e.error),y((()=>e.error)))))),l=o().pipe(N((e=>e.pageInfo.haveMore?o(e.pageInfo.nextPageToken):d)),M((e=>e.resultItems.map((e=>new As(e))))),z());this.pendingRequests.add([{cameraId:e,startTime:t,endTime:r||new Date,request:l}]),l.subscribe({next:this.add,error:e=>{console.error(e),this.pendingRequests.remove((e=>e.request===l))},complete:()=>{this.pendingRequests.remove((e=>e.request===l))}})}getEvents({cameraIds:e,from:t,to:r,detectedObjectTypes:i,eventTypes:n,colors:a,probability:s}){this.eventsByStart.filter([+t,r?+r+Ss:1/0]),(null==e?void 0:e.length)&&this.eventsByCameraId.filter((t=>e.includes(t))),(null==n?void 0:n.length)&&this.eventsByType.filter((e=>n.includes(e))),(null==i?void 0:i.length)&&this.eventsByFoundObjects.filter((e=>i.includes(e))),(null==a?void 0:a.size)&&this.eventsByColor.filter((e=>a.has(e)));let o=this.eventsByStart.top(1/0);return(null==n?void 0:n.length)&&this.eventsByType.filterAll(),(null==e?void 0:e.length)&&this.eventsByCameraId.filterAll(),(null==i?void 0:i.length)&&this.eventsByFoundObjects.filterAll(),(null==a?void 0:a.size)&&this.eventsByColor.filterAll(),this.eventsByStart.filterAll(),void 0!==s&&(null==i?void 0:i.length)&&(o=o.filter((e=>e.detectedObjects.some((e=>e.Probability>=s&&i.includes(e.Type)))))),o}getOverlappedEvents({cameraId:e,from:t,to:r}){this.eventsByCameraId.filter(e),this.eventsByStart.filter([-1/0,+r+Ss]),this.eventsByEnd.filter([+t,1/0]);const i=this.eventsByStart.top(1/0);return this.eventsByCameraId.filterAll(),this.eventsByStart.filterAll(),this.eventsByEnd.filterAll(),i}getLastNonAnalyticEventBefore({cameraId:e,date:t}){this.eventsByCameraId.filter(e),this.eventsByStart.filter([-1/0,+t]),this.eventsByType.filter((e=>"Analytic"!==e));const r=this.eventsByStart.top(1);return this.eventsByType.filterAll(),this.eventsByStart.filterAll(),this.eventsByCameraId.filterAll(),r[0]}getLastObjectBefore({cameraId:e,date:t,objectFilters:r}){this.eventsByCameraId.filter(e),this.eventsByStart.filter([-1/0,+t]),this.eventsByType.filter((e=>"Analytic"===e));const{cars:i,people:n,misc:a}=r;n&&i&&a||this.eventsByFoundObjects.filter((e=>a?n||i?!(!n||!i)||(n?"Car"!==e:"Person"!==e):"Person"!==e&&"Car"!==e:n&&i?"Person"===e||"Car"===e:n?"Person"===e:"Car"===e));const s=this.eventsByStart.top(1);return this.eventsByFoundObjects.filterAll(),this.eventsByType.filterAll(),this.eventsByStart.filterAll(),this.eventsByCameraId.filterAll(),s[0]}getFirstNonAnalyticEventAfter({cameraId:e,date:t}){this.eventsByCameraId.filter(e),this.eventsByStart.filter([+t+Ss,1/0]),this.eventsByType.filter((e=>"Analytic"!==e));const r=this.eventsByEnd.bottom(1);return this.eventsByType.filterAll(),this.eventsByCameraId.filterAll(),this.eventsByStart.filterAll(),r[0]}getFirstObjectAfter({cameraId:e,date:t,objectFilters:r}){this.eventsByCameraId.filter(e),this.eventsByStart.filter([+t+Ss,1/0]),this.eventsByType.filter((e=>"Analytic"===e));const{cars:i,people:n,misc:a}=r;n&&i&&a||this.eventsByFoundObjects.filter((e=>a?n||i?!(!n||!i)||(n?"Car"!==e:"Person"!==e):"Person"!==e&&"Car"!==e:n&&i?"Person"===e||"Car"===e:n?"Person"===e:"Car"===e));const s=this.eventsByStart.bottom(1);return this.eventsByFoundObjects.filterAll(),this.eventsByType.filterAll(),this.eventsByStart.filterAll(),this.eventsByCameraId.filterAll(),s[0]}afterInit(){this.api.events.pipe(q((({hub:e,event:t})=>"cameras"===e&&"OnCameraMotionEvent"===t))).subscribe(this.processNewEvents)}dispose(){super.dispose(),this.data.remove(Ts),this.updates++}}const Cs=5e-4;class Es extends ie{constructor(){super(),Object.defineProperty(this,"thumbnails",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"thumbnailsByCameraId",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"thumbnailsByDate",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"pendingRequests",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"pendingRequestsByEnd",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"pendingRequestsByStart",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"pendingRequestsByCameraId",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"pendingRequestsByCount",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"fetchThumbnails",{enumerable:!0,configurable:!0,writable:!0,value:(e,t,r,i)=>{this.pendingRequestsByCameraId.filter(e),this.pendingRequestsByStart.filter(t),this.pendingRequestsByEnd.filter(r),this.pendingRequestsByCount.filter(i);const n=this.pendingRequests.allFiltered()[0];if(this.pendingRequestsByCameraId.filterAll(),this.pendingRequestsByStart.filterAll(),this.pendingRequestsByEnd.filterAll(),this.pendingRequestsByCount.filterAll(),n)return n.request;const a=this.api.thumbnails.GetThumbnailsInfo({cameraId:e,from:t,to:r,count:i}).pipe(R((e=>e.success?O(e.resultItems):y((()=>e.error)))),M((t=>t.filter((e=>e.url)).map(this.toThumbnail(e)))),D());return this.pendingRequests.add([{cameraId:e,from:t,to:r,count:i,request:a}]),a.subscribe((e=>{this.thumbnails.add(e),this.pendingRequests.remove((e=>e.request===a))})),a}}),Object.defineProperty(this,"toThumbnail",{enumerable:!0,configurable:!0,writable:!0,value:e=>({realtimestamp:t,url:r})=>({cameraId:e,url:r,timestamp:new Date(t)})}),this.thumbnails=G(),this.thumbnailsByCameraId=this.thumbnails.dimension((e=>e.cameraId)),this.thumbnailsByDate=this.thumbnails.dimension((e=>+e.timestamp)),this.pendingRequests=G(),this.pendingRequestsByStart=this.pendingRequests.dimension((e=>+e.from)),this.pendingRequestsByEnd=this.pendingRequests.dimension((e=>+e.to)),this.pendingRequestsByCameraId=this.pendingRequests.dimension((e=>e.cameraId)),this.pendingRequestsByCount=this.pendingRequests.dimension((e=>e.count))}getIntervalState(e,t,r){const i=this.getThumbnail({cameraId:e,from:t,to:r});if(i)return{state:"fulfilled",data:i};this.pendingRequestsByCameraId.filter(e),this.pendingRequestsByStart.filter([-1/0,+r+Cs]),this.pendingRequestsByEnd.filter([t,1/0]);let n=this.pendingRequests.allFiltered();return this.pendingRequestsByCameraId.filterAll(),this.pendingRequestsByStart.filterAll(),this.pendingRequestsByEnd.filterAll(),n=n.filter((e=>1===e.count?+e.from==+t&&+e.to==+r:Math.abs((+e.to-+e.from)/e.count-(+r-+t))<=1)),n.length?{state:"pending",request:n[0].request}:null}fetchThumbnail(e,t,r){const i=this.getIntervalState(e,t,r);if(null!==i){if("fulfilled"===i.state)return O(i.data);if("pending"===i.state)return i.request.pipe(M((()=>this.getThumbnail({cameraId:e,from:t,to:r}))))}const n=this.api.thumbnails.GetThumbnailInfo({cameraId:e,from:t,to:r}).pipe(R((e=>e.success?O(e.resultItems):y((()=>e.error)))),M((t=>t.filter((e=>e.url)).map(this.toThumbnail(e)))),D());return n.subscribe((e=>{this.thumbnails.add(e),this.pendingRequests.remove((e=>e.request===n))})),this.pendingRequests.add([{cameraId:e,from:t,to:r,count:1,request:n}]),n.pipe(M((()=>this.getThumbnail({cameraId:e,from:t,to:r}))))}getThumbnail({cameraId:e,from:t,to:r}){this.thumbnailsByCameraId.filter(e),this.thumbnailsByDate.filter([+t,+r+(+t==+r?Cs:0)]);const i=this.thumbnails.allFiltered()[0];return this.thumbnailsByDate.filterAll(),this.thumbnailsByCameraId.filterAll(),i}getThumbnails({cameraId:e,from:t,to:r}){this.thumbnailsByCameraId.filter(e),this.thumbnailsByDate.filter([+t,+r+Cs]);const i=this.thumbnails.allFiltered();return this.thumbnailsByDate.filterAll(),this.thumbnailsByCameraId.filterAll(),i}}const _s=$.createInstance();class Rs{constructor(e){Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"cameraId",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"startTime",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"endTime",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"type",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"createdAt",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"duration",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"chunks",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"clipUrl",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"description",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"version",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"raw",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"isDownloading",{enumerable:!0,configurable:!0,writable:!0,value:!1}),Object.defineProperty(this,"archives",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),n(this,{name:a,clipUrl:a,isDownloading:a,update:s}),this.update(e)}get isTimelapse(){return this.type.startsWith("Timelaps")}update(e){var t;this.raw=e,this.id=e.id,this.createdAt=new Date(e.timeCreated),this.startTime=new Date(e.startTime),this.endTime=new Date(e.endTime),this.type=e.recordType,this.duration=e.duration,this.cameraId=e.cameraId,this.name=null!==(t=e.name)&&void 0!==t?t:e.tagName,this.description=e.description,this.clipUrl=e.clipUrl,this.version=e.version}}class Ds extends ie{constructor(e){super(),Object.defineProperty(this,"notification",{enumerable:!0,configurable:!0,writable:!0,value:e}),Object.defineProperty(this,"data",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"clipsByCameraId",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"clipsByCreationDate",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"clipsByStart",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"clipsByEnd",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"clipsByType",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"clipsById",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"clipsMap",{enumerable:!0,configurable:!0,writable:!0,value:new Map}),Object.defineProperty(this,"loaded",{enumerable:!0,configurable:!0,writable:!0,value:!1}),Object.defineProperty(this,"loading",{enumerable:!0,configurable:!0,writable:!0,value:!1}),Object.defineProperty(this,"updates",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"add",{enumerable:!0,configurable:!0,writable:!0,value:e=>{const t=e.filter((e=>!this.clipsMap.has(e.id)));t.forEach((e=>this.clipsMap.set(e.id,e))),this.data.add(t),t.length&&this.updates++}}),Object.defineProperty(this,"addOrUpdate",{enumerable:!0,configurable:!0,writable:!0,value:e=>{const[t,r]=ns(e,(e=>this.clipsMap.has(e.id)));r.forEach((e=>this.clipsMap.set(e.id,e))),this.data.add(r),t.forEach((e=>{var t;return null===(t=this.clipsMap.get(e.id))||void 0===t?void 0:t.update(e.raw)})),r.length&&this.updates++}}),Object.defineProperty(this,"removeFromStore",{enumerable:!0,configurable:!0,writable:!0,value:e=>{e.length&&(e.forEach((({id:e})=>{this.data.remove((t=>t.id===e)),this.clipsMap.delete(e)})),this.updates++)}}),Object.defineProperty(this,"createClip",{enumerable:!0,configurable:!0,writable:!0,value:e=>{this.api.archives.SaveArchive({...e,recordType:"Archive"}).pipe(R((e=>e.success?O(e.resultItems.map((e=>new Rs(e)))):y((()=>e.error))))).subscribe({next:t=>{var r;null===(r=this.notification)||void 0===r||r.success(_s.t("archiveManager.clipCreatedMessage",{name:e.name}),{duration:3e3}),this.add(t)},error:t=>{var r;console.error(t),null===(r=this.notification)||void 0===r||r.error(_s.t("archiveManager.clipNotSavedMessage",{name:e.name}))}})}}),Object.defineProperty(this,"createTimelapse",{enumerable:!0,configurable:!0,writable:!0,value:e=>{this.api.archives.SaveArchive({...e,recordType:"Timelaps"}).pipe(R((e=>e.success?O(e.resultItems.map((e=>new Rs(e)))):y((()=>e.error))))).subscribe({next:t=>{var r;null===(r=this.notification)||void 0===r||r.success(_s.t("archiveManager.timelapseSavedMessage",{name:e.name})),this.add(t)},error:t=>{var r;console.error(t),null===(r=this.notification)||void 0===r||r.error(_s.t("archiveManager.timelapseNotSavedMessage",{name:e.name}))}})}}),n(this,{loaded:a,loading:a,updates:a,add:s,addOrUpdate:s,removeFromStore:s}),this.data=G(),this.clipsByCameraId=this.data.dimension((e=>e.cameraId)),this.clipsByCreationDate=this.data.dimension((e=>+e.createdAt)),this.clipsByStart=this.data.dimension((e=>+e.startTime)),this.clipsByEnd=this.data.dimension((e=>+e.endTime)),this.clipsByType=this.data.dimension((e=>e.type)),this.clipsById=this.data.dimension((e=>e.id))}fetch(){this.loaded||this.loading||(this.loading=!0);const e=this.api.archives.GetArchives({}).pipe(R((e=>e.success?O(e.resultItems.map((e=>new Rs(e)))):(console.error(e.error),[]))),D());return e.subscribe((e=>{i((()=>{this.loaded=!0,this.loading=!1,this.add(e)}))})),e}getClips({cameraId:e,from:t,to:r}){this.clipsByStart.filter([-1/0,+r+5e-4]),this.clipsByEnd.filter([t,1/0]),this.clipsByType.filter("Archive"),e&&this.clipsByCameraId.filter(e);const i=this.clipsByStart.top(1/0);return e&&this.clipsByCameraId.filterAll(),this.clipsByStart.filterAll(),this.clipsByEnd.filterAll(),this.clipsByType.filterAll(),i}getTimelapses(){this.clipsByType.filterFunction((e=>e.startsWith("Timelaps")));const e=this.clipsByStart.top(1/0);return this.clipsByType.filterAll(),e}getRecentlyAdded(){const e=Date.now()-864e5;this.clipsByCreationDate.filterFunction((t=>t>e));const t=this.clipsByCreationDate.top(1/0);return this.clipsByCreationDate.filterAll(),t}all(){return this.clipsByStart.top(1/0)}getOnly(e,t="asc"){if(null===e){return"desc"===t?this.clipsByStart.top(1/0):this.clipsByStart.bottom(1/0)}this.clipsByType.filterFunction((t=>"clips"===e?!t.startsWith("Timelaps"):t.startsWith("Timelaps")));const r="desc"===t?this.clipsByStart.top(1/0):this.clipsByStart.bottom(1/0);return this.clipsByType.filterAll(),r}rename(e,t){this.api.archives.SaveArchive({...e.raw,name:t}).pipe(R((e=>e.success?O(e.resultItems):y((()=>e.error))))).subscribe({next:t=>{var r,i;null===(r=this.clipsMap.get(e.id))||void 0===r||r.update(t[0]),null===(i=this.notification)||void 0===i||i.success(_s.t("clips.renameSuccess"),{duration:3e3})},error:e=>{var t;console.error(e),null===(t=this.notification)||void 0===t||t.error(_s.t("clips.renameError"))}})}delete(e){this.api.archives.DeleteArchive({id:e.id,version:e.version,cameraId:e.cameraId}).pipe(R((e=>e.success?O(e.resultItems.map((e=>new Rs(e)))):y((()=>e.error))))).subscribe({next:()=>{var t;this.removeFromStore([e]),null===(t=this.notification)||void 0===t||t.success(_s.t("clipDeleted",{name:e.name}))},error:t=>{var r;console.error(t),null===(r=this.notification)||void 0===r||r.error(_s.t("archiveManager.archiveNotDeletedMessage",{name:e.name}))}})}afterInit(){this.api.events.pipe(q((({hub:e,event:t})=>"archives"===e&&"OnArchiveAdded"===t))).subscribe((({data:e})=>{this.add(e.resultItems.map((e=>new Rs(e))))})),this.api.events.pipe(q((({hub:e,event:t})=>"archives"===e&&"OnTimelapsAdded"===t))).subscribe((({data:e})=>{this.addOrUpdate(e.resultItems.map((e=>new Rs({...e,recordType:"Timelaps"}))))})),this.api.events.pipe(q((({hub:e,event:t})=>"archives"===e&&"OnArchiveDeleted"===t))).subscribe((({data:e})=>{this.removeFromStore(e.resultItems)}))}dispose(){this.data.remove(Ts),this.clipsMap.clear(),this.updates++,super.dispose()}}class Us{constructor(e){Object.defineProperty(this,"notifier",{enumerable:!0,configurable:!0,writable:!0,value:e})}error(e){this.notifier.error(e)}success(e,t){this.notifier.success(e,t)}warn(e){this.notifier.warn(e)}}const qs="default",Ms=new Map;class xs{constructor(t){Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:t}),Object.defineProperty(this,"initialized",{enumerable:!0,configurable:!0,writable:!0,value:!1}),Object.defineProperty(this,"cameras",{enumerable:!0,configurable:!0,writable:!0,value:new me}),Object.defineProperty(this,"archives",{enumerable:!0,configurable:!0,writable:!0,value:new be(this.cameras)}),Object.defineProperty(this,"events",{enumerable:!0,configurable:!0,writable:!0,value:new Bs(this.cameras)}),Object.defineProperty(this,"eventSchema",{enumerable:!0,configurable:!0,writable:!0,value:new Oe}),Object.defineProperty(this,"thumbnails",{enumerable:!0,configurable:!0,writable:!0,value:new Es}),Object.defineProperty(this,"account",{enumerable:!0,configurable:!0,writable:!0,value:new de}),Object.defineProperty(this,"notification",{enumerable:!0,configurable:!0,writable:!0,value:new Us({success:console.log,warn:console.warn,error:console.error})}),Object.defineProperty(this,"library",{enumerable:!0,configurable:!0,writable:!0,value:new Ds(this.notification)}),Object.defineProperty(this,"auth",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"api",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"disposables",{enumerable:!0,configurable:!0,writable:!0,value:[]}),Object.defineProperty(this,"tokenUpdateReactions",{enumerable:!0,configurable:!0,writable:!0,value:new Set}),Object.defineProperty(this,"dispose",{enumerable:!0,configurable:!0,writable:!0,value:()=>{this.disposables.forEach((e=>{e instanceof k?e.closed||e.unsubscribe():e()})),this.tokenUpdateReactions.forEach((e=>e())),this.tokenUpdateReactions.clear(),this.auth.signOut(),this.cameras.dispose(),this.events.dispose(),this.thumbnails.dispose(),this.eventSchema.dispose(),this.account.dispose(),this.library.dispose(),Ms.delete(this.name)}}),Object.defineProperty(this,"onTokenUpdate",{enumerable:!0,configurable:!0,writable:!0,value:t=>{if(!this.auth)throw new Error("app has to be inited first");const r=e((()=>this.auth.token),(e=>t((null==e?void 0:e.json)||null)));return this.tokenUpdateReactions.add(r),()=>{r(),this.tokenUpdateReactions.delete(r)}}}),n(this,{initialized:a}),this.disposables.push(o((()=>!!this.account.user),(()=>{this.cameras.load()})))}init({token:e,tokenStorage:t=new re,tokenStorageKey:r,apiUrl:n="https://services.3deye.me/reactiveapi",tokenServiceUrl:a="https://admin.3deye.me/webapi/v3/auth/token"},s=qs){if(r||(r=`@3deye-toolkit/${s}/token`),Ms.has(s))return console.warn("Can`t init two apps with the same name"),Ms.get(s);if(this.auth&&s===this.name)return console.warn("Can`t init already inited app"),this;if(this.auth||this.name===qs&&s!==qs)return new xs(s).init({token:e,tokenStorage:t,tokenStorageKey:r,apiUrl:n,tokenServiceUrl:a},s);const o=e&&"clientId"in e?e.clientId:"WebApp";return e&&t.setItem(r,JSON.stringify(e)),this.auth=new te({tokenServiceUrl:a,tokenStorageKey:r,storage:t,clientId:o,deviceInfo:null}),this.api=X.create(H,this.auth,(e=>E(n,{qs:{access_token:e}}))),this.cameras.initWith(this.api),this.archives.initWith(this.api),this.library.initWith(this.api),this.events.initWith(this.api),this.eventSchema.initWith(this.api),this.thumbnails.initWith(this.api),this.account.initWith(this.api),this.account.setAuthStore(this.auth),i((()=>{this.initialized=!0})),Ms.set(s,this),this}}const Ns=new xs(qs),Fs=V.createContext(null);export{Fs as AppContext,Ns as app};
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};
@@ -5,7 +5,7 @@
5
5
  "toolPackages": [
6
6
  {
7
7
  "packageName": "@microsoft/api-extractor",
8
- "packageVersion": "7.37.0"
8
+ "packageVersion": "7.47.4"
9
9
  }
10
10
  ]
11
11
  }
package/package.json CHANGED
@@ -1,16 +1,13 @@
1
1
  {
2
2
  "name": "@3deye-toolkit/core",
3
- "version": "0.0.3",
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
- "backoff-rxjs": "^7.0.0",
11
10
  "crossfilter2": "^1.5.4",
12
- "http-status-codes": "^2.2.0",
13
- "i18next": "23.5.1",
14
11
  "jqueryless-signalr": "1.0.0",
15
12
  "lodash": "4.17.21",
16
13
  "mobx": "^6.10.2",