@esfaenza/signalr-notifications 15.2.3 → 15.2.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,7 +1,7 @@
1
1
  import { NgModule } from '@angular/core';
2
2
  import { BaseMessageService } from './models/BaseMessageService';
3
3
  import { NotificationsService } from './signalr-notifications.service';
4
- import { ENDPOINT_URL, SIGNALR_ENABLED, DEBUG_MODE, MESSAGE_PACK, AUTO_RECONNECT } from './tokens';
4
+ import { ENDPOINT_URL, SIGNALR_ENABLED, SGR_DEBUG_MODE, MESSAGE_PACK, AUTO_RECONNECT } from './tokens';
5
5
  import * as i0 from "@angular/core";
6
6
  export class SignalrNotificationsModule {
7
7
  static forRoot(config) {
@@ -12,7 +12,7 @@ export class SignalrNotificationsModule {
12
12
  { provide: BaseMessageService, useClass: config?.messageService || BaseMessageService },
13
13
  { provide: ENDPOINT_URL, useValue: config?.endpointUrl },
14
14
  { provide: SIGNALR_ENABLED, useValue: config?.enabled != null ? config?.enabled : true },
15
- { provide: DEBUG_MODE, useValue: config?.debugMode != null ? config?.debugMode : false },
15
+ { provide: SGR_DEBUG_MODE, useValue: config?.debugMode != null ? config?.debugMode : false },
16
16
  { provide: MESSAGE_PACK, useValue: config?.useMessagePack != null ? config?.useMessagePack : false },
17
17
  { provide: AUTO_RECONNECT, useValue: config?.autoReconnect != null ? config?.autoReconnect : true },
18
18
  ]
@@ -25,4 +25,4 @@ SignalrNotificationsModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.
25
25
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: SignalrNotificationsModule, decorators: [{
26
26
  type: NgModule
27
27
  }] });
28
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnbmFsci1ub3RpZmljYXRpb25zLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3NpZ25hbHItbm90aWZpY2F0aW9ucy9zcmMvbGliL3NpZ25hbHItbm90aWZpY2F0aW9ucy5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFFBQVEsRUFBdUIsTUFBTSxlQUFlLENBQUM7QUFFOUQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDakUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDdkUsT0FBTyxFQUFFLFlBQVksRUFBRSxlQUFlLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxjQUFjLEVBQUUsTUFBTSxVQUFVLENBQUM7O0FBR25HLE1BQU0sT0FBTywwQkFBMEI7SUFDckMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUF5QztRQUN0RCxPQUFPO1lBQ0wsUUFBUSxFQUFFLDBCQUEwQjtZQUNwQyxTQUFTLEVBQUU7Z0JBQ1Qsb0JBQW9CO2dCQUNwQixFQUFFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLGNBQWMsSUFBSSxrQkFBa0IsRUFBRTtnQkFDdkYsRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFO2dCQUN4RCxFQUFFLE9BQU8sRUFBRSxlQUFlLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxPQUFPLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUU7Z0JBQ3hGLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLFNBQVMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRTtnQkFDeEYsRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsY0FBYyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLGNBQWMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFO2dCQUNwRyxFQUFFLE9BQU8sRUFBRSxjQUFjLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxhQUFhLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsYUFBYSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUU7YUFDcEc7U0FDRixDQUFDO0lBQ0osQ0FBQzs7dUhBZFUsMEJBQTBCO3dIQUExQiwwQkFBMEI7d0hBQTFCLDBCQUEwQjsyRkFBMUIsMEJBQTBCO2tCQUR0QyxRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiXHJcbmltcG9ydCB7IE5nTW9kdWxlLCBNb2R1bGVXaXRoUHJvdmlkZXJzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFNpZ25hbHJOb3RpZmljYXRpb25zTW9kdWxlQ29uZmlnIH0gZnJvbSAnLi9jb25maWcvU2lnbmFsck5vdGlmaWNhdGlvbnNNb2R1bGVDb25maWcnO1xyXG5pbXBvcnQgeyBCYXNlTWVzc2FnZVNlcnZpY2UgfSBmcm9tICcuL21vZGVscy9CYXNlTWVzc2FnZVNlcnZpY2UnO1xyXG5pbXBvcnQgeyBOb3RpZmljYXRpb25zU2VydmljZSB9IGZyb20gJy4vc2lnbmFsci1ub3RpZmljYXRpb25zLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBFTkRQT0lOVF9VUkwsIFNJR05BTFJfRU5BQkxFRCwgREVCVUdfTU9ERSwgTUVTU0FHRV9QQUNLLCBBVVRPX1JFQ09OTkVDVCB9IGZyb20gJy4vdG9rZW5zJztcclxuXHJcbkBOZ01vZHVsZSgpXHJcbmV4cG9ydCBjbGFzcyBTaWduYWxyTm90aWZpY2F0aW9uc01vZHVsZSB7XHJcbiAgc3RhdGljIGZvclJvb3QoY29uZmlnPzogU2lnbmFsck5vdGlmaWNhdGlvbnNNb2R1bGVDb25maWcpOiBNb2R1bGVXaXRoUHJvdmlkZXJzPFNpZ25hbHJOb3RpZmljYXRpb25zTW9kdWxlPiB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBuZ01vZHVsZTogU2lnbmFsck5vdGlmaWNhdGlvbnNNb2R1bGUsXHJcbiAgICAgIHByb3ZpZGVyczogW1xyXG4gICAgICAgIE5vdGlmaWNhdGlvbnNTZXJ2aWNlLFxyXG4gICAgICAgIHsgcHJvdmlkZTogQmFzZU1lc3NhZ2VTZXJ2aWNlLCB1c2VDbGFzczogY29uZmlnPy5tZXNzYWdlU2VydmljZSB8fCBCYXNlTWVzc2FnZVNlcnZpY2UgfSxcclxuICAgICAgICB7IHByb3ZpZGU6IEVORFBPSU5UX1VSTCwgdXNlVmFsdWU6IGNvbmZpZz8uZW5kcG9pbnRVcmwgfSxcclxuICAgICAgICB7IHByb3ZpZGU6IFNJR05BTFJfRU5BQkxFRCwgdXNlVmFsdWU6IGNvbmZpZz8uZW5hYmxlZCAhPSBudWxsID8gY29uZmlnPy5lbmFibGVkIDogdHJ1ZSB9LFxyXG4gICAgICAgIHsgcHJvdmlkZTogREVCVUdfTU9ERSwgdXNlVmFsdWU6IGNvbmZpZz8uZGVidWdNb2RlICE9IG51bGwgPyBjb25maWc/LmRlYnVnTW9kZSA6IGZhbHNlIH0sXHJcbiAgICAgICAgeyBwcm92aWRlOiBNRVNTQUdFX1BBQ0ssIHVzZVZhbHVlOiBjb25maWc/LnVzZU1lc3NhZ2VQYWNrICE9IG51bGwgPyBjb25maWc/LnVzZU1lc3NhZ2VQYWNrIDogZmFsc2UgfSxcclxuICAgICAgICB7IHByb3ZpZGU6IEFVVE9fUkVDT05ORUNULCB1c2VWYWx1ZTogY29uZmlnPy5hdXRvUmVjb25uZWN0ICE9IG51bGwgPyBjb25maWc/LmF1dG9SZWNvbm5lY3QgOiB0cnVlIH0sXHJcbiAgICAgIF1cclxuICAgIH07XHJcbiAgfVxyXG59Il19
28
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnbmFsci1ub3RpZmljYXRpb25zLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3NpZ25hbHItbm90aWZpY2F0aW9ucy9zcmMvbGliL3NpZ25hbHItbm90aWZpY2F0aW9ucy5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFFBQVEsRUFBdUIsTUFBTSxlQUFlLENBQUM7QUFFOUQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDakUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDdkUsT0FBTyxFQUFFLFlBQVksRUFBRSxlQUFlLEVBQUUsY0FBYyxFQUFFLFlBQVksRUFBRSxjQUFjLEVBQUUsTUFBTSxVQUFVLENBQUM7O0FBR3ZHLE1BQU0sT0FBTywwQkFBMEI7SUFDckMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUF5QztRQUN0RCxPQUFPO1lBQ0wsUUFBUSxFQUFFLDBCQUEwQjtZQUNwQyxTQUFTLEVBQUU7Z0JBQ1Qsb0JBQW9CO2dCQUNwQixFQUFFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLGNBQWMsSUFBSSxrQkFBa0IsRUFBRTtnQkFDdkYsRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFO2dCQUN4RCxFQUFFLE9BQU8sRUFBRSxlQUFlLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxPQUFPLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUU7Z0JBQ3hGLEVBQUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLFNBQVMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRTtnQkFDNUYsRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsY0FBYyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLGNBQWMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFO2dCQUNwRyxFQUFFLE9BQU8sRUFBRSxjQUFjLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxhQUFhLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsYUFBYSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUU7YUFDcEc7U0FDRixDQUFDO0lBQ0osQ0FBQzs7dUhBZFUsMEJBQTBCO3dIQUExQiwwQkFBMEI7d0hBQTFCLDBCQUEwQjsyRkFBMUIsMEJBQTBCO2tCQUR0QyxRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiXHJcbmltcG9ydCB7IE5nTW9kdWxlLCBNb2R1bGVXaXRoUHJvdmlkZXJzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFNpZ25hbHJOb3RpZmljYXRpb25zTW9kdWxlQ29uZmlnIH0gZnJvbSAnLi9jb25maWcvU2lnbmFsck5vdGlmaWNhdGlvbnNNb2R1bGVDb25maWcnO1xyXG5pbXBvcnQgeyBCYXNlTWVzc2FnZVNlcnZpY2UgfSBmcm9tICcuL21vZGVscy9CYXNlTWVzc2FnZVNlcnZpY2UnO1xyXG5pbXBvcnQgeyBOb3RpZmljYXRpb25zU2VydmljZSB9IGZyb20gJy4vc2lnbmFsci1ub3RpZmljYXRpb25zLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBFTkRQT0lOVF9VUkwsIFNJR05BTFJfRU5BQkxFRCwgU0dSX0RFQlVHX01PREUsIE1FU1NBR0VfUEFDSywgQVVUT19SRUNPTk5FQ1QgfSBmcm9tICcuL3Rva2Vucyc7XHJcblxyXG5ATmdNb2R1bGUoKVxyXG5leHBvcnQgY2xhc3MgU2lnbmFsck5vdGlmaWNhdGlvbnNNb2R1bGUge1xyXG4gIHN0YXRpYyBmb3JSb290KGNvbmZpZz86IFNpZ25hbHJOb3RpZmljYXRpb25zTW9kdWxlQ29uZmlnKTogTW9kdWxlV2l0aFByb3ZpZGVyczxTaWduYWxyTm90aWZpY2F0aW9uc01vZHVsZT4ge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgbmdNb2R1bGU6IFNpZ25hbHJOb3RpZmljYXRpb25zTW9kdWxlLFxyXG4gICAgICBwcm92aWRlcnM6IFtcclxuICAgICAgICBOb3RpZmljYXRpb25zU2VydmljZSxcclxuICAgICAgICB7IHByb3ZpZGU6IEJhc2VNZXNzYWdlU2VydmljZSwgdXNlQ2xhc3M6IGNvbmZpZz8ubWVzc2FnZVNlcnZpY2UgfHwgQmFzZU1lc3NhZ2VTZXJ2aWNlIH0sXHJcbiAgICAgICAgeyBwcm92aWRlOiBFTkRQT0lOVF9VUkwsIHVzZVZhbHVlOiBjb25maWc/LmVuZHBvaW50VXJsIH0sXHJcbiAgICAgICAgeyBwcm92aWRlOiBTSUdOQUxSX0VOQUJMRUQsIHVzZVZhbHVlOiBjb25maWc/LmVuYWJsZWQgIT0gbnVsbCA/IGNvbmZpZz8uZW5hYmxlZCA6IHRydWUgfSxcclxuICAgICAgICB7IHByb3ZpZGU6IFNHUl9ERUJVR19NT0RFLCB1c2VWYWx1ZTogY29uZmlnPy5kZWJ1Z01vZGUgIT0gbnVsbCA/IGNvbmZpZz8uZGVidWdNb2RlIDogZmFsc2UgfSxcclxuICAgICAgICB7IHByb3ZpZGU6IE1FU1NBR0VfUEFDSywgdXNlVmFsdWU6IGNvbmZpZz8udXNlTWVzc2FnZVBhY2sgIT0gbnVsbCA/IGNvbmZpZz8udXNlTWVzc2FnZVBhY2sgOiBmYWxzZSB9LFxyXG4gICAgICAgIHsgcHJvdmlkZTogQVVUT19SRUNPTk5FQ1QsIHVzZVZhbHVlOiBjb25maWc/LmF1dG9SZWNvbm5lY3QgIT0gbnVsbCA/IGNvbmZpZz8uYXV0b1JlY29ubmVjdCA6IHRydWUgfSxcclxuICAgICAgXVxyXG4gICAgfTtcclxuICB9XHJcbn0iXX0=
@@ -5,7 +5,7 @@ import * as signalR from '@microsoft/signalr';
5
5
  import { HubConnectionState } from "@microsoft/signalr";
6
6
  import { Subject, EMPTY, from, of } from "rxjs";
7
7
  import { catchError, concatMap, delay, tap } from "rxjs/operators";
8
- import { DEBUG_MODE, ENDPOINT_URL, MESSAGE_PACK, SIGNALR_ENABLED, AUTO_RECONNECT } from "./tokens";
8
+ import { SGR_DEBUG_MODE, ENDPOINT_URL, MESSAGE_PACK, SIGNALR_ENABLED, AUTO_RECONNECT } from "./tokens";
9
9
  import * as i0 from "@angular/core";
10
10
  import * as i1 from "./models/BaseMessageService";
11
11
  /**
@@ -23,6 +23,7 @@ export class NotificationsService {
23
23
  this.msgpack = msgpack;
24
24
  this.enabled = enabled;
25
25
  this.debug = debug;
26
+ this.autoreconnect = autoreconnect;
26
27
  /**
27
28
  * Cache degli Observable generati in base agli Endpoint disponibili
28
29
  */
@@ -31,17 +32,20 @@ export class NotificationsService {
31
32
  this.log(this.loc("SignalR won't be enabled as per configuration"));
32
33
  return;
33
34
  }
35
+ this.init();
36
+ }
37
+ async init() {
34
38
  this.MessageDef.AllDefinitions.forEach(def => { this.notifications$[def.endpoint] = new Subject(); });
35
- let pars = { skipNegotiation: true, transport: signalR.HttpTransportType.WebSockets, logger: debug ? signalR.LogLevel.Debug : signalR.LogLevel.None };
39
+ let pars = { skipNegotiation: true, transport: signalR.HttpTransportType.WebSockets, logger: this.debug ? signalR.LogLevel.Debug : signalR.LogLevel.None };
36
40
  var builder = new signalR.HubConnectionBuilder().withUrl("/" + this.endpoint_url, pars);
37
- if (autoreconnect) {
41
+ if (this.autoreconnect) {
38
42
  this.log(this.loc("Building SignalR Hub with Automatic Reconnection"));
39
43
  // 100 tentativi di riconnessione, 1 ogni 5 secondi
40
44
  builder = builder.withAutomaticReconnect(new Array(100).fill(5 * 1000));
41
45
  }
42
46
  if (this.msgpack) {
43
47
  this.log(this.loc("Building SignalR Hub with MessagePack protocol"));
44
- var mphpModule = require("@microsoft/signalr-protocol-msgpack");
48
+ var mphpModule = await import("@microsoft/signalr-protocol-msgpack");
45
49
  builder = builder.withHubProtocol(new mphpModule.MessagePackHubProtocol());
46
50
  }
47
51
  this.connection = builder.build();
@@ -210,7 +214,7 @@ export class NotificationsService {
210
214
  return message;
211
215
  }
212
216
  }
213
- NotificationsService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: NotificationsService, deps: [{ token: i1.BaseMessageService }, { token: ENDPOINT_URL }, { token: MESSAGE_PACK }, { token: SIGNALR_ENABLED }, { token: DEBUG_MODE }, { token: AUTO_RECONNECT }], target: i0.ɵɵFactoryTarget.Injectable });
217
+ NotificationsService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: NotificationsService, deps: [{ token: i1.BaseMessageService }, { token: ENDPOINT_URL }, { token: MESSAGE_PACK }, { token: SIGNALR_ENABLED }, { token: SGR_DEBUG_MODE }, { token: AUTO_RECONNECT }], target: i0.ɵɵFactoryTarget.Injectable });
214
218
  NotificationsService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: NotificationsService });
215
219
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: NotificationsService, decorators: [{
216
220
  type: Injectable
@@ -225,9 +229,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
225
229
  args: [SIGNALR_ENABLED]
226
230
  }] }, { type: undefined, decorators: [{
227
231
  type: Inject,
228
- args: [DEBUG_MODE]
232
+ args: [SGR_DEBUG_MODE]
229
233
  }] }, { type: undefined, decorators: [{
230
234
  type: Inject,
231
235
  args: [AUTO_RECONNECT]
232
236
  }] }]; } });
233
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnbmFsci1ub3RpZmljYXRpb25zLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9zaWduYWxyLW5vdGlmaWNhdGlvbnMvc3JjL2xpYi9zaWduYWxyLW5vdGlmaWNhdGlvbnMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxVQUFVO0FBQ1YsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFbkQsa0NBQWtDO0FBQ2xDLE9BQU8sS0FBSyxPQUFPLE1BQU0sb0JBQW9CLENBQUM7QUFDOUMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDeEQsT0FBTyxFQUFjLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM1RCxPQUFPLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFLbkUsT0FBTyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQVUsWUFBWSxFQUFFLGVBQWUsRUFBRSxjQUFjLEVBQUUsTUFBTSxVQUFVLENBQUM7OztBQUUzRzs7R0FFRztBQUVILE1BQU0sT0FBTyxvQkFBb0I7SUFZN0I7Ozs7T0FJRztJQUNILFlBQW9CLFVBQThCLEVBQWdDLFlBQW9CLEVBQWdDLE9BQWdCLEVBQW1DLE9BQWdCLEVBQThCLEtBQWMsRUFBMEIsYUFBc0I7UUFBalIsZUFBVSxHQUFWLFVBQVUsQ0FBb0I7UUFBZ0MsaUJBQVksR0FBWixZQUFZLENBQVE7UUFBZ0MsWUFBTyxHQUFQLE9BQU8sQ0FBUztRQUFtQyxZQUFPLEdBQVAsT0FBTyxDQUFTO1FBQThCLFVBQUssR0FBTCxLQUFLLENBQVM7UUFmclA7O1dBRUc7UUFDSyxtQkFBYyxHQUFzQyxFQUFFLENBQUM7UUFhM0QsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFP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QkFBNkIsTUFBTTsyQkFBQyxVQUFVOzswQkFBMkIsTUFBTTsyQkFBQyxjQUFjIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQW5ndWxhclxyXG5pbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3QgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5cclxuLy8gRGlyZXR0aXZlLCBDb21wb25lbnRpLCBMaWJyZXJpZVxyXG5pbXBvcnQgKiBhcyBzaWduYWxSIGZyb20gJ0BtaWNyb3NvZnQvc2lnbmFscic7XHJcbmltcG9ydCB7IEh1YkNvbm5lY3Rpb25TdGF0ZSB9IGZyb20gXCJAbWljcm9zb2Z0L3NpZ25hbHJcIjtcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3ViamVjdCwgRU1QVFksIGZyb20sIG9mIH0gZnJvbSBcInJ4anNcIjtcclxuaW1wb3J0IHsgY2F0Y2hFcnJvciwgY29uY2F0TWFwLCBkZWxheSwgdGFwIH0gZnJvbSBcInJ4anMvb3BlcmF0b3JzXCI7XHJcblxyXG4vLyBNb2RlbGxpXHJcbmltcG9ydCB7IEJhc2VNZXNzYWdlU2VydmljZSB9IGZyb20gJy4vbW9kZWxzL0Jhc2VNZXNzYWdlU2VydmljZSc7XHJcbmltcG9ydCB7IEVuZHBvaW50RGVmIH0gZnJvbSAnLi9tb2RlbHMvRW5kcG9pbnREZWYnO1xyXG5pbXBvcnQgeyBERUJVR19NT0RFLCBFTkRQT0lOVF9VUkwsIExPQ0FMRSwgTUVTU0FHRV9QQUNLLCBTSUdOQUxSX0VOQUJMRUQsIEFVVE9fUkVDT05ORUNUIH0gZnJvbSBcIi4vdG9rZW5zXCI7XHJcblxyXG4vKipcclxuICogU2Vydml6aW8gY2hlIGdlc3Rpc2NlIGxhIGNvbXVuaWNhemlvbmUgY29uIHVuIEh1YiBTaWduYWxSIGluIGJhc2UgYWxsZSBjb25maWd1cmF6aW9uaSBmb3JuaXRlIGRhbGwnYXBwbGljYXppb25lXHJcbiAqL1xyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBOb3RpZmljYXRpb25zU2VydmljZSB7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWNoZSBkZWdsaSBPYnNlcnZhYmxlIGdlbmVyYXRpIGluIGJhc2UgYWdsaSBFbmRwb2ludCBkaXNwb25pYmlsaVxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIG5vdGlmaWNhdGlvbnMkOiB7IFtpbmRleDogc3RyaW5nXTogU3ViamVjdDxhbnk+IH0gPSB7fTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIENvbm5lc3Npb25lIFNpZ25hbHJcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBjb25uZWN0aW9uOiBzaWduYWxSLkh1YkNvbm5lY3Rpb247XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDb3N0cnV0dG9yZVxyXG4gICAgICogXHJcbiAgICAgKiBAaWdub3JlXHJcbiAgICAgKi9cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgTWVzc2FnZURlZjogQmFzZU1lc3NhZ2VTZXJ2aWNlLCBASW5qZWN0KEVORFBPSU5UX1VSTCkgcHJpdmF0ZSBlbmRwb2ludF91cmw6IHN0cmluZywgQEluamVjdChNRVNTQUdFX1BBQ0spIHByaXZhdGUgbXNncGFjazogYm9vbGVhbiwgQEluamVjdChTSUdOQUxSX0VOQUJMRUQpIHByaXZhdGUgZW5hYmxlZDogYm9vbGVhbiwgQEluamVjdChERUJVR19NT0RFKSBwcml2YXRlIGRlYnVnOiBib29sZWFuLCBASW5qZWN0KEFVVE9fUkVDT05ORUNUKSBhdXRvcmVjb25uZWN0OiBib29sZWFuKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmVuYWJsZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5sb2codGhpcy5sb2MoXCJTaWduYWxSIHdvbid0IGJlIGVuYWJsZWQgYXMgcGVyIGNvbmZpZ3VyYXRpb25cIikpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLk1lc3NhZ2VEZWYuQWxsRGVmaW5pdGlvbnMuZm9yRWFjaChkZWYgPT4geyB0aGlzLm5vdGlmaWNhdGlvbnMkW2RlZi5lbmRwb2ludF0gPSBuZXcgU3ViamVjdDx0eXBlb2YgZGVmLmluVHlwZURlZmF1bHQ+KCk7IH0pO1xyXG5cclxuICAgICAgICBsZXQgcGFyczogc2lnbmFsUi5JSHR0cENvbm5lY3Rpb25PcHRpb25zID0geyBza2lwTmVnb3RpYXRpb246IHRydWUsIHRyYW5zcG9ydDogc2lnbmFsUi5IdHRwVHJhbnNwb3J0VHlwZS5XZWJTb2NrZXRzLCBsb2dnZXI6IGRlYnVnID8gc2lnbmFsUi5Mb2dMZXZlbC5EZWJ1ZyA6IHNpZ25hbFIuTG9nTGV2ZWwuTm9uZSB9O1xyXG4gICAgICAgIHZhciBidWlsZGVyID0gbmV3IHNpZ25hbFIuSHViQ29ubmVjdGlvbkJ1aWxkZXIoKS53aXRoVXJsKFwiL1wiICsgdGhpcy5lbmRwb2ludF91cmwsIHBhcnMpO1xyXG5cclxuICAgICAgICBpZiAoYXV0b3JlY29ubmVjdCkge1xyXG4gICAgICAgICAgICB0aGlzLmxvZyh0aGlzLmxvYyhcIkJ1aWxkaW5nIFNpZ25hbFIgSHViIHdpdGggQXV0b21hdGljIFJlY29ubmVjdGlvblwiKSk7XHJcbiAgICAgICAgICAgIC8vIDEwMCB0ZW50YXRpdmkgZGkgcmljb25uZXNzaW9uZSwgMSBvZ25pIDUgc2Vjb25kaVxyXG4gICAgICAgICAgICBidWlsZGVyID0gYnVpbGRlci53aXRoQXV0b21hdGljUmVjb25uZWN0KG5ldyBBcnJheSgxMDApLmZpbGwoNSAqIDEwMDApKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLm1zZ3BhY2spIHtcclxuICAgICAgICAgICAgdGhpcy5sb2codGhpcy5sb2MoXCJCdWlsZGluZyBTaWduYWxSIEh1YiB3aXRoIE1lc3NhZ2VQYWNrIHByb3RvY29sXCIpKTtcclxuICAgICAgICAgICAgdmFyIG1waHBNb2R1bGUgPSByZXF1aXJlKFwiQG1pY3Jvc29mdC9zaWduYWxyLXByb3RvY29sLW1zZ3BhY2tcIik7XHJcbiAgICAgICAgICAgIGJ1aWxkZXIgPSBidWlsZGVyLndpdGhIdWJQcm90b2NvbChuZXcgbXBocE1vZHVsZS5NZXNzYWdlUGFja0h1YlByb3RvY29sKCkpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmNvbm5lY3Rpb24gPSBidWlsZGVyLmJ1aWxkKCk7XHJcbiAgICAgICAgdGhpcy5jb25uZWN0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBFZmZldHR1YSBsYSBjb25uZXNzaW9uZSBhbGwnSHViIFNpZ25hbHIgZSByZWdpc3RyYSB0dXR0aSBnbGkgRW5kcG9pbnQgcGVyIGN1aSBpbCBCYWNrZW5kIGNvbXVuaWNhIGNvbiBpbCBGcm9udGVuZCBzdWxsYSAqKmNvbm5lY3Rpb24qKlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGNvbm5lY3QoKSB7XHJcbiAgICAgICAgdGhpcy5jb25uZWN0aW9uLnN0YXJ0KCkuY2F0Y2goZXJyID0+IGNvbnNvbGUubG9nKGVycikpO1xyXG4gICAgICAgIHRoaXMuTWVzc2FnZURlZi5BbGxEZWZpbml0aW9ucy5mb3JFYWNoKGQgPT4ge1xyXG4gICAgICAgICAgICAvL1JlZ2lzdHJvIHNvbG8gbGUgY29zZSBkaSBJTiwgcXVlbGxlIGRpIG91dCBzb25vIGNoaWFtYXRlIGNoZSBmYWNjaW8gaW8gYWwgQkUgcXVpbmRpIG5vbiBzZXJ2b25vXHJcbiAgICAgICAgICAgIGlmIChkLmluVHlwZURlZmF1bHQgIT09IG51bGwgJiYgZC5vdXRUeXBlRGVmYXVsdCA9PT0gbnVsbClcclxuICAgICAgICAgICAgICAgIHRoaXMuY29ubmVjdGlvbi5vbihkLmVuZHBvaW50LCAobWVzc2FnZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9nKHRoaXMubG9jKFwiUmVxdWVzdCByZWNlaXZlZCBmcm9tIHRoZSBzZXJ2ZXIgZm9yIGVuZHBvaW50XCIpICsgXCIgJ1wiICsgZC5lbmRwb2ludCArIFwiJzogXCIgKyB0aGlzLnN1YnN0cmluZ0xvZyhKU09OLnN0cmluZ2lmeShtZXNzYWdlKSkpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9ucyRbZC5lbmRwb2ludF0ubmV4dChtZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZyh0aGlzLmxvYyhcIlJlZnVzaW5nIHRvIHJlZ2lzdGVyIGVuZHBvaW50XCIpICsgXCIgXCIgKyBkLmVuZHBvaW50ICsgXCIgXCIgKyB0aGlzLmxvYyhcImJlY2F1c2UgaXQgaXMgbm90IGRlY2xhcmVkIGFzIElOIC0gT05MWVwiKSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBFZmZldHR1YSB2ZXJpZmljaGUgc3VsbGEgY29ubmVzc2lvbmUgZSwgaW4gY2FzbyBub24gZm9zc2UgY29sbGVnYXRhLCB0ZW50YSBkaSByaWNvbm5ldHRlcmxhXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlPCdPSycgfCAnS08nIHwgJ05PLU9QJz59ICdPSycgU2UgbGEgY29ubmVzc2lvbmUgw6ggZ2nDoCBjb25uZXNzYSBvIMOoIHN0YXRhIHJpY29ubmVzc2EgY29uIHN1Y2Nlc3NvLCAnS08nIFNlIG5vbiDDqCBzdGF0byBwb3NzaWJpbGUgcmljb25uZXR0ZXJlIFxyXG4gICAgICogdW5hIGNvbm5lc3Npb25lIGRpc2Nvbm5lc3NhLCAnTk8tT1AnIHNlIGxhIGNvbm5lc2lzb25lIMOoIGluIHVubyBzdGF0byBpbnRlcm1lZGlvIGNoZSBub24gcHXDsiBlc3NlcmUgbW9kaWZpY2F0b1xyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZW5zdXJlQ29ubmVjdGVkKCk6IFByb21pc2U8J09LJyB8ICdLTycgfCAnTk8tT1AnPiB7XHJcbiAgICAgICAgaWYgKHRoaXMuY29ubmVjdGlvbi5zdGF0ZSA9PSBIdWJDb25uZWN0aW9uU3RhdGUuRGlzY29ubmVjdGVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMubG9nKHRoaXMubG9jKFwiQ29ubmVjdGlvbiBsb3N0IG9yIG1pc3NpbmcsIHJlY29ubmVjdGluZy4uLlwiKSk7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb25uZWN0aW9uLnN0YXJ0KClcclxuICAgICAgICAgICAgICAgIC50aGVuKF8gPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoXCJPS1wiKTtcclxuICAgICAgICAgICAgICAgIH0sIF8gPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9nKHRoaXMubG9jKFwiQ2Fubm90IHJlY29ubmVjdCBTaWduYWxSLCBmcm9udGVuZCBIVUIgb2ZmbGluZVwiKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShcIktPXCIpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHRoaXMuY29ubmVjdGlvbi5zdGF0ZSA9PSBIdWJDb25uZWN0aW9uU3RhdGUuQ29ubmVjdGVkKVxyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFwiT0tcIik7XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFwiTk8tT1BcIik7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbnZpYSB1biBtZXNzYWdnaW8gYWxsJ0h1YiBkZWwgQmFja2VuZFxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge0VuZHBvaW50RGVmPFRPdXQsIGFueT59IGl0ZW0gRW5kcG9pbnQgZGEgY29udGF0dGFyZVxyXG4gICAgICogQHBhcmFtIHtUT3V0fSBkdG8gRHRvIGRhIGludmlhcmUgYWxsJ0VuZHBvaW50XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzZW5kPFRPdXQ+KGl0ZW06IEVuZHBvaW50RGVmPFRPdXQsIGFueT4sIGR0bzogVE91dCkge1xyXG4gICAgICAgIGlmICghdGhpcy5lbmFibGVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMubG9nKHRoaXMubG9jKFwiU2VuZCByZXF1ZXN0IGlnbm9yZWQgYmVjYXVzZSBTaWduYWxSIGlzIG5vdCBhY3RpdmUgYnkgY29uZmlndXJhdGlvblwiKSk7XHJcbiAgICAgICAgICAgIHJldHVybiBFTVBUWTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmNvbm5lY3Rpb24uc3RhdGUgPT0gSHViQ29ubmVjdGlvblN0YXRlLkNvbm5lY3RpbmcgfHwgdGhpcy5jb25uZWN0aW9uLnN0YXRlID09IEh1YkNvbm5lY3Rpb25TdGF0ZS5SZWNvbm5lY3RpbmcgfHwgdGhpcy5jb25uZWN0aW9uLnN0YXRlID09IEh1YkNvbm5lY3Rpb25TdGF0ZS5EaXNjb25uZWN0aW5nKSB7XHJcbiAgICAgICAgICAgIHRoaXMubG9nKHRoaXMubG9jKFwiU2VuZCByZXF1ZXN0IHNlbnQgYmVmb3JlIGEgY29ubmVjdGlvbiB3YXMgaW4gc3RhYmxlIFN0YXRlLCB3YWl0aW5nIDEgc2Vjb25kIGFuZCByZXRyeWluZ1wiKSk7XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4geyB0aGlzLnNlbmQoaXRlbSwgZHRvKTsgfSwgMTAwMCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHRoaXMuY29ubmVjdGlvbi5zdGF0ZSA9PSBIdWJDb25uZWN0aW9uU3RhdGUuRGlzY29ubmVjdGVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZW5zdXJlQ29ubmVjdGVkKCkudGhlbih0ID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICh0ID09IFwiS09cIikgdGhpcy5sb2codGhpcy5sb2MoXCJFUlJPUlMgb24gcmVjb25uZWN0aW5nIGJlZm9yZSByZXRyeWluZyBhIHNlbmQgY29tbWFuZC4gU2VudCBtZXNzYWdlIFdJTEwgQkUgTE9TVFwiKSk7XHJcbiAgICAgICAgICAgICAgICBlbHNlIHRoaXMuc2VuZChpdGVtLCBkdG8pO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5jb25uZWN0aW9uLnNlbmQoaXRlbS5lbmRwb2ludCwgZHRvKS50aGVuKF8gPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZGVidWcpXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5pbmZvKHRoaXMubG9jKFwiUmVxdWVzdCBzZW50IHRvIHNlcnZlclwiKSArIFwiIC0gXCIgKyBpdGVtLmVuZHBvaW50ICsgXCI6IFwiICsgdGhpcy5zdWJzdHJpbmdMb2coSlNPTi5zdHJpbmdpZnkoZHRvKSkpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbnZpYSB1biBtZXNzYWdnaW8gYWxsJ0h1YiBkZWwgQmFja2VuZCwgYXNwZXR0YW5kb3NpIHVuYSByaXNwb3N0YVxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge0VuZHBvaW50RGVmPFRPdXQsIFRJbj59IGl0ZW0gRW5kcG9pbnQgZGEgY29udGF0dGFyZVxyXG4gICAgICogQHBhcmFtIHtUT3V0fSBkdG8gRHRvIGRhIGludmlhcmUgYWxsJ0VuZHBvaW50XHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm5zIHtPYnNlcnZhYmxlPFRJbj59IE9ic2VydmFibGUgc3UgY3VpIGNpIHNpIHB1w7IgcmVnaXN0cmFyZSBwZXIgcmljZXZlcmUgaWwgcmlzdWx0YXRvIGRlbGxhIGNoaWFtYXRhXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBpbnZva2U8VE91dCwgVEluPihpdGVtOiBFbmRwb2ludERlZjxUT3V0LCBUSW4+LCBkdG86IFRPdXQpOiBPYnNlcnZhYmxlPFRJbj4ge1xyXG4gICAgICAgIGlmICghdGhpcy5lbmFibGVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMubG9nKHRoaXMubG9jKFwiSW52b2tlIHJlcXVlc3QgaWdub3JlZCBiZWNhdXNlIFNpZ25hbFIgaXMgbm90IGFjdGl2ZSBieSBjb25maWd1cmF0aW9uXCIpKTtcclxuICAgICAgICAgICAgcmV0dXJuIEVNUFRZO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuY29ubmVjdGlvbi5zdGF0ZSA9PSBIdWJDb25uZWN0aW9uU3RhdGUuQ29ubmVjdGluZyB8fCB0aGlzLmNvbm5lY3Rpb24uc3RhdGUgPT0gSHViQ29ubmVjdGlvblN0YXRlLlJlY29ubmVjdGluZyB8fCB0aGlzLmNvbm5lY3Rpb24uc3RhdGUgPT0gSHViQ29ubmVjdGlvblN0YXRlLkRpc2Nvbm5lY3RpbmcpIHtcclxuICAgICAgICAgICAgdGhpcy5sb2codGhpcy5sb2MoXCJJbnZva2UgcmVxdWVzdCBzZW50IGJlZm9yZSBhIGNvbm5lY3Rpb24gd2FzIGluIHN0YWJsZSBTdGF0ZSwgd2FpdGluZyAxIHNlY29uZCBhbmQgcmV0cnlpbmdcIikpO1xyXG4gICAgICAgICAgICByZXR1cm4gb2YoKS5waXBlKGRlbGF5KDEwMDApLCBjb25jYXRNYXAoKCkgPT4gdGhpcy5pbnZva2UoaXRlbSwgZHRvKSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh0aGlzLmNvbm5lY3Rpb24uc3RhdGUgPT0gSHViQ29ubmVjdGlvblN0YXRlLkRpc2Nvbm5lY3RlZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZnJvbSh0aGlzLmVuc3VyZUNvbm5lY3RlZCgpKS5waXBlKGNvbmNhdE1hcCgocmVzKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAocmVzID09IFwiS09cIikge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9nKHRoaXMubG9jKFwiRVJST1JTIG9uIHJlY29ubmVjdGluZyBiZWZvcmUgcmV0cnlpbmcgYSBzZW5kIGNvbW1hbmQuIFNlbnQgbWVzc2FnZSBXSUxMIEJFIExPU1RcIikpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBFTVBUWTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgcmV0dXJuIHRoaXMuaW52b2tlKGl0ZW0sIGR0byk7XHJcbiAgICAgICAgICAgIH0pKVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZyb20odGhpcy5jb25uZWN0aW9uLmludm9rZTxUSW4+KGl0ZW0uZW5kcG9pbnQsIGR0bykpLnBpcGUoXHJcbiAgICAgICAgICAgICAgICB0YXAoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmRlYnVnKSBjb25zb2xlLmxvZyh0aGlzLmxvYyhcIlJlcXVlc3QgaW52b2tlZCB0byBzZXJ2ZXJcIikgKyBcIiAtIFwiICsgaXRlbS5lbmRwb2ludCArIFwiOiBcIiArIHRoaXMuc3Vic3RyaW5nTG9nKEpTT04uc3RyaW5naWZ5KGR0bykpKTtcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSG9vayBwZXIgb3NzZXJ2YXJlIGkgZGF0aSBzcGVkaXRpIGFkIHVuIEVuZHBvaW50IGRhbCBCYWNrZW5kXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7RW5kcG9pbnREZWY8VEluLCBhbnk+fSBpdGVtIEVuZHBvaW50IHN1IGN1aSBhc2NvbHRhcmVcclxuICAgICAqIFxyXG4gICAgICogQHJldHVybnMge09ic2VydmFibGU8VEluPn0gT2JzZXJ2YWJsZSBzdSBjdWkgY2kgc2kgcHXDsiByZWdpc3RyYXJlIHBlciByaWNldmVyZSBsJ29nZ2V0dG8gZ2VuZXJhdG8gYWQgb2duaSBjaGlhbWF0YSBkYWwgQmFja2VuZCBhbCBGcm9udGVuZFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgb2JzZXJ2ZTxUSW4+KGl0ZW06IEVuZHBvaW50RGVmPFRJbiwgYW55Pik6IE9ic2VydmFibGU8VEluPiB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmVuYWJsZWQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmxvZyh0aGlzLmxvYyhcIk9ic2VydmUgcmVxdWVzdCBpZ25vcmVkIGJlY2F1c2UgU2lnbmFsUiBpcyBub3QgYWN0aXZlIGJ5IGNvbmZpZ3VyYXRpb25cIikpO1xyXG4gICAgICAgICAgICByZXR1cm4gRU1QVFk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmxvZyh0aGlzLmxvYyhcIlJldHVybmluZyBvYnNlcnZhYmxlIGZvciByZXF1aXJlZCBlbmRwb2ludFwiKSArIFwiOiBcIiArIGl0ZW0uZW5kcG9pbnQpO1xyXG4gICAgICAgIHJldHVybiA8T2JzZXJ2YWJsZTxUSW4+PnRoaXMubm90aWZpY2F0aW9ucyRbaXRlbS5lbmRwb2ludF07XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEaXNjb25uZXNzaW9uZSBkZWwgc2lzdGVtYSBkaSBTaWduYWxSXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm5zIHtPYnNlcnZhYmxlPHZvaWQ+fSBPYnNlcnZhYmxlIGEgY3VpIHJlZ2lzdHJhcnNpIGNoZSB2aWVuZSBjaGlhbWF0byBxdWFuZG8gbGEgZGlzY29ubmVzc2lvbmUgw6ggdGVybWluYXRhXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBkaXNjb25uZWN0KCk6IE9ic2VydmFibGU8dm9pZD4ge1xyXG4gICAgICAgIC8vTk8tT1Agc2Ugbm9uIGF0dGl2b1xyXG4gICAgICAgIGlmICghdGhpcy5lbmFibGVkKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5sb2codGhpcy5sb2MoXCJEaXNjb25uZWN0aW9uIHJlcXVlc3QgaWdub3JlZCBiZWNhdXNlIFNpZ25hbFIgaXMgbm90IGFjdGl2ZSBieSBjb25maWd1cmF0aW9uXCIpKTtcclxuICAgICAgICAgICAgcmV0dXJuIEVNUFRZO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGZyb20odGhpcy5jb25uZWN0aW9uLnN0b3AoKSkucGlwZShcclxuICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyLCBjYXVnaHQpID0+IHsgY29uc29sZS5sb2coZXJyKTsgcmV0dXJuIG9mKG51bGwpOyB9KSxcclxuICAgICAgICAgICAgdGFwKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9nKHRoaXMubG9jKFwiRGlzY29ubmVjdGlvbiByZXF1ZXN0IGhvbm9yZWRcIikpO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUYWdsaWEgdW4gbG9nIHRyb3BwbyBsdW5nb1xyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4dCBMb2cgZGEgdGFnbGlhcmVcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBtYXhjaGFycyBOdW1lcm8gbWFzc2ltbyBkaSBjYXJhdHRlcmkgZGEgdGVuZXJlXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IExvZyB0YWdsaWF0b1xyXG4gICAgICovXHJcbiAgICBwcml2YXRlIHN1YnN0cmluZ0xvZyh0ZXh0OiBzdHJpbmcsIG1heGNoYXJzOiBudW1iZXIgPSAxMjApIDogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGV4dC5sZW5ndGggPiBtYXhjaGFycyA/IHRleHQuc3Vic3RyKDAsIG1heGNoYXJzKSArIFwiWy4uLl1cIiAgOiB0ZXh0O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU3RhbXBhIHVuIGxvZyBhIGNvbnNvbGVcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2UgTWVzc2FnZ2lvIGRhIHN0YW1wYXJlXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgbG9nKG1lc3NhZ2U6IHN0cmluZykge1xyXG4gICAgICAgIGlmICh0aGlzLmRlYnVnKVxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIkBzaWduYWxyLW5vdGlmaWNhdGlvbnM6IFwiICsgbWVzc2FnZSlcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEhlbHBlciBkaSBsb2NhbGl6emF6aW9uZVxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZSBNZXNzYWdnaW8gZGEgdHJhZHVycmVcclxuICAgICAqIFxyXG4gICAgICogQHJldHVybnMge3N0cmluZ30gTWVzc2FnZ2lvIHRyYWRvdHRvXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgbG9jKG1lc3NhZ2U6IHN0cmluZykgOiBzdHJpbmd7XHJcbiAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XHJcbiAgICB9XHJcbn0iXX0=
237
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnbmFsci1ub3RpZmljYXRpb25zLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9zaWduYWxyLW5vdGlmaWNhdGlvbnMvc3JjL2xpYi9zaWduYWxyLW5vdGlmaWNhdGlvbnMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxVQUFVO0FBQ1YsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFbkQsa0NBQWtDO0FBQ2xDLE9BQU8sS0FBSyxPQUFPLE1BQU0sb0JBQW9CLENBQUM7QUFDOUMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDeEQsT0FBTyxFQUFjLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM1RCxPQUFPLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFLbkUsT0FBTyxFQUFFLGNBQWMsRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLGVBQWUsRUFBRSxjQUFjLEVBQUUsTUFBTSxVQUFVLENBQUM7OztBQUV2Rzs7R0FFRztBQUVILE1BQU0sT0FBTyxvQkFBb0I7SUFZN0I7Ozs7T0FJRztJQUNILFlBQW9CLFVBQThCLEVBQWdDLFlBQW9CLEVBQWdDLE9BQWdCLEVBQW1DLE9BQWdCLEVBQWtDLEtBQWMsRUFBa0MsYUFBc0I7UUFBN1IsZUFBVSxHQUFWLFVBQVUsQ0FBb0I7UUFBZ0MsaUJBQVksR0FBWixZQUFZLENBQVE7UUFBZ0MsWUFBTyxHQUFQLE9BQU8sQ0FBUztRQUFtQyxZQUFPLEdBQVAsT0FBTyxDQUFTO1FBQWtDLFVBQUssR0FBTCxLQUFLLENBQVM7UUFBa0Msa0JBQWEsR0FBYixhQUFhLENBQVM7UUFmalQ7O1dBRUc7UUFDSyxtQkFBYyxHQUFzQyxFQUFFLENBQUM7UUFh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QWpCeFEsb0JBQW9COzJGQUFwQixvQkFBb0I7a0JBRGhDLFVBQVU7OzBCQWtCOEMsTUFBTTsyQkFBQyxZQUFZOzswQkFBaUMsTUFBTTsyQkFBQyxZQUFZOzswQkFBNkIsTUFBTTsyQkFBQyxlQUFlOzswQkFBNkIsTUFBTTsyQkFBQyxjQUFjOzswQkFBMkIsTUFBTTsyQkFBQyxjQUFjIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQW5ndWxhclxyXG5pbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3QgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5cclxuLy8gRGlyZXR0aXZlLCBDb21wb25lbnRpLCBMaWJyZXJpZVxyXG5pbXBvcnQgKiBhcyBzaWduYWxSIGZyb20gJ0BtaWNyb3NvZnQvc2lnbmFscic7XHJcbmltcG9ydCB7IEh1YkNvbm5lY3Rpb25TdGF0ZSB9IGZyb20gXCJAbWljcm9zb2Z0L3NpZ25hbHJcIjtcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3ViamVjdCwgRU1QVFksIGZyb20sIG9mIH0gZnJvbSBcInJ4anNcIjtcclxuaW1wb3J0IHsgY2F0Y2hFcnJvciwgY29uY2F0TWFwLCBkZWxheSwgdGFwIH0gZnJvbSBcInJ4anMvb3BlcmF0b3JzXCI7XHJcblxyXG4vLyBNb2RlbGxpXHJcbmltcG9ydCB7IEJhc2VNZXNzYWdlU2VydmljZSB9IGZyb20gJy4vbW9kZWxzL0Jhc2VNZXNzYWdlU2VydmljZSc7XHJcbmltcG9ydCB7IEVuZHBvaW50RGVmIH0gZnJvbSAnLi9tb2RlbHMvRW5kcG9pbnREZWYnO1xyXG5pbXBvcnQgeyBTR1JfREVCVUdfTU9ERSwgRU5EUE9JTlRfVVJMLCBNRVNTQUdFX1BBQ0ssIFNJR05BTFJfRU5BQkxFRCwgQVVUT19SRUNPTk5FQ1QgfSBmcm9tIFwiLi90b2tlbnNcIjtcclxuXHJcbi8qKlxyXG4gKiBTZXJ2aXppbyBjaGUgZ2VzdGlzY2UgbGEgY29tdW5pY2F6aW9uZSBjb24gdW4gSHViIFNpZ25hbFIgaW4gYmFzZSBhbGxlIGNvbmZpZ3VyYXppb25pIGZvcm5pdGUgZGFsbCdhcHBsaWNhemlvbmVcclxuICovXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIE5vdGlmaWNhdGlvbnNTZXJ2aWNlIHtcclxuXHJcbiAgICAvKipcclxuICAgICAqIENhY2hlIGRlZ2xpIE9ic2VydmFibGUgZ2VuZXJhdGkgaW4gYmFzZSBhZ2xpIEVuZHBvaW50IGRpc3BvbmliaWxpXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgbm90aWZpY2F0aW9ucyQ6IHsgW2luZGV4OiBzdHJpbmddOiBTdWJqZWN0PGFueT4gfSA9IHt9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ29ubmVzc2lvbmUgU2lnbmFsclxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGNvbm5lY3Rpb246IHNpZ25hbFIuSHViQ29ubmVjdGlvbjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIENvc3RydXR0b3JlXHJcbiAgICAgKiBcclxuICAgICAqIEBpZ25vcmVcclxuICAgICAqL1xyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBNZXNzYWdlRGVmOiBCYXNlTWVzc2FnZVNlcnZpY2UsIEBJbmplY3QoRU5EUE9JTlRfVVJMKSBwcml2YXRlIGVuZHBvaW50X3VybDogc3RyaW5nLCBASW5qZWN0KE1FU1NBR0VfUEFDSykgcHJpdmF0ZSBtc2dwYWNrOiBib29sZWFuLCBASW5qZWN0KFNJR05BTFJfRU5BQkxFRCkgcHJpdmF0ZSBlbmFibGVkOiBib29sZWFuLCBASW5qZWN0KFNHUl9ERUJVR19NT0RFKSBwcml2YXRlIGRlYnVnOiBib29sZWFuLCBASW5qZWN0KEFVVE9fUkVDT05ORUNUKSBwcml2YXRlIGF1dG9yZWNvbm5lY3Q6IGJvb2xlYW4pIHtcclxuICAgICAgICBpZiAoIXRoaXMuZW5hYmxlZCkge1xyXG4gICAgICAgICAgICB0aGlzLmxvZyh0aGlzLmxvYyhcIlNpZ25hbFIgd29uJ3QgYmUgZW5hYmxlZCBhcyBwZXIgY29uZmlndXJhdGlvblwiKSk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYXN5bmMgaW5pdCgpe1xyXG4gICAgICAgIHRoaXMuTWVzc2FnZURlZi5BbGxEZWZpbml0aW9ucy5mb3JFYWNoKGRlZiA9PiB7IHRoaXMubm90aWZpY2F0aW9ucyRbZGVmLmVuZHBvaW50XSA9IG5ldyBTdWJqZWN0PHR5cGVvZiBkZWYuaW5UeXBlRGVmYXVsdD4oKTsgfSk7XHJcblxyXG4gICAgICAgIGxldCBwYXJzOiBzaWduYWxSLklIdHRwQ29ubmVjdGlvbk9wdGlvbnMgPSB7IHNraXBOZWdvdGlhdGlvbjogdHJ1ZSwgdHJhbnNwb3J0OiBzaWduYWxSLkh0dHBUcmFuc3BvcnRUeXBlLldlYlNvY2tldHMsIGxvZ2dlcjogdGhpcy5kZWJ1ZyA/IHNpZ25hbFIuTG9nTGV2ZWwuRGVidWcgOiBzaWduYWxSLkxvZ0xldmVsLk5vbmUgfTtcclxuICAgICAgICB2YXIgYnVpbGRlciA9IG5ldyBzaWduYWxSLkh1YkNvbm5lY3Rpb25CdWlsZGVyKCkud2l0aFVybChcIi9cIiArIHRoaXMuZW5kcG9pbnRfdXJsLCBwYXJzKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuYXV0b3JlY29ubmVjdCkge1xyXG4gICAgICAgICAgICB0aGlzLmxvZyh0aGlzLmxvYyhcIkJ1aWxkaW5nIFNpZ25hbFIgSHViIHdpdGggQXV0b21hdGljIFJlY29ubmVjdGlvblwiKSk7XHJcbiAgICAgICAgICAgIC8vIDEwMCB0ZW50YXRpdmkgZGkgcmljb25uZXNzaW9uZSwgMSBvZ25pIDUgc2Vjb25kaVxyXG4gICAgICAgICAgICBidWlsZGVyID0gYnVpbGRlci53aXRoQXV0b21hdGljUmVjb25uZWN0KG5ldyBBcnJheSgxMDApLmZpbGwoNSAqIDEwMDApKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLm1zZ3BhY2spIHtcclxuICAgICAgICAgICAgdGhpcy5sb2codGhpcy5sb2MoXCJCdWlsZGluZyBTaWduYWxSIEh1YiB3aXRoIE1lc3NhZ2VQYWNrIHByb3RvY29sXCIpKTtcclxuICAgICAgICAgICAgdmFyIG1waHBNb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJAbWljcm9zb2Z0L3NpZ25hbHItcHJvdG9jb2wtbXNncGFja1wiKTtcclxuICAgICAgICAgICAgYnVpbGRlciA9IGJ1aWxkZXIud2l0aEh1YlByb3RvY29sKG5ldyBtcGhwTW9kdWxlLk1lc3NhZ2VQYWNrSHViUHJvdG9jb2woKSlcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuY29ubmVjdGlvbiA9IGJ1aWxkZXIuYnVpbGQoKTtcclxuICAgICAgICB0aGlzLmNvbm5lY3QoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEVmZmV0dHVhIGxhIGNvbm5lc3Npb25lIGFsbCdIdWIgU2lnbmFsciBlIHJlZ2lzdHJhIHR1dHRpIGdsaSBFbmRwb2ludCBwZXIgY3VpIGlsIEJhY2tlbmQgY29tdW5pY2EgY29uIGlsIEZyb250ZW5kIHN1bGxhICoqY29ubmVjdGlvbioqXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgY29ubmVjdCgpIHtcclxuICAgICAgICB0aGlzLmNvbm5lY3Rpb24uc3RhcnQoKS5jYXRjaChlcnIgPT4gY29uc29sZS5sb2coZXJyKSk7XHJcbiAgICAgICAgdGhpcy5NZXNzYWdlRGVmLkFsbERlZmluaXRpb25zLmZvckVhY2goZCA9PiB7XHJcbiAgICAgICAgICAgIC8vUmVnaXN0cm8gc29sbyBsZSBjb3NlIGRpIElOLCBxdWVsbGUgZGkgb3V0IHNvbm8gY2hpYW1hdGUgY2hlIGZhY2NpbyBpbyBhbCBCRSBxdWluZGkgbm9uIHNlcnZvbm9cclxuICAgICAgICAgICAgaWYgKGQuaW5UeXBlRGVmYXVsdCAhPT0gbnVsbCAmJiBkLm91dFR5cGVEZWZhdWx0ID09PSBudWxsKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jb25uZWN0aW9uLm9uKGQuZW5kcG9pbnQsIChtZXNzYWdlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2codGhpcy5sb2MoXCJSZXF1ZXN0IHJlY2VpdmVkIGZyb20gdGhlIHNlcnZlciBmb3IgZW5kcG9pbnRcIikgKyBcIiAnXCIgKyBkLmVuZHBvaW50ICsgXCInOiBcIiArIHRoaXMuc3Vic3RyaW5nTG9nKEpTT04uc3RyaW5naWZ5KG1lc3NhZ2UpKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25zJFtkLmVuZHBvaW50XS5uZXh0KG1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIHRoaXMubG9nKHRoaXMubG9jKFwiUmVmdXNpbmcgdG8gcmVnaXN0ZXIgZW5kcG9pbnRcIikgKyBcIiBcIiArIGQuZW5kcG9pbnQgKyBcIiBcIiArIHRoaXMubG9jKFwiYmVjYXVzZSBpdCBpcyBub3QgZGVjbGFyZWQgYXMgSU4gLSBPTkxZXCIpKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEVmZmV0dHVhIHZlcmlmaWNoZSBzdWxsYSBjb25uZXNzaW9uZSBlLCBpbiBjYXNvIG5vbiBmb3NzZSBjb2xsZWdhdGEsIHRlbnRhIGRpIHJpY29ubmV0dGVybGFcclxuICAgICAqIFxyXG4gICAgICogQHJldHVybnMge1Byb21pc2U8J09LJyB8ICdLTycgfCAnTk8tT1AnPn0gJ09LJyBTZSBsYSBjb25uZXNzaW9uZSDDqCBnacOgIGNvbm5lc3NhIG8gw6ggc3RhdGEgcmljb25uZXNzYSBjb24gc3VjY2Vzc28sICdLTycgU2Ugbm9uIMOoIHN0YXRvIHBvc3NpYmlsZSByaWNvbm5ldHRlcmUgXHJcbiAgICAgKiB1bmEgY29ubmVzc2lvbmUgZGlzY29ubmVzc2EsICdOTy1PUCcgc2UgbGEgY29ubmVzaXNvbmUgw6ggaW4gdW5vIHN0YXRvIGludGVybWVkaW8gY2hlIG5vbiBwdcOyIGVzc2VyZSBtb2RpZmljYXRvXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBlbnN1cmVDb25uZWN0ZWQoKTogUHJvbWlzZTwnT0snIHwgJ0tPJyB8ICdOTy1PUCc+IHtcclxuICAgICAgICBpZiAodGhpcy5jb25uZWN0aW9uLnN0YXRlID09IEh1YkNvbm5lY3Rpb25TdGF0ZS5EaXNjb25uZWN0ZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5sb2codGhpcy5sb2MoXCJDb25uZWN0aW9uIGxvc3Qgb3IgbWlzc2luZywgcmVjb25uZWN0aW5nLi4uXCIpKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbm5lY3Rpb24uc3RhcnQoKVxyXG4gICAgICAgICAgICAgICAgLnRoZW4oXyA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShcIk9LXCIpO1xyXG4gICAgICAgICAgICAgICAgfSwgXyA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2codGhpcy5sb2MoXCJDYW5ub3QgcmVjb25uZWN0IFNpZ25hbFIsIGZyb250ZW5kIEhVQiBvZmZsaW5lXCIpKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFwiS09cIik7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodGhpcy5jb25uZWN0aW9uLnN0YXRlID09IEh1YkNvbm5lY3Rpb25TdGF0ZS5Db25uZWN0ZWQpXHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoXCJPS1wiKTtcclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoXCJOTy1PUFwiKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEludmlhIHVuIG1lc3NhZ2dpbyBhbGwnSHViIGRlbCBCYWNrZW5kXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7RW5kcG9pbnREZWY8VE91dCwgYW55Pn0gaXRlbSBFbmRwb2ludCBkYSBjb250YXR0YXJlXHJcbiAgICAgKiBAcGFyYW0ge1RPdXR9IGR0byBEdG8gZGEgaW52aWFyZSBhbGwnRW5kcG9pbnRcclxuICAgICAqL1xyXG4gICAgcHVibGljIHNlbmQ8VE91dD4oaXRlbTogRW5kcG9pbnREZWY8VE91dCwgYW55PiwgZHRvOiBUT3V0KSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmVuYWJsZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5sb2codGhpcy5sb2MoXCJTZW5kIHJlcXVlc3QgaWdub3JlZCBiZWNhdXNlIFNpZ25hbFIgaXMgbm90IGFjdGl2ZSBieSBjb25maWd1cmF0aW9uXCIpKTtcclxuICAgICAgICAgICAgcmV0dXJuIEVNUFRZO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuY29ubmVjdGlvbi5zdGF0ZSA9PSBIdWJDb25uZWN0aW9uU3RhdGUuQ29ubmVjdGluZyB8fCB0aGlzLmNvbm5lY3Rpb24uc3RhdGUgPT0gSHViQ29ubmVjdGlvblN0YXRlLlJlY29ubmVjdGluZyB8fCB0aGlzLmNvbm5lY3Rpb24uc3RhdGUgPT0gSHViQ29ubmVjdGlvblN0YXRlLkRpc2Nvbm5lY3RpbmcpIHtcclxuICAgICAgICAgICAgdGhpcy5sb2codGhpcy5sb2MoXCJTZW5kIHJlcXVlc3Qgc2VudCBiZWZvcmUgYSBjb25uZWN0aW9uIHdhcyBpbiBzdGFibGUgU3RhdGUsIHdhaXRpbmcgMSBzZWNvbmQgYW5kIHJldHJ5aW5nXCIpKTtcclxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7IHRoaXMuc2VuZChpdGVtLCBkdG8pOyB9LCAxMDAwKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodGhpcy5jb25uZWN0aW9uLnN0YXRlID09IEh1YkNvbm5lY3Rpb25TdGF0ZS5EaXNjb25uZWN0ZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5lbnN1cmVDb25uZWN0ZWQoKS50aGVuKHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHQgPT0gXCJLT1wiKSB0aGlzLmxvZyh0aGlzLmxvYyhcIkVSUk9SUyBvbiByZWNvbm5lY3RpbmcgYmVmb3JlIHJldHJ5aW5nIGEgc2VuZCBjb21tYW5kLiBTZW50IG1lc3NhZ2UgV0lMTCBCRSBMT1NUXCIpKTtcclxuICAgICAgICAgICAgICAgIGVsc2UgdGhpcy5zZW5kKGl0ZW0sIGR0byk7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmNvbm5lY3Rpb24uc2VuZChpdGVtLmVuZHBvaW50LCBkdG8pLnRoZW4oXyA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5kZWJ1ZylcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmluZm8odGhpcy5sb2MoXCJSZXF1ZXN0IHNlbnQgdG8gc2VydmVyXCIpICsgXCIgLSBcIiArIGl0ZW0uZW5kcG9pbnQgKyBcIjogXCIgKyB0aGlzLnN1YnN0cmluZ0xvZyhKU09OLnN0cmluZ2lmeShkdG8pKSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEludmlhIHVuIG1lc3NhZ2dpbyBhbGwnSHViIGRlbCBCYWNrZW5kLCBhc3BldHRhbmRvc2kgdW5hIHJpc3Bvc3RhXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7RW5kcG9pbnREZWY8VE91dCwgVEluPn0gaXRlbSBFbmRwb2ludCBkYSBjb250YXR0YXJlXHJcbiAgICAgKiBAcGFyYW0ge1RPdXR9IGR0byBEdG8gZGEgaW52aWFyZSBhbGwnRW5kcG9pbnRcclxuICAgICAqIFxyXG4gICAgICogQHJldHVybnMge09ic2VydmFibGU8VEluPn0gT2JzZXJ2YWJsZSBzdSBjdWkgY2kgc2kgcHXDsiByZWdpc3RyYXJlIHBlciByaWNldmVyZSBpbCByaXN1bHRhdG8gZGVsbGEgY2hpYW1hdGFcclxuICAgICAqL1xyXG4gICAgcHVibGljIGludm9rZTxUT3V0LCBUSW4+KGl0ZW06IEVuZHBvaW50RGVmPFRPdXQsIFRJbj4sIGR0bzogVE91dCk6IE9ic2VydmFibGU8VEluPiB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmVuYWJsZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5sb2codGhpcy5sb2MoXCJJbnZva2UgcmVxdWVzdCBpZ25vcmVkIGJlY2F1c2UgU2lnbmFsUiBpcyBub3QgYWN0aXZlIGJ5IGNvbmZpZ3VyYXRpb25cIikpO1xyXG4gICAgICAgICAgICByZXR1cm4gRU1QVFk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5jb25uZWN0aW9uLnN0YXRlID09IEh1YkNvbm5lY3Rpb25TdGF0ZS5Db25uZWN0aW5nIHx8IHRoaXMuY29ubmVjdGlvbi5zdGF0ZSA9PSBIdWJDb25uZWN0aW9uU3RhdGUuUmVjb25uZWN0aW5nIHx8IHRoaXMuY29ubmVjdGlvbi5zdGF0ZSA9PSBIdWJDb25uZWN0aW9uU3RhdGUuRGlzY29ubmVjdGluZykge1xyXG4gICAgICAgICAgICB0aGlzLmxvZyh0aGlzLmxvYyhcIkludm9rZSByZXF1ZXN0IHNlbnQgYmVmb3JlIGEgY29ubmVjdGlvbiB3YXMgaW4gc3RhYmxlIFN0YXRlLCB3YWl0aW5nIDEgc2Vjb25kIGFuZCByZXRyeWluZ1wiKSk7XHJcbiAgICAgICAgICAgIHJldHVybiBvZigpLnBpcGUoZGVsYXkoMTAwMCksIGNvbmNhdE1hcCgoKSA9PiB0aGlzLmludm9rZShpdGVtLCBkdG8pKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHRoaXMuY29ubmVjdGlvbi5zdGF0ZSA9PSBIdWJDb25uZWN0aW9uU3RhdGUuRGlzY29ubmVjdGVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmcm9tKHRoaXMuZW5zdXJlQ29ubmVjdGVkKCkpLnBpcGUoY29uY2F0TWFwKChyZXMpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChyZXMgPT0gXCJLT1wiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2codGhpcy5sb2MoXCJFUlJPUlMgb24gcmVjb25uZWN0aW5nIGJlZm9yZSByZXRyeWluZyBhIHNlbmQgY29tbWFuZC4gU2VudCBtZXNzYWdlIFdJTEwgQkUgTE9TVFwiKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEVNUFRZO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSByZXR1cm4gdGhpcy5pbnZva2UoaXRlbSwgZHRvKTtcclxuICAgICAgICAgICAgfSkpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gZnJvbSh0aGlzLmNvbm5lY3Rpb24uaW52b2tlPFRJbj4oaXRlbS5lbmRwb2ludCwgZHRvKSkucGlwZShcclxuICAgICAgICAgICAgICAgIHRhcCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZGVidWcpIGNvbnNvbGUubG9nKHRoaXMubG9jKFwiUmVxdWVzdCBpbnZva2VkIHRvIHNlcnZlclwiKSArIFwiIC0gXCIgKyBpdGVtLmVuZHBvaW50ICsgXCI6IFwiICsgdGhpcy5zdWJzdHJpbmdMb2coSlNPTi5zdHJpbmdpZnkoZHRvKSkpO1xyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBIb29rIHBlciBvc3NlcnZhcmUgaSBkYXRpIHNwZWRpdGkgYWQgdW4gRW5kcG9pbnQgZGFsIEJhY2tlbmRcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtFbmRwb2ludERlZjxUSW4sIGFueT59IGl0ZW0gRW5kcG9pbnQgc3UgY3VpIGFzY29sdGFyZVxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJucyB7T2JzZXJ2YWJsZTxUSW4+fSBPYnNlcnZhYmxlIHN1IGN1aSBjaSBzaSBwdcOyIHJlZ2lzdHJhcmUgcGVyIHJpY2V2ZXJlIGwnb2dnZXR0byBnZW5lcmF0byBhZCBvZ25pIGNoaWFtYXRhIGRhbCBCYWNrZW5kIGFsIEZyb250ZW5kXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBvYnNlcnZlPFRJbj4oaXRlbTogRW5kcG9pbnREZWY8VEluLCBhbnk+KTogT2JzZXJ2YWJsZTxUSW4+IHtcclxuICAgICAgICBpZiAoIXRoaXMuZW5hYmxlZClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHRoaXMubG9nKHRoaXMubG9jKFwiT2JzZXJ2ZSByZXF1ZXN0IGlnbm9yZWQgYmVjYXVzZSBTaWduYWxSIGlzIG5vdCBhY3RpdmUgYnkgY29uZmlndXJhdGlvblwiKSk7XHJcbiAgICAgICAgICAgIHJldHVybiBFTVBUWTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMubG9nKHRoaXMubG9jKFwiUmV0dXJuaW5nIG9ic2VydmFibGUgZm9yIHJlcXVpcmVkIGVuZHBvaW50XCIpICsgXCI6IFwiICsgaXRlbS5lbmRwb2ludCk7XHJcbiAgICAgICAgcmV0dXJuIDxPYnNlcnZhYmxlPFRJbj4+dGhpcy5ub3RpZmljYXRpb25zJFtpdGVtLmVuZHBvaW50XTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIERpc2Nvbm5lc3Npb25lIGRlbCBzaXN0ZW1hIGRpIFNpZ25hbFJcclxuICAgICAqIFxyXG4gICAgICogQHJldHVybnMge09ic2VydmFibGU8dm9pZD59IE9ic2VydmFibGUgYSBjdWkgcmVnaXN0cmFyc2kgY2hlIHZpZW5lIGNoaWFtYXRvIHF1YW5kbyBsYSBkaXNjb25uZXNzaW9uZSDDqCB0ZXJtaW5hdGFcclxuICAgICAqL1xyXG4gICAgcHVibGljIGRpc2Nvbm5lY3QoKTogT2JzZXJ2YWJsZTx2b2lkPiB7XHJcbiAgICAgICAgLy9OTy1PUCBzZSBub24gYXR0aXZvXHJcbiAgICAgICAgaWYgKCF0aGlzLmVuYWJsZWQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmxvZyh0aGlzLmxvYyhcIkRpc2Nvbm5lY3Rpb24gcmVxdWVzdCBpZ25vcmVkIGJlY2F1c2UgU2lnbmFsUiBpcyBub3QgYWN0aXZlIGJ5IGNvbmZpZ3VyYXRpb25cIikpO1xyXG4gICAgICAgICAgICByZXR1cm4gRU1QVFk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZnJvbSh0aGlzLmNvbm5lY3Rpb24uc3RvcCgpKS5waXBlKFxyXG4gICAgICAgICAgICBjYXRjaEVycm9yKChlcnIsIGNhdWdodCkgPT4geyBjb25zb2xlLmxvZyhlcnIpOyByZXR1cm4gb2YobnVsbCk7IH0pLFxyXG4gICAgICAgICAgICB0YXAoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2codGhpcy5sb2MoXCJEaXNjb25uZWN0aW9uIHJlcXVlc3QgaG9ub3JlZFwiKSk7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRhZ2xpYSB1biBsb2cgdHJvcHBvIGx1bmdvXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IExvZyBkYSB0YWdsaWFyZVxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IG1heGNoYXJzIE51bWVybyBtYXNzaW1vIGRpIGNhcmF0dGVyaSBkYSB0ZW5lcmVcclxuICAgICAqIFxyXG4gICAgICogQHJldHVybnMge3N0cmluZ30gTG9nIHRhZ2xpYXRvXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgc3Vic3RyaW5nTG9nKHRleHQ6IHN0cmluZywgbWF4Y2hhcnM6IG51bWJlciA9IDEyMCkgOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0ZXh0Lmxlbmd0aCA+IG1heGNoYXJzID8gdGV4dC5zdWJzdHIoMCwgbWF4Y2hhcnMpICsgXCJbLi4uXVwiICA6IHRleHQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTdGFtcGEgdW4gbG9nIGEgY29uc29sZVxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZSBNZXNzYWdnaW8gZGEgc3RhbXBhcmVcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBsb2cobWVzc2FnZTogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZGVidWcpXHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiQHNpZ25hbHItbm90aWZpY2F0aW9uczogXCIgKyBtZXNzYWdlKVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSGVscGVyIGRpIGxvY2FsaXp6YXppb25lXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIE1lc3NhZ2dpbyBkYSB0cmFkdXJyZVxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBNZXNzYWdnaW8gdHJhZG90dG9cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBsb2MobWVzc2FnZTogc3RyaW5nKSA6IHN0cmluZ3tcclxuICAgICAgICByZXR1cm4gbWVzc2FnZTtcclxuICAgIH1cclxufSJdfQ==
@@ -10,11 +10,7 @@ export const SIGNALR_ENABLED = new InjectionToken('SIGNALR_ENABLED');
10
10
  /**
11
11
  * Indica se stampare messaggi di debug in console
12
12
  */
13
- export const DEBUG_MODE = new InjectionToken('DEBUG_MODE');
14
- /**
15
- * Indica il locale utilizzato dalla libreria per i messaggi. Sono supportati "it-IT" ed "en-US"
16
- */
17
- export const LOCALE = new InjectionToken('LOCALE');
13
+ export const SGR_DEBUG_MODE = new InjectionToken('SGR_DEBUG_MODE');
18
14
  /**
19
15
  * Indica se utilizzare il protocollo di trasferimento "MessagePack"
20
16
  */
@@ -23,4 +19,4 @@ export const MESSAGE_PACK = new InjectionToken('MESSAGE_PACK');
23
19
  * Indica se tentare in automatico la riconnessione
24
20
  */
25
21
  export const AUTO_RECONNECT = new InjectionToken('AUTO_RECONNECT');
26
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW5zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvc2lnbmFsci1ub3RpZmljYXRpb25zL3NyYy9saWIvdG9rZW5zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFL0M7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQTJCLElBQUksY0FBYyxDQUFTLGNBQWMsQ0FBQyxDQUFDO0FBRS9GOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUEyQixJQUFJLGNBQWMsQ0FBVSxpQkFBaUIsQ0FBQyxDQUFDO0FBRXRHOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUEyQixJQUFJLGNBQWMsQ0FBVSxZQUFZLENBQUMsQ0FBQztBQUU1Rjs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLE1BQU0sR0FBMkIsSUFBSSxjQUFjLENBQVMsUUFBUSxDQUFDLENBQUM7QUFFbkY7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQTRCLElBQUksY0FBYyxDQUFVLGNBQWMsQ0FBQyxDQUFDO0FBRWpHOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUE0QixJQUFJLGNBQWMsQ0FBVSxnQkFBZ0IsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbi8qKlxyXG4gKiBIdWIgYSBjdWkgY29sbGVnYXJzaVxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IEVORFBPSU5UX1VSTDogSW5qZWN0aW9uVG9rZW48c3RyaW5nPiA9IG5ldyBJbmplY3Rpb25Ub2tlbjxzdHJpbmc+KCdFTkRQT0lOVF9VUkwnKTtcclxuXHJcbi8qKlxyXG4gKiBJbmRpY2Egc2UgbGEgbGlicmVyaWEgZGV2J2Vzc2VyZSBhdHRpdmEgbyBub1xyXG4gKi9cclxuZXhwb3J0IGNvbnN0IFNJR05BTFJfRU5BQkxFRDogSW5qZWN0aW9uVG9rZW48c3RyaW5nPiA9IG5ldyBJbmplY3Rpb25Ub2tlbjxib29sZWFuPignU0lHTkFMUl9FTkFCTEVEJyk7XHJcblxyXG4vKipcclxuICogSW5kaWNhIHNlIHN0YW1wYXJlIG1lc3NhZ2dpIGRpIGRlYnVnIGluIGNvbnNvbGVcclxuICovXHJcbmV4cG9ydCBjb25zdCBERUJVR19NT0RFOiBJbmplY3Rpb25Ub2tlbjxzdHJpbmc+ID0gbmV3IEluamVjdGlvblRva2VuPGJvb2xlYW4+KCdERUJVR19NT0RFJyk7XHJcblxyXG4vKipcclxuICogSW5kaWNhIGlsIGxvY2FsZSB1dGlsaXp6YXRvIGRhbGxhIGxpYnJlcmlhIHBlciBpIG1lc3NhZ2dpLiBTb25vIHN1cHBvcnRhdGkgXCJpdC1JVFwiIGVkIFwiZW4tVVNcIlxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IExPQ0FMRTogSW5qZWN0aW9uVG9rZW48c3RyaW5nPiA9IG5ldyBJbmplY3Rpb25Ub2tlbjxzdHJpbmc+KCdMT0NBTEUnKTtcclxuXHJcbi8qKlxyXG4gKiBJbmRpY2Egc2UgdXRpbGl6emFyZSBpbCBwcm90b2NvbGxvIGRpIHRyYXNmZXJpbWVudG8gXCJNZXNzYWdlUGFja1wiXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgTUVTU0FHRV9QQUNLOiBJbmplY3Rpb25Ub2tlbjxib29sZWFuPiA9IG5ldyBJbmplY3Rpb25Ub2tlbjxib29sZWFuPignTUVTU0FHRV9QQUNLJyk7XHJcblxyXG4vKipcclxuICogSW5kaWNhIHNlIHRlbnRhcmUgaW4gYXV0b21hdGljbyBsYSByaWNvbm5lc3Npb25lXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgQVVUT19SRUNPTk5FQ1Q6IEluamVjdGlvblRva2VuPGJvb2xlYW4+ID0gbmV3IEluamVjdGlvblRva2VuPGJvb2xlYW4+KCdBVVRPX1JFQ09OTkVDVCcpOyJdfQ==
22
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW5zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvc2lnbmFsci1ub3RpZmljYXRpb25zL3NyYy9saWIvdG9rZW5zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFL0M7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQTJCLElBQUksY0FBYyxDQUFTLGNBQWMsQ0FBQyxDQUFDO0FBRS9GOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUEyQixJQUFJLGNBQWMsQ0FBVSxpQkFBaUIsQ0FBQyxDQUFDO0FBRXRHOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUEyQixJQUFJLGNBQWMsQ0FBVSxnQkFBZ0IsQ0FBQyxDQUFDO0FBRXBHOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUE0QixJQUFJLGNBQWMsQ0FBVSxjQUFjLENBQUMsQ0FBQztBQUVqRzs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBNEIsSUFBSSxjQUFjLENBQVUsZ0JBQWdCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGlvblRva2VuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG4vKipcclxuICogSHViIGEgY3VpIGNvbGxlZ2Fyc2lcclxuICovXHJcbmV4cG9ydCBjb25zdCBFTkRQT0lOVF9VUkw6IEluamVjdGlvblRva2VuPHN0cmluZz4gPSBuZXcgSW5qZWN0aW9uVG9rZW48c3RyaW5nPignRU5EUE9JTlRfVVJMJyk7XHJcblxyXG4vKipcclxuICogSW5kaWNhIHNlIGxhIGxpYnJlcmlhIGRldidlc3NlcmUgYXR0aXZhIG8gbm9cclxuICovXHJcbmV4cG9ydCBjb25zdCBTSUdOQUxSX0VOQUJMRUQ6IEluamVjdGlvblRva2VuPHN0cmluZz4gPSBuZXcgSW5qZWN0aW9uVG9rZW48Ym9vbGVhbj4oJ1NJR05BTFJfRU5BQkxFRCcpO1xyXG5cclxuLyoqXHJcbiAqIEluZGljYSBzZSBzdGFtcGFyZSBtZXNzYWdnaSBkaSBkZWJ1ZyBpbiBjb25zb2xlXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgU0dSX0RFQlVHX01PREU6IEluamVjdGlvblRva2VuPHN0cmluZz4gPSBuZXcgSW5qZWN0aW9uVG9rZW48Ym9vbGVhbj4oJ1NHUl9ERUJVR19NT0RFJyk7XHJcblxyXG4vKipcclxuICogSW5kaWNhIHNlIHV0aWxpenphcmUgaWwgcHJvdG9jb2xsbyBkaSB0cmFzZmVyaW1lbnRvIFwiTWVzc2FnZVBhY2tcIlxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IE1FU1NBR0VfUEFDSzogSW5qZWN0aW9uVG9rZW48Ym9vbGVhbj4gPSBuZXcgSW5qZWN0aW9uVG9rZW48Ym9vbGVhbj4oJ01FU1NBR0VfUEFDSycpO1xyXG5cclxuLyoqXHJcbiAqIEluZGljYSBzZSB0ZW50YXJlIGluIGF1dG9tYXRpY28gbGEgcmljb25uZXNzaW9uZVxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IEFVVE9fUkVDT05ORUNUOiBJbmplY3Rpb25Ub2tlbjxib29sZWFuPiA9IG5ldyBJbmplY3Rpb25Ub2tlbjxib29sZWFuPignQVVUT19SRUNPTk5FQ1QnKTsiXX0=
@@ -1,9 +1,10 @@
1
1
  /*
2
2
  * Public API Surface of signalr-notifications
3
3
  */
4
+ export * from './lib/tokens';
4
5
  export * from './lib/signalr-notifications.service';
5
6
  export * from './lib/signalr-notifications.module';
6
7
  export * from './lib/models/BaseMessageService';
7
8
  export * from './lib/models/EndpointDef';
8
9
  export * from './lib/config/SignalrNotificationsModuleConfig';
9
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL3NpZ25hbHItbm90aWZpY2F0aW9ucy9zcmMvcHVibGljLWFwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMscUNBQXFDLENBQUM7QUFDcEQsY0FBYyxvQ0FBb0MsQ0FBQztBQUNuRCxjQUFjLGlDQUFpQyxDQUFDO0FBQ2hELGNBQWMsMEJBQTBCLENBQUM7QUFDekMsY0FBYywrQ0FBK0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBQdWJsaWMgQVBJIFN1cmZhY2Ugb2Ygc2lnbmFsci1ub3RpZmljYXRpb25zXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9saWIvc2lnbmFsci1ub3RpZmljYXRpb25zLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvc2lnbmFsci1ub3RpZmljYXRpb25zLm1vZHVsZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9tb2RlbHMvQmFzZU1lc3NhZ2VTZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL21vZGVscy9FbmRwb2ludERlZic7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb25maWcvU2lnbmFsck5vdGlmaWNhdGlvbnNNb2R1bGVDb25maWcnOyJdfQ==
10
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL3NpZ25hbHItbm90aWZpY2F0aW9ucy9zcmMvcHVibGljLWFwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsY0FBYyxDQUFDO0FBQzdCLGNBQWMscUNBQXFDLENBQUM7QUFDcEQsY0FBYyxvQ0FBb0MsQ0FBQztBQUNuRCxjQUFjLGlDQUFpQyxDQUFDO0FBQ2hELGNBQWMsMEJBQTBCLENBQUM7QUFDekMsY0FBYywrQ0FBK0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBQdWJsaWMgQVBJIFN1cmZhY2Ugb2Ygc2lnbmFsci1ub3RpZmljYXRpb25zXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9saWIvdG9rZW5zJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NpZ25hbHItbm90aWZpY2F0aW9ucy5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NpZ25hbHItbm90aWZpY2F0aW9ucy5tb2R1bGUnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvbW9kZWxzL0Jhc2VNZXNzYWdlU2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9tb2RlbHMvRW5kcG9pbnREZWYnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY29uZmlnL1NpZ25hbHJOb3RpZmljYXRpb25zTW9kdWxlQ29uZmlnJzsiXX0=
@@ -1,5 +1,6 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { InjectionToken, Injectable, Inject, NgModule } from '@angular/core';
3
+ import { __awaiter } from 'tslib';
3
4
  import * as signalR from '@microsoft/signalr';
4
5
  import { HubConnectionState } from '@microsoft/signalr';
5
6
  import { Subject, EMPTY, of, from } from 'rxjs';
@@ -16,11 +17,7 @@ const SIGNALR_ENABLED = new InjectionToken('SIGNALR_ENABLED');
16
17
  /**
17
18
  * Indica se stampare messaggi di debug in console
18
19
  */
19
- const DEBUG_MODE = new InjectionToken('DEBUG_MODE');
20
- /**
21
- * Indica il locale utilizzato dalla libreria per i messaggi. Sono supportati "it-IT" ed "en-US"
22
- */
23
- const LOCALE = new InjectionToken('LOCALE');
20
+ const SGR_DEBUG_MODE = new InjectionToken('SGR_DEBUG_MODE');
24
21
  /**
25
22
  * Indica se utilizzare il protocollo di trasferimento "MessagePack"
26
23
  */
@@ -50,7 +47,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
50
47
  type: Injectable
51
48
  }] });
52
49
 
53
- // Angular
54
50
  /**
55
51
  * Servizio che gestisce la comunicazione con un Hub SignalR in base alle configurazioni fornite dall'applicazione
56
52
  */
@@ -66,6 +62,7 @@ class NotificationsService {
66
62
  this.msgpack = msgpack;
67
63
  this.enabled = enabled;
68
64
  this.debug = debug;
65
+ this.autoreconnect = autoreconnect;
69
66
  /**
70
67
  * Cache degli Observable generati in base agli Endpoint disponibili
71
68
  */
@@ -74,21 +71,26 @@ class NotificationsService {
74
71
  this.log(this.loc("SignalR won't be enabled as per configuration"));
75
72
  return;
76
73
  }
77
- this.MessageDef.AllDefinitions.forEach(def => { this.notifications$[def.endpoint] = new Subject(); });
78
- let pars = { skipNegotiation: true, transport: signalR.HttpTransportType.WebSockets, logger: debug ? signalR.LogLevel.Debug : signalR.LogLevel.None };
79
- var builder = new signalR.HubConnectionBuilder().withUrl("/" + this.endpoint_url, pars);
80
- if (autoreconnect) {
81
- this.log(this.loc("Building SignalR Hub with Automatic Reconnection"));
82
- // 100 tentativi di riconnessione, 1 ogni 5 secondi
83
- builder = builder.withAutomaticReconnect(new Array(100).fill(5 * 1000));
84
- }
85
- if (this.msgpack) {
86
- this.log(this.loc("Building SignalR Hub with MessagePack protocol"));
87
- var mphpModule = require("@microsoft/signalr-protocol-msgpack");
88
- builder = builder.withHubProtocol(new mphpModule.MessagePackHubProtocol());
89
- }
90
- this.connection = builder.build();
91
- this.connect();
74
+ this.init();
75
+ }
76
+ init() {
77
+ return __awaiter(this, void 0, void 0, function* () {
78
+ this.MessageDef.AllDefinitions.forEach(def => { this.notifications$[def.endpoint] = new Subject(); });
79
+ let pars = { skipNegotiation: true, transport: signalR.HttpTransportType.WebSockets, logger: this.debug ? signalR.LogLevel.Debug : signalR.LogLevel.None };
80
+ var builder = new signalR.HubConnectionBuilder().withUrl("/" + this.endpoint_url, pars);
81
+ if (this.autoreconnect) {
82
+ this.log(this.loc("Building SignalR Hub with Automatic Reconnection"));
83
+ // 100 tentativi di riconnessione, 1 ogni 5 secondi
84
+ builder = builder.withAutomaticReconnect(new Array(100).fill(5 * 1000));
85
+ }
86
+ if (this.msgpack) {
87
+ this.log(this.loc("Building SignalR Hub with MessagePack protocol"));
88
+ var mphpModule = yield import('@microsoft/signalr-protocol-msgpack');
89
+ builder = builder.withHubProtocol(new mphpModule.MessagePackHubProtocol());
90
+ }
91
+ this.connection = builder.build();
92
+ this.connect();
93
+ });
92
94
  }
93
95
  /**
94
96
  * Effettua la connessione all'Hub Signalr e registra tutti gli Endpoint per cui il Backend comunica con il Frontend sulla **connection**
@@ -253,7 +255,7 @@ class NotificationsService {
253
255
  return message;
254
256
  }
255
257
  }
256
- NotificationsService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: NotificationsService, deps: [{ token: BaseMessageService }, { token: ENDPOINT_URL }, { token: MESSAGE_PACK }, { token: SIGNALR_ENABLED }, { token: DEBUG_MODE }, { token: AUTO_RECONNECT }], target: i0.ɵɵFactoryTarget.Injectable });
258
+ NotificationsService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: NotificationsService, deps: [{ token: BaseMessageService }, { token: ENDPOINT_URL }, { token: MESSAGE_PACK }, { token: SIGNALR_ENABLED }, { token: SGR_DEBUG_MODE }, { token: AUTO_RECONNECT }], target: i0.ɵɵFactoryTarget.Injectable });
257
259
  NotificationsService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: NotificationsService });
258
260
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: NotificationsService, decorators: [{
259
261
  type: Injectable
@@ -269,7 +271,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
269
271
  args: [SIGNALR_ENABLED]
270
272
  }] }, { type: undefined, decorators: [{
271
273
  type: Inject,
272
- args: [DEBUG_MODE]
274
+ args: [SGR_DEBUG_MODE]
273
275
  }] }, { type: undefined, decorators: [{
274
276
  type: Inject,
275
277
  args: [AUTO_RECONNECT]
@@ -285,7 +287,7 @@ class SignalrNotificationsModule {
285
287
  { provide: BaseMessageService, useClass: (config === null || config === void 0 ? void 0 : config.messageService) || BaseMessageService },
286
288
  { provide: ENDPOINT_URL, useValue: config === null || config === void 0 ? void 0 : config.endpointUrl },
287
289
  { provide: SIGNALR_ENABLED, useValue: (config === null || config === void 0 ? void 0 : config.enabled) != null ? config === null || config === void 0 ? void 0 : config.enabled : true },
288
- { provide: DEBUG_MODE, useValue: (config === null || config === void 0 ? void 0 : config.debugMode) != null ? config === null || config === void 0 ? void 0 : config.debugMode : false },
290
+ { provide: SGR_DEBUG_MODE, useValue: (config === null || config === void 0 ? void 0 : config.debugMode) != null ? config === null || config === void 0 ? void 0 : config.debugMode : false },
289
291
  { provide: MESSAGE_PACK, useValue: (config === null || config === void 0 ? void 0 : config.useMessagePack) != null ? config === null || config === void 0 ? void 0 : config.useMessagePack : false },
290
292
  { provide: AUTO_RECONNECT, useValue: (config === null || config === void 0 ? void 0 : config.autoReconnect) != null ? config === null || config === void 0 ? void 0 : config.autoReconnect : true },
291
293
  ]
@@ -343,5 +345,5 @@ class SignalrNotificationsModuleConfig {
343
345
  * Generated bundle index. Do not edit.
344
346
  */
345
347
 
346
- export { BaseMessageService, EndpointDef, NotificationsService, SignalrNotificationsModule, SignalrNotificationsModuleConfig };
348
+ export { AUTO_RECONNECT, BaseMessageService, ENDPOINT_URL, EndpointDef, MESSAGE_PACK, NotificationsService, SGR_DEBUG_MODE, SIGNALR_ENABLED, SignalrNotificationsModule, SignalrNotificationsModuleConfig };
347
349
  //# sourceMappingURL=esfaenza-signalr-notifications.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"esfaenza-signalr-notifications.mjs","sources":["../../../projects/signalr-notifications/src/lib/tokens.ts","../../../projects/signalr-notifications/src/lib/models/BaseMessageService.ts","../../../projects/signalr-notifications/src/lib/signalr-notifications.service.ts","../../../projects/signalr-notifications/src/lib/signalr-notifications.module.ts","../../../projects/signalr-notifications/src/lib/models/EndpointDef.ts","../../../projects/signalr-notifications/src/lib/config/SignalrNotificationsModuleConfig.ts","../../../projects/signalr-notifications/src/public-api.ts","../../../projects/signalr-notifications/src/esfaenza-signalr-notifications.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\r\n\r\n/**\r\n * Hub a cui collegarsi\r\n */\r\nexport const ENDPOINT_URL: InjectionToken<string> = new InjectionToken<string>('ENDPOINT_URL');\r\n\r\n/**\r\n * Indica se la libreria dev'essere attiva o no\r\n */\r\nexport const SIGNALR_ENABLED: InjectionToken<string> = new InjectionToken<boolean>('SIGNALR_ENABLED');\r\n\r\n/**\r\n * Indica se stampare messaggi di debug in console\r\n */\r\nexport const DEBUG_MODE: InjectionToken<string> = new InjectionToken<boolean>('DEBUG_MODE');\r\n\r\n/**\r\n * Indica il locale utilizzato dalla libreria per i messaggi. Sono supportati \"it-IT\" ed \"en-US\"\r\n */\r\nexport const LOCALE: InjectionToken<string> = new InjectionToken<string>('LOCALE');\r\n\r\n/**\r\n * Indica se utilizzare il protocollo di trasferimento \"MessagePack\"\r\n */\r\nexport const MESSAGE_PACK: InjectionToken<boolean> = new InjectionToken<boolean>('MESSAGE_PACK');\r\n\r\n/**\r\n * Indica se tentare in automatico la riconnessione\r\n */\r\nexport const AUTO_RECONNECT: InjectionToken<boolean> = new InjectionToken<boolean>('AUTO_RECONNECT');","// Angular\r\nimport { Injectable } from '@angular/core';\r\n\r\n// Modelli\r\nimport { EndpointDef } from './EndpointDef';\r\n\r\n/**\r\n * Classe base da estendere con la definizione degli Endpoint supportati dall'applicazione\r\n */\r\n@Injectable()\r\nexport class BaseMessageService {\r\n\r\n private definitions: EndpointDef<any, any>[] = [];\r\n\r\n /** Entrypoint che restituisce tutti gli Endpoint dell'applicazione. Da overridare qualora non venga utilizzato il metodo **add** */\r\n public get AllDefinitions(): EndpointDef<any, any>[] { return this.definitions; }\r\n\r\n public add(endpoint: EndpointDef<any, any>) {\r\n this.definitions.push(endpoint);\r\n }\r\n}","// Angular\r\nimport { Injectable, Inject } from \"@angular/core\";\r\n\r\n// Direttive, Componenti, Librerie\r\nimport * as signalR from '@microsoft/signalr';\r\nimport { HubConnectionState } from \"@microsoft/signalr\";\r\nimport { Observable, Subject, EMPTY, from, of } from \"rxjs\";\r\nimport { catchError, concatMap, delay, tap } from \"rxjs/operators\";\r\n\r\n// Modelli\r\nimport { BaseMessageService } from './models/BaseMessageService';\r\nimport { EndpointDef } from './models/EndpointDef';\r\nimport { DEBUG_MODE, ENDPOINT_URL, LOCALE, MESSAGE_PACK, SIGNALR_ENABLED, AUTO_RECONNECT } from \"./tokens\";\r\n\r\n/**\r\n * Servizio che gestisce la comunicazione con un Hub SignalR in base alle configurazioni fornite dall'applicazione\r\n */\r\n@Injectable()\r\nexport class NotificationsService {\r\n\r\n /**\r\n * Cache degli Observable generati in base agli Endpoint disponibili\r\n */\r\n private notifications$: { [index: string]: Subject<any> } = {};\r\n\r\n /**\r\n * Connessione Signalr\r\n */\r\n private connection: signalR.HubConnection;\r\n\r\n /**\r\n * Costruttore\r\n * \r\n * @ignore\r\n */\r\n constructor(private MessageDef: BaseMessageService, @Inject(ENDPOINT_URL) private endpoint_url: string, @Inject(MESSAGE_PACK) private msgpack: boolean, @Inject(SIGNALR_ENABLED) private enabled: boolean, @Inject(DEBUG_MODE) private debug: boolean, @Inject(AUTO_RECONNECT) autoreconnect: boolean) {\r\n if (!this.enabled) {\r\n this.log(this.loc(\"SignalR won't be enabled as per configuration\"));\r\n return;\r\n }\r\n\r\n this.MessageDef.AllDefinitions.forEach(def => { this.notifications$[def.endpoint] = new Subject<typeof def.inTypeDefault>(); });\r\n\r\n let pars: signalR.IHttpConnectionOptions = { skipNegotiation: true, transport: signalR.HttpTransportType.WebSockets, logger: debug ? signalR.LogLevel.Debug : signalR.LogLevel.None };\r\n var builder = new signalR.HubConnectionBuilder().withUrl(\"/\" + this.endpoint_url, pars);\r\n\r\n if (autoreconnect) {\r\n this.log(this.loc(\"Building SignalR Hub with Automatic Reconnection\"));\r\n // 100 tentativi di riconnessione, 1 ogni 5 secondi\r\n builder = builder.withAutomaticReconnect(new Array(100).fill(5 * 1000));\r\n }\r\n\r\n if (this.msgpack) {\r\n this.log(this.loc(\"Building SignalR Hub with MessagePack protocol\"));\r\n var mphpModule = require(\"@microsoft/signalr-protocol-msgpack\");\r\n builder = builder.withHubProtocol(new mphpModule.MessagePackHubProtocol())\r\n }\r\n\r\n this.connection = builder.build();\r\n this.connect();\r\n }\r\n\r\n /**\r\n * Effettua la connessione all'Hub Signalr e registra tutti gli Endpoint per cui il Backend comunica con il Frontend sulla **connection**\r\n */\r\n private connect() {\r\n this.connection.start().catch(err => console.log(err));\r\n this.MessageDef.AllDefinitions.forEach(d => {\r\n //Registro solo le cose di IN, quelle di out sono chiamate che faccio io al BE quindi non servono\r\n if (d.inTypeDefault !== null && d.outTypeDefault === null)\r\n this.connection.on(d.endpoint, (message) => {\r\n this.log(this.loc(\"Request received from the server for endpoint\") + \" '\" + d.endpoint + \"': \" + this.substringLog(JSON.stringify(message)));\r\n this.notifications$[d.endpoint].next(message);\r\n });\r\n else\r\n this.log(this.loc(\"Refusing to register endpoint\") + \" \" + d.endpoint + \" \" + this.loc(\"because it is not declared as IN - ONLY\"));\r\n });\r\n }\r\n\r\n /**\r\n * Effettua verifiche sulla connessione e, in caso non fosse collegata, tenta di riconnetterla\r\n * \r\n * @returns {Promise<'OK' | 'KO' | 'NO-OP'>} 'OK' Se la connessione è già connessa o è stata riconnessa con successo, 'KO' Se non è stato possibile riconnettere \r\n * una connessione disconnessa, 'NO-OP' se la connesisone è in uno stato intermedio che non può essere modificato\r\n */\r\n public ensureConnected(): Promise<'OK' | 'KO' | 'NO-OP'> {\r\n if (this.connection.state == HubConnectionState.Disconnected) {\r\n this.log(this.loc(\"Connection lost or missing, reconnecting...\"));\r\n\r\n return this.connection.start()\r\n .then(_ => {\r\n return Promise.resolve(\"OK\");\r\n }, _ => {\r\n this.log(this.loc(\"Cannot reconnect SignalR, frontend HUB offline\"));\r\n return Promise.resolve(\"KO\");\r\n });\r\n }\r\n else if (this.connection.state == HubConnectionState.Connected)\r\n return Promise.resolve(\"OK\");\r\n else\r\n return Promise.resolve(\"NO-OP\");\r\n }\r\n\r\n /**\r\n * Invia un messaggio all'Hub del Backend\r\n * \r\n * @param {EndpointDef<TOut, any>} item Endpoint da contattare\r\n * @param {TOut} dto Dto da inviare all'Endpoint\r\n */\r\n public send<TOut>(item: EndpointDef<TOut, any>, dto: TOut) {\r\n if (!this.enabled) {\r\n this.log(this.loc(\"Send request ignored because SignalR is not active by configuration\"));\r\n return EMPTY;\r\n }\r\n\r\n if (this.connection.state == HubConnectionState.Connecting || this.connection.state == HubConnectionState.Reconnecting || this.connection.state == HubConnectionState.Disconnecting) {\r\n this.log(this.loc(\"Send request sent before a connection was in stable State, waiting 1 second and retrying\"));\r\n setTimeout(() => { this.send(item, dto); }, 1000);\r\n }\r\n else if (this.connection.state == HubConnectionState.Disconnected) {\r\n this.ensureConnected().then(t => {\r\n if (t == \"KO\") this.log(this.loc(\"ERRORS on reconnecting before retrying a send command. Sent message WILL BE LOST\"));\r\n else this.send(item, dto);\r\n })\r\n }\r\n else {\r\n this.connection.send(item.endpoint, dto).then(_ => {\r\n if (this.debug)\r\n console.info(this.loc(\"Request sent to server\") + \" - \" + item.endpoint + \": \" + this.substringLog(JSON.stringify(dto)));\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Invia un messaggio all'Hub del Backend, aspettandosi una risposta\r\n * \r\n * @param {EndpointDef<TOut, TIn>} item Endpoint da contattare\r\n * @param {TOut} dto Dto da inviare all'Endpoint\r\n * \r\n * @returns {Observable<TIn>} Observable su cui ci si può registrare per ricevere il risultato della chiamata\r\n */\r\n public invoke<TOut, TIn>(item: EndpointDef<TOut, TIn>, dto: TOut): Observable<TIn> {\r\n if (!this.enabled) {\r\n this.log(this.loc(\"Invoke request ignored because SignalR is not active by configuration\"));\r\n return EMPTY;\r\n }\r\n\r\n if (this.connection.state == HubConnectionState.Connecting || this.connection.state == HubConnectionState.Reconnecting || this.connection.state == HubConnectionState.Disconnecting) {\r\n this.log(this.loc(\"Invoke request sent before a connection was in stable State, waiting 1 second and retrying\"));\r\n return of().pipe(delay(1000), concatMap(() => this.invoke(item, dto)));\r\n }\r\n else if (this.connection.state == HubConnectionState.Disconnected) {\r\n return from(this.ensureConnected()).pipe(concatMap((res) => {\r\n if (res == \"KO\") {\r\n this.log(this.loc(\"ERRORS on reconnecting before retrying a send command. Sent message WILL BE LOST\"));\r\n return EMPTY;\r\n }\r\n else return this.invoke(item, dto);\r\n }))\r\n }\r\n else {\r\n return from(this.connection.invoke<TIn>(item.endpoint, dto)).pipe(\r\n tap(() => {\r\n if (this.debug) console.log(this.loc(\"Request invoked to server\") + \" - \" + item.endpoint + \": \" + this.substringLog(JSON.stringify(dto)));\r\n })\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * Hook per osservare i dati spediti ad un Endpoint dal Backend\r\n * \r\n * @param {EndpointDef<TIn, any>} item Endpoint su cui ascoltare\r\n * \r\n * @returns {Observable<TIn>} Observable su cui ci si può registrare per ricevere l'oggetto generato ad ogni chiamata dal Backend al Frontend\r\n */\r\n public observe<TIn>(item: EndpointDef<TIn, any>): Observable<TIn> {\r\n if (!this.enabled)\r\n {\r\n this.log(this.loc(\"Observe request ignored because SignalR is not active by configuration\"));\r\n return EMPTY;\r\n }\r\n\r\n this.log(this.loc(\"Returning observable for required endpoint\") + \": \" + item.endpoint);\r\n return <Observable<TIn>>this.notifications$[item.endpoint];\r\n }\r\n\r\n /**\r\n * Disconnessione del sistema di SignalR\r\n * \r\n * @returns {Observable<void>} Observable a cui registrarsi che viene chiamato quando la disconnessione è terminata\r\n */\r\n public disconnect(): Observable<void> {\r\n //NO-OP se non attivo\r\n if (!this.enabled)\r\n {\r\n this.log(this.loc(\"Disconnection request ignored because SignalR is not active by configuration\"));\r\n return EMPTY;\r\n }\r\n\r\n return from(this.connection.stop()).pipe(\r\n catchError((err, caught) => { console.log(err); return of(null); }),\r\n tap(() => {\r\n this.log(this.loc(\"Disconnection request honored\"));\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * Taglia un log troppo lungo\r\n * \r\n * @param {string} text Log da tagliare\r\n * @param {number} maxchars Numero massimo di caratteri da tenere\r\n * \r\n * @returns {string} Log tagliato\r\n */\r\n private substringLog(text: string, maxchars: number = 120) : string {\r\n return text.length > maxchars ? text.substr(0, maxchars) + \"[...]\" : text;\r\n }\r\n\r\n /**\r\n * Stampa un log a console\r\n * \r\n * @param {string} message Messaggio da stampare\r\n */\r\n private log(message: string) {\r\n if (this.debug)\r\n console.log(\"@signalr-notifications: \" + message)\r\n }\r\n\r\n /**\r\n * Helper di localizzazione\r\n * \r\n * @param {string} message Messaggio da tradurre\r\n * \r\n * @returns {string} Messaggio tradotto\r\n */\r\n private loc(message: string) : string{\r\n return message;\r\n }\r\n}","\r\nimport { NgModule, ModuleWithProviders } from '@angular/core';\r\nimport { SignalrNotificationsModuleConfig } from './config/SignalrNotificationsModuleConfig';\r\nimport { BaseMessageService } from './models/BaseMessageService';\r\nimport { NotificationsService } from './signalr-notifications.service';\r\nimport { ENDPOINT_URL, SIGNALR_ENABLED, DEBUG_MODE, MESSAGE_PACK, AUTO_RECONNECT } from './tokens';\r\n\r\n@NgModule()\r\nexport class SignalrNotificationsModule {\r\n static forRoot(config?: SignalrNotificationsModuleConfig): ModuleWithProviders<SignalrNotificationsModule> {\r\n return {\r\n ngModule: SignalrNotificationsModule,\r\n providers: [\r\n NotificationsService,\r\n { provide: BaseMessageService, useClass: config?.messageService || BaseMessageService },\r\n { provide: ENDPOINT_URL, useValue: config?.endpointUrl },\r\n { provide: SIGNALR_ENABLED, useValue: config?.enabled != null ? config?.enabled : true },\r\n { provide: DEBUG_MODE, useValue: config?.debugMode != null ? config?.debugMode : false },\r\n { provide: MESSAGE_PACK, useValue: config?.useMessagePack != null ? config?.useMessagePack : false },\r\n { provide: AUTO_RECONNECT, useValue: config?.autoReconnect != null ? config?.autoReconnect : true },\r\n ]\r\n };\r\n }\r\n}","/**\r\n * Definisce un Endpoint che spedisce un'informazione di tipo TIn e restituisce un'informazione di tipo TOut\r\n */\r\nexport class EndpointDef<TIn, TOut> {\r\n\r\n /**\r\n * Costruttore\r\n * \r\n * @param {string} endpoint Nome del metodo da chiamare nell'Hub del Backend contattato\r\n * @param {TIn} inTypeDefault Default per il tipo TIn. Utilizzato per fare Typecheck sulle chiamate da Backend a Frontend\r\n * @param {TOut} outTypeDefault Default per il tipo TOut. Utilizzato per fare Typecheck sulle chiamate da Frontend a Backend\r\n */\r\n constructor(public endpoint: string, public inTypeDefault: TIn, public outTypeDefault: TOut) { }\r\n\r\n\r\n /** Helper per la creazione rapida di un Endpoint di solo INPUT */\r\n public static In<TIn>(name: string, inTypeDefault: TIn): EndpointDef<TIn, void> {\r\n return new EndpointDef<TIn, void>(name, inTypeDefault, undefined);\r\n }\r\n\r\n /** Helper per la creazione rapida di un Endpoint di solo OUTPUT */\r\n public static Out<TOut>(name: string, outTypeDefault: TOut): EndpointDef<void, TOut> {\r\n return new EndpointDef<void, TOut>(name, undefined, outTypeDefault);\r\n }\r\n\r\n /** Helper per la creazione rapida di un Endpoint di INPUT e OUTPUT (BIDIREZIONALE) */\r\n public static Bi<TIn, TOut>(name: string, inTypeDefault: TIn, outTypeDefault: TOut): EndpointDef<TIn, TOut> {\r\n return new EndpointDef<TIn, TOut>(name, inTypeDefault, outTypeDefault);\r\n }\r\n}","// Angular\r\nimport { Type } from '@angular/core';\r\n\r\n// Modelli\r\nimport { BaseMessageService } from '../models/BaseMessageService';\r\n\r\n/**\r\n * Classe di configurazione per la libreria\r\n */\r\nexport class SignalrNotificationsModuleConfig {\r\n\r\n /**\r\n * Url nei confronti del quale aprire la connessione SignalR\r\n */\r\n endpointUrl : string;\r\n\r\n /**\r\n * Servizio che definisce i messaggi di IN e OUT coi loro default\r\n */\r\n messageService : Type<BaseMessageService>;\r\n\r\n /**\r\n * Indica se abilitare o meno la connessione SignalR nei confronti dell'URL **hubUrl**\r\n */\r\n enabled? : boolean;\r\n\r\n /**\r\n * Indica se utilizzare message pack come protocollo di trasmissione\r\n */\r\n useMessagePack? : boolean;\r\n\r\n /**\r\n * Indica se tentare di riconnettersi automaticamente quando la connessione cade\r\n */\r\n autoReconnect? : boolean;\r\n\r\n /**\r\n * Indica se scrivere o meno i messaggi di debug\r\n */\r\n debugMode? : boolean;\r\n}","/*\n * Public API Surface of signalr-notifications\n */\n\nexport * from './lib/signalr-notifications.service';\nexport * from './lib/signalr-notifications.module';\nexport * from './lib/models/BaseMessageService';\nexport * from './lib/models/EndpointDef';\nexport * from './lib/config/SignalrNotificationsModuleConfig';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.BaseMessageService"],"mappings":"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"}
1
+ {"version":3,"file":"esfaenza-signalr-notifications.mjs","sources":["../../../projects/signalr-notifications/src/lib/tokens.ts","../../../projects/signalr-notifications/src/lib/models/BaseMessageService.ts","../../../projects/signalr-notifications/src/lib/signalr-notifications.service.ts","../../../projects/signalr-notifications/src/lib/signalr-notifications.module.ts","../../../projects/signalr-notifications/src/lib/models/EndpointDef.ts","../../../projects/signalr-notifications/src/lib/config/SignalrNotificationsModuleConfig.ts","../../../projects/signalr-notifications/src/public-api.ts","../../../projects/signalr-notifications/src/esfaenza-signalr-notifications.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\r\n\r\n/**\r\n * Hub a cui collegarsi\r\n */\r\nexport const ENDPOINT_URL: InjectionToken<string> = new InjectionToken<string>('ENDPOINT_URL');\r\n\r\n/**\r\n * Indica se la libreria dev'essere attiva o no\r\n */\r\nexport const SIGNALR_ENABLED: InjectionToken<string> = new InjectionToken<boolean>('SIGNALR_ENABLED');\r\n\r\n/**\r\n * Indica se stampare messaggi di debug in console\r\n */\r\nexport const SGR_DEBUG_MODE: InjectionToken<string> = new InjectionToken<boolean>('SGR_DEBUG_MODE');\r\n\r\n/**\r\n * Indica se utilizzare il protocollo di trasferimento \"MessagePack\"\r\n */\r\nexport const MESSAGE_PACK: InjectionToken<boolean> = new InjectionToken<boolean>('MESSAGE_PACK');\r\n\r\n/**\r\n * Indica se tentare in automatico la riconnessione\r\n */\r\nexport const AUTO_RECONNECT: InjectionToken<boolean> = new InjectionToken<boolean>('AUTO_RECONNECT');","// Angular\r\nimport { Injectable } from '@angular/core';\r\n\r\n// Modelli\r\nimport { EndpointDef } from './EndpointDef';\r\n\r\n/**\r\n * Classe base da estendere con la definizione degli Endpoint supportati dall'applicazione\r\n */\r\n@Injectable()\r\nexport class BaseMessageService {\r\n\r\n private definitions: EndpointDef<any, any>[] = [];\r\n\r\n /** Entrypoint che restituisce tutti gli Endpoint dell'applicazione. Da overridare qualora non venga utilizzato il metodo **add** */\r\n public get AllDefinitions(): EndpointDef<any, any>[] { return this.definitions; }\r\n\r\n public add(endpoint: EndpointDef<any, any>) {\r\n this.definitions.push(endpoint);\r\n }\r\n}","// Angular\r\nimport { Injectable, Inject } from \"@angular/core\";\r\n\r\n// Direttive, Componenti, Librerie\r\nimport * as signalR from '@microsoft/signalr';\r\nimport { HubConnectionState } from \"@microsoft/signalr\";\r\nimport { Observable, Subject, EMPTY, from, of } from \"rxjs\";\r\nimport { catchError, concatMap, delay, tap } from \"rxjs/operators\";\r\n\r\n// Modelli\r\nimport { BaseMessageService } from './models/BaseMessageService';\r\nimport { EndpointDef } from './models/EndpointDef';\r\nimport { SGR_DEBUG_MODE, ENDPOINT_URL, MESSAGE_PACK, SIGNALR_ENABLED, AUTO_RECONNECT } from \"./tokens\";\r\n\r\n/**\r\n * Servizio che gestisce la comunicazione con un Hub SignalR in base alle configurazioni fornite dall'applicazione\r\n */\r\n@Injectable()\r\nexport class NotificationsService {\r\n\r\n /**\r\n * Cache degli Observable generati in base agli Endpoint disponibili\r\n */\r\n private notifications$: { [index: string]: Subject<any> } = {};\r\n\r\n /**\r\n * Connessione Signalr\r\n */\r\n private connection: signalR.HubConnection;\r\n\r\n /**\r\n * Costruttore\r\n * \r\n * @ignore\r\n */\r\n constructor(private MessageDef: BaseMessageService, @Inject(ENDPOINT_URL) private endpoint_url: string, @Inject(MESSAGE_PACK) private msgpack: boolean, @Inject(SIGNALR_ENABLED) private enabled: boolean, @Inject(SGR_DEBUG_MODE) private debug: boolean, @Inject(AUTO_RECONNECT) private autoreconnect: boolean) {\r\n if (!this.enabled) {\r\n this.log(this.loc(\"SignalR won't be enabled as per configuration\"));\r\n return;\r\n }\r\n\r\n this.init();\r\n }\r\n\r\n private async init(){\r\n this.MessageDef.AllDefinitions.forEach(def => { this.notifications$[def.endpoint] = new Subject<typeof def.inTypeDefault>(); });\r\n\r\n let pars: signalR.IHttpConnectionOptions = { skipNegotiation: true, transport: signalR.HttpTransportType.WebSockets, logger: this.debug ? signalR.LogLevel.Debug : signalR.LogLevel.None };\r\n var builder = new signalR.HubConnectionBuilder().withUrl(\"/\" + this.endpoint_url, pars);\r\n\r\n if (this.autoreconnect) {\r\n this.log(this.loc(\"Building SignalR Hub with Automatic Reconnection\"));\r\n // 100 tentativi di riconnessione, 1 ogni 5 secondi\r\n builder = builder.withAutomaticReconnect(new Array(100).fill(5 * 1000));\r\n }\r\n\r\n if (this.msgpack) {\r\n this.log(this.loc(\"Building SignalR Hub with MessagePack protocol\"));\r\n var mphpModule = await import(\"@microsoft/signalr-protocol-msgpack\");\r\n builder = builder.withHubProtocol(new mphpModule.MessagePackHubProtocol())\r\n }\r\n\r\n this.connection = builder.build();\r\n this.connect();\r\n }\r\n\r\n /**\r\n * Effettua la connessione all'Hub Signalr e registra tutti gli Endpoint per cui il Backend comunica con il Frontend sulla **connection**\r\n */\r\n private connect() {\r\n this.connection.start().catch(err => console.log(err));\r\n this.MessageDef.AllDefinitions.forEach(d => {\r\n //Registro solo le cose di IN, quelle di out sono chiamate che faccio io al BE quindi non servono\r\n if (d.inTypeDefault !== null && d.outTypeDefault === null)\r\n this.connection.on(d.endpoint, (message) => {\r\n this.log(this.loc(\"Request received from the server for endpoint\") + \" '\" + d.endpoint + \"': \" + this.substringLog(JSON.stringify(message)));\r\n this.notifications$[d.endpoint].next(message);\r\n });\r\n else\r\n this.log(this.loc(\"Refusing to register endpoint\") + \" \" + d.endpoint + \" \" + this.loc(\"because it is not declared as IN - ONLY\"));\r\n });\r\n }\r\n\r\n /**\r\n * Effettua verifiche sulla connessione e, in caso non fosse collegata, tenta di riconnetterla\r\n * \r\n * @returns {Promise<'OK' | 'KO' | 'NO-OP'>} 'OK' Se la connessione è già connessa o è stata riconnessa con successo, 'KO' Se non è stato possibile riconnettere \r\n * una connessione disconnessa, 'NO-OP' se la connesisone è in uno stato intermedio che non può essere modificato\r\n */\r\n public ensureConnected(): Promise<'OK' | 'KO' | 'NO-OP'> {\r\n if (this.connection.state == HubConnectionState.Disconnected) {\r\n this.log(this.loc(\"Connection lost or missing, reconnecting...\"));\r\n\r\n return this.connection.start()\r\n .then(_ => {\r\n return Promise.resolve(\"OK\");\r\n }, _ => {\r\n this.log(this.loc(\"Cannot reconnect SignalR, frontend HUB offline\"));\r\n return Promise.resolve(\"KO\");\r\n });\r\n }\r\n else if (this.connection.state == HubConnectionState.Connected)\r\n return Promise.resolve(\"OK\");\r\n else\r\n return Promise.resolve(\"NO-OP\");\r\n }\r\n\r\n /**\r\n * Invia un messaggio all'Hub del Backend\r\n * \r\n * @param {EndpointDef<TOut, any>} item Endpoint da contattare\r\n * @param {TOut} dto Dto da inviare all'Endpoint\r\n */\r\n public send<TOut>(item: EndpointDef<TOut, any>, dto: TOut) {\r\n if (!this.enabled) {\r\n this.log(this.loc(\"Send request ignored because SignalR is not active by configuration\"));\r\n return EMPTY;\r\n }\r\n\r\n if (this.connection.state == HubConnectionState.Connecting || this.connection.state == HubConnectionState.Reconnecting || this.connection.state == HubConnectionState.Disconnecting) {\r\n this.log(this.loc(\"Send request sent before a connection was in stable State, waiting 1 second and retrying\"));\r\n setTimeout(() => { this.send(item, dto); }, 1000);\r\n }\r\n else if (this.connection.state == HubConnectionState.Disconnected) {\r\n this.ensureConnected().then(t => {\r\n if (t == \"KO\") this.log(this.loc(\"ERRORS on reconnecting before retrying a send command. Sent message WILL BE LOST\"));\r\n else this.send(item, dto);\r\n })\r\n }\r\n else {\r\n this.connection.send(item.endpoint, dto).then(_ => {\r\n if (this.debug)\r\n console.info(this.loc(\"Request sent to server\") + \" - \" + item.endpoint + \": \" + this.substringLog(JSON.stringify(dto)));\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Invia un messaggio all'Hub del Backend, aspettandosi una risposta\r\n * \r\n * @param {EndpointDef<TOut, TIn>} item Endpoint da contattare\r\n * @param {TOut} dto Dto da inviare all'Endpoint\r\n * \r\n * @returns {Observable<TIn>} Observable su cui ci si può registrare per ricevere il risultato della chiamata\r\n */\r\n public invoke<TOut, TIn>(item: EndpointDef<TOut, TIn>, dto: TOut): Observable<TIn> {\r\n if (!this.enabled) {\r\n this.log(this.loc(\"Invoke request ignored because SignalR is not active by configuration\"));\r\n return EMPTY;\r\n }\r\n\r\n if (this.connection.state == HubConnectionState.Connecting || this.connection.state == HubConnectionState.Reconnecting || this.connection.state == HubConnectionState.Disconnecting) {\r\n this.log(this.loc(\"Invoke request sent before a connection was in stable State, waiting 1 second and retrying\"));\r\n return of().pipe(delay(1000), concatMap(() => this.invoke(item, dto)));\r\n }\r\n else if (this.connection.state == HubConnectionState.Disconnected) {\r\n return from(this.ensureConnected()).pipe(concatMap((res) => {\r\n if (res == \"KO\") {\r\n this.log(this.loc(\"ERRORS on reconnecting before retrying a send command. Sent message WILL BE LOST\"));\r\n return EMPTY;\r\n }\r\n else return this.invoke(item, dto);\r\n }))\r\n }\r\n else {\r\n return from(this.connection.invoke<TIn>(item.endpoint, dto)).pipe(\r\n tap(() => {\r\n if (this.debug) console.log(this.loc(\"Request invoked to server\") + \" - \" + item.endpoint + \": \" + this.substringLog(JSON.stringify(dto)));\r\n })\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * Hook per osservare i dati spediti ad un Endpoint dal Backend\r\n * \r\n * @param {EndpointDef<TIn, any>} item Endpoint su cui ascoltare\r\n * \r\n * @returns {Observable<TIn>} Observable su cui ci si può registrare per ricevere l'oggetto generato ad ogni chiamata dal Backend al Frontend\r\n */\r\n public observe<TIn>(item: EndpointDef<TIn, any>): Observable<TIn> {\r\n if (!this.enabled)\r\n {\r\n this.log(this.loc(\"Observe request ignored because SignalR is not active by configuration\"));\r\n return EMPTY;\r\n }\r\n\r\n this.log(this.loc(\"Returning observable for required endpoint\") + \": \" + item.endpoint);\r\n return <Observable<TIn>>this.notifications$[item.endpoint];\r\n }\r\n\r\n /**\r\n * Disconnessione del sistema di SignalR\r\n * \r\n * @returns {Observable<void>} Observable a cui registrarsi che viene chiamato quando la disconnessione è terminata\r\n */\r\n public disconnect(): Observable<void> {\r\n //NO-OP se non attivo\r\n if (!this.enabled)\r\n {\r\n this.log(this.loc(\"Disconnection request ignored because SignalR is not active by configuration\"));\r\n return EMPTY;\r\n }\r\n\r\n return from(this.connection.stop()).pipe(\r\n catchError((err, caught) => { console.log(err); return of(null); }),\r\n tap(() => {\r\n this.log(this.loc(\"Disconnection request honored\"));\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * Taglia un log troppo lungo\r\n * \r\n * @param {string} text Log da tagliare\r\n * @param {number} maxchars Numero massimo di caratteri da tenere\r\n * \r\n * @returns {string} Log tagliato\r\n */\r\n private substringLog(text: string, maxchars: number = 120) : string {\r\n return text.length > maxchars ? text.substr(0, maxchars) + \"[...]\" : text;\r\n }\r\n\r\n /**\r\n * Stampa un log a console\r\n * \r\n * @param {string} message Messaggio da stampare\r\n */\r\n private log(message: string) {\r\n if (this.debug)\r\n console.log(\"@signalr-notifications: \" + message)\r\n }\r\n\r\n /**\r\n * Helper di localizzazione\r\n * \r\n * @param {string} message Messaggio da tradurre\r\n * \r\n * @returns {string} Messaggio tradotto\r\n */\r\n private loc(message: string) : string{\r\n return message;\r\n }\r\n}","\r\nimport { NgModule, ModuleWithProviders } from '@angular/core';\r\nimport { SignalrNotificationsModuleConfig } from './config/SignalrNotificationsModuleConfig';\r\nimport { BaseMessageService } from './models/BaseMessageService';\r\nimport { NotificationsService } from './signalr-notifications.service';\r\nimport { ENDPOINT_URL, SIGNALR_ENABLED, SGR_DEBUG_MODE, MESSAGE_PACK, AUTO_RECONNECT } from './tokens';\r\n\r\n@NgModule()\r\nexport class SignalrNotificationsModule {\r\n static forRoot(config?: SignalrNotificationsModuleConfig): ModuleWithProviders<SignalrNotificationsModule> {\r\n return {\r\n ngModule: SignalrNotificationsModule,\r\n providers: [\r\n NotificationsService,\r\n { provide: BaseMessageService, useClass: config?.messageService || BaseMessageService },\r\n { provide: ENDPOINT_URL, useValue: config?.endpointUrl },\r\n { provide: SIGNALR_ENABLED, useValue: config?.enabled != null ? config?.enabled : true },\r\n { provide: SGR_DEBUG_MODE, useValue: config?.debugMode != null ? config?.debugMode : false },\r\n { provide: MESSAGE_PACK, useValue: config?.useMessagePack != null ? config?.useMessagePack : false },\r\n { provide: AUTO_RECONNECT, useValue: config?.autoReconnect != null ? config?.autoReconnect : true },\r\n ]\r\n };\r\n }\r\n}","/**\r\n * Definisce un Endpoint che spedisce un'informazione di tipo TIn e restituisce un'informazione di tipo TOut\r\n */\r\nexport class EndpointDef<TIn, TOut> {\r\n\r\n /**\r\n * Costruttore\r\n * \r\n * @param {string} endpoint Nome del metodo da chiamare nell'Hub del Backend contattato\r\n * @param {TIn} inTypeDefault Default per il tipo TIn. Utilizzato per fare Typecheck sulle chiamate da Backend a Frontend\r\n * @param {TOut} outTypeDefault Default per il tipo TOut. Utilizzato per fare Typecheck sulle chiamate da Frontend a Backend\r\n */\r\n constructor(public endpoint: string, public inTypeDefault: TIn, public outTypeDefault: TOut) { }\r\n\r\n\r\n /** Helper per la creazione rapida di un Endpoint di solo INPUT */\r\n public static In<TIn>(name: string, inTypeDefault: TIn): EndpointDef<TIn, void> {\r\n return new EndpointDef<TIn, void>(name, inTypeDefault, undefined);\r\n }\r\n\r\n /** Helper per la creazione rapida di un Endpoint di solo OUTPUT */\r\n public static Out<TOut>(name: string, outTypeDefault: TOut): EndpointDef<void, TOut> {\r\n return new EndpointDef<void, TOut>(name, undefined, outTypeDefault);\r\n }\r\n\r\n /** Helper per la creazione rapida di un Endpoint di INPUT e OUTPUT (BIDIREZIONALE) */\r\n public static Bi<TIn, TOut>(name: string, inTypeDefault: TIn, outTypeDefault: TOut): EndpointDef<TIn, TOut> {\r\n return new EndpointDef<TIn, TOut>(name, inTypeDefault, outTypeDefault);\r\n }\r\n}","// Angular\r\nimport { Type } from '@angular/core';\r\n\r\n// Modelli\r\nimport { BaseMessageService } from '../models/BaseMessageService';\r\n\r\n/**\r\n * Classe di configurazione per la libreria\r\n */\r\nexport class SignalrNotificationsModuleConfig {\r\n\r\n /**\r\n * Url nei confronti del quale aprire la connessione SignalR\r\n */\r\n endpointUrl : string;\r\n\r\n /**\r\n * Servizio che definisce i messaggi di IN e OUT coi loro default\r\n */\r\n messageService : Type<BaseMessageService>;\r\n\r\n /**\r\n * Indica se abilitare o meno la connessione SignalR nei confronti dell'URL **hubUrl**\r\n */\r\n enabled? : boolean;\r\n\r\n /**\r\n * Indica se utilizzare message pack come protocollo di trasmissione\r\n */\r\n useMessagePack? : boolean;\r\n\r\n /**\r\n * Indica se tentare di riconnettersi automaticamente quando la connessione cade\r\n */\r\n autoReconnect? : boolean;\r\n\r\n /**\r\n * Indica se scrivere o meno i messaggi di debug\r\n */\r\n debugMode? : boolean;\r\n}","/*\n * Public API Surface of signalr-notifications\n */\n\nexport * from './lib/tokens';\nexport * from './lib/signalr-notifications.service';\nexport * from './lib/signalr-notifications.module';\nexport * from './lib/models/BaseMessageService';\nexport * from './lib/models/EndpointDef';\nexport * from './lib/config/SignalrNotificationsModuleConfig';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.BaseMessageService"],"mappings":"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"}
@@ -16,11 +16,7 @@ const SIGNALR_ENABLED = new InjectionToken('SIGNALR_ENABLED');
16
16
  /**
17
17
  * Indica se stampare messaggi di debug in console
18
18
  */
19
- const DEBUG_MODE = new InjectionToken('DEBUG_MODE');
20
- /**
21
- * Indica il locale utilizzato dalla libreria per i messaggi. Sono supportati "it-IT" ed "en-US"
22
- */
23
- const LOCALE = new InjectionToken('LOCALE');
19
+ const SGR_DEBUG_MODE = new InjectionToken('SGR_DEBUG_MODE');
24
20
  /**
25
21
  * Indica se utilizzare il protocollo di trasferimento "MessagePack"
26
22
  */
@@ -66,6 +62,7 @@ class NotificationsService {
66
62
  this.msgpack = msgpack;
67
63
  this.enabled = enabled;
68
64
  this.debug = debug;
65
+ this.autoreconnect = autoreconnect;
69
66
  /**
70
67
  * Cache degli Observable generati in base agli Endpoint disponibili
71
68
  */
@@ -74,17 +71,20 @@ class NotificationsService {
74
71
  this.log(this.loc("SignalR won't be enabled as per configuration"));
75
72
  return;
76
73
  }
74
+ this.init();
75
+ }
76
+ async init() {
77
77
  this.MessageDef.AllDefinitions.forEach(def => { this.notifications$[def.endpoint] = new Subject(); });
78
- let pars = { skipNegotiation: true, transport: signalR.HttpTransportType.WebSockets, logger: debug ? signalR.LogLevel.Debug : signalR.LogLevel.None };
78
+ let pars = { skipNegotiation: true, transport: signalR.HttpTransportType.WebSockets, logger: this.debug ? signalR.LogLevel.Debug : signalR.LogLevel.None };
79
79
  var builder = new signalR.HubConnectionBuilder().withUrl("/" + this.endpoint_url, pars);
80
- if (autoreconnect) {
80
+ if (this.autoreconnect) {
81
81
  this.log(this.loc("Building SignalR Hub with Automatic Reconnection"));
82
82
  // 100 tentativi di riconnessione, 1 ogni 5 secondi
83
83
  builder = builder.withAutomaticReconnect(new Array(100).fill(5 * 1000));
84
84
  }
85
85
  if (this.msgpack) {
86
86
  this.log(this.loc("Building SignalR Hub with MessagePack protocol"));
87
- var mphpModule = require("@microsoft/signalr-protocol-msgpack");
87
+ var mphpModule = await import('@microsoft/signalr-protocol-msgpack');
88
88
  builder = builder.withHubProtocol(new mphpModule.MessagePackHubProtocol());
89
89
  }
90
90
  this.connection = builder.build();
@@ -253,7 +253,7 @@ class NotificationsService {
253
253
  return message;
254
254
  }
255
255
  }
256
- NotificationsService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: NotificationsService, deps: [{ token: BaseMessageService }, { token: ENDPOINT_URL }, { token: MESSAGE_PACK }, { token: SIGNALR_ENABLED }, { token: DEBUG_MODE }, { token: AUTO_RECONNECT }], target: i0.ɵɵFactoryTarget.Injectable });
256
+ NotificationsService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: NotificationsService, deps: [{ token: BaseMessageService }, { token: ENDPOINT_URL }, { token: MESSAGE_PACK }, { token: SIGNALR_ENABLED }, { token: SGR_DEBUG_MODE }, { token: AUTO_RECONNECT }], target: i0.ɵɵFactoryTarget.Injectable });
257
257
  NotificationsService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: NotificationsService });
258
258
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: NotificationsService, decorators: [{
259
259
  type: Injectable
@@ -268,7 +268,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
268
268
  args: [SIGNALR_ENABLED]
269
269
  }] }, { type: undefined, decorators: [{
270
270
  type: Inject,
271
- args: [DEBUG_MODE]
271
+ args: [SGR_DEBUG_MODE]
272
272
  }] }, { type: undefined, decorators: [{
273
273
  type: Inject,
274
274
  args: [AUTO_RECONNECT]
@@ -283,7 +283,7 @@ class SignalrNotificationsModule {
283
283
  { provide: BaseMessageService, useClass: config?.messageService || BaseMessageService },
284
284
  { provide: ENDPOINT_URL, useValue: config?.endpointUrl },
285
285
  { provide: SIGNALR_ENABLED, useValue: config?.enabled != null ? config?.enabled : true },
286
- { provide: DEBUG_MODE, useValue: config?.debugMode != null ? config?.debugMode : false },
286
+ { provide: SGR_DEBUG_MODE, useValue: config?.debugMode != null ? config?.debugMode : false },
287
287
  { provide: MESSAGE_PACK, useValue: config?.useMessagePack != null ? config?.useMessagePack : false },
288
288
  { provide: AUTO_RECONNECT, useValue: config?.autoReconnect != null ? config?.autoReconnect : true },
289
289
  ]
@@ -341,5 +341,5 @@ class SignalrNotificationsModuleConfig {
341
341
  * Generated bundle index. Do not edit.
342
342
  */
343
343
 
344
- export { BaseMessageService, EndpointDef, NotificationsService, SignalrNotificationsModule, SignalrNotificationsModuleConfig };
344
+ export { AUTO_RECONNECT, BaseMessageService, ENDPOINT_URL, EndpointDef, MESSAGE_PACK, NotificationsService, SGR_DEBUG_MODE, SIGNALR_ENABLED, SignalrNotificationsModule, SignalrNotificationsModuleConfig };
345
345
  //# sourceMappingURL=esfaenza-signalr-notifications.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"esfaenza-signalr-notifications.mjs","sources":["../../../projects/signalr-notifications/src/lib/tokens.ts","../../../projects/signalr-notifications/src/lib/models/BaseMessageService.ts","../../../projects/signalr-notifications/src/lib/signalr-notifications.service.ts","../../../projects/signalr-notifications/src/lib/signalr-notifications.module.ts","../../../projects/signalr-notifications/src/lib/models/EndpointDef.ts","../../../projects/signalr-notifications/src/lib/config/SignalrNotificationsModuleConfig.ts","../../../projects/signalr-notifications/src/public-api.ts","../../../projects/signalr-notifications/src/esfaenza-signalr-notifications.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\r\n\r\n/**\r\n * Hub a cui collegarsi\r\n */\r\nexport const ENDPOINT_URL: InjectionToken<string> = new InjectionToken<string>('ENDPOINT_URL');\r\n\r\n/**\r\n * Indica se la libreria dev'essere attiva o no\r\n */\r\nexport const SIGNALR_ENABLED: InjectionToken<string> = new InjectionToken<boolean>('SIGNALR_ENABLED');\r\n\r\n/**\r\n * Indica se stampare messaggi di debug in console\r\n */\r\nexport const DEBUG_MODE: InjectionToken<string> = new InjectionToken<boolean>('DEBUG_MODE');\r\n\r\n/**\r\n * Indica il locale utilizzato dalla libreria per i messaggi. Sono supportati \"it-IT\" ed \"en-US\"\r\n */\r\nexport const LOCALE: InjectionToken<string> = new InjectionToken<string>('LOCALE');\r\n\r\n/**\r\n * Indica se utilizzare il protocollo di trasferimento \"MessagePack\"\r\n */\r\nexport const MESSAGE_PACK: InjectionToken<boolean> = new InjectionToken<boolean>('MESSAGE_PACK');\r\n\r\n/**\r\n * Indica se tentare in automatico la riconnessione\r\n */\r\nexport const AUTO_RECONNECT: InjectionToken<boolean> = new InjectionToken<boolean>('AUTO_RECONNECT');","// Angular\r\nimport { Injectable } from '@angular/core';\r\n\r\n// Modelli\r\nimport { EndpointDef } from './EndpointDef';\r\n\r\n/**\r\n * Classe base da estendere con la definizione degli Endpoint supportati dall'applicazione\r\n */\r\n@Injectable()\r\nexport class BaseMessageService {\r\n\r\n private definitions: EndpointDef<any, any>[] = [];\r\n\r\n /** Entrypoint che restituisce tutti gli Endpoint dell'applicazione. Da overridare qualora non venga utilizzato il metodo **add** */\r\n public get AllDefinitions(): EndpointDef<any, any>[] { return this.definitions; }\r\n\r\n public add(endpoint: EndpointDef<any, any>) {\r\n this.definitions.push(endpoint);\r\n }\r\n}","// Angular\r\nimport { Injectable, Inject } from \"@angular/core\";\r\n\r\n// Direttive, Componenti, Librerie\r\nimport * as signalR from '@microsoft/signalr';\r\nimport { HubConnectionState } from \"@microsoft/signalr\";\r\nimport { Observable, Subject, EMPTY, from, of } from \"rxjs\";\r\nimport { catchError, concatMap, delay, tap } from \"rxjs/operators\";\r\n\r\n// Modelli\r\nimport { BaseMessageService } from './models/BaseMessageService';\r\nimport { EndpointDef } from './models/EndpointDef';\r\nimport { DEBUG_MODE, ENDPOINT_URL, LOCALE, MESSAGE_PACK, SIGNALR_ENABLED, AUTO_RECONNECT } from \"./tokens\";\r\n\r\n/**\r\n * Servizio che gestisce la comunicazione con un Hub SignalR in base alle configurazioni fornite dall'applicazione\r\n */\r\n@Injectable()\r\nexport class NotificationsService {\r\n\r\n /**\r\n * Cache degli Observable generati in base agli Endpoint disponibili\r\n */\r\n private notifications$: { [index: string]: Subject<any> } = {};\r\n\r\n /**\r\n * Connessione Signalr\r\n */\r\n private connection: signalR.HubConnection;\r\n\r\n /**\r\n * Costruttore\r\n * \r\n * @ignore\r\n */\r\n constructor(private MessageDef: BaseMessageService, @Inject(ENDPOINT_URL) private endpoint_url: string, @Inject(MESSAGE_PACK) private msgpack: boolean, @Inject(SIGNALR_ENABLED) private enabled: boolean, @Inject(DEBUG_MODE) private debug: boolean, @Inject(AUTO_RECONNECT) autoreconnect: boolean) {\r\n if (!this.enabled) {\r\n this.log(this.loc(\"SignalR won't be enabled as per configuration\"));\r\n return;\r\n }\r\n\r\n this.MessageDef.AllDefinitions.forEach(def => { this.notifications$[def.endpoint] = new Subject<typeof def.inTypeDefault>(); });\r\n\r\n let pars: signalR.IHttpConnectionOptions = { skipNegotiation: true, transport: signalR.HttpTransportType.WebSockets, logger: debug ? signalR.LogLevel.Debug : signalR.LogLevel.None };\r\n var builder = new signalR.HubConnectionBuilder().withUrl(\"/\" + this.endpoint_url, pars);\r\n\r\n if (autoreconnect) {\r\n this.log(this.loc(\"Building SignalR Hub with Automatic Reconnection\"));\r\n // 100 tentativi di riconnessione, 1 ogni 5 secondi\r\n builder = builder.withAutomaticReconnect(new Array(100).fill(5 * 1000));\r\n }\r\n\r\n if (this.msgpack) {\r\n this.log(this.loc(\"Building SignalR Hub with MessagePack protocol\"));\r\n var mphpModule = require(\"@microsoft/signalr-protocol-msgpack\");\r\n builder = builder.withHubProtocol(new mphpModule.MessagePackHubProtocol())\r\n }\r\n\r\n this.connection = builder.build();\r\n this.connect();\r\n }\r\n\r\n /**\r\n * Effettua la connessione all'Hub Signalr e registra tutti gli Endpoint per cui il Backend comunica con il Frontend sulla **connection**\r\n */\r\n private connect() {\r\n this.connection.start().catch(err => console.log(err));\r\n this.MessageDef.AllDefinitions.forEach(d => {\r\n //Registro solo le cose di IN, quelle di out sono chiamate che faccio io al BE quindi non servono\r\n if (d.inTypeDefault !== null && d.outTypeDefault === null)\r\n this.connection.on(d.endpoint, (message) => {\r\n this.log(this.loc(\"Request received from the server for endpoint\") + \" '\" + d.endpoint + \"': \" + this.substringLog(JSON.stringify(message)));\r\n this.notifications$[d.endpoint].next(message);\r\n });\r\n else\r\n this.log(this.loc(\"Refusing to register endpoint\") + \" \" + d.endpoint + \" \" + this.loc(\"because it is not declared as IN - ONLY\"));\r\n });\r\n }\r\n\r\n /**\r\n * Effettua verifiche sulla connessione e, in caso non fosse collegata, tenta di riconnetterla\r\n * \r\n * @returns {Promise<'OK' | 'KO' | 'NO-OP'>} 'OK' Se la connessione è già connessa o è stata riconnessa con successo, 'KO' Se non è stato possibile riconnettere \r\n * una connessione disconnessa, 'NO-OP' se la connesisone è in uno stato intermedio che non può essere modificato\r\n */\r\n public ensureConnected(): Promise<'OK' | 'KO' | 'NO-OP'> {\r\n if (this.connection.state == HubConnectionState.Disconnected) {\r\n this.log(this.loc(\"Connection lost or missing, reconnecting...\"));\r\n\r\n return this.connection.start()\r\n .then(_ => {\r\n return Promise.resolve(\"OK\");\r\n }, _ => {\r\n this.log(this.loc(\"Cannot reconnect SignalR, frontend HUB offline\"));\r\n return Promise.resolve(\"KO\");\r\n });\r\n }\r\n else if (this.connection.state == HubConnectionState.Connected)\r\n return Promise.resolve(\"OK\");\r\n else\r\n return Promise.resolve(\"NO-OP\");\r\n }\r\n\r\n /**\r\n * Invia un messaggio all'Hub del Backend\r\n * \r\n * @param {EndpointDef<TOut, any>} item Endpoint da contattare\r\n * @param {TOut} dto Dto da inviare all'Endpoint\r\n */\r\n public send<TOut>(item: EndpointDef<TOut, any>, dto: TOut) {\r\n if (!this.enabled) {\r\n this.log(this.loc(\"Send request ignored because SignalR is not active by configuration\"));\r\n return EMPTY;\r\n }\r\n\r\n if (this.connection.state == HubConnectionState.Connecting || this.connection.state == HubConnectionState.Reconnecting || this.connection.state == HubConnectionState.Disconnecting) {\r\n this.log(this.loc(\"Send request sent before a connection was in stable State, waiting 1 second and retrying\"));\r\n setTimeout(() => { this.send(item, dto); }, 1000);\r\n }\r\n else if (this.connection.state == HubConnectionState.Disconnected) {\r\n this.ensureConnected().then(t => {\r\n if (t == \"KO\") this.log(this.loc(\"ERRORS on reconnecting before retrying a send command. Sent message WILL BE LOST\"));\r\n else this.send(item, dto);\r\n })\r\n }\r\n else {\r\n this.connection.send(item.endpoint, dto).then(_ => {\r\n if (this.debug)\r\n console.info(this.loc(\"Request sent to server\") + \" - \" + item.endpoint + \": \" + this.substringLog(JSON.stringify(dto)));\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Invia un messaggio all'Hub del Backend, aspettandosi una risposta\r\n * \r\n * @param {EndpointDef<TOut, TIn>} item Endpoint da contattare\r\n * @param {TOut} dto Dto da inviare all'Endpoint\r\n * \r\n * @returns {Observable<TIn>} Observable su cui ci si può registrare per ricevere il risultato della chiamata\r\n */\r\n public invoke<TOut, TIn>(item: EndpointDef<TOut, TIn>, dto: TOut): Observable<TIn> {\r\n if (!this.enabled) {\r\n this.log(this.loc(\"Invoke request ignored because SignalR is not active by configuration\"));\r\n return EMPTY;\r\n }\r\n\r\n if (this.connection.state == HubConnectionState.Connecting || this.connection.state == HubConnectionState.Reconnecting || this.connection.state == HubConnectionState.Disconnecting) {\r\n this.log(this.loc(\"Invoke request sent before a connection was in stable State, waiting 1 second and retrying\"));\r\n return of().pipe(delay(1000), concatMap(() => this.invoke(item, dto)));\r\n }\r\n else if (this.connection.state == HubConnectionState.Disconnected) {\r\n return from(this.ensureConnected()).pipe(concatMap((res) => {\r\n if (res == \"KO\") {\r\n this.log(this.loc(\"ERRORS on reconnecting before retrying a send command. Sent message WILL BE LOST\"));\r\n return EMPTY;\r\n }\r\n else return this.invoke(item, dto);\r\n }))\r\n }\r\n else {\r\n return from(this.connection.invoke<TIn>(item.endpoint, dto)).pipe(\r\n tap(() => {\r\n if (this.debug) console.log(this.loc(\"Request invoked to server\") + \" - \" + item.endpoint + \": \" + this.substringLog(JSON.stringify(dto)));\r\n })\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * Hook per osservare i dati spediti ad un Endpoint dal Backend\r\n * \r\n * @param {EndpointDef<TIn, any>} item Endpoint su cui ascoltare\r\n * \r\n * @returns {Observable<TIn>} Observable su cui ci si può registrare per ricevere l'oggetto generato ad ogni chiamata dal Backend al Frontend\r\n */\r\n public observe<TIn>(item: EndpointDef<TIn, any>): Observable<TIn> {\r\n if (!this.enabled)\r\n {\r\n this.log(this.loc(\"Observe request ignored because SignalR is not active by configuration\"));\r\n return EMPTY;\r\n }\r\n\r\n this.log(this.loc(\"Returning observable for required endpoint\") + \": \" + item.endpoint);\r\n return <Observable<TIn>>this.notifications$[item.endpoint];\r\n }\r\n\r\n /**\r\n * Disconnessione del sistema di SignalR\r\n * \r\n * @returns {Observable<void>} Observable a cui registrarsi che viene chiamato quando la disconnessione è terminata\r\n */\r\n public disconnect(): Observable<void> {\r\n //NO-OP se non attivo\r\n if (!this.enabled)\r\n {\r\n this.log(this.loc(\"Disconnection request ignored because SignalR is not active by configuration\"));\r\n return EMPTY;\r\n }\r\n\r\n return from(this.connection.stop()).pipe(\r\n catchError((err, caught) => { console.log(err); return of(null); }),\r\n tap(() => {\r\n this.log(this.loc(\"Disconnection request honored\"));\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * Taglia un log troppo lungo\r\n * \r\n * @param {string} text Log da tagliare\r\n * @param {number} maxchars Numero massimo di caratteri da tenere\r\n * \r\n * @returns {string} Log tagliato\r\n */\r\n private substringLog(text: string, maxchars: number = 120) : string {\r\n return text.length > maxchars ? text.substr(0, maxchars) + \"[...]\" : text;\r\n }\r\n\r\n /**\r\n * Stampa un log a console\r\n * \r\n * @param {string} message Messaggio da stampare\r\n */\r\n private log(message: string) {\r\n if (this.debug)\r\n console.log(\"@signalr-notifications: \" + message)\r\n }\r\n\r\n /**\r\n * Helper di localizzazione\r\n * \r\n * @param {string} message Messaggio da tradurre\r\n * \r\n * @returns {string} Messaggio tradotto\r\n */\r\n private loc(message: string) : string{\r\n return message;\r\n }\r\n}","\r\nimport { NgModule, ModuleWithProviders } from '@angular/core';\r\nimport { SignalrNotificationsModuleConfig } from './config/SignalrNotificationsModuleConfig';\r\nimport { BaseMessageService } from './models/BaseMessageService';\r\nimport { NotificationsService } from './signalr-notifications.service';\r\nimport { ENDPOINT_URL, SIGNALR_ENABLED, DEBUG_MODE, MESSAGE_PACK, AUTO_RECONNECT } from './tokens';\r\n\r\n@NgModule()\r\nexport class SignalrNotificationsModule {\r\n static forRoot(config?: SignalrNotificationsModuleConfig): ModuleWithProviders<SignalrNotificationsModule> {\r\n return {\r\n ngModule: SignalrNotificationsModule,\r\n providers: [\r\n NotificationsService,\r\n { provide: BaseMessageService, useClass: config?.messageService || BaseMessageService },\r\n { provide: ENDPOINT_URL, useValue: config?.endpointUrl },\r\n { provide: SIGNALR_ENABLED, useValue: config?.enabled != null ? config?.enabled : true },\r\n { provide: DEBUG_MODE, useValue: config?.debugMode != null ? config?.debugMode : false },\r\n { provide: MESSAGE_PACK, useValue: config?.useMessagePack != null ? config?.useMessagePack : false },\r\n { provide: AUTO_RECONNECT, useValue: config?.autoReconnect != null ? config?.autoReconnect : true },\r\n ]\r\n };\r\n }\r\n}","/**\r\n * Definisce un Endpoint che spedisce un'informazione di tipo TIn e restituisce un'informazione di tipo TOut\r\n */\r\nexport class EndpointDef<TIn, TOut> {\r\n\r\n /**\r\n * Costruttore\r\n * \r\n * @param {string} endpoint Nome del metodo da chiamare nell'Hub del Backend contattato\r\n * @param {TIn} inTypeDefault Default per il tipo TIn. Utilizzato per fare Typecheck sulle chiamate da Backend a Frontend\r\n * @param {TOut} outTypeDefault Default per il tipo TOut. Utilizzato per fare Typecheck sulle chiamate da Frontend a Backend\r\n */\r\n constructor(public endpoint: string, public inTypeDefault: TIn, public outTypeDefault: TOut) { }\r\n\r\n\r\n /** Helper per la creazione rapida di un Endpoint di solo INPUT */\r\n public static In<TIn>(name: string, inTypeDefault: TIn): EndpointDef<TIn, void> {\r\n return new EndpointDef<TIn, void>(name, inTypeDefault, undefined);\r\n }\r\n\r\n /** Helper per la creazione rapida di un Endpoint di solo OUTPUT */\r\n public static Out<TOut>(name: string, outTypeDefault: TOut): EndpointDef<void, TOut> {\r\n return new EndpointDef<void, TOut>(name, undefined, outTypeDefault);\r\n }\r\n\r\n /** Helper per la creazione rapida di un Endpoint di INPUT e OUTPUT (BIDIREZIONALE) */\r\n public static Bi<TIn, TOut>(name: string, inTypeDefault: TIn, outTypeDefault: TOut): EndpointDef<TIn, TOut> {\r\n return new EndpointDef<TIn, TOut>(name, inTypeDefault, outTypeDefault);\r\n }\r\n}","// Angular\r\nimport { Type } from '@angular/core';\r\n\r\n// Modelli\r\nimport { BaseMessageService } from '../models/BaseMessageService';\r\n\r\n/**\r\n * Classe di configurazione per la libreria\r\n */\r\nexport class SignalrNotificationsModuleConfig {\r\n\r\n /**\r\n * Url nei confronti del quale aprire la connessione SignalR\r\n */\r\n endpointUrl : string;\r\n\r\n /**\r\n * Servizio che definisce i messaggi di IN e OUT coi loro default\r\n */\r\n messageService : Type<BaseMessageService>;\r\n\r\n /**\r\n * Indica se abilitare o meno la connessione SignalR nei confronti dell'URL **hubUrl**\r\n */\r\n enabled? : boolean;\r\n\r\n /**\r\n * Indica se utilizzare message pack come protocollo di trasmissione\r\n */\r\n useMessagePack? : boolean;\r\n\r\n /**\r\n * Indica se tentare di riconnettersi automaticamente quando la connessione cade\r\n */\r\n autoReconnect? : boolean;\r\n\r\n /**\r\n * Indica se scrivere o meno i messaggi di debug\r\n */\r\n debugMode? : boolean;\r\n}","/*\n * Public API Surface of signalr-notifications\n */\n\nexport * from './lib/signalr-notifications.service';\nexport * from './lib/signalr-notifications.module';\nexport * from './lib/models/BaseMessageService';\nexport * from './lib/models/EndpointDef';\nexport * from './lib/config/SignalrNotificationsModuleConfig';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.BaseMessageService"],"mappings":";;;;;;;AAEA;;AAEG;AACI,MAAM,YAAY,GAA2B,IAAI,cAAc,CAAS,cAAc,CAAC,CAAC;AAE/F;;AAEG;AACI,MAAM,eAAe,GAA2B,IAAI,cAAc,CAAU,iBAAiB,CAAC,CAAC;AAEtG;;AAEG;AACI,MAAM,UAAU,GAA2B,IAAI,cAAc,CAAU,YAAY,CAAC,CAAC;AAE5F;;AAEG;AACI,MAAM,MAAM,GAA2B,IAAI,cAAc,CAAS,QAAQ,CAAC,CAAC;AAEnF;;AAEG;AACI,MAAM,YAAY,GAA4B,IAAI,cAAc,CAAU,cAAc,CAAC,CAAC;AAEjG;;AAEG;AACI,MAAM,cAAc,GAA4B,IAAI,cAAc,CAAU,gBAAgB,CAAC;;AC9BpG;AAMA;;AAEG;MAEU,kBAAkB,CAAA;AAD/B,IAAA,WAAA,GAAA;QAGY,IAAW,CAAA,WAAA,GAA4B,EAAE,CAAC;AAQrD,KAAA;;IALG,IAAW,cAAc,KAA8B,OAAO,IAAI,CAAC,WAAW,CAAC,EAAE;AAE1E,IAAA,GAAG,CAAC,QAA+B,EAAA;AACtC,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;KACnC;;+GATQ,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;mHAAlB,kBAAkB,EAAA,CAAA,CAAA;2FAAlB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAD9B,UAAU;;;ACTX;AAcA;;AAEG;MAEU,oBAAoB,CAAA;AAY7B;;;;AAIG;IACH,WAAoB,CAAA,UAA8B,EAAgC,YAAoB,EAAgC,OAAgB,EAAmC,OAAgB,EAA8B,KAAc,EAA0B,aAAsB,EAAA;QAAjR,IAAU,CAAA,UAAA,GAAV,UAAU,CAAoB;QAAgC,IAAY,CAAA,YAAA,GAAZ,YAAY,CAAQ;QAAgC,IAAO,CAAA,OAAA,GAAP,OAAO,CAAS;QAAmC,IAAO,CAAA,OAAA,GAAP,OAAO,CAAS;QAA8B,IAAK,CAAA,KAAA,GAAL,KAAK,CAAS;AAfrP;;AAEG;QACK,IAAc,CAAA,cAAA,GAAsC,EAAE,CAAC;AAa3D,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YACf,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,+CAA+C,CAAC,CAAC,CAAC;YACpE,OAAO;AACV,SAAA;QAED,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,OAAO,CAAC,GAAG,IAAG,EAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,IAAI,OAAO,EAA4B,CAAC,EAAE,CAAC,CAAC;AAEhI,QAAA,IAAI,IAAI,GAAmC,EAAE,eAAe,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,CAAC,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;AACtL,QAAA,IAAI,OAAO,GAAG,IAAI,OAAO,CAAC,oBAAoB,EAAE,CAAC,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;AAExF,QAAA,IAAI,aAAa,EAAE;YACf,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,kDAAkD,CAAC,CAAC,CAAC;;AAEvE,YAAA,OAAO,GAAG,OAAO,CAAC,sBAAsB,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;AAC3E,SAAA;QAED,IAAI,IAAI,CAAC,OAAO,EAAE;YACd,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,gDAAgD,CAAC,CAAC,CAAC;AACrE,YAAA,IAAI,UAAU,GAAG,OAAO,CAAC,qCAAqC,CAAC,CAAC;YAChE,OAAO,GAAG,OAAO,CAAC,eAAe,CAAC,IAAI,UAAU,CAAC,sBAAsB,EAAE,CAAC,CAAA;AAC7E,SAAA;AAED,QAAA,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;QAClC,IAAI,CAAC,OAAO,EAAE,CAAC;KAClB;AAED;;AAEG;IACK,OAAO,GAAA;AACX,QAAA,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QACvD,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,IAAG;;YAEvC,IAAI,CAAC,CAAC,aAAa,KAAK,IAAI,IAAI,CAAC,CAAC,cAAc,KAAK,IAAI;AACrD,gBAAA,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,OAAO,KAAI;AACvC,oBAAA,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,+CAA+C,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,QAAQ,GAAG,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAC7I,oBAAA,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAClD,iBAAC,CAAC,CAAC;;gBAEH,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,+BAA+B,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,QAAQ,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAC,CAAC;AAC3I,SAAC,CAAC,CAAC;KACN;AAED;;;;;AAKG;IACI,eAAe,GAAA;QAClB,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,IAAI,kBAAkB,CAAC,YAAY,EAAE;YAC1D,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,6CAA6C,CAAC,CAAC,CAAC;AAElE,YAAA,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE;iBACzB,IAAI,CAAC,CAAC,IAAG;AACN,gBAAA,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;aAChC,EAAE,CAAC,IAAG;gBACH,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,gDAAgD,CAAC,CAAC,CAAC;AACrE,gBAAA,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AACjC,aAAC,CAAC,CAAC;AACV,SAAA;aACI,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,IAAI,kBAAkB,CAAC,SAAS;AAC1D,YAAA,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;;AAE7B,YAAA,OAAO,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;KACvC;AAED;;;;;AAKG;IACI,IAAI,CAAO,IAA4B,EAAE,GAAS,EAAA;AACrD,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YACf,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,qEAAqE,CAAC,CAAC,CAAC;AAC1F,YAAA,OAAO,KAAK,CAAC;AAChB,SAAA;AAED,QAAA,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,IAAI,kBAAkB,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,IAAI,kBAAkB,CAAC,YAAY,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,IAAI,kBAAkB,CAAC,aAAa,EAAE;YACjL,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,0FAA0F,CAAC,CAAC,CAAC;AAC/G,YAAA,UAAU,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;AACrD,SAAA;aACI,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,IAAI,kBAAkB,CAAC,YAAY,EAAE;YAC/D,IAAI,CAAC,eAAe,EAAE,CAAC,IAAI,CAAC,CAAC,IAAG;gBAC5B,IAAI,CAAC,IAAI,IAAI;oBAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,kFAAkF,CAAC,CAAC,CAAC;;AACjH,oBAAA,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;AAC9B,aAAC,CAAC,CAAA;AACL,SAAA;AACI,aAAA;AACD,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAG;gBAC9C,IAAI,IAAI,CAAC,KAAK;AACV,oBAAA,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,wBAAwB,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,QAAQ,GAAG,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACjI,aAAC,CAAC,CAAC;AACN,SAAA;KACJ;AAED;;;;;;;AAOG;IACI,MAAM,CAAY,IAA4B,EAAE,GAAS,EAAA;AAC5D,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YACf,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,uEAAuE,CAAC,CAAC,CAAC;AAC5F,YAAA,OAAO,KAAK,CAAC;AAChB,SAAA;AAED,QAAA,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,IAAI,kBAAkB,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,IAAI,kBAAkB,CAAC,YAAY,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,IAAI,kBAAkB,CAAC,aAAa,EAAE;YACjL,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,4FAA4F,CAAC,CAAC,CAAC;YACjH,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;AAC1E,SAAA;aACI,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,IAAI,kBAAkB,CAAC,YAAY,EAAE;AAC/D,YAAA,OAAO,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,KAAI;gBACvD,IAAI,GAAG,IAAI,IAAI,EAAE;oBACb,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,kFAAkF,CAAC,CAAC,CAAC;AACvG,oBAAA,OAAO,KAAK,CAAC;AAChB,iBAAA;;oBACI,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;aACtC,CAAC,CAAC,CAAA;AACN,SAAA;AACI,aAAA;YACD,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAM,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAC7D,GAAG,CAAC,MAAK;gBACL,IAAI,IAAI,CAAC,KAAK;AAAE,oBAAA,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,2BAA2B,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,QAAQ,GAAG,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;aAC9I,CAAC,CACL,CAAC;AACL,SAAA;KACJ;AAED;;;;;;AAMG;AACI,IAAA,OAAO,CAAM,IAA2B,EAAA;AAC3C,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EACjB;YACI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,wEAAwE,CAAC,CAAC,CAAC;AAC7F,YAAA,OAAO,KAAK,CAAC;AAChB,SAAA;AAED,QAAA,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,4CAA4C,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;QACxF,OAAwB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;KAC9D;AAED;;;;AAIG;IACI,UAAU,GAAA;;AAEb,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EACjB;YACI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,8EAA8E,CAAC,CAAC,CAAC;AACnG,YAAA,OAAO,KAAK,CAAC;AAChB,SAAA;AAED,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CACpC,UAAU,CAAC,CAAC,GAAG,EAAE,MAAM,KAAI,EAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EACnE,GAAG,CAAC,MAAK;YACL,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC,CAAC;SACvD,CAAC,CACL,CAAC;KACL;AAED;;;;;;;AAOG;AACK,IAAA,YAAY,CAAC,IAAY,EAAE,QAAA,GAAmB,GAAG,EAAA;QACrD,OAAO,IAAI,CAAC,MAAM,GAAG,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,QAAQ,CAAC,GAAG,OAAO,GAAI,IAAI,CAAC;KAC9E;AAED;;;;AAIG;AACK,IAAA,GAAG,CAAC,OAAe,EAAA;QACvB,IAAI,IAAI,CAAC,KAAK;AACV,YAAA,OAAO,CAAC,GAAG,CAAC,0BAA0B,GAAG,OAAO,CAAC,CAAA;KACxD;AAED;;;;;;AAMG;AACK,IAAA,GAAG,CAAC,OAAe,EAAA;AACvB,QAAA,OAAO,OAAO,CAAC;KAClB;;iHA7NQ,oBAAoB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,kBAAA,EAAA,EAAA,EAAA,KAAA,EAiB+B,YAAY,EAAwC,EAAA,EAAA,KAAA,EAAA,YAAY,aAAoC,eAAe,EAAA,EAAA,EAAA,KAAA,EAAoC,UAAU,EAAA,EAAA,EAAA,KAAA,EAAkC,cAAc,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;qHAjBpQ,oBAAoB,EAAA,CAAA,CAAA;2FAApB,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBADhC,UAAU;;0BAkB8C,MAAM;2BAAC,YAAY,CAAA;;0BAAiC,MAAM;2BAAC,YAAY,CAAA;;0BAA6B,MAAM;2BAAC,eAAe,CAAA;;0BAA6B,MAAM;2BAAC,UAAU,CAAA;;0BAA2B,MAAM;2BAAC,cAAc,CAAA;;;MC3BpQ,0BAA0B,CAAA;IACrC,OAAO,OAAO,CAAC,MAAyC,EAAA;QACtD,OAAO;AACL,YAAA,QAAQ,EAAE,0BAA0B;AACpC,YAAA,SAAS,EAAE;gBACT,oBAAoB;gBACpB,EAAE,OAAO,EAAE,kBAAkB,EAAE,QAAQ,EAAE,MAAM,EAAE,cAAc,IAAI,kBAAkB,EAAE;gBACvF,EAAE,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE;gBACxD,EAAE,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,IAAI,IAAI,GAAG,MAAM,EAAE,OAAO,GAAG,IAAI,EAAE;gBACxF,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,IAAI,IAAI,GAAG,MAAM,EAAE,SAAS,GAAG,KAAK,EAAE;gBACxF,EAAE,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,EAAE,cAAc,IAAI,IAAI,GAAG,MAAM,EAAE,cAAc,GAAG,KAAK,EAAE;gBACpG,EAAE,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,EAAE,aAAa,IAAI,IAAI,GAAG,MAAM,EAAE,aAAa,GAAG,IAAI,EAAE;AACpG,aAAA;SACF,CAAC;KACH;;uHAdU,0BAA0B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;wHAA1B,0BAA0B,EAAA,CAAA,CAAA;wHAA1B,0BAA0B,EAAA,CAAA,CAAA;2FAA1B,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBADtC,QAAQ;;;ACPT;;AAEG;MACU,WAAW,CAAA;AAEpB;;;;;;AAMG;AACH,IAAA,WAAA,CAAmB,QAAgB,EAAS,aAAkB,EAAS,cAAoB,EAAA;QAAxE,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAQ;QAAS,IAAa,CAAA,aAAA,GAAb,aAAa,CAAK;QAAS,IAAc,CAAA,cAAA,GAAd,cAAc,CAAM;KAAK;;AAIzF,IAAA,OAAO,EAAE,CAAM,IAAY,EAAE,aAAkB,EAAA;QAClD,OAAO,IAAI,WAAW,CAAY,IAAI,EAAE,aAAa,EAAE,SAAS,CAAC,CAAC;KACrE;;AAGM,IAAA,OAAO,GAAG,CAAO,IAAY,EAAE,cAAoB,EAAA;QACtD,OAAO,IAAI,WAAW,CAAa,IAAI,EAAE,SAAS,EAAE,cAAc,CAAC,CAAC;KACvE;;AAGM,IAAA,OAAO,EAAE,CAAY,IAAY,EAAE,aAAkB,EAAE,cAAoB,EAAA;QAC9E,OAAO,IAAI,WAAW,CAAY,IAAI,EAAE,aAAa,EAAE,cAAc,CAAC,CAAC;KAC1E;AACJ;;ACvBD;;AAEG;MACU,gCAAgC,CAAA;AA+B5C;;ACxCD;;AAEG;;ACFH;;AAEG;;;;"}
1
+ {"version":3,"file":"esfaenza-signalr-notifications.mjs","sources":["../../../projects/signalr-notifications/src/lib/tokens.ts","../../../projects/signalr-notifications/src/lib/models/BaseMessageService.ts","../../../projects/signalr-notifications/src/lib/signalr-notifications.service.ts","../../../projects/signalr-notifications/src/lib/signalr-notifications.module.ts","../../../projects/signalr-notifications/src/lib/models/EndpointDef.ts","../../../projects/signalr-notifications/src/lib/config/SignalrNotificationsModuleConfig.ts","../../../projects/signalr-notifications/src/public-api.ts","../../../projects/signalr-notifications/src/esfaenza-signalr-notifications.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\r\n\r\n/**\r\n * Hub a cui collegarsi\r\n */\r\nexport const ENDPOINT_URL: InjectionToken<string> = new InjectionToken<string>('ENDPOINT_URL');\r\n\r\n/**\r\n * Indica se la libreria dev'essere attiva o no\r\n */\r\nexport const SIGNALR_ENABLED: InjectionToken<string> = new InjectionToken<boolean>('SIGNALR_ENABLED');\r\n\r\n/**\r\n * Indica se stampare messaggi di debug in console\r\n */\r\nexport const SGR_DEBUG_MODE: InjectionToken<string> = new InjectionToken<boolean>('SGR_DEBUG_MODE');\r\n\r\n/**\r\n * Indica se utilizzare il protocollo di trasferimento \"MessagePack\"\r\n */\r\nexport const MESSAGE_PACK: InjectionToken<boolean> = new InjectionToken<boolean>('MESSAGE_PACK');\r\n\r\n/**\r\n * Indica se tentare in automatico la riconnessione\r\n */\r\nexport const AUTO_RECONNECT: InjectionToken<boolean> = new InjectionToken<boolean>('AUTO_RECONNECT');","// Angular\r\nimport { Injectable } from '@angular/core';\r\n\r\n// Modelli\r\nimport { EndpointDef } from './EndpointDef';\r\n\r\n/**\r\n * Classe base da estendere con la definizione degli Endpoint supportati dall'applicazione\r\n */\r\n@Injectable()\r\nexport class BaseMessageService {\r\n\r\n private definitions: EndpointDef<any, any>[] = [];\r\n\r\n /** Entrypoint che restituisce tutti gli Endpoint dell'applicazione. Da overridare qualora non venga utilizzato il metodo **add** */\r\n public get AllDefinitions(): EndpointDef<any, any>[] { return this.definitions; }\r\n\r\n public add(endpoint: EndpointDef<any, any>) {\r\n this.definitions.push(endpoint);\r\n }\r\n}","// Angular\r\nimport { Injectable, Inject } from \"@angular/core\";\r\n\r\n// Direttive, Componenti, Librerie\r\nimport * as signalR from '@microsoft/signalr';\r\nimport { HubConnectionState } from \"@microsoft/signalr\";\r\nimport { Observable, Subject, EMPTY, from, of } from \"rxjs\";\r\nimport { catchError, concatMap, delay, tap } from \"rxjs/operators\";\r\n\r\n// Modelli\r\nimport { BaseMessageService } from './models/BaseMessageService';\r\nimport { EndpointDef } from './models/EndpointDef';\r\nimport { SGR_DEBUG_MODE, ENDPOINT_URL, MESSAGE_PACK, SIGNALR_ENABLED, AUTO_RECONNECT } from \"./tokens\";\r\n\r\n/**\r\n * Servizio che gestisce la comunicazione con un Hub SignalR in base alle configurazioni fornite dall'applicazione\r\n */\r\n@Injectable()\r\nexport class NotificationsService {\r\n\r\n /**\r\n * Cache degli Observable generati in base agli Endpoint disponibili\r\n */\r\n private notifications$: { [index: string]: Subject<any> } = {};\r\n\r\n /**\r\n * Connessione Signalr\r\n */\r\n private connection: signalR.HubConnection;\r\n\r\n /**\r\n * Costruttore\r\n * \r\n * @ignore\r\n */\r\n constructor(private MessageDef: BaseMessageService, @Inject(ENDPOINT_URL) private endpoint_url: string, @Inject(MESSAGE_PACK) private msgpack: boolean, @Inject(SIGNALR_ENABLED) private enabled: boolean, @Inject(SGR_DEBUG_MODE) private debug: boolean, @Inject(AUTO_RECONNECT) private autoreconnect: boolean) {\r\n if (!this.enabled) {\r\n this.log(this.loc(\"SignalR won't be enabled as per configuration\"));\r\n return;\r\n }\r\n\r\n this.init();\r\n }\r\n\r\n private async init(){\r\n this.MessageDef.AllDefinitions.forEach(def => { this.notifications$[def.endpoint] = new Subject<typeof def.inTypeDefault>(); });\r\n\r\n let pars: signalR.IHttpConnectionOptions = { skipNegotiation: true, transport: signalR.HttpTransportType.WebSockets, logger: this.debug ? signalR.LogLevel.Debug : signalR.LogLevel.None };\r\n var builder = new signalR.HubConnectionBuilder().withUrl(\"/\" + this.endpoint_url, pars);\r\n\r\n if (this.autoreconnect) {\r\n this.log(this.loc(\"Building SignalR Hub with Automatic Reconnection\"));\r\n // 100 tentativi di riconnessione, 1 ogni 5 secondi\r\n builder = builder.withAutomaticReconnect(new Array(100).fill(5 * 1000));\r\n }\r\n\r\n if (this.msgpack) {\r\n this.log(this.loc(\"Building SignalR Hub with MessagePack protocol\"));\r\n var mphpModule = await import(\"@microsoft/signalr-protocol-msgpack\");\r\n builder = builder.withHubProtocol(new mphpModule.MessagePackHubProtocol())\r\n }\r\n\r\n this.connection = builder.build();\r\n this.connect();\r\n }\r\n\r\n /**\r\n * Effettua la connessione all'Hub Signalr e registra tutti gli Endpoint per cui il Backend comunica con il Frontend sulla **connection**\r\n */\r\n private connect() {\r\n this.connection.start().catch(err => console.log(err));\r\n this.MessageDef.AllDefinitions.forEach(d => {\r\n //Registro solo le cose di IN, quelle di out sono chiamate che faccio io al BE quindi non servono\r\n if (d.inTypeDefault !== null && d.outTypeDefault === null)\r\n this.connection.on(d.endpoint, (message) => {\r\n this.log(this.loc(\"Request received from the server for endpoint\") + \" '\" + d.endpoint + \"': \" + this.substringLog(JSON.stringify(message)));\r\n this.notifications$[d.endpoint].next(message);\r\n });\r\n else\r\n this.log(this.loc(\"Refusing to register endpoint\") + \" \" + d.endpoint + \" \" + this.loc(\"because it is not declared as IN - ONLY\"));\r\n });\r\n }\r\n\r\n /**\r\n * Effettua verifiche sulla connessione e, in caso non fosse collegata, tenta di riconnetterla\r\n * \r\n * @returns {Promise<'OK' | 'KO' | 'NO-OP'>} 'OK' Se la connessione è già connessa o è stata riconnessa con successo, 'KO' Se non è stato possibile riconnettere \r\n * una connessione disconnessa, 'NO-OP' se la connesisone è in uno stato intermedio che non può essere modificato\r\n */\r\n public ensureConnected(): Promise<'OK' | 'KO' | 'NO-OP'> {\r\n if (this.connection.state == HubConnectionState.Disconnected) {\r\n this.log(this.loc(\"Connection lost or missing, reconnecting...\"));\r\n\r\n return this.connection.start()\r\n .then(_ => {\r\n return Promise.resolve(\"OK\");\r\n }, _ => {\r\n this.log(this.loc(\"Cannot reconnect SignalR, frontend HUB offline\"));\r\n return Promise.resolve(\"KO\");\r\n });\r\n }\r\n else if (this.connection.state == HubConnectionState.Connected)\r\n return Promise.resolve(\"OK\");\r\n else\r\n return Promise.resolve(\"NO-OP\");\r\n }\r\n\r\n /**\r\n * Invia un messaggio all'Hub del Backend\r\n * \r\n * @param {EndpointDef<TOut, any>} item Endpoint da contattare\r\n * @param {TOut} dto Dto da inviare all'Endpoint\r\n */\r\n public send<TOut>(item: EndpointDef<TOut, any>, dto: TOut) {\r\n if (!this.enabled) {\r\n this.log(this.loc(\"Send request ignored because SignalR is not active by configuration\"));\r\n return EMPTY;\r\n }\r\n\r\n if (this.connection.state == HubConnectionState.Connecting || this.connection.state == HubConnectionState.Reconnecting || this.connection.state == HubConnectionState.Disconnecting) {\r\n this.log(this.loc(\"Send request sent before a connection was in stable State, waiting 1 second and retrying\"));\r\n setTimeout(() => { this.send(item, dto); }, 1000);\r\n }\r\n else if (this.connection.state == HubConnectionState.Disconnected) {\r\n this.ensureConnected().then(t => {\r\n if (t == \"KO\") this.log(this.loc(\"ERRORS on reconnecting before retrying a send command. Sent message WILL BE LOST\"));\r\n else this.send(item, dto);\r\n })\r\n }\r\n else {\r\n this.connection.send(item.endpoint, dto).then(_ => {\r\n if (this.debug)\r\n console.info(this.loc(\"Request sent to server\") + \" - \" + item.endpoint + \": \" + this.substringLog(JSON.stringify(dto)));\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Invia un messaggio all'Hub del Backend, aspettandosi una risposta\r\n * \r\n * @param {EndpointDef<TOut, TIn>} item Endpoint da contattare\r\n * @param {TOut} dto Dto da inviare all'Endpoint\r\n * \r\n * @returns {Observable<TIn>} Observable su cui ci si può registrare per ricevere il risultato della chiamata\r\n */\r\n public invoke<TOut, TIn>(item: EndpointDef<TOut, TIn>, dto: TOut): Observable<TIn> {\r\n if (!this.enabled) {\r\n this.log(this.loc(\"Invoke request ignored because SignalR is not active by configuration\"));\r\n return EMPTY;\r\n }\r\n\r\n if (this.connection.state == HubConnectionState.Connecting || this.connection.state == HubConnectionState.Reconnecting || this.connection.state == HubConnectionState.Disconnecting) {\r\n this.log(this.loc(\"Invoke request sent before a connection was in stable State, waiting 1 second and retrying\"));\r\n return of().pipe(delay(1000), concatMap(() => this.invoke(item, dto)));\r\n }\r\n else if (this.connection.state == HubConnectionState.Disconnected) {\r\n return from(this.ensureConnected()).pipe(concatMap((res) => {\r\n if (res == \"KO\") {\r\n this.log(this.loc(\"ERRORS on reconnecting before retrying a send command. Sent message WILL BE LOST\"));\r\n return EMPTY;\r\n }\r\n else return this.invoke(item, dto);\r\n }))\r\n }\r\n else {\r\n return from(this.connection.invoke<TIn>(item.endpoint, dto)).pipe(\r\n tap(() => {\r\n if (this.debug) console.log(this.loc(\"Request invoked to server\") + \" - \" + item.endpoint + \": \" + this.substringLog(JSON.stringify(dto)));\r\n })\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * Hook per osservare i dati spediti ad un Endpoint dal Backend\r\n * \r\n * @param {EndpointDef<TIn, any>} item Endpoint su cui ascoltare\r\n * \r\n * @returns {Observable<TIn>} Observable su cui ci si può registrare per ricevere l'oggetto generato ad ogni chiamata dal Backend al Frontend\r\n */\r\n public observe<TIn>(item: EndpointDef<TIn, any>): Observable<TIn> {\r\n if (!this.enabled)\r\n {\r\n this.log(this.loc(\"Observe request ignored because SignalR is not active by configuration\"));\r\n return EMPTY;\r\n }\r\n\r\n this.log(this.loc(\"Returning observable for required endpoint\") + \": \" + item.endpoint);\r\n return <Observable<TIn>>this.notifications$[item.endpoint];\r\n }\r\n\r\n /**\r\n * Disconnessione del sistema di SignalR\r\n * \r\n * @returns {Observable<void>} Observable a cui registrarsi che viene chiamato quando la disconnessione è terminata\r\n */\r\n public disconnect(): Observable<void> {\r\n //NO-OP se non attivo\r\n if (!this.enabled)\r\n {\r\n this.log(this.loc(\"Disconnection request ignored because SignalR is not active by configuration\"));\r\n return EMPTY;\r\n }\r\n\r\n return from(this.connection.stop()).pipe(\r\n catchError((err, caught) => { console.log(err); return of(null); }),\r\n tap(() => {\r\n this.log(this.loc(\"Disconnection request honored\"));\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * Taglia un log troppo lungo\r\n * \r\n * @param {string} text Log da tagliare\r\n * @param {number} maxchars Numero massimo di caratteri da tenere\r\n * \r\n * @returns {string} Log tagliato\r\n */\r\n private substringLog(text: string, maxchars: number = 120) : string {\r\n return text.length > maxchars ? text.substr(0, maxchars) + \"[...]\" : text;\r\n }\r\n\r\n /**\r\n * Stampa un log a console\r\n * \r\n * @param {string} message Messaggio da stampare\r\n */\r\n private log(message: string) {\r\n if (this.debug)\r\n console.log(\"@signalr-notifications: \" + message)\r\n }\r\n\r\n /**\r\n * Helper di localizzazione\r\n * \r\n * @param {string} message Messaggio da tradurre\r\n * \r\n * @returns {string} Messaggio tradotto\r\n */\r\n private loc(message: string) : string{\r\n return message;\r\n }\r\n}","\r\nimport { NgModule, ModuleWithProviders } from '@angular/core';\r\nimport { SignalrNotificationsModuleConfig } from './config/SignalrNotificationsModuleConfig';\r\nimport { BaseMessageService } from './models/BaseMessageService';\r\nimport { NotificationsService } from './signalr-notifications.service';\r\nimport { ENDPOINT_URL, SIGNALR_ENABLED, SGR_DEBUG_MODE, MESSAGE_PACK, AUTO_RECONNECT } from './tokens';\r\n\r\n@NgModule()\r\nexport class SignalrNotificationsModule {\r\n static forRoot(config?: SignalrNotificationsModuleConfig): ModuleWithProviders<SignalrNotificationsModule> {\r\n return {\r\n ngModule: SignalrNotificationsModule,\r\n providers: [\r\n NotificationsService,\r\n { provide: BaseMessageService, useClass: config?.messageService || BaseMessageService },\r\n { provide: ENDPOINT_URL, useValue: config?.endpointUrl },\r\n { provide: SIGNALR_ENABLED, useValue: config?.enabled != null ? config?.enabled : true },\r\n { provide: SGR_DEBUG_MODE, useValue: config?.debugMode != null ? config?.debugMode : false },\r\n { provide: MESSAGE_PACK, useValue: config?.useMessagePack != null ? config?.useMessagePack : false },\r\n { provide: AUTO_RECONNECT, useValue: config?.autoReconnect != null ? config?.autoReconnect : true },\r\n ]\r\n };\r\n }\r\n}","/**\r\n * Definisce un Endpoint che spedisce un'informazione di tipo TIn e restituisce un'informazione di tipo TOut\r\n */\r\nexport class EndpointDef<TIn, TOut> {\r\n\r\n /**\r\n * Costruttore\r\n * \r\n * @param {string} endpoint Nome del metodo da chiamare nell'Hub del Backend contattato\r\n * @param {TIn} inTypeDefault Default per il tipo TIn. Utilizzato per fare Typecheck sulle chiamate da Backend a Frontend\r\n * @param {TOut} outTypeDefault Default per il tipo TOut. Utilizzato per fare Typecheck sulle chiamate da Frontend a Backend\r\n */\r\n constructor(public endpoint: string, public inTypeDefault: TIn, public outTypeDefault: TOut) { }\r\n\r\n\r\n /** Helper per la creazione rapida di un Endpoint di solo INPUT */\r\n public static In<TIn>(name: string, inTypeDefault: TIn): EndpointDef<TIn, void> {\r\n return new EndpointDef<TIn, void>(name, inTypeDefault, undefined);\r\n }\r\n\r\n /** Helper per la creazione rapida di un Endpoint di solo OUTPUT */\r\n public static Out<TOut>(name: string, outTypeDefault: TOut): EndpointDef<void, TOut> {\r\n return new EndpointDef<void, TOut>(name, undefined, outTypeDefault);\r\n }\r\n\r\n /** Helper per la creazione rapida di un Endpoint di INPUT e OUTPUT (BIDIREZIONALE) */\r\n public static Bi<TIn, TOut>(name: string, inTypeDefault: TIn, outTypeDefault: TOut): EndpointDef<TIn, TOut> {\r\n return new EndpointDef<TIn, TOut>(name, inTypeDefault, outTypeDefault);\r\n }\r\n}","// Angular\r\nimport { Type } from '@angular/core';\r\n\r\n// Modelli\r\nimport { BaseMessageService } from '../models/BaseMessageService';\r\n\r\n/**\r\n * Classe di configurazione per la libreria\r\n */\r\nexport class SignalrNotificationsModuleConfig {\r\n\r\n /**\r\n * Url nei confronti del quale aprire la connessione SignalR\r\n */\r\n endpointUrl : string;\r\n\r\n /**\r\n * Servizio che definisce i messaggi di IN e OUT coi loro default\r\n */\r\n messageService : Type<BaseMessageService>;\r\n\r\n /**\r\n * Indica se abilitare o meno la connessione SignalR nei confronti dell'URL **hubUrl**\r\n */\r\n enabled? : boolean;\r\n\r\n /**\r\n * Indica se utilizzare message pack come protocollo di trasmissione\r\n */\r\n useMessagePack? : boolean;\r\n\r\n /**\r\n * Indica se tentare di riconnettersi automaticamente quando la connessione cade\r\n */\r\n autoReconnect? : boolean;\r\n\r\n /**\r\n * Indica se scrivere o meno i messaggi di debug\r\n */\r\n debugMode? : boolean;\r\n}","/*\n * Public API Surface of signalr-notifications\n */\n\nexport * from './lib/tokens';\nexport * from './lib/signalr-notifications.service';\nexport * from './lib/signalr-notifications.module';\nexport * from './lib/models/BaseMessageService';\nexport * from './lib/models/EndpointDef';\nexport * from './lib/config/SignalrNotificationsModuleConfig';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.BaseMessageService"],"mappings":"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"}
@@ -11,6 +11,7 @@ export declare class NotificationsService {
11
11
  private msgpack;
12
12
  private enabled;
13
13
  private debug;
14
+ private autoreconnect;
14
15
  /**
15
16
  * Cache degli Observable generati in base agli Endpoint disponibili
16
17
  */
@@ -25,6 +26,7 @@ export declare class NotificationsService {
25
26
  * @ignore
26
27
  */
27
28
  constructor(MessageDef: BaseMessageService, endpoint_url: string, msgpack: boolean, enabled: boolean, debug: boolean, autoreconnect: boolean);
29
+ private init;
28
30
  /**
29
31
  * Effettua la connessione all'Hub Signalr e registra tutti gli Endpoint per cui il Backend comunica con il Frontend sulla **connection**
30
32
  */
package/lib/tokens.d.ts CHANGED
@@ -10,11 +10,7 @@ export declare const SIGNALR_ENABLED: InjectionToken<string>;
10
10
  /**
11
11
  * Indica se stampare messaggi di debug in console
12
12
  */
13
- export declare const DEBUG_MODE: InjectionToken<string>;
14
- /**
15
- * Indica il locale utilizzato dalla libreria per i messaggi. Sono supportati "it-IT" ed "en-US"
16
- */
17
- export declare const LOCALE: InjectionToken<string>;
13
+ export declare const SGR_DEBUG_MODE: InjectionToken<string>;
18
14
  /**
19
15
  * Indica se utilizzare il protocollo di trasferimento "MessagePack"
20
16
  */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@esfaenza/signalr-notifications",
3
- "version": "15.2.3",
3
+ "version": "15.2.5",
4
4
  "dependencies": {
5
5
  "tslib": "^2.0.0"
6
6
  },
package/public-api.d.ts CHANGED
@@ -1,3 +1,4 @@
1
+ export * from './lib/tokens';
1
2
  export * from './lib/signalr-notifications.service';
2
3
  export * from './lib/signalr-notifications.module';
3
4
  export * from './lib/models/BaseMessageService';