@openziti/ziti-console-lib 1.1.3 → 1.2.1

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/index.d.ts CHANGED
@@ -15,34 +15,34 @@ import { NGXLogger } from 'ngx-logger';
15
15
  import { HttpBackend, HttpClient } from '@angular/common/http';
16
16
  import * as i2 from '@angular/common';
17
17
  import { Location } from '@angular/common';
18
+ import * as i116 from '@angular/material/dialog';
19
+ import { MatDialog, MatDialogRef } from '@angular/material/dialog';
18
20
  import moment from 'moment/moment';
19
- import * as i114 from 'ag-grid-angular';
21
+ import * as i127 from 'ag-grid-angular';
20
22
  import { IHeaderAngularComp, ICellRendererAngularComp, ITooltipAngularComp } from 'ag-grid-angular';
21
23
  import { IHeaderParams, ICellRendererParams, ITooltipParams } from 'ag-grid-community';
22
- import * as i103 from '@angular/material/dialog';
23
- import { MatDialog, MatDialogRef } from '@angular/material/dialog';
24
- import * as i117 from 'ang-jsoneditor';
24
+ import * as i130 from 'ang-jsoneditor';
25
25
  import { JsonEditorComponent } from 'ang-jsoneditor';
26
- import * as i106 from '@angular/material/datepicker';
26
+ import * as i119 from '@angular/material/datepicker';
27
27
  import { MatCalendar, MatDateRangePicker } from '@angular/material/datepicker';
28
- import * as i107 from '@angular/material/core';
28
+ import * as i120 from '@angular/material/core';
29
29
  import { DateAdapter } from '@angular/material/core';
30
- import * as i120 from 'ngx-lottie';
30
+ import * as i133 from 'ngx-lottie';
31
31
  import { AnimationOptions } from 'ngx-lottie';
32
- import * as i110 from '@angular/material/select';
32
+ import * as i123 from '@angular/material/select';
33
33
  import { MatSelect } from '@angular/material/select';
34
34
  import { OAuthService } from 'angular-oauth2-oidc';
35
35
  import moment$1 from 'moment';
36
- import * as i104 from '@angular/material/radio';
37
- import * as i108 from '@angular/material/form-field';
38
- import * as i109 from '@angular/material/input';
39
- import * as i111 from '@angular/material/button';
40
- import * as i112 from '@angular/material/icon';
41
- import * as i113 from '@angular/cdk/overlay';
42
- import * as i115 from 'angularx-qrcode';
43
- import * as i116 from 'ng-click-outside';
44
- import * as i118 from '@angular/material/tooltip';
45
- import * as i119 from '@angular/material/autocomplete';
36
+ import * as i117 from '@angular/material/radio';
37
+ import * as i121 from '@angular/material/form-field';
38
+ import * as i122 from '@angular/material/input';
39
+ import * as i124 from '@angular/material/button';
40
+ import * as i125 from '@angular/material/icon';
41
+ import * as i126 from '@angular/cdk/overlay';
42
+ import * as i128 from 'angularx-qrcode';
43
+ import * as i129 from 'ng-click-outside';
44
+ import * as i131 from '@angular/material/tooltip';
45
+ import * as i132 from '@angular/material/autocomplete';
46
46
 
47
47
  declare class SafePipe implements PipeTransform {
48
48
  private sanitized;
@@ -53,6 +53,11 @@ declare class SafePipe implements PipeTransform {
53
53
  }
54
54
 
55
55
  declare const SHAREDZ_EXTENSION: InjectionToken<any>;
56
+ type ExtensionEventType = 'formDataUpdated' | 'attributesChanged' | 'service-attributes-changed' | 'identity-attributes-changed' | 'policy-type-changed' | 'policy-semantic-changed' | 'tableDataUpdated' | string;
57
+ interface ExtensionEvent<TData = any, TResult = any> {
58
+ type: ExtensionEventType;
59
+ data?: TData;
60
+ }
56
61
  interface ExtensionService {
57
62
  formDataChanged: BehaviorSubject<any>;
58
63
  closed: EventEmitter<any>;
@@ -61,6 +66,7 @@ interface ExtensionService {
61
66
  listActions?: any[];
62
67
  consoleActionTriggered?: EventEmitter<any>;
63
68
  disabledComponents?: any[];
69
+ emitEvent?<TData, TResult>(event: ExtensionEvent<TData, TResult>): Promise<TResult | undefined>;
64
70
  extendOnInit(): void;
65
71
  extendAfterViewInits(extentionPoints: any): void;
66
72
  updateFormData(data: any): void;
@@ -76,6 +82,7 @@ declare class ExtensionsNoopService implements ExtensionService {
76
82
  moreActions: any[];
77
83
  disabledComponents: any[];
78
84
  constructor();
85
+ emitEvent<TData, TResult>(event: ExtensionEvent<TData, TResult>): Promise<TResult | undefined>;
79
86
  extendOnInit(): void;
80
87
  extendAfterViewInits(extentionPoints: any): void;
81
88
  updateFormData(data: any): void;
@@ -247,7 +254,7 @@ declare class ChipsInputComponent implements ControlValueAccessor {
247
254
  onModelChange: EventEmitter<string[]>;
248
255
  onBlur: EventEmitter<FocusEvent>;
249
256
  keyup: EventEmitter<KeyboardEvent>;
250
- chipInput: ElementRef<HTMLInputElement>;
257
+ chipInput?: ElementRef<HTMLInputElement>;
251
258
  value: string[];
252
259
  disabled: boolean;
253
260
  focused: boolean;
@@ -510,11 +517,23 @@ declare abstract class SettingsServiceClass {
510
517
  abstract initApiVersions(url: any): any;
511
518
  abstract loadSettings(): any;
512
519
  abstract hasSession(): any;
520
+ abstract isHAEnabled(): boolean;
521
+ abstract getHAControllers(): any[];
522
+ abstract getActiveSessions(): Map<string, string>;
523
+ abstract getJwtToken(): string | null;
524
+ abstract hasValidJwtToken(): boolean;
525
+ abstract setJwtToken(token: string): void;
513
526
  get(): void;
514
527
  set(data: any): void;
515
528
  version(): void;
516
529
  getHttpOptions(): any;
517
530
  addContoller(name: string, url: string): any;
531
+ abstract addHAController(url: string, name: string): void;
532
+ abstract removeHAController(url: string): void;
533
+ abstract setControllerSession(url: string, sessionToken: string): void;
534
+ abstract getControllerSession(url: string): string | null;
535
+ abstract clearControllerSessions(): void;
536
+ abstract clearJwtToken(): void;
518
537
  static ɵfac: i0.ɵɵFactoryDeclaration<SettingsServiceClass, never>;
519
538
  static ɵprov: i0.ɵɵInjectableDeclaration<SettingsServiceClass>;
520
539
  }
@@ -547,7 +566,8 @@ declare abstract class ZitiDataService {
547
566
  abstract saveSubdata(entityType: string, id: any, dataType: string, params: any): Promise<any>;
548
567
  abstract deleteSubdata(entityType: string, id: any, dataType: string, params: any): Promise<any>;
549
568
  abstract delete(type: string, id: string): Promise<any>;
550
- abstract call(url: string): Promise<any>;
569
+ abstract call(url: string, prefix?: string): Promise<any>;
570
+ abstract callHAControllers(url: string, prefix?: string): Promise<any>;
551
571
  abstract resetEnrollment(id: string, date: string): Promise<any>;
552
572
  abstract deleteEnrollment(enrollmentId: string): Promise<any>;
553
573
  abstract reissueEnrollment(id: string, date: string): Promise<any>;
@@ -662,15 +682,103 @@ declare class SettingsService extends SettingsServiceClass {
662
682
  growlerService: GrowlerService;
663
683
  allowControllerAdd: boolean;
664
684
  constructor(httpBackend: HttpBackend, growlerService: GrowlerService);
665
- init(): Promise<any>;
685
+ init(): Promise<void>;
666
686
  loadSettings(): void;
667
687
  hasSession(): boolean;
668
688
  controllerSave(name: string, url: string): void;
669
689
  initApiVersions(url: string): Promise<any>;
690
+ /**
691
+ * Add an HA controller to the cluster
692
+ */
693
+ addHAController(url: string, name: string): void;
694
+ /**
695
+ * Remove an HA controller from the cluster
696
+ */
697
+ removeHAController(url: string): void;
698
+ /**
699
+ * Get all active sessions for HA controllers
700
+ */
701
+ getActiveSessions(): Map<string, string>;
702
+ /**
703
+ * Set session token for an HA controller
704
+ */
705
+ setControllerSession(url: string, sessionToken: string): void;
706
+ /**
707
+ * Get session token for a specific controller
708
+ */
709
+ getControllerSession(url: string): string | null;
710
+ /**
711
+ * Clear all HA controller sessions
712
+ */
713
+ clearControllerSessions(): void;
714
+ /**
715
+ * Check if HA is enabled
716
+ */
717
+ isHAEnabled(): boolean;
718
+ /**
719
+ * Get all HA controllers
720
+ */
721
+ getHAControllers(): any[];
722
+ /**
723
+ * Set JWT token for authentication
724
+ */
725
+ setJwtToken(token: string): void;
726
+ /**
727
+ * Get JWT token
728
+ */
729
+ getJwtToken(): string | null;
730
+ /**
731
+ * Clear JWT token
732
+ */
733
+ clearJwtToken(): void;
734
+ /**
735
+ * Check if JWT token exists and is not expired
736
+ */
737
+ hasValidJwtToken(): boolean;
670
738
  static ɵfac: i0.ɵɵFactoryDeclaration<SettingsService, never>;
671
739
  static ɵprov: i0.ɵɵInjectableDeclaration<SettingsService>;
672
740
  }
673
741
 
742
+ declare const SAVE_DENIED_BY_PERMISSION_TOOLTIP = "You do not have permission to save changes.";
743
+ declare class ManagementPermissionsService {
744
+ private readonly settings;
745
+ private readonly zitiData;
746
+ readonly saveDeniedTooltip = "You do not have permission to save changes.";
747
+ private readonly permissionSet;
748
+ private identityIsAdmin;
749
+ /** Legacy controller, failed refresh, or empty permissions — keep prior UX (no gating). */
750
+ private unrestricted;
751
+ private readonly versionSubject;
752
+ readonly stateVersion$: rxjs.Observable<number>;
753
+ /** Coalesce overlapping current-identity HTTP calls (debounce + rapid settings churn). */
754
+ private identityLoadPromise;
755
+ constructor(settings: SettingsServiceClass, zitiData: ZitiDataService);
756
+ private bumpVersion;
757
+ clear(): void;
758
+ refresh(): Promise<void>;
759
+ private loadCurrentIdentity;
760
+ private fetchCurrentIdentity;
761
+ private applyLegacyMode;
762
+ isUnrestricted(): boolean;
763
+ private isAdmin;
764
+ isAdminReadonly(): boolean;
765
+ /** Read is not entity-scoped yet; parameter reserved for future use. */
766
+ canRead(_apiResource: string): boolean;
767
+ /** Create is global-role only until entity grants exist; apiResource unused for now. */
768
+ canCreate(_apiResource: string): boolean;
769
+ /** Update is global-role only until entity grants exist; apiResource unused for now. */
770
+ canUpdate(_apiResource: string): boolean;
771
+ /** Delete is global-role only until entity grants exist; apiResource unused for now. */
772
+ canDelete(_apiResource: string): boolean;
773
+ /** Strict read-only shell when the session has global admin_readonly (no writes). */
774
+ useStrictReadonlyFormUi(apiResource: string, isEdit: boolean): boolean;
775
+ isSaveDisabled(apiResource: string, isEdit: boolean): boolean;
776
+ isMenuActionAllowed(apiResource: string, action: string): boolean;
777
+ isTableHeaderActionAllowed(apiResource: string, action: string): boolean;
778
+ static ɵfac: i0.ɵɵFactoryDeclaration<ManagementPermissionsService, never>;
779
+ static ɵprov: i0.ɵɵInjectableDeclaration<ManagementPermissionsService>;
780
+ }
781
+
674
782
  declare class Entity {
675
783
  name: '';
676
784
  }
@@ -688,6 +796,7 @@ declare abstract class ProjectableForm extends ExtendableComponent implements Do
688
796
  protected route?: ActivatedRoute;
689
797
  protected location?: Location;
690
798
  protected settingsService?: SettingsService;
799
+ protected dialogForm?: MatDialog;
691
800
  isModal: boolean;
692
801
  abstract close: EventEmitter<any>;
693
802
  _formData: any;
@@ -705,7 +814,7 @@ declare abstract class ProjectableForm extends ExtendableComponent implements Do
705
814
  errors: any;
706
815
  protected entityType: string;
707
816
  protected entityClass: any;
708
- protected isLoading: boolean;
817
+ isLoading: boolean;
709
818
  protected usePreviousLocation: boolean;
710
819
  moreActions: any[];
711
820
  tagElements: any;
@@ -726,10 +835,17 @@ declare abstract class ProjectableForm extends ExtendableComponent implements Do
726
835
  ignoreDataChange: boolean;
727
836
  isScrolled: boolean;
728
837
  subscription: Subscription;
838
+ protected readonly managementPermissions: ManagementPermissionsService;
729
839
  formInit: boolean;
730
840
  formContainer: ElementRef;
731
- protected constructor(growlerService: GrowlerService, extService: ExtensionService, zitiService: ZitiDataService, router?: Router, route?: ActivatedRoute, location?: Location, settingsService?: SettingsService);
841
+ protected constructor(growlerService: GrowlerService, extService: ExtensionService, zitiService: ZitiDataService, router?: Router, route?: ActivatedRoute, location?: Location, settingsService?: SettingsService, dialogForm?: MatDialog);
732
842
  get isEdit(): boolean;
843
+ get formPermissionSaveDisabled(): boolean;
844
+ get formPermissionSaveTooltip(): string;
845
+ get useStrictReadonlyForm(): boolean;
846
+ /** Blocks save from shortcuts/callbacks when the controller denies create/update for this resource. */
847
+ protected canSaveByPermissions(): boolean;
848
+ get zacManagementReadonlyHostClass(): boolean;
733
849
  ngAfterViewInit(skipFocus?: boolean): void;
734
850
  ngOnInit(): void;
735
851
  initBaseHref(): void;
@@ -749,6 +865,11 @@ declare abstract class ProjectableForm extends ExtendableComponent implements Do
749
865
  canDeactivate(): boolean;
750
866
  protected entityUpdated(): void;
751
867
  getRoleAttributes(type: string): Promise<any>;
868
+ private deleteConfirmDialogRef;
869
+ protected deleteEntity(): void;
870
+ protected deleteServiceWithOrphans(): Promise<any>;
871
+ protected openPreviewDeletions(): void;
872
+ protected getEntityLabel(): string;
752
873
  static ɵfac: i0.ɵɵFactoryDeclaration<ProjectableForm, never>;
753
874
  static ɵcmp: i0.ɵɵComponentDeclaration<ProjectableForm, "ng-component", never, { "isModal": { "alias": "isModal"; "required": false; }; "formData": { "alias": "formData"; "required": false; }; "entityId": { "alias": "entityId"; "required": false; }; }, { "close": "close"; "dataChange": "dataChange"; }, never, never, false, never>;
754
875
  }
@@ -901,6 +1022,7 @@ declare abstract class ListPageServiceClass {
901
1022
  DEFAULT_PAGING: any;
902
1023
  totalCount: number;
903
1024
  dataService: ZitiDataService;
1025
+ protected readonly managementPermissions: ManagementPermissionsService;
904
1026
  refreshData: (sort?: {
905
1027
  sortBy: string;
906
1028
  ordering: string;
@@ -908,6 +1030,11 @@ declare abstract class ListPageServiceClass {
908
1030
  selectedEntityId: String;
909
1031
  menuItems: any;
910
1032
  tableHeaderActions: any;
1033
+ /** Original menus/header actions before permission filtering (for singleton page services). */
1034
+ private menuItemsBaseline;
1035
+ private tableHeaderActionsBaseline;
1036
+ private menuTemplateSnapshot;
1037
+ private tableHeaderActionsSnapshot;
911
1038
  currentSettings: any;
912
1039
  dialogRef: any;
913
1040
  sideModalOpen: boolean;
@@ -935,6 +1062,11 @@ declare abstract class ListPageServiceClass {
935
1062
  };
936
1063
  }) => string;
937
1064
  constructor(settings: SettingsServiceClass, filterService: DataTableFilterService, csvDownloadService: CsvDownloadService, extensionService: ExtensionService, router?: Router);
1065
+ /**
1066
+ * Root-provided page services survive route changes; restore baseline menus before each table init
1067
+ * so permission filtering does not stack on already-filtered items.
1068
+ */
1069
+ resetMenusForInit(): void;
938
1070
  initMenuActions(): void;
939
1071
  addListItemExtensionActions(row: {
940
1072
  actionList: any[];
@@ -949,6 +1081,8 @@ declare abstract class ListPageServiceClass {
949
1081
  getNetworkJwt(): Promise<any>;
950
1082
  openEditForm(itemId?: string, basePath?: undefined): void;
951
1083
  remToPx(remValue: number): number;
1084
+ capturePermissionSnapshots(): void;
1085
+ rebuildMenusAndHeaders(perm: ManagementPermissionsService): void;
952
1086
  }
953
1087
 
954
1088
  type CallbackResults = {
@@ -1112,10 +1246,14 @@ declare abstract class ListPageComponent {
1112
1246
  gridObj: any;
1113
1247
  subscription: Subscription;
1114
1248
  private growlerSvc;
1249
+ protected readonly managementPermissions: ManagementPermissionsService;
1250
+ get headerBlockCreate(): boolean;
1251
+ get headerBlockDelete(): boolean;
1115
1252
  constructor(filterService: DataTableFilterService, svc: ListPageServiceClass, consoleEvents: ConsoleEventsService, dialogForm: MatDialog, extensionService?: ExtensionService);
1116
1253
  ngOnInit(): void;
1117
1254
  ngOnDestroy(): void;
1118
1255
  itemToggled(item: any): void;
1256
+ protected syncBulkDownloadHeaderAction(): void;
1119
1257
  updateSelectedItems(toggledItem?: any): void;
1120
1258
  refreshData(sort?: {
1121
1259
  sortBy: string;
@@ -1235,6 +1373,8 @@ declare class ConfigEditorComponent implements OnInit, AfterViewInit {
1235
1373
  lColorArray: string[];
1236
1374
  bColorArray: string[];
1237
1375
  hideConfigJSON: boolean;
1376
+ /** When true, block edits to embedded config form and JSON editor (e.g. global admin_readonly). */
1377
+ readOnly: boolean;
1238
1378
  configErrors: any;
1239
1379
  configErrorsChange: EventEmitter<any>;
1240
1380
  _configData: any;
@@ -1270,7 +1410,7 @@ declare class ConfigEditorComponent implements OnInit, AfterViewInit {
1270
1410
  jsonDataChanged(event: any): void;
1271
1411
  removeUndefinedProperties(data: any): any;
1272
1412
  static ɵfac: i0.ɵɵFactoryDeclaration<ConfigEditorComponent, never>;
1273
- static ɵcmp: i0.ɵɵComponentDeclaration<ConfigEditorComponent, "lib-config-editor", never, { "configErrors": { "alias": "configErrors"; "required": false; }; "configData": { "alias": "configData"; "required": false; }; "showJsonView": { "alias": "showJsonView"; "required": false; }; "schema": { "alias": "schema"; "required": false; }; }, { "configErrorsChange": "configErrorsChange"; "configDataChange": "configDataChange"; }, never, never, false, never>;
1413
+ static ɵcmp: i0.ɵɵComponentDeclaration<ConfigEditorComponent, "lib-config-editor", never, { "readOnly": { "alias": "readOnly"; "required": false; }; "configErrors": { "alias": "configErrors"; "required": false; }; "configData": { "alias": "configData"; "required": false; }; "showJsonView": { "alias": "showJsonView"; "required": false; }; "schema": { "alias": "schema"; "required": false; }; }, { "configErrorsChange": "configErrorsChange"; "configDataChange": "configDataChange"; }, never, never, false, never>;
1274
1414
  }
1275
1415
 
1276
1416
  declare class ConfigTypeFormComponent extends ProjectableForm implements OnInit, OnDestroy {
@@ -1298,7 +1438,7 @@ declare class ConfigTypeFormComponent extends ProjectableForm implements OnInit,
1298
1438
  entityType: string;
1299
1439
  entityClass: typeof ConfigType;
1300
1440
  configEditor: ConfigEditorComponent;
1301
- constructor(svc: ConfigTypeFormService, schemaSvc: SchemaService, growlerService: GrowlerService, extService: ExtensionService, settingsService: SettingsService, zitiService: ZitiDataService, router: Router, route: ActivatedRoute, location: Location, validationService: ValidationService);
1441
+ constructor(svc: ConfigTypeFormService, schemaSvc: SchemaService, growlerService: GrowlerService, extService: ExtensionService, settingsService: SettingsService, zitiService: ZitiDataService, router: Router, route: ActivatedRoute, location: Location, validationService: ValidationService, dialogForm: MatDialog);
1302
1442
  ngOnInit(): void;
1303
1443
  entityUpdated(): void;
1304
1444
  ngOnDestroy(): void;
@@ -1327,11 +1467,15 @@ declare class ListPageHeaderComponent {
1327
1467
  tabs: any[];
1328
1468
  showAdd: boolean;
1329
1469
  hideAction: boolean;
1470
+ /** When true, hide the create (+) control even if showAdd is true. */
1471
+ blockCreate: boolean;
1472
+ /** When true, hide the bulk delete (-) control when rows are selected. */
1473
+ blockDelete: boolean;
1330
1474
  actionClicked: EventEmitter<string>;
1331
1475
  clickAction(value: string): void;
1332
1476
  tabSelected(tab: any): boolean;
1333
1477
  static ɵfac: i0.ɵɵFactoryDeclaration<ListPageHeaderComponent, never>;
1334
- static ɵcmp: i0.ɵɵComponentDeclaration<ListPageHeaderComponent, "lib-list-page-header", never, { "title": { "alias": "title"; "required": false; }; "tabs": { "alias": "tabs"; "required": false; }; "showAdd": { "alias": "showAdd"; "required": false; }; "hideAction": { "alias": "hideAction"; "required": false; }; }, { "actionClicked": "actionClicked"; }, never, never, false, never>;
1478
+ static ɵcmp: i0.ɵɵComponentDeclaration<ListPageHeaderComponent, "lib-list-page-header", never, { "title": { "alias": "title"; "required": false; }; "tabs": { "alias": "tabs"; "required": false; }; "showAdd": { "alias": "showAdd"; "required": false; }; "hideAction": { "alias": "hideAction"; "required": false; }; "blockCreate": { "alias": "blockCreate"; "required": false; }; "blockDelete": { "alias": "blockDelete"; "required": false; }; }, { "actionClicked": "actionClicked"; }, never, never, false, never>;
1335
1479
  }
1336
1480
 
1337
1481
  declare class FilterBarComponent {
@@ -1674,6 +1818,8 @@ declare class DataTableComponent implements OnChanges, OnInit {
1674
1818
  noItemsClass: any;
1675
1819
  entityTypeName: string;
1676
1820
  showNoItemsAdd: boolean;
1821
+ /** When true, empty-state copy does not prompt to add (e.g. admin_readonly / no create permission). */
1822
+ noItemsReadonly: boolean;
1677
1823
  currentPage: number;
1678
1824
  noItemsImage: string;
1679
1825
  rowHeight: number;
@@ -1808,7 +1954,7 @@ declare class DataTableComponent implements OnChanges, OnInit {
1808
1954
  _handleTableScroll(scroller: any): void;
1809
1955
  remToPx(remValue: any): number;
1810
1956
  static ɵfac: i0.ɵɵFactoryDeclaration<DataTableComponent, never>;
1811
- static ɵcmp: i0.ɵɵComponentDeclaration<DataTableComponent, "lib-data-table", never, { "rowData": { "alias": "rowData"; "required": false; }; "expandRowData": { "alias": "expandRowData"; "required": false; }; "collapseRowData": { "alias": "collapseRowData"; "required": false; }; "rowValidation": { "alias": "rowValidation"; "required": false; }; "isTimeSearchAvailable": { "alias": "isTimeSearchAvailable"; "required": false; }; "isLoading": { "alias": "isLoading"; "required": false; }; "tableId": { "alias": "tableId"; "required": false; }; "options": { "alias": "options"; "required": false; }; "validateService": { "alias": "validateService"; "required": false; }; "rowsToggled": { "alias": "rowsToggled"; "required": false; }; "tableRefreshCount": { "alias": "tableRefreshCount"; "required": false; }; "view": { "alias": "view"; "required": false; }; "serverSideDataSource": { "alias": "serverSideDataSource"; "required": false; }; "allowDownload": { "alias": "allowDownload"; "required": false; }; "startCount": { "alias": "startCount"; "required": false; }; "endCount": { "alias": "endCount"; "required": false; }; "totalCount": { "alias": "totalCount"; "required": false; }; "emptyMsg": { "alias": "emptyMsg"; "required": false; }; "filterApplied": { "alias": "filterApplied"; "required": false; }; "menuItems": { "alias": "menuItems"; "required": false; }; "headerActions": { "alias": "headerActions"; "required": false; }; "noItemsClass": { "alias": "noItemsClass"; "required": false; }; "entityTypeName": { "alias": "entityTypeName"; "required": false; }; "showNoItemsAdd": { "alias": "showNoItemsAdd"; "required": false; }; "currentPage": { "alias": "currentPage"; "required": false; }; "noItemsImage": { "alias": "noItemsImage"; "required": false; }; "rowHeight": { "alias": "rowHeight"; "required": false; }; "filterName": { "alias": "filterName"; "required": false; }; "filterColumn": { "alias": "filterColumn"; "required": false; }; "columnDefinitions": { "alias": "columnDefinitions"; "required": false; }; "refreshCount": { "alias": "refreshCount"; "required": false; }; }, { "actionRequested": "actionRequested"; "gridReady": "gridReady"; "dragStart": "dragStart"; "dragLeave": "dragLeave"; "pageChanged": "pageChanged"; }, never, never, false, never>;
1957
+ static ɵcmp: i0.ɵɵComponentDeclaration<DataTableComponent, "lib-data-table", never, { "rowData": { "alias": "rowData"; "required": false; }; "expandRowData": { "alias": "expandRowData"; "required": false; }; "collapseRowData": { "alias": "collapseRowData"; "required": false; }; "rowValidation": { "alias": "rowValidation"; "required": false; }; "isTimeSearchAvailable": { "alias": "isTimeSearchAvailable"; "required": false; }; "isLoading": { "alias": "isLoading"; "required": false; }; "tableId": { "alias": "tableId"; "required": false; }; "options": { "alias": "options"; "required": false; }; "validateService": { "alias": "validateService"; "required": false; }; "rowsToggled": { "alias": "rowsToggled"; "required": false; }; "tableRefreshCount": { "alias": "tableRefreshCount"; "required": false; }; "view": { "alias": "view"; "required": false; }; "serverSideDataSource": { "alias": "serverSideDataSource"; "required": false; }; "allowDownload": { "alias": "allowDownload"; "required": false; }; "startCount": { "alias": "startCount"; "required": false; }; "endCount": { "alias": "endCount"; "required": false; }; "totalCount": { "alias": "totalCount"; "required": false; }; "emptyMsg": { "alias": "emptyMsg"; "required": false; }; "filterApplied": { "alias": "filterApplied"; "required": false; }; "menuItems": { "alias": "menuItems"; "required": false; }; "headerActions": { "alias": "headerActions"; "required": false; }; "noItemsClass": { "alias": "noItemsClass"; "required": false; }; "entityTypeName": { "alias": "entityTypeName"; "required": false; }; "showNoItemsAdd": { "alias": "showNoItemsAdd"; "required": false; }; "noItemsReadonly": { "alias": "noItemsReadonly"; "required": false; }; "currentPage": { "alias": "currentPage"; "required": false; }; "noItemsImage": { "alias": "noItemsImage"; "required": false; }; "rowHeight": { "alias": "rowHeight"; "required": false; }; "filterName": { "alias": "filterName"; "required": false; }; "filterColumn": { "alias": "filterColumn"; "required": false; }; "columnDefinitions": { "alias": "columnDefinitions"; "required": false; }; "refreshCount": { "alias": "refreshCount"; "required": false; }; }, { "actionRequested": "actionRequested"; "gridReady": "gridReady"; "dragStart": "dragStart"; "dragLeave": "dragLeave"; "pageChanged": "pageChanged"; }, never, never, false, never>;
1812
1958
  }
1813
1959
 
1814
1960
  declare class TableCellSelectComponent implements ICellRendererAngularComp {
@@ -1938,9 +2084,11 @@ declare class IdentityFormComponent extends ProjectableForm implements OnInit, O
1938
2084
  ngOnChanges(changes: SimpleChanges): void;
1939
2085
  entityUpdated(): void;
1940
2086
  updateBadges(): void;
1941
- refreshIdentity(): void;
2087
+ refreshIdentity(waitForEnrollmentChange?: boolean): void;
2088
+ private pollRefreshIdentity;
1942
2089
  initEnrollmentType(): void;
1943
2090
  getIdentityRoleAttributes(): void;
2091
+ roleAttributesChanged(roleAttributes: any[]): void;
1944
2092
  getAssociatedServices(): void;
1945
2093
  getAssociatedServicePolicies(): void;
1946
2094
  getCertificateAuthorities(): void;
@@ -2032,7 +2180,7 @@ declare class EdgeRouterFormComponent extends ProjectableForm implements OnInit,
2032
2180
  identitiesLoading: boolean;
2033
2181
  authPolicies: any;
2034
2182
  settings: any;
2035
- constructor(settingsService: SettingsService, svc: EdgeRouterFormService, zitiService: ZitiDataService, growlerService: GrowlerService, extService: ExtensionService, config: DefaultAppConfig, router: Router, route: ActivatedRoute, location: Location);
2183
+ constructor(settingsService: SettingsService, svc: EdgeRouterFormService, zitiService: ZitiDataService, growlerService: GrowlerService, extService: ExtensionService, config: DefaultAppConfig, router: Router, route: ActivatedRoute, location: Location, dialogForm: MatDialog);
2036
2184
  ngOnInit(): void;
2037
2185
  entityUpdated(): void;
2038
2186
  getEdgeRouterRoleAttributes(): void;
@@ -2163,6 +2311,7 @@ declare class NoItemsComponent implements OnChanges {
2163
2311
  hasAdd: boolean;
2164
2312
  hiddenResults: boolean;
2165
2313
  isLoading: boolean;
2314
+ readonly: boolean;
2166
2315
  background: any;
2167
2316
  clickEmit: EventEmitter<any>;
2168
2317
  refresh: EventEmitter<any>;
@@ -2170,7 +2319,7 @@ declare class NoItemsComponent implements OnChanges {
2170
2319
  ngOnChanges(): void;
2171
2320
  iconClick(): void;
2172
2321
  static ɵfac: i0.ɵɵFactoryDeclaration<NoItemsComponent, never>;
2173
- static ɵcmp: i0.ɵɵComponentDeclaration<NoItemsComponent, "lib-no-items", never, { "image": { "alias": "image"; "required": false; }; "typeName": { "alias": "typeName"; "required": false; }; "isEmpty": { "alias": "isEmpty"; "required": false; }; "hasAdd": { "alias": "hasAdd"; "required": false; }; "hiddenResults": { "alias": "hiddenResults"; "required": false; }; "isLoading": { "alias": "isLoading"; "required": false; }; }, { "clickEmit": "clickEmit"; "refresh": "refresh"; }, never, never, false, never>;
2322
+ static ɵcmp: i0.ɵɵComponentDeclaration<NoItemsComponent, "lib-no-items", never, { "image": { "alias": "image"; "required": false; }; "typeName": { "alias": "typeName"; "required": false; }; "isEmpty": { "alias": "isEmpty"; "required": false; }; "hasAdd": { "alias": "hasAdd"; "required": false; }; "hiddenResults": { "alias": "hiddenResults"; "required": false; }; "isLoading": { "alias": "isLoading"; "required": false; }; "readonly": { "alias": "readonly"; "required": false; }; }, { "clickEmit": "clickEmit"; "refresh": "refresh"; }, never, never, false, never>;
2174
2323
  }
2175
2324
 
2176
2325
  declare class SideModalComponent implements OnInit {
@@ -2197,6 +2346,8 @@ declare class FormHeaderComponent implements OnChanges {
2197
2346
  moreActionsText: string;
2198
2347
  showHeaderToggle: boolean;
2199
2348
  showHeaderButton: boolean;
2349
+ /** Hide save / more-actions / multi-save and retitle Edit→View for global admin_readonly without write grants. */
2350
+ strictReadonlyUi: boolean;
2200
2351
  multiActions: any[];
2201
2352
  formViewChange: EventEmitter<string>;
2202
2353
  actionRequested: EventEmitter<any>;
@@ -2210,6 +2361,7 @@ declare class FormHeaderComponent implements OnChanges {
2210
2361
  showActionsDropDown: boolean;
2211
2362
  constructor();
2212
2363
  ngOnChanges(changes: SimpleChanges): void;
2364
+ get displayTitle(): string;
2213
2365
  get hasMoreActions(): boolean;
2214
2366
  actionClicked(event: any): void;
2215
2367
  requestAction(action: any): void;
@@ -2218,7 +2370,7 @@ declare class FormHeaderComponent implements OnChanges {
2218
2370
  get hasMultiActions(): boolean;
2219
2371
  get headerBadges(): any;
2220
2372
  static ɵfac: i0.ɵɵFactoryDeclaration<FormHeaderComponent, never>;
2221
- static ɵcmp: i0.ɵɵComponentDeclaration<FormHeaderComponent, "lib-form-header", never, { "data": { "alias": "data"; "required": false; }; "badges": { "alias": "badges"; "required": false; }; "title": { "alias": "title"; "required": false; }; "moreActions": { "alias": "moreActions"; "required": false; }; "formView": { "alias": "formView"; "required": false; }; "saveDisabled": { "alias": "saveDisabled"; "required": false; }; "saveTooltip": { "alias": "saveTooltip"; "required": false; }; "actionButtonText": { "alias": "actionButtonText"; "required": false; }; "moreActionsText": { "alias": "moreActionsText"; "required": false; }; "showHeaderToggle": { "alias": "showHeaderToggle"; "required": false; }; "showHeaderButton": { "alias": "showHeaderButton"; "required": false; }; "multiActions": { "alias": "multiActions"; "required": false; }; }, { "formViewChange": "formViewChange"; "actionRequested": "actionRequested"; "multiActionRequested": "multiActionRequested"; }, never, never, false, never>;
2373
+ static ɵcmp: i0.ɵɵComponentDeclaration<FormHeaderComponent, "lib-form-header", never, { "data": { "alias": "data"; "required": false; }; "badges": { "alias": "badges"; "required": false; }; "title": { "alias": "title"; "required": false; }; "moreActions": { "alias": "moreActions"; "required": false; }; "formView": { "alias": "formView"; "required": false; }; "saveDisabled": { "alias": "saveDisabled"; "required": false; }; "saveTooltip": { "alias": "saveTooltip"; "required": false; }; "actionButtonText": { "alias": "actionButtonText"; "required": false; }; "moreActionsText": { "alias": "moreActionsText"; "required": false; }; "showHeaderToggle": { "alias": "showHeaderToggle"; "required": false; }; "showHeaderButton": { "alias": "showHeaderButton"; "required": false; }; "strictReadonlyUi": { "alias": "strictReadonlyUi"; "required": false; }; "multiActions": { "alias": "multiActions"; "required": false; }; }, { "formViewChange": "formViewChange"; "actionRequested": "actionRequested"; "multiActionRequested": "multiActionRequested"; }, never, never, false, never>;
2222
2374
  }
2223
2375
 
2224
2376
  declare class FormFieldContainerComponent {
@@ -2241,11 +2393,13 @@ declare class FormFieldContainerComponent {
2241
2393
  headerToggle: boolean;
2242
2394
  actionRequested: EventEmitter<any>;
2243
2395
  headerToggleChange: EventEmitter<boolean>;
2396
+ helpClicked: EventEmitter<void>;
2244
2397
  constructor();
2398
+ onHelpClick(): void;
2245
2399
  actionClicked(action: any): void;
2246
2400
  toggleHeader(option?: any): void;
2247
2401
  static ɵfac: i0.ɵɵFactoryDeclaration<FormFieldContainerComponent, never>;
2248
- static ɵcmp: i0.ɵɵComponentDeclaration<FormFieldContainerComponent, "lib-form-field-container", never, { "title": { "alias": "title"; "required": false; }; "title2": { "alias": "title2"; "required": false; }; "titleIcon": { "alias": "titleIcon"; "required": false; }; "layout": { "alias": "layout"; "required": false; }; "helpText": { "alias": "helpText"; "required": false; }; "helpText2": { "alias": "helpText2"; "required": false; }; "label": { "alias": "label"; "required": false; }; "count": { "alias": "count"; "required": false; }; "action": { "alias": "action"; "required": false; }; "actionLabel": { "alias": "actionLabel"; "required": false; }; "class": { "alias": "class"; "required": false; }; "contentStyle": { "alias": "contentStyle"; "required": false; }; "contentClass": { "alias": "contentClass"; "required": false; }; "showHeader": { "alias": "showHeader"; "required": false; }; "showToggle": { "alias": "showToggle"; "required": false; }; "headerActions": { "alias": "headerActions"; "required": false; }; "headerToggle": { "alias": "headerToggle"; "required": false; }; }, { "actionRequested": "actionRequested"; "headerToggleChange": "headerToggleChange"; }, never, ["*"], false, never>;
2402
+ static ɵcmp: i0.ɵɵComponentDeclaration<FormFieldContainerComponent, "lib-form-field-container", never, { "title": { "alias": "title"; "required": false; }; "title2": { "alias": "title2"; "required": false; }; "titleIcon": { "alias": "titleIcon"; "required": false; }; "layout": { "alias": "layout"; "required": false; }; "helpText": { "alias": "helpText"; "required": false; }; "helpText2": { "alias": "helpText2"; "required": false; }; "label": { "alias": "label"; "required": false; }; "count": { "alias": "count"; "required": false; }; "action": { "alias": "action"; "required": false; }; "actionLabel": { "alias": "actionLabel"; "required": false; }; "class": { "alias": "class"; "required": false; }; "contentStyle": { "alias": "contentStyle"; "required": false; }; "contentClass": { "alias": "contentClass"; "required": false; }; "showHeader": { "alias": "showHeader"; "required": false; }; "showToggle": { "alias": "showToggle"; "required": false; }; "headerActions": { "alias": "headerActions"; "required": false; }; "headerToggle": { "alias": "headerToggle"; "required": false; }; }, { "actionRequested": "actionRequested"; "headerToggleChange": "headerToggleChange"; "helpClicked": "helpClicked"; }, never, ["*"], false, never>;
2249
2403
  }
2250
2404
 
2251
2405
  declare class PreviewListComponent {
@@ -2281,7 +2435,7 @@ declare class PreviewListComponent {
2281
2435
 
2282
2436
  declare class LoadingIndicatorComponent implements OnInit {
2283
2437
  isLoading: boolean;
2284
- lottieOptions: AnimationOptions;
2438
+ lottieOptions: AnimationOptions | undefined;
2285
2439
  ngOnInit(): void;
2286
2440
  static ɵfac: i0.ɵɵFactoryDeclaration<LoadingIndicatorComponent, never>;
2287
2441
  static ɵcmp: i0.ɵɵComponentDeclaration<LoadingIndicatorComponent, "lib-loading-indicator", never, { "isLoading": { "alias": "isLoading"; "required": false; }; }, {}, never, never, false, never>;
@@ -2537,6 +2691,8 @@ declare class FilterSelectComponent implements ControlValueAccessor, OnDestroy {
2537
2691
  matSelect?: MatSelect;
2538
2692
  optionTemplate?: FilterSelectOptionTemplateDirective;
2539
2693
  triggerTemplate?: FilterSelectTriggerTemplateDirective;
2694
+ /** Combined with ControlValueAccessor disabled state (e.g. disable mat-select when parent form is read-only). */
2695
+ disableControl: boolean;
2540
2696
  value: any;
2541
2697
  disabled: boolean;
2542
2698
  filterText: string;
@@ -2568,9 +2724,10 @@ declare class FilterSelectComponent implements ControlValueAccessor, OnDestroy {
2568
2724
  get isValueEmpty(): boolean;
2569
2725
  getOptionLabel(option: any): any;
2570
2726
  getOptionValue(option: any): any;
2727
+ get selectDisabled(): boolean;
2571
2728
  trackByOption: (_: number, option: any) => any;
2572
2729
  static ɵfac: i0.ɵɵFactoryDeclaration<FilterSelectComponent, never>;
2573
- static ɵcmp: i0.ɵɵComponentDeclaration<FilterSelectComponent, "lib-filter-select", never, { "id": { "alias": "id"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "panelClass": { "alias": "panelClass"; "required": false; }; "options": { "alias": "options"; "required": false; }; "optionLabel": { "alias": "optionLabel"; "required": false; }; "optionValue": { "alias": "optionValue"; "required": false; }; "searchable": { "alias": "searchable"; "required": false; }; "searchPlaceholder": { "alias": "searchPlaceholder"; "required": false; }; "localFilter": { "alias": "localFilter"; "required": false; }; "openOnFocus": { "alias": "openOnFocus"; "required": false; }; "showClear": { "alias": "showClear"; "required": false; }; }, { "selectionChange": "selectionChange"; "filterChange": "filterChange"; }, ["optionTemplate", "triggerTemplate"], never, false, never>;
2730
+ static ɵcmp: i0.ɵɵComponentDeclaration<FilterSelectComponent, "lib-filter-select", never, { "id": { "alias": "id"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "panelClass": { "alias": "panelClass"; "required": false; }; "options": { "alias": "options"; "required": false; }; "optionLabel": { "alias": "optionLabel"; "required": false; }; "optionValue": { "alias": "optionValue"; "required": false; }; "searchable": { "alias": "searchable"; "required": false; }; "searchPlaceholder": { "alias": "searchPlaceholder"; "required": false; }; "localFilter": { "alias": "localFilter"; "required": false; }; "openOnFocus": { "alias": "openOnFocus"; "required": false; }; "showClear": { "alias": "showClear"; "required": false; }; "disableControl": { "alias": "disableControl"; "required": false; }; }, { "selectionChange": "selectionChange"; "filterChange": "filterChange"; }, ["optionTemplate", "triggerTemplate"], never, false, never>;
2574
2731
  }
2575
2732
 
2576
2733
  declare class OverridesComponent implements OnInit {
@@ -2618,6 +2775,7 @@ declare class ResetEnrollmentComponent implements OnInit {
2618
2775
  type: string;
2619
2776
  identity: any;
2620
2777
  dateValue: Date;
2778
+ isSubmitting: boolean;
2621
2779
  constructor(svc: ResetEnrollmentService, dialogRef: MatDialogRef<ResetEnrollmentComponent>, data: any, dataService: ZitiDataService);
2622
2780
  ngOnInit(): void;
2623
2781
  confirm(): void;
@@ -2632,7 +2790,12 @@ declare class ResetEnrollmentComponent implements OnInit {
2632
2790
  declare class IdentityServicePathHelper {
2633
2791
  posy_for_group3: number;
2634
2792
  constructor();
2635
- getEndpointGraphObj(endpoint: any, bindIdnetities: any, edgerouters: any, selectedServiceOb: any, serviceConfigs: any, filterText?: string): RootJson;
2793
+ getEndpointGraphObj(endpoint: any, bindIdnetities: any, edgerouters: any, selectedServiceOb: any, serviceConfigs: any, filterText?: string, hostEdgeRouters?: any[], fabricRouters?: any[], routerTypesMap?: Map<string, string>, fabricLinks?: any[], serviceCircuits?: any[], serviceTerminators?: any[], fabricApiAvailable?: boolean, availableWidth?: number): RootJson;
2794
+ /**
2795
+ * Fallback: builds the graph using the original policy-derived approach
2796
+ * when fabric API data is not available.
2797
+ */
2798
+ private buildLegacyGraph;
2636
2799
  static ɵfac: i0.ɵɵFactoryDeclaration<IdentityServicePathHelper, never>;
2637
2800
  static ɵprov: i0.ɵɵInjectableDeclaration<IdentityServicePathHelper>;
2638
2801
  }
@@ -2644,8 +2807,45 @@ declare class RootJson {
2644
2807
  addLink(newObject: any): void;
2645
2808
  }
2646
2809
 
2810
+ interface RouterFetchResult {
2811
+ routers: any[];
2812
+ routerTypes: Map<string, string>;
2813
+ }
2814
+ declare class MapDataService {
2815
+ private zitiDataService;
2816
+ constructor(zitiDataService: ZitiDataService);
2817
+ /**
2818
+ * Fetch routers from both fabric and edge APIs, merge them together
2819
+ * Returns the merged routers and a map of router types (edge-router vs transit-router)
2820
+ */
2821
+ fetchRouters(): Promise<RouterFetchResult>;
2822
+ /**
2823
+ * Fetch identities with optional filters
2824
+ */
2825
+ fetchIdentities(filters?: any[]): Promise<any[]>;
2826
+ /**
2827
+ * Fetch services with optional filters
2828
+ */
2829
+ fetchServices(filters?: any[]): Promise<any[]>;
2830
+ /**
2831
+ * Fetch circuits from fabric API
2832
+ */
2833
+ fetchCircuits(): Promise<any[]>;
2834
+ /**
2835
+ * Fetch terminators from Edge API
2836
+ */
2837
+ fetchTerminators(): Promise<any[]>;
2838
+ /**
2839
+ * Fetch links from fabric API
2840
+ */
2841
+ fetchLinks(): Promise<any[]>;
2842
+ static ɵfac: i0.ɵɵFactoryDeclaration<MapDataService, never>;
2843
+ static ɵprov: i0.ɵɵInjectableDeclaration<MapDataService>;
2844
+ }
2845
+
2647
2846
  declare class IdentityServicePathComponent implements OnInit {
2648
2847
  private identityServicePathHelper;
2848
+ private mapDataService;
2649
2849
  settingsService: SettingsService;
2650
2850
  private zitiService;
2651
2851
  private router;
@@ -2674,7 +2874,13 @@ declare class IdentityServicePathComponent implements OnInit {
2674
2874
  isLoading: boolean;
2675
2875
  countGrp2Nds: number;
2676
2876
  countGrp3Nds: number;
2677
- constructor(identityServicePathHelper: IdentityServicePathHelper, settingsService: SettingsService, zitiService: ZitiDataService, router: Router, dialogRef: MatDialogRef<IdentityServicePathComponent>, data: any);
2877
+ allRouters: any[];
2878
+ routerTypesMap: Map<string, string>;
2879
+ allLinks: any[];
2880
+ allCircuits: any[];
2881
+ allTerminators: any[];
2882
+ fabricApiAvailable: boolean;
2883
+ constructor(identityServicePathHelper: IdentityServicePathHelper, mapDataService: MapDataService, settingsService: SettingsService, zitiService: ZitiDataService, router: Router, dialogRef: MatDialogRef<IdentityServicePathComponent>, data: any);
2678
2884
  ngOnInit(): void;
2679
2885
  getEndpointNetworkAsCode(): void;
2680
2886
  filterSearchArray(): void;
@@ -2683,7 +2889,7 @@ declare class IdentityServicePathComponent implements OnInit {
2683
2889
  serviceChanged(): void;
2684
2890
  addItemToArray(bindIdnetities: any, ob: any): any;
2685
2891
  getLinkForResource(ob: any, resource: any): any;
2686
- startVisProcess(bindIdnetities: any, selectedServiceOb: any, serviceConfigs: any): void;
2892
+ startVisProcess(bindIdnetities: any, selectedServiceOb: any, serviceConfigs: any, hostEdgeRouters?: any[], serviceTerminators?: any[], serviceCircuits?: any[]): void;
2687
2893
  toggleModalSize(): void;
2688
2894
  hide(): void;
2689
2895
  initTopoView(): void;
@@ -3002,6 +3208,8 @@ declare class NetworkVisualizerComponent extends VisualizerServiceClass implemen
3002
3208
 
3003
3209
  declare class CustomTagsComponent implements OnInit, OnChanges {
3004
3210
  tags: any;
3211
+ /** View-only: no add/remove/edit; show name/value as text (e.g. global admin_readonly). */
3212
+ readOnly: boolean;
3005
3213
  tagsChange: EventEmitter<any>;
3006
3214
  tagsArray: any;
3007
3215
  newTagName: string;
@@ -3032,7 +3240,7 @@ declare class CustomTagsComponent implements OnInit, OnChanges {
3032
3240
  tagValueChanged(tag: any, event?: any): void;
3033
3241
  validate(event?: any): void;
3034
3242
  static ɵfac: i0.ɵɵFactoryDeclaration<CustomTagsComponent, never>;
3035
- static ɵcmp: i0.ɵɵComponentDeclaration<CustomTagsComponent, "lib-custom-tags", never, { "tags": { "alias": "tags"; "required": false; }; }, { "tagsChange": "tagsChange"; }, never, never, false, never>;
3243
+ static ɵcmp: i0.ɵɵComponentDeclaration<CustomTagsComponent, "lib-custom-tags", never, { "tags": { "alias": "tags"; "required": false; }; "readOnly": { "alias": "readOnly"; "required": false; }; }, { "tagsChange": "tagsChange"; }, never, never, false, never>;
3036
3244
  }
3037
3245
 
3038
3246
  declare class ServicePolicy {
@@ -3328,7 +3536,7 @@ declare class ServiceFormComponent extends ProjectableForm implements OnInit, On
3328
3536
  entityType: string;
3329
3537
  entityClass: typeof Service;
3330
3538
  configEditor: ConfigEditorComponent;
3331
- constructor(settingsService: SettingsService, svc: ServiceFormService, zitiService: ZitiDataService, growlerService: GrowlerService, extService: ExtensionService, router: Router, route: ActivatedRoute, location: Location);
3539
+ constructor(settingsService: SettingsService, svc: ServiceFormService, zitiService: ZitiDataService, growlerService: GrowlerService, extService: ExtensionService, router: Router, route: ActivatedRoute, location: Location, dialogForm: MatDialog);
3332
3540
  ngOnInit(): void;
3333
3541
  entityUpdated(): void;
3334
3542
  getServiceRoleAttributes(): void;
@@ -3341,6 +3549,10 @@ declare class ServiceFormComponent extends ProjectableForm implements OnInit, On
3341
3549
  get showConfigData(): boolean;
3342
3550
  attachConfig(): void;
3343
3551
  captureConfigEnterEvent(event: any): void;
3552
+ protected deleteServiceWithOrphans(): Promise<any>;
3553
+ protected openPreviewDeletions(): void;
3554
+ private getOrphanedEntities;
3555
+ private deleteServiceAndOrphans;
3344
3556
  headerActionRequested(action: any): void;
3345
3557
  save(event?: any): Promise<void>;
3346
3558
  toggleEncryptionRequired(): void;
@@ -3449,7 +3661,7 @@ declare class SimpleServiceComponent extends ProjectableForm {
3449
3661
  protected settingsService: SettingsService;
3450
3662
  svc: ServiceFormService;
3451
3663
  zitiService: ZitiDataService;
3452
- private dialogForm;
3664
+ protected dialogForm: MatDialog;
3453
3665
  private validationService;
3454
3666
  private servicesPageService;
3455
3667
  protected router: Router;
@@ -3560,6 +3772,13 @@ declare class SimpleServiceComponent extends ProjectableForm {
3560
3772
  setInitData(): void;
3561
3773
  getAssociatedConfigs(): Promise<any>;
3562
3774
  getAssocaitedPolicies(): Promise<any>;
3775
+ /**
3776
+ * Sublist identities query is capped; service-policy detail includes identityRolesDisplay
3777
+ * so @-roles resolve to human-readable names even when the identity was not in the page.
3778
+ */
3779
+ private mergeIdentityRolesDisplayIntoMaps;
3780
+ private resolveIdentityNameForRole;
3781
+ private mergeSelectedIdentityNamesIntoAvailableList;
3563
3782
  getIdentityNamedAttributes(filter?: any): void;
3564
3783
  checkAllDataInit(): void;
3565
3784
  multiActionRequested(action: any): void;
@@ -3598,6 +3817,10 @@ declare class SimpleServiceComponent extends ProjectableForm {
3598
3817
  getBindApiRequest(): string;
3599
3818
  initDataModels(): void;
3600
3819
  convertToAdvanced(): void;
3820
+ protected deleteServiceWithOrphans(): Promise<any>;
3821
+ protected openPreviewDeletions(): void;
3822
+ private getOrphanedEntities;
3823
+ private deleteServiceAndOrphans;
3601
3824
  checkDataChange(): void;
3602
3825
  clear(): void;
3603
3826
  static ɵfac: i0.ɵɵFactoryDeclaration<SimpleServiceComponent, never>;
@@ -3745,13 +3968,18 @@ declare class ServicePolicyFormComponent extends ProjectableForm implements OnIn
3745
3968
  settings: any;
3746
3969
  entityType: string;
3747
3970
  entityClass: typeof ServicePolicy;
3748
- constructor(settingsService: SettingsService, svc: ServicePolicyFormService, zitiService: ZitiDataService, growlerService: GrowlerService, extService: ExtensionService, router: Router, route: ActivatedRoute, location: Location);
3971
+ constructor(settingsService: SettingsService, svc: ServicePolicyFormService, zitiService: ZitiDataService, growlerService: GrowlerService, extService: ExtensionService, router: Router, route: ActivatedRoute, location: Location, dialogForm: MatDialog);
3749
3972
  ngOnInit(): void;
3750
3973
  entityUpdated(): void;
3751
3974
  ngOnDestroy(): void;
3752
3975
  ngOnChanges(changes: SimpleChanges): void;
3753
3976
  initSelectedAttributes(): void;
3754
3977
  updateAssociations(): void;
3978
+ onServiceAttributesChanged(): void;
3979
+ onIdentityAttributesChanged(): void;
3980
+ onPolicyTypeChanged(): void;
3981
+ onPolicySemanticChanged(): void;
3982
+ emitInputChange(type: string): void;
3755
3983
  headerActionRequested(action: any): void;
3756
3984
  save(event?: any): Promise<void>;
3757
3985
  applySelectedAttributes(): void;
@@ -3765,7 +3993,7 @@ declare class ServicePolicyFormComponent extends ProjectableForm implements OnIn
3765
3993
  set apiData(data: any);
3766
3994
  clear(): void;
3767
3995
  static ɵfac: i0.ɵɵFactoryDeclaration<ServicePolicyFormComponent, never>;
3768
- static ɵcmp: i0.ɵɵComponentDeclaration<ServicePolicyFormComponent, "lib-service-policy-form", never, {}, { "close": "close"; }, never, never, false, never>;
3996
+ static ɵcmp: i0.ɵɵComponentDeclaration<ServicePolicyFormComponent, "lib-service-policy-form", never, {}, { "close": "close"; }, never, ["[slot=column-1-slot-1]", "[slot=column-2-slot-1]"], false, never>;
3769
3997
  }
3770
3998
 
3771
3999
  declare class EdgeRouterPoliciesPageService extends ListPageServiceClass {
@@ -3907,7 +4135,7 @@ declare class EdgeRouterPolicyFormComponent extends ProjectableForm implements O
3907
4135
  settings: any;
3908
4136
  entityType: string;
3909
4137
  entityClass: typeof EdgeRouterPolicy;
3910
- constructor(settingsService: SettingsService, svc: EdgeRouterPolicyFormService, zitiService: ZitiDataService, growlerService: GrowlerService, extService: ExtensionService, router: Router, route: ActivatedRoute, location: Location);
4138
+ constructor(settingsService: SettingsService, svc: EdgeRouterPolicyFormService, zitiService: ZitiDataService, growlerService: GrowlerService, extService: ExtensionService, router: Router, route: ActivatedRoute, location: Location, dialogForm: MatDialog);
3911
4139
  ngOnInit(): void;
3912
4140
  entityUpdated(): void;
3913
4141
  ngOnDestroy(): void;
@@ -3951,6 +4179,10 @@ declare class TableCellNameComponent implements ICellRendererAngularComp {
3951
4179
  constructor(dialogForm: MatDialog, router: Router);
3952
4180
  agInit(params: ICellRendererParams): void;
3953
4181
  refresh(params: ICellRendererParams<any>): boolean;
4182
+ get namePrefix(): {
4183
+ iconClass?: string;
4184
+ tooltip?: string;
4185
+ } | null;
3954
4186
  linkClicked(event: any): void;
3955
4187
  get cellText(): any;
3956
4188
  static ɵfac: i0.ɵɵFactoryDeclaration<TableCellNameComponent, never>;
@@ -4087,7 +4319,7 @@ declare class ServiceEdgeRouterPolicyFormComponent extends ProjectableForm imple
4087
4319
  settings: any;
4088
4320
  entityType: string;
4089
4321
  entityClass: typeof ServiceEdgeRouterPolicy;
4090
- constructor(settingsService: SettingsService, svc: ServiceEdgeRouterPolicyFormService, zitiService: ZitiDataService, growlerService: GrowlerService, extService: ExtensionService, router: Router, route: ActivatedRoute, location: Location);
4322
+ constructor(settingsService: SettingsService, svc: ServiceEdgeRouterPolicyFormService, zitiService: ZitiDataService, growlerService: GrowlerService, extService: ExtensionService, router: Router, route: ActivatedRoute, location: Location, dialogForm: MatDialog);
4091
4323
  ngOnInit(): void;
4092
4324
  entityUpdated(): void;
4093
4325
  ngOnDestroy(): void;
@@ -4214,7 +4446,7 @@ declare class ConfigurationFormComponent extends ProjectableForm implements OnIn
4214
4446
  entityType: string;
4215
4447
  entityClass: typeof Config;
4216
4448
  configEditor: ConfigEditorComponent;
4217
- constructor(svc: ConfigurationService, schemaSvc: SchemaService, growlerService: GrowlerService, extService: ExtensionService, settingsService: SettingsService, zitiService: ZitiDataService, router: Router, route: ActivatedRoute, location: Location);
4449
+ constructor(svc: ConfigurationService, schemaSvc: SchemaService, growlerService: GrowlerService, extService: ExtensionService, settingsService: SettingsService, zitiService: ZitiDataService, router: Router, route: ActivatedRoute, location: Location, dialogForm: MatDialog);
4218
4450
  ngOnInit(): void;
4219
4451
  entityUpdated(): void;
4220
4452
  getAssociatedServices(): void;
@@ -4235,6 +4467,8 @@ declare class ConfigurationFormComponent extends ProjectableForm implements OnIn
4235
4467
  _apiData: any;
4236
4468
  set apiData(data: any);
4237
4469
  dataChanged(event: any): void;
4470
+ deleteEntity(): void;
4471
+ private performDelete;
4238
4472
  static ɵfac: i0.ɵɵFactoryDeclaration<ConfigurationFormComponent, never>;
4239
4473
  static ɵcmp: i0.ɵɵComponentDeclaration<ConfigurationFormComponent, "lib-configuration", never, { "errors": { "alias": "errors"; "required": false; }; }, { "close": "close"; }, never, never, false, never>;
4240
4474
  }
@@ -4304,6 +4538,8 @@ declare class JwtSigner {
4304
4538
  certPem: string;
4305
4539
  tags: any;
4306
4540
  targetToken: string;
4541
+ enrollToCertEnabled: boolean;
4542
+ enrollToTokenEnabled: boolean;
4307
4543
  }
4308
4544
 
4309
4545
  declare class JwtSignerFormService {
@@ -4400,9 +4636,10 @@ declare class JwtSignerFormComponent extends ProjectableForm implements OnInit,
4400
4636
  usePreviousLocation: boolean;
4401
4637
  entityType: string;
4402
4638
  entityClass: typeof JwtSigner;
4639
+ showAutoEnrollHelpModal: boolean;
4403
4640
  filterInput: ElementRef;
4404
4641
  oidcVerification: ElementRef;
4405
- constructor(svc: JwtSignerFormService, schemaSvc: SchemaService, growlerService: GrowlerService, extService: ExtensionService, settingsService: SettingsService, zitiService: ZitiDataService, router: Router, route: ActivatedRoute, location: Location, validationService: ValidationService, authService: AuthService, oauthService: OAuthService, http: HttpClient, loginService: LoginServiceClass);
4642
+ constructor(svc: JwtSignerFormService, schemaSvc: SchemaService, growlerService: GrowlerService, extService: ExtensionService, settingsService: SettingsService, zitiService: ZitiDataService, router: Router, route: ActivatedRoute, location: Location, validationService: ValidationService, authService: AuthService, oauthService: OAuthService, http: HttpClient, loginService: LoginServiceClass, dialogForm: MatDialog);
4406
4643
  ngOnInit(): void;
4407
4644
  ngAfterViewInit(): void;
4408
4645
  protected entityUpdated(): void;
@@ -4414,6 +4651,7 @@ declare class JwtSignerFormComponent extends ProjectableForm implements OnInit,
4414
4651
  save(event?: any): Promise<void>;
4415
4652
  validate(): boolean;
4416
4653
  get showTokenType(): any;
4654
+ get showAutoEnrollment(): boolean;
4417
4655
  get targetToken(): any;
4418
4656
  set targetToken(val: any);
4419
4657
  get apiCallURL(): string;
@@ -4423,6 +4661,9 @@ declare class JwtSignerFormComponent extends ProjectableForm implements OnInit,
4423
4661
  dataChanged(event: any): void;
4424
4662
  toggleEnabled(): void;
4425
4663
  toggleUseExternalId(): void;
4664
+ toggleEnrollToCertEnabled(): void;
4665
+ toggleEnrollToTokenEnabled(): void;
4666
+ showAutoEnrollHelp(): void;
4426
4667
  trimWhitespaceScopes(): void;
4427
4668
  radioKeyDownHandler(event: any): void;
4428
4669
  selectSignatureMethod(method: any): void;
@@ -5039,7 +5280,7 @@ declare class PostureCheckFormComponent extends ProjectableForm implements OnIni
5039
5280
  };
5040
5281
  entityType: string;
5041
5282
  entityClass: typeof PostureCheck;
5042
- constructor(svc: PostureCheckFormService, schemaSvc: SchemaService, growlerService: GrowlerService, extService: ExtensionService, settingsService: SettingsService, zitiService: ZitiDataService, router: Router, route: ActivatedRoute, location: Location, validationService: ValidationService);
5283
+ constructor(svc: PostureCheckFormService, schemaSvc: SchemaService, growlerService: GrowlerService, extService: ExtensionService, settingsService: SettingsService, zitiService: ZitiDataService, router: Router, route: ActivatedRoute, location: Location, validationService: ValidationService, dialogForm: MatDialog);
5043
5284
  ngOnInit(): void;
5044
5285
  entityUpdated(): void;
5045
5286
  getMinMaxVersions(version: any): {
@@ -5426,11 +5667,572 @@ declare class ProfileComponent {
5426
5667
  static ɵcmp: i0.ɵɵComponentDeclaration<ProfileComponent, "lib-profile", never, {}, {}, never, never, false, never>;
5427
5668
  }
5428
5669
 
5670
+ declare class GeolocationService {
5671
+ private zitiDataService;
5672
+ private growlerService;
5673
+ private originalLocations;
5674
+ constructor(zitiDataService: ZitiDataService, growlerService: GrowlerService);
5675
+ /**
5676
+ * Update geolocation tag locally (in-memory only, not saved to backend)
5677
+ */
5678
+ updateGeolocationLocal(item: any, lat: number, lng: number): void;
5679
+ /**
5680
+ * Save geolocation changes to backend
5681
+ */
5682
+ saveGeolocation(item: any, type: string, routerTypes?: Map<string, string>): Promise<void>;
5683
+ /**
5684
+ * Remove geolocation tag from entity
5685
+ */
5686
+ removeGeolocation(item: any, type: string, routerTypes?: Map<string, string>): Promise<void>;
5687
+ /**
5688
+ * Check if an entity has unsaved location changes
5689
+ */
5690
+ hasUnsavedChanges(item: any): boolean;
5691
+ /**
5692
+ * Track original location for an entity
5693
+ */
5694
+ trackOriginalLocation(item: any): void;
5695
+ /**
5696
+ * Parse geolocation tag into lat/lng coordinates
5697
+ */
5698
+ parseGeolocation(geolocationTag: string): {
5699
+ lat: number;
5700
+ lng: number;
5701
+ } | null;
5702
+ /**
5703
+ * Clear all tracked original locations
5704
+ */
5705
+ clearTrackedLocations(): void;
5706
+ static ɵfac: i0.ɵɵFactoryDeclaration<GeolocationService, never>;
5707
+ static ɵprov: i0.ɵɵInjectableDeclaration<GeolocationService>;
5708
+ }
5709
+
5710
+ interface CircuitPathNode {
5711
+ id: string;
5712
+ name: string;
5713
+ type: 'identity' | 'routers';
5714
+ lat: number;
5715
+ lng: number;
5716
+ }
5717
+ interface CircuitPath {
5718
+ nodes: CircuitPathNode[];
5719
+ coordinates: [number, number][];
5720
+ }
5721
+ declare class CircuitCalculationService {
5722
+ constructor();
5723
+ /**
5724
+ * Find the host identity ID for a circuit using various fallback strategies
5725
+ */
5726
+ findHostIdentityId(circuit: any, terminators: any[]): string | null;
5727
+ /**
5728
+ * Build a circuit path data structure (client identity → routers → hosting identity)
5729
+ * Returns null if the path cannot be built (missing locations, etc.)
5730
+ */
5731
+ buildCircuitPath(circuit: any, identities: any[], identityLocations: Map<string, {
5732
+ lat: number;
5733
+ lng: number;
5734
+ name: string;
5735
+ }>, routerLocations: Map<string, {
5736
+ lat: number;
5737
+ lng: number;
5738
+ name: string;
5739
+ }>, terminators: any[]): CircuitPath | null;
5740
+ /**
5741
+ * Check if all routers in a circuit path are in the visible set
5742
+ */
5743
+ areAllRoutersVisible(circuit: any, visibleRouterIds: Set<string>): boolean;
5744
+ /**
5745
+ * Check if at least one router in a circuit path is in the visible set
5746
+ */
5747
+ hasAnyVisibleRouter(circuit: any, visibleRouterIds: Set<string>): boolean;
5748
+ /**
5749
+ * Filter a circuit path to only include visible entities
5750
+ * (all identities + only visible routers)
5751
+ */
5752
+ filterCircuitPathToVisible(circuitPath: CircuitPath, visibleRouterIds: Set<string>): CircuitPath;
5753
+ /**
5754
+ * Check if a circuit's service is in the visible set
5755
+ */
5756
+ isCircuitServiceVisible(circuit: any, visibleServiceIds: Set<string>, hasServiceFilters: boolean): boolean;
5757
+ /**
5758
+ * Calculate the count of unique services that have active circuits
5759
+ */
5760
+ calculateServicesWithActiveCircuits(circuits: any[]): number;
5761
+ static ɵfac: i0.ɵɵFactoryDeclaration<CircuitCalculationService, never>;
5762
+ static ɵprov: i0.ɵɵInjectableDeclaration<CircuitCalculationService>;
5763
+ }
5764
+
5765
+ interface CircuitHop {
5766
+ from: string;
5767
+ fromType: string;
5768
+ fromId: string;
5769
+ fromHasLocation: boolean;
5770
+ to: string;
5771
+ toType: string;
5772
+ toId: string;
5773
+ toHasLocation: boolean;
5774
+ isVisible: boolean;
5775
+ latencyMs?: number;
5776
+ }
5777
+ interface CircuitPathData {
5778
+ pathNodes: any[];
5779
+ pathCoordinates: [number, number][];
5780
+ routerNames: string[];
5781
+ entityIds: string[];
5782
+ entityTypes: string[];
5783
+ circuitHops: CircuitHop[];
5784
+ circuitRouters: any[];
5785
+ clientId: string | null;
5786
+ clientName: string;
5787
+ hostId: string | null;
5788
+ hostName: string;
5789
+ hasCompleteGeolocation: boolean;
5790
+ missingLocations: string[];
5791
+ visibleSegmentToHopIndex: Map<number, number>;
5792
+ }
5793
+ declare class CircuitPathBuilderService {
5794
+ /**
5795
+ * Builds complete circuit path data structure with coordinates, hops, and router details
5796
+ * @param circuit - The circuit object
5797
+ * @param routerLocations - Map of router IDs to location data
5798
+ * @param identityLocations - Map of identity IDs to location data
5799
+ * @param routers - Array of all router objects
5800
+ * @param identities - Array of all identity objects
5801
+ * @param links - Array of all link objects (for latency data on router-to-router hops)
5802
+ * @returns Complete circuit path data or null if path cannot be built
5803
+ */
5804
+ buildCircuitPathData(circuit: any, routerLocations: Map<string, any>, identityLocations: Map<string, any>, routers: any[], identities: any[], links?: any[]): CircuitPathData | null;
5805
+ /**
5806
+ * Builds a simplified circuit path for rendering (coordinates only)
5807
+ * @param circuit - The circuit object
5808
+ * @param routerLocations - Map of router IDs to location data
5809
+ * @param identityLocations - Map of identity IDs to location data
5810
+ * @returns Array of coordinates or null if path cannot be built
5811
+ */
5812
+ buildSimpleCircuitPath(circuit: any, routerLocations: Map<string, any>, identityLocations: Map<string, any>): [number, number][] | null;
5813
+ static ɵfac: i0.ɵɵFactoryDeclaration<CircuitPathBuilderService, never>;
5814
+ static ɵprov: i0.ɵɵInjectableDeclaration<CircuitPathBuilderService>;
5815
+ }
5816
+
5817
+ declare class CircuitFilterService {
5818
+ /**
5819
+ * Gets filtered identity IDs based on selected service and identity filters
5820
+ * @param identities - All identities
5821
+ * @param circuits - All circuits
5822
+ * @param terminators - All terminators
5823
+ * @param selectedServiceFilters - Selected service filters
5824
+ * @param selectedIdentityFilters - Selected identity filters
5825
+ * @returns Set of identity IDs that match the filters
5826
+ */
5827
+ getFilteredIdentityIds(identities: any[], circuits: any[], terminators: any[], selectedServiceFilters: any[], selectedIdentityFilters: any[]): Set<string>;
5828
+ /**
5829
+ * Gets filtered router IDs based on selected service and identity filters
5830
+ * @param identities - All identities
5831
+ * @param circuits - All circuits
5832
+ * @param terminators - All terminators
5833
+ * @param routerLocations - Map of router locations
5834
+ * @param selectedServiceFilters - Selected service filters
5835
+ * @param selectedIdentityFilters - Selected identity filters
5836
+ * @returns Set of router IDs that match the filters
5837
+ */
5838
+ getFilteredRouterIds(identities: any[], circuits: any[], terminators: any[], routerLocations: Map<string, any>, selectedServiceFilters: any[], selectedIdentityFilters: any[]): Set<string>;
5839
+ static ɵfac: i0.ɵɵFactoryDeclaration<CircuitFilterService, never>;
5840
+ static ɵprov: i0.ɵɵInjectableDeclaration<CircuitFilterService>;
5841
+ }
5842
+
5843
+ /**
5844
+ * Service responsible for managing map markers (identities and routers)
5845
+ * Handles marker creation, updates, selection, and user interactions
5846
+ */
5847
+ declare class MapMarkerService {
5848
+ private geolocationService;
5849
+ private growlerService;
5850
+ private dialogForm;
5851
+ identityMarkers: any[];
5852
+ routerMarkers: any[];
5853
+ markerToIdentityId: Map<any, string>;
5854
+ markerToRouterId: Map<any, string>;
5855
+ currentDraggableMarker: any;
5856
+ selectedMarker: any;
5857
+ circuitMarkerIds: Set<string>;
5858
+ markerClicked: EventEmitter<{
5859
+ item: any;
5860
+ type: string;
5861
+ location: {
5862
+ lat: number;
5863
+ lng: number;
5864
+ };
5865
+ }>;
5866
+ geolocationRemoved: EventEmitter<{
5867
+ item: any;
5868
+ type: string;
5869
+ marker: any;
5870
+ }>;
5871
+ geolocationUpdated: EventEmitter<{
5872
+ item: any;
5873
+ lat: number;
5874
+ lng: number;
5875
+ type: string;
5876
+ }>;
5877
+ private contextMenuCleanup;
5878
+ private dialogRef;
5879
+ constructor(geolocationService: GeolocationService, growlerService: GrowlerService, dialogForm: MatDialog);
5880
+ /**
5881
+ * Creates a Leaflet marker icon with dynamic styling
5882
+ * @param type - 'identity' or 'routers'
5883
+ * @param isSelected - Whether the marker is selected
5884
+ * @param scale - Scale factor for the icon (default 0.85)
5885
+ * @returns Leaflet icon object
5886
+ */
5887
+ createMarkerIcon(type: string, isSelected: boolean, scale?: number): any;
5888
+ /**
5889
+ * Adds markers to the map for a collection of entities
5890
+ * @param data - Array of entities (identities or routers)
5891
+ * @param type - 'identity' or 'routers'
5892
+ * @param clusterGroup - Leaflet cluster group to add markers to
5893
+ * @param map - Leaflet map instance (fallback if no cluster group)
5894
+ * @param routerLocations - Map to store router locations
5895
+ * @param identityLocations - Map to store identity locations
5896
+ * @returns Array of created markers
5897
+ */
5898
+ addMarkers(data: any[], type: string, clusterGroup: any, map: any, routerLocations: Map<string, any>, identityLocations: Map<string, any>): any[];
5899
+ /**
5900
+ * Finds a marker by item ID and type
5901
+ * @param itemId - Entity ID
5902
+ * @param itemType - 'identity' or 'routers'
5903
+ * @param identityClusterGroup - Identity cluster group
5904
+ * @param routerClusterGroup - Router cluster group
5905
+ * @returns Marker object or null
5906
+ */
5907
+ findMarkerByItemId(itemId: string, itemType: string, identityClusterGroup: any, routerClusterGroup: any): any;
5908
+ /**
5909
+ * Updates marker icon based on selection state and circuit membership
5910
+ * @param marker - Marker to update
5911
+ * @param isSelected - Whether the marker is selected
5912
+ */
5913
+ updateMarkerIcon(marker: any, isSelected: boolean): void;
5914
+ /**
5915
+ * Applies opacity to all markers except the selected one
5916
+ * @param selectedMarker - The marker to keep at full opacity
5917
+ * @param opacity - Opacity value for non-selected markers (default 0.7)
5918
+ * @param identityClusterGroup - Identity cluster group
5919
+ * @param routerClusterGroup - Router cluster group
5920
+ */
5921
+ applyMarkerOpacity(selectedMarker: any, opacity: number, identityClusterGroup: any, routerClusterGroup: any): void;
5922
+ /**
5923
+ * Resets opacity for all markers to full visibility
5924
+ * @param identityClusterGroup - Identity cluster group
5925
+ * @param routerClusterGroup - Router cluster group
5926
+ */
5927
+ resetMarkerOpacity(identityClusterGroup: any, routerClusterGroup: any): void;
5928
+ /**
5929
+ * Scales markers that are part of active circuits
5930
+ * @param scaleUp - Whether to scale up (true) or down (false)
5931
+ * @param identityClusterGroup - Identity cluster group
5932
+ * @param routerClusterGroup - Router cluster group
5933
+ */
5934
+ scaleCircuitMarkers(scaleUp: boolean, identityClusterGroup: any, routerClusterGroup: any): void;
5935
+ /**
5936
+ * Clears selected marker state and resets opacity
5937
+ * @param identityClusterGroup - Identity cluster group
5938
+ * @param routerClusterGroup - Router cluster group
5939
+ */
5940
+ clearSelectedMarker(identityClusterGroup: any, routerClusterGroup: any): void;
5941
+ /**
5942
+ * Sets a marker as selected and applies visual effects
5943
+ * @param marker - Marker to select
5944
+ * @param identityClusterGroup - Identity cluster group
5945
+ * @param routerClusterGroup - Router cluster group
5946
+ */
5947
+ setSelectedMarker(marker: any, identityClusterGroup: any, routerClusterGroup: any): void;
5948
+ /**
5949
+ * Removes a marker from the map and collections
5950
+ * @param marker - Marker to remove
5951
+ * @param type - 'identity' or 'routers'
5952
+ * @param identityClusterGroup - Identity cluster group
5953
+ * @param routerClusterGroup - Router cluster group
5954
+ * @param routerLocations - Router locations map
5955
+ * @param identityLocations - Identity locations map
5956
+ * @param itemId - Entity ID
5957
+ */
5958
+ removeMarker(marker: any, type: string, identityClusterGroup: any, routerClusterGroup: any, routerLocations: Map<string, any>, identityLocations: Map<string, any>, itemId: string): void;
5959
+ /**
5960
+ * Shows context menu for a marker with drag/drop and remove options
5961
+ * @param event - Leaflet event object
5962
+ * @param marker - Marker to show menu for
5963
+ * @param item - Entity data
5964
+ * @param type - 'identity' or 'routers'
5965
+ * @param routerLocations - Router locations map
5966
+ * @param identityLocations - Identity locations map
5967
+ */
5968
+ private showMarkerContextMenu;
5969
+ /**
5970
+ * Disables dragging on the current draggable marker
5971
+ */
5972
+ disableCurrentDraggableMarker(): void;
5973
+ /**
5974
+ * Clears all markers and resets state
5975
+ */
5976
+ clearAllMarkers(): void;
5977
+ static ɵfac: i0.ɵɵFactoryDeclaration<MapMarkerService, never>;
5978
+ static ɵprov: i0.ɵɵInjectableDeclaration<MapMarkerService>;
5979
+ }
5980
+
5981
+ /**
5982
+ * Service responsible for rendering visual elements on the map
5983
+ * Handles circuit lines, router links, and their styling
5984
+ */
5985
+ declare class MapRenderingService {
5986
+ private circuitCalculationService;
5987
+ private circuitPathBuilderService;
5988
+ circuitLines: any[];
5989
+ activeCircuitLines: any[];
5990
+ linkClicked: EventEmitter<any>;
5991
+ circuitSegmentClicked: EventEmitter<any>;
5992
+ constructor(circuitCalculationService: CircuitCalculationService, circuitPathBuilderService: CircuitPathBuilderService);
5993
+ /**
5994
+ * Draws router links on the map
5995
+ * @param map - Leaflet map instance
5996
+ * @param links - Array of router links
5997
+ * @param routerLocations - Map of router locations
5998
+ * @param edgeRouters - Array of edge routers (for visibility filtering)
5999
+ * @param linksVisible - Whether links should be visible
6000
+ */
6001
+ drawLinks(map: any, links: any[], routerLocations: Map<string, any>, edgeRouters: any[], linksVisible: boolean): void;
6002
+ /**
6003
+ * Draws router links filtered by specific router IDs
6004
+ * @param map - Leaflet map instance
6005
+ * @param links - Array of all router links
6006
+ * @param filteredRouterIds - Set of router IDs to filter by
6007
+ * @param routerLocations - Map of router locations
6008
+ * @param linksVisible - Whether links should be visible
6009
+ */
6010
+ drawFilteredLinks(map: any, links: any[], filteredRouterIds: Set<string>, routerLocations: Map<string, any>, linksVisible: boolean): void;
6011
+ /**
6012
+ * Draws active circuits on the map with complex styling and interactions
6013
+ * @param map - Leaflet map instance
6014
+ * @param circuits - Array of circuits to draw
6015
+ * @param identities - Array of identities
6016
+ * @param identityLocations - Map of identity locations
6017
+ * @param routerLocations - Map of router locations
6018
+ * @param terminators - Array of terminators
6019
+ * @param edgeRouters - Array of edge routers
6020
+ * @param services - Array of services
6021
+ * @param selectedServiceAttributes - Array of selected service attribute filters
6022
+ * @param selectedServiceNamedAttributes - Array of selected service named attribute filters
6023
+ * @param selectedCircuitSegment - Currently selected circuit segment
6024
+ * @param activeCircuitsVisible - Whether active circuits should be visible
6025
+ * @param isCircuitSelectionActive - Whether a specific circuit is selected
6026
+ * @param scaleCircuitMarkersCallback - Callback to scale circuit markers
6027
+ * @returns Set of circuit marker IDs
6028
+ */
6029
+ drawActiveCircuits(map: any, circuits: any[], identities: any[], identityLocations: Map<string, any>, routerLocations: Map<string, any>, terminators: any[], edgeRouters: any[], services: any[], selectedServiceAttributes: any[], selectedServiceNamedAttributes: any[], selectedCircuitSegment: any, activeCircuitsVisible: boolean, isCircuitSelectionActive: boolean, scaleCircuitMarkersCallback: (scaleUp: boolean) => void): Set<string>;
6030
+ /**
6031
+ * Updates visibility of router links
6032
+ * @param map - Leaflet map instance
6033
+ * @param linksVisible - Whether links should be visible
6034
+ */
6035
+ updateLinksVisibility(map: any, linksVisible: boolean): void;
6036
+ /**
6037
+ * Updates visibility of active circuits
6038
+ * @param map - Leaflet map instance
6039
+ * @param activeCircuitsVisible - Whether active circuits should be visible
6040
+ */
6041
+ updateActiveCircuitsVisibility(map: any, activeCircuitsVisible: boolean): void;
6042
+ /**
6043
+ * Clears all circuit and link lines from the map
6044
+ * @param map - Leaflet map instance
6045
+ */
6046
+ clearAllLines(map: any): void;
6047
+ /**
6048
+ * Clears only active circuit lines from the map
6049
+ * @param map - Leaflet map instance
6050
+ */
6051
+ clearActiveCircuitLines(map: any): void;
6052
+ /**
6053
+ * Clears only router link lines from the map
6054
+ * @param map - Leaflet map instance
6055
+ */
6056
+ clearCircuitLines(map: any): void;
6057
+ static ɵfac: i0.ɵɵFactoryDeclaration<MapRenderingService, never>;
6058
+ static ɵprov: i0.ɵɵInjectableDeclaration<MapRenderingService>;
6059
+ }
6060
+
6061
+ /**
6062
+ * Centralized state management service for the geolocate map component
6063
+ * Manages visibility toggles, filter state, side panel state, and entity locations
6064
+ */
6065
+ declare class MapStateService {
6066
+ private _clusteringEnabled$;
6067
+ private _linksVisible$;
6068
+ private _activeCircuitsVisible$;
6069
+ private _routersVisible$;
6070
+ private _identitiesVisible$;
6071
+ private _routerLocations;
6072
+ private _identityLocations;
6073
+ private _routerTypes;
6074
+ private _sidePanelOpen$;
6075
+ private _sidePanelType$;
6076
+ private _sidePanelData$;
6077
+ private _sidePanelCircuits$;
6078
+ private _sidePanelWidth$;
6079
+ private _selectedCircuit$;
6080
+ private _selectedCircuitRouters$;
6081
+ private _selectedCircuitSegment$;
6082
+ private _selectedUnlocatedCircuit$;
6083
+ private _selectedUnlocatedCircuitRouters$;
6084
+ private _selectedServiceAttributes$;
6085
+ private _selectedServiceNamedAttributes$;
6086
+ private _selectedIdentityAttributes$;
6087
+ private _selectedIdentityNamedAttributes$;
6088
+ private _selectedRouterAttributes$;
6089
+ private _selectedConnectionStatus$;
6090
+ private _filtersApplied$;
6091
+ private _showServiceDropdown$;
6092
+ private _showIdentityDropdown$;
6093
+ private _showConnectionStatusFilterSelector$;
6094
+ clusteringEnabled$: Observable<boolean>;
6095
+ linksVisible$: Observable<boolean>;
6096
+ activeCircuitsVisible$: Observable<boolean>;
6097
+ routersVisible$: Observable<boolean>;
6098
+ identitiesVisible$: Observable<boolean>;
6099
+ sidePanelOpen$: Observable<boolean>;
6100
+ sidePanelType$: Observable<"link" | "marker" | "circuit" | "unlocated" | "entityList" | "servicesWithCircuits">;
6101
+ sidePanelData$: Observable<any>;
6102
+ sidePanelCircuits$: Observable<any[]>;
6103
+ sidePanelWidth$: Observable<number>;
6104
+ selectedCircuit$: Observable<any>;
6105
+ selectedCircuitRouters$: Observable<any[]>;
6106
+ selectedCircuitSegment$: Observable<any>;
6107
+ selectedUnlocatedCircuit$: Observable<any>;
6108
+ selectedUnlocatedCircuitRouters$: Observable<any[]>;
6109
+ selectedServiceAttributes$: Observable<any[]>;
6110
+ selectedServiceNamedAttributes$: Observable<any[]>;
6111
+ selectedIdentityAttributes$: Observable<any[]>;
6112
+ selectedIdentityNamedAttributes$: Observable<any[]>;
6113
+ selectedRouterAttributes$: Observable<any[]>;
6114
+ selectedConnectionStatus$: Observable<string>;
6115
+ filtersApplied$: Observable<boolean>;
6116
+ showServiceDropdown$: Observable<boolean>;
6117
+ showIdentityDropdown$: Observable<boolean>;
6118
+ showConnectionStatusFilterSelector$: Observable<boolean>;
6119
+ constructor();
6120
+ get clusteringEnabled(): boolean;
6121
+ set clusteringEnabled(value: boolean);
6122
+ toggleClustering(): void;
6123
+ get linksVisible(): boolean;
6124
+ set linksVisible(value: boolean);
6125
+ toggleLinks(): void;
6126
+ get activeCircuitsVisible(): boolean;
6127
+ set activeCircuitsVisible(value: boolean);
6128
+ toggleActiveCircuits(): void;
6129
+ get routersVisible(): boolean;
6130
+ set routersVisible(value: boolean);
6131
+ toggleRouters(): void;
6132
+ get identitiesVisible(): boolean;
6133
+ set identitiesVisible(value: boolean);
6134
+ toggleIdentities(): void;
6135
+ get routerLocations(): Map<string, {
6136
+ lat: number;
6137
+ lng: number;
6138
+ name: string;
6139
+ }>;
6140
+ setRouterLocation(id: string, location: {
6141
+ lat: number;
6142
+ lng: number;
6143
+ name: string;
6144
+ }): void;
6145
+ removeRouterLocation(id: string): void;
6146
+ clearRouterLocations(): void;
6147
+ get identityLocations(): Map<string, {
6148
+ lat: number;
6149
+ lng: number;
6150
+ name: string;
6151
+ }>;
6152
+ setIdentityLocation(id: string, location: {
6153
+ lat: number;
6154
+ lng: number;
6155
+ name: string;
6156
+ }): void;
6157
+ removeIdentityLocation(id: string): void;
6158
+ clearIdentityLocations(): void;
6159
+ get routerTypes(): Map<string, string>;
6160
+ setRouterTypes(routerTypes: Map<string, string>): void;
6161
+ getRouterType(id: string): string | undefined;
6162
+ get sidePanelOpen(): boolean;
6163
+ set sidePanelOpen(value: boolean);
6164
+ get sidePanelType(): 'marker' | 'link' | 'circuit' | 'unlocated' | 'entityList' | 'servicesWithCircuits' | null;
6165
+ set sidePanelType(value: 'marker' | 'link' | 'circuit' | 'unlocated' | 'entityList' | 'servicesWithCircuits' | null);
6166
+ get sidePanelData(): any;
6167
+ set sidePanelData(value: any);
6168
+ get sidePanelCircuits(): any[];
6169
+ set sidePanelCircuits(value: any[]);
6170
+ get sidePanelWidth(): number;
6171
+ set sidePanelWidth(value: number);
6172
+ openSidePanel(type: 'marker' | 'link' | 'circuit' | 'unlocated' | 'entityList' | 'servicesWithCircuits', data: any): void;
6173
+ closeSidePanel(): void;
6174
+ get selectedCircuit(): any;
6175
+ set selectedCircuit(value: any);
6176
+ get selectedCircuitRouters(): any[];
6177
+ set selectedCircuitRouters(value: any[]);
6178
+ get selectedCircuitSegment(): any;
6179
+ set selectedCircuitSegment(value: any);
6180
+ get selectedUnlocatedCircuit(): any;
6181
+ set selectedUnlocatedCircuit(value: any);
6182
+ get selectedUnlocatedCircuitRouters(): any[];
6183
+ set selectedUnlocatedCircuitRouters(value: any[]);
6184
+ clearSelectedCircuit(): void;
6185
+ clearSelectedUnlocatedCircuit(): void;
6186
+ isCircuitSelectionActive(): boolean;
6187
+ get selectedServiceAttributes(): any[];
6188
+ set selectedServiceAttributes(value: any[]);
6189
+ get selectedServiceNamedAttributes(): any[];
6190
+ set selectedServiceNamedAttributes(value: any[]);
6191
+ get selectedIdentityAttributes(): any[];
6192
+ set selectedIdentityAttributes(value: any[]);
6193
+ get selectedIdentityNamedAttributes(): any[];
6194
+ set selectedIdentityNamedAttributes(value: any[]);
6195
+ get selectedRouterAttributes(): any[];
6196
+ set selectedRouterAttributes(value: any[]);
6197
+ get selectedConnectionStatus(): string;
6198
+ set selectedConnectionStatus(value: string);
6199
+ get filtersApplied(): boolean;
6200
+ set filtersApplied(value: boolean);
6201
+ clearAllFilters(): void;
6202
+ hasActiveFilters(): boolean;
6203
+ get showServiceDropdown(): boolean;
6204
+ set showServiceDropdown(value: boolean);
6205
+ get showIdentityDropdown(): boolean;
6206
+ set showIdentityDropdown(value: boolean);
6207
+ get showConnectionStatusFilterSelector(): boolean;
6208
+ set showConnectionStatusFilterSelector(value: boolean);
6209
+ closeAllDropdowns(): void;
6210
+ /**
6211
+ * Resets all state to initial values
6212
+ */
6213
+ resetState(): void;
6214
+ static ɵfac: i0.ɵɵFactoryDeclaration<MapStateService, never>;
6215
+ static ɵprov: i0.ɵɵInjectableDeclaration<MapStateService>;
6216
+ }
6217
+
5429
6218
  declare class GeolocateComponent implements OnInit, OnDestroy {
5430
- private zitiService;
6219
+ private zitiDataService;
6220
+ private settingsService;
6221
+ private router;
6222
+ private route;
5431
6223
  private growlerService;
5432
- isLoading: boolean;
6224
+ private dialogForm;
6225
+ private geolocationService;
6226
+ private mapDataService;
6227
+ private circuitCalculationService;
6228
+ private circuitPathBuilderService;
6229
+ private circuitFilterService;
6230
+ mapMarkerService: MapMarkerService;
6231
+ mapRenderingService: MapRenderingService;
6232
+ mapStateService: MapStateService;
5433
6233
  map: any;
6234
+ identityClusterGroup: any;
6235
+ routerClusterGroup: any;
5434
6236
  pageTitle: string;
5435
6237
  totalIdentities: number;
5436
6238
  totalServices: number;
@@ -5439,71 +6241,1316 @@ declare class GeolocateComponent implements OnInit, OnDestroy {
5439
6241
  totalServicePolicies: number;
5440
6242
  totalSessions: number;
5441
6243
  showVisualizer: boolean;
5442
- markers: any[];
6244
+ DEBUG_TEST_LINK_LATENCY: boolean;
6245
+ unlocatedIdentities: number;
6246
+ unlocatedRouters: number;
6247
+ servicesWithActiveCircuits: number;
6248
+ geolocatedIdentities: number;
6249
+ geolocatedRouters: number;
6250
+ servicesWithCircuitsSearch: string;
6251
+ unlocatedIdentitiesSearch: string;
6252
+ filteredUnlocatedIdentities: any[];
6253
+ unlocatedRoutersSearch: string;
6254
+ filteredUnlocatedRouters: any[];
6255
+ entityListSearch: string;
6256
+ entityListPage: number;
6257
+ entityListPageSize: number;
6258
+ entityListTotal: number;
6259
+ filteredEntityList: any[];
6260
+ fullEntityList: any[];
6261
+ entityListType: string;
6262
+ entityListSortColumn: string;
6263
+ entityListSortDirection: 'asc' | 'desc';
6264
+ entityListLocationFilter: 'all' | 'located' | 'unlocated';
6265
+ private draggedEntity;
6266
+ private draggedEntityType;
6267
+ circuits: any[];
6268
+ terminators: any[];
6269
+ identities: any[];
6270
+ edgeRouters: any[];
6271
+ services: any[];
6272
+ links: any[];
6273
+ entityListPreview: any;
6274
+ entityListPreviewType: 'identity' | 'routers' | 'services' | null;
6275
+ selectedRouterInPath: string | null;
6276
+ circuitPreviewEntity: any;
6277
+ circuitPreviewEntityType: string;
6278
+ unlocatedPreviewEntity: any;
6279
+ unlocatedPreviewType: string;
6280
+ unlocatedPreviewHasUnsavedLocation: boolean;
6281
+ unlocatedPreviewCircuits: any[];
6282
+ isResizing: boolean;
6283
+ minPanelWidth: number;
6284
+ maxPanelWidth: number;
6285
+ startX: number;
6286
+ startWidth: number;
6287
+ selectedServiceFilters: any[];
6288
+ selectedIdentityFilters: any[];
6289
+ serviceRoleAttributes: any[];
6290
+ serviceNamedAttributes: any[];
6291
+ servicesNameIdMap: {
6292
+ [key: string]: string;
6293
+ };
6294
+ servicesIdNameMap: {
6295
+ [key: string]: string;
6296
+ };
6297
+ identityRoleAttributes: any[];
6298
+ identityNamedAttributes: any[];
6299
+ identitiesNameIdMap: {
6300
+ [key: string]: string;
6301
+ };
6302
+ identitiesIdNameMap: {
6303
+ [key: string]: string;
6304
+ };
6305
+ routerRoleAttributes: any[];
5443
6306
  private subscription;
6307
+ private documentClickHandler;
5444
6308
  edgeRoutersInit: boolean;
5445
6309
  identitiesInit: boolean;
5446
- constructor(zitiService: ZitiDataService, growlerService: GrowlerService);
6310
+ isLoading: boolean;
6311
+ Math: Math;
6312
+ dialogRef: any;
6313
+ constructor(zitiDataService: ZitiDataService, settingsService: SettingsService, router: Router, route: ActivatedRoute, growlerService: GrowlerService, dialogForm: MatDialog, geolocationService: GeolocationService, mapDataService: MapDataService, circuitCalculationService: CircuitCalculationService, circuitPathBuilderService: CircuitPathBuilderService, circuitFilterService: CircuitFilterService, mapMarkerService: MapMarkerService, mapRenderingService: MapRenderingService, mapStateService: MapStateService);
6314
+ get selectedRouterAttributes(): any[];
6315
+ set selectedRouterAttributes(value: any[]);
6316
+ get selectedIdentityAttributes(): any[];
6317
+ set selectedIdentityAttributes(value: any[]);
6318
+ get selectedIdentityNamedAttributes(): any[];
6319
+ set selectedIdentityNamedAttributes(value: any[]);
6320
+ get selectedServiceAttributes(): any[];
6321
+ set selectedServiceAttributes(value: any[]);
6322
+ get selectedServiceNamedAttributes(): any[];
6323
+ set selectedServiceNamedAttributes(value: any[]);
6324
+ get selectedConnectionStatus(): string;
6325
+ set selectedConnectionStatus(value: string);
6326
+ get filtersApplied(): boolean;
6327
+ set filtersApplied(value: boolean);
6328
+ get showConnectionStatusFilterSelector(): boolean;
6329
+ set showConnectionStatusFilterSelector(value: boolean);
6330
+ get sidePanelOpen(): boolean;
6331
+ set sidePanelOpen(value: boolean);
6332
+ get sidePanelType(): any;
6333
+ set sidePanelType(value: any);
6334
+ get sidePanelData(): any;
6335
+ set sidePanelData(value: any);
6336
+ get sidePanelCircuits(): any[];
6337
+ set sidePanelCircuits(value: any[]);
6338
+ get routersVisible(): boolean;
6339
+ set routersVisible(value: boolean);
6340
+ get identitiesVisible(): boolean;
6341
+ set identitiesVisible(value: boolean);
6342
+ get linksVisible(): boolean;
6343
+ set linksVisible(value: boolean);
6344
+ get activeCircuitsVisible(): boolean;
6345
+ set activeCircuitsVisible(value: boolean);
6346
+ get clusteringEnabled(): boolean;
6347
+ set clusteringEnabled(value: boolean);
6348
+ get selectedCircuit(): any;
6349
+ set selectedCircuit(value: any);
6350
+ get selectedCircuitRouters(): any[];
6351
+ set selectedCircuitRouters(value: any[]);
6352
+ get selectedCircuitSegment(): any;
6353
+ set selectedCircuitSegment(value: any);
6354
+ get selectedUnlocatedCircuit(): any;
6355
+ set selectedUnlocatedCircuit(value: any);
6356
+ get selectedUnlocatedCircuitRouters(): any[];
6357
+ set selectedUnlocatedCircuitRouters(value: any[]);
6358
+ routerFilterSelector: any;
6359
+ identityFilterSelector: any;
6360
+ serviceFilterSelector: any;
6361
+ connectionStatusFilterSelector: ElementRef;
5447
6362
  ngOnInit(): void;
5448
- loadEntityCounts(): void;
5449
- loadMapData(): void;
5450
- addMarkers(data: any[], type: string): void;
6363
+ getRoleAttributest(): Promise<[void, void, void]>;
6364
+ getRouterRoleAttributes(): Promise<any>;
6365
+ getIdentityRoleAttributes(): Promise<any>;
6366
+ getServiceRoleAttributes(): Promise<any>;
6367
+ loadEntityCounts(): Promise<void>;
6368
+ loadMapData(): Promise<void>;
6369
+ loadRouters(): Promise<{
6370
+ data: any[];
6371
+ }>;
6372
+ loadIdentities(): Promise<void>;
6373
+ loadServices(): Promise<void>;
6374
+ addMarkers(data: any[], type: string, skipAutoFit?: boolean): void;
6375
+ loadLinks(): void;
6376
+ loadCircuits(): void;
6377
+ loadTerminators(): void;
6378
+ drawLinks(links: any[]): void;
6379
+ toggleClustering(): void;
6380
+ checkLinks(): void;
6381
+ toggleLinks(): void;
5451
6382
  checkVisualizerFeature(): void;
6383
+ disableMapScroll(): void;
6384
+ enableMapScroll(): void;
6385
+ getFilteredIdentityIds(): Set<string>;
6386
+ getFilteredRouterIds(): Set<string>;
6387
+ applyFilters(): void;
6388
+ showAllMarkers(): void;
6389
+ drawFilteredLinks(filteredRouterIds: Set<string>): void;
6390
+ drawActiveCircuits(circuits: any[], isSelectedCircuit?: boolean): void;
6391
+ scaleCircuitMarkers(scaleUp: boolean): void;
6392
+ applyMarkerOpacity(selectedMarker: any, opacity?: number): void;
6393
+ resetMarkerOpacity(): void;
6394
+ toggleActiveCircuits(): void;
6395
+ toggleRouters(): void;
6396
+ toggleIdentities(): void;
6397
+ checkRouters(): void;
6398
+ checkIdentities(): void;
6399
+ getMarkerIdentityId(marker: any): string | null;
6400
+ getMarkerRouterId(marker: any): string | null;
6401
+ showRouterFilterSelector: boolean;
6402
+ showRouterFilter(event?: any): void;
6403
+ closeRouterFilter(event?: any): void;
6404
+ showIdentityFilterSelector: boolean;
6405
+ showIdentityFilter(event?: any): void;
6406
+ closeIdentityFilter(event?: any): void;
6407
+ showServiceFilterSelector: boolean;
6408
+ showServiceFilter(event?: any): void;
6409
+ closeServiceFilter(event?: any): void;
6410
+ showConnectionStatusFilter(event?: any): void;
6411
+ closeConnectionStatusFilter(event?: any): void;
6412
+ onConnectionStatusChange(newStatus?: string): void;
6413
+ clearFilters(event: any): void;
6414
+ onRouterRoleAttributesChange(attributes: any[]): void;
6415
+ onIdentityRoleAttributesChange(attributes: any[]): void;
6416
+ onIdentityNamedAttributesChange(attributes: any[]): void;
6417
+ getIdentityNamedAttributes(filter?: string): void;
6418
+ onServiceRoleAttributesChange(attributes: any[]): void;
6419
+ onServiceNamedAttributesChange(attributes: any[]): void;
6420
+ getServiceNamedAttributes(filter?: string): void;
6421
+ checkAppliedFilters(): void;
6422
+ reloadMapDataWithFilters(): void;
6423
+ filterCircuitsAndRouters(): void;
6424
+ openSidePanel(type: 'marker' | 'link' | 'circuit' | 'unlocated' | 'entityList' | 'servicesWithCircuits', data: any): void;
6425
+ showUnlocatedEntities(): void;
6426
+ showUnlocatedIdentities(): void;
6427
+ showUnlocatedRouters(): void;
6428
+ showServicesWithActiveCircuits(): void;
6429
+ onServicesWithCircuitsSearchChange(search: string): void;
6430
+ onUnlocatedIdentitiesSearchChange(search: string): void;
6431
+ onUnlocatedRoutersSearchChange(search: string): void;
6432
+ showLocatedIdentities(): void;
6433
+ showLocatedRouters(): void;
6434
+ showAllServices(): void;
6435
+ initializeEntityList(entities: any[], type: string): void;
6436
+ applyEntityListFilters(): void;
6437
+ onEntityListSearchChange(search: string): void;
6438
+ onEntityListPageChange(page: number): void;
6439
+ onEntityListSortChange(sort: {
6440
+ column: string;
6441
+ direction: 'asc' | 'desc';
6442
+ }): void;
6443
+ onEntityListLocationFilterChange(filter: 'all' | 'located' | 'unlocated'): void;
6444
+ get entityListTotalPages(): number;
6445
+ get entityListPageNumbers(): number[];
6446
+ openEntityPreview(entity: any, type: string): void;
6447
+ onDragStart(event: DragEvent, entity: any, type: string): void;
6448
+ onMapDragOver(event: DragEvent): void;
6449
+ onMapDrop(event: DragEvent): void;
6450
+ onMapDragLeave(event: DragEvent): void;
6451
+ closeSidePanel(): void;
6452
+ navigateToDetails(type: string, id: string): void;
6453
+ navigateToCircuitEntity(id: string, type: string): void;
6454
+ openRouterPanel(router: any): void;
6455
+ handleEntityListClick(entity: any): void;
6456
+ showEntityListPreview(entity: any, type: 'identity' | 'routers' | 'services'): void;
6457
+ closeEntityListPreview(): void;
6458
+ openIdentityPanel(identity: any): void;
6459
+ openServicePanel(service: any): void;
6460
+ openEntityPanel(entityId: string, entityType: string): void;
6461
+ parseConnectionType(type: string): string;
6462
+ parseEndpoint(endpoint: string): {
6463
+ protocol: string;
6464
+ address: string;
6465
+ port: string;
6466
+ };
6467
+ updateGeolocationLocal(item: any, lat: number, lng: number, type: string): void;
6468
+ handleGeolocationRemoval(item: any, type: string, marker: any): void;
6469
+ updateEntityListAfterLocationChange(): void;
6470
+ navigateToRoleAttribute(role: string): void;
6471
+ getEntityOnlineStatus(item: any): boolean;
6472
+ hasUnsavedLocationChanges(item: any): boolean;
6473
+ saveLocationChanges(item: any, type: string): Promise<void>;
6474
+ saveUnlocatedPreviewEntity(): Promise<void>;
6475
+ getEntityCircuits(entityId: string, entityType: string): any[];
6476
+ clearActiveCircuits(): void;
6477
+ isCircuitSelectionActive(): boolean;
6478
+ selectCircuit(circuit: any, isUnlocatedPanel?: boolean): void;
6479
+ getCircuitRouters(circuit: any): any[];
6480
+ findMarkerByItemId(itemId: string, itemType: string): any;
6481
+ updateMarkerIcon(marker: any, isSelected: boolean): void;
6482
+ buildCircuitHops(data: any): any[];
6483
+ buildCircuitRouters(pathNodes: any[]): any[];
6484
+ selectCircuitHop(hop: any, index: number): void;
6485
+ selectCircuitRouter(routerId: string, routerType: string): void;
6486
+ closeCircuitPreview(): void;
6487
+ openCircuitPreview(circuit: any, event?: Event): void;
6488
+ private handleDocumentClick;
6489
+ onResizerMouseDown(event: MouseEvent): void;
6490
+ private onMouseMove;
6491
+ onMouseUp(): void;
5452
6492
  ngOnDestroy(): void;
5453
6493
  static ɵfac: i0.ɵɵFactoryDeclaration<GeolocateComponent, never>;
5454
6494
  static ɵcmp: i0.ɵɵComponentDeclaration<GeolocateComponent, "lib-geolocate", never, {}, {}, never, never, false, never>;
5455
6495
  }
5456
6496
 
5457
- declare class AttributesComponent implements OnInit, OnDestroy {
5458
- private zitiDataService;
5459
- private route;
5460
- attributes: any[];
5461
- identities: any[];
5462
- services: any[];
5463
- edgeRouters: any[];
5464
- postureChecks: any[];
5465
- identityAttributes: any[];
5466
- edgeRouterAttributes: any[];
5467
- serviceAttributes: any[];
5468
- selectedAttribute: any;
5469
- private subscription;
5470
- constructor(zitiDataService: ZitiDataService, route: ActivatedRoute);
5471
- ngOnInit(): void;
5472
- loadData(): void;
5473
- attributesLoaded(): void;
5474
- calculateAttributes(): void;
5475
- countOccurrences(items: any[], attribute: string): number;
5476
- getAssociatedItems(items: any[], attribute: string): string;
5477
- editAttribute(attributeName: string): void;
5478
- closeModal(): void;
5479
- ngOnDestroy(): void;
5480
- static ɵfac: i0.ɵɵFactoryDeclaration<AttributesComponent, never>;
5481
- static ɵcmp: i0.ɵɵComponentDeclaration<AttributesComponent, "lib-attributes", never, {}, {}, never, never, false, never>;
6497
+ declare class MapLegendComponent {
6498
+ routersVisible: boolean;
6499
+ identitiesVisible: boolean;
6500
+ linksVisible: boolean;
6501
+ activeCircuitsVisible: boolean;
6502
+ clusteringEnabled: boolean;
6503
+ isCircuitSelectionActive: boolean;
6504
+ routersToggled: EventEmitter<void>;
6505
+ identitiesToggled: EventEmitter<void>;
6506
+ linksToggled: EventEmitter<void>;
6507
+ activeCircuitsToggled: EventEmitter<void>;
6508
+ clusteringToggled: EventEmitter<void>;
6509
+ static ɵfac: i0.ɵɵFactoryDeclaration<MapLegendComponent, never>;
6510
+ static ɵcmp: i0.ɵɵComponentDeclaration<MapLegendComponent, "lib-map-legend", never, { "routersVisible": { "alias": "routersVisible"; "required": false; }; "identitiesVisible": { "alias": "identitiesVisible"; "required": false; }; "linksVisible": { "alias": "linksVisible"; "required": false; }; "activeCircuitsVisible": { "alias": "activeCircuitsVisible"; "required": false; }; "clusteringEnabled": { "alias": "clusteringEnabled"; "required": false; }; "isCircuitSelectionActive": { "alias": "isCircuitSelectionActive"; "required": false; }; }, { "routersToggled": "routersToggled"; "identitiesToggled": "identitiesToggled"; "linksToggled": "linksToggled"; "activeCircuitsToggled": "activeCircuitsToggled"; "clusteringToggled": "clusteringToggled"; }, never, never, false, never>;
6511
+ }
6512
+
6513
+ declare class EntityCountLegendComponent {
6514
+ geolocatedIdentities: number;
6515
+ unlocatedIdentities: number;
6516
+ geolocatedRouters: number;
6517
+ unlocatedRouters: number;
6518
+ totalServices: number;
6519
+ servicesWithActiveCircuits: number;
6520
+ totalActiveCircuits: number;
6521
+ showLocatedIdentitiesClicked: EventEmitter<void>;
6522
+ showUnlocatedIdentitiesClicked: EventEmitter<void>;
6523
+ showLocatedRoutersClicked: EventEmitter<void>;
6524
+ showUnlocatedRoutersClicked: EventEmitter<void>;
6525
+ showAllServicesClicked: EventEmitter<void>;
6526
+ showServicesWithActiveCircuitsClicked: EventEmitter<void>;
6527
+ get totalIdentities(): number;
6528
+ get totalRouters(): number;
6529
+ static ɵfac: i0.ɵɵFactoryDeclaration<EntityCountLegendComponent, never>;
6530
+ static ɵcmp: i0.ɵɵComponentDeclaration<EntityCountLegendComponent, "lib-entity-count-legend", never, { "geolocatedIdentities": { "alias": "geolocatedIdentities"; "required": false; }; "unlocatedIdentities": { "alias": "unlocatedIdentities"; "required": false; }; "geolocatedRouters": { "alias": "geolocatedRouters"; "required": false; }; "unlocatedRouters": { "alias": "unlocatedRouters"; "required": false; }; "totalServices": { "alias": "totalServices"; "required": false; }; "servicesWithActiveCircuits": { "alias": "servicesWithActiveCircuits"; "required": false; }; "totalActiveCircuits": { "alias": "totalActiveCircuits"; "required": false; }; }, { "showLocatedIdentitiesClicked": "showLocatedIdentitiesClicked"; "showUnlocatedIdentitiesClicked": "showUnlocatedIdentitiesClicked"; "showLocatedRoutersClicked": "showLocatedRoutersClicked"; "showUnlocatedRoutersClicked": "showUnlocatedRoutersClicked"; "showAllServicesClicked": "showAllServicesClicked"; "showServicesWithActiveCircuitsClicked": "showServicesWithActiveCircuitsClicked"; }, never, never, false, never>;
6531
+ }
6532
+
6533
+ declare class CircuitHopsTableComponent implements OnChanges {
6534
+ circuitHops: CircuitHop[];
6535
+ selectedSegmentIndex: number | null;
6536
+ hopSelected: EventEmitter<{
6537
+ hop: CircuitHop;
6538
+ index: number;
6539
+ }>;
6540
+ ngOnChanges(changes: SimpleChanges): void;
6541
+ static ɵfac: i0.ɵɵFactoryDeclaration<CircuitHopsTableComponent, never>;
6542
+ static ɵcmp: i0.ɵɵComponentDeclaration<CircuitHopsTableComponent, "lib-circuit-hops-table", never, { "circuitHops": { "alias": "circuitHops"; "required": false; }; "selectedSegmentIndex": { "alias": "selectedSegmentIndex"; "required": false; }; }, { "hopSelected": "hopSelected"; }, never, never, false, never>;
5482
6543
  }
5483
6544
 
5484
- declare class SideNavigatorComponent implements OnInit, OnDestroy {
5485
- private router;
5486
- currentNav: any;
5487
- version: string;
5488
- currentNetwork: any;
5489
- navExpanded: boolean;
5490
- navHidden: boolean;
5491
- hideMenuNavBar: boolean;
5492
- betaFeaturesEnabled: boolean;
5493
- private routerSubscription?;
5494
- private selectedNavItem;
5495
- constructor(router: Router, currentNav: any);
5496
- ngOnInit(): void;
5497
- ngOnDestroy(): void;
5498
- private updateSelectedNavItem;
5499
- private getRouteMatchScore;
5500
- private calculateMatchScore;
5501
- navItemSelected(navItem: any): boolean;
5502
- isNavItemDisabled(navItem: any): void;
5503
- doNavAction(event: any, navItem: any): void;
5504
- showExpandCollapseIcon: boolean;
5505
- showExpandCollapseIconChange: EventEmitter<boolean>;
5506
- showExpandCollapse(event: any): void;
6545
+ interface CircuitRouter {
6546
+ id: string;
6547
+ name: string;
6548
+ type: string;
6549
+ [key: string]: any;
6550
+ }
6551
+ declare class RouterPathTableComponent implements OnChanges {
6552
+ private cdr;
6553
+ circuitRouters: CircuitRouter[];
6554
+ selectedRouterId: string | null;
6555
+ routerSelected: EventEmitter<{
6556
+ routerId: string;
6557
+ routerType: string;
6558
+ }>;
6559
+ entityPanelOpened: EventEmitter<{
6560
+ entityId: string;
6561
+ entityType: string;
6562
+ }>;
6563
+ displayRouters: CircuitRouter[];
6564
+ constructor(cdr: ChangeDetectorRef);
6565
+ ngOnChanges(changes: SimpleChanges): void;
6566
+ /**
6567
+ * Handle opening entity panel
6568
+ */
6569
+ onOpenEntityPanel(router: CircuitRouter, event: Event): void;
6570
+ static ɵfac: i0.ɵɵFactoryDeclaration<RouterPathTableComponent, never>;
6571
+ static ɵcmp: i0.ɵɵComponentDeclaration<RouterPathTableComponent, "lib-router-path-table", never, { "circuitRouters": { "alias": "circuitRouters"; "required": false; }; "selectedRouterId": { "alias": "selectedRouterId"; "required": false; }; }, { "routerSelected": "routerSelected"; "entityPanelOpened": "entityPanelOpened"; }, never, never, false, never>;
6572
+ }
6573
+
6574
+ declare class GeolocateFilterBarComponent implements OnChanges {
6575
+ private cdr;
6576
+ selectedRouterAttributes: any[];
6577
+ selectedIdentityAttributes: any[];
6578
+ selectedIdentityNamedAttributes: any[];
6579
+ selectedServiceAttributes: any[];
6580
+ selectedServiceNamedAttributes: any[];
6581
+ selectedConnectionStatus: string;
6582
+ routerRoleAttributes: any[];
6583
+ identityRoleAttributes: any[];
6584
+ identityNamedAttributes: any[];
6585
+ serviceRoleAttributes: any[];
6586
+ serviceNamedAttributes: any[];
6587
+ filtersApplied: boolean;
6588
+ showRouterFilterSelector: boolean;
6589
+ showIdentityFilterSelector: boolean;
6590
+ showServiceFilterSelector: boolean;
6591
+ showConnectionStatusFilterSelector: boolean;
6592
+ routerFilterClicked: EventEmitter<Event>;
6593
+ identityFilterClicked: EventEmitter<Event>;
6594
+ serviceFilterClicked: EventEmitter<Event>;
6595
+ connectionStatusFilterClicked: EventEmitter<Event>;
6596
+ routerFilterClosed: EventEmitter<Event>;
6597
+ identityFilterClosed: EventEmitter<Event>;
6598
+ serviceFilterClosed: EventEmitter<Event>;
6599
+ connectionStatusFilterClosed: EventEmitter<Event>;
6600
+ routerRoleAttributesChanged: EventEmitter<any>;
6601
+ identityNamedAttributesChanged: EventEmitter<any>;
6602
+ identityRoleAttributesChanged: EventEmitter<any>;
6603
+ serviceNamedAttributesChanged: EventEmitter<any>;
6604
+ serviceRoleAttributesChanged: EventEmitter<any>;
6605
+ connectionStatusChanged: EventEmitter<any>;
6606
+ identityFilterChanged: EventEmitter<any>;
6607
+ serviceFilterChanged: EventEmitter<any>;
6608
+ clearFiltersClicked: EventEmitter<Event>;
6609
+ selectedRouterAttributesChange: EventEmitter<any[]>;
6610
+ selectedIdentityAttributesChange: EventEmitter<any[]>;
6611
+ selectedIdentityNamedAttributesChange: EventEmitter<any[]>;
6612
+ selectedServiceAttributesChange: EventEmitter<any[]>;
6613
+ selectedServiceNamedAttributesChange: EventEmitter<any[]>;
6614
+ selectedConnectionStatusChange: EventEmitter<string>;
6615
+ routerFilterSelector: any;
6616
+ identityFilterSelector: any;
6617
+ serviceFilterSelector: any;
6618
+ connectionStatusFilterSelector: any;
6619
+ constructor(cdr: ChangeDetectorRef);
6620
+ ngOnChanges(changes: SimpleChanges): void;
6621
+ static ɵfac: i0.ɵɵFactoryDeclaration<GeolocateFilterBarComponent, never>;
6622
+ static ɵcmp: i0.ɵɵComponentDeclaration<GeolocateFilterBarComponent, "lib-geolocate-filter-bar", never, { "selectedRouterAttributes": { "alias": "selectedRouterAttributes"; "required": false; }; "selectedIdentityAttributes": { "alias": "selectedIdentityAttributes"; "required": false; }; "selectedIdentityNamedAttributes": { "alias": "selectedIdentityNamedAttributes"; "required": false; }; "selectedServiceAttributes": { "alias": "selectedServiceAttributes"; "required": false; }; "selectedServiceNamedAttributes": { "alias": "selectedServiceNamedAttributes"; "required": false; }; "selectedConnectionStatus": { "alias": "selectedConnectionStatus"; "required": false; }; "routerRoleAttributes": { "alias": "routerRoleAttributes"; "required": false; }; "identityRoleAttributes": { "alias": "identityRoleAttributes"; "required": false; }; "identityNamedAttributes": { "alias": "identityNamedAttributes"; "required": false; }; "serviceRoleAttributes": { "alias": "serviceRoleAttributes"; "required": false; }; "serviceNamedAttributes": { "alias": "serviceNamedAttributes"; "required": false; }; "filtersApplied": { "alias": "filtersApplied"; "required": false; }; "showRouterFilterSelector": { "alias": "showRouterFilterSelector"; "required": false; }; "showIdentityFilterSelector": { "alias": "showIdentityFilterSelector"; "required": false; }; "showServiceFilterSelector": { "alias": "showServiceFilterSelector"; "required": false; }; "showConnectionStatusFilterSelector": { "alias": "showConnectionStatusFilterSelector"; "required": false; }; }, { "routerFilterClicked": "routerFilterClicked"; "identityFilterClicked": "identityFilterClicked"; "serviceFilterClicked": "serviceFilterClicked"; "connectionStatusFilterClicked": "connectionStatusFilterClicked"; "routerFilterClosed": "routerFilterClosed"; "identityFilterClosed": "identityFilterClosed"; "serviceFilterClosed": "serviceFilterClosed"; "connectionStatusFilterClosed": "connectionStatusFilterClosed"; "routerRoleAttributesChanged": "routerRoleAttributesChanged"; "identityNamedAttributesChanged": "identityNamedAttributesChanged"; "identityRoleAttributesChanged": "identityRoleAttributesChanged"; "serviceNamedAttributesChanged": "serviceNamedAttributesChanged"; "serviceRoleAttributesChanged": "serviceRoleAttributesChanged"; "connectionStatusChanged": "connectionStatusChanged"; "identityFilterChanged": "identityFilterChanged"; "serviceFilterChanged": "serviceFilterChanged"; "clearFiltersClicked": "clearFiltersClicked"; "selectedRouterAttributesChange": "selectedRouterAttributesChange"; "selectedIdentityAttributesChange": "selectedIdentityAttributesChange"; "selectedIdentityNamedAttributesChange": "selectedIdentityNamedAttributesChange"; "selectedServiceAttributesChange": "selectedServiceAttributesChange"; "selectedServiceNamedAttributesChange": "selectedServiceNamedAttributesChange"; "selectedConnectionStatusChange": "selectedConnectionStatusChange"; }, never, ["*"], false, never>;
6623
+ }
6624
+
6625
+ declare class SidePanelContainerComponent implements OnInit, OnDestroy, OnChanges {
6626
+ isOpen: boolean;
6627
+ panelType: 'marker' | 'link' | 'circuit' | 'unlocated' | 'entityList' | 'servicesWithCircuits' | null;
6628
+ panelData: any;
6629
+ sidePanelCircuits: any[];
6630
+ selectedCircuit: any;
6631
+ selectedCircuitRouters: any[];
6632
+ selectedCircuitSegment: any;
6633
+ selectedRouterInPath: string | null;
6634
+ circuitPreviewEntity: any;
6635
+ circuitPreviewEntityType: string;
6636
+ entityListType: string;
6637
+ entityListSearch: string;
6638
+ entityListPage: number;
6639
+ entityListPageSize: number;
6640
+ entityListTotal: number;
6641
+ filteredEntityList: any[];
6642
+ entityListPreview: any;
6643
+ entityListLocationFilter: 'all' | 'located' | 'unlocated';
6644
+ filteredUnlocatedIdentities: any[];
6645
+ filteredUnlocatedRouters: any[];
6646
+ unlocatedIdentitiesSearch: string;
6647
+ unlocatedRoutersSearch: string;
6648
+ unlocatedPreviewEntity: any;
6649
+ unlocatedPreviewType: string;
6650
+ unlocatedPreviewCircuits: any[];
6651
+ unlocatedPreviewHasUnsavedLocation: boolean;
6652
+ selectedUnlocatedCircuit: any;
6653
+ selectedUnlocatedCircuitRouters: any[];
6654
+ allCircuits: any[];
6655
+ allIdentities: any[];
6656
+ allRouters: any[];
6657
+ allTerminators: any[];
6658
+ servicesWithCircuitsSearch: string;
6659
+ closed: EventEmitter<void>;
6660
+ circuitSelected: EventEmitter<any>;
6661
+ routerInPathSelected: EventEmitter<{
6662
+ routerId: string;
6663
+ routerType: string;
6664
+ }>;
6665
+ saveLocationChanges: EventEmitter<{
6666
+ item: any;
6667
+ type: string;
6668
+ }>;
6669
+ navigateToDetails: EventEmitter<{
6670
+ type: string;
6671
+ id: string;
6672
+ }>;
6673
+ circuitPreviewOpened: EventEmitter<any>;
6674
+ roleAttributeNavigated: EventEmitter<string>;
6675
+ hopSelected: EventEmitter<{
6676
+ hop: any;
6677
+ index: number;
6678
+ }>;
6679
+ routerSelected: EventEmitter<{
6680
+ routerId: string;
6681
+ routerType: string;
6682
+ }>;
6683
+ entityClicked: EventEmitter<{
6684
+ entityId: string;
6685
+ entityType: string;
6686
+ }>;
6687
+ serviceClicked: EventEmitter<any>;
6688
+ circuitPreviewClosed: EventEmitter<void>;
6689
+ entityPanelOpened: EventEmitter<{
6690
+ entityId: string;
6691
+ entityType: string;
6692
+ }>;
6693
+ routerClicked: EventEmitter<any>;
6694
+ entityListSearchChanged: EventEmitter<string>;
6695
+ entityListPageChanged: EventEmitter<number>;
6696
+ entityListSortChanged: EventEmitter<{
6697
+ column: string;
6698
+ direction: "asc" | "desc";
6699
+ }>;
6700
+ entityListLocationFilterChanged: EventEmitter<"all" | "unlocated" | "located">;
6701
+ entityListEntityClicked: EventEmitter<any>;
6702
+ entityListPreviewClosed: EventEmitter<void>;
6703
+ unlocatedIdentitiesSearchChanged: EventEmitter<string>;
6704
+ unlocatedRoutersSearchChanged: EventEmitter<string>;
6705
+ unlocatedEntityDragStarted: EventEmitter<{
6706
+ event: DragEvent;
6707
+ entity: any;
6708
+ type: string;
6709
+ }>;
6710
+ unlocatedEntityClicked: EventEmitter<{
6711
+ entity: any;
6712
+ type: string;
6713
+ }>;
6714
+ unlocatedPreviewClosed: EventEmitter<void>;
6715
+ unlocatedSaveLocationClicked: EventEmitter<void>;
6716
+ servicesSearchChanged: EventEmitter<string>;
6717
+ sidePanelWidth: number;
6718
+ isResizing: boolean;
6719
+ minPanelWidth: number;
6720
+ maxPanelWidth: number;
6721
+ startX: number;
6722
+ startWidth: number;
6723
+ private mouseMoveSubscription?;
6724
+ private mouseUpSubscription?;
6725
+ Math: Math;
6726
+ ngOnInit(): void;
6727
+ ngOnChanges(changes: SimpleChanges): void;
6728
+ ngOnDestroy(): void;
6729
+ /**
6730
+ * Get header class based on panel type and data
6731
+ */
6732
+ getHeaderClass(): string;
6733
+ /**
6734
+ * Get panel title based on panel type and data
6735
+ */
6736
+ getPanelTitle(): string;
6737
+ /**
6738
+ * Get title icon class based on panel type
6739
+ */
6740
+ getTitleIconClass(): string;
6741
+ /**
6742
+ * Close the side panel
6743
+ */
6744
+ closePanel(): void;
6745
+ /**
6746
+ * Handle resize mouse down
6747
+ */
6748
+ onResizerMouseDown(event: MouseEvent): void;
6749
+ /**
6750
+ * Handle mouse move during resize
6751
+ */
6752
+ private onMouseMove;
6753
+ /**
6754
+ * Handle mouse up after resize
6755
+ */
6756
+ private onMouseUp;
6757
+ /**
6758
+ * Update CSS variable for panel width
6759
+ */
6760
+ private updatePanelWidth;
6761
+ /**
6762
+ * Cleanup mouse event listeners
6763
+ */
6764
+ private cleanupMouseListeners;
6765
+ static ɵfac: i0.ɵɵFactoryDeclaration<SidePanelContainerComponent, never>;
6766
+ static ɵcmp: i0.ɵɵComponentDeclaration<SidePanelContainerComponent, "lib-side-panel-container", never, { "isOpen": { "alias": "isOpen"; "required": false; }; "panelType": { "alias": "panelType"; "required": false; }; "panelData": { "alias": "panelData"; "required": false; }; "sidePanelCircuits": { "alias": "sidePanelCircuits"; "required": false; }; "selectedCircuit": { "alias": "selectedCircuit"; "required": false; }; "selectedCircuitRouters": { "alias": "selectedCircuitRouters"; "required": false; }; "selectedCircuitSegment": { "alias": "selectedCircuitSegment"; "required": false; }; "selectedRouterInPath": { "alias": "selectedRouterInPath"; "required": false; }; "circuitPreviewEntity": { "alias": "circuitPreviewEntity"; "required": false; }; "circuitPreviewEntityType": { "alias": "circuitPreviewEntityType"; "required": false; }; "entityListType": { "alias": "entityListType"; "required": false; }; "entityListSearch": { "alias": "entityListSearch"; "required": false; }; "entityListPage": { "alias": "entityListPage"; "required": false; }; "entityListPageSize": { "alias": "entityListPageSize"; "required": false; }; "entityListTotal": { "alias": "entityListTotal"; "required": false; }; "filteredEntityList": { "alias": "filteredEntityList"; "required": false; }; "entityListPreview": { "alias": "entityListPreview"; "required": false; }; "entityListLocationFilter": { "alias": "entityListLocationFilter"; "required": false; }; "filteredUnlocatedIdentities": { "alias": "filteredUnlocatedIdentities"; "required": false; }; "filteredUnlocatedRouters": { "alias": "filteredUnlocatedRouters"; "required": false; }; "unlocatedIdentitiesSearch": { "alias": "unlocatedIdentitiesSearch"; "required": false; }; "unlocatedRoutersSearch": { "alias": "unlocatedRoutersSearch"; "required": false; }; "unlocatedPreviewEntity": { "alias": "unlocatedPreviewEntity"; "required": false; }; "unlocatedPreviewType": { "alias": "unlocatedPreviewType"; "required": false; }; "unlocatedPreviewCircuits": { "alias": "unlocatedPreviewCircuits"; "required": false; }; "unlocatedPreviewHasUnsavedLocation": { "alias": "unlocatedPreviewHasUnsavedLocation"; "required": false; }; "selectedUnlocatedCircuit": { "alias": "selectedUnlocatedCircuit"; "required": false; }; "selectedUnlocatedCircuitRouters": { "alias": "selectedUnlocatedCircuitRouters"; "required": false; }; "allCircuits": { "alias": "allCircuits"; "required": false; }; "allIdentities": { "alias": "allIdentities"; "required": false; }; "allRouters": { "alias": "allRouters"; "required": false; }; "allTerminators": { "alias": "allTerminators"; "required": false; }; "servicesWithCircuitsSearch": { "alias": "servicesWithCircuitsSearch"; "required": false; }; }, { "closed": "closed"; "circuitSelected": "circuitSelected"; "routerInPathSelected": "routerInPathSelected"; "saveLocationChanges": "saveLocationChanges"; "navigateToDetails": "navigateToDetails"; "circuitPreviewOpened": "circuitPreviewOpened"; "roleAttributeNavigated": "roleAttributeNavigated"; "hopSelected": "hopSelected"; "routerSelected": "routerSelected"; "entityClicked": "entityClicked"; "serviceClicked": "serviceClicked"; "circuitPreviewClosed": "circuitPreviewClosed"; "entityPanelOpened": "entityPanelOpened"; "routerClicked": "routerClicked"; "entityListSearchChanged": "entityListSearchChanged"; "entityListPageChanged": "entityListPageChanged"; "entityListSortChanged": "entityListSortChanged"; "entityListLocationFilterChanged": "entityListLocationFilterChanged"; "entityListEntityClicked": "entityListEntityClicked"; "entityListPreviewClosed": "entityListPreviewClosed"; "unlocatedIdentitiesSearchChanged": "unlocatedIdentitiesSearchChanged"; "unlocatedRoutersSearchChanged": "unlocatedRoutersSearchChanged"; "unlocatedEntityDragStarted": "unlocatedEntityDragStarted"; "unlocatedEntityClicked": "unlocatedEntityClicked"; "unlocatedPreviewClosed": "unlocatedPreviewClosed"; "unlocatedSaveLocationClicked": "unlocatedSaveLocationClicked"; "servicesSearchChanged": "servicesSearchChanged"; }, never, never, false, never>;
6767
+ }
6768
+
6769
+ interface ServiceGroup$3 {
6770
+ serviceName: string;
6771
+ serviceId: string;
6772
+ circuits: any[];
6773
+ expanded: boolean;
6774
+ sortBy?: 'created';
6775
+ sortDirection?: 'asc' | 'desc';
6776
+ }
6777
+ declare class MarkerPanelComponent implements OnChanges {
6778
+ private circuitCalculationService;
6779
+ markerData: any;
6780
+ circuits: any[];
6781
+ selectedCircuit: any;
6782
+ selectedCircuitRouters: any[];
6783
+ selectedRouterInPath: string | null;
6784
+ allIdentities: any[];
6785
+ allRouters: any[];
6786
+ allTerminators: any[];
6787
+ circuitSelected: EventEmitter<any>;
6788
+ routerInPathSelected: EventEmitter<{
6789
+ routerId: string;
6790
+ routerType: string;
6791
+ }>;
6792
+ saveLocationChanges: EventEmitter<{
6793
+ item: any;
6794
+ type: string;
6795
+ }>;
6796
+ navigateToDetails: EventEmitter<{
6797
+ type: string;
6798
+ id: string;
6799
+ }>;
6800
+ circuitPreviewOpened: EventEmitter<any>;
6801
+ roleAttributeNavigated: EventEmitter<string>;
6802
+ panelClosed: EventEmitter<void>;
6803
+ serviceGroups: ServiceGroup$3[];
6804
+ constructor(circuitCalculationService: CircuitCalculationService);
6805
+ ngOnChanges(changes: SimpleChanges): void;
6806
+ /**
6807
+ * Get entity online status
6808
+ */
6809
+ getEntityOnlineStatus(entity: any): boolean;
6810
+ /**
6811
+ * Check if entity has unsaved location changes
6812
+ */
6813
+ hasUnsavedLocationChanges(item: any): boolean;
6814
+ /**
6815
+ * Select a circuit
6816
+ */
6817
+ onCircuitSelect(circuit: any, event?: MouseEvent): void;
6818
+ /**
6819
+ * Open circuit preview (detail view)
6820
+ */
6821
+ onCircuitPreviewOpen(circuit: any, event: MouseEvent): void;
6822
+ /**
6823
+ * Select a router in the circuit path
6824
+ */
6825
+ onRouterInPathSelect(routerId: string, routerType: string): void;
6826
+ /**
6827
+ * Save location changes for the entity
6828
+ */
6829
+ onSaveLocationChanges(): void;
6830
+ /**
6831
+ * Navigate to entity details page
6832
+ */
6833
+ onNavigateToDetails(): void;
6834
+ /**
6835
+ * Close the marker panel
6836
+ */
6837
+ onCancel(): void;
6838
+ /**
6839
+ * Navigate to role attribute
6840
+ */
6841
+ onRoleAttributeClick(role: string): void;
6842
+ /**
6843
+ * Update service groups - group circuits by service and apply filtering
6844
+ */
6845
+ updateServiceGroups(): void;
6846
+ /**
6847
+ * Toggle service group expansion
6848
+ */
6849
+ toggleGroup(group: ServiceGroup$3, event?: Event): void;
6850
+ /**
6851
+ * Toggle sort for a service group
6852
+ */
6853
+ toggleSort(group: ServiceGroup$3): void;
6854
+ /**
6855
+ * Get entity name and type from ID
6856
+ */
6857
+ getEntityInfo(entityId: string): {
6858
+ name: string;
6859
+ type: 'identity' | 'router';
6860
+ };
6861
+ /**
6862
+ * Compute client entity info from circuit (called once during data processing)
6863
+ */
6864
+ private computeClientInfo;
6865
+ /**
6866
+ * Compute host entity info from circuit (called once during data processing)
6867
+ */
6868
+ private computeHostInfo;
6869
+ /**
6870
+ * Get cached client entity info from circuit (used in templates)
6871
+ */
6872
+ getClientInfo(circuit: any): {
6873
+ name: string;
6874
+ type: 'identity' | 'router';
6875
+ };
6876
+ /**
6877
+ * Get cached host entity info from circuit (used in templates)
6878
+ */
6879
+ getHostInfo(circuit: any): {
6880
+ name: string;
6881
+ type: 'identity' | 'router';
6882
+ };
6883
+ /**
6884
+ * Get sorted circuits for a group - dual sort with created date as primary when active
6885
+ */
6886
+ getSortedCircuits(group: ServiceGroup$3): any[];
6887
+ static ɵfac: i0.ɵɵFactoryDeclaration<MarkerPanelComponent, never>;
6888
+ static ɵcmp: i0.ɵɵComponentDeclaration<MarkerPanelComponent, "lib-marker-panel", never, { "markerData": { "alias": "markerData"; "required": false; }; "circuits": { "alias": "circuits"; "required": false; }; "selectedCircuit": { "alias": "selectedCircuit"; "required": false; }; "selectedCircuitRouters": { "alias": "selectedCircuitRouters"; "required": false; }; "selectedRouterInPath": { "alias": "selectedRouterInPath"; "required": false; }; "allIdentities": { "alias": "allIdentities"; "required": false; }; "allRouters": { "alias": "allRouters"; "required": false; }; "allTerminators": { "alias": "allTerminators"; "required": false; }; }, { "circuitSelected": "circuitSelected"; "routerInPathSelected": "routerInPathSelected"; "saveLocationChanges": "saveLocationChanges"; "navigateToDetails": "navigateToDetails"; "circuitPreviewOpened": "circuitPreviewOpened"; "roleAttributeNavigated": "roleAttributeNavigated"; "panelClosed": "panelClosed"; }, never, never, false, never>;
6889
+ }
6890
+
6891
+ declare class LinkPanelComponent {
6892
+ linkData: any;
6893
+ routerClicked: EventEmitter<any>;
6894
+ /**
6895
+ * Parse connection type
6896
+ */
6897
+ parseConnectionType(type: string): string;
6898
+ /**
6899
+ * Parse connection endpoint (e.g., "tls:10.0.0.1:443")
6900
+ */
6901
+ parseEndpoint(endpoint: string): {
6902
+ protocol: string;
6903
+ address: string;
6904
+ port: string;
6905
+ };
6906
+ /**
6907
+ * Handle router click
6908
+ */
6909
+ onRouterClick(router: any): void;
6910
+ static ɵfac: i0.ɵɵFactoryDeclaration<LinkPanelComponent, never>;
6911
+ static ɵcmp: i0.ɵɵComponentDeclaration<LinkPanelComponent, "lib-link-panel", never, { "linkData": { "alias": "linkData"; "required": false; }; }, { "routerClicked": "routerClicked"; }, never, never, false, never>;
6912
+ }
6913
+
6914
+ declare class CircuitPanelComponent {
6915
+ circuitData: any;
6916
+ selectedSegmentIndex: number | null;
6917
+ selectedRouterId: string | null;
6918
+ previewEntity: any;
6919
+ previewEntityType: string;
6920
+ hopSelected: EventEmitter<{
6921
+ hop: any;
6922
+ index: number;
6923
+ }>;
6924
+ routerSelected: EventEmitter<{
6925
+ routerId: string;
6926
+ routerType: string;
6927
+ }>;
6928
+ entityClicked: EventEmitter<{
6929
+ entityId: string;
6930
+ entityType: string;
6931
+ }>;
6932
+ serviceClicked: EventEmitter<any>;
6933
+ previewClosed: EventEmitter<void>;
6934
+ navigateToDetails: EventEmitter<{
6935
+ type: string;
6936
+ id: string;
6937
+ }>;
6938
+ entityPanelOpened: EventEmitter<{
6939
+ entityId: string;
6940
+ entityType: string;
6941
+ }>;
6942
+ /**
6943
+ * Handle hop selection from circuit hops table
6944
+ */
6945
+ onHopSelected(event: {
6946
+ hop: any;
6947
+ index: number;
6948
+ }): void;
6949
+ /**
6950
+ * Handle router selection from router path table
6951
+ */
6952
+ onRouterSelected(event: {
6953
+ routerId: string;
6954
+ routerType: string;
6955
+ }): void;
6956
+ /**
6957
+ * Handle entity click (identity/router in circuit endpoints)
6958
+ */
6959
+ onEntityClick(entityId: string, entityType: string): void;
6960
+ /**
6961
+ * Handle service click
6962
+ */
6963
+ onServiceClick(service: any): void;
6964
+ /**
6965
+ * Close the entity preview
6966
+ */
6967
+ closePreview(): void;
6968
+ /**
6969
+ * Handle navigate to details from router path table
6970
+ */
6971
+ onNavigateToDetails(event: {
6972
+ type: string;
6973
+ id: string;
6974
+ }): void;
6975
+ /**
6976
+ * Handle entity panel opening from router path table or preview
6977
+ */
6978
+ onEntityPanelOpened(event: {
6979
+ entityId: string;
6980
+ entityType: string;
6981
+ }): void;
6982
+ static ɵfac: i0.ɵɵFactoryDeclaration<CircuitPanelComponent, never>;
6983
+ static ɵcmp: i0.ɵɵComponentDeclaration<CircuitPanelComponent, "lib-circuit-panel", never, { "circuitData": { "alias": "circuitData"; "required": false; }; "selectedSegmentIndex": { "alias": "selectedSegmentIndex"; "required": false; }; "selectedRouterId": { "alias": "selectedRouterId"; "required": false; }; "previewEntity": { "alias": "previewEntity"; "required": false; }; "previewEntityType": { "alias": "previewEntityType"; "required": false; }; }, { "hopSelected": "hopSelected"; "routerSelected": "routerSelected"; "entityClicked": "entityClicked"; "serviceClicked": "serviceClicked"; "previewClosed": "previewClosed"; "navigateToDetails": "navigateToDetails"; "entityPanelOpened": "entityPanelOpened"; }, never, never, false, never>;
6984
+ }
6985
+
6986
+ interface ServiceGroup$2 {
6987
+ serviceName: string;
6988
+ serviceId: string;
6989
+ circuits: any[];
6990
+ expanded: boolean;
6991
+ sortBy?: 'created';
6992
+ sortDirection?: 'asc' | 'desc';
6993
+ }
6994
+ declare class EntityListPanelComponent implements OnChanges {
6995
+ entityType: string;
6996
+ entities: any[];
6997
+ currentPage: number;
6998
+ pageSize: number;
6999
+ totalEntities: number;
7000
+ searchTerm: string;
7001
+ previewEntity: any;
7002
+ previewCircuits: any[];
7003
+ selectedCircuit: any;
7004
+ selectedCircuitRouters: any[];
7005
+ selectedRouterInPath: string | null;
7006
+ Math: any;
7007
+ allIdentities: any[];
7008
+ allRouters: any[];
7009
+ locationFilter: 'all' | 'located' | 'unlocated';
7010
+ searchChanged: EventEmitter<string>;
7011
+ pageChanged: EventEmitter<number>;
7012
+ locationFilterChanged: EventEmitter<"all" | "unlocated" | "located">;
7013
+ entityClicked: EventEmitter<any>;
7014
+ previewClosed: EventEmitter<void>;
7015
+ circuitSelected: EventEmitter<any>;
7016
+ routerInPathSelected: EventEmitter<{
7017
+ routerId: string;
7018
+ routerType: string;
7019
+ }>;
7020
+ saveLocationChanges: EventEmitter<{
7021
+ item: any;
7022
+ type: string;
7023
+ }>;
7024
+ navigateToDetails: EventEmitter<{
7025
+ type: string;
7026
+ id: string;
7027
+ }>;
7028
+ circuitPreviewOpened: EventEmitter<any>;
7029
+ roleAttributeNavigated: EventEmitter<string>;
7030
+ sortChanged: EventEmitter<{
7031
+ column: string;
7032
+ direction: "asc" | "desc";
7033
+ }>;
7034
+ entityDragStarted: EventEmitter<{
7035
+ event: DragEvent;
7036
+ entity: any;
7037
+ type: string;
7038
+ }>;
7039
+ sortColumn: string;
7040
+ sortDirection: 'asc' | 'desc';
7041
+ serviceGroups: ServiceGroup$2[];
7042
+ ngOnChanges(changes: SimpleChanges): void;
7043
+ /**
7044
+ * Get total pages
7045
+ */
7046
+ get totalPages(): number;
7047
+ /**
7048
+ * Toggle sort for a column
7049
+ */
7050
+ toggleSort(column: string): void;
7051
+ /**
7052
+ * Get page numbers for pagination display
7053
+ */
7054
+ get pageNumbers(): number[];
7055
+ /**
7056
+ * Handle search input change
7057
+ */
7058
+ onSearchChange(search: string): void;
7059
+ /**
7060
+ * Handle location filter change
7061
+ */
7062
+ onLocationFilterChange(filter: 'all' | 'located' | 'unlocated'): void;
7063
+ /**
7064
+ * Handle page change
7065
+ */
7066
+ onPageChange(page: number): void;
7067
+ /**
7068
+ * Handle drag start for unlocated entities
7069
+ */
7070
+ onDragStart(event: DragEvent, entity: any): void;
7071
+ /**
7072
+ * Handle entity row click
7073
+ */
7074
+ onEntityClick(entity: any): void;
7075
+ /**
7076
+ * Close preview pane
7077
+ */
7078
+ onPreviewClose(): void;
7079
+ /**
7080
+ * Get entity online status
7081
+ */
7082
+ getEntityOnlineStatus(entity: any): boolean;
7083
+ /**
7084
+ * Check if entity has unsaved location changes
7085
+ */
7086
+ hasUnsavedLocationChanges(item: any): boolean;
7087
+ /**
7088
+ * Select a circuit
7089
+ */
7090
+ onCircuitSelect(circuit: any, event?: MouseEvent): void;
7091
+ /**
7092
+ * Open circuit preview
7093
+ */
7094
+ onCircuitPreviewOpen(circuit: any, event: MouseEvent): void;
7095
+ /**
7096
+ * Select router in path
7097
+ */
7098
+ onRouterInPathSelect(routerId: string, routerType: string): void;
7099
+ /**
7100
+ * Save location changes
7101
+ */
7102
+ onSaveLocationChanges(): void;
7103
+ /**
7104
+ * Navigate to details
7105
+ */
7106
+ onNavigateToDetails(): void;
7107
+ /**
7108
+ * Navigate to role attribute
7109
+ */
7110
+ onRoleAttributeClick(role: string, event?: Event): void;
7111
+ /**
7112
+ * Update service groups - group circuits by service and apply filtering
7113
+ */
7114
+ updateServiceGroups(): void;
7115
+ /**
7116
+ * Toggle service group expansion
7117
+ */
7118
+ toggleGroup(group: ServiceGroup$2, event?: Event): void;
7119
+ /**
7120
+ * Toggle sort for a service group
7121
+ */
7122
+ toggleCircuitSort(group: ServiceGroup$2): void;
7123
+ /**
7124
+ * Get entity name and type from ID
7125
+ */
7126
+ getEntityInfo(entityId: string): {
7127
+ name: string;
7128
+ type: 'identity' | 'router';
7129
+ };
7130
+ /**
7131
+ * Compute client entity info from circuit (called once during data processing)
7132
+ */
7133
+ private computeClientInfo;
7134
+ /**
7135
+ * Compute host entity info from circuit (called once during data processing)
7136
+ */
7137
+ private computeHostInfo;
7138
+ /**
7139
+ * Get cached client entity info from circuit (used in templates)
7140
+ */
7141
+ getClientInfo(circuit: any): {
7142
+ name: string;
7143
+ type: 'identity' | 'router';
7144
+ };
7145
+ /**
7146
+ * Get cached host entity info from circuit (used in templates)
7147
+ */
7148
+ getHostInfo(circuit: any): {
7149
+ name: string;
7150
+ type: 'identity' | 'router';
7151
+ };
7152
+ /**
7153
+ * Get sorted circuits for a group - dual sort with created date as primary when active
7154
+ */
7155
+ getSortedCircuits(group: ServiceGroup$2): any[];
7156
+ static ɵfac: i0.ɵɵFactoryDeclaration<EntityListPanelComponent, never>;
7157
+ static ɵcmp: i0.ɵɵComponentDeclaration<EntityListPanelComponent, "lib-entity-list-panel", never, { "entityType": { "alias": "entityType"; "required": false; }; "entities": { "alias": "entities"; "required": false; }; "currentPage": { "alias": "currentPage"; "required": false; }; "pageSize": { "alias": "pageSize"; "required": false; }; "totalEntities": { "alias": "totalEntities"; "required": false; }; "searchTerm": { "alias": "searchTerm"; "required": false; }; "previewEntity": { "alias": "previewEntity"; "required": false; }; "previewCircuits": { "alias": "previewCircuits"; "required": false; }; "selectedCircuit": { "alias": "selectedCircuit"; "required": false; }; "selectedCircuitRouters": { "alias": "selectedCircuitRouters"; "required": false; }; "selectedRouterInPath": { "alias": "selectedRouterInPath"; "required": false; }; "Math": { "alias": "Math"; "required": false; }; "allIdentities": { "alias": "allIdentities"; "required": false; }; "allRouters": { "alias": "allRouters"; "required": false; }; "locationFilter": { "alias": "locationFilter"; "required": false; }; }, { "searchChanged": "searchChanged"; "pageChanged": "pageChanged"; "locationFilterChanged": "locationFilterChanged"; "entityClicked": "entityClicked"; "previewClosed": "previewClosed"; "circuitSelected": "circuitSelected"; "routerInPathSelected": "routerInPathSelected"; "saveLocationChanges": "saveLocationChanges"; "navigateToDetails": "navigateToDetails"; "circuitPreviewOpened": "circuitPreviewOpened"; "roleAttributeNavigated": "roleAttributeNavigated"; "sortChanged": "sortChanged"; "entityDragStarted": "entityDragStarted"; }, never, never, false, never>;
7158
+ }
7159
+
7160
+ interface ServiceGroup$1 {
7161
+ serviceName: string;
7162
+ serviceId: string;
7163
+ circuits: any[];
7164
+ expanded: boolean;
7165
+ sortBy?: 'created';
7166
+ sortDirection?: 'asc' | 'desc';
7167
+ }
7168
+ declare class UnlocatedPanelComponent implements OnChanges {
7169
+ unlocatedData: any;
7170
+ filteredIdentities: any[];
7171
+ filteredRouters: any[];
7172
+ identitiesSearch: string;
7173
+ routersSearch: string;
7174
+ previewEntity: any;
7175
+ previewType: string;
7176
+ previewCircuits: any[];
7177
+ previewHasUnsavedLocation: boolean;
7178
+ selectedCircuit: any;
7179
+ selectedCircuitRouters: any[];
7180
+ selectedRouterInPath: string | null;
7181
+ allIdentities: any[];
7182
+ allRouters: any[];
7183
+ identitiesSearchChanged: EventEmitter<string>;
7184
+ routersSearchChanged: EventEmitter<string>;
7185
+ entityDragStarted: EventEmitter<{
7186
+ event: DragEvent;
7187
+ entity: any;
7188
+ type: string;
7189
+ }>;
7190
+ entityClicked: EventEmitter<{
7191
+ entity: any;
7192
+ type: string;
7193
+ }>;
7194
+ previewClosed: EventEmitter<void>;
7195
+ saveLocationClicked: EventEmitter<void>;
7196
+ circuitSelected: EventEmitter<any>;
7197
+ routerInPathSelected: EventEmitter<{
7198
+ routerId: string;
7199
+ routerType: string;
7200
+ }>;
7201
+ navigateToDetails: EventEmitter<{
7202
+ type: string;
7203
+ id: string;
7204
+ }>;
7205
+ circuitPreviewOpened: EventEmitter<any>;
7206
+ roleAttributeNavigated: EventEmitter<string>;
7207
+ serviceGroups: ServiceGroup$1[];
7208
+ ngOnChanges(changes: SimpleChanges): void;
7209
+ /**
7210
+ * Handle identities search change
7211
+ */
7212
+ onIdentitiesSearchChange(search: string): void;
7213
+ /**
7214
+ * Handle routers search change
7215
+ */
7216
+ onRoutersSearchChange(search: string): void;
7217
+ /**
7218
+ * Handle drag start
7219
+ */
7220
+ onDragStart(event: DragEvent, entity: any, type: string): void;
7221
+ /**
7222
+ * Handle entity click
7223
+ */
7224
+ onEntityClick(entity: any, type: string): void;
7225
+ /**
7226
+ * Close preview
7227
+ */
7228
+ onPreviewClose(): void;
7229
+ /**
7230
+ * Save location
7231
+ */
7232
+ onSaveLocation(): void;
7233
+ /**
7234
+ * Get entity online status
7235
+ */
7236
+ getEntityOnlineStatus(entity: any): boolean;
7237
+ /**
7238
+ * Select a circuit
7239
+ */
7240
+ onCircuitSelect(circuit: any, event?: MouseEvent): void;
7241
+ /**
7242
+ * Open circuit preview
7243
+ */
7244
+ onCircuitPreviewOpen(circuit: any, event: MouseEvent): void;
7245
+ /**
7246
+ * Select router in path
7247
+ */
7248
+ onRouterInPathSelect(routerId: string, routerType: string): void;
7249
+ /**
7250
+ * Navigate to details
7251
+ */
7252
+ onNavigateToDetails(): void;
7253
+ /**
7254
+ * Navigate to role attribute
7255
+ */
7256
+ onRoleAttributeClick(role: string, event?: Event): void;
7257
+ /**
7258
+ * Update service groups - group circuits by service and apply filtering
7259
+ */
7260
+ updateServiceGroups(): void;
7261
+ /**
7262
+ * Toggle service group expansion
7263
+ */
7264
+ toggleGroup(group: ServiceGroup$1, event?: Event): void;
7265
+ /**
7266
+ * Toggle sort for a service group
7267
+ */
7268
+ toggleCircuitSort(group: ServiceGroup$1): void;
7269
+ /**
7270
+ * Get entity name and type from ID
7271
+ */
7272
+ getEntityInfo(entityId: string): {
7273
+ name: string;
7274
+ type: 'identity' | 'router';
7275
+ };
7276
+ /**
7277
+ * Get client entity info from circuit
7278
+ */
7279
+ getClientInfo(circuit: any): {
7280
+ name: string;
7281
+ type: 'identity' | 'router';
7282
+ };
7283
+ /**
7284
+ * Get host entity info from circuit
7285
+ */
7286
+ getHostInfo(circuit: any): {
7287
+ name: string;
7288
+ type: 'identity' | 'router';
7289
+ };
7290
+ /**
7291
+ * Get sorted circuits for a group - dual sort with created date as primary when active
7292
+ */
7293
+ getSortedCircuits(group: ServiceGroup$1): any[];
7294
+ static ɵfac: i0.ɵɵFactoryDeclaration<UnlocatedPanelComponent, never>;
7295
+ static ɵcmp: i0.ɵɵComponentDeclaration<UnlocatedPanelComponent, "lib-unlocated-panel", never, { "unlocatedData": { "alias": "unlocatedData"; "required": false; }; "filteredIdentities": { "alias": "filteredIdentities"; "required": false; }; "filteredRouters": { "alias": "filteredRouters"; "required": false; }; "identitiesSearch": { "alias": "identitiesSearch"; "required": false; }; "routersSearch": { "alias": "routersSearch"; "required": false; }; "previewEntity": { "alias": "previewEntity"; "required": false; }; "previewType": { "alias": "previewType"; "required": false; }; "previewCircuits": { "alias": "previewCircuits"; "required": false; }; "previewHasUnsavedLocation": { "alias": "previewHasUnsavedLocation"; "required": false; }; "selectedCircuit": { "alias": "selectedCircuit"; "required": false; }; "selectedCircuitRouters": { "alias": "selectedCircuitRouters"; "required": false; }; "selectedRouterInPath": { "alias": "selectedRouterInPath"; "required": false; }; "allIdentities": { "alias": "allIdentities"; "required": false; }; "allRouters": { "alias": "allRouters"; "required": false; }; }, { "identitiesSearchChanged": "identitiesSearchChanged"; "routersSearchChanged": "routersSearchChanged"; "entityDragStarted": "entityDragStarted"; "entityClicked": "entityClicked"; "previewClosed": "previewClosed"; "saveLocationClicked": "saveLocationClicked"; "circuitSelected": "circuitSelected"; "routerInPathSelected": "routerInPathSelected"; "navigateToDetails": "navigateToDetails"; "circuitPreviewOpened": "circuitPreviewOpened"; "roleAttributeNavigated": "roleAttributeNavigated"; }, never, never, false, never>;
7296
+ }
7297
+
7298
+ interface ServiceGroup {
7299
+ serviceName: string;
7300
+ serviceId: string;
7301
+ circuits: any[];
7302
+ expanded: boolean;
7303
+ sortBy?: 'created';
7304
+ sortDirection?: 'asc' | 'desc';
7305
+ }
7306
+ declare class ServicesWithCircuitsPanelComponent implements OnChanges {
7307
+ allCircuits: any[];
7308
+ allIdentities: any[];
7309
+ allRouters: any[];
7310
+ searchTerm: string;
7311
+ selectedCircuit: any;
7312
+ searchChanged: EventEmitter<string>;
7313
+ circuitSelected: EventEmitter<any>;
7314
+ circuitPreviewOpened: EventEmitter<any>;
7315
+ serviceGroups: ServiceGroup[];
7316
+ totalCircuits: number;
7317
+ previewCircuit: any;
7318
+ ngOnChanges(changes: SimpleChanges): void;
7319
+ /**
7320
+ * Update service groups - group circuits by service and apply search filter
7321
+ */
7322
+ updateServiceGroups(): void;
7323
+ /**
7324
+ * Handle search input change
7325
+ */
7326
+ onSearchChange(search: string): void;
7327
+ /**
7328
+ * Handle circuit row click - opens preview and displays on map
7329
+ */
7330
+ onCircuitClick(circuit: any, event?: Event): void;
7331
+ /**
7332
+ * Close the circuit preview
7333
+ */
7334
+ closePreview(): void;
7335
+ /**
7336
+ * View full circuit details - opens full circuit panel
7337
+ */
7338
+ viewFullCircuitDetails(): void;
7339
+ /**
7340
+ * Toggle service group expansion
7341
+ */
7342
+ toggleGroup(group: ServiceGroup, event?: Event): void;
7343
+ /**
7344
+ * Get entity name and type from ID
7345
+ */
7346
+ getEntityInfo(entityId: string): {
7347
+ name: string;
7348
+ type: 'identity' | 'router';
7349
+ };
7350
+ /**
7351
+ * Compute client entity info from circuit (called once during data processing)
7352
+ */
7353
+ private computeClientInfo;
7354
+ /**
7355
+ * Compute host entity info from circuit (called once during data processing)
7356
+ */
7357
+ private computeHostInfo;
7358
+ /**
7359
+ * Get cached client entity info from circuit (used in templates)
7360
+ */
7361
+ getClientInfo(circuit: any): {
7362
+ name: string;
7363
+ type: 'identity' | 'router';
7364
+ };
7365
+ /**
7366
+ * Get cached host entity info from circuit (used in templates)
7367
+ */
7368
+ getHostInfo(circuit: any): {
7369
+ name: string;
7370
+ type: 'identity' | 'router';
7371
+ };
7372
+ /**
7373
+ * Get total circuits across all groups
7374
+ */
7375
+ getTotalCircuitsInGroups(): number;
7376
+ /**
7377
+ * Toggle sort for a service group
7378
+ */
7379
+ toggleSort(group: ServiceGroup): void;
7380
+ /**
7381
+ * Get sorted circuits for a group - always dual sort by client name first, then by created date
7382
+ */
7383
+ getSortedCircuits(group: ServiceGroup): any[];
7384
+ static ɵfac: i0.ɵɵFactoryDeclaration<ServicesWithCircuitsPanelComponent, never>;
7385
+ static ɵcmp: i0.ɵɵComponentDeclaration<ServicesWithCircuitsPanelComponent, "lib-services-with-circuits-panel", never, { "allCircuits": { "alias": "allCircuits"; "required": false; }; "allIdentities": { "alias": "allIdentities"; "required": false; }; "allRouters": { "alias": "allRouters"; "required": false; }; "searchTerm": { "alias": "searchTerm"; "required": false; }; "selectedCircuit": { "alias": "selectedCircuit"; "required": false; }; }, { "searchChanged": "searchChanged"; "circuitSelected": "circuitSelected"; "circuitPreviewOpened": "circuitPreviewOpened"; }, never, never, false, never>;
7386
+ }
7387
+
7388
+ interface HAController {
7389
+ url: string;
7390
+ name: string;
7391
+ isOnline: boolean;
7392
+ lastHealthCheck: Date | null;
7393
+ lastResponseTime: number | null;
7394
+ sessionToken: string | null;
7395
+ }
7396
+ interface HAClusterStatus {
7397
+ enabled: boolean;
7398
+ controllers: HAController[];
7399
+ onlineCount: number;
7400
+ totalCount: number;
7401
+ }
7402
+ declare class HAControllerService {
7403
+ private httpClient;
7404
+ private _clusterStatus$;
7405
+ clusterStatus$: Observable<HAClusterStatus>;
7406
+ private healthCheckSubscription;
7407
+ private readonly HEALTH_CHECK_INTERVAL;
7408
+ constructor(httpClient: HttpClient);
7409
+ /**
7410
+ * Initialize HA cluster with discovered controllers
7411
+ */
7412
+ initializeCluster(controllers: HAController[]): void;
7413
+ /**
7414
+ * Add a controller to the HA cluster
7415
+ */
7416
+ addController(controller: HAController): void;
7417
+ /**
7418
+ * Remove a controller from the HA cluster
7419
+ */
7420
+ removeController(controllerUrl: string): void;
7421
+ /**
7422
+ * Update session token for a controller
7423
+ */
7424
+ updateSessionToken(controllerUrl: string, token: string): void;
7425
+ /**
7426
+ * Get session token for a specific controller
7427
+ */
7428
+ getSessionToken(controllerUrl: string): string | null;
7429
+ /**
7430
+ * Get all online controllers
7431
+ */
7432
+ getOnlineControllers(): HAController[];
7433
+ /**
7434
+ * Get all controllers with valid sessions
7435
+ */
7436
+ getControllersWithSessions(): HAController[];
7437
+ /**
7438
+ * Check if HA is enabled
7439
+ */
7440
+ isHAEnabled(): boolean;
7441
+ /**
7442
+ * Perform health check on a single controller
7443
+ */
7444
+ private checkControllerHealth;
7445
+ /**
7446
+ * Perform health checks on all controllers
7447
+ */
7448
+ private performHealthChecks;
7449
+ /**
7450
+ * Start periodic health checks
7451
+ */
7452
+ private startHealthChecks;
7453
+ /**
7454
+ * Stop periodic health checks
7455
+ */
7456
+ private stopHealthChecks;
7457
+ /**
7458
+ * Reset HA cluster (disable and clear all controllers)
7459
+ */
7460
+ reset(): void;
7461
+ /**
7462
+ * Cleanup on service destruction
7463
+ */
7464
+ ngOnDestroy(): void;
7465
+ /**
7466
+ * Save cluster status to localStorage
7467
+ */
7468
+ private saveClusterStatus;
7469
+ /**
7470
+ * Restore cluster status from localStorage
7471
+ */
7472
+ private restoreClusterStatus;
7473
+ /**
7474
+ * Clear cluster status from localStorage
7475
+ */
7476
+ private clearClusterStatus;
7477
+ static ɵfac: i0.ɵɵFactoryDeclaration<HAControllerService, never>;
7478
+ static ɵprov: i0.ɵɵInjectableDeclaration<HAControllerService>;
7479
+ }
7480
+
7481
+ declare class HaStatusIndicatorComponent implements OnInit, OnDestroy {
7482
+ private haControllerService;
7483
+ clusterStatus: HAClusterStatus | null;
7484
+ isExpanded: boolean;
7485
+ private subscription;
7486
+ constructor(haControllerService: HAControllerService);
7487
+ ngOnInit(): void;
7488
+ ngOnDestroy(): void;
7489
+ toggleExpanded(): void;
7490
+ getControllerStatusClass(controller: HAController): string;
7491
+ getControllerIcon(controller: HAController): string;
7492
+ formatResponseTime(controller: HAController): string;
7493
+ formatLastCheck(controller: HAController): string;
7494
+ get statusSummary(): string;
7495
+ get statusIcon(): string;
7496
+ get statusClass(): string;
7497
+ static ɵfac: i0.ɵɵFactoryDeclaration<HaStatusIndicatorComponent, never>;
7498
+ static ɵcmp: i0.ɵɵComponentDeclaration<HaStatusIndicatorComponent, "lib-ha-status-indicator", never, {}, {}, never, never, false, never>;
7499
+ }
7500
+
7501
+ declare class AttributesComponent implements OnInit, OnDestroy {
7502
+ private zitiDataService;
7503
+ private route;
7504
+ attributes: any[];
7505
+ identities: any[];
7506
+ services: any[];
7507
+ edgeRouters: any[];
7508
+ postureChecks: any[];
7509
+ identityAttributes: any[];
7510
+ edgeRouterAttributes: any[];
7511
+ serviceAttributes: any[];
7512
+ selectedAttribute: any;
7513
+ private subscription;
7514
+ constructor(zitiDataService: ZitiDataService, route: ActivatedRoute);
7515
+ ngOnInit(): void;
7516
+ loadData(): void;
7517
+ attributesLoaded(): void;
7518
+ calculateAttributes(): void;
7519
+ countOccurrences(items: any[], attribute: string): number;
7520
+ getAssociatedItems(items: any[], attribute: string): string;
7521
+ editAttribute(attributeName: string): void;
7522
+ closeModal(): void;
7523
+ ngOnDestroy(): void;
7524
+ static ɵfac: i0.ɵɵFactoryDeclaration<AttributesComponent, never>;
7525
+ static ɵcmp: i0.ɵɵComponentDeclaration<AttributesComponent, "lib-attributes", never, {}, {}, never, never, false, never>;
7526
+ }
7527
+
7528
+ declare class SideNavigatorComponent implements OnInit, OnDestroy {
7529
+ private router;
7530
+ currentNav: any;
7531
+ private haControllerService;
7532
+ version: string;
7533
+ currentNetwork: any;
7534
+ navExpanded: boolean;
7535
+ navHidden: boolean;
7536
+ hideMenuNavBar: boolean;
7537
+ betaFeaturesEnabled: boolean;
7538
+ isHAEnabled: boolean;
7539
+ private routerSubscription?;
7540
+ private haSubscription?;
7541
+ private selectedNavItem;
7542
+ constructor(router: Router, currentNav: any, haControllerService: HAControllerService);
7543
+ ngOnInit(): void;
7544
+ ngOnDestroy(): void;
7545
+ private updateSelectedNavItem;
7546
+ private getRouteMatchScore;
7547
+ private calculateMatchScore;
7548
+ navItemSelected(navItem: any): boolean;
7549
+ isNavItemDisabled(navItem: any): void;
7550
+ doNavAction(event: any, navItem: any): void;
7551
+ showExpandCollapseIcon: boolean;
7552
+ showExpandCollapseIconChange: EventEmitter<boolean>;
7553
+ showExpandCollapse(event: any): void;
5507
7554
  hideExpandCollapse(event: any): void;
5508
7555
  toggleNavigationExpanded(event: any): void;
5509
7556
  get expandCollapseIconVisible(): boolean;
@@ -5611,7 +7658,7 @@ declare class GrowlerModule {
5611
7658
  declare function playerFactory(): Promise<typeof lottie_web>;
5612
7659
  declare class OpenZitiConsoleLibModule {
5613
7660
  static ɵfac: i0.ɵɵFactoryDeclaration<OpenZitiConsoleLibModule, never>;
5614
- static ɵmod: i0.ɵɵNgModuleDeclaration<OpenZitiConsoleLibModule, [typeof SafePipe, typeof ExtendableComponent, typeof StringInputComponent, typeof NumberInputComponent, typeof BooleanToggleInputComponent, typeof ObjectComponent, typeof SelectorInputComponent, typeof TextListInputComponent, typeof ChipsInputComponent, typeof CheckboxListInputComponent, typeof ProtocolAddressPortInputComponent, typeof SideNavbarComponent, typeof PasswordInputComponent, typeof TerminatorFormComponent, typeof ConfigurationsPageComponent, typeof ConfigTypesPageComponent, typeof ConfigTypeFormComponent, typeof ListPageHeaderComponent, typeof FilterBarComponent, typeof ListPageFormComponent, typeof IdentitiesPageComponent, typeof EdgeRoutersPageComponent, typeof TransitRoutersPageComponent, typeof DataTableComponent, typeof TableCellSelectComponent, typeof TableColumnSelectComponent, typeof TableCellMenuComponent, typeof TableColumnMenuComponent, typeof TableColumnDefaultComponent, typeof TableColumnFilterComponent, typeof IdentityFormComponent, typeof EdgeRouterFormComponent, typeof TransitRouterFormComponent, typeof HiddenColumnsBarComponent, typeof ConfirmComponent, typeof NoItemsComponent, typeof SideModalComponent, typeof FormHeaderComponent, typeof FormFieldContainerComponent, typeof PreviewListComponent, typeof LoadingIndicatorComponent, typeof FormFieldToggleComponent, typeof JsonViewComponent, typeof TagSelectorComponent, typeof QrCodeComponent, typeof TableCellTokenComponent, typeof OSTooltipComponent, typeof SDKTooltipComponent, typeof OverridesComponent, typeof ResetEnrollmentComponent, typeof IdentityServicePathComponent, typeof NetworkVisualizerComponent, typeof CustomTagsComponent, typeof ServicesPageComponent, typeof ServiceFormComponent, typeof PortRangesComponent, typeof ForwardingConfigComponent, typeof CardListComponent, typeof SimpleServiceComponent, typeof CardComponent, typeof CreationSummaryDialogComponent, typeof ConfigEditorComponent, typeof ServicePoliciesPageComponent, typeof ServicePolicyFormComponent, typeof EdgeRouterPoliciesPageComponent, typeof EdgeRouterPolicyFormComponent, typeof MultiActionButtonComponent, typeof TableCellNameComponent, typeof ServiceEdgeRouterPoliciesPageComponent, typeof ServiceEdgeRouterPolicyFormComponent, typeof TerminatorsPageComponent, typeof ConfigurationFormComponent, typeof JwtSignersPageComponent, typeof JwtSignerFormComponent, typeof AuthPoliciesPageComponent, typeof AuthPolicyFormComponent, typeof PreviewSelectionsComponent, typeof CertificateAuthoritiesPageComponent, typeof CertificateAuthorityFormComponent, typeof VerifyCertificateComponent, typeof LoginDialogComponent, typeof PostureChecksPageComponent, typeof PostureCheckFormComponent, typeof SessionsPageComponent, typeof SessionFormComponent, typeof APISessionsPageComponent, typeof APISessionFormComponent, typeof CallbackComponent, typeof ProgressMeterComponent, typeof ProgressWizardComponent, typeof SettingsComponent, typeof ProfileComponent, typeof GeolocateComponent, typeof AttributesComponent, typeof SideNavigatorComponent, typeof HeaderBarComponent, typeof QuickAddComponent, typeof DateRangeQuickHeaderComponent, typeof FilterSelectComponent, typeof FilterSelectOptionTemplateDirective, typeof FilterSelectTriggerTemplateDirective], [typeof i2.CommonModule, typeof i3.FormsModule, typeof i103.MatDialogModule, typeof i104.MatRadioModule, typeof ZacRoutingModule, typeof i106.MatDatepickerModule, typeof i107.MatNativeDateModule, typeof i108.MatFormFieldModule, typeof i109.MatInputModule, typeof i110.MatSelectModule, typeof i111.MatButtonModule, typeof i112.MatIconModule, typeof i113.OverlayModule, typeof i114.AgGridModule, typeof i115.QRCodeComponent, typeof i116.ClickOutsideModule, typeof i117.NgJsonEditorModule, typeof i118.MatTooltipModule, typeof i119.MatAutocompleteModule, typeof i120.LottieComponent, typeof DateTimePickerComponent], [typeof ExtendableComponent, typeof SideNavbarComponent, typeof StringInputComponent, typeof SelectorInputComponent, typeof PasswordInputComponent, typeof NumberInputComponent, typeof BooleanToggleInputComponent, typeof ObjectComponent, typeof TextListInputComponent, typeof ChipsInputComponent, typeof IdentityServicePathComponent, typeof NetworkVisualizerComponent, typeof CheckboxListInputComponent, typeof ProtocolAddressPortInputComponent, typeof ConfigurationsPageComponent, typeof ConfigurationFormComponent, typeof ConfigTypesPageComponent, typeof ConfigTypeFormComponent, typeof EdgeRouterFormComponent, typeof TransitRouterFormComponent, typeof IdentitiesPageComponent, typeof EdgeRoutersPageComponent, typeof TransitRoutersPageComponent, typeof ServicesPageComponent, typeof ZacRoutingModule, typeof SideModalComponent, typeof IdentityFormComponent, typeof LoadingIndicatorComponent, typeof GrowlerModule, typeof FormFieldContainerComponent, typeof FormFieldToggleComponent, typeof ServiceFormComponent, typeof ServicePoliciesPageComponent, typeof ServicePolicyFormComponent, typeof EdgeRouterPoliciesPageComponent, typeof TerminatorsPageComponent, typeof TerminatorFormComponent, typeof JwtSignersPageComponent, typeof JwtSignerFormComponent, typeof AuthPoliciesPageComponent, typeof AuthPolicyFormComponent, typeof LoginDialogComponent, typeof PostureChecksPageComponent, typeof PostureCheckFormComponent, typeof SessionsPageComponent, typeof SessionFormComponent, typeof APISessionsPageComponent, typeof APISessionFormComponent, typeof CallbackComponent, typeof FormHeaderComponent, typeof JsonViewComponent, typeof PreviewListComponent, typeof TagSelectorComponent, typeof ProgressMeterComponent, typeof ProgressWizardComponent, typeof ConfigEditorComponent, typeof SettingsComponent, typeof ProfileComponent, typeof GeolocateComponent, typeof AttributesComponent, typeof HeaderBarComponent, typeof SideNavigatorComponent, typeof FilterSelectComponent, typeof FilterSelectOptionTemplateDirective, typeof FilterSelectTriggerTemplateDirective]>;
7661
+ static ɵmod: i0.ɵɵNgModuleDeclaration<OpenZitiConsoleLibModule, [typeof SafePipe, typeof ExtendableComponent, typeof StringInputComponent, typeof NumberInputComponent, typeof BooleanToggleInputComponent, typeof ObjectComponent, typeof SelectorInputComponent, typeof TextListInputComponent, typeof ChipsInputComponent, typeof CheckboxListInputComponent, typeof ProtocolAddressPortInputComponent, typeof SideNavbarComponent, typeof PasswordInputComponent, typeof TerminatorFormComponent, typeof ConfigurationsPageComponent, typeof ConfigTypesPageComponent, typeof ConfigTypeFormComponent, typeof ListPageHeaderComponent, typeof FilterBarComponent, typeof ListPageFormComponent, typeof IdentitiesPageComponent, typeof EdgeRoutersPageComponent, typeof TransitRoutersPageComponent, typeof DataTableComponent, typeof TableCellSelectComponent, typeof TableColumnSelectComponent, typeof TableCellMenuComponent, typeof TableColumnMenuComponent, typeof TableColumnDefaultComponent, typeof TableColumnFilterComponent, typeof IdentityFormComponent, typeof EdgeRouterFormComponent, typeof TransitRouterFormComponent, typeof HiddenColumnsBarComponent, typeof ConfirmComponent, typeof NoItemsComponent, typeof SideModalComponent, typeof FormHeaderComponent, typeof FormFieldContainerComponent, typeof PreviewListComponent, typeof LoadingIndicatorComponent, typeof FormFieldToggleComponent, typeof JsonViewComponent, typeof TagSelectorComponent, typeof QrCodeComponent, typeof TableCellTokenComponent, typeof OSTooltipComponent, typeof SDKTooltipComponent, typeof OverridesComponent, typeof ResetEnrollmentComponent, typeof IdentityServicePathComponent, typeof NetworkVisualizerComponent, typeof CustomTagsComponent, typeof ServicesPageComponent, typeof ServiceFormComponent, typeof PortRangesComponent, typeof ForwardingConfigComponent, typeof CardListComponent, typeof SimpleServiceComponent, typeof CardComponent, typeof CreationSummaryDialogComponent, typeof ConfigEditorComponent, typeof ServicePoliciesPageComponent, typeof ServicePolicyFormComponent, typeof EdgeRouterPoliciesPageComponent, typeof EdgeRouterPolicyFormComponent, typeof MultiActionButtonComponent, typeof TableCellNameComponent, typeof ServiceEdgeRouterPoliciesPageComponent, typeof ServiceEdgeRouterPolicyFormComponent, typeof TerminatorsPageComponent, typeof ConfigurationFormComponent, typeof JwtSignersPageComponent, typeof JwtSignerFormComponent, typeof AuthPoliciesPageComponent, typeof AuthPolicyFormComponent, typeof PreviewSelectionsComponent, typeof CertificateAuthoritiesPageComponent, typeof CertificateAuthorityFormComponent, typeof VerifyCertificateComponent, typeof LoginDialogComponent, typeof PostureChecksPageComponent, typeof PostureCheckFormComponent, typeof SessionsPageComponent, typeof SessionFormComponent, typeof APISessionsPageComponent, typeof APISessionFormComponent, typeof CallbackComponent, typeof ProgressMeterComponent, typeof ProgressWizardComponent, typeof SettingsComponent, typeof ProfileComponent, typeof GeolocateComponent, typeof MapLegendComponent, typeof EntityCountLegendComponent, typeof CircuitHopsTableComponent, typeof RouterPathTableComponent, typeof GeolocateFilterBarComponent, typeof SidePanelContainerComponent, typeof MarkerPanelComponent, typeof LinkPanelComponent, typeof CircuitPanelComponent, typeof EntityListPanelComponent, typeof UnlocatedPanelComponent, typeof ServicesWithCircuitsPanelComponent, typeof HaStatusIndicatorComponent, typeof AttributesComponent, typeof SideNavigatorComponent, typeof HeaderBarComponent, typeof QuickAddComponent, typeof DateRangeQuickHeaderComponent, typeof FilterSelectComponent, typeof FilterSelectOptionTemplateDirective, typeof FilterSelectTriggerTemplateDirective], [typeof i2.CommonModule, typeof i3.FormsModule, typeof i116.MatDialogModule, typeof i117.MatRadioModule, typeof ZacRoutingModule, typeof i119.MatDatepickerModule, typeof i120.MatNativeDateModule, typeof i121.MatFormFieldModule, typeof i122.MatInputModule, typeof i123.MatSelectModule, typeof i124.MatButtonModule, typeof i125.MatIconModule, typeof i126.OverlayModule, typeof i127.AgGridModule, typeof i128.QRCodeComponent, typeof i129.ClickOutsideModule, typeof i130.NgJsonEditorModule, typeof i131.MatTooltipModule, typeof i132.MatAutocompleteModule, typeof i133.LottieComponent, typeof DateTimePickerComponent], [typeof ExtendableComponent, typeof SideNavbarComponent, typeof StringInputComponent, typeof SelectorInputComponent, typeof PasswordInputComponent, typeof NumberInputComponent, typeof BooleanToggleInputComponent, typeof ObjectComponent, typeof TextListInputComponent, typeof ChipsInputComponent, typeof IdentityServicePathComponent, typeof NetworkVisualizerComponent, typeof CheckboxListInputComponent, typeof ProtocolAddressPortInputComponent, typeof ConfigurationsPageComponent, typeof ConfigurationFormComponent, typeof ConfigTypesPageComponent, typeof ConfigTypeFormComponent, typeof EdgeRouterFormComponent, typeof TransitRouterFormComponent, typeof IdentitiesPageComponent, typeof EdgeRoutersPageComponent, typeof TransitRoutersPageComponent, typeof ServicesPageComponent, typeof ZacRoutingModule, typeof SideModalComponent, typeof IdentityFormComponent, typeof LoadingIndicatorComponent, typeof GrowlerModule, typeof FormFieldContainerComponent, typeof FormFieldToggleComponent, typeof ServiceFormComponent, typeof ServicePoliciesPageComponent, typeof ServicePolicyFormComponent, typeof EdgeRouterPoliciesPageComponent, typeof TerminatorsPageComponent, typeof TerminatorFormComponent, typeof JwtSignersPageComponent, typeof JwtSignerFormComponent, typeof AuthPoliciesPageComponent, typeof AuthPolicyFormComponent, typeof LoginDialogComponent, typeof PostureChecksPageComponent, typeof PostureCheckFormComponent, typeof SessionsPageComponent, typeof SessionFormComponent, typeof APISessionsPageComponent, typeof APISessionFormComponent, typeof CallbackComponent, typeof FormHeaderComponent, typeof JsonViewComponent, typeof PreviewListComponent, typeof TagSelectorComponent, typeof ProgressMeterComponent, typeof ProgressWizardComponent, typeof ConfigEditorComponent, typeof SettingsComponent, typeof ProfileComponent, typeof GeolocateComponent, typeof AttributesComponent, typeof HeaderBarComponent, typeof SideNavigatorComponent, typeof FilterSelectComponent, typeof FilterSelectOptionTemplateDirective, typeof FilterSelectTriggerTemplateDirective]>;
5615
7662
  static ɵinj: i0.ɵɵInjectorDeclaration<OpenZitiConsoleLibModule>;
5616
7663
  }
5617
7664
 
@@ -5652,7 +7699,11 @@ declare class NodeDataService extends ZitiDataService {
5652
7699
  resetPassword(oldPass: any, newPass: any, confirmPass: any): Promise<any>;
5653
7700
  deleteSubdata(entityType: string, id: any, dataType: string, data: any): Promise<any>;
5654
7701
  delete(type: string, id: string): Promise<any>;
5655
- call(url: any): Promise<any>;
7702
+ call(url: any, prefix?: string): Promise<any>;
7703
+ /**
7704
+ * NodeDataService doesn't support HA, so just fall back to regular call()
7705
+ */
7706
+ callHAControllers(url: string, prefix?: string): Promise<any>;
5656
7707
  schema(data: any): Promise<any>;
5657
7708
  private getUrlFilter;
5658
7709
  getAttributeFilter(val: any, columnId: any): string;
@@ -5680,7 +7731,20 @@ declare class ZitiControllerDataService extends ZitiDataService {
5680
7731
  resetMFA(id: any): Promise<Object>;
5681
7732
  resetPassword(oldPass: any, newPass: any, confirmPass: any): Promise<Object>;
5682
7733
  delete(type: string, id: string): Promise<any>;
5683
- call(callUrl: any): Promise<any>;
7734
+ call(callUrl: any, prefix?: any): Promise<any>;
7735
+ /**
7736
+ * Call HA controllers in parallel and merge responses
7737
+ * @param callUrl The API endpoint path
7738
+ * @param prefix The API prefix (e.g., '/fabric/v1')
7739
+ * @returns Promise with merged data and metadata about controller responses
7740
+ */
7741
+ callHAControllers(callUrl: string, prefix?: string): Promise<any>;
7742
+ /**
7743
+ * Merge responses from multiple HA controllers
7744
+ * @param responses Array of response objects from different controllers
7745
+ * @returns Merged response object
7746
+ */
7747
+ private mergeHAResponses;
5684
7748
  private getUrlFilter;
5685
7749
  schema(data: any): Promise<any>;
5686
7750
  dereferenceJSONSchema(data: any): Promise<any>;
@@ -5718,6 +7782,6 @@ declare const ZAC_VERSION: {
5718
7782
  version: string;
5719
7783
  };
5720
7784
 
5721
- export { APISessionFormComponent, APISessionsPageComponent, ApiSessionsPageService, AttributesComponent, AuthPoliciesPageComponent, AuthPoliciesPageService, AuthPolicyFormComponent, AuthPolicyFormService, AuthService, BooleanToggleInputComponent, CallbackComponent, CardListComponent, CertificateAuthoritiesPageComponent, CertificateAuthoritiesPageService, CertificateAuthorityFormComponent, CertificateAuthorityFormService, CheckboxListInputComponent, ChipsInputComponent, ConfigEditorComponent, ConfigTypeFormComponent, ConfigTypesPageComponent, ConfigurationFormComponent, ConfigurationService, ConfigurationsPageComponent, CsvDownloadService, DEACTIVATE_GUARD, DEFAULT_APP_CONFIG, DataTableFilterService, DeactivateGuardService, EDGE_ROUTER_EXTENSION_SERVICE, EDGE_ROUTER_POLICY_EXTENSION_SERVICE, EdgeRouter, EdgeRouterFormComponent, EdgeRouterFormService, EdgeRouterPoliciesPageComponent, EdgeRouterPoliciesPageService, EdgeRouterPolicyFormComponent, EdgeRouterPolicyFormService, EdgeRoutersPageComponent, EdgeRoutersPageService, Entity, ExtendableComponent, ExtensionsNoopService, FilterSelectComponent, FilterSelectOptionTemplateDirective, FilterSelectTriggerTemplateDirective, FormFieldContainerComponent, FormFieldToggleComponent, FormHeaderComponent, GeolocateComponent, GrowlerComponent, GrowlerModel, GrowlerModule, GrowlerService, HeaderBarComponent, IDENTITY_EXTENSION_SERVICE, IdentitiesPageComponent, IdentitiesPageService, Identity$1 as Identity, IdentityFormComponent, IdentityFormService, IdentityServicePathComponent, JsonViewComponent, JwtSignerFormComponent, JwtSignerFormService, JwtSignersPageComponent, JwtSignersPageService, KEY_CODES, ListPageComponent, ListPageServiceClass, LoadingIndicatorComponent, LoggerService, LoginDialogComponent, LoginServiceClass, NetworkVisualizerComponent, NodeDataService, NoopLoginService, NoopTabInterceptorService, NumberInputComponent, ObjectComponent, OpenZitiConsoleLibModule, PasswordInputComponent, PostureCheckFormComponent, PostureChecksPageComponent, PostureChecksPageService, PreviewListComponent, ProfileComponent, ProgressMeterComponent, ProgressMeterStep, ProgressWizardComponent, ProgressWizardStep, ProjectableForm, ProtocolAddressPortInputComponent, QuickAddComponent, ResetEnrollmentService, SERVICE_EDGE_ROUTER_POLICY_EXTENSION_SERVICE, SERVICE_EXTENSION_SERVICE, SERVICE_POLICY_EXTENSION_SERVICE, SETTINGS_SERVICE, SHAREDZ_EXTENSION, SelectorInputComponent, ServiceEdgeRouterPoliciesPageComponent, ServiceEdgeRouterPoliciesPageService, ServiceEdgeRouterPolicyFormComponent, ServiceEdgeRouterPolicyFormService, ServiceFormComponent, ServiceFormService, ServicePoliciesPageComponent, ServicePoliciesPageService, ServicePolicyFormComponent, ServicePolicyFormService, ServicesPageComponent, ServicesPageService, Session, SessionFormComponent, SessionsPageComponent, SessionsPageService, SettingsComponent, SettingsService, SettingsServiceClass, SideModalComponent, SideNavbarComponent, SideNavigatorComponent, SimpleServiceComponent, StringInputComponent, TabNameService, TagSelectorComponent, TerminatorFormComponent, TerminatorFormService, TerminatorsPageComponent, TerminatorsPageService, TextListInputComponent, TransitRouterFormComponent, TransitRouterFormService, TransitRoutersPageComponent, TransitRoutersPageService, ValidationService, VerifyCertificateComponent, VisualizerServiceClass, ZAC_LOGIN_SERVICE, ZAC_VERSION, ZITI_DATA_SERVICE, ZITI_DOMAIN_CONTROLLER, ZITI_NAVIGATOR, ZITI_TAB_OVERRIDES, ZITI_URLS, ZacRoutingModule, ZitiControllerDataService, ZitiDataService, playerFactory };
5722
- export type { CanComponentDeactivate, ExtensionService, FilterObj, TabInterceptorService, ZitiDomainControllerService, ZitiSessionData };
7785
+ export { APISessionFormComponent, APISessionsPageComponent, ApiSessionsPageService, AttributesComponent, AuthPoliciesPageComponent, AuthPoliciesPageService, AuthPolicyFormComponent, AuthPolicyFormService, AuthService, BooleanToggleInputComponent, CallbackComponent, CardListComponent, CertificateAuthoritiesPageComponent, CertificateAuthoritiesPageService, CertificateAuthorityFormComponent, CertificateAuthorityFormService, CheckboxListInputComponent, ChipsInputComponent, ConfigEditorComponent, ConfigTypeFormComponent, ConfigTypesPageComponent, ConfigurationFormComponent, ConfigurationService, ConfigurationsPageComponent, CsvDownloadService, DEACTIVATE_GUARD, DEFAULT_APP_CONFIG, DataTableFilterService, DeactivateGuardService, EDGE_ROUTER_EXTENSION_SERVICE, EDGE_ROUTER_POLICY_EXTENSION_SERVICE, EdgeRouter, EdgeRouterFormComponent, EdgeRouterFormService, EdgeRouterPoliciesPageComponent, EdgeRouterPoliciesPageService, EdgeRouterPolicyFormComponent, EdgeRouterPolicyFormService, EdgeRoutersPageComponent, EdgeRoutersPageService, Entity, ExtendableComponent, ExtensionsNoopService, FilterSelectComponent, FilterSelectOptionTemplateDirective, FilterSelectTriggerTemplateDirective, FormFieldContainerComponent, FormFieldToggleComponent, FormHeaderComponent, GeolocateComponent, GrowlerComponent, GrowlerModel, GrowlerModule, GrowlerService, HAControllerService, HaStatusIndicatorComponent, HeaderBarComponent, IDENTITY_EXTENSION_SERVICE, IdentitiesPageComponent, IdentitiesPageService, Identity$1 as Identity, IdentityFormComponent, IdentityFormService, IdentityServicePathComponent, JsonViewComponent, JwtSignerFormComponent, JwtSignerFormService, JwtSignersPageComponent, JwtSignersPageService, KEY_CODES, ListPageComponent, ListPageServiceClass, LoadingIndicatorComponent, LoggerService, LoginDialogComponent, LoginServiceClass, ManagementPermissionsService, NetworkVisualizerComponent, NodeDataService, NoopLoginService, NoopTabInterceptorService, NumberInputComponent, ObjectComponent, OpenZitiConsoleLibModule, PasswordInputComponent, PostureCheckFormComponent, PostureChecksPageComponent, PostureChecksPageService, PreviewListComponent, ProfileComponent, ProgressMeterComponent, ProgressMeterStep, ProgressWizardComponent, ProgressWizardStep, ProjectableForm, ProtocolAddressPortInputComponent, QuickAddComponent, ResetEnrollmentService, SAVE_DENIED_BY_PERMISSION_TOOLTIP, SERVICE_EDGE_ROUTER_POLICY_EXTENSION_SERVICE, SERVICE_EXTENSION_SERVICE, SERVICE_POLICY_EXTENSION_SERVICE, SETTINGS_SERVICE, SHAREDZ_EXTENSION, SelectorInputComponent, ServiceEdgeRouterPoliciesPageComponent, ServiceEdgeRouterPoliciesPageService, ServiceEdgeRouterPolicyFormComponent, ServiceEdgeRouterPolicyFormService, ServiceFormComponent, ServiceFormService, ServicePoliciesPageComponent, ServicePoliciesPageService, ServicePolicyFormComponent, ServicePolicyFormService, ServicesPageComponent, ServicesPageService, Session, SessionFormComponent, SessionsPageComponent, SessionsPageService, SettingsComponent, SettingsService, SettingsServiceClass, SideModalComponent, SideNavbarComponent, SideNavigatorComponent, SimpleServiceComponent, StringInputComponent, TabNameService, TagSelectorComponent, TerminatorFormComponent, TerminatorFormService, TerminatorsPageComponent, TerminatorsPageService, TextListInputComponent, TransitRouterFormComponent, TransitRouterFormService, TransitRoutersPageComponent, TransitRoutersPageService, ValidationService, VerifyCertificateComponent, VisualizerServiceClass, ZAC_LOGIN_SERVICE, ZAC_VERSION, ZITI_DATA_SERVICE, ZITI_DOMAIN_CONTROLLER, ZITI_NAVIGATOR, ZITI_TAB_OVERRIDES, ZITI_URLS, ZacRoutingModule, ZitiControllerDataService, ZitiDataService, playerFactory };
7786
+ export type { CanComponentDeactivate, ExtensionEvent, ExtensionEventType, ExtensionService, FilterObj, HAClusterStatus, HAController, TabInterceptorService, ZitiDomainControllerService, ZitiSessionData };
5723
7787
  //# sourceMappingURL=index.d.ts.map