mesauth-angular 0.2.2 → 0.2.4

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/README.md CHANGED
@@ -1,6 +1,55 @@
1
1
  # mesauth-angular
2
2
 
3
- Angular helper library to connect to a backend API and SignalR hub to surface the current logged-in user and incoming notifications.
3
+ Angular helper library to connect to a backend API and SignalR hub to surface the current logged-in user and incoming notifications with dark/light theme support.
4
+
5
+ ## Features
6
+
7
+ - 🔐 **Authentication**: User login/logout with API integration
8
+ - 🔔 **Real-time Notifications**: SignalR integration for live notifications
9
+ - 🎨 **Dark/Light Theme**: Automatic theme detection and support
10
+ - 🖼️ **Avatar Support**: Direct API-based avatar loading
11
+ - 🍞 **Toast Notifications**: In-app notification toasts
12
+ - 🛡️ **HTTP Interceptor**: Automatic 403 error handling
13
+
14
+ ## Theme Support
15
+
16
+ The library automatically detects and adapts to your application's theme:
17
+
18
+ ### Automatic Theme Detection
19
+ The library checks for theme indicators on the `<html>` element:
20
+ - `class="dark"`
21
+ - `data-theme="dark"`
22
+ - `theme="dark"`
23
+ - `data-coreui-theme="dark"`
24
+
25
+ ### Dynamic Theme Changes
26
+ Theme changes are detected in real-time using `MutationObserver`, so components automatically update when your app switches themes.
27
+
28
+ ### Manual Theme Control
29
+ ```ts
30
+ import { ThemeService } from 'mesauth-angular';
31
+
32
+ // Check current theme
33
+ const currentTheme = themeService.currentTheme; // 'light' | 'dark'
34
+
35
+ // Manually set theme
36
+ themeService.setTheme('dark');
37
+
38
+ // Listen for theme changes
39
+ themeService.currentTheme$.subscribe(theme => {
40
+ console.log('Theme changed to:', theme);
41
+ });
42
+ ```
43
+
44
+ ## Avatar Loading
45
+
46
+ Avatars are loaded directly from your API using the pattern: `GET /auth/{userId}/avatar`
47
+
48
+ - **API Endpoint**: `GET {apiBaseUrl}/auth/{userId}/avatar`
49
+ - **Fallback**: UI Avatars service if userId is not available
50
+ - **Authentication**: Uses the same credentials as other API calls
51
+
52
+ ## Quick Start
4
53
 
5
54
  ## Quick Start
6
55
 
@@ -80,7 +129,6 @@ Angular helper library to connect to a backend API and SignalR hub to surface th
80
129
  this.mesAuth.init({
81
130
  apiBaseUrl: 'https://api.example.com',
82
131
  withCredentials: true,
83
- avatarUrl: 'https://api.example.com/avatars',
84
132
  userBaseUrl: 'https://api.example.com/users'
85
133
  });
86
134
 
@@ -97,7 +145,6 @@ Angular helper library to connect to a backend API and SignalR hub to surface th
97
145
  mesAuth.init({
98
146
  apiBaseUrl: 'https://api.example.com',
99
147
  withCredentials: true,
100
- avatarUrl: 'https://api.example.com/avatars',
101
148
  userBaseUrl: 'https://api.example.com/users'
102
149
  });
103
150
 
@@ -123,7 +170,6 @@ Angular helper library to connect to a backend API and SignalR hub to surface th
123
170
  mesAuth.init({
124
171
  apiBaseUrl: 'https://api.example.com',
125
172
  withCredentials: true,
126
- avatarUrl: 'https://api.example.com/avatars',
127
173
  userBaseUrl: 'https://api.example.com/users'
128
174
  });
129
175
  },
@@ -210,9 +256,38 @@ A standalone component for displaying a slide-out notification panel with real-t
210
256
  notificationPanel.open();
211
257
  ```
212
258
 
259
+ ## Changelog
260
+
261
+ ### v0.2.4 (Latest)
262
+ - 🔔 **Notification UX**: Changed notification delete button to mark-as-read with checkmark icon
263
+ - 🔄 **Badge Updates**: Added automatic badge counter refresh when notifications are marked as read
264
+ - 🎯 **Event System**: Implemented event-driven communication between notification panel and badge components
265
+
266
+ ### v0.2.3
267
+ - 🧹 **Code Cleanup**: Removed all console.log and console.error statements for production readiness
268
+ - 📚 **Documentation**: Updated README with comprehensive changelog, theme support guide, and API documentation
269
+ - 🏷️ **Package Metadata**: Updated package description to reflect theme support
270
+
271
+ ### v0.2.2
272
+ - ✨ **Theme Support**: Added automatic dark/light theme detection and real-time theme switching
273
+ - 🖼️ **Avatar API**: Changed avatar loading to use API endpoint (`/auth/{userId}/avatar`) instead of external service
274
+ - 🎨 **UI Improvements**: Better toast styling with proper borders and sizing
275
+
276
+ ### v0.2.1
277
+ - 🔄 **Dynamic Themes**: Added real-time theme change detection using MutationObserver
278
+ - 🐛 **Toast Fixes**: Improved toast background and sizing for dark themes
279
+
280
+ ### v0.2.0
281
+ - 🎨 **Initial Theme Support**: Basic dark/light theme implementation
282
+ - 🖼️ **Avatar Updates**: Changed to API-based avatar loading
283
+
284
+ ### v0.1.20
285
+ - 🐛 **Bug fixes and improvements**
286
+
213
287
  ## Notes
214
- - The service expects an endpoint `GET /api/user/current` that returns the current user.
215
- - SignalR events used: `UserUpdated` and `NewNotification` (adjust to your backend).
288
+ - The service expects an endpoint `GET {apiBaseUrl}/auth/me` that returns the current user.
289
+ - Avatar endpoint: `GET {apiBaseUrl}/auth/{userId}/avatar`
290
+ - SignalR events used: `ReceiveNotification` (adjust to your backend).
216
291
 
217
292
  ## Troubleshooting
218
293
 
package/dist/README.md CHANGED
@@ -1,6 +1,55 @@
1
1
  # mesauth-angular
2
2
 
3
- Angular helper library to connect to a backend API and SignalR hub to surface the current logged-in user and incoming notifications.
3
+ Angular helper library to connect to a backend API and SignalR hub to surface the current logged-in user and incoming notifications with dark/light theme support.
4
+
5
+ ## Features
6
+
7
+ - 🔐 **Authentication**: User login/logout with API integration
8
+ - 🔔 **Real-time Notifications**: SignalR integration for live notifications
9
+ - 🎨 **Dark/Light Theme**: Automatic theme detection and support
10
+ - 🖼️ **Avatar Support**: Direct API-based avatar loading
11
+ - 🍞 **Toast Notifications**: In-app notification toasts
12
+ - 🛡️ **HTTP Interceptor**: Automatic 403 error handling
13
+
14
+ ## Theme Support
15
+
16
+ The library automatically detects and adapts to your application's theme:
17
+
18
+ ### Automatic Theme Detection
19
+ The library checks for theme indicators on the `<html>` element:
20
+ - `class="dark"`
21
+ - `data-theme="dark"`
22
+ - `theme="dark"`
23
+ - `data-coreui-theme="dark"`
24
+
25
+ ### Dynamic Theme Changes
26
+ Theme changes are detected in real-time using `MutationObserver`, so components automatically update when your app switches themes.
27
+
28
+ ### Manual Theme Control
29
+ ```ts
30
+ import { ThemeService } from 'mesauth-angular';
31
+
32
+ // Check current theme
33
+ const currentTheme = themeService.currentTheme; // 'light' | 'dark'
34
+
35
+ // Manually set theme
36
+ themeService.setTheme('dark');
37
+
38
+ // Listen for theme changes
39
+ themeService.currentTheme$.subscribe(theme => {
40
+ console.log('Theme changed to:', theme);
41
+ });
42
+ ```
43
+
44
+ ## Avatar Loading
45
+
46
+ Avatars are loaded directly from your API using the pattern: `GET /auth/{userId}/avatar`
47
+
48
+ - **API Endpoint**: `GET {apiBaseUrl}/auth/{userId}/avatar`
49
+ - **Fallback**: UI Avatars service if userId is not available
50
+ - **Authentication**: Uses the same credentials as other API calls
51
+
52
+ ## Quick Start
4
53
 
5
54
  ## Quick Start
6
55
 
@@ -80,7 +129,6 @@ Angular helper library to connect to a backend API and SignalR hub to surface th
80
129
  this.mesAuth.init({
81
130
  apiBaseUrl: 'https://api.example.com',
82
131
  withCredentials: true,
83
- avatarUrl: 'https://api.example.com/avatars',
84
132
  userBaseUrl: 'https://api.example.com/users'
85
133
  });
86
134
 
@@ -97,7 +145,6 @@ Angular helper library to connect to a backend API and SignalR hub to surface th
97
145
  mesAuth.init({
98
146
  apiBaseUrl: 'https://api.example.com',
99
147
  withCredentials: true,
100
- avatarUrl: 'https://api.example.com/avatars',
101
148
  userBaseUrl: 'https://api.example.com/users'
102
149
  });
103
150
 
@@ -123,7 +170,6 @@ Angular helper library to connect to a backend API and SignalR hub to surface th
123
170
  mesAuth.init({
124
171
  apiBaseUrl: 'https://api.example.com',
125
172
  withCredentials: true,
126
- avatarUrl: 'https://api.example.com/avatars',
127
173
  userBaseUrl: 'https://api.example.com/users'
128
174
  });
129
175
  },
@@ -210,9 +256,38 @@ A standalone component for displaying a slide-out notification panel with real-t
210
256
  notificationPanel.open();
211
257
  ```
212
258
 
259
+ ## Changelog
260
+
261
+ ### v0.2.4 (Latest)
262
+ - 🔔 **Notification UX**: Changed notification delete button to mark-as-read with checkmark icon
263
+ - 🔄 **Badge Updates**: Added automatic badge counter refresh when notifications are marked as read
264
+ - 🎯 **Event System**: Implemented event-driven communication between notification panel and badge components
265
+
266
+ ### v0.2.3
267
+ - 🧹 **Code Cleanup**: Removed all console.log and console.error statements for production readiness
268
+ - 📚 **Documentation**: Updated README with comprehensive changelog, theme support guide, and API documentation
269
+ - 🏷️ **Package Metadata**: Updated package description to reflect theme support
270
+
271
+ ### v0.2.2
272
+ - ✨ **Theme Support**: Added automatic dark/light theme detection and real-time theme switching
273
+ - 🖼️ **Avatar API**: Changed avatar loading to use API endpoint (`/auth/{userId}/avatar`) instead of external service
274
+ - 🎨 **UI Improvements**: Better toast styling with proper borders and sizing
275
+
276
+ ### v0.2.1
277
+ - 🔄 **Dynamic Themes**: Added real-time theme change detection using MutationObserver
278
+ - 🐛 **Toast Fixes**: Improved toast background and sizing for dark themes
279
+
280
+ ### v0.2.0
281
+ - 🎨 **Initial Theme Support**: Basic dark/light theme implementation
282
+ - 🖼️ **Avatar Updates**: Changed to API-based avatar loading
283
+
284
+ ### v0.1.20
285
+ - 🐛 **Bug fixes and improvements**
286
+
213
287
  ## Notes
214
- - The service expects an endpoint `GET /api/user/current` that returns the current user.
215
- - SignalR events used: `UserUpdated` and `NewNotification` (adjust to your backend).
288
+ - The service expects an endpoint `GET {apiBaseUrl}/auth/me` that returns the current user.
289
+ - Avatar endpoint: `GET {apiBaseUrl}/auth/{userId}/avatar`
290
+ - SignalR events used: `ReceiveNotification` (adjust to your backend).
216
291
 
217
292
  ## Troubleshooting
218
293
 
@@ -1,18 +1,21 @@
1
- import { Component } from '@angular/core';
1
+ import { Component, ViewChild } from '@angular/core';
2
2
  import { ToastContainerComponent } from './toast-container.component';
3
3
  import { UserProfileComponent } from './user-profile.component';
4
4
  import { NotificationPanelComponent } from './notification-panel.component';
5
5
  import * as i0 from "@angular/core";
6
6
  export class MaUserComponent {
7
+ onNotificationRead() {
8
+ this.userProfile.loadUnreadCount();
9
+ }
7
10
  }
8
11
  MaUserComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: MaUserComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
9
- MaUserComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: MaUserComponent, isStandalone: true, selector: "ma-user", ngImport: i0, template: `
12
+ MaUserComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: MaUserComponent, isStandalone: true, selector: "ma-user", viewQueries: [{ propertyName: "userProfile", first: true, predicate: UserProfileComponent, descendants: true }], ngImport: i0, template: `
10
13
  <ma-toast-container></ma-toast-container>
11
14
  <div class="user-header">
12
15
  <ma-user-profile (notificationClick)="notificationPanel.open()"></ma-user-profile>
13
16
  </div>
14
- <ma-notification-panel #notificationPanel></ma-notification-panel>
15
- `, isInline: true, styles: [".user-header{display:flex;justify-content:flex-end}\n"], dependencies: [{ kind: "component", type: ToastContainerComponent, selector: "ma-toast-container" }, { kind: "component", type: UserProfileComponent, selector: "ma-user-profile", outputs: ["notificationClick"] }, { kind: "component", type: NotificationPanelComponent, selector: "ma-notification-panel" }] });
17
+ <ma-notification-panel #notificationPanel (notificationRead)="onNotificationRead()"></ma-notification-panel>
18
+ `, isInline: true, styles: [".user-header{display:flex;justify-content:flex-end}\n"], dependencies: [{ kind: "component", type: ToastContainerComponent, selector: "ma-toast-container" }, { kind: "component", type: UserProfileComponent, selector: "ma-user-profile", outputs: ["notificationClick"] }, { kind: "component", type: NotificationPanelComponent, selector: "ma-notification-panel", outputs: ["notificationRead"] }] });
16
19
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: MaUserComponent, decorators: [{
17
20
  type: Component,
18
21
  args: [{ selector: 'ma-user', standalone: true, imports: [ToastContainerComponent, UserProfileComponent, NotificationPanelComponent], template: `
@@ -20,7 +23,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
20
23
  <div class="user-header">
21
24
  <ma-user-profile (notificationClick)="notificationPanel.open()"></ma-user-profile>
22
25
  </div>
23
- <ma-notification-panel #notificationPanel></ma-notification-panel>
26
+ <ma-notification-panel #notificationPanel (notificationRead)="onNotificationRead()"></ma-notification-panel>
24
27
  `, styles: [".user-header{display:flex;justify-content:flex-end}\n"] }]
25
- }] });
26
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWEtdXNlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbWEtdXNlci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxQyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUN0RSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQzs7QUFvQjVFLE1BQU0sT0FBTyxlQUFlOzs0R0FBZixlQUFlO2dHQUFmLGVBQWUsbUVBZGhCOzs7Ozs7R0FNVCwrSEFQUyx1QkFBdUIsK0RBQUUsb0JBQW9CLDRGQUFFLDBCQUEwQjsyRkFleEUsZUFBZTtrQkFsQjNCLFNBQVM7K0JBQ0UsU0FBUyxjQUNQLElBQUksV0FDUCxDQUFDLHVCQUF1QixFQUFFLG9CQUFvQixFQUFFLDBCQUEwQixDQUFDLFlBQzFFOzs7Ozs7R0FNVCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBUb2FzdENvbnRhaW5lckNvbXBvbmVudCB9IGZyb20gJy4vdG9hc3QtY29udGFpbmVyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFVzZXJQcm9maWxlQ29tcG9uZW50IH0gZnJvbSAnLi91c2VyLXByb2ZpbGUuY29tcG9uZW50JztcclxuaW1wb3J0IHsgTm90aWZpY2F0aW9uUGFuZWxDb21wb25lbnQgfSBmcm9tICcuL25vdGlmaWNhdGlvbi1wYW5lbC5jb21wb25lbnQnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdtYS11c2VyJyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtUb2FzdENvbnRhaW5lckNvbXBvbmVudCwgVXNlclByb2ZpbGVDb21wb25lbnQsIE5vdGlmaWNhdGlvblBhbmVsQ29tcG9uZW50XSxcclxuICB0ZW1wbGF0ZTogYFxyXG4gICAgPG1hLXRvYXN0LWNvbnRhaW5lcj48L21hLXRvYXN0LWNvbnRhaW5lcj5cclxuICAgIDxkaXYgY2xhc3M9XCJ1c2VyLWhlYWRlclwiPlxyXG4gICAgICA8bWEtdXNlci1wcm9maWxlIChub3RpZmljYXRpb25DbGljayk9XCJub3RpZmljYXRpb25QYW5lbC5vcGVuKClcIj48L21hLXVzZXItcHJvZmlsZT5cclxuICAgIDwvZGl2PlxyXG4gICAgPG1hLW5vdGlmaWNhdGlvbi1wYW5lbCAjbm90aWZpY2F0aW9uUGFuZWw+PC9tYS1ub3RpZmljYXRpb24tcGFuZWw+XHJcbiAgYCxcclxuICBzdHlsZXM6IFtgXHJcbiAgICAudXNlci1oZWFkZXIge1xyXG4gICAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kO1xyXG4gICAgfVxyXG4gIGBdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBNYVVzZXJDb21wb25lbnQge31cclxuIl19
28
+ }], propDecorators: { userProfile: [{
29
+ type: ViewChild,
30
+ args: [UserProfileComponent]
31
+ }] } });
32
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWEtdXNlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbWEtdXNlci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDckQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDdEUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDaEUsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7O0FBb0I1RSxNQUFNLE9BQU8sZUFBZTtJQUcxQixrQkFBa0I7UUFDaEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUNyQyxDQUFDOzs0R0FMVSxlQUFlO2dHQUFmLGVBQWUsZ0hBQ2Ysb0JBQW9CLGdEQWZyQjs7Ozs7O0dBTVQsK0hBUFMsdUJBQXVCLCtEQUFFLG9CQUFvQiw0RkFBRSwwQkFBMEI7MkZBZXhFLGVBQWU7a0JBbEIzQixTQUFTOytCQUNFLFNBQVMsY0FDUCxJQUFJLFdBQ1AsQ0FBQyx1QkFBdUIsRUFBRSxvQkFBb0IsRUFBRSwwQkFBMEIsQ0FBQyxZQUMxRTs7Ozs7O0dBTVQ7OEJBU2dDLFdBQVc7c0JBQTNDLFNBQVM7dUJBQUMsb0JBQW9CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgVG9hc3RDb250YWluZXJDb21wb25lbnQgfSBmcm9tICcuL3RvYXN0LWNvbnRhaW5lci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBVc2VyUHJvZmlsZUNvbXBvbmVudCB9IGZyb20gJy4vdXNlci1wcm9maWxlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IE5vdGlmaWNhdGlvblBhbmVsQ29tcG9uZW50IH0gZnJvbSAnLi9ub3RpZmljYXRpb24tcGFuZWwuY29tcG9uZW50JztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbWEtdXNlcicsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbVG9hc3RDb250YWluZXJDb21wb25lbnQsIFVzZXJQcm9maWxlQ29tcG9uZW50LCBOb3RpZmljYXRpb25QYW5lbENvbXBvbmVudF0sXHJcbiAgdGVtcGxhdGU6IGBcclxuICAgIDxtYS10b2FzdC1jb250YWluZXI+PC9tYS10b2FzdC1jb250YWluZXI+XHJcbiAgICA8ZGl2IGNsYXNzPVwidXNlci1oZWFkZXJcIj5cclxuICAgICAgPG1hLXVzZXItcHJvZmlsZSAobm90aWZpY2F0aW9uQ2xpY2spPVwibm90aWZpY2F0aW9uUGFuZWwub3BlbigpXCI+PC9tYS11c2VyLXByb2ZpbGU+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxtYS1ub3RpZmljYXRpb24tcGFuZWwgI25vdGlmaWNhdGlvblBhbmVsIChub3RpZmljYXRpb25SZWFkKT1cIm9uTm90aWZpY2F0aW9uUmVhZCgpXCI+PC9tYS1ub3RpZmljYXRpb24tcGFuZWw+XHJcbiAgYCxcclxuICBzdHlsZXM6IFtgXHJcbiAgICAudXNlci1oZWFkZXIge1xyXG4gICAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kO1xyXG4gICAgfVxyXG4gIGBdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBNYVVzZXJDb21wb25lbnQge1xyXG4gIEBWaWV3Q2hpbGQoVXNlclByb2ZpbGVDb21wb25lbnQpIHVzZXJQcm9maWxlITogVXNlclByb2ZpbGVDb21wb25lbnQ7XHJcblxyXG4gIG9uTm90aWZpY2F0aW9uUmVhZCgpIHtcclxuICAgIHRoaXMudXNlclByb2ZpbGUubG9hZFVucmVhZENvdW50KCk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
@@ -41,7 +41,7 @@ export class MesAuthService {
41
41
  this.startConnection(this.config);
42
42
  }
43
43
  },
44
- error: (err) => console.error('fetchCurrentUser error', err)
44
+ error: (err) => { }
45
45
  });
46
46
  }
47
47
  fetchInitialNotifications() {
@@ -53,7 +53,7 @@ export class MesAuthService {
53
53
  notifications.items.forEach((n) => this._notifications.next(n));
54
54
  }
55
55
  },
56
- error: (err) => console.error('fetchInitialNotifications error', err)
56
+ error: (err) => { }
57
57
  });
58
58
  }
59
59
  getUnreadCount() {
@@ -85,13 +85,12 @@ export class MesAuthService {
85
85
  .configureLogging(LogLevel.Warning);
86
86
  this.hubConnection = builder.build();
87
87
  this.hubConnection.on('ReceiveNotification', (n) => {
88
- console.log('Received notification:', n);
89
88
  this._notifications.next(n);
90
89
  });
91
- this.hubConnection.start().then(() => console.log('SignalR connected')).catch((err) => console.error('SignalR start error', err));
92
- this.hubConnection.onclose(() => console.log('SignalR connection closed'));
93
- this.hubConnection.onreconnecting(() => console.log('SignalR reconnecting'));
94
- this.hubConnection.onreconnected(() => console.log('SignalR reconnected'));
90
+ this.hubConnection.start().then(() => { }).catch((err) => { });
91
+ this.hubConnection.onclose(() => { });
92
+ this.hubConnection.onreconnecting(() => { });
93
+ this.hubConnection.onreconnected(() => { });
95
94
  }
96
95
  stop() {
97
96
  if (!this.hubConnection)
@@ -114,4 +113,4 @@ MesAuthService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", versi
114
113
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: MesAuthService, decorators: [{
115
114
  type: Injectable
116
115
  }], ctorParameters: function () { return [{ type: i1.HttpClient }]; } });
117
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzLWF1dGguc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tZXMtYXV0aC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBVSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFbkQsT0FBTyxFQUFpQixvQkFBb0IsRUFBRSxRQUFRLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNuRixPQUFPLEVBQUUsZUFBZSxFQUFFLE9BQU8sRUFBYyxNQUFNLE1BQU0sQ0FBQztBQUM1RCxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7OztBQW9DckMsTUFBTSxDQUFOLElBQVksZ0JBS1g7QUFMRCxXQUFZLGdCQUFnQjtJQUMxQixpQ0FBYSxDQUFBO0lBQ2IsdUNBQW1CLENBQUE7SUFDbkIsbUNBQWUsQ0FBQTtJQUNmLHVDQUFtQixDQUFBO0FBQ3JCLENBQUMsRUFMVyxnQkFBZ0IsS0FBaEIsZ0JBQWdCLFFBSzNCO0FBc0NELE1BQU0sT0FBTyxjQUFjO0lBVXpCLFlBQW9CLElBQWdCO1FBQWhCLFNBQUksR0FBSixJQUFJLENBQVk7UUFUNUIsa0JBQWEsR0FBeUIsSUFBSSxDQUFDO1FBQzNDLGlCQUFZLEdBQUcsSUFBSSxlQUFlLENBQWUsSUFBSSxDQUFDLENBQUM7UUFDeEQsaUJBQVksR0FBNkIsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN6RSxtQkFBYyxHQUFHLElBQUksT0FBTyxFQUFPLENBQUM7UUFDckMsbUJBQWMsR0FBb0IsSUFBSSxDQUFDLGNBQWMsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUVwRSxZQUFPLEdBQUcsRUFBRSxDQUFDO1FBQ2IsV0FBTSxHQUF5QixJQUFJLENBQUM7SUFFTCxDQUFDO0lBRXhDLElBQUksQ0FBQyxNQUFxQjtRQUN4QixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUNyQixJQUFJLENBQUMsT0FBTyxHQUFH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QUFDLGNBQWMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLHNCQUFzQixDQUFDLENBQUMsQ0FBQztRQUM3RSxJQUFJLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQztJQUM3RSxDQUFDO0lBRU0sSUFBSTtRQUNULElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYTtZQUFFLE9BQU87UUFDaEMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLEdBQUUsQ0FBQyxDQUFDLENBQUM7UUFDMUMsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7SUFDNUIsQ0FBQztJQUVNLE1BQU07UUFDWCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sY0FBYyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FDM0QsR0FBRyxDQUFDLEdBQUcsRUFBRTtZQUNQLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzdCLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNkLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDO0lBRU0sV0FBVztRQUNoQixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztJQUMxQixDQUFDOzsyR0EvR1UsY0FBYzsrR0FBZCxjQUFjOzJGQUFkLGNBQWM7a0JBRDFCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgSHViQ29ubmVjdGlvbiwgSHViQ29ubmVjdGlvbkJ1aWxkZXIsIExvZ0xldmVsIH0gZnJvbSAnQG1pY3Jvc29mdC9zaWduYWxyJztcclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBTdWJqZWN0LCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgTWVzQXV0aENvbmZpZyB7ICBcclxuICBhcGlCYXNlVXJsOiBzdHJpbmc7XHJcbiAgd2l0aENyZWRlbnRpYWxzPzogYm9vbGVhbjtcclxuICB1c2VyQmFzZVVybD86IHN0cmluZztcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJVXNlciB7XHJcbiAgdXNlcklkPzogc3RyaW5nO1xyXG4gIHVzZXJOYW1lPzogc3RyaW5nO1xyXG4gIGZ1bGxOYW1lPzogc3RyaW5nO1xyXG4gIGdlbmRlcj86IHN0cmluZztcclxuICBlbWFpbD86IHN0cmluZztcclxuICBwaG9uZU51bWJlcj86IHN0cmluZztcclxuICBkZXBhcnRtZW50Pzogc3RyaW5nO1xyXG4gIHBvc2l0aW9uPzogc3RyaW5nO1xyXG4gIHRva2VuVmVyc2lvbj86IHN0cmluZztcclxuICBwZXJtRW5kcG9pbnQ/OiBzdHJpbmc7XHJcbiAgcGVybXM/OiBTZXQ8c3RyaW5nPjtcclxuICBlbXBsb3llZUNvZGU/OiBzdHJpbmc7XHJcbiAgaHJGdWxsTmFtZVZuPzogc3RyaW5nO1xyXG4gIGhyRnVsbE5hbWVFbj86IHN0cmluZztcclxuICBoclBvc2l0aW9uPzogc3RyaW5nO1xyXG4gIGhySm9iVGl0bGU/OiBzdHJpbmc7XHJcbiAgaHJHZW5kZXI/OiBzdHJpbmc7XHJcbiAgaHJNb2JpbGU/OiBzdHJpbmc7XHJcbiAgaHJFbWFpbD86IHN0cmluZztcclxuICBockpvaW5EYXRlPzogc3RyaW5nO1xyXG4gIGhyQmlydGhEYXRlPzogc3RyaW5nO1xyXG4gIGhyV29ya1N0YXR1cz86IHN0cmluZztcclxuICBockRvaVR1b25nPzogc3RyaW5nO1xyXG4gIGhyVGVhbUNvZGU/OiBzdHJpbmc7XHJcbiAgaHJMaW5lQ29kZT86IHN0cmluZztcclxufVxyXG5cclxuZXhwb3J0IGVudW0gTm90aWZpY2F0aW9uVHlwZSB7XHJcbiAgSW5mbyA9ICdJbmZvJyxcclxuICBXYXJuaW5nID0gJ1dhcm5pbmcnLFxyXG4gIEVycm9yID0gJ0Vycm9yJyxcclxuICBTdWNjZXNzID0gJ1N1Y2Nlc3MnXHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgTm90aWZpY2F0aW9uRHRvIHtcclxuICBpZDogc3RyaW5nO1xyXG4gIHRpdGxlOiBzdHJpbmc7XHJcbiAgbWVzc2FnZTogc3RyaW5nO1xyXG4gIG1lc3NhZ2VIdG1sPzogc3RyaW5nO1xyXG4gIHVybD86IHN0cmluZztcclxuICB0eXBlOiBOb3RpZmljYXRpb25UeXBlO1xyXG4gIGlzUmVhZDogYm9vbGVhbjtcclxuICBjcmVhdGVkQXQ6IHN0cmluZztcclxuICBzb3VyY2VBcHBOYW1lOiBzdHJpbmc7XHJcbiAgc291cmNlQXBwSWNvblVybD86IHN0cmluZztcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBQYWdlZExpc3Q8VD4ge1xyXG4gIGl0ZW1zOiBUW107XHJcbiAgdG90YWxDb3VudDogbnVtYmVyO1xyXG4gIHBhZ2U6IG51bWJlcjtcclxuICBwYWdlU2l6ZTogbnVtYmVyO1xyXG4gIHRvdGFsUGFnZXM6IG51bWJlcjtcclxuICBoYXNOZXh0OiBib29sZWFuO1xyXG4gIGhhc1ByZXZpb3VzOiBib29sZWFuO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFJlYWxUaW1lTm90aWZpY2F0aW9uRHRvIHtcclxuICBpZDogc3RyaW5nO1xyXG4gIHRpdGxlOiBzdHJpbmc7XHJcbiAgbWVzc2FnZTogc3RyaW5nO1xyXG4gIG1lc3NhZ2VIdG1sPzogc3RyaW5nO1xyXG4gIHVybD86IHN0cmluZztcclxuICB0eXBlOiBOb3RpZmljYXRpb25UeXBlO1xyXG4gIGNyZWF0ZWRBdDogc3RyaW5nO1xyXG4gIHNvdXJjZUFwcE5hbWU6IHN0cmluZztcclxuICBzb3VyY2VBcHBJY29uVXJsPzogc3RyaW5nO1xyXG59XHJcblxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBNZXNBdXRoU2VydmljZSB7XHJcbiAgcHJpdmF0ZSBodWJDb25uZWN0aW9uOiBIdWJDb25uZWN0aW9uIHwgbnVsbCA9IG51bGw7XHJcbiAgcHJpdmF0ZSBfY3VycmVudFVzZXIgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PElVc2VyIHwgbnVsbD4obnVsbCk7XHJcbiAgcHVibGljIGN1cnJlbnRVc2VyJDogT2JzZXJ2YWJsZTxJVXNlciB8IG51bGw+ID0gdGhpcy5fY3VycmVudFVzZXIuYXNPYnNlcnZhYmxlKCk7XHJcbiAgcHJpdmF0ZSBfbm90aWZpY2F0aW9ucyA9IG5ldyBTdWJqZWN0PGFueT4oKTtcclxuICBwdWJsaWMgbm90aWZpY2F0aW9ucyQ6IE9ic2VydmFibGU8YW55PiA9IHRoaXMuX25vdGlmaWNhdGlvbnMuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgYXBpQmFzZSA9ICcnO1xyXG4gIHByaXZhdGUgY29uZmlnOiBNZXNBdXRoQ29uZmlnIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgaHR0cDogSHR0cENsaWVudCkge31cclxuXHJcbiAgaW5pdChjb25maWc6IE1lc0F1dGhDb25maWcpIHtcclxuICAgIHRoaXMuY29uZmlnID0gY29uZmlnO1xyXG4gICAgdGhpcy5hcGlCYXNlID0gY29uZmlnLmFwaUJhc2VVcmwucmVwbGFjZSgvXFwvJC8sICcnKTtcclxuICAgIHRoaXMuZmV0Y2hDdXJyZW50VXNlcigpO1xyXG4gICAgdGhpcy5mZXRjaEluaXRpYWxOb3RpZmljYXRpb25zKCk7XHJcbiAgfVxyXG5cclxuICBnZXRDb25maWcoKTogTWVzQXV0aENvbmZpZyB8IG51bGwge1xyXG4gICAgcmV0dXJuIHRoaXMuY29uZmlnO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBmZXRjaEN1cnJlbnRVc2VyKCkge1xyXG4gICAgaWYgKCF0aGlzLmFwaUJhc2UpIHJldHVybjtcclxuICAgIHRoaXMuaHR0cC5nZXQoYCR7dGhpcy5hcGlCYXNlfS9hdXRoL21lYCkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHUpID0+IHtcclxuICAgICAgICB0aGlzLl9jdXJyZW50VXNlci5uZXh0KHUpO1xyXG4gICAgICAgIGlmICh1ICYmIHRoaXMuY29uZmlnKSB7XHJcbiAgICAgICAgICB0aGlzLnN0YXJ0Q29ubmVjdGlvbih0aGlzLmNvbmZpZyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogKGVycikgPT4gY29uc29sZS5lcnJvcignZmV0Y2hDdXJyZW50VXNlciBlcnJvcicsIGVycilcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBmZXRjaEluaXRpYWxOb3RpZmljYXRpb25zKCkge1xyXG4gICAgaWYgKCF0aGlzLmFwaUJhc2UpIHJldHVybjtcclxuICAgIHRoaXMuaHR0cC5nZXQoYCR7dGhpcy5hcGlCYXNlfS9ub3RpZi9tZWApLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChub3RpZmljYXRpb25zOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShub3RpZmljYXRpb25zPy5pdGVtcykpIHtcclxuICAgICAgICAgIG5vdGlmaWNhdGlvbnMuaXRlbXMuZm9yRWFjaCgobjogYW55KSA9PiB0aGlzLl9ub3RpZmljYXRpb25zLm5leHQobikpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6IChlcnIpID0+IGNvbnNvbGUuZXJyb3IoJ2ZldGNoSW5pdGlhbE5vdGlmaWNhdGlvbnMgZXJyb3InLCBlcnIpXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRVbnJlYWRDb3VudCgpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoYCR7dGhpcy5hcGlCYXNlfS9ub3RpZi9tZS91bnJlYWQtY291bnRgKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXROb3RpZmljYXRpb25zKHBhZ2U6IG51bWJlciA9IDEsIHBhZ2VTaXplOiBudW1iZXIgPSAyMCwgaW5jbHVkZVJlYWQ6IGJvb2xlYW4gPSBmYWxzZSwgdHlwZT86IHN0cmluZyk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICBsZXQgdXJsID0gYCR7dGhpcy5hcGlCYXNlfS9ub3RpZi9tZT9wYWdlPSR7cGFnZX0mcGFnZVNpemU9JHtwYWdlU2l6ZX0maW5jbHVkZVJlYWQ9JHtpbmNsdWRlUmVhZH1gO1xyXG4gICAgaWYgKHR5cGUpIHtcclxuICAgICAgdXJsICs9IGAmdHlwZT0ke3R5cGV9YDtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KHVybCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbWFya0FzUmVhZChub3RpZmljYXRpb25JZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucGF0Y2goYCR7dGhpcy5hcGlCYXNlfS9ub3RpZi8ke25vdGlmaWNhdGlvbklkfS9yZWFkYCwge30pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG1hcmtBbGxBc1JlYWQoKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucGF0Y2goYCR7dGhpcy5hcGlCYXNlfS9ub3RpZi9tZS9yZWFkLWFsbGAsIHt9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBkZWxldGVOb3RpZmljYXRpb24obm90aWZpY2F0aW9uSWQ6IHN0cmluZyk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmRlbGV0ZShgJHt0aGlzLmFwaUJhc2V9L25vdGlmLyR7bm90aWZpY2F0aW9uSWR9YCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN0YXJ0Q29ubmVjdGlvbihjb25maWc6IE1lc0F1dGhDb25maWcpIHtcclxuICAgIGlmICh0aGlzLmh1YkNvbm5lY3Rpb24pIHJldHVybjtcclxuICAgIGNvbnN0IHNpZ25hbHJVcmwgPSBjb25maWcuYXBpQmFzZVVybC5yZXBsYWNlKC9cXC8kLywgJycpICsgJy9odWIvbm90aWZpY2F0aW9uJztcclxuICAgIGNvbnN0IGJ1aWxkZXIgPSBuZXcgSHViQ29ubmVjdGlvbkJ1aWxkZXIoKVxyXG4gICAgICAud2l0aFVybChzaWduYWxyVXJsLCB7IHdpdGhDcmVkZW50aWFsczogY29uZmlnLndpdGhDcmVkZW50aWFscyA/PyB0cnVlIH0pXHJcbiAgICAgIC53aXRoQXV0b21hdGljUmVjb25uZWN0KClcclxuICAgICAgLmNvbmZpZ3VyZUxvZ2dpbmcoTG9nTGV2ZWwuV2FybmluZyk7XHJcblxyXG4gICAgdGhpcy5odWJDb25uZWN0aW9uID0gYnVpbGRlci5idWlsZCgpO1xyXG5cclxuICAgIHRoaXMuaHViQ29ubmVjdGlvbi5vbignUmVjZWl2ZU5vdGlmaWNhdGlvbicsIChuOiBhbnkpID0+IHtcclxuICAgICAgY29uc29sZS5sb2coJ1JlY2VpdmVkIG5vdGlmaWNhdGlvbjonLCBuKTtcclxuICAgICAgdGhpcy5fbm90aWZpY2F0aW9ucy5uZXh0KG4pO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5odWJDb25uZWN0aW9uLnN0YXJ0KCkudGhlbigoKSA9PiBjb25zb2xlLmxvZygnU2lnbmFsUiBjb25uZWN0ZWQnKSkuY2F0Y2goKGVycikgPT4gY29uc29sZS5lcnJvcignU2lnbmFsUiBzdGFydCBlcnJvcicsIGVycikpO1xyXG5cclxuICAgIHRoaXMuaHViQ29ubmVjdGlvbi5vbmNsb3NlKCgpID0+IGNvbnNvbGUubG9nKCdTaWduYWxSIGNvbm5lY3Rpb24gY2xvc2VkJykpO1xyXG4gICAgdGhpcy5odWJDb25uZWN0aW9uLm9ucmVjb25uZWN0aW5nKCgpID0+IGNvbnNvbGUubG9nKCdTaWduYWxSIHJlY29ubmVjdGluZycpKTtcclxuICAgIHRoaXMuaHViQ29ubmVjdGlvbi5vbnJlY29ubmVjdGVkKCgpID0+IGNvbnNvbGUubG9nKCdTaWduYWxSIHJlY29ubmVjdGVkJykpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHN0b3AoKSB7XHJcbiAgICBpZiAoIXRoaXMuaHViQ29ubmVjdGlvbikgcmV0dXJuO1xyXG4gICAgdGhpcy5odWJDb25uZWN0aW9uLnN0b3AoKS5jYXRjaCgoKSA9PiB7fSk7XHJcbiAgICB0aGlzLmh1YkNvbm5lY3Rpb24gPSBudWxsO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGxvZ291dCgpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAke3RoaXMuYXBpQmFzZX0vYXV0aC9sb2dvdXRgLCB7fSkucGlwZShcclxuICAgICAgdGFwKCgpID0+IHtcclxuICAgICAgICB0aGlzLl9jdXJyZW50VXNlci5uZXh0KG51bGwpO1xyXG4gICAgICAgIHRoaXMuc3RvcCgpO1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyByZWZyZXNoVXNlcigpIHtcclxuICAgIHRoaXMuZmV0Y2hDdXJyZW50VXNlcigpO1xyXG4gIH1cclxufVxyXG4iXX0=
116
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzLWF1dGguc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tZXMtYXV0aC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBVSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFbkQsT0FBTyxFQUFpQixvQkFBb0IsRUFBRSxRQUFRLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNuRixPQUFPLEVBQUUsZUFBZSxFQUFFLE9BQU8sRUFBYyxNQUFNLE1BQU0sQ0FBQztBQUM1RCxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7OztBQW9DckMsTUFBTSxDQUFOLElBQVksZ0JBS1g7QUFMRCxXQUFZLGdCQUFnQjtJQUMxQixpQ0FBYSxDQUFBO0lBQ2IsdUNBQW1CLENBQUE7SUFDbkIsbUNBQWUsQ0FBQTtJQUNmLHVDQUFtQixDQUFBO0FBQ3JCLENBQUMsRUFMVyxnQkFBZ0IsS0FBaEIsZ0JBQWdCLFFBSzNCO0FBc0NELE1BQU0sT0FBTyxjQUFjO0lBVXpCLFlBQW9CLElBQWdCO1FBQWhCLFNBQUksR0FBSixJQUFJLENBQVk7UUFUNUIsa0JBQWEsR0FBeUIsSUFBSSxDQUFDO1FBQzNDLGlCQUFZLEdBQUcsSUFBSSxlQUFlLENBQWUsSUFBSSxDQUFDLENBQUM7UUFDeEQsaUJBQVksR0FBNkIsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN6RSxtQkFBYyxHQUFHLElBQUksT0FBTyxFQUFPLENBQUM7UUFDckMsbUJBQWMsR0FBb0IsSUFBSSxDQUFDLGNBQWMsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUVwRSxZQUFPLEdBQUcsRUFBRSxDQUFDO1FBQ2IsV0FBTSxHQUF5QixJQUFJLENBQUM7SUFFTCxDQUFDO0lBRXhDLElBQUksQ0FBQyxNQUFxQjtRQUN4QixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUNyQixJQUFJLENBQUMsT0FBTyxHQUFH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QUFDLEdBQUcsRUFBRSxHQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzFDLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO0lBQzVCLENBQUM7SUFFTSxNQUFNO1FBQ1gsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLGNBQWMsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQzNELEdBQUcsQ0FBQyxHQUFHLEVBQUU7WUFDUCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUM3QixJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDZCxDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQztJQUVNLFdBQVc7UUFDaEIsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7SUFDMUIsQ0FBQzs7MkdBOUdVLGNBQWM7K0dBQWQsY0FBYzsyRkFBZCxjQUFjO2tCQUQxQixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IEh1YkNvbm5lY3Rpb24sIEh1YkNvbm5lY3Rpb25CdWlsZGVyLCBMb2dMZXZlbCB9IGZyb20gJ0BtaWNyb3NvZnQvc2lnbmFscic7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgU3ViamVjdCwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIE1lc0F1dGhDb25maWcgeyAgXHJcbiAgYXBpQmFzZVVybDogc3RyaW5nO1xyXG4gIHdpdGhDcmVkZW50aWFscz86IGJvb2xlYW47XHJcbiAgdXNlckJhc2VVcmw/OiBzdHJpbmc7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSVVzZXIge1xyXG4gIHVzZXJJZD86IHN0cmluZztcclxuICB1c2VyTmFtZT86IHN0cmluZztcclxuICBmdWxsTmFtZT86IHN0cmluZztcclxuICBnZW5kZXI/OiBzdHJpbmc7XHJcbiAgZW1haWw/OiBzdHJpbmc7XHJcbiAgcGhvbmVOdW1iZXI/OiBzdHJpbmc7XHJcbiAgZGVwYXJ0bWVudD86IHN0cmluZztcclxuICBwb3NpdGlvbj86IHN0cmluZztcclxuICB0b2tlblZlcnNpb24/OiBzdHJpbmc7XHJcbiAgcGVybUVuZHBvaW50Pzogc3RyaW5nO1xyXG4gIHBlcm1zPzogU2V0PHN0cmluZz47XHJcbiAgZW1wbG95ZWVDb2RlPzogc3RyaW5nO1xyXG4gIGhyRnVsbE5hbWVWbj86IHN0cmluZztcclxuICBockZ1bGxOYW1lRW4/OiBzdHJpbmc7XHJcbiAgaHJQb3NpdGlvbj86IHN0cmluZztcclxuICBockpvYlRpdGxlPzogc3RyaW5nO1xyXG4gIGhyR2VuZGVyPzogc3RyaW5nO1xyXG4gIGhyTW9iaWxlPzogc3RyaW5nO1xyXG4gIGhyRW1haWw/OiBzdHJpbmc7XHJcbiAgaHJKb2luRGF0ZT86IHN0cmluZztcclxuICBockJpcnRoRGF0ZT86IHN0cmluZztcclxuICBocldvcmtTdGF0dXM/OiBzdHJpbmc7XHJcbiAgaHJEb2lUdW9uZz86IHN0cmluZztcclxuICBoclRlYW1Db2RlPzogc3RyaW5nO1xyXG4gIGhyTGluZUNvZGU/OiBzdHJpbmc7XHJcbn1cclxuXHJcbmV4cG9ydCBlbnVtIE5vdGlmaWNhdGlvblR5cGUge1xyXG4gIEluZm8gPSAnSW5mbycsXHJcbiAgV2FybmluZyA9ICdXYXJuaW5nJyxcclxuICBFcnJvciA9ICdFcnJvcicsXHJcbiAgU3VjY2VzcyA9ICdTdWNjZXNzJ1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIE5vdGlmaWNhdGlvbkR0byB7XHJcbiAgaWQ6IHN0cmluZztcclxuICB0aXRsZTogc3RyaW5nO1xyXG4gIG1lc3NhZ2U6IHN0cmluZztcclxuICBtZXNzYWdlSHRtbD86IHN0cmluZztcclxuICB1cmw/OiBzdHJpbmc7XHJcbiAgdHlwZTogTm90aWZpY2F0aW9uVHlwZTtcclxuICBpc1JlYWQ6IGJvb2xlYW47XHJcbiAgY3JlYXRlZEF0OiBzdHJpbmc7XHJcbiAgc291cmNlQXBwTmFtZTogc3RyaW5nO1xyXG4gIHNvdXJjZUFwcEljb25Vcmw/OiBzdHJpbmc7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgUGFnZWRMaXN0PFQ+IHtcclxuICBpdGVtczogVFtdO1xyXG4gIHRvdGFsQ291bnQ6IG51bWJlcjtcclxuICBwYWdlOiBudW1iZXI7XHJcbiAgcGFnZVNpemU6IG51bWJlcjtcclxuICB0b3RhbFBhZ2VzOiBudW1iZXI7XHJcbiAgaGFzTmV4dDogYm9vbGVhbjtcclxuICBoYXNQcmV2aW91czogYm9vbGVhbjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBSZWFsVGltZU5vdGlmaWNhdGlvbkR0byB7XHJcbiAgaWQ6IHN0cmluZztcclxuICB0aXRsZTogc3RyaW5nO1xyXG4gIG1lc3NhZ2U6IHN0cmluZztcclxuICBtZXNzYWdlSHRtbD86IHN0cmluZztcclxuICB1cmw/OiBzdHJpbmc7XHJcbiAgdHlwZTogTm90aWZpY2F0aW9uVHlwZTtcclxuICBjcmVhdGVkQXQ6IHN0cmluZztcclxuICBzb3VyY2VBcHBOYW1lOiBzdHJpbmc7XHJcbiAgc291cmNlQXBwSWNvblVybD86IHN0cmluZztcclxufVxyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgTWVzQXV0aFNlcnZpY2Uge1xyXG4gIHByaXZhdGUgaHViQ29ubmVjdGlvbjogSHViQ29ubmVjdGlvbiB8IG51bGwgPSBudWxsO1xyXG4gIHByaXZhdGUgX2N1cnJlbnRVc2VyID0gbmV3IEJlaGF2aW9yU3ViamVjdDxJVXNlciB8IG51bGw+KG51bGwpO1xyXG4gIHB1YmxpYyBjdXJyZW50VXNlciQ6IE9ic2VydmFibGU8SVVzZXIgfCBudWxsPiA9IHRoaXMuX2N1cnJlbnRVc2VyLmFzT2JzZXJ2YWJsZSgpO1xyXG4gIHByaXZhdGUgX25vdGlmaWNhdGlvbnMgPSBuZXcgU3ViamVjdDxhbnk+KCk7XHJcbiAgcHVibGljIG5vdGlmaWNhdGlvbnMkOiBPYnNlcnZhYmxlPGFueT4gPSB0aGlzLl9ub3RpZmljYXRpb25zLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIGFwaUJhc2UgPSAnJztcclxuICBwcml2YXRlIGNvbmZpZzogTWVzQXV0aENvbmZpZyB8IG51bGwgPSBudWxsO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQpIHt9XHJcblxyXG4gIGluaXQoY29uZmlnOiBNZXNBdXRoQ29uZmlnKSB7XHJcbiAgICB0aGlzLmNvbmZpZyA9IGNvbmZpZztcclxuICAgIHRoaXMuYXBpQmFzZSA9IGNvbmZpZy5hcGlCYXNlVXJsLnJlcGxhY2UoL1xcLyQvLCAnJyk7XHJcbiAgICB0aGlzLmZldGNoQ3VycmVudFVzZXIoKTtcclxuICAgIHRoaXMuZmV0Y2hJbml0aWFsTm90aWZpY2F0aW9ucygpO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q29uZmlnKCk6IE1lc0F1dGhDb25maWcgfCBudWxsIHtcclxuICAgIHJldHVybiB0aGlzLmNvbmZpZztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZmV0Y2hDdXJyZW50VXNlcigpIHtcclxuICAgIGlmICghdGhpcy5hcGlCYXNlKSByZXR1cm47XHJcbiAgICB0aGlzLmh0dHAuZ2V0KGAke3RoaXMuYXBpQmFzZX0vYXV0aC9tZWApLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6ICh1KSA9PiB7XHJcbiAgICAgICAgdGhpcy5fY3VycmVudFVzZXIubmV4dCh1KTtcclxuICAgICAgICBpZiAodSAmJiB0aGlzLmNvbmZpZykge1xyXG4gICAgICAgICAgdGhpcy5zdGFydENvbm5lY3Rpb24odGhpcy5jb25maWcpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6IChlcnIpID0+IHt9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZmV0Y2hJbml0aWFsTm90aWZpY2F0aW9ucygpIHtcclxuICAgIGlmICghdGhpcy5hcGlCYXNlKSByZXR1cm47XHJcbiAgICB0aGlzLmh0dHAuZ2V0KGAke3RoaXMuYXBpQmFzZX0vbm90aWYvbWVgKS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAobm90aWZpY2F0aW9uczogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkobm90aWZpY2F0aW9ucz8uaXRlbXMpKSB7XHJcbiAgICAgICAgICBub3RpZmljYXRpb25zLml0ZW1zLmZvckVhY2goKG46IGFueSkgPT4gdGhpcy5fbm90aWZpY2F0aW9ucy5uZXh0KG4pKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiAoZXJyKSA9PiB7fVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0VW5yZWFkQ291bnQoKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGAke3RoaXMuYXBpQmFzZX0vbm90aWYvbWUvdW5yZWFkLWNvdW50YCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0Tm90aWZpY2F0aW9ucyhwYWdlOiBudW1iZXIgPSAxLCBwYWdlU2l6ZTogbnVtYmVyID0gMjAsIGluY2x1ZGVSZWFkOiBib29sZWFuID0gZmFsc2UsIHR5cGU/OiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgbGV0IHVybCA9IGAke3RoaXMuYXBpQmFzZX0vbm90aWYvbWU/cGFnZT0ke3BhZ2V9JnBhZ2VTaXplPSR7cGFnZVNpemV9JmluY2x1ZGVSZWFkPSR7aW5jbHVkZVJlYWR9YDtcclxuICAgIGlmICh0eXBlKSB7XHJcbiAgICAgIHVybCArPSBgJnR5cGU9JHt0eXBlfWA7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldCh1cmwpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG1hcmtBc1JlYWQobm90aWZpY2F0aW9uSWQ6IHN0cmluZyk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBhdGNoKGAke3RoaXMuYXBpQmFzZX0vbm90aWYvJHtub3RpZmljYXRpb25JZH0vcmVhZGAsIHt9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBtYXJrQWxsQXNSZWFkKCk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBhdGNoKGAke3RoaXMuYXBpQmFzZX0vbm90aWYvbWUvcmVhZC1hbGxgLCB7fSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZGVsZXRlTm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbklkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5kZWxldGUoYCR7dGhpcy5hcGlCYXNlfS9ub3RpZi8ke25vdGlmaWNhdGlvbklkfWApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzdGFydENvbm5lY3Rpb24oY29uZmlnOiBNZXNBdXRoQ29uZmlnKSB7XHJcbiAgICBpZiAodGhpcy5odWJDb25uZWN0aW9uKSByZXR1cm47XHJcbiAgICBjb25zdCBzaWduYWxyVXJsID0gY29uZmlnLmFwaUJhc2VVcmwucmVwbGFjZSgvXFwvJC8sICcnKSArICcvaHViL25vdGlmaWNhdGlvbic7XHJcbiAgICBjb25zdCBidWlsZGVyID0gbmV3IEh1YkNvbm5lY3Rpb25CdWlsZGVyKClcclxuICAgICAgLndpdGhVcmwoc2lnbmFsclVybCwgeyB3aXRoQ3JlZGVudGlhbHM6IGNvbmZpZy53aXRoQ3JlZGVudGlhbHMgPz8gdHJ1ZSB9KVxyXG4gICAgICAud2l0aEF1dG9tYXRpY1JlY29ubmVjdCgpXHJcbiAgICAgIC5jb25maWd1cmVMb2dnaW5nKExvZ0xldmVsLldhcm5pbmcpO1xyXG5cclxuICAgIHRoaXMuaHViQ29ubmVjdGlvbiA9IGJ1aWxkZXIuYnVpbGQoKTtcclxuXHJcbiAgICB0aGlzLmh1YkNvbm5lY3Rpb24ub24oJ1JlY2VpdmVOb3RpZmljYXRpb24nLCAobjogYW55KSA9PiB7XHJcbiAgICAgIHRoaXMuX25vdGlmaWNhdGlvbnMubmV4dChuKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuaHViQ29ubmVjdGlvbi5zdGFydCgpLnRoZW4oKCkgPT4ge30pLmNhdGNoKChlcnIpID0+IHt9KTtcclxuXHJcbiAgICB0aGlzLmh1YkNvbm5lY3Rpb24ub25jbG9zZSgoKSA9PiB7fSk7XHJcbiAgICB0aGlzLmh1YkNvbm5lY3Rpb24ub25yZWNvbm5lY3RpbmcoKCkgPT4ge30pO1xyXG4gICAgdGhpcy5odWJDb25uZWN0aW9uLm9ucmVjb25uZWN0ZWQoKCkgPT4ge30pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHN0b3AoKSB7XHJcbiAgICBpZiAoIXRoaXMuaHViQ29ubmVjdGlvbikgcmV0dXJuO1xyXG4gICAgdGhpcy5odWJDb25uZWN0aW9uLnN0b3AoKS5jYXRjaCgoKSA9PiB7fSk7XHJcbiAgICB0aGlzLmh1YkNvbm5lY3Rpb24gPSBudWxsO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGxvZ291dCgpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAke3RoaXMuYXBpQmFzZX0vYXV0aC9sb2dvdXRgLCB7fSkucGlwZShcclxuICAgICAgdGFwKCgpID0+IHtcclxuICAgICAgICB0aGlzLl9jdXJyZW50VXNlci5uZXh0KG51bGwpO1xyXG4gICAgICAgIHRoaXMuc3RvcCgpO1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyByZWZyZXNoVXNlcigpIHtcclxuICAgIHRoaXMuZmV0Y2hDdXJyZW50VXNlcigpO1xyXG4gIH1cclxufVxyXG4iXX0=