@esfaenza/signalr-notifications 11.2.12 → 11.2.13

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.
@@ -76,6 +76,7 @@
76
76
  * Oggetto statico di localizzazione per i messaggi scritti dal servizio
77
77
  */
78
78
  var Loc = {
79
+ "Recovering request to Endpoint": { "en-US": "Recovering request to Endpoint", "it-IT": "Recupero richiesta verso l'Endpoint" },
79
80
  "Building SignalR Hub with Automatic Reconnection": { "en-US": "Building SignalR Hub with Automatic Reconnection", "it-IT": "Compilo l'Hub di SignalR con riconnessione automatica", },
80
81
  "Cannot reconnect SignalR, frontend HUB offline": { "en-US": "Cannot reconnect SignalR, frontend HUB offline", "it-IT": "Impossibile riconnettere SignalR, l'Hub del Frontend e' Offline", },
81
82
  "Send request sent before a connection was in stable State, waiting 1 second and retrying": { "en-US": "Send request sent before a connection was in stable State, waiting 1 second and retrying", "it-IT": "Richiesta 'Send' ricevuta prima che la connessione fosse in uno stato stabile, attendo 1 secondo e riprovo", },
@@ -98,15 +99,9 @@
98
99
  };
99
100
 
100
101
  // Angular
101
- /**
102
- * Servizio che gestisce la comunicazione con un Hub SignalR in base alle configurazioni fornite dall'applicazione
103
- */
102
+ /** Servizio che gestisce la comunicazione con un Hub SignalR in base alle configurazioni fornite dall'applicazione */
104
103
  var NotificationsService = /** @class */ (function () {
105
- /**
106
- * Costruttore
107
- *
108
- * @ignore
109
- */
104
+ /** @ignore Costruttore */
110
105
  function NotificationsService(MessageDef, endpoint_url, msgpack, enabled, debug, autoreconnect, locale) {
111
106
  var _this = this;
112
107
  this.MessageDef = MessageDef;
@@ -115,10 +110,10 @@
115
110
  this.enabled = enabled;
116
111
  this.debug = debug;
117
112
  this.locale = locale;
118
- /**
119
- * Cache degli Observable generati in base agli Endpoint disponibili
120
- */
113
+ /** Cache degli Observable generati in base agli Endpoint disponibili */
121
114
  this.notifications$ = {};
115
+ /** Coda di chiamate da recuperare quando la connessione viene finalmente aperta */
116
+ this.RequestsToRecover = [];
122
117
  if (!this.enabled) {
123
118
  this.log(this.loc("SignalR won't be enabled as per configuration"));
124
119
  return;
@@ -137,14 +132,22 @@
137
132
  builder = builder.withHubProtocol(new mphpModule.MessagePackHubProtocol());
138
133
  }
139
134
  this.connection = builder.build();
140
- this.connect();
135
+ this.connect(function () {
136
+ if (_this.RequestsToRecover.length == 0)
137
+ return;
138
+ for (var i = 0; i < _this.RequestsToRecover.length; i++) {
139
+ _this.log(_this.loc("Recovering request to Endpoint") + " " + _this.RequestsToRecover[i].item.endpoint);
140
+ _this.send(_this.RequestsToRecover[i].item, _this.RequestsToRecover[i].dto);
141
+ }
142
+ _this.RequestsToRecover = [];
143
+ });
141
144
  }
142
145
  /**
143
146
  * Effettua la connessione all'Hub Signalr e registra tutti gli Endpoint per cui il Backend comunica con il Frontend sulla **connection**
144
147
  */
145
- NotificationsService.prototype.connect = function () {
148
+ NotificationsService.prototype.connect = function (onConnected) {
146
149
  var _this = this;
147
- this.connection.start().catch(function (err) { return console.log(err); });
150
+ this.connection.start().catch(function (err) { return console.log(err); }).then(function (_) { return onConnected === null || onConnected === void 0 ? void 0 : onConnected(); });
148
151
  this.MessageDef.AllDefinitions.forEach(function (d) {
149
152
  //Registro solo le cose di IN, quelle di out sono chiamate che faccio io al BE quindi non servono
150
153
  if (d.inTypeDefault !== null && d.outTypeDefault === null)
@@ -187,6 +190,10 @@
187
190
  */
188
191
  NotificationsService.prototype.send = function (item, dto) {
189
192
  var _this = this;
193
+ if (!this.connection) {
194
+ this.RequestsToRecover.push({ item: item, dto: dto });
195
+ return;
196
+ }
190
197
  if (!this.enabled) {
191
198
  this.log(this.loc("Send request ignored because SignalR is not active by configuration"));
192
199
  return rxjs.EMPTY;
@@ -1 +1 @@
1
- {"version":3,"file":"esfaenza-signalr-notifications.umd.js","sources":["../../../projects/signalr-notifications/src/lib/models/BaseMessageService.ts","../../../projects/signalr-notifications/src/lib/tokens.ts","../../../projects/signalr-notifications/src/lib/signalr-notifications.service.loc.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":["// 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}","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');","/**\r\n * Oggetto statico di localizzazione per i messaggi scritti dal servizio\r\n */\r\nexport const Loc ={\r\n \"Building SignalR Hub with Automatic Reconnection\": { \"en-US\": \"Building SignalR Hub with Automatic Reconnection\", \"it-IT\": \"Compilo l'Hub di SignalR con riconnessione automatica\", },\r\n \"Cannot reconnect SignalR, frontend HUB offline\": { \"en-US\": \"Cannot reconnect SignalR, frontend HUB offline\", \"it-IT\": \"Impossibile riconnettere SignalR, l'Hub del Frontend e' Offline\", },\r\n \"Send request sent before a connection was in stable State, waiting 1 second and retrying\": { \"en-US\": \"Send request sent before a connection was in stable State, waiting 1 second and retrying\", \"it-IT\": \"Richiesta 'Send' ricevuta prima che la connessione fosse in uno stato stabile, attendo 1 secondo e riprovo\", },\r\n \"Invoke request sent before a connection was in stable State, waiting 1 second and retrying\": { \"en-US\": \"Invoke request sent before a connection was in stable State, waiting 1 second and retrying\", \"it-IT\": \"Richiesta 'Invoke' ricevuta prima che la connessione fosse in uno stato stabile, attendo 1 secondo e riprovo\", },\r\n \"Connection lost or missing, reconnecting...\" : { \"en-US\": \"Connection lost or missing, reconnecting...\", \"it-IT\": \"Connessione persa o mancante, mi riconnetto...\", },\r\n \"SignalR won't be enabled as per configuration\": { \"en-US\": \"SignalR won't be enabled as per configuration\", \"it-IT\": \"SignalR non verrà attivato come da configurazione\", },\r\n \"Building SignalR Hub with MessagePack protocol\": { \"en-US\": \"Building SignalR Hub with MessagePack protocol\", \"it-IT\": \"Compilo l'Hub di SignalR con protocollo MessagePack\", },\r\n \"Request received from the server for endpoint\": { \"en-US\": \"Request received from the server for endpoint\", \"it-IT\": \"Richiesta ricevuta dal server per endpoint\", },\r\n \"Refusing to register endpoint\": { \"en-US\": \"Refusing to register endpoint\", \"it-IT\": \"Rifiuto di registrare l'endpoint\", },\r\n \"because it is not declared as IN - ONLY\": { \"en-US\": \"because it is not declared as IN - ONLY\", \"it-IT\": \"in quanto non è registrato solo come IN\", },\r\n \"Send request ignored because SignalR is not active by configuration\": { \"en-US\": \"Send request ignored because SignalR is not active by configuration\", \"it-IT\": \"Richiesta send ignorata in quanto SignalR non è attivo da configurazione\", },\r\n \"Request sent to server\": { \"en-US\": \"Request sent to server\", \"it-IT\": \"Richiesta inviata al server\", },\r\n \"Invoke request ignored because SignalR is not active by configuration\": { \"en-US\": \"Invoke request ignored because SignalR is not active by configuration\", \"it-IT\": \"Richiesta invoke ignorata in quanto SignalR non è attivo da configurazione\", },\r\n \"Request invoked to server\": { \"en-US\": \"Request invoked to server\", \"it-IT\": \"Richiesta invoke inviata al server\", },\r\n \"Observe request ignored because SignalR is not active by configuration\": { \"en-US\": \"Observe request ignored because SignalR is not active by configuration\", \"it-IT\": \"Osservazione ignorata in quanto SignalR non è attivo da configurazione\", },\r\n \"Returning observable for required endpoint\": { \"en-US\": \"Returning observable for required endpoint\", \"it-IT\": \"Restituisco l'observable per l'endpoint richiesto\", },\r\n \"Disconnection request ignored because SignalR is not active by configuration\": { \"en-US\": \"Disconnection request ignored because SignalR is not active by configuration\", \"it-IT\": \"Richiesta di disconnesione ignorata in quanto SignalR non è attivo da configurazione\", },\r\n \"Disconnection request honored\": { \"en-US\": \"Returning observable for required endpoint\", \"it-IT\": \"Restituito observable per l'endpoint richiesto\", },\r\n \"ERRORS on reconnecting before retrying a send command. Sent message WILL BE LOST\": { \"en-US\": \"ERRORS on reconnecting before retrying a send command. Sent message WILL BE LOST\", \"it-IT\": \"ERRORE nella riconnessione precedente a un nuovo tentativo di 'Send'. Il messaggio in questione SARA' PERSO\"}\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// Localizzazione\r\nimport { Loc } from './signalr-notifications.service.loc';\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, @Inject(LOCALE) private locale : string) {\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 if(!Loc[message])\r\n {\r\n console.warn(\"Untranslated message: \" + message)\r\n return \"\";\r\n }\r\n return Loc[message][this.locale];\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, LOCALE, 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: LOCALE, useValue: config?.locale || 'it-IT' },\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?.autoReconnect != null ? config?.autoReconnect : false },\r\n { provide: AUTO_RECONNECT, useValue: config?.useMessagePack != null ? config?.useMessagePack : false },\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\r\n /**\r\n * Lingua dei feedback a console, sono supportati 'it-IT' ed 'en-US'\r\n */\r\n locale? : string\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\nexport {AUTO_RECONNECT as ɵf,DEBUG_MODE as ɵc,ENDPOINT_URL as ɵa,LOCALE as ɵd,MESSAGE_PACK as ɵe,SIGNALR_ENABLED as ɵb} from './lib/tokens';"],"names":["Injectable","InjectionToken","Subject","signalR","HubConnectionState","EMPTY","of","delay","concatMap","from","tap","catchError","Inject","NgModule"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;IAAA;IAMA;;;;QAGA;YAGY,gBAAW,GAA4B,EAAE,CAAC;SAQrD;QALG,sBAAW,8CAAc;;iBAAzB,cAAuD,OAAO,IAAI,CAAC,WAAW,CAAC,EAAE;;;WAAA;QAE1E,gCAAG,GAAH,UAAI,QAA+B;YACtC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;SACnC;;;;gBAVJA,eAAU;;;ICPX;;;QAGa,YAAY,GAA2B,IAAIC,mBAAc,CAAS,cAAc,EAAE;IAE/F;;;QAGa,eAAe,GAA2B,IAAIA,mBAAc,CAAU,iBAAiB,EAAE;IAEtG;;;QAGa,UAAU,GAA2B,IAAIA,mBAAc,CAAU,YAAY,EAAE;IAE5F;;;QAGa,MAAM,GAA2B,IAAIA,mBAAc,CAAS,QAAQ,EAAE;IAEnF;;;QAGa,YAAY,GAA4B,IAAIA,mBAAc,CAAU,cAAc,EAAE;IAEjG;;;QAGa,cAAc,GAA4B,IAAIA,mBAAc,CAAU,gBAAgB;;IC9BnG;;;IAGO,IAAM,GAAG,GAAE;QACd,kDAAkD,EAAE,EAAE,OAAO,EAAE,kDAAkD,EAAE,OAAO,EAAE,uDAAuD,GAAG;QACtL,gDAAgD,EAAE,EAAE,OAAO,EAAE,gDAAgD,EAAE,OAAO,EAAE,iEAAiE,GAAG;QAC5L,0FAA0F,EAAE,EAAE,OAAO,EAAE,0FAA0F,EAAE,OAAO,EAAE,4GAA4G,GAAG;QAC3T,4FAA4F,EAAE,EAAE,OAAO,EAAE,4FAA4F,EAAE,OAAO,EAAE,8GAA8G,GAAG;QACjU,6CAA6C,EAAG,EAAE,OAAO,EAAE,6CAA6C,EAAE,OAAO,EAAE,gDAAgD,GAAG;QACtK,+CAA+C,EAAE,EAAE,OAAO,EAAE,+CAA+C,EAAE,OAAO,EAAE,mDAAmD,GAAG;QAC5K,gDAAgD,EAAE,EAAE,OAAO,EAAE,gDAAgD,EAAE,OAAO,EAAE,qDAAqD,GAAG;QAChL,+CAA+C,EAAE,EAAE,OAAO,EAAE,+CAA+C,EAAE,OAAO,EAAE,4CAA4C,GAAG;QACrK,+BAA+B,EAAE,EAAE,OAAO,EAAE,+BAA+B,EAAE,OAAO,EAAE,kCAAkC,GAAG;QAC3H,yCAAyC,EAAE,EAAE,OAAO,EAAE,yCAAyC,EAAE,OAAO,EAAE,yCAAyC,GAAG;QACtJ,qEAAqE,EAAE,EAAE,OAAO,EAAE,qEAAqE,EAAE,OAAO,EAAE,0EAA0E,GAAG;QAC/O,wBAAwB,EAAE,EAAE,OAAO,EAAE,wBAAwB,EAAE,OAAO,EAAE,6BAA6B,GAAG;QACxG,uEAAuE,EAAE,EAAE,OAAO,EAAE,uEAAuE,EAAE,OAAO,EAAE,4EAA4E,GAAG;QACrP,2BAA2B,EAAE,EAAE,OAAO,EAAE,2BAA2B,EAAE,OAAO,EAAE,oCAAoC,GAAG;QACrH,wEAAwE,EAAE,EAAE,OAAO,EAAE,wEAAwE,EAAE,OAAO,EAAE,wEAAwE,GAAG;QACnP,4CAA4C,EAAE,EAAE,OAAO,EAAE,4CAA4C,EAAE,OAAO,EAAE,mDAAmD,GAAG;QACtK,8EAA8E,EAAE,EAAE,OAAO,EAAE,8EAA8E,EAAE,OAAO,EAAE,sFAAsF,GAAG;QAC7Q,+BAA+B,EAAE,EAAE,OAAO,EAAE,4CAA4C,EAAE,OAAO,EAAE,gDAAgD,GAAG;QACtJ,kFAAkF,EAAE,EAAE,OAAO,EAAE,kFAAkF,EAAE,OAAO,EAAE,6GAA6G,EAAC;KAC7S;;ICvBD;IAiBA;;;;;;;;;QAqBI,8BAAoB,UAA8B,EAAgC,YAAoB,EAAgC,OAAgB,EAAmC,OAAgB,EAA8B,KAAc,EAA0B,aAAsB,EAA0B,MAAe;YAA9U,iBAyBC;YAzBmB,eAAU,GAAV,UAAU,CAAoB;YAAgC,iBAAY,GAAZ,YAAY,CAAQ;YAAgC,YAAO,GAAP,OAAO,CAAS;YAAmC,YAAO,GAAP,OAAO,CAAS;YAA8B,UAAK,GAAL,KAAK,CAAS;YAA0E,WAAM,GAAN,MAAM,CAAS;;;;YAZtU,mBAAc,GAAsC,EAAE,CAAC;YAa3D,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;gBACf,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,+CAA+C,CAAC,CAAC,CAAC;gBACpE,OAAO;aACV;YAED,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,OAAO,CAAC,UAAA,GAAG,IAAM,KAAI,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,IAAIC,YAAO,EAA4B,CAAC,EAAE,CAAC,CAAC;YAEhI,IAAI,IAAI,GAAmC,EAAE,eAAe,EAAE,IAAI,EAAE,SAAS,EAAEC,kBAAO,CAAC,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,GAAGA,kBAAO,CAAC,QAAQ,CAAC,KAAK,GAAGA,kBAAO,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;YACtL,IAAI,OAAO,GAAG,IAAIA,kBAAO,CAAC,oBAAoB,EAAE,CAAC,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;YAExF,IAAI,aAAa,EAAE;gBACf,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,kDAAkD,CAAC,CAAC,CAAC;;gBAEvE,OAAO,GAAG,OAAO,CAAC,sBAAsB,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;aAC3E;YAED,IAAI,IAAI,CAAC,OAAO,EAAE;gBACd,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,gDAAgD,CAAC,CAAC,CAAC;gBACrE,IAAI,UAAU,GAAG,OAAO,CAAC,qCAAqC,CAAC,CAAC;gBAChE,OAAO,GAAG,OAAO,CAAC,eAAe,CAAC,IAAI,UAAU,CAAC,sBAAsB,EAAE,CAAC,CAAA;aAC7E;YAED,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;YAClC,IAAI,CAAC,OAAO,EAAE,CAAC;SAClB;;;;QAKO,sCAAO,GAAP;YAAA,iBAYP;YAXG,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,UAAA,GAAG,IAAI,OAAA,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAA,CAAC,CAAC;YACvD,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,OAAO,CAAC,UAAA,CAAC;;gBAEpC,IAAI,CAAC,CAAC,aAAa,KAAK,IAAI,IAAI,CAAC,CAAC,cAAc,KAAK,IAAI;oBACrD,KAAI,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,UAAC,OAAO;wBACnC,KAAI,CAAC,GAAG,CAAC,KAAI,CAAC,GAAG,CAAC,+CAA+C,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,QAAQ,GAAG,KAAK,GAAG,KAAI,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;wBAC7I,KAAI,CAAC,cAAc,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;qBACjD,CAAC,CAAC;;oBAEH,KAAI,CAAC,GAAG,CAAC,KAAI,CAAC,GAAG,CAAC,+BAA+B,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,QAAQ,GAAG,GAAG,GAAG,KAAI,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAC,CAAC;aAC1I,CAAC,CAAC;SACN;;;;;;;QAQM,8CAAe,GAAf;YAAA,iBAgBN;YAfG,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,IAAIC,0BAAkB,CAAC,YAAY,EAAE;gBAC1D,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,6CAA6C,CAAC,CAAC,CAAC;gBAElE,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE;qBACzB,IAAI,CAAC,UAAA,CAAC;oBACH,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;iBAChC,EAAE,UAAA,CAAC;oBACA,KAAI,CAAC,GAAG,CAAC,KAAI,CAAC,GAAG,CAAC,gDAAgD,CAAC,CAAC,CAAC;oBACrE,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;iBAChC,CAAC,CAAC;aACV;iBACI,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,IAAIA,0BAAkB,CAAC,SAAS;gBAC1D,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;;gBAE7B,OAAO,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;SACvC;;;;;;;QAQM,mCAAI,GAAJ,UAAW,IAA4B,EAAE,GAAS;YAAlD,iBAsBN;YArBG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;gBACf,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,qEAAqE,CAAC,CAAC,CAAC;gBAC1F,OAAOC,UAAK,CAAC;aAChB;YAED,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,IAAID,0BAAkB,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,IAAIA,0BAAkB,CAAC,YAAY,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,IAAIA,0BAAkB,CAAC,aAAa,EAAE;gBACjL,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,0FAA0F,CAAC,CAAC,CAAC;gBAC/G,UAAU,CAAC,cAAQ,KAAI,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;aACrD;iBACI,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,IAAIA,0BAAkB,CAAC,YAAY,EAAE;gBAC/D,IAAI,CAAC,eAAe,EAAE,CAAC,IAAI,CAAC,UAAA,CAAC;oBACzB,IAAI,CAAC,IAAI,IAAI;wBAAE,KAAI,CAAC,GAAG,CAAC,KAAI,CAAC,GAAG,CAAC,kFAAkF,CAAC,CAAC,CAAC;;wBACjH,KAAI,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;iBAC7B,CAAC,CAAA;aACL;iBACI;gBACD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,UAAA,CAAC;oBAC3C,IAAI,KAAI,CAAC,KAAK;wBACV,OAAO,CAAC,IAAI,CAAC,KAAI,CAAC,GAAG,CAAC,wBAAwB,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,QAAQ,GAAG,IAAI,GAAG,KAAI,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;iBAChI,CAAC,CAAC;aACN;SACJ;;;;;;;;;QAUM,qCAAM,GAAN,UAAkB,IAA4B,EAAE,GAAS;YAAzD,iBA0BN;YAzBG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;gBACf,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,uEAAuE,CAAC,CAAC,CAAC;gBAC5F,OAAOC,UAAK,CAAC;aAChB;YAED,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,IAAID,0BAAkB,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,IAAIA,0BAAkB,CAAC,YAAY,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,IAAIA,0BAAkB,CAAC,aAAa,EAAE;gBACjL,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,4FAA4F,CAAC,CAAC,CAAC;gBACjH,OAAOE,OAAE,EAAE,CAAC,IAAI,CAACC,eAAK,CAAC,IAAI,CAAC,EAAEC,mBAAS,CAAC,cAAM,OAAA,KAAI,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,GAAA,CAAC,CAAC,CAAC;aAC1E;iBACI,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,IAAIJ,0BAAkB,CAAC,YAAY,EAAE;gBAC/D,OAAOK,SAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC,IAAI,CAACD,mBAAS,CAAC,UAAC,GAAG;oBACnD,IAAI,GAAG,IAAI,IAAI,EAAE;wBACb,KAAI,CAAC,GAAG,CAAC,KAAI,CAAC,GAAG,CAAC,kFAAkF,CAAC,CAAC,CAAC;wBACvG,OAAOH,UAAK,CAAC;qBAChB;;wBACI,OAAO,KAAI,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;iBACtC,CAAC,CAAC,CAAA;aACN;iBACI;gBACD,OAAOI,SAAI,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAM,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAC7DC,aAAG,CAAC;oBACA,IAAI,KAAI,CAAC,KAAK;wBAAE,OAAO,CAAC,GAAG,CAAC,KAAI,CAAC,GAAG,CAAC,2BAA2B,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,QAAQ,GAAG,IAAI,GAAG,KAAI,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;iBAC9I,CAAC,CACL,CAAC;aACL;SACJ;;;;;;;;QASM,sCAAO,GAAP,UAAa,IAA2B;YAC3C,IAAI,CAAC,IAAI,CAAC,OAAO,EACjB;gBACI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,wEAAwE,CAAC,CAAC,CAAC;gBAC7F,OAAOL,UAAK,CAAC;aAChB;YAED,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,4CAA4C,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;YACxF,OAAwB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;SAC9D;;;;;;QAOM,yCAAU,GAAV;YAAA,iBAcN;;YAZG,IAAI,CAAC,IAAI,CAAC,OAAO,EACjB;gBACI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,8EAA8E,CAAC,CAAC,CAAC;gBACnG,OAAOA,UAAK,CAAC;aAChB;YAED,OAAOI,SAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CACpCE,oBAAU,CAAC,UAAC,GAAG,EAAE,MAAM,IAAO,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,OAAOL,OAAE,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EACnEI,aAAG,CAAC;gBACA,KAAI,CAAC,GAAG,CAAC,KAAI,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC,CAAC;aACvD,CAAC,CACL,CAAC;SACL;;;;;;;;;QAUO,2CAAY,GAAZ,UAAa,IAAY,EAAE,QAAsB;YAAtB,yBAAA,EAAA,cAAsB;YACrD,OAAO,IAAI,CAAC,MAAM,GAAG,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,QAAQ,CAAC,GAAG,OAAO,GAAI,IAAI,CAAC;SAC9E;;;;;;QAOO,kCAAG,GAAH,UAAI,OAAe;YACvB,IAAI,IAAI,CAAC,KAAK;gBACV,OAAO,CAAC,GAAG,CAAC,0BAA0B,GAAG,OAAO,CAAC,CAAA;SACxD;;;;;;;;QASO,kCAAG,GAAH,UAAI,OAAe;YACvB,IAAG,CAAC,GAAG,CAAC,OAAO,CAAC,EAChB;gBACI,OAAO,CAAC,IAAI,CAAC,wBAAwB,GAAG,OAAO,CAAC,CAAA;gBAChD,OAAO,EAAE,CAAC;aACb;YACD,OAAO,GAAG,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;SACpC;;;;gBAnOJV,eAAU;;;gBAVF,kBAAkB;6CA4B8BY,WAAM,SAAC,YAAY;8CAAiCA,WAAM,SAAC,YAAY;8CAA6BA,WAAM,SAAC,eAAe;8CAA6BA,WAAM,SAAC,UAAU;8CAA2BA,WAAM,SAAC,cAAc;6CAA2BA,WAAM,SAAC,MAAM;;;;QC9BzT;;QACS,kCAAO,GAAd,UAAe,MAAyC;YACtD,OAAO;gBACL,QAAQ,EAAE,0BAA0B;gBACpC,SAAS,EAAE;oBACT,oBAAoB;oBACpB,EAAE,OAAO,EAAE,kBAAkB,EAAE,QAAQ,EAAE,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,cAAc,KAAI,kBAAkB,EAAE;oBACvF,EAAE,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,WAAW,EAAE;oBACxD,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,MAAM,KAAI,OAAO,EAAE;oBACxD,EAAE,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,OAAO,KAAI,IAAI,GAAG,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,OAAO,GAAG,IAAI,EAAE;oBACxF,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,SAAS,KAAI,IAAI,GAAG,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,SAAS,GAAG,KAAK,EAAE;oBACxF,EAAE,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,aAAa,KAAI,IAAI,GAAG,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,aAAa,GAAG,KAAK,EAAE;oBAClG,EAAE,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,cAAc,KAAI,IAAI,GAAG,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,cAAc,GAAG,KAAK,EAAE;iBACvG;aACF,CAAC;SACH;;;;gBAhBFC,aAAQ;;;ICPT;;;;;;;;;;;QAYI,qBAAmB,QAAgB,EAAS,aAAkB,EAAS,cAAoB;YAAxE,aAAQ,GAAR,QAAQ,CAAQ;YAAS,kBAAa,GAAb,aAAa,CAAK;YAAS,mBAAc,GAAd,cAAc,CAAM;SAAK;;QAIlF,cAAE,GAAT,UAAe,IAAY,EAAE,aAAkB;YAClD,OAAO,IAAI,WAAW,CAAY,IAAI,EAAE,aAAa,EAAE,SAAS,CAAC,CAAC;SACrE;;QAGa,eAAG,GAAV,UAAiB,IAAY,EAAE,cAAoB;YACtD,OAAO,IAAI,WAAW,CAAa,IAAI,EAAE,SAAS,EAAE,cAAc,CAAC,CAAC;SACvE;;QAGa,cAAE,GAAT,UAAqB,IAAY,EAAE,aAAkB,EAAE,cAAoB;YAC9E,OAAO,IAAI,WAAW,CAAY,IAAI,EAAE,aAAa,EAAE,cAAc,CAAC,CAAC;SAC1E;0BACJ;KAAA;;ICvBD;;;;QAGA;SAoCC;+CAAA;KAAA;;IC7CD;;;;ICAA;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"esfaenza-signalr-notifications.umd.js","sources":["../../../projects/signalr-notifications/src/lib/models/BaseMessageService.ts","../../../projects/signalr-notifications/src/lib/tokens.ts","../../../projects/signalr-notifications/src/lib/signalr-notifications.service.loc.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":["// 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}","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');","/**\r\n * Oggetto statico di localizzazione per i messaggi scritti dal servizio\r\n */\r\nexport const Loc ={\r\n \"Recovering request to Endpoint\": {\"en-US\": \"Recovering request to Endpoint\", \"it-IT\": \"Recupero richiesta verso l'Endpoint\"},\r\n \"Building SignalR Hub with Automatic Reconnection\": { \"en-US\": \"Building SignalR Hub with Automatic Reconnection\", \"it-IT\": \"Compilo l'Hub di SignalR con riconnessione automatica\", },\r\n \"Cannot reconnect SignalR, frontend HUB offline\": { \"en-US\": \"Cannot reconnect SignalR, frontend HUB offline\", \"it-IT\": \"Impossibile riconnettere SignalR, l'Hub del Frontend e' Offline\", },\r\n \"Send request sent before a connection was in stable State, waiting 1 second and retrying\": { \"en-US\": \"Send request sent before a connection was in stable State, waiting 1 second and retrying\", \"it-IT\": \"Richiesta 'Send' ricevuta prima che la connessione fosse in uno stato stabile, attendo 1 secondo e riprovo\", },\r\n \"Invoke request sent before a connection was in stable State, waiting 1 second and retrying\": { \"en-US\": \"Invoke request sent before a connection was in stable State, waiting 1 second and retrying\", \"it-IT\": \"Richiesta 'Invoke' ricevuta prima che la connessione fosse in uno stato stabile, attendo 1 secondo e riprovo\", },\r\n \"Connection lost or missing, reconnecting...\" : { \"en-US\": \"Connection lost or missing, reconnecting...\", \"it-IT\": \"Connessione persa o mancante, mi riconnetto...\", },\r\n \"SignalR won't be enabled as per configuration\": { \"en-US\": \"SignalR won't be enabled as per configuration\", \"it-IT\": \"SignalR non verrà attivato come da configurazione\", },\r\n \"Building SignalR Hub with MessagePack protocol\": { \"en-US\": \"Building SignalR Hub with MessagePack protocol\", \"it-IT\": \"Compilo l'Hub di SignalR con protocollo MessagePack\", },\r\n \"Request received from the server for endpoint\": { \"en-US\": \"Request received from the server for endpoint\", \"it-IT\": \"Richiesta ricevuta dal server per endpoint\", },\r\n \"Refusing to register endpoint\": { \"en-US\": \"Refusing to register endpoint\", \"it-IT\": \"Rifiuto di registrare l'endpoint\", },\r\n \"because it is not declared as IN - ONLY\": { \"en-US\": \"because it is not declared as IN - ONLY\", \"it-IT\": \"in quanto non è registrato solo come IN\", },\r\n \"Send request ignored because SignalR is not active by configuration\": { \"en-US\": \"Send request ignored because SignalR is not active by configuration\", \"it-IT\": \"Richiesta send ignorata in quanto SignalR non è attivo da configurazione\", },\r\n \"Request sent to server\": { \"en-US\": \"Request sent to server\", \"it-IT\": \"Richiesta inviata al server\", },\r\n \"Invoke request ignored because SignalR is not active by configuration\": { \"en-US\": \"Invoke request ignored because SignalR is not active by configuration\", \"it-IT\": \"Richiesta invoke ignorata in quanto SignalR non è attivo da configurazione\", },\r\n \"Request invoked to server\": { \"en-US\": \"Request invoked to server\", \"it-IT\": \"Richiesta invoke inviata al server\", },\r\n \"Observe request ignored because SignalR is not active by configuration\": { \"en-US\": \"Observe request ignored because SignalR is not active by configuration\", \"it-IT\": \"Osservazione ignorata in quanto SignalR non è attivo da configurazione\", },\r\n \"Returning observable for required endpoint\": { \"en-US\": \"Returning observable for required endpoint\", \"it-IT\": \"Restituisco l'observable per l'endpoint richiesto\", },\r\n \"Disconnection request ignored because SignalR is not active by configuration\": { \"en-US\": \"Disconnection request ignored because SignalR is not active by configuration\", \"it-IT\": \"Richiesta di disconnesione ignorata in quanto SignalR non è attivo da configurazione\", },\r\n \"Disconnection request honored\": { \"en-US\": \"Returning observable for required endpoint\", \"it-IT\": \"Restituito observable per l'endpoint richiesto\", },\r\n \"ERRORS on reconnecting before retrying a send command. Sent message WILL BE LOST\": { \"en-US\": \"ERRORS on reconnecting before retrying a send command. Sent message WILL BE LOST\", \"it-IT\": \"ERRORE nella riconnessione precedente a un nuovo tentativo di 'Send'. Il messaggio in questione SARA' PERSO\"}\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// Localizzazione\r\nimport { Loc } from './signalr-notifications.service.loc';\r\n\r\n/** Servizio che gestisce la comunicazione con un Hub SignalR in base alle configurazioni fornite dall'applicazione */\r\n@Injectable()\r\nexport class NotificationsService {\r\n\r\n /** Cache degli Observable generati in base agli Endpoint disponibili */\r\n private notifications$: { [index: string]: Subject<any> } = {};\r\n\r\n /** Connessione Signalr */\r\n private connection: signalR.HubConnection;\r\n\r\n /** Coda di chiamate da recuperare quando la connessione viene finalmente aperta */\r\n private RequestsToRecover: { item: EndpointDef<any, any>, dto: any }[] = [];\r\n\r\n /** @ignore Costruttore */\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, @Inject(LOCALE) private locale: string) {\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 if (this.RequestsToRecover.length == 0)\r\n return;\r\n\r\n for (let i = 0; i < this.RequestsToRecover.length; i++) {\r\n this.log(this.loc(\"Recovering request to Endpoint\") + \" \" + this.RequestsToRecover[i].item.endpoint)\r\n this.send(this.RequestsToRecover[i].item, this.RequestsToRecover[i].dto);\r\n }\r\n\r\n this.RequestsToRecover = [];\r\n });\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(onConnected?: () => void) {\r\n this.connection.start().catch(err => console.log(err)).then(_ => onConnected?.());\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 /**\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.connection) {\r\n this.RequestsToRecover.push({ item, dto });\r\n return;\r\n }\r\n\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 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 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 if (!Loc[message]) {\r\n console.warn(\"Untranslated message: \" + message)\r\n return \"\";\r\n }\r\n return Loc[message][this.locale];\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, LOCALE, 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: LOCALE, useValue: config?.locale || 'it-IT' },\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?.autoReconnect != null ? config?.autoReconnect : false },\r\n { provide: AUTO_RECONNECT, useValue: config?.useMessagePack != null ? config?.useMessagePack : false },\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\r\n /**\r\n * Lingua dei feedback a console, sono supportati 'it-IT' ed 'en-US'\r\n */\r\n locale? : string\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\nexport {AUTO_RECONNECT as ɵf,DEBUG_MODE as ɵc,ENDPOINT_URL as ɵa,LOCALE as ɵd,MESSAGE_PACK as ɵe,SIGNALR_ENABLED as ɵb} from './lib/tokens';"],"names":["Injectable","InjectionToken","Subject","signalR","HubConnectionState","EMPTY","of","delay","concatMap","from","tap","catchError","Inject","NgModule"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;IAAA;IAMA;;;;QAGA;YAGY,gBAAW,GAA4B,EAAE,CAAC;SAQrD;QALG,sBAAW,8CAAc;;iBAAzB,cAAuD,OAAO,IAAI,CAAC,WAAW,CAAC,EAAE;;;WAAA;QAE1E,gCAAG,GAAH,UAAI,QAA+B;YACtC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;SACnC;;;;gBAVJA,eAAU;;;ICPX;;;QAGa,YAAY,GAA2B,IAAIC,mBAAc,CAAS,cAAc,EAAE;IAE/F;;;QAGa,eAAe,GAA2B,IAAIA,mBAAc,CAAU,iBAAiB,EAAE;IAEtG;;;QAGa,UAAU,GAA2B,IAAIA,mBAAc,CAAU,YAAY,EAAE;IAE5F;;;QAGa,MAAM,GAA2B,IAAIA,mBAAc,CAAS,QAAQ,EAAE;IAEnF;;;QAGa,YAAY,GAA4B,IAAIA,mBAAc,CAAU,cAAc,EAAE;IAEjG;;;QAGa,cAAc,GAA4B,IAAIA,mBAAc,CAAU,gBAAgB;;IC9BnG;;;IAGO,IAAM,GAAG,GAAE;QACd,gCAAgC,EAAE,EAAC,OAAO,EAAE,gCAAgC,EAAE,OAAO,EAAE,qCAAqC,EAAC;QAC7H,kDAAkD,EAAE,EAAE,OAAO,EAAE,kDAAkD,EAAE,OAAO,EAAE,uDAAuD,GAAG;QACtL,gDAAgD,EAAE,EAAE,OAAO,EAAE,gDAAgD,EAAE,OAAO,EAAE,iEAAiE,GAAG;QAC5L,0FAA0F,EAAE,EAAE,OAAO,EAAE,0FAA0F,EAAE,OAAO,EAAE,4GAA4G,GAAG;QAC3T,4FAA4F,EAAE,EAAE,OAAO,EAAE,4FAA4F,EAAE,OAAO,EAAE,8GAA8G,GAAG;QACjU,6CAA6C,EAAG,EAAE,OAAO,EAAE,6CAA6C,EAAE,OAAO,EAAE,gDAAgD,GAAG;QACtK,+CAA+C,EAAE,EAAE,OAAO,EAAE,+CAA+C,EAAE,OAAO,EAAE,mDAAmD,GAAG;QAC5K,gDAAgD,EAAE,EAAE,OAAO,EAAE,gDAAgD,EAAE,OAAO,EAAE,qDAAqD,GAAG;QAChL,+CAA+C,EAAE,EAAE,OAAO,EAAE,+CAA+C,EAAE,OAAO,EAAE,4CAA4C,GAAG;QACrK,+BAA+B,EAAE,EAAE,OAAO,EAAE,+BAA+B,EAAE,OAAO,EAAE,kCAAkC,GAAG;QAC3H,yCAAyC,EAAE,EAAE,OAAO,EAAE,yCAAyC,EAAE,OAAO,EAAE,yCAAyC,GAAG;QACtJ,qEAAqE,EAAE,EAAE,OAAO,EAAE,qEAAqE,EAAE,OAAO,EAAE,0EAA0E,GAAG;QAC/O,wBAAwB,EAAE,EAAE,OAAO,EAAE,wBAAwB,EAAE,OAAO,EAAE,6BAA6B,GAAG;QACxG,uEAAuE,EAAE,EAAE,OAAO,EAAE,uEAAuE,EAAE,OAAO,EAAE,4EAA4E,GAAG;QACrP,2BAA2B,EAAE,EAAE,OAAO,EAAE,2BAA2B,EAAE,OAAO,EAAE,oCAAoC,GAAG;QACrH,wEAAwE,EAAE,EAAE,OAAO,EAAE,wEAAwE,EAAE,OAAO,EAAE,wEAAwE,GAAG;QACnP,4CAA4C,EAAE,EAAE,OAAO,EAAE,4CAA4C,EAAE,OAAO,EAAE,mDAAmD,GAAG;QACtK,8EAA8E,EAAE,EAAE,OAAO,EAAE,8EAA8E,EAAE,OAAO,EAAE,sFAAsF,GAAG;QAC7Q,+BAA+B,EAAE,EAAE,OAAO,EAAE,4CAA4C,EAAE,OAAO,EAAE,gDAAgD,GAAG;QACtJ,kFAAkF,EAAE,EAAE,OAAO,EAAE,kFAAkF,EAAE,OAAO,EAAE,6GAA6G,EAAC;KAC7S;;ICxBD;IAiBA;;;QAcI,8BAAoB,UAA8B,EAAgC,YAAoB,EAAgC,OAAgB,EAAmC,OAAgB,EAA8B,KAAc,EAA0B,aAAsB,EAA0B,MAAc;YAA7U,iBAmCC;YAnCmB,eAAU,GAAV,UAAU,CAAoB;YAAgC,iBAAY,GAAZ,YAAY,CAAQ;YAAgC,YAAO,GAAP,OAAO,CAAS;YAAmC,YAAO,GAAP,OAAO,CAAS;YAA8B,UAAK,GAAL,KAAK,CAAS;YAA0E,WAAM,GAAN,MAAM,CAAQ;;YATrU,mBAAc,GAAsC,EAAE,CAAC;;YAMvD,sBAAiB,GAAgD,EAAE,CAAC;YAIxE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;gBACf,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,+CAA+C,CAAC,CAAC,CAAC;gBACpE,OAAO;aACV;YAED,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,OAAO,CAAC,UAAA,GAAG,IAAM,KAAI,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,IAAIC,YAAO,EAA4B,CAAC,EAAE,CAAC,CAAC;YAEhI,IAAI,IAAI,GAAmC,EAAE,eAAe,EAAE,IAAI,EAAE,SAAS,EAAEC,kBAAO,CAAC,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,GAAGA,kBAAO,CAAC,QAAQ,CAAC,KAAK,GAAGA,kBAAO,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;YACtL,IAAI,OAAO,GAAG,IAAIA,kBAAO,CAAC,oBAAoB,EAAE,CAAC,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;YAExF,IAAI,aAAa,EAAE;gBACf,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,kDAAkD,CAAC,CAAC,CAAC;;gBAEvE,OAAO,GAAG,OAAO,CAAC,sBAAsB,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;aAC3E;YAED,IAAI,IAAI,CAAC,OAAO,EAAE;gBACd,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,gDAAgD,CAAC,CAAC,CAAC;gBACrE,IAAI,UAAU,GAAG,OAAO,CAAC,qCAAqC,CAAC,CAAC;gBAChE,OAAO,GAAG,OAAO,CAAC,eAAe,CAAC,IAAI,UAAU,CAAC,sBAAsB,EAAE,CAAC,CAAA;aAC7E;YAED,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;YAClC,IAAI,CAAC,OAAO,CAAC;gBACT,IAAI,KAAI,CAAC,iBAAiB,CAAC,MAAM,IAAI,CAAC;oBAClC,OAAO;gBAEX,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;oBACpD,KAAI,CAAC,GAAG,CAAC,KAAI,CAAC,GAAG,CAAC,gCAAgC,CAAC,GAAG,GAAG,GAAG,KAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;oBACpG,KAAI,CAAC,IAAI,CAAC,KAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,KAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;iBAC5E;gBAED,KAAI,CAAC,iBAAiB,GAAG,EAAE,CAAC;aAC/B,CAAC,CAAC;SACN;;;;QAKO,sCAAO,GAAP,UAAQ,WAAwB;YAAhC,iBAYP;YAXG,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,UAAA,GAAG,IAAI,OAAA,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAA,CAAC,CAAC,IAAI,CAAC,UAAA,CAAC,IAAI,OAAA,WAAW,aAAX,WAAW,uBAAX,WAAW,EAAI,GAAA,CAAC,CAAC;YAClF,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,OAAO,CAAC,UAAA,CAAC;;gBAEpC,IAAI,CAAC,CAAC,aAAa,KAAK,IAAI,IAAI,CAAC,CAAC,cAAc,KAAK,IAAI;oBACrD,KAAI,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,UAAC,OAAO;wBACnC,KAAI,CAAC,GAAG,CAAC,KAAI,CAAC,GAAG,CAAC,+CAA+C,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,QAAQ,GAAG,KAAK,GAAG,KAAI,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;wBAC7I,KAAI,CAAC,cAAc,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;qBACjD,CAAC,CAAC;;oBAEH,KAAI,CAAC,GAAG,CAAC,KAAI,CAAC,GAAG,CAAC,+BAA+B,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,QAAQ,GAAG,GAAG,GAAG,KAAI,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAC,CAAC;aAC1I,CAAC,CAAC;SACN;;;;;;;QAQM,8CAAe,GAAf;YAAA,iBAgBN;YAfG,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,IAAIC,0BAAkB,CAAC,YAAY,EAAE;gBAC1D,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,6CAA6C,CAAC,CAAC,CAAC;gBAElE,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE;qBACzB,IAAI,CAAC,UAAA,CAAC;oBACH,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;iBAChC,EAAE,UAAA,CAAC;oBACA,KAAI,CAAC,GAAG,CAAC,KAAI,CAAC,GAAG,CAAC,gDAAgD,CAAC,CAAC,CAAC;oBACrE,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;iBAChC,CAAC,CAAC;aACV;iBACI,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,IAAIA,0BAAkB,CAAC,SAAS;gBAC1D,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;;gBAE7B,OAAO,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;SACvC;;;;;;;QASM,mCAAI,GAAJ,UAAW,IAA4B,EAAE,GAAS;YAAlD,iBA2BN;YA1BG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;gBAClB,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,IAAI,MAAA,EAAE,GAAG,KAAA,EAAE,CAAC,CAAC;gBAC3C,OAAO;aACV;YAED,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;gBACf,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,qEAAqE,CAAC,CAAC,CAAC;gBAC1F,OAAOC,UAAK,CAAC;aAChB;YAED,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,IAAID,0BAAkB,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,IAAIA,0BAAkB,CAAC,YAAY,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,IAAIA,0BAAkB,CAAC,aAAa,EAAE;gBACjL,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,0FAA0F,CAAC,CAAC,CAAC;gBAC/G,UAAU,CAAC,cAAQ,KAAI,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;aACrD;iBACI,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,IAAIA,0BAAkB,CAAC,YAAY,EAAE;gBAC/D,IAAI,CAAC,eAAe,EAAE,CAAC,IAAI,CAAC,UAAA,CAAC;oBACzB,IAAI,CAAC,IAAI,IAAI;wBAAE,KAAI,CAAC,GAAG,CAAC,KAAI,CAAC,GAAG,CAAC,kFAAkF,CAAC,CAAC,CAAC;;wBACjH,KAAI,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;iBAC7B,CAAC,CAAA;aACL;iBACI;gBACD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,UAAA,CAAC;oBAC3C,IAAI,KAAI,CAAC,KAAK;wBACV,OAAO,CAAC,IAAI,CAAC,KAAI,CAAC,GAAG,CAAC,wBAAwB,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,QAAQ,GAAG,IAAI,GAAG,KAAI,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;iBAChI,CAAC,CAAC;aACN;SACJ;;;;;;;;;QAUM,qCAAM,GAAN,UAAkB,IAA4B,EAAE,GAAS;YAAzD,iBA0BN;YAzBG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;gBACf,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,uEAAuE,CAAC,CAAC,CAAC;gBAC5F,OAAOC,UAAK,CAAC;aAChB;YAED,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,IAAID,0BAAkB,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,IAAIA,0BAAkB,CAAC,YAAY,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,IAAIA,0BAAkB,CAAC,aAAa,EAAE;gBACjL,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,4FAA4F,CAAC,CAAC,CAAC;gBACjH,OAAOE,OAAE,EAAE,CAAC,IAAI,CAACC,eAAK,CAAC,IAAI,CAAC,EAAEC,mBAAS,CAAC,cAAM,OAAA,KAAI,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,GAAA,CAAC,CAAC,CAAC;aAC1E;iBACI,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,IAAIJ,0BAAkB,CAAC,YAAY,EAAE;gBAC/D,OAAOK,SAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC,IAAI,CAACD,mBAAS,CAAC,UAAC,GAAG;oBACnD,IAAI,GAAG,IAAI,IAAI,EAAE;wBACb,KAAI,CAAC,GAAG,CAAC,KAAI,CAAC,GAAG,CAAC,kFAAkF,CAAC,CAAC,CAAC;wBACvG,OAAOH,UAAK,CAAC;qBAChB;;wBACI,OAAO,KAAI,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;iBACtC,CAAC,CAAC,CAAA;aACN;iBACI;gBACD,OAAOI,SAAI,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAM,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAC7DC,aAAG,CAAC;oBACA,IAAI,KAAI,CAAC,KAAK;wBAAE,OAAO,CAAC,GAAG,CAAC,KAAI,CAAC,GAAG,CAAC,2BAA2B,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,QAAQ,GAAG,IAAI,GAAG,KAAI,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;iBAC9I,CAAC,CACL,CAAC;aACL;SACJ;;;;;;;;QASM,sCAAO,GAAP,UAAa,IAA2B;YAC3C,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;gBACf,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,wEAAwE,CAAC,CAAC,CAAC;gBAC7F,OAAOL,UAAK,CAAC;aAChB;YAED,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,4CAA4C,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;YACxF,OAAwB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;SAC9D;;;;;;QAOM,yCAAU,GAAV;YAAA,iBAaN;;YAXG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;gBACf,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,8EAA8E,CAAC,CAAC,CAAC;gBACnG,OAAOA,UAAK,CAAC;aAChB;YAED,OAAOI,SAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CACpCE,oBAAU,CAAC,UAAC,GAAG,EAAE,MAAM,IAAO,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,OAAOL,OAAE,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EACnEI,aAAG,CAAC;gBACA,KAAI,CAAC,GAAG,CAAC,KAAI,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC,CAAC;aACvD,CAAC,CACL,CAAC;SACL;;;;;;;;;QAUO,2CAAY,GAAZ,UAAa,IAAY,EAAE,QAAsB;YAAtB,yBAAA,EAAA,cAAsB;YACrD,OAAO,IAAI,CAAC,MAAM,GAAG,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,QAAQ,CAAC,GAAG,OAAO,GAAG,IAAI,CAAC;SAC7E;;;;;;QAOO,kCAAG,GAAH,UAAI,OAAe;YACvB,IAAI,IAAI,CAAC,KAAK;gBACV,OAAO,CAAC,GAAG,CAAC,0BAA0B,GAAG,OAAO,CAAC,CAAA;SACxD;;;;;;;;QASO,kCAAG,GAAH,UAAI,OAAe;YACvB,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE;gBACf,OAAO,CAAC,IAAI,CAAC,wBAAwB,GAAG,OAAO,CAAC,CAAA;gBAChD,OAAO,EAAE,CAAC;aACb;YACD,OAAO,GAAG,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;SACpC;;;;gBA3OJV,eAAU;;;gBARF,kBAAkB;6CAqB8BY,WAAM,SAAC,YAAY;8CAAiCA,WAAM,SAAC,YAAY;8CAA6BA,WAAM,SAAC,eAAe;8CAA6BA,WAAM,SAAC,UAAU;8CAA2BA,WAAM,SAAC,cAAc;6CAA2BA,WAAM,SAAC,MAAM;;;;QCvBzT;;QACS,kCAAO,GAAd,UAAe,MAAyC;YACtD,OAAO;gBACL,QAAQ,EAAE,0BAA0B;gBACpC,SAAS,EAAE;oBACT,oBAAoB;oBACpB,EAAE,OAAO,EAAE,kBAAkB,EAAE,QAAQ,EAAE,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,cAAc,KAAI,kBAAkB,EAAE;oBACvF,EAAE,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,WAAW,EAAE;oBACxD,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,MAAM,KAAI,OAAO,EAAE;oBACxD,EAAE,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,OAAO,KAAI,IAAI,GAAG,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,OAAO,GAAG,IAAI,EAAE;oBACxF,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,SAAS,KAAI,IAAI,GAAG,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,SAAS,GAAG,KAAK,EAAE;oBACxF,EAAE,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,aAAa,KAAI,IAAI,GAAG,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,aAAa,GAAG,KAAK,EAAE;oBAClG,EAAE,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,cAAc,KAAI,IAAI,GAAG,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,cAAc,GAAG,KAAK,EAAE;iBACvG;aACF,CAAC;SACH;;;;gBAhBFC,aAAQ;;;ICPT;;;;;;;;;;;QAYI,qBAAmB,QAAgB,EAAS,aAAkB,EAAS,cAAoB;YAAxE,aAAQ,GAAR,QAAQ,CAAQ;YAAS,kBAAa,GAAb,aAAa,CAAK;YAAS,mBAAc,GAAd,cAAc,CAAM;SAAK;;QAIlF,cAAE,GAAT,UAAe,IAAY,EAAE,aAAkB;YAClD,OAAO,IAAI,WAAW,CAAY,IAAI,EAAE,aAAa,EAAE,SAAS,CAAC,CAAC;SACrE;;QAGa,eAAG,GAAV,UAAiB,IAAY,EAAE,cAAoB;YACtD,OAAO,IAAI,WAAW,CAAa,IAAI,EAAE,SAAS,EAAE,cAAc,CAAC,CAAC;SACvE;;QAGa,cAAE,GAAT,UAAqB,IAAY,EAAE,aAAkB,EAAE,cAAoB;YAC9E,OAAO,IAAI,WAAW,CAAY,IAAI,EAAE,aAAa,EAAE,cAAc,CAAC,CAAC;SAC1E;0BACJ;KAAA;;ICvBD;;;;QAGA;SAoCC;+CAAA;KAAA;;IC7CD;;;;ICAA;;;;;;;;;;;;;;;;;;;;;;"}
@@ -1,2 +1,2 @@
1
- !function(e,n){"object"==typeof exports&&"undefined"!=typeof module?n(exports,require("@angular/core"),require("@microsoft/signalr"),require("rxjs"),require("rxjs/operators")):"function"==typeof define&&define.amd?define("@esfaenza/signalr-notifications",["exports","@angular/core","@microsoft/signalr","rxjs","rxjs/operators"],n):n(((e="undefined"!=typeof globalThis?globalThis:e||self).esfaenza=e.esfaenza||{},e.esfaenza["signalr-notifications"]={}),e.ng.core,e.signalR,e.rxjs,e.rxjs.operators)}(this,(function(e,n,t,o,i){"use strict";function s(e){if(e&&e.__esModule)return e;var n=Object.create(null);return e&&Object.keys(e).forEach((function(t){if("default"!==t){var o=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(n,t,o.get?o:{enumerable:!0,get:function(){return e[t]}})}})),n.default=e,Object.freeze(n)}var r=s(t),a=function(){function e(){this.definitions=[]}return Object.defineProperty(e.prototype,"AllDefinitions",{get:function(){return this.definitions},enumerable:!1,configurable:!0}),e.prototype.add=function(e){this.definitions.push(e)},e}();a.decorators=[{type:n.Injectable}];var c=new n.InjectionToken("ENDPOINT_URL"),u=new n.InjectionToken("SIGNALR_ENABLED"),l=new n.InjectionToken("DEBUG_MODE"),g=new n.InjectionToken("LOCALE"),d=new n.InjectionToken("MESSAGE_PACK"),f=new n.InjectionToken("AUTO_RECONNECT"),p={"Building SignalR Hub with Automatic Reconnection":{"en-US":"Building SignalR Hub with Automatic Reconnection","it-IT":"Compilo l'Hub di SignalR con riconnessione automatica"},"Cannot reconnect SignalR, frontend HUB offline":{"en-US":"Cannot reconnect SignalR, frontend HUB offline","it-IT":"Impossibile riconnettere SignalR, l'Hub del Frontend e' Offline"},"Send request sent before a connection was in stable State, waiting 1 second and retrying":{"en-US":"Send request sent before a connection was in stable State, waiting 1 second and retrying","it-IT":"Richiesta 'Send' ricevuta prima che la connessione fosse in uno stato stabile, attendo 1 secondo e riprovo"},"Invoke request sent before a connection was in stable State, waiting 1 second and retrying":{"en-US":"Invoke request sent before a connection was in stable State, waiting 1 second and retrying","it-IT":"Richiesta 'Invoke' ricevuta prima che la connessione fosse in uno stato stabile, attendo 1 secondo e riprovo"},"Connection lost or missing, reconnecting...":{"en-US":"Connection lost or missing, reconnecting...","it-IT":"Connessione persa o mancante, mi riconnetto..."},"SignalR won't be enabled as per configuration":{"en-US":"SignalR won't be enabled as per configuration","it-IT":"SignalR non verrà attivato come da configurazione"},"Building SignalR Hub with MessagePack protocol":{"en-US":"Building SignalR Hub with MessagePack protocol","it-IT":"Compilo l'Hub di SignalR con protocollo MessagePack"},"Request received from the server for endpoint":{"en-US":"Request received from the server for endpoint","it-IT":"Richiesta ricevuta dal server per endpoint"},"Refusing to register endpoint":{"en-US":"Refusing to register endpoint","it-IT":"Rifiuto di registrare l'endpoint"},"because it is not declared as IN - ONLY":{"en-US":"because it is not declared as IN - ONLY","it-IT":"in quanto non è registrato solo come IN"},"Send request ignored because SignalR is not active by configuration":{"en-US":"Send request ignored because SignalR is not active by configuration","it-IT":"Richiesta send ignorata in quanto SignalR non è attivo da configurazione"},"Request sent to server":{"en-US":"Request sent to server","it-IT":"Richiesta inviata al server"},"Invoke request ignored because SignalR is not active by configuration":{"en-US":"Invoke request ignored because SignalR is not active by configuration","it-IT":"Richiesta invoke ignorata in quanto SignalR non è attivo da configurazione"},"Request invoked to server":{"en-US":"Request invoked to server","it-IT":"Richiesta invoke inviata al server"},"Observe request ignored because SignalR is not active by configuration":{"en-US":"Observe request ignored because SignalR is not active by configuration","it-IT":"Osservazione ignorata in quanto SignalR non è attivo da configurazione"},"Returning observable for required endpoint":{"en-US":"Returning observable for required endpoint","it-IT":"Restituisco l'observable per l'endpoint richiesto"},"Disconnection request ignored because SignalR is not active by configuration":{"en-US":"Disconnection request ignored because SignalR is not active by configuration","it-IT":"Richiesta di disconnesione ignorata in quanto SignalR non è attivo da configurazione"},"Disconnection request honored":{"en-US":"Returning observable for required endpoint","it-IT":"Restituito observable per l'endpoint richiesto"},"ERRORS on reconnecting before retrying a send command. Sent message WILL BE LOST":{"en-US":"ERRORS on reconnecting before retrying a send command. Sent message WILL BE LOST","it-IT":"ERRORE nella riconnessione precedente a un nuovo tentativo di 'Send'. Il messaggio in questione SARA' PERSO"}},b=function(){function e(e,n,t,i,s,a,c){var u=this;if(this.MessageDef=e,this.endpoint_url=n,this.msgpack=t,this.enabled=i,this.debug=s,this.locale=c,this.notifications$={},this.enabled){this.MessageDef.AllDefinitions.forEach((function(e){u.notifications$[e.endpoint]=new o.Subject}));var l={skipNegotiation:!0,transport:r.HttpTransportType.WebSockets,logger:s?r.LogLevel.Debug:r.LogLevel.None},g=(new r.HubConnectionBuilder).withUrl("/"+this.endpoint_url,l);if(a&&(this.log(this.loc("Building SignalR Hub with Automatic Reconnection")),g=g.withAutomaticReconnect(new Array(100).fill(5e3))),this.msgpack){this.log(this.loc("Building SignalR Hub with MessagePack protocol"));var d=require("@microsoft/signalr-protocol-msgpack");g=g.withHubProtocol(new d.MessagePackHubProtocol)}this.connection=g.build(),this.connect()}else this.log(this.loc("SignalR won't be enabled as per configuration"))}return e.prototype.connect=function(){var e=this;this.connection.start().catch((function(e){return console.log(e)})),this.MessageDef.AllDefinitions.forEach((function(n){null!==n.inTypeDefault&&null===n.outTypeDefault?e.connection.on(n.endpoint,(function(t){e.log(e.loc("Request received from the server for endpoint")+" '"+n.endpoint+"': "+e.substringLog(JSON.stringify(t))),e.notifications$[n.endpoint].next(t)})):e.log(e.loc("Refusing to register endpoint")+" "+n.endpoint+" "+e.loc("because it is not declared as IN - ONLY"))}))},e.prototype.ensureConnected=function(){var e=this;return this.connection.state==t.HubConnectionState.Disconnected?(this.log(this.loc("Connection lost or missing, reconnecting...")),this.connection.start().then((function(e){return Promise.resolve("OK")}),(function(n){return e.log(e.loc("Cannot reconnect SignalR, frontend HUB offline")),Promise.resolve("KO")}))):this.connection.state==t.HubConnectionState.Connected?Promise.resolve("OK"):Promise.resolve("NO-OP")},e.prototype.send=function(e,n){var i=this;if(!this.enabled)return this.log(this.loc("Send request ignored because SignalR is not active by configuration")),o.EMPTY;this.connection.state==t.HubConnectionState.Connecting||this.connection.state==t.HubConnectionState.Reconnecting||this.connection.state==t.HubConnectionState.Disconnecting?(this.log(this.loc("Send request sent before a connection was in stable State, waiting 1 second and retrying")),setTimeout((function(){i.send(e,n)}),1e3)):this.connection.state==t.HubConnectionState.Disconnected?this.ensureConnected().then((function(t){"KO"==t?i.log(i.loc("ERRORS on reconnecting before retrying a send command. Sent message WILL BE LOST")):i.send(e,n)})):this.connection.send(e.endpoint,n).then((function(t){i.debug&&console.info(i.loc("Request sent to server")+" - "+e.endpoint+": "+i.substringLog(JSON.stringify(n)))}))},e.prototype.invoke=function(e,n){var s=this;return this.enabled?this.connection.state==t.HubConnectionState.Connecting||this.connection.state==t.HubConnectionState.Reconnecting||this.connection.state==t.HubConnectionState.Disconnecting?(this.log(this.loc("Invoke request sent before a connection was in stable State, waiting 1 second and retrying")),o.of().pipe(i.delay(1e3),i.concatMap((function(){return s.invoke(e,n)})))):this.connection.state==t.HubConnectionState.Disconnected?o.from(this.ensureConnected()).pipe(i.concatMap((function(t){return"KO"==t?(s.log(s.loc("ERRORS on reconnecting before retrying a send command. Sent message WILL BE LOST")),o.EMPTY):s.invoke(e,n)}))):o.from(this.connection.invoke(e.endpoint,n)).pipe(i.tap((function(){s.debug&&console.log(s.loc("Request invoked to server")+" - "+e.endpoint+": "+s.substringLog(JSON.stringify(n)))}))):(this.log(this.loc("Invoke request ignored because SignalR is not active by configuration")),o.EMPTY)},e.prototype.observe=function(e){return this.enabled?(this.log(this.loc("Returning observable for required endpoint")+": "+e.endpoint),this.notifications$[e.endpoint]):(this.log(this.loc("Observe request ignored because SignalR is not active by configuration")),o.EMPTY)},e.prototype.disconnect=function(){var e=this;return this.enabled?o.from(this.connection.stop()).pipe(i.catchError((function(e,n){return console.log(e),o.of(null)})),i.tap((function(){e.log(e.loc("Disconnection request honored"))}))):(this.log(this.loc("Disconnection request ignored because SignalR is not active by configuration")),o.EMPTY)},e.prototype.substringLog=function(e,n){return void 0===n&&(n=120),e.length>n?e.substr(0,n)+"[...]":e},e.prototype.log=function(e){this.debug&&console.log("@signalr-notifications: "+e)},e.prototype.loc=function(e){return p[e]?p[e][this.locale]:(console.warn("Untranslated message: "+e),"")},e}();b.decorators=[{type:n.Injectable}],b.ctorParameters=function(){return[{type:a},{type:String,decorators:[{type:n.Inject,args:[c]}]},{type:Boolean,decorators:[{type:n.Inject,args:[d]}]},{type:Boolean,decorators:[{type:n.Inject,args:[u]}]},{type:Boolean,decorators:[{type:n.Inject,args:[l]}]},{type:Boolean,decorators:[{type:n.Inject,args:[f]}]},{type:String,decorators:[{type:n.Inject,args:[g]}]}]};var v=function(){function e(){}return e.forRoot=function(n){return{ngModule:e,providers:[b,{provide:a,useClass:(null==n?void 0:n.messageService)||a},{provide:c,useValue:null==n?void 0:n.endpointUrl},{provide:g,useValue:(null==n?void 0:n.locale)||"it-IT"},{provide:u,useValue:null==(null==n?void 0:n.enabled)||(null==n?void 0:n.enabled)},{provide:l,useValue:null!=(null==n?void 0:n.debugMode)&&(null==n?void 0:n.debugMode)},{provide:d,useValue:null!=(null==n?void 0:n.autoReconnect)&&(null==n?void 0:n.autoReconnect)},{provide:f,useValue:null!=(null==n?void 0:n.useMessagePack)&&(null==n?void 0:n.useMessagePack)}]}},e}();v.decorators=[{type:n.NgModule}];var h=function(){function e(e,n,t){this.endpoint=e,this.inTypeDefault=n,this.outTypeDefault=t}return e.In=function(n,t){return new e(n,t,void 0)},e.Out=function(n,t){return new e(n,void 0,t)},e.Bi=function(n,t,o){return new e(n,t,o)},e}(),S=function(){};e.BaseMessageService=a,e.EndpointDef=h,e.NotificationsService=b,e.SignalrNotificationsModule=v,e.SignalrNotificationsModuleConfig=S,e["ɵa"]=c,e["ɵb"]=u,e["ɵc"]=l,e["ɵd"]=g,e["ɵe"]=d,e["ɵf"]=f,Object.defineProperty(e,"__esModule",{value:!0})}));
1
+ !function(e,n){"object"==typeof exports&&"undefined"!=typeof module?n(exports,require("@angular/core"),require("@microsoft/signalr"),require("rxjs"),require("rxjs/operators")):"function"==typeof define&&define.amd?define("@esfaenza/signalr-notifications",["exports","@angular/core","@microsoft/signalr","rxjs","rxjs/operators"],n):n(((e="undefined"!=typeof globalThis?globalThis:e||self).esfaenza=e.esfaenza||{},e.esfaenza["signalr-notifications"]={}),e.ng.core,e.signalR,e.rxjs,e.rxjs.operators)}(this,(function(e,n,t,o,i){"use strict";function s(e){if(e&&e.__esModule)return e;var n=Object.create(null);return e&&Object.keys(e).forEach((function(t){if("default"!==t){var o=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(n,t,o.get?o:{enumerable:!0,get:function(){return e[t]}})}})),n.default=e,Object.freeze(n)}var r=s(t),c=function(){function e(){this.definitions=[]}return Object.defineProperty(e.prototype,"AllDefinitions",{get:function(){return this.definitions},enumerable:!1,configurable:!0}),e.prototype.add=function(e){this.definitions.push(e)},e}();c.decorators=[{type:n.Injectable}];var a=new n.InjectionToken("ENDPOINT_URL"),u=new n.InjectionToken("SIGNALR_ENABLED"),l=new n.InjectionToken("DEBUG_MODE"),g=new n.InjectionToken("LOCALE"),d=new n.InjectionToken("MESSAGE_PACK"),f=new n.InjectionToken("AUTO_RECONNECT"),p={"Recovering request to Endpoint":{"en-US":"Recovering request to Endpoint","it-IT":"Recupero richiesta verso l'Endpoint"},"Building SignalR Hub with Automatic Reconnection":{"en-US":"Building SignalR Hub with Automatic Reconnection","it-IT":"Compilo l'Hub di SignalR con riconnessione automatica"},"Cannot reconnect SignalR, frontend HUB offline":{"en-US":"Cannot reconnect SignalR, frontend HUB offline","it-IT":"Impossibile riconnettere SignalR, l'Hub del Frontend e' Offline"},"Send request sent before a connection was in stable State, waiting 1 second and retrying":{"en-US":"Send request sent before a connection was in stable State, waiting 1 second and retrying","it-IT":"Richiesta 'Send' ricevuta prima che la connessione fosse in uno stato stabile, attendo 1 secondo e riprovo"},"Invoke request sent before a connection was in stable State, waiting 1 second and retrying":{"en-US":"Invoke request sent before a connection was in stable State, waiting 1 second and retrying","it-IT":"Richiesta 'Invoke' ricevuta prima che la connessione fosse in uno stato stabile, attendo 1 secondo e riprovo"},"Connection lost or missing, reconnecting...":{"en-US":"Connection lost or missing, reconnecting...","it-IT":"Connessione persa o mancante, mi riconnetto..."},"SignalR won't be enabled as per configuration":{"en-US":"SignalR won't be enabled as per configuration","it-IT":"SignalR non verrà attivato come da configurazione"},"Building SignalR Hub with MessagePack protocol":{"en-US":"Building SignalR Hub with MessagePack protocol","it-IT":"Compilo l'Hub di SignalR con protocollo MessagePack"},"Request received from the server for endpoint":{"en-US":"Request received from the server for endpoint","it-IT":"Richiesta ricevuta dal server per endpoint"},"Refusing to register endpoint":{"en-US":"Refusing to register endpoint","it-IT":"Rifiuto di registrare l'endpoint"},"because it is not declared as IN - ONLY":{"en-US":"because it is not declared as IN - ONLY","it-IT":"in quanto non è registrato solo come IN"},"Send request ignored because SignalR is not active by configuration":{"en-US":"Send request ignored because SignalR is not active by configuration","it-IT":"Richiesta send ignorata in quanto SignalR non è attivo da configurazione"},"Request sent to server":{"en-US":"Request sent to server","it-IT":"Richiesta inviata al server"},"Invoke request ignored because SignalR is not active by configuration":{"en-US":"Invoke request ignored because SignalR is not active by configuration","it-IT":"Richiesta invoke ignorata in quanto SignalR non è attivo da configurazione"},"Request invoked to server":{"en-US":"Request invoked to server","it-IT":"Richiesta invoke inviata al server"},"Observe request ignored because SignalR is not active by configuration":{"en-US":"Observe request ignored because SignalR is not active by configuration","it-IT":"Osservazione ignorata in quanto SignalR non è attivo da configurazione"},"Returning observable for required endpoint":{"en-US":"Returning observable for required endpoint","it-IT":"Restituisco l'observable per l'endpoint richiesto"},"Disconnection request ignored because SignalR is not active by configuration":{"en-US":"Disconnection request ignored because SignalR is not active by configuration","it-IT":"Richiesta di disconnesione ignorata in quanto SignalR non è attivo da configurazione"},"Disconnection request honored":{"en-US":"Returning observable for required endpoint","it-IT":"Restituito observable per l'endpoint richiesto"},"ERRORS on reconnecting before retrying a send command. Sent message WILL BE LOST":{"en-US":"ERRORS on reconnecting before retrying a send command. Sent message WILL BE LOST","it-IT":"ERRORE nella riconnessione precedente a un nuovo tentativo di 'Send'. Il messaggio in questione SARA' PERSO"}},v=function(){function e(e,n,t,i,s,c,a){var u=this;if(this.MessageDef=e,this.endpoint_url=n,this.msgpack=t,this.enabled=i,this.debug=s,this.locale=a,this.notifications$={},this.RequestsToRecover=[],this.enabled){this.MessageDef.AllDefinitions.forEach((function(e){u.notifications$[e.endpoint]=new o.Subject}));var l={skipNegotiation:!0,transport:r.HttpTransportType.WebSockets,logger:s?r.LogLevel.Debug:r.LogLevel.None},g=(new r.HubConnectionBuilder).withUrl("/"+this.endpoint_url,l);if(c&&(this.log(this.loc("Building SignalR Hub with Automatic Reconnection")),g=g.withAutomaticReconnect(new Array(100).fill(5e3))),this.msgpack){this.log(this.loc("Building SignalR Hub with MessagePack protocol"));var d=require("@microsoft/signalr-protocol-msgpack");g=g.withHubProtocol(new d.MessagePackHubProtocol)}this.connection=g.build(),this.connect((function(){if(0!=u.RequestsToRecover.length){for(var e=0;e<u.RequestsToRecover.length;e++)u.log(u.loc("Recovering request to Endpoint")+" "+u.RequestsToRecover[e].item.endpoint),u.send(u.RequestsToRecover[e].item,u.RequestsToRecover[e].dto);u.RequestsToRecover=[]}}))}else this.log(this.loc("SignalR won't be enabled as per configuration"))}return e.prototype.connect=function(e){var n=this;this.connection.start().catch((function(e){return console.log(e)})).then((function(n){return null==e?void 0:e()})),this.MessageDef.AllDefinitions.forEach((function(e){null!==e.inTypeDefault&&null===e.outTypeDefault?n.connection.on(e.endpoint,(function(t){n.log(n.loc("Request received from the server for endpoint")+" '"+e.endpoint+"': "+n.substringLog(JSON.stringify(t))),n.notifications$[e.endpoint].next(t)})):n.log(n.loc("Refusing to register endpoint")+" "+e.endpoint+" "+n.loc("because it is not declared as IN - ONLY"))}))},e.prototype.ensureConnected=function(){var e=this;return this.connection.state==t.HubConnectionState.Disconnected?(this.log(this.loc("Connection lost or missing, reconnecting...")),this.connection.start().then((function(e){return Promise.resolve("OK")}),(function(n){return e.log(e.loc("Cannot reconnect SignalR, frontend HUB offline")),Promise.resolve("KO")}))):this.connection.state==t.HubConnectionState.Connected?Promise.resolve("OK"):Promise.resolve("NO-OP")},e.prototype.send=function(e,n){var i=this;if(this.connection)return this.enabled?void(this.connection.state==t.HubConnectionState.Connecting||this.connection.state==t.HubConnectionState.Reconnecting||this.connection.state==t.HubConnectionState.Disconnecting?(this.log(this.loc("Send request sent before a connection was in stable State, waiting 1 second and retrying")),setTimeout((function(){i.send(e,n)}),1e3)):this.connection.state==t.HubConnectionState.Disconnected?this.ensureConnected().then((function(t){"KO"==t?i.log(i.loc("ERRORS on reconnecting before retrying a send command. Sent message WILL BE LOST")):i.send(e,n)})):this.connection.send(e.endpoint,n).then((function(t){i.debug&&console.info(i.loc("Request sent to server")+" - "+e.endpoint+": "+i.substringLog(JSON.stringify(n)))}))):(this.log(this.loc("Send request ignored because SignalR is not active by configuration")),o.EMPTY);this.RequestsToRecover.push({item:e,dto:n})},e.prototype.invoke=function(e,n){var s=this;return this.enabled?this.connection.state==t.HubConnectionState.Connecting||this.connection.state==t.HubConnectionState.Reconnecting||this.connection.state==t.HubConnectionState.Disconnecting?(this.log(this.loc("Invoke request sent before a connection was in stable State, waiting 1 second and retrying")),o.of().pipe(i.delay(1e3),i.concatMap((function(){return s.invoke(e,n)})))):this.connection.state==t.HubConnectionState.Disconnected?o.from(this.ensureConnected()).pipe(i.concatMap((function(t){return"KO"==t?(s.log(s.loc("ERRORS on reconnecting before retrying a send command. Sent message WILL BE LOST")),o.EMPTY):s.invoke(e,n)}))):o.from(this.connection.invoke(e.endpoint,n)).pipe(i.tap((function(){s.debug&&console.log(s.loc("Request invoked to server")+" - "+e.endpoint+": "+s.substringLog(JSON.stringify(n)))}))):(this.log(this.loc("Invoke request ignored because SignalR is not active by configuration")),o.EMPTY)},e.prototype.observe=function(e){return this.enabled?(this.log(this.loc("Returning observable for required endpoint")+": "+e.endpoint),this.notifications$[e.endpoint]):(this.log(this.loc("Observe request ignored because SignalR is not active by configuration")),o.EMPTY)},e.prototype.disconnect=function(){var e=this;return this.enabled?o.from(this.connection.stop()).pipe(i.catchError((function(e,n){return console.log(e),o.of(null)})),i.tap((function(){e.log(e.loc("Disconnection request honored"))}))):(this.log(this.loc("Disconnection request ignored because SignalR is not active by configuration")),o.EMPTY)},e.prototype.substringLog=function(e,n){return void 0===n&&(n=120),e.length>n?e.substr(0,n)+"[...]":e},e.prototype.log=function(e){this.debug&&console.log("@signalr-notifications: "+e)},e.prototype.loc=function(e){return p[e]?p[e][this.locale]:(console.warn("Untranslated message: "+e),"")},e}();v.decorators=[{type:n.Injectable}],v.ctorParameters=function(){return[{type:c},{type:String,decorators:[{type:n.Inject,args:[a]}]},{type:Boolean,decorators:[{type:n.Inject,args:[d]}]},{type:Boolean,decorators:[{type:n.Inject,args:[u]}]},{type:Boolean,decorators:[{type:n.Inject,args:[l]}]},{type:Boolean,decorators:[{type:n.Inject,args:[f]}]},{type:String,decorators:[{type:n.Inject,args:[g]}]}]};var b=function(){function e(){}return e.forRoot=function(n){return{ngModule:e,providers:[v,{provide:c,useClass:(null==n?void 0:n.messageService)||c},{provide:a,useValue:null==n?void 0:n.endpointUrl},{provide:g,useValue:(null==n?void 0:n.locale)||"it-IT"},{provide:u,useValue:null==(null==n?void 0:n.enabled)||(null==n?void 0:n.enabled)},{provide:l,useValue:null!=(null==n?void 0:n.debugMode)&&(null==n?void 0:n.debugMode)},{provide:d,useValue:null!=(null==n?void 0:n.autoReconnect)&&(null==n?void 0:n.autoReconnect)},{provide:f,useValue:null!=(null==n?void 0:n.useMessagePack)&&(null==n?void 0:n.useMessagePack)}]}},e}();b.decorators=[{type:n.NgModule}];var h=function(){function e(e,n,t){this.endpoint=e,this.inTypeDefault=n,this.outTypeDefault=t}return e.In=function(n,t){return new e(n,t,void 0)},e.Out=function(n,t){return new e(n,void 0,t)},e.Bi=function(n,t,o){return new e(n,t,o)},e}(),R=function(){};e.BaseMessageService=c,e.EndpointDef=h,e.NotificationsService=v,e.SignalrNotificationsModule=b,e.SignalrNotificationsModuleConfig=R,e["ɵa"]=a,e["ɵb"]=u,e["ɵc"]=l,e["ɵd"]=g,e["ɵe"]=d,e["ɵf"]=f,Object.defineProperty(e,"__esModule",{value:!0})}));
2
2
  //# sourceMappingURL=esfaenza-signalr-notifications.umd.min.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../projects/signalr-notifications/src/lib/models/BaseMessageService.ts","../../../projects/signalr-notifications/src/lib/tokens.ts","../../../projects/signalr-notifications/src/lib/signalr-notifications.service.loc.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"],"names":["BaseMessageService","this","definitions","Object","defineProperty","prototype","add","endpoint","push","Injectable","ENDPOINT_URL","InjectionToken","SIGNALR_ENABLED","DEBUG_MODE","LOCALE","MESSAGE_PACK","AUTO_RECONNECT","Loc","Building SignalR Hub with Automatic Reconnection","en-US","it-IT","Cannot reconnect SignalR, frontend HUB offline","Send request sent before a connection was in stable State, waiting 1 second and retrying","Invoke request sent before a connection was in stable State, waiting 1 second and retrying","Connection lost or missing, reconnecting...","SignalR won't be enabled as per configuration","Building SignalR Hub with MessagePack protocol","Request received from the server for endpoint","Refusing to register endpoint","because it is not declared as IN - ONLY","Send request ignored because SignalR is not active by configuration","Request sent to server","Invoke request ignored because SignalR is not active by configuration","Request invoked to server","Observe request ignored because SignalR is not active by configuration","Returning observable for required endpoint","Disconnection request ignored because SignalR is not active by configuration","Disconnection request honored","ERRORS on reconnecting before retrying a send command. Sent message WILL BE LOST","NotificationsService","MessageDef","endpoint_url","msgpack","enabled","debug","autoreconnect","locale","_this","notifications$","AllDefinitions","forEach","def","Subject","pars","skipNegotiation","transport","signalR","HttpTransportType","WebSockets","logger","LogLevel","Debug","None","builder","HubConnectionBuilder","withUrl","log","loc","withAutomaticReconnect","Array","fill","mphpModule","require","withHubProtocol","MessagePackHubProtocol","connection","build","connect","start","catch","err","console","d","inTypeDefault","outTypeDefault","on","message","substringLog","JSON","stringify","next","ensureConnected","state","HubConnectionState","Disconnected","then","_","Promise","resolve","Connected","send","item","dto","EMPTY","Connecting","Reconnecting","Disconnecting","setTimeout","t","info","invoke","of","pipe","delay","concatMap","from","res","tap","observe","disconnect","stop","catchError","caught","text","maxchars","length","substr","warn","Inject","args","SignalrNotificationsModule","forRoot","config","ngModule","providers","provide","useClass","messageService","useValue","endpointUrl","debugMode","autoReconnect","useMessagePack","NgModule","EndpointDef","In","name","undefined","Out","Bi"],"mappings":"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","sourcesContent":["// 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}","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');","/**\r\n * Oggetto statico di localizzazione per i messaggi scritti dal servizio\r\n */\r\nexport const Loc ={\r\n \"Building SignalR Hub with Automatic Reconnection\": { \"en-US\": \"Building SignalR Hub with Automatic Reconnection\", \"it-IT\": \"Compilo l'Hub di SignalR con riconnessione automatica\", },\r\n \"Cannot reconnect SignalR, frontend HUB offline\": { \"en-US\": \"Cannot reconnect SignalR, frontend HUB offline\", \"it-IT\": \"Impossibile riconnettere SignalR, l'Hub del Frontend e' Offline\", },\r\n \"Send request sent before a connection was in stable State, waiting 1 second and retrying\": { \"en-US\": \"Send request sent before a connection was in stable State, waiting 1 second and retrying\", \"it-IT\": \"Richiesta 'Send' ricevuta prima che la connessione fosse in uno stato stabile, attendo 1 secondo e riprovo\", },\r\n \"Invoke request sent before a connection was in stable State, waiting 1 second and retrying\": { \"en-US\": \"Invoke request sent before a connection was in stable State, waiting 1 second and retrying\", \"it-IT\": \"Richiesta 'Invoke' ricevuta prima che la connessione fosse in uno stato stabile, attendo 1 secondo e riprovo\", },\r\n \"Connection lost or missing, reconnecting...\" : { \"en-US\": \"Connection lost or missing, reconnecting...\", \"it-IT\": \"Connessione persa o mancante, mi riconnetto...\", },\r\n \"SignalR won't be enabled as per configuration\": { \"en-US\": \"SignalR won't be enabled as per configuration\", \"it-IT\": \"SignalR non verrà attivato come da configurazione\", },\r\n \"Building SignalR Hub with MessagePack protocol\": { \"en-US\": \"Building SignalR Hub with MessagePack protocol\", \"it-IT\": \"Compilo l'Hub di SignalR con protocollo MessagePack\", },\r\n \"Request received from the server for endpoint\": { \"en-US\": \"Request received from the server for endpoint\", \"it-IT\": \"Richiesta ricevuta dal server per endpoint\", },\r\n \"Refusing to register endpoint\": { \"en-US\": \"Refusing to register endpoint\", \"it-IT\": \"Rifiuto di registrare l'endpoint\", },\r\n \"because it is not declared as IN - ONLY\": { \"en-US\": \"because it is not declared as IN - ONLY\", \"it-IT\": \"in quanto non è registrato solo come IN\", },\r\n \"Send request ignored because SignalR is not active by configuration\": { \"en-US\": \"Send request ignored because SignalR is not active by configuration\", \"it-IT\": \"Richiesta send ignorata in quanto SignalR non è attivo da configurazione\", },\r\n \"Request sent to server\": { \"en-US\": \"Request sent to server\", \"it-IT\": \"Richiesta inviata al server\", },\r\n \"Invoke request ignored because SignalR is not active by configuration\": { \"en-US\": \"Invoke request ignored because SignalR is not active by configuration\", \"it-IT\": \"Richiesta invoke ignorata in quanto SignalR non è attivo da configurazione\", },\r\n \"Request invoked to server\": { \"en-US\": \"Request invoked to server\", \"it-IT\": \"Richiesta invoke inviata al server\", },\r\n \"Observe request ignored because SignalR is not active by configuration\": { \"en-US\": \"Observe request ignored because SignalR is not active by configuration\", \"it-IT\": \"Osservazione ignorata in quanto SignalR non è attivo da configurazione\", },\r\n \"Returning observable for required endpoint\": { \"en-US\": \"Returning observable for required endpoint\", \"it-IT\": \"Restituisco l'observable per l'endpoint richiesto\", },\r\n \"Disconnection request ignored because SignalR is not active by configuration\": { \"en-US\": \"Disconnection request ignored because SignalR is not active by configuration\", \"it-IT\": \"Richiesta di disconnesione ignorata in quanto SignalR non è attivo da configurazione\", },\r\n \"Disconnection request honored\": { \"en-US\": \"Returning observable for required endpoint\", \"it-IT\": \"Restituito observable per l'endpoint richiesto\", },\r\n \"ERRORS on reconnecting before retrying a send command. Sent message WILL BE LOST\": { \"en-US\": \"ERRORS on reconnecting before retrying a send command. Sent message WILL BE LOST\", \"it-IT\": \"ERRORE nella riconnessione precedente a un nuovo tentativo di 'Send'. Il messaggio in questione SARA' PERSO\"}\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// Localizzazione\r\nimport { Loc } from './signalr-notifications.service.loc';\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, @Inject(LOCALE) private locale : string) {\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 if(!Loc[message])\r\n {\r\n console.warn(\"Untranslated message: \" + message)\r\n return \"\";\r\n }\r\n return Loc[message][this.locale];\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, LOCALE, 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: LOCALE, useValue: config?.locale || 'it-IT' },\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?.autoReconnect != null ? config?.autoReconnect : false },\r\n { provide: AUTO_RECONNECT, useValue: config?.useMessagePack != null ? config?.useMessagePack : false },\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\r\n /**\r\n * Lingua dei feedback a console, sono supportati 'it-IT' ed 'en-US'\r\n */\r\n locale? : string\r\n}"]}
1
+ {"version":3,"sources":["../../../projects/signalr-notifications/src/lib/models/BaseMessageService.ts","../../../projects/signalr-notifications/src/lib/tokens.ts","../../../projects/signalr-notifications/src/lib/signalr-notifications.service.loc.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"],"names":["BaseMessageService","this","definitions","Object","defineProperty","prototype","add","endpoint","push","Injectable","ENDPOINT_URL","InjectionToken","SIGNALR_ENABLED","DEBUG_MODE","LOCALE","MESSAGE_PACK","AUTO_RECONNECT","Loc","Recovering request to Endpoint","en-US","it-IT","Building SignalR Hub with Automatic Reconnection","Cannot reconnect SignalR, frontend HUB offline","Send request sent before a connection was in stable State, waiting 1 second and retrying","Invoke request sent before a connection was in stable State, waiting 1 second and retrying","Connection lost or missing, reconnecting...","SignalR won't be enabled as per configuration","Building SignalR Hub with MessagePack protocol","Request received from the server for endpoint","Refusing to register endpoint","because it is not declared as IN - ONLY","Send request ignored because SignalR is not active by configuration","Request sent to server","Invoke request ignored because SignalR is not active by configuration","Request invoked to server","Observe request ignored because SignalR is not active by configuration","Returning observable for required endpoint","Disconnection request ignored because SignalR is not active by configuration","Disconnection request honored","ERRORS on reconnecting before retrying a send command. Sent message WILL BE LOST","NotificationsService","MessageDef","endpoint_url","msgpack","enabled","debug","autoreconnect","locale","_this","notifications$","RequestsToRecover","AllDefinitions","forEach","def","Subject","pars","skipNegotiation","transport","signalR","HttpTransportType","WebSockets","logger","LogLevel","Debug","None","builder","HubConnectionBuilder","withUrl","log","loc","withAutomaticReconnect","Array","fill","mphpModule","require","withHubProtocol","MessagePackHubProtocol","connection","build","connect","length","i","item","send","dto","onConnected","start","catch","err","console","then","_","d","inTypeDefault","outTypeDefault","on","message","substringLog","JSON","stringify","next","ensureConnected","state","HubConnectionState","Disconnected","Promise","resolve","Connected","Connecting","Reconnecting","Disconnecting","setTimeout","t","info","EMPTY","invoke","of","pipe","delay","concatMap","from","res","tap","observe","disconnect","stop","catchError","caught","text","maxchars","substr","warn","Inject","args","SignalrNotificationsModule","forRoot","config","ngModule","providers","provide","useClass","messageService","useValue","endpointUrl","debugMode","autoReconnect","useMessagePack","NgModule","EndpointDef","In","name","undefined","Out","Bi"],"mappings":"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","sourcesContent":["// 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}","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');","/**\r\n * Oggetto statico di localizzazione per i messaggi scritti dal servizio\r\n */\r\nexport const Loc ={\r\n \"Recovering request to Endpoint\": {\"en-US\": \"Recovering request to Endpoint\", \"it-IT\": \"Recupero richiesta verso l'Endpoint\"},\r\n \"Building SignalR Hub with Automatic Reconnection\": { \"en-US\": \"Building SignalR Hub with Automatic Reconnection\", \"it-IT\": \"Compilo l'Hub di SignalR con riconnessione automatica\", },\r\n \"Cannot reconnect SignalR, frontend HUB offline\": { \"en-US\": \"Cannot reconnect SignalR, frontend HUB offline\", \"it-IT\": \"Impossibile riconnettere SignalR, l'Hub del Frontend e' Offline\", },\r\n \"Send request sent before a connection was in stable State, waiting 1 second and retrying\": { \"en-US\": \"Send request sent before a connection was in stable State, waiting 1 second and retrying\", \"it-IT\": \"Richiesta 'Send' ricevuta prima che la connessione fosse in uno stato stabile, attendo 1 secondo e riprovo\", },\r\n \"Invoke request sent before a connection was in stable State, waiting 1 second and retrying\": { \"en-US\": \"Invoke request sent before a connection was in stable State, waiting 1 second and retrying\", \"it-IT\": \"Richiesta 'Invoke' ricevuta prima che la connessione fosse in uno stato stabile, attendo 1 secondo e riprovo\", },\r\n \"Connection lost or missing, reconnecting...\" : { \"en-US\": \"Connection lost or missing, reconnecting...\", \"it-IT\": \"Connessione persa o mancante, mi riconnetto...\", },\r\n \"SignalR won't be enabled as per configuration\": { \"en-US\": \"SignalR won't be enabled as per configuration\", \"it-IT\": \"SignalR non verrà attivato come da configurazione\", },\r\n \"Building SignalR Hub with MessagePack protocol\": { \"en-US\": \"Building SignalR Hub with MessagePack protocol\", \"it-IT\": \"Compilo l'Hub di SignalR con protocollo MessagePack\", },\r\n \"Request received from the server for endpoint\": { \"en-US\": \"Request received from the server for endpoint\", \"it-IT\": \"Richiesta ricevuta dal server per endpoint\", },\r\n \"Refusing to register endpoint\": { \"en-US\": \"Refusing to register endpoint\", \"it-IT\": \"Rifiuto di registrare l'endpoint\", },\r\n \"because it is not declared as IN - ONLY\": { \"en-US\": \"because it is not declared as IN - ONLY\", \"it-IT\": \"in quanto non è registrato solo come IN\", },\r\n \"Send request ignored because SignalR is not active by configuration\": { \"en-US\": \"Send request ignored because SignalR is not active by configuration\", \"it-IT\": \"Richiesta send ignorata in quanto SignalR non è attivo da configurazione\", },\r\n \"Request sent to server\": { \"en-US\": \"Request sent to server\", \"it-IT\": \"Richiesta inviata al server\", },\r\n \"Invoke request ignored because SignalR is not active by configuration\": { \"en-US\": \"Invoke request ignored because SignalR is not active by configuration\", \"it-IT\": \"Richiesta invoke ignorata in quanto SignalR non è attivo da configurazione\", },\r\n \"Request invoked to server\": { \"en-US\": \"Request invoked to server\", \"it-IT\": \"Richiesta invoke inviata al server\", },\r\n \"Observe request ignored because SignalR is not active by configuration\": { \"en-US\": \"Observe request ignored because SignalR is not active by configuration\", \"it-IT\": \"Osservazione ignorata in quanto SignalR non è attivo da configurazione\", },\r\n \"Returning observable for required endpoint\": { \"en-US\": \"Returning observable for required endpoint\", \"it-IT\": \"Restituisco l'observable per l'endpoint richiesto\", },\r\n \"Disconnection request ignored because SignalR is not active by configuration\": { \"en-US\": \"Disconnection request ignored because SignalR is not active by configuration\", \"it-IT\": \"Richiesta di disconnesione ignorata in quanto SignalR non è attivo da configurazione\", },\r\n \"Disconnection request honored\": { \"en-US\": \"Returning observable for required endpoint\", \"it-IT\": \"Restituito observable per l'endpoint richiesto\", },\r\n \"ERRORS on reconnecting before retrying a send command. Sent message WILL BE LOST\": { \"en-US\": \"ERRORS on reconnecting before retrying a send command. Sent message WILL BE LOST\", \"it-IT\": \"ERRORE nella riconnessione precedente a un nuovo tentativo di 'Send'. Il messaggio in questione SARA' PERSO\"}\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// Localizzazione\r\nimport { Loc } from './signalr-notifications.service.loc';\r\n\r\n/** Servizio che gestisce la comunicazione con un Hub SignalR in base alle configurazioni fornite dall'applicazione */\r\n@Injectable()\r\nexport class NotificationsService {\r\n\r\n /** Cache degli Observable generati in base agli Endpoint disponibili */\r\n private notifications$: { [index: string]: Subject<any> } = {};\r\n\r\n /** Connessione Signalr */\r\n private connection: signalR.HubConnection;\r\n\r\n /** Coda di chiamate da recuperare quando la connessione viene finalmente aperta */\r\n private RequestsToRecover: { item: EndpointDef<any, any>, dto: any }[] = [];\r\n\r\n /** @ignore Costruttore */\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, @Inject(LOCALE) private locale: string) {\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 if (this.RequestsToRecover.length == 0)\r\n return;\r\n\r\n for (let i = 0; i < this.RequestsToRecover.length; i++) {\r\n this.log(this.loc(\"Recovering request to Endpoint\") + \" \" + this.RequestsToRecover[i].item.endpoint)\r\n this.send(this.RequestsToRecover[i].item, this.RequestsToRecover[i].dto);\r\n }\r\n\r\n this.RequestsToRecover = [];\r\n });\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(onConnected?: () => void) {\r\n this.connection.start().catch(err => console.log(err)).then(_ => onConnected?.());\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 /**\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.connection) {\r\n this.RequestsToRecover.push({ item, dto });\r\n return;\r\n }\r\n\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 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 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 if (!Loc[message]) {\r\n console.warn(\"Untranslated message: \" + message)\r\n return \"\";\r\n }\r\n return Loc[message][this.locale];\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, LOCALE, 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: LOCALE, useValue: config?.locale || 'it-IT' },\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?.autoReconnect != null ? config?.autoReconnect : false },\r\n { provide: AUTO_RECONNECT, useValue: config?.useMessagePack != null ? config?.useMessagePack : false },\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\r\n /**\r\n * Lingua dei feedback a console, sono supportati 'it-IT' ed 'en-US'\r\n */\r\n locale? : string\r\n}"]}
@@ -1 +1 @@
1
- {"__symbolic":"module","version":4,"metadata":{"NotificationsService":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":20,"character":1}}],"members":{"__ctor__":[{"__symbolic":"constructor","parameterDecorators":[null,[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":38,"character":57},"arguments":[{"__symbolic":"reference","name":"ɵa"}]}],[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":38,"character":109},"arguments":[{"__symbolic":"reference","name":"ɵe"}]}],[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":38,"character":157},"arguments":[{"__symbolic":"reference","name":"ɵb"}]}],[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":38,"character":208},"arguments":[{"__symbolic":"reference","name":"ɵc"}]}],[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":38,"character":252},"arguments":[{"__symbolic":"reference","name":"ɵf"}]}],[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":38,"character":300},"arguments":[{"__symbolic":"reference","name":"ɵd"}]}]],"parameters":[{"__symbolic":"reference","name":"BaseMessageService"},{"__symbolic":"reference","name":"string"},{"__symbolic":"reference","name":"boolean"},{"__symbolic":"reference","name":"boolean"},{"__symbolic":"reference","name":"boolean"},{"__symbolic":"reference","name":"boolean"},{"__symbolic":"reference","name":"string"}]}],"connect":[{"__symbolic":"method"}],"ensureConnected":[{"__symbolic":"method"}],"send":[{"__symbolic":"method"}],"invoke":[{"__symbolic":"method"}],"observe":[{"__symbolic":"method"}],"disconnect":[{"__symbolic":"method"}],"substringLog":[{"__symbolic":"method"}],"log":[{"__symbolic":"method"}],"loc":[{"__symbolic":"method"}]}},"SignalrNotificationsModule":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"NgModule","line":7,"character":1}}],"members":{},"statics":{"forRoot":{"__symbolic":"function","parameters":["config"],"value":{"ngModule":{"__symbolic":"reference","name":"SignalrNotificationsModule"},"providers":[{"__symbolic":"reference","name":"NotificationsService"},{"provide":{"__symbolic":"reference","name":"BaseMessageService"},"useClass":{"__symbolic":"binop","operator":"||","left":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"config"},"member":"messageService"},"right":{"__symbolic":"reference","name":"BaseMessageService"}}},{"provide":{"__symbolic":"reference","name":"ɵa"},"useValue":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"config"},"member":"endpointUrl"}},{"provide":{"__symbolic":"reference","name":"ɵd"},"useValue":{"__symbolic":"binop","operator":"||","left":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"config"},"member":"locale"},"right":"it-IT"}},{"provide":{"__symbolic":"reference","name":"ɵb"},"useValue":{"__symbolic":"if","condition":{"__symbolic":"binop","operator":"!=","left":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"config"},"member":"enabled"},"right":null},"thenExpression":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"config"},"member":"enabled"},"elseExpression":true}},{"provide":{"__symbolic":"reference","name":"ɵc"},"useValue":{"__symbolic":"if","condition":{"__symbolic":"binop","operator":"!=","left":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"config"},"member":"debugMode"},"right":null},"thenExpression":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"config"},"member":"debugMode"},"elseExpression":false}},{"provide":{"__symbolic":"reference","name":"ɵe"},"useValue":{"__symbolic":"if","condition":{"__symbolic":"binop","operator":"!=","left":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"config"},"member":"autoReconnect"},"right":null},"thenExpression":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"config"},"member":"autoReconnect"},"elseExpression":false}},{"provide":{"__symbolic":"reference","name":"ɵf"},"useValue":{"__symbolic":"if","condition":{"__symbolic":"binop","operator":"!=","left":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"config"},"member":"useMessagePack"},"right":null},"thenExpression":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"config"},"member":"useMessagePack"},"elseExpression":false}}]}}}},"BaseMessageService":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":9,"character":1}}],"members":{"add":[{"__symbolic":"method"}]}},"EndpointDef":{"__symbolic":"class","arity":2,"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"string"},{"__symbolic":"error","message":"Could not resolve type","line":12,"character":63,"context":{"typeName":"TIn"},"module":"./lib/models/EndpointDef"},{"__symbolic":"error","message":"Could not resolve type","line":12,"character":91,"context":{"typeName":"TOut"},"module":"./lib/models/EndpointDef"}]}]},"statics":{"In":{"__symbolic":"function","parameters":["name","inTypeDefault"],"value":{"__symbolic":"new","expression":{"__symbolic":"reference","name":"EndpointDef"},"arguments":[{"__symbolic":"reference","name":"name"},{"__symbolic":"reference","name":"inTypeDefault"},{"__symbolic":"reference","name":"undefined"}]}},"Out":{"__symbolic":"function","parameters":["name","outTypeDefault"],"value":{"__symbolic":"new","expression":{"__symbolic":"reference","name":"EndpointDef"},"arguments":[{"__symbolic":"reference","name":"name"},{"__symbolic":"reference","name":"undefined"},{"__symbolic":"reference","name":"outTypeDefault"}]}},"Bi":{"__symbolic":"function","parameters":["name","inTypeDefault","outTypeDefault"],"value":{"__symbolic":"new","expression":{"__symbolic":"reference","name":"EndpointDef"},"arguments":[{"__symbolic":"reference","name":"name"},{"__symbolic":"reference","name":"inTypeDefault"},{"__symbolic":"reference","name":"outTypeDefault"}]}}}},"SignalrNotificationsModuleConfig":{"__symbolic":"class","members":{}},"ɵa":{"__symbolic":"new","expression":{"__symbolic":"reference","module":"@angular/core","name":"InjectionToken","line":5,"character":56},"arguments":["ENDPOINT_URL"]},"ɵb":{"__symbolic":"new","expression":{"__symbolic":"reference","module":"@angular/core","name":"InjectionToken","line":10,"character":59},"arguments":["SIGNALR_ENABLED"]},"ɵc":{"__symbolic":"new","expression":{"__symbolic":"reference","module":"@angular/core","name":"InjectionToken","line":15,"character":54},"arguments":["DEBUG_MODE"]},"ɵd":{"__symbolic":"new","expression":{"__symbolic":"reference","module":"@angular/core","name":"InjectionToken","line":20,"character":50},"arguments":["LOCALE"]},"ɵe":{"__symbolic":"new","expression":{"__symbolic":"reference","module":"@angular/core","name":"InjectionToken","line":25,"character":57},"arguments":["MESSAGE_PACK"]},"ɵf":{"__symbolic":"new","expression":{"__symbolic":"reference","module":"@angular/core","name":"InjectionToken","line":30,"character":59},"arguments":["AUTO_RECONNECT"]}},"origins":{"NotificationsService":"./lib/signalr-notifications.service","SignalrNotificationsModule":"./lib/signalr-notifications.module","BaseMessageService":"./lib/models/BaseMessageService","EndpointDef":"./lib/models/EndpointDef","SignalrNotificationsModuleConfig":"./lib/config/SignalrNotificationsModuleConfig","ɵa":"./lib/tokens","ɵb":"./lib/tokens","ɵc":"./lib/tokens","ɵd":"./lib/tokens","ɵe":"./lib/tokens","ɵf":"./lib/tokens"},"importAs":"@esfaenza/signalr-notifications"}
1
+ {"__symbolic":"module","version":4,"metadata":{"NotificationsService":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":18,"character":1}}],"members":{"__ctor__":[{"__symbolic":"constructor","parameterDecorators":[null,[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":31,"character":57},"arguments":[{"__symbolic":"reference","name":"ɵa"}]}],[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":31,"character":109},"arguments":[{"__symbolic":"reference","name":"ɵe"}]}],[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":31,"character":157},"arguments":[{"__symbolic":"reference","name":"ɵb"}]}],[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":31,"character":208},"arguments":[{"__symbolic":"reference","name":"ɵc"}]}],[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":31,"character":252},"arguments":[{"__symbolic":"reference","name":"ɵf"}]}],[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":31,"character":300},"arguments":[{"__symbolic":"reference","name":"ɵd"}]}]],"parameters":[{"__symbolic":"reference","name":"BaseMessageService"},{"__symbolic":"reference","name":"string"},{"__symbolic":"reference","name":"boolean"},{"__symbolic":"reference","name":"boolean"},{"__symbolic":"reference","name":"boolean"},{"__symbolic":"reference","name":"boolean"},{"__symbolic":"reference","name":"string"}]}],"connect":[{"__symbolic":"method"}],"ensureConnected":[{"__symbolic":"method"}],"send":[{"__symbolic":"method"}],"invoke":[{"__symbolic":"method"}],"observe":[{"__symbolic":"method"}],"disconnect":[{"__symbolic":"method"}],"substringLog":[{"__symbolic":"method"}],"log":[{"__symbolic":"method"}],"loc":[{"__symbolic":"method"}]}},"SignalrNotificationsModule":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"NgModule","line":7,"character":1}}],"members":{},"statics":{"forRoot":{"__symbolic":"function","parameters":["config"],"value":{"ngModule":{"__symbolic":"reference","name":"SignalrNotificationsModule"},"providers":[{"__symbolic":"reference","name":"NotificationsService"},{"provide":{"__symbolic":"reference","name":"BaseMessageService"},"useClass":{"__symbolic":"binop","operator":"||","left":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"config"},"member":"messageService"},"right":{"__symbolic":"reference","name":"BaseMessageService"}}},{"provide":{"__symbolic":"reference","name":"ɵa"},"useValue":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"config"},"member":"endpointUrl"}},{"provide":{"__symbolic":"reference","name":"ɵd"},"useValue":{"__symbolic":"binop","operator":"||","left":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"config"},"member":"locale"},"right":"it-IT"}},{"provide":{"__symbolic":"reference","name":"ɵb"},"useValue":{"__symbolic":"if","condition":{"__symbolic":"binop","operator":"!=","left":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"config"},"member":"enabled"},"right":null},"thenExpression":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"config"},"member":"enabled"},"elseExpression":true}},{"provide":{"__symbolic":"reference","name":"ɵc"},"useValue":{"__symbolic":"if","condition":{"__symbolic":"binop","operator":"!=","left":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"config"},"member":"debugMode"},"right":null},"thenExpression":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"config"},"member":"debugMode"},"elseExpression":false}},{"provide":{"__symbolic":"reference","name":"ɵe"},"useValue":{"__symbolic":"if","condition":{"__symbolic":"binop","operator":"!=","left":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"config"},"member":"autoReconnect"},"right":null},"thenExpression":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"config"},"member":"autoReconnect"},"elseExpression":false}},{"provide":{"__symbolic":"reference","name":"ɵf"},"useValue":{"__symbolic":"if","condition":{"__symbolic":"binop","operator":"!=","left":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"config"},"member":"useMessagePack"},"right":null},"thenExpression":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"config"},"member":"useMessagePack"},"elseExpression":false}}]}}}},"BaseMessageService":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":9,"character":1}}],"members":{"add":[{"__symbolic":"method"}]}},"EndpointDef":{"__symbolic":"class","arity":2,"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"string"},{"__symbolic":"error","message":"Could not resolve type","line":12,"character":63,"context":{"typeName":"TIn"},"module":"./lib/models/EndpointDef"},{"__symbolic":"error","message":"Could not resolve type","line":12,"character":91,"context":{"typeName":"TOut"},"module":"./lib/models/EndpointDef"}]}]},"statics":{"In":{"__symbolic":"function","parameters":["name","inTypeDefault"],"value":{"__symbolic":"new","expression":{"__symbolic":"reference","name":"EndpointDef"},"arguments":[{"__symbolic":"reference","name":"name"},{"__symbolic":"reference","name":"inTypeDefault"},{"__symbolic":"reference","name":"undefined"}]}},"Out":{"__symbolic":"function","parameters":["name","outTypeDefault"],"value":{"__symbolic":"new","expression":{"__symbolic":"reference","name":"EndpointDef"},"arguments":[{"__symbolic":"reference","name":"name"},{"__symbolic":"reference","name":"undefined"},{"__symbolic":"reference","name":"outTypeDefault"}]}},"Bi":{"__symbolic":"function","parameters":["name","inTypeDefault","outTypeDefault"],"value":{"__symbolic":"new","expression":{"__symbolic":"reference","name":"EndpointDef"},"arguments":[{"__symbolic":"reference","name":"name"},{"__symbolic":"reference","name":"inTypeDefault"},{"__symbolic":"reference","name":"outTypeDefault"}]}}}},"SignalrNotificationsModuleConfig":{"__symbolic":"class","members":{}},"ɵa":{"__symbolic":"new","expression":{"__symbolic":"reference","module":"@angular/core","name":"InjectionToken","line":5,"character":56},"arguments":["ENDPOINT_URL"]},"ɵb":{"__symbolic":"new","expression":{"__symbolic":"reference","module":"@angular/core","name":"InjectionToken","line":10,"character":59},"arguments":["SIGNALR_ENABLED"]},"ɵc":{"__symbolic":"new","expression":{"__symbolic":"reference","module":"@angular/core","name":"InjectionToken","line":15,"character":54},"arguments":["DEBUG_MODE"]},"ɵd":{"__symbolic":"new","expression":{"__symbolic":"reference","module":"@angular/core","name":"InjectionToken","line":20,"character":50},"arguments":["LOCALE"]},"ɵe":{"__symbolic":"new","expression":{"__symbolic":"reference","module":"@angular/core","name":"InjectionToken","line":25,"character":57},"arguments":["MESSAGE_PACK"]},"ɵf":{"__symbolic":"new","expression":{"__symbolic":"reference","module":"@angular/core","name":"InjectionToken","line":30,"character":59},"arguments":["AUTO_RECONNECT"]}},"origins":{"NotificationsService":"./lib/signalr-notifications.service","SignalrNotificationsModule":"./lib/signalr-notifications.module","BaseMessageService":"./lib/models/BaseMessageService","EndpointDef":"./lib/models/EndpointDef","SignalrNotificationsModuleConfig":"./lib/config/SignalrNotificationsModuleConfig","ɵa":"./lib/tokens","ɵb":"./lib/tokens","ɵc":"./lib/tokens","ɵd":"./lib/tokens","ɵe":"./lib/tokens","ɵf":"./lib/tokens"},"importAs":"@esfaenza/signalr-notifications"}
@@ -10,15 +10,9 @@ import { BaseMessageService } from './models/BaseMessageService';
10
10
  import { DEBUG_MODE, ENDPOINT_URL, LOCALE, MESSAGE_PACK, SIGNALR_ENABLED, AUTO_RECONNECT } from "./tokens";
11
11
  // Localizzazione
12
12
  import { Loc } from './signalr-notifications.service.loc';
13
- /**
14
- * Servizio che gestisce la comunicazione con un Hub SignalR in base alle configurazioni fornite dall'applicazione
15
- */
13
+ /** Servizio che gestisce la comunicazione con un Hub SignalR in base alle configurazioni fornite dall'applicazione */
16
14
  export class NotificationsService {
17
- /**
18
- * Costruttore
19
- *
20
- * @ignore
21
- */
15
+ /** @ignore Costruttore */
22
16
  constructor(MessageDef, endpoint_url, msgpack, enabled, debug, autoreconnect, locale) {
23
17
  this.MessageDef = MessageDef;
24
18
  this.endpoint_url = endpoint_url;
@@ -26,10 +20,10 @@ export class NotificationsService {
26
20
  this.enabled = enabled;
27
21
  this.debug = debug;
28
22
  this.locale = locale;
29
- /**
30
- * Cache degli Observable generati in base agli Endpoint disponibili
31
- */
23
+ /** Cache degli Observable generati in base agli Endpoint disponibili */
32
24
  this.notifications$ = {};
25
+ /** Coda di chiamate da recuperare quando la connessione viene finalmente aperta */
26
+ this.RequestsToRecover = [];
33
27
  if (!this.enabled) {
34
28
  this.log(this.loc("SignalR won't be enabled as per configuration"));
35
29
  return;
@@ -48,13 +42,21 @@ export class NotificationsService {
48
42
  builder = builder.withHubProtocol(new mphpModule.MessagePackHubProtocol());
49
43
  }
50
44
  this.connection = builder.build();
51
- this.connect();
45
+ this.connect(() => {
46
+ if (this.RequestsToRecover.length == 0)
47
+ return;
48
+ for (let i = 0; i < this.RequestsToRecover.length; i++) {
49
+ this.log(this.loc("Recovering request to Endpoint") + " " + this.RequestsToRecover[i].item.endpoint);
50
+ this.send(this.RequestsToRecover[i].item, this.RequestsToRecover[i].dto);
51
+ }
52
+ this.RequestsToRecover = [];
53
+ });
52
54
  }
53
55
  /**
54
56
  * Effettua la connessione all'Hub Signalr e registra tutti gli Endpoint per cui il Backend comunica con il Frontend sulla **connection**
55
57
  */
56
- connect() {
57
- this.connection.start().catch(err => console.log(err));
58
+ connect(onConnected) {
59
+ this.connection.start().catch(err => console.log(err)).then(_ => onConnected === null || onConnected === void 0 ? void 0 : onConnected());
58
60
  this.MessageDef.AllDefinitions.forEach(d => {
59
61
  //Registro solo le cose di IN, quelle di out sono chiamate che faccio io al BE quindi non servono
60
62
  if (d.inTypeDefault !== null && d.outTypeDefault === null)
@@ -95,6 +97,10 @@ export class NotificationsService {
95
97
  * @param {TOut} dto Dto da inviare all'Endpoint
96
98
  */
97
99
  send(item, dto) {
100
+ if (!this.connection) {
101
+ this.RequestsToRecover.push({ item, dto });
102
+ return;
103
+ }
98
104
  if (!this.enabled) {
99
105
  this.log(this.loc("Send request ignored because SignalR is not active by configuration"));
100
106
  return EMPTY;
@@ -229,4 +235,4 @@ NotificationsService.ctorParameters = () => [
229
235
  { type: Boolean, decorators: [{ type: Inject, args: [AUTO_RECONNECT,] }] },
230
236
  { type: String, decorators: [{ type: Inject, args: [LOCALE,] }] }
231
237
  ];
232
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnbmFsci1ub3RpZmljYXRpb25zLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9zaWduYWxyLW5vdGlmaWNhdGlvbnMvc3JjL2xpYi9zaWduYWxyLW5vdGlmaWNhdGlvbnMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxVQUFVO0FBQ1YsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFbkQsa0NBQWtDO0FBQ2xDLE9BQU8sS0FBSyxPQUFPLE1BQU0sb0JBQW9CLENBQUM7QUFDOUMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDeEQsT0FBTyxFQUFjLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM1RCxPQUFPLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFbkUsVUFBVTtBQUNWLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBRWpFLE9BQU8sRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUUzRyxpQkFBaUI7QUFDakIsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBRTFEOztHQUVHO0FBRUgsTUFBTSxPQUFPLG9CQUFvQjtJQVk3Qjs7OztPQUlHO0lBQ0gsWUFBb0IsVUFBOEIsRUFBZ0MsWUFBb0IsRUFBZ0MsT0FBZ0IsRUFBbUMsT0FBZ0IsRUFBOEIsS0FBYyxFQUEwQixhQUFzQixFQUEwQixNQUFlO1FBQTFULGVBQVUsR0FBVixVQUFVLENBQW9CO1FBQWdDLGlCQUFZLEdBQVosWUFBWSxDQUFRO1FBQWdDLFlBQU8sR0FBUCxP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QUMsd0JBQXdCLEdBQUcsT0FBTyxDQUFDLENBQUE7WUFDaEQsT0FBTyxFQUFFLENBQUM7U0FDYjtRQUNELE9BQU8sR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNyQyxDQUFDOzs7WUFuT0osVUFBVTs7O1lBVkYsa0JBQWtCO3lDQTRCOEIsTUFBTSxTQUFDLFlBQVk7MENBQWlDLE1BQU0sU0FBQyxZQUFZOzBDQUE2QixNQUFNLFNBQUMsZUFBZTswQ0FBNkIsTUFBTSxTQUFDLFVBQVU7MENBQTJCLE1BQU0sU0FBQyxjQUFjO3lDQUEyQixNQUFNLFNBQUMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbIi8vIEFuZ3VsYXJcclxuaW1wb3J0IHsgSW5qZWN0YWJsZSwgSW5qZWN0IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuXHJcbi8vIERpcmV0dGl2ZSwgQ29tcG9uZW50aSwgTGlicmVyaWVcclxuaW1wb3J0ICogYXMgc2lnbmFsUiBmcm9tICdAbWljcm9zb2Z0L3NpZ25hbHInO1xyXG5pbXBvcnQgeyBIdWJDb25uZWN0aW9uU3RhdGUgfSBmcm9tIFwiQG1pY3Jvc29mdC9zaWduYWxyXCI7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YmplY3QsIEVNUFRZLCBmcm9tLCBvZiB9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7IGNhdGNoRXJyb3IsIGNvbmNhdE1hcCwgZGVsYXksIHRhcCB9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xyXG5cclxuLy8gTW9kZWxsaVxyXG5pbXBvcnQgeyBCYXNlTWVzc2FnZVNlcnZpY2UgfSBmcm9tICcuL21vZGVscy9CYXNlTWVzc2FnZVNlcnZpY2UnO1xyXG5pbXBvcnQgeyBFbmRwb2ludERlZiB9IGZyb20gJy4vbW9kZWxzL0VuZHBvaW50RGVmJztcclxuaW1wb3J0IHsgREVCVUdfTU9ERSwgRU5EUE9JTlRfVVJMLCBMT0NBTEUsIE1FU1NBR0VfUEFDSywgU0lHTkFMUl9FTkFCTEVELCBBVVRPX1JFQ09OTkVDVCB9IGZyb20gXCIuL3Rva2Vuc1wiO1xyXG5cclxuLy8gTG9jYWxpenphemlvbmVcclxuaW1wb3J0IHsgTG9jIH0gZnJvbSAnLi9zaWduYWxyLW5vdGlmaWNhdGlvbnMuc2VydmljZS5sb2MnO1xyXG5cclxuLyoqXHJcbiAqIFNlcnZpemlvIGNoZSBnZXN0aXNjZSBsYSBjb211bmljYXppb25lIGNvbiB1biBIdWIgU2lnbmFsUiBpbiBiYXNlIGFsbGUgY29uZmlndXJhemlvbmkgZm9ybml0ZSBkYWxsJ2FwcGxpY2F6aW9uZVxyXG4gKi9cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgTm90aWZpY2F0aW9uc1NlcnZpY2Uge1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FjaGUgZGVnbGkgT2JzZXJ2YWJsZSBnZW5lcmF0aSBpbiBiYXNlIGFnbGkgRW5kcG9pbnQgZGlzcG9uaWJpbGlcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBub3RpZmljYXRpb25zJDogeyBbaW5kZXg6IHN0cmluZ106IFN1YmplY3Q8YW55PiB9ID0ge307XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDb25uZXNzaW9uZSBTaWduYWxyXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgY29ubmVjdGlvbjogc2lnbmFsUi5IdWJDb25uZWN0aW9uO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ29zdHJ1dHRvcmVcclxuICAgICAqIFxyXG4gICAgICogQGlnbm9yZVxyXG4gICAgICovXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIE1lc3NhZ2VEZWY6IEJhc2VNZXNzYWdlU2VydmljZSwgQEluamVjdChFTkRQT0lOVF9VUkwpIHByaXZhdGUgZW5kcG9pbnRfdXJsOiBzdHJpbmcsIEBJbmplY3QoTUVTU0FHRV9QQUNLKSBwcml2YXRlIG1zZ3BhY2s6IGJvb2xlYW4sIEBJbmplY3QoU0lHTkFMUl9FTkFCTEVEKSBwcml2YXRlIGVuYWJsZWQ6IGJvb2xlYW4sIEBJbmplY3QoREVCVUdfTU9ERSkgcHJpdmF0ZSBkZWJ1ZzogYm9vbGVhbiwgQEluamVjdChBVVRPX1JFQ09OTkVDVCkgYXV0b3JlY29ubmVjdDogYm9vbGVhbiwgQEluamVjdChMT0NBTEUpIHByaXZhdGUgbG9jYWxlIDogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmVuYWJsZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5sb2codGhpcy5sb2MoXCJTaWduYWxSIHdvbid0IGJlIGVuYWJsZWQgYXMgcGVyIGNvbmZpZ3VyYXRpb25cIikpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLk1lc3NhZ2VEZWYuQWxsRGVmaW5pdGlvbnMuZm9yRWFjaChkZWYgPT4geyB0aGlzLm5vdGlmaWNhdGlvbnMkW2RlZi5lbmRwb2ludF0gPSBuZXcgU3ViamVjdDx0eXBlb2YgZGVmLmluVHlwZURlZmF1bHQ+KCk7IH0pO1xyXG5cclxuICAgICAgICBsZXQgcGFyczogc2lnbmFsUi5JSHR0cENvbm5lY3Rpb25PcHRpb25zID0geyBza2lwTmVnb3RpYXRpb246IHRydWUsIHRyYW5zcG9ydDogc2lnbmFsUi5IdHRwVHJhbnNwb3J0VHlwZS5XZWJTb2NrZXRzLCBsb2dnZXI6IGRlYnVnID8gc2lnbmFsUi5Mb2dMZXZlbC5EZWJ1ZyA6IHNpZ25hbFIuTG9nTGV2ZWwuTm9uZSB9O1xyXG4gICAgICAgIHZhciBidWlsZGVyID0gbmV3IHNpZ25hbFIuSHViQ29ubmVjdGlvbkJ1aWxkZXIoKS53aXRoVXJsKFwiL1wiICsgdGhpcy5lbmRwb2ludF91cmwsIHBhcnMpO1xyXG5cclxuICAgICAgICBpZiAoYXV0b3JlY29ubmVjdCkge1xyXG4gICAgICAgICAgICB0aGlzLmxvZyh0aGlzLmxvYyhcIkJ1aWxkaW5nIFNpZ25hbFIgSHViIHdpdGggQXV0b21hdGljIFJlY29ubmVjdGlvblwiKSk7XHJcbiAgICAgICAgICAgIC8vIDEwMCB0ZW50YXRpdmkgZGkgcmljb25uZXNzaW9uZSwgMSBvZ25pIDUgc2Vjb25kaVxyXG4gICAgICAgICAgICBidWlsZGVyID0gYnVpbGRlci53aXRoQXV0b21hdGljUmVjb25uZWN0KG5ldyBBcnJheSgxMDApLmZpbGwoNSAqIDEwMDApKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLm1zZ3BhY2spIHtcclxuICAgICAgICAgICAgdGhpcy5sb2codGhpcy5sb2MoXCJCdWlsZGluZyBTaWduYWxSIEh1YiB3aXRoIE1lc3NhZ2VQYWNrIHByb3RvY29sXCIpKTtcclxuICAgICAgICAgICAgdmFyIG1waHBNb2R1bGUgPSByZXF1aXJlKFwiQG1pY3Jvc29mdC9zaWduYWxyLXByb3RvY29sLW1zZ3BhY2tcIik7XHJcbiAgICAgICAgICAgIGJ1aWxkZXIgPSBidWlsZGVyLndpdGhIdWJQcm90b2NvbChuZXcgbXBocE1vZHVsZS5NZXNzYWdlUGFja0h1YlByb3RvY29sKCkpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmNvbm5lY3Rpb24gPSBidWlsZGVyLmJ1aWxkKCk7XHJcbiAgICAgICAgdGhpcy5jb25uZWN0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBFZmZldHR1YSBsYSBjb25uZXNzaW9uZSBhbGwnSHViIFNpZ25hbHIgZSByZWdpc3RyYSB0dXR0aSBnbGkgRW5kcG9pbnQgcGVyIGN1aSBpbCBCYWNrZW5kIGNvbXVuaWNhIGNvbiBpbCBGcm9udGVuZCBzdWxsYSAqKmNvbm5lY3Rpb24qKlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGNvbm5lY3QoKSB7XHJcbiAgICAgICAgdGhpcy5jb25uZWN0aW9uLnN0YXJ0KCkuY2F0Y2goZXJyID0+IGNvbnNvbGUubG9nKGVycikpO1xyXG4gICAgICAgIHRoaXMuTWVzc2FnZURlZi5BbGxEZWZpbml0aW9ucy5mb3JFYWNoKGQgPT4ge1xyXG4gICAgICAgICAgICAvL1JlZ2lzdHJvIHNvbG8gbGUgY29zZSBkaSBJTiwgcXVlbGxlIGRpIG91dCBzb25vIGNoaWFtYXRlIGNoZSBmYWNjaW8gaW8gYWwgQkUgcXVpbmRpIG5vbiBzZXJ2b25vXHJcbiAgICAgICAgICAgIGlmIChkLmluVHlwZURlZmF1bHQgIT09IG51bGwgJiYgZC5vdXRUeXBlRGVmYXVsdCA9PT0gbnVsbClcclxuICAgICAgICAgICAgICAgIHRoaXMuY29ubmVjdGlvbi5vbihkLmVuZHBvaW50LCAobWVzc2FnZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9nKHRoaXMubG9jKFwiUmVxdWVzdCByZWNlaXZlZCBmcm9tIHRoZSBzZXJ2ZXIgZm9yIGVuZHBvaW50XCIpICsgXCIgJ1wiICsgZC5lbmRwb2ludCArIFwiJzogXCIgKyB0aGlzLnN1YnN0cmluZ0xvZyhKU09OLnN0cmluZ2lmeShtZXNzYWdlKSkpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9ucyRbZC5lbmRwb2ludF0ubmV4dChtZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZyh0aGlzLmxvYyhcIlJlZnVzaW5nIHRvIHJlZ2lzdGVyIGVuZHBvaW50XCIpICsgXCIgXCIgKyBkLmVuZHBvaW50ICsgXCIgXCIgKyB0aGlzLmxvYyhcImJlY2F1c2UgaXQgaXMgbm90IGRlY2xhcmVkIGFzIElOIC0gT05MWVwiKSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBFZmZldHR1YSB2ZXJpZmljaGUgc3VsbGEgY29ubmVzc2lvbmUgZSwgaW4gY2FzbyBub24gZm9zc2UgY29sbGVnYXRhLCB0ZW50YSBkaSByaWNvbm5ldHRlcmxhXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlPCdPSycgfCAnS08nIHwgJ05PLU9QJz59ICdPSycgU2UgbGEgY29ubmVzc2lvbmUgw6ggZ2nDoCBjb25uZXNzYSBvIMOoIHN0YXRhIHJpY29ubmVzc2EgY29uIHN1Y2Nlc3NvLCAnS08nIFNlIG5vbiDDqCBzdGF0byBwb3NzaWJpbGUgcmljb25uZXR0ZXJlIFxyXG4gICAgICogdW5hIGNvbm5lc3Npb25lIGRpc2Nvbm5lc3NhLCAnTk8tT1AnIHNlIGxhIGNvbm5lc2lzb25lIMOoIGluIHVubyBzdGF0byBpbnRlcm1lZGlvIGNoZSBub24gcHXDsiBlc3NlcmUgbW9kaWZpY2F0b1xyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZW5zdXJlQ29ubmVjdGVkKCk6IFByb21pc2U8J09LJyB8ICdLTycgfCAnTk8tT1AnPiB7XHJcbiAgICAgICAgaWYgKHRoaXMuY29ubmVjdGlvbi5zdGF0ZSA9PSBIdWJDb25uZWN0aW9uU3RhdGUuRGlzY29ubmVjdGVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMubG9nKHRoaXMubG9jKFwiQ29ubmVjdGlvbiBsb3N0IG9yIG1pc3NpbmcsIHJlY29ubmVjdGluZy4uLlwiKSk7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb25uZWN0aW9uLnN0YXJ0KClcclxuICAgICAgICAgICAgICAgIC50aGVuKF8gPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoXCJPS1wiKTtcclxuICAgICAgICAgICAgICAgIH0sIF8gPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9nKHRoaXMubG9jKFwiQ2Fubm90IHJlY29ubmVjdCBTaWduYWxSLCBmcm9udGVuZCBIVUIgb2ZmbGluZVwiKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShcIktPXCIpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHRoaXMuY29ubmVjdGlvbi5zdGF0ZSA9PSBIdWJDb25uZWN0aW9uU3RhdGUuQ29ubmVjdGVkKVxyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFwiT0tcIik7XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFwiTk8tT1BcIik7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbnZpYSB1biBtZXNzYWdnaW8gYWxsJ0h1YiBkZWwgQmFja2VuZFxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge0VuZHBvaW50RGVmPFRPdXQsIGFueT59IGl0ZW0gRW5kcG9pbnQgZGEgY29udGF0dGFyZVxyXG4gICAgICogQHBhcmFtIHtUT3V0fSBkdG8gRHRvIGRhIGludmlhcmUgYWxsJ0VuZHBvaW50XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzZW5kPFRPdXQ+KGl0ZW06IEVuZHBvaW50RGVmPFRPdXQsIGFueT4sIGR0bzogVE91dCkge1xyXG4gICAgICAgIGlmICghdGhpcy5lbmFibGVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMubG9nKHRoaXMubG9jKFwiU2VuZCByZXF1ZXN0IGlnbm9yZWQgYmVjYXVzZSBTaWduYWxSIGlzIG5vdCBhY3RpdmUgYnkgY29uZmlndXJhdGlvblwiKSk7XHJcbiAgICAgICAgICAgIHJldHVybiBFTVBUWTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmNvbm5lY3Rpb24uc3RhdGUgPT0gSHViQ29ubmVjdGlvblN0YXRlLkNvbm5lY3RpbmcgfHwgdGhpcy5jb25uZWN0aW9uLnN0YXRlID09IEh1YkNvbm5lY3Rpb25TdGF0ZS5SZWNvbm5lY3RpbmcgfHwgdGhpcy5jb25uZWN0aW9uLnN0YXRlID09IEh1YkNvbm5lY3Rpb25TdGF0ZS5EaXNjb25uZWN0aW5nKSB7XHJcbiAgICAgICAgICAgIHRoaXMubG9nKHRoaXMubG9jKFwiU2VuZCByZXF1ZXN0IHNlbnQgYmVmb3JlIGEgY29ubmVjdGlvbiB3YXMgaW4gc3RhYmxlIFN0YXRlLCB3YWl0aW5nIDEgc2Vjb25kIGFuZCByZXRyeWluZ1wiKSk7XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4geyB0aGlzLnNlbmQoaXRlbSwgZHRvKTsgfSwgMTAwMCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHRoaXMuY29ubmVjdGlvbi5zdGF0ZSA9PSBIdWJDb25uZWN0aW9uU3RhdGUuRGlzY29ubmVjdGVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZW5zdXJlQ29ubmVjdGVkKCkudGhlbih0ID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICh0ID09IFwiS09cIikgdGhpcy5sb2codGhpcy5sb2MoXCJFUlJPUlMgb24gcmVjb25uZWN0aW5nIGJlZm9yZSByZXRyeWluZyBhIHNlbmQgY29tbWFuZC4gU2VudCBtZXNzYWdlIFdJTEwgQkUgTE9TVFwiKSk7XHJcbiAgICAgICAgICAgICAgICBlbHNlIHRoaXMuc2VuZChpdGVtLCBkdG8pO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5jb25uZWN0aW9uLnNlbmQoaXRlbS5lbmRwb2ludCwgZHRvKS50aGVuKF8gPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZGVidWcpXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5pbmZvKHRoaXMubG9jKFwiUmVxdWVzdCBzZW50IHRvIHNlcnZlclwiKSArIFwiIC0gXCIgKyBpdGVtLmVuZHBvaW50ICsgXCI6IFwiICsgdGhpcy5zdWJzdHJpbmdMb2coSlNPTi5zdHJpbmdpZnkoZHRvKSkpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbnZpYSB1biBtZXNzYWdnaW8gYWxsJ0h1YiBkZWwgQmFja2VuZCwgYXNwZXR0YW5kb3NpIHVuYSByaXNwb3N0YVxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge0VuZHBvaW50RGVmPFRPdXQsIFRJbj59IGl0ZW0gRW5kcG9pbnQgZGEgY29udGF0dGFyZVxyXG4gICAgICogQHBhcmFtIHtUT3V0fSBkdG8gRHRvIGRhIGludmlhcmUgYWxsJ0VuZHBvaW50XHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm5zIHtPYnNlcnZhYmxlPFRJbj59IE9ic2VydmFibGUgc3UgY3VpIGNpIHNpIHB1w7IgcmVnaXN0cmFyZSBwZXIgcmljZXZlcmUgaWwgcmlzdWx0YXRvIGRlbGxhIGNoaWFtYXRhXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBpbnZva2U8VE91dCwgVEluPihpdGVtOiBFbmRwb2ludERlZjxUT3V0LCBUSW4+LCBkdG86IFRPdXQpOiBPYnNlcnZhYmxlPFRJbj4ge1xyXG4gICAgICAgIGlmICghdGhpcy5lbmFibGVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMubG9nKHRoaXMubG9jKFwiSW52b2tlIHJlcXVlc3QgaWdub3JlZCBiZWNhdXNlIFNpZ25hbFIgaXMgbm90IGFjdGl2ZSBieSBjb25maWd1cmF0aW9uXCIpKTtcclxuICAgICAgICAgICAgcmV0dXJuIEVNUFRZO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuY29ubmVjdGlvbi5zdGF0ZSA9PSBIdWJDb25uZWN0aW9uU3RhdGUuQ29ubmVjdGluZyB8fCB0aGlzLmNvbm5lY3Rpb24uc3RhdGUgPT0gSHViQ29ubmVjdGlvblN0YXRlLlJlY29ubmVjdGluZyB8fCB0aGlzLmNvbm5lY3Rpb24uc3RhdGUgPT0gSHViQ29ubmVjdGlvblN0YXRlLkRpc2Nvbm5lY3RpbmcpIHtcclxuICAgICAgICAgICAgdGhpcy5sb2codGhpcy5sb2MoXCJJbnZva2UgcmVxdWVzdCBzZW50IGJlZm9yZSBhIGNvbm5lY3Rpb24gd2FzIGluIHN0YWJsZSBTdGF0ZSwgd2FpdGluZyAxIHNlY29uZCBhbmQgcmV0cnlpbmdcIikpO1xyXG4gICAgICAgICAgICByZXR1cm4gb2YoKS5waXBlKGRlbGF5KDEwMDApLCBjb25jYXRNYXAoKCkgPT4gdGhpcy5pbnZva2UoaXRlbSwgZHRvKSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh0aGlzLmNvbm5lY3Rpb24uc3RhdGUgPT0gSHViQ29ubmVjdGlvblN0YXRlLkRpc2Nvbm5lY3RlZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZnJvbSh0aGlzLmVuc3VyZUNvbm5lY3RlZCgpKS5waXBlKGNvbmNhdE1hcCgocmVzKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAocmVzID09IFwiS09cIikge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9nKHRoaXMubG9jKFwiRVJST1JTIG9uIHJlY29ubmVjdGluZyBiZWZvcmUgcmV0cnlpbmcgYSBzZW5kIGNvbW1hbmQuIFNlbnQgbWVzc2FnZSBXSUxMIEJFIExPU1RcIikpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBFTVBUWTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgcmV0dXJuIHRoaXMuaW52b2tlKGl0ZW0sIGR0byk7XHJcbiAgICAgICAgICAgIH0pKVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZyb20odGhpcy5jb25uZWN0aW9uLmludm9rZTxUSW4+KGl0ZW0uZW5kcG9pbnQsIGR0bykpLnBpcGUoXHJcbiAgICAgICAgICAgICAgICB0YXAoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmRlYnVnKSBjb25zb2xlLmxvZyh0aGlzLmxvYyhcIlJlcXVlc3QgaW52b2tlZCB0byBzZXJ2ZXJcIikgKyBcIiAtIFwiICsgaXRlbS5lbmRwb2ludCArIFwiOiBcIiArIHRoaXMuc3Vic3RyaW5nTG9nKEpTT04uc3RyaW5naWZ5KGR0bykpKTtcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSG9vayBwZXIgb3NzZXJ2YXJlIGkgZGF0aSBzcGVkaXRpIGFkIHVuIEVuZHBvaW50IGRhbCBCYWNrZW5kXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7RW5kcG9pbnREZWY8VEluLCBhbnk+fSBpdGVtIEVuZHBvaW50IHN1IGN1aSBhc2NvbHRhcmVcclxuICAgICAqIFxyXG4gICAgICogQHJldHVybnMge09ic2VydmFibGU8VEluPn0gT2JzZXJ2YWJsZSBzdSBjdWkgY2kgc2kgcHXDsiByZWdpc3RyYXJlIHBlciByaWNldmVyZSBsJ29nZ2V0dG8gZ2VuZXJhdG8gYWQgb2duaSBjaGlhbWF0YSBkYWwgQmFja2VuZCBhbCBGcm9udGVuZFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgb2JzZXJ2ZTxUSW4+KGl0ZW06IEVuZHBvaW50RGVmPFRJbiwgYW55Pik6IE9ic2VydmFibGU8VEluPiB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmVuYWJsZWQpXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLmxvZyh0aGlzLmxvYyhcIk9ic2VydmUgcmVxdWVzdCBpZ25vcmVkIGJlY2F1c2UgU2lnbmFsUiBpcyBub3QgYWN0aXZlIGJ5IGNvbmZpZ3VyYXRpb25cIikpO1xyXG4gICAgICAgICAgICByZXR1cm4gRU1QVFk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmxvZyh0aGlzLmxvYyhcIlJldHVybmluZyBvYnNlcnZhYmxlIGZvciByZXF1aXJlZCBlbmRwb2ludFwiKSArIFwiOiBcIiArIGl0ZW0uZW5kcG9pbnQpO1xyXG4gICAgICAgIHJldHVybiA8T2JzZXJ2YWJsZTxUSW4+PnRoaXMubm90aWZpY2F0aW9ucyRbaXRlbS5lbmRwb2ludF07XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEaXNjb25uZXNzaW9uZSBkZWwgc2lzdGVtYSBkaSBTaWduYWxSXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm5zIHtPYnNlcnZhYmxlPHZvaWQ+fSBPYnNlcnZhYmxlIGEgY3VpIHJlZ2lzdHJhcnNpIGNoZSB2aWVuZSBjaGlhbWF0byBxdWFuZG8gbGEgZGlzY29ubmVzc2lvbmUgw6ggdGVybWluYXRhXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBkaXNjb25uZWN0KCk6IE9ic2VydmFibGU8dm9pZD4ge1xyXG4gICAgICAgIC8vTk8tT1Agc2Ugbm9uIGF0dGl2b1xyXG4gICAgICAgIGlmICghdGhpcy5lbmFibGVkKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5sb2codGhpcy5sb2MoXCJEaXNjb25uZWN0aW9uIHJlcXVlc3QgaWdub3JlZCBiZWNhdXNlIFNpZ25hbFIgaXMgbm90IGFjdGl2ZSBieSBjb25maWd1cmF0aW9uXCIpKTtcclxuICAgICAgICAgICAgcmV0dXJuIEVNUFRZO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGZyb20odGhpcy5jb25uZWN0aW9uLnN0b3AoKSkucGlwZShcclxuICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyLCBjYXVnaHQpID0+IHsgY29uc29sZS5sb2coZXJyKTsgcmV0dXJuIG9mKG51bGwpOyB9KSxcclxuICAgICAgICAgICAgdGFwKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9nKHRoaXMubG9jKFwiRGlzY29ubmVjdGlvbiByZXF1ZXN0IGhvbm9yZWRcIikpO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUYWdsaWEgdW4gbG9nIHRyb3BwbyBsdW5nb1xyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4dCBMb2cgZGEgdGFnbGlhcmVcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBtYXhjaGFycyBOdW1lcm8gbWFzc2ltbyBkaSBjYXJhdHRlcmkgZGEgdGVuZXJlXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IExvZyB0YWdsaWF0b1xyXG4gICAgICovXHJcbiAgICBwcml2YXRlIHN1YnN0cmluZ0xvZyh0ZXh0OiBzdHJpbmcsIG1heGNoYXJzOiBudW1iZXIgPSAxMjApIDogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGV4dC5sZW5ndGggPiBtYXhjaGFycyA/IHRleHQuc3Vic3RyKDAsIG1heGNoYXJzKSArIFwiWy4uLl1cIiAgOiB0ZXh0O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU3RhbXBhIHVuIGxvZyBhIGNvbnNvbGVcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2UgTWVzc2FnZ2lvIGRhIHN0YW1wYXJlXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgbG9nKG1lc3NhZ2U6IHN0cmluZykge1xyXG4gICAgICAgIGlmICh0aGlzLmRlYnVnKVxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIkBzaWduYWxyLW5vdGlmaWNhdGlvbnM6IFwiICsgbWVzc2FnZSlcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEhlbHBlciBkaSBsb2NhbGl6emF6aW9uZVxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZSBNZXNzYWdnaW8gZGEgdHJhZHVycmVcclxuICAgICAqIFxyXG4gICAgICogQHJldHVybnMge3N0cmluZ30gTWVzc2FnZ2lvIHRyYWRvdHRvXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgbG9jKG1lc3NhZ2U6IHN0cmluZykgOiBzdHJpbmd7XHJcbiAgICAgICAgaWYoIUxvY1ttZXNzYWdlXSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihcIlVudHJhbnNsYXRlZCBtZXNzYWdlOiBcIiArIG1lc3NhZ2UpXHJcbiAgICAgICAgICAgIHJldHVybiBcIlwiO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gTG9jW21lc3NhZ2VdW3RoaXMubG9jYWxlXTtcclxuICAgIH1cclxufSJdfQ==
238
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnbmFsci1ub3RpZmljYXRpb25zLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9zaWduYWxyLW5vdGlmaWNhdGlvbnMvc3JjL2xpYi9zaWduYWxyLW5vdGlmaWNhdGlvbnMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxVQUFVO0FBQ1YsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFbkQsa0NBQWtDO0FBQ2xDLE9BQU8sS0FBSyxPQUFPLE1BQU0sb0JBQW9CLENBQUM7QUFDOUMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDeEQsT0FBTyxFQUFjLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM1RCxPQUFPLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFbkUsVUFBVTtBQUNWLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBRWpFLE9BQU8sRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUUzRyxpQkFBaUI7QUFDakIsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBRTFELHNIQUFzSDtBQUV0SCxNQUFNLE9BQU8sb0JBQW9CO0lBVzdCLDBCQUEwQjtJQUMxQixZQUFvQixVQUE4QixFQUFnQyxZQUFvQixFQUFnQyxPQUFnQixFQUFtQyxPQUFnQixFQUE4QixLQUFjLEVBQTBCLGFBQXNCLEVBQTBCLE1BQWM7UUFBelQsZUFBVSxHQUFWLFVBQVUsQ0FBb0I7UUFBZ0MsaUJBQVksR0FBWixZQUFZLENBQVE7UUFBZ0MsWUFBTyxHQUFQ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QUMsWUFBWTswQ0FBaUMsTUFBTSxTQUFDLFlBQVk7MENBQTZCLE1BQU0sU0FBQyxlQUFlOzBDQUE2QixNQUFNLFNBQUMsVUFBVTswQ0FBMkIsTUFBTSxTQUFDLGNBQWM7eUNBQTJCLE1BQU0sU0FBQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQW5ndWxhclxyXG5pbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3QgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5cclxuLy8gRGlyZXR0aXZlLCBDb21wb25lbnRpLCBMaWJyZXJpZVxyXG5pbXBvcnQgKiBhcyBzaWduYWxSIGZyb20gJ0BtaWNyb3NvZnQvc2lnbmFscic7XHJcbmltcG9ydCB7IEh1YkNvbm5lY3Rpb25TdGF0ZSB9IGZyb20gXCJAbWljcm9zb2Z0L3NpZ25hbHJcIjtcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3ViamVjdCwgRU1QVFksIGZyb20sIG9mIH0gZnJvbSBcInJ4anNcIjtcclxuaW1wb3J0IHsgY2F0Y2hFcnJvciwgY29uY2F0TWFwLCBkZWxheSwgdGFwIH0gZnJvbSBcInJ4anMvb3BlcmF0b3JzXCI7XHJcblxyXG4vLyBNb2RlbGxpXHJcbmltcG9ydCB7IEJhc2VNZXNzYWdlU2VydmljZSB9IGZyb20gJy4vbW9kZWxzL0Jhc2VNZXNzYWdlU2VydmljZSc7XHJcbmltcG9ydCB7IEVuZHBvaW50RGVmIH0gZnJvbSAnLi9tb2RlbHMvRW5kcG9pbnREZWYnO1xyXG5pbXBvcnQgeyBERUJVR19NT0RFLCBFTkRQT0lOVF9VUkwsIExPQ0FMRSwgTUVTU0FHRV9QQUNLLCBTSUdOQUxSX0VOQUJMRUQsIEFVVE9fUkVDT05ORUNUIH0gZnJvbSBcIi4vdG9rZW5zXCI7XHJcblxyXG4vLyBMb2NhbGl6emF6aW9uZVxyXG5pbXBvcnQgeyBMb2MgfSBmcm9tICcuL3NpZ25hbHItbm90aWZpY2F0aW9ucy5zZXJ2aWNlLmxvYyc7XHJcblxyXG4vKiogU2Vydml6aW8gY2hlIGdlc3Rpc2NlIGxhIGNvbXVuaWNhemlvbmUgY29uIHVuIEh1YiBTaWduYWxSIGluIGJhc2UgYWxsZSBjb25maWd1cmF6aW9uaSBmb3JuaXRlIGRhbGwnYXBwbGljYXppb25lICovXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIE5vdGlmaWNhdGlvbnNTZXJ2aWNlIHtcclxuXHJcbiAgICAvKiogQ2FjaGUgZGVnbGkgT2JzZXJ2YWJsZSBnZW5lcmF0aSBpbiBiYXNlIGFnbGkgRW5kcG9pbnQgZGlzcG9uaWJpbGkgKi9cclxuICAgIHByaXZhdGUgbm90aWZpY2F0aW9ucyQ6IHsgW2luZGV4OiBzdHJpbmddOiBTdWJqZWN0PGFueT4gfSA9IHt9O1xyXG5cclxuICAgIC8qKiBDb25uZXNzaW9uZSBTaWduYWxyICovXHJcbiAgICBwcml2YXRlIGNvbm5lY3Rpb246IHNpZ25hbFIuSHViQ29ubmVjdGlvbjtcclxuXHJcbiAgICAvKiogQ29kYSBkaSBjaGlhbWF0ZSBkYSByZWN1cGVyYXJlIHF1YW5kbyBsYSBjb25uZXNzaW9uZSB2aWVuZSBmaW5hbG1lbnRlIGFwZXJ0YSAqL1xyXG4gICAgcHJpdmF0ZSBSZXF1ZXN0c1RvUmVjb3ZlcjogeyBpdGVtOiBFbmRwb2ludERlZjxhbnksIGFueT4sIGR0bzogYW55IH1bXSA9IFtdO1xyXG5cclxuICAgIC8qKiBAaWdub3JlIENvc3RydXR0b3JlICovXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIE1lc3NhZ2VEZWY6IEJhc2VNZXNzYWdlU2VydmljZSwgQEluamVjdChFTkRQT0lOVF9VUkwpIHByaXZhdGUgZW5kcG9pbnRfdXJsOiBzdHJpbmcsIEBJbmplY3QoTUVTU0FHRV9QQUNLKSBwcml2YXRlIG1zZ3BhY2s6IGJvb2xlYW4sIEBJbmplY3QoU0lHTkFMUl9FTkFCTEVEKSBwcml2YXRlIGVuYWJsZWQ6IGJvb2xlYW4sIEBJbmplY3QoREVCVUdfTU9ERSkgcHJpdmF0ZSBkZWJ1ZzogYm9vbGVhbiwgQEluamVjdChBVVRPX1JFQ09OTkVDVCkgYXV0b3JlY29ubmVjdDogYm9vbGVhbiwgQEluamVjdChMT0NBTEUpIHByaXZhdGUgbG9jYWxlOiBzdHJpbmcpIHtcclxuICAgICAgICBpZiAoIXRoaXMuZW5hYmxlZCkge1xyXG4gICAgICAgICAgICB0aGlzLmxvZyh0aGlzLmxvYyhcIlNpZ25hbFIgd29uJ3QgYmUgZW5hYmxlZCBhcyBwZXIgY29uZmlndXJhdGlvblwiKSk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuTWVzc2FnZURlZi5BbGxEZWZpbml0aW9ucy5mb3JFYWNoKGRlZiA9PiB7IHRoaXMubm90aWZpY2F0aW9ucyRbZGVmLmVuZHBvaW50XSA9IG5ldyBTdWJqZWN0PHR5cGVvZiBkZWYuaW5UeXBlRGVmYXVsdD4oKTsgfSk7XHJcblxyXG4gICAgICAgIGxldCBwYXJzOiBzaWduYWxSLklIdHRwQ29ubmVjdGlvbk9wdGlvbnMgPSB7IHNraXBOZWdvdGlhdGlvbjogdHJ1ZSwgdHJhbnNwb3J0OiBzaWduYWxSLkh0dHBUcmFuc3BvcnRUeXBlLldlYlNvY2tldHMsIGxvZ2dlcjogZGVidWcgPyBzaWduYWxSLkxvZ0xldmVsLkRlYnVnIDogc2lnbmFsUi5Mb2dMZXZlbC5Ob25lIH07XHJcbiAgICAgICAgdmFyIGJ1aWxkZXIgPSBuZXcgc2lnbmFsUi5IdWJDb25uZWN0aW9uQnVpbGRlcigpLndpdGhVcmwoXCIvXCIgKyB0aGlzLmVuZHBvaW50X3VybCwgcGFycyk7XHJcblxyXG4gICAgICAgIGlmIChhdXRvcmVjb25uZWN0KSB7XHJcbiAgICAgICAgICAgIHRoaXMubG9nKHRoaXMubG9jKFwiQnVpbGRpbmcgU2lnbmFsUiBIdWIgd2l0aCBBdXRvbWF0aWMgUmVjb25uZWN0aW9uXCIpKTtcclxuICAgICAgICAgICAgLy8gMTAwIHRlbnRhdGl2aSBkaSByaWNvbm5lc3Npb25lLCAxIG9nbmkgNSBzZWNvbmRpXHJcbiAgICAgICAgICAgIGJ1aWxkZXIgPSBidWlsZGVyLndpdGhBdXRvbWF0aWNSZWNvbm5lY3QobmV3IEFycmF5KDEwMCkuZmlsbCg1ICogMTAwMCkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMubXNncGFjaykge1xyXG4gICAgICAgICAgICB0aGlzLmxvZyh0aGlzLmxvYyhcIkJ1aWxkaW5nIFNpZ25hbFIgSHViIHdpdGggTWVzc2FnZVBhY2sgcHJvdG9jb2xcIikpO1xyXG4gICAgICAgICAgICB2YXIgbXBocE1vZHVsZSA9IHJlcXVpcmUoXCJAbWljcm9zb2Z0L3NpZ25hbHItcHJvdG9jb2wtbXNncGFja1wiKTtcclxuICAgICAgICAgICAgYnVpbGRlciA9IGJ1aWxkZXIud2l0aEh1YlByb3RvY29sKG5ldyBtcGhwTW9kdWxlLk1lc3NhZ2VQYWNrSHViUHJvdG9jb2woKSlcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuY29ubmVjdGlvbiA9IGJ1aWxkZXIuYnVpbGQoKTtcclxuICAgICAgICB0aGlzLmNvbm5lY3QoKCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5SZXF1ZXN0c1RvUmVjb3Zlci5sZW5ndGggPT0gMClcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuXHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5SZXF1ZXN0c1RvUmVjb3Zlci5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2codGhpcy5sb2MoXCJSZWNvdmVyaW5nIHJlcXVlc3QgdG8gRW5kcG9pbnRcIikgKyBcIiBcIiArIHRoaXMuUmVxdWVzdHNUb1JlY292ZXJbaV0uaXRlbS5lbmRwb2ludClcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VuZCh0aGlzLlJlcXVlc3RzVG9SZWNvdmVyW2ldLml0ZW0sIHRoaXMuUmVxdWVzdHNUb1JlY292ZXJbaV0uZHRvKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5SZXF1ZXN0c1RvUmVjb3ZlciA9IFtdO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRWZmZXR0dWEgbGEgY29ubmVzc2lvbmUgYWxsJ0h1YiBTaWduYWxyIGUgcmVnaXN0cmEgdHV0dGkgZ2xpIEVuZHBvaW50IHBlciBjdWkgaWwgQmFja2VuZCBjb211bmljYSBjb24gaWwgRnJvbnRlbmQgc3VsbGEgKipjb25uZWN0aW9uKipcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBjb25uZWN0KG9uQ29ubmVjdGVkPzogKCkgPT4gdm9pZCkge1xyXG4gICAgICAgIHRoaXMuY29ubmVjdGlvbi5zdGFydCgpLmNhdGNoKGVyciA9PiBjb25zb2xlLmxvZyhlcnIpKS50aGVuKF8gPT4gb25Db25uZWN0ZWQ/LigpKTtcclxuICAgICAgICB0aGlzLk1lc3NhZ2VEZWYuQWxsRGVmaW5pdGlvbnMuZm9yRWFjaChkID0+IHtcclxuICAgICAgICAgICAgLy9SZWdpc3RybyBzb2xvIGxlIGNvc2UgZGkgSU4sIHF1ZWxsZSBkaSBvdXQgc29ubyBjaGlhbWF0ZSBjaGUgZmFjY2lvIGlvIGFsIEJFIHF1aW5kaSBub24gc2Vydm9ub1xyXG4gICAgICAgICAgICBpZiAoZC5pblR5cGVEZWZhdWx0ICE9PSBudWxsICYmIGQub3V0VHlwZURlZmF1bHQgPT09IG51bGwpXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbm5lY3Rpb24ub24oZC5lbmRwb2ludCwgKG1lc3NhZ2UpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZyh0aGlzLmxvYyhcIlJlcXVlc3QgcmVjZWl2ZWQgZnJvbSB0aGUgc2VydmVyIGZvciBlbmRwb2ludFwiKSArIFwiICdcIiArIGQuZW5kcG9pbnQgKyBcIic6IFwiICsgdGhpcy5zdWJzdHJpbmdMb2coSlNPTi5zdHJpbmdpZnkobWVzc2FnZSkpKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvbnMkW2QuZW5kcG9pbnRdLm5leHQobWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2codGhpcy5sb2MoXCJSZWZ1c2luZyB0byByZWdpc3RlciBlbmRwb2ludFwiKSArIFwiIFwiICsgZC5lbmRwb2ludCArIFwiIFwiICsgdGhpcy5sb2MoXCJiZWNhdXNlIGl0IGlzIG5vdCBkZWNsYXJlZCBhcyBJTiAtIE9OTFlcIikpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRWZmZXR0dWEgdmVyaWZpY2hlIHN1bGxhIGNvbm5lc3Npb25lIGUsIGluIGNhc28gbm9uIGZvc3NlIGNvbGxlZ2F0YSwgdGVudGEgZGkgcmljb25uZXR0ZXJsYVxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZTwnT0snIHwgJ0tPJyB8ICdOTy1PUCc+fSAnT0snIFNlIGxhIGNvbm5lc3Npb25lIMOoIGdpw6AgY29ubmVzc2EgbyDDqCBzdGF0YSByaWNvbm5lc3NhIGNvbiBzdWNjZXNzbywgJ0tPJyBTZSBub24gw6ggc3RhdG8gcG9zc2liaWxlIHJpY29ubmV0dGVyZSBcclxuICAgICAqIHVuYSBjb25uZXNzaW9uZSBkaXNjb25uZXNzYSwgJ05PLU9QJyBzZSBsYSBjb25uZXNpc29uZSDDqCBpbiB1bm8gc3RhdG8gaW50ZXJtZWRpbyBjaGUgbm9uIHB1w7IgZXNzZXJlIG1vZGlmaWNhdG9cclxuICAgICAqL1xyXG4gICAgcHVibGljIGVuc3VyZUNvbm5lY3RlZCgpOiBQcm9taXNlPCdPSycgfCAnS08nIHwgJ05PLU9QJz4ge1xyXG4gICAgICAgIGlmICh0aGlzLmNvbm5lY3Rpb24uc3RhdGUgPT0gSHViQ29ubmVjdGlvblN0YXRlLkRpc2Nvbm5lY3RlZCkge1xyXG4gICAgICAgICAgICB0aGlzLmxvZyh0aGlzLmxvYyhcIkNvbm5lY3Rpb24gbG9zdCBvciBtaXNzaW5nLCByZWNvbm5lY3RpbmcuLi5cIikpO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29ubmVjdGlvbi5zdGFydCgpXHJcbiAgICAgICAgICAgICAgICAudGhlbihfID0+IHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFwiT0tcIik7XHJcbiAgICAgICAgICAgICAgICB9LCBfID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZyh0aGlzLmxvYyhcIkNhbm5vdCByZWNvbm5lY3QgU2lnbmFsUiwgZnJvbnRlbmQgSFVCIG9mZmxpbmVcIikpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoXCJLT1wiKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh0aGlzLmNvbm5lY3Rpb24uc3RhdGUgPT0gSHViQ29ubmVjdGlvblN0YXRlLkNvbm5lY3RlZClcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShcIk9LXCIpO1xyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShcIk5PLU9QXCIpO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIEludmlhIHVuIG1lc3NhZ2dpbyBhbGwnSHViIGRlbCBCYWNrZW5kXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7RW5kcG9pbnREZWY8VE91dCwgYW55Pn0gaXRlbSBFbmRwb2ludCBkYSBjb250YXR0YXJlXHJcbiAgICAgKiBAcGFyYW0ge1RPdXR9IGR0byBEdG8gZGEgaW52aWFyZSBhbGwnRW5kcG9pbnRcclxuICAgICAqL1xyXG4gICAgcHVibGljIHNlbmQ8VE91dD4oaXRlbTogRW5kcG9pbnREZWY8VE91dCwgYW55PiwgZHRvOiBUT3V0KSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmNvbm5lY3Rpb24pIHtcclxuICAgICAgICAgICAgdGhpcy5SZXF1ZXN0c1RvUmVjb3Zlci5wdXNoKHsgaXRlbSwgZHRvIH0pO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXRoaXMuZW5hYmxlZCkge1xyXG4gICAgICAgICAgICB0aGlzLmxvZyh0aGlzLmxvYyhcIlNlbmQgcmVxdWVzdCBpZ25vcmVkIGJlY2F1c2UgU2lnbmFsUiBpcyBub3QgYWN0aXZlIGJ5IGNvbmZpZ3VyYXRpb25cIikpO1xyXG4gICAgICAgICAgICByZXR1cm4gRU1QVFk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5jb25uZWN0aW9uLnN0YXRlID09IEh1YkNvbm5lY3Rpb25TdGF0ZS5Db25uZWN0aW5nIHx8IHRoaXMuY29ubmVjdGlvbi5zdGF0ZSA9PSBIdWJDb25uZWN0aW9uU3RhdGUuUmVjb25uZWN0aW5nIHx8IHRoaXMuY29ubmVjdGlvbi5zdGF0ZSA9PSBIdWJDb25uZWN0aW9uU3RhdGUuRGlzY29ubmVjdGluZykge1xyXG4gICAgICAgICAgICB0aGlzLmxvZyh0aGlzLmxvYyhcIlNlbmQgcmVxdWVzdCBzZW50IGJlZm9yZSBhIGNvbm5lY3Rpb24gd2FzIGluIHN0YWJsZSBTdGF0ZSwgd2FpdGluZyAxIHNlY29uZCBhbmQgcmV0cnlpbmdcIikpO1xyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsgdGhpcy5zZW5kKGl0ZW0sIGR0byk7IH0sIDEwMDApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh0aGlzLmNvbm5lY3Rpb24uc3RhdGUgPT0gSHViQ29ubmVjdGlvblN0YXRlLkRpc2Nvbm5lY3RlZCkge1xyXG4gICAgICAgICAgICB0aGlzLmVuc3VyZUNvbm5lY3RlZCgpLnRoZW4odCA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAodCA9PSBcIktPXCIpIHRoaXMubG9nKHRoaXMubG9jKFwiRVJST1JTIG9uIHJlY29ubmVjdGluZyBiZWZvcmUgcmV0cnlpbmcgYSBzZW5kIGNvbW1hbmQuIFNlbnQgbWVzc2FnZSBXSUxMIEJFIExPU1RcIikpO1xyXG4gICAgICAgICAgICAgICAgZWxzZSB0aGlzLnNlbmQoaXRlbSwgZHRvKTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuY29ubmVjdGlvbi5zZW5kKGl0ZW0uZW5kcG9pbnQsIGR0bykudGhlbihfID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmRlYnVnKVxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuaW5mbyh0aGlzLmxvYyhcIlJlcXVlc3Qgc2VudCB0byBzZXJ2ZXJcIikgKyBcIiAtIFwiICsgaXRlbS5lbmRwb2ludCArIFwiOiBcIiArIHRoaXMuc3Vic3RyaW5nTG9nKEpTT04uc3RyaW5naWZ5KGR0bykpKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW52aWEgdW4gbWVzc2FnZ2lvIGFsbCdIdWIgZGVsIEJhY2tlbmQsIGFzcGV0dGFuZG9zaSB1bmEgcmlzcG9zdGFcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtFbmRwb2ludERlZjxUT3V0LCBUSW4+fSBpdGVtIEVuZHBvaW50IGRhIGNvbnRhdHRhcmVcclxuICAgICAqIEBwYXJhbSB7VE91dH0gZHRvIER0byBkYSBpbnZpYXJlIGFsbCdFbmRwb2ludFxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJucyB7T2JzZXJ2YWJsZTxUSW4+fSBPYnNlcnZhYmxlIHN1IGN1aSBjaSBzaSBwdcOyIHJlZ2lzdHJhcmUgcGVyIHJpY2V2ZXJlIGlsIHJpc3VsdGF0byBkZWxsYSBjaGlhbWF0YVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgaW52b2tlPFRPdXQsIFRJbj4oaXRlbTogRW5kcG9pbnREZWY8VE91dCwgVEluPiwgZHRvOiBUT3V0KTogT2JzZXJ2YWJsZTxUSW4+IHtcclxuICAgICAgICBpZiAoIXRoaXMuZW5hYmxlZCkge1xyXG4gICAgICAgICAgICB0aGlzLmxvZyh0aGlzLmxvYyhcIkludm9rZSByZXF1ZXN0IGlnbm9yZWQgYmVjYXVzZSBTaWduYWxSIGlzIG5vdCBhY3RpdmUgYnkgY29uZmlndXJhdGlvblwiKSk7XHJcbiAgICAgICAgICAgIHJldHVybiBFTVBUWTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmNvbm5lY3Rpb24uc3RhdGUgPT0gSHViQ29ubmVjdGlvblN0YXRlLkNvbm5lY3RpbmcgfHwgdGhpcy5jb25uZWN0aW9uLnN0YXRlID09IEh1YkNvbm5lY3Rpb25TdGF0ZS5SZWNvbm5lY3RpbmcgfHwgdGhpcy5jb25uZWN0aW9uLnN0YXRlID09IEh1YkNvbm5lY3Rpb25TdGF0ZS5EaXNjb25uZWN0aW5nKSB7XHJcbiAgICAgICAgICAgIHRoaXMubG9nKHRoaXMubG9jKFwiSW52b2tlIHJlcXVlc3Qgc2VudCBiZWZvcmUgYSBjb25uZWN0aW9uIHdhcyBpbiBzdGFibGUgU3RhdGUsIHdhaXRpbmcgMSBzZWNvbmQgYW5kIHJldHJ5aW5nXCIpKTtcclxuICAgICAgICAgICAgcmV0dXJuIG9mKCkucGlwZShkZWxheSgxMDAwKSwgY29uY2F0TWFwKCgpID0+IHRoaXMuaW52b2tlKGl0ZW0sIGR0bykpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodGhpcy5jb25uZWN0aW9uLnN0YXRlID09IEh1YkNvbm5lY3Rpb25TdGF0ZS5EaXNjb25uZWN0ZWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZyb20odGhpcy5lbnN1cmVDb25uZWN0ZWQoKSkucGlwZShjb25jYXRNYXAoKHJlcykgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHJlcyA9PSBcIktPXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZyh0aGlzLmxvYyhcIkVSUk9SUyBvbiByZWNvbm5lY3RpbmcgYmVmb3JlIHJldHJ5aW5nIGEgc2VuZCBjb21tYW5kLiBTZW50IG1lc3NhZ2UgV0lMTCBCRSBMT1NUXCIpKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gRU1QVFk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHJldHVybiB0aGlzLmludm9rZShpdGVtLCBkdG8pO1xyXG4gICAgICAgICAgICB9KSlcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmcm9tKHRoaXMuY29ubmVjdGlvbi5pbnZva2U8VEluPihpdGVtLmVuZHBvaW50LCBkdG8pKS5waXBlKFxyXG4gICAgICAgICAgICAgICAgdGFwKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5kZWJ1ZykgY29uc29sZS5sb2codGhpcy5sb2MoXCJSZXF1ZXN0IGludm9rZWQgdG8gc2VydmVyXCIpICsgXCIgLSBcIiArIGl0ZW0uZW5kcG9pbnQgKyBcIjogXCIgKyB0aGlzLnN1YnN0cmluZ0xvZyhKU09OLnN0cmluZ2lmeShkdG8pKSk7XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEhvb2sgcGVyIG9zc2VydmFyZSBpIGRhdGkgc3BlZGl0aSBhZCB1biBFbmRwb2ludCBkYWwgQmFja2VuZFxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge0VuZHBvaW50RGVmPFRJbiwgYW55Pn0gaXRlbSBFbmRwb2ludCBzdSBjdWkgYXNjb2x0YXJlXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm5zIHtPYnNlcnZhYmxlPFRJbj59IE9ic2VydmFibGUgc3UgY3VpIGNpIHNpIHB1w7IgcmVnaXN0cmFyZSBwZXIgcmljZXZlcmUgbCdvZ2dldHRvIGdlbmVyYXRvIGFkIG9nbmkgY2hpYW1hdGEgZGFsIEJhY2tlbmQgYWwgRnJvbnRlbmRcclxuICAgICAqL1xyXG4gICAgcHVibGljIG9ic2VydmU8VEluPihpdGVtOiBFbmRwb2ludERlZjxUSW4sIGFueT4pOiBPYnNlcnZhYmxlPFRJbj4ge1xyXG4gICAgICAgIGlmICghdGhpcy5lbmFibGVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMubG9nKHRoaXMubG9jKFwiT2JzZXJ2ZSByZXF1ZXN0IGlnbm9yZWQgYmVjYXVzZSBTaWduYWxSIGlzIG5vdCBhY3RpdmUgYnkgY29uZmlndXJhdGlvblwiKSk7XHJcbiAgICAgICAgICAgIHJldHVybiBFTVBUWTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMubG9nKHRoaXMubG9jKFwiUmV0dXJuaW5nIG9ic2VydmFibGUgZm9yIHJlcXVpcmVkIGVuZHBvaW50XCIpICsgXCI6IFwiICsgaXRlbS5lbmRwb2ludCk7XHJcbiAgICAgICAgcmV0dXJuIDxPYnNlcnZhYmxlPFRJbj4+dGhpcy5ub3RpZmljYXRpb25zJFtpdGVtLmVuZHBvaW50XTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIERpc2Nvbm5lc3Npb25lIGRlbCBzaXN0ZW1hIGRpIFNpZ25hbFJcclxuICAgICAqIFxyXG4gICAgICogQHJldHVybnMge09ic2VydmFibGU8dm9pZD59IE9ic2VydmFibGUgYSBjdWkgcmVnaXN0cmFyc2kgY2hlIHZpZW5lIGNoaWFtYXRvIHF1YW5kbyBsYSBkaXNjb25uZXNzaW9uZSDDqCB0ZXJtaW5hdGFcclxuICAgICAqL1xyXG4gICAgcHVibGljIGRpc2Nvbm5lY3QoKTogT2JzZXJ2YWJsZTx2b2lkPiB7XHJcbiAgICAgICAgLy9OTy1PUCBzZSBub24gYXR0aXZvXHJcbiAgICAgICAgaWYgKCF0aGlzLmVuYWJsZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5sb2codGhpcy5sb2MoXCJEaXNjb25uZWN0aW9uIHJlcXVlc3QgaWdub3JlZCBiZWNhdXNlIFNpZ25hbFIgaXMgbm90IGFjdGl2ZSBieSBjb25maWd1cmF0aW9uXCIpKTtcclxuICAgICAgICAgICAgcmV0dXJuIEVNUFRZO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGZyb20odGhpcy5jb25uZWN0aW9uLnN0b3AoKSkucGlwZShcclxuICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyLCBjYXVnaHQpID0+IHsgY29uc29sZS5sb2coZXJyKTsgcmV0dXJuIG9mKG51bGwpOyB9KSxcclxuICAgICAgICAgICAgdGFwKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9nKHRoaXMubG9jKFwiRGlzY29ubmVjdGlvbiByZXF1ZXN0IGhvbm9yZWRcIikpO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUYWdsaWEgdW4gbG9nIHRyb3BwbyBsdW5nb1xyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4dCBMb2cgZGEgdGFnbGlhcmVcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBtYXhjaGFycyBOdW1lcm8gbWFzc2ltbyBkaSBjYXJhdHRlcmkgZGEgdGVuZXJlXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IExvZyB0YWdsaWF0b1xyXG4gICAgICovXHJcbiAgICBwcml2YXRlIHN1YnN0cmluZ0xvZyh0ZXh0OiBzdHJpbmcsIG1heGNoYXJzOiBudW1iZXIgPSAxMjApOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0ZXh0Lmxlbmd0aCA+IG1heGNoYXJzID8gdGV4dC5zdWJzdHIoMCwgbWF4Y2hhcnMpICsgXCJbLi4uXVwiIDogdGV4dDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFN0YW1wYSB1biBsb2cgYSBjb25zb2xlXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIE1lc3NhZ2dpbyBkYSBzdGFtcGFyZVxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGxvZyhtZXNzYWdlOiBzdHJpbmcpIHtcclxuICAgICAgICBpZiAodGhpcy5kZWJ1ZylcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCJAc2lnbmFsci1ub3RpZmljYXRpb25zOiBcIiArIG1lc3NhZ2UpXHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBIZWxwZXIgZGkgbG9jYWxpenphemlvbmVcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2UgTWVzc2FnZ2lvIGRhIHRyYWR1cnJlXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IE1lc3NhZ2dpbyB0cmFkb3R0b1xyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGxvYyhtZXNzYWdlOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIGlmICghTG9jW21lc3NhZ2VdKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihcIlVudHJhbnNsYXRlZCBtZXNzYWdlOiBcIiArIG1lc3NhZ2UpXHJcbiAgICAgICAgICAgIHJldHVybiBcIlwiO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gTG9jW21lc3NhZ2VdW3RoaXMubG9jYWxlXTtcclxuICAgIH1cclxufSJdfQ==
@@ -2,6 +2,7 @@
2
2
  * Oggetto statico di localizzazione per i messaggi scritti dal servizio
3
3
  */
4
4
  export const Loc = {
5
+ "Recovering request to Endpoint": { "en-US": "Recovering request to Endpoint", "it-IT": "Recupero richiesta verso l'Endpoint" },
5
6
  "Building SignalR Hub with Automatic Reconnection": { "en-US": "Building SignalR Hub with Automatic Reconnection", "it-IT": "Compilo l'Hub di SignalR con riconnessione automatica", },
6
7
  "Cannot reconnect SignalR, frontend HUB offline": { "en-US": "Cannot reconnect SignalR, frontend HUB offline", "it-IT": "Impossibile riconnettere SignalR, l'Hub del Frontend e' Offline", },
7
8
  "Send request sent before a connection was in stable State, waiting 1 second and retrying": { "en-US": "Send request sent before a connection was in stable State, waiting 1 second and retrying", "it-IT": "Richiesta 'Send' ricevuta prima che la connessione fosse in uno stato stabile, attendo 1 secondo e riprovo", },
@@ -22,4 +23,4 @@ export const Loc = {
22
23
  "Disconnection request honored": { "en-US": "Returning observable for required endpoint", "it-IT": "Restituito observable per l'endpoint richiesto", },
23
24
  "ERRORS on reconnecting before retrying a send command. Sent message WILL BE LOST": { "en-US": "ERRORS on reconnecting before retrying a send command. Sent message WILL BE LOST", "it-IT": "ERRORE nella riconnessione precedente a un nuovo tentativo di 'Send'. Il messaggio in questione SARA' PERSO" }
24
25
  };
25
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnbmFsci1ub3RpZmljYXRpb25zLnNlcnZpY2UubG9jLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvc2lnbmFsci1ub3RpZmljYXRpb25zL3NyYy9saWIvc2lnbmFsci1ub3RpZmljYXRpb25zLnNlcnZpY2UubG9jLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sR0FBRyxHQUFFO0lBQ2Qsa0RBQWtELEVBQUUsRUFBRSxPQUFPLEVBQUUsa0RBQWtELEVBQUUsT0FBTyxFQUFFLHVEQUF1RCxHQUFHO0lBQ3RMLGdEQUFnRCxFQUFFLEVBQUUsT0FBTyxFQUFFLGdEQUFnRCxFQUFFLE9BQU8sRUFBRSxpRUFBaUUsR0FBRztJQUM1TCwwRkFBMEYsRUFBRSxFQUFFLE9BQU8sRUFBRSwwRkFBMEYsRUFBRSxPQUFPLEVBQUUsNEdBQTRHLEdBQUc7SUFDM1QsNEZBQTRGLEVBQUUsRUFBRSxPQUFPLEVBQUUsNEZBQTRGLEVBQUUsT0FBTyxFQUFFLDhHQUE4RyxHQUFHO0lBQ2pVLDZDQUE2QyxFQUFHLEVBQUUsT0FBTyxFQUFFLDZDQUE2QyxFQUFFLE9BQU8sRUFBRSxnREFBZ0QsR0FBRztJQUN0SywrQ0FBK0MsRUFBRSxFQUFFLE9BQU8sRUFBRSwrQ0FBK0MsRUFBRSxPQUFPLEVBQUUsbURBQW1ELEdBQUc7SUFDNUssZ0RBQWdELEVBQUUsRUFBRSxPQUFPLEVBQUUsZ0RBQWdELEVBQUUsT0FBTyxFQUFFLHFEQUFxRCxHQUFHO0lBQ2hMLCtDQUErQyxFQUFFLEVBQUUsT0FBTyxFQUFFLCtDQUErQyxFQUFFLE9BQU8sRUFBRSw0Q0FBNEMsR0FBRztJQUNySywrQkFBK0IsRUFBRSxFQUFFLE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxPQUFPLEVBQUUsa0NBQWtDLEdBQUc7SUFDM0gseUNBQXlDLEVBQUUsRUFBRSxPQUFPLEVBQUUseUNBQXlDLEVBQUUsT0FBTyxFQUFFLHlDQUF5QyxHQUFHO0lBQ3RKLHFFQUFxRSxFQUFFLEVBQUUsT0FBTyxFQUFFLHFFQUFxRSxFQUFFLE9BQU8sRUFBRSwwRUFBMEUsR0FBRztJQUMvTyx3QkFBd0IsRUFBRSxFQUFFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxPQUFPLEVBQUUsNkJBQTZCLEdBQUc7SUFDeEcsdUVBQXVFLEVBQUUsRUFBRSxPQUFPLEVBQUUsdUVBQXVFLEVBQUUsT0FBTyxFQUFFLDRFQUE0RSxHQUFHO0lBQ3JQLDJCQUEyQixFQUFFLEVBQUUsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE9BQU8sRUFBRSxvQ0FBb0MsR0FBRztJQUNySCx3RUFBd0UsRUFBRSxFQUFFLE9BQU8sRUFBRSx3RUFBd0UsRUFBRSxPQUFPLEVBQUUsd0VBQXdFLEdBQUc7SUFDblAsNENBQTRDLEVBQUUsRUFBRSxPQUFPLEVBQUUsNENBQTRDLEVBQUUsT0FBTyxFQUFFLG1EQUFtRCxHQUFHO0lBQ3RLLDhFQUE4RSxFQUFFLEVBQUUsT0FBTyxFQUFFLDhFQUE4RSxFQUFFLE9BQU8sRUFBRSxzRkFBc0YsR0FBRztJQUM3USwrQkFBK0IsRUFBRSxFQUFFLE9BQU8sRUFBRSw0Q0FBNEMsRUFBRSxPQUFPLEVBQUUsZ0RBQWdELEdBQUc7SUFDdEosa0ZBQWtGLEVBQUUsRUFBRSxPQUFPLEVBQUUsa0ZBQWtGLEVBQUUsT0FBTyxFQUFFLDZHQUE2RyxFQUFDO0NBQzdTLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogT2dnZXR0byBzdGF0aWNvIGRpIGxvY2FsaXp6YXppb25lIHBlciBpIG1lc3NhZ2dpIHNjcml0dGkgZGFsIHNlcnZpemlvXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgTG9jID17XHJcbiAgICBcIkJ1aWxkaW5nIFNpZ25hbFIgSHViIHdpdGggQXV0b21hdGljIFJlY29ubmVjdGlvblwiOiB7IFwiZW4tVVNcIjogXCJCdWlsZGluZyBTaWduYWxSIEh1YiB3aXRoIEF1dG9tYXRpYyBSZWNvbm5lY3Rpb25cIiwgXCJpdC1JVFwiOiBcIkNvbXBpbG8gbCdIdWIgZGkgU2lnbmFsUiBjb24gcmljb25uZXNzaW9uZSBhdXRvbWF0aWNhXCIsIH0sXHJcbiAgICBcIkNhbm5vdCByZWNvbm5lY3QgU2lnbmFsUiwgZnJvbnRlbmQgSFVCIG9mZmxpbmVcIjogeyBcImVuLVVTXCI6IFwiQ2Fubm90IHJlY29ubmVjdCBTaWduYWxSLCBmcm9udGVuZCBIVUIgb2ZmbGluZVwiLCBcIml0LUlUXCI6IFwiSW1wb3NzaWJpbGUgcmljb25uZXR0ZXJlIFNpZ25hbFIsIGwnSHViIGRlbCBGcm9udGVuZCBlJyBPZmZsaW5lXCIsIH0sXHJcbiAgICBcIlNlbmQgcmVxdWVzdCBzZW50IGJlZm9yZSBhIGNvbm5lY3Rpb24gd2FzIGluIHN0YWJsZSBTdGF0ZSwgd2FpdGluZyAxIHNlY29uZCBhbmQgcmV0cnlpbmdcIjogeyBcImVuLVVTXCI6IFwiU2VuZCByZXF1ZXN0IHNlbnQgYmVmb3JlIGEgY29ubmVjdGlvbiB3YXMgaW4gc3RhYmxlIFN0YXRlLCB3YWl0aW5nIDEgc2Vjb25kIGFuZCByZXRyeWluZ1wiLCBcIml0LUlUXCI6IFwiUmljaGllc3RhICdTZW5kJyByaWNldnV0YSBwcmltYSBjaGUgbGEgY29ubmVzc2lvbmUgZm9zc2UgaW4gdW5vIHN0YXRvIHN0YWJpbGUsIGF0dGVuZG8gMSBzZWNvbmRvIGUgcmlwcm92b1wiLCB9LFxyXG4gICAgXCJJbnZva2UgcmVxdWVzdCBzZW50IGJlZm9yZSBhIGNvbm5lY3Rpb24gd2FzIGluIHN0YWJsZSBTdGF0ZSwgd2FpdGluZyAxIHNlY29uZCBhbmQgcmV0cnlpbmdcIjogeyBcImVuLVVTXCI6IFwiSW52b2tlIHJlcXVlc3Qgc2VudCBiZWZvcmUgYSBjb25uZWN0aW9uIHdhcyBpbiBzdGFibGUgU3RhdGUsIHdhaXRpbmcgMSBzZWNvbmQgYW5kIHJldHJ5aW5nXCIsIFwiaXQtSVRcIjogXCJSaWNoaWVzdGEgJ0ludm9rZScgcmljZXZ1dGEgcHJpbWEgY2hlIGxhIGNvbm5lc3Npb25lIGZvc3NlIGluIHVubyBzdGF0byBzdGFiaWxlLCBhdHRlbmRvIDEgc2Vjb25kbyBlIHJpcHJvdm9cIiwgfSxcclxuICAgIFwiQ29ubmVjdGlvbiBsb3N0IG9yIG1pc3NpbmcsIHJlY29ubmVjdGluZy4uLlwiIDogeyBcImVuLVVTXCI6IFwiQ29ubmVjdGlvbiBsb3N0IG9yIG1pc3NpbmcsIHJlY29ubmVjdGluZy4uLlwiLCBcIml0LUlUXCI6IFwiQ29ubmVzc2lvbmUgcGVyc2EgbyBtYW5jYW50ZSwgbWkgcmljb25uZXR0by4uLlwiLCB9LFxyXG4gICAgXCJTaWduYWxSIHdvbid0IGJlIGVuYWJsZWQgYXMgcGVyIGNvbmZpZ3VyYXRpb25cIjogeyBcImVuLVVTXCI6IFwiU2lnbmFsUiB3b24ndCBiZSBlbmFibGVkIGFzIHBlciBjb25maWd1cmF0aW9uXCIsIFwiaXQtSVRcIjogXCJTaWduYWxSIG5vbiB2ZXJyw6AgYXR0aXZhdG8gY29tZSBkYSBjb25maWd1cmF6aW9uZVwiLCB9LFxyXG4gICAgXCJCdWlsZGluZyBTaWduYWxSIEh1YiB3aXRoIE1lc3NhZ2VQYWNrIHByb3RvY29sXCI6IHsgXCJlbi1VU1wiOiBcIkJ1aWxkaW5nIFNpZ25hbFIgSHViIHdpdGggTWVzc2FnZVBhY2sgcHJvdG9jb2xcIiwgXCJpdC1JVFwiOiBcIkNvbXBpbG8gbCdIdWIgZGkgU2lnbmFsUiBjb24gcHJvdG9jb2xsbyBNZXNzYWdlUGFja1wiLCB9LFxyXG4gICAgXCJSZXF1ZXN0IHJlY2VpdmVkIGZyb20gdGhlIHNlcnZlciBmb3IgZW5kcG9pbnRcIjogeyBcImVuLVVTXCI6IFwiUmVxdWVzdCByZWNlaXZlZCBmcm9tIHRoZSBzZXJ2ZXIgZm9yIGVuZHBvaW50XCIsIFwiaXQtSVRcIjogXCJSaWNoaWVzdGEgcmljZXZ1dGEgZGFsIHNlcnZlciBwZXIgZW5kcG9pbnRcIiwgfSxcclxuICAgIFwiUmVmdXNpbmcgdG8gcmVnaXN0ZXIgZW5kcG9pbnRcIjogeyBcImVuLVVTXCI6IFwiUmVmdXNpbmcgdG8gcmVnaXN0ZXIgZW5kcG9pbnRcIiwgXCJpdC1JVFwiOiBcIlJpZml1dG8gZGkgcmVnaXN0cmFyZSBsJ2VuZHBvaW50XCIsIH0sXHJcbiAgICBcImJlY2F1c2UgaXQgaXMgbm90IGRlY2xhcmVkIGFzIElOIC0gT05MWVwiOiB7IFwiZW4tVVNcIjogXCJiZWNhdXNlIGl0IGlzIG5vdCBkZWNsYXJlZCBhcyBJTiAtIE9OTFlcIiwgXCJpdC1JVFwiOiBcImluIHF1YW50byBub24gw6ggcmVnaXN0cmF0byBzb2xvIGNvbWUgSU5cIiwgfSxcclxuICAgIFwiU2VuZCByZXF1ZXN0IGlnbm9yZWQgYmVjYXVzZSBTaWduYWxSIGlzIG5vdCBhY3RpdmUgYnkgY29uZmlndXJhdGlvblwiOiB7IFwiZW4tVVNcIjogXCJTZW5kIHJlcXVlc3QgaWdub3JlZCBiZWNhdXNlIFNpZ25hbFIgaXMgbm90IGFjdGl2ZSBieSBjb25maWd1cmF0aW9uXCIsIFwiaXQtSVRcIjogXCJSaWNoaWVzdGEgc2VuZCBpZ25vcmF0YSBpbiBxdWFudG8gU2lnbmFsUiBub24gw6ggYXR0aXZvIGRhIGNvbmZpZ3VyYXppb25lXCIsIH0sXHJcbiAgICBcIlJlcXVlc3Qgc2VudCB0byBzZXJ2ZXJcIjogeyBcImVuLVVTXCI6IFwiUmVxdWVzdCBzZW50IHRvIHNlcnZlclwiLCBcIml0LUlUXCI6IFwiUmljaGllc3RhIGludmlhdGEgYWwgc2VydmVyXCIsIH0sXHJcbiAgICBcIkludm9rZSByZXF1ZXN0IGlnbm9yZWQgYmVjYXVzZSBTaWduYWxSIGlzIG5vdCBhY3RpdmUgYnkgY29uZmlndXJhdGlvblwiOiB7IFwiZW4tVVNcIjogXCJJbnZva2UgcmVxdWVzdCBpZ25vcmVkIGJlY2F1c2UgU2lnbmFsUiBpcyBub3QgYWN0aXZlIGJ5IGNvbmZpZ3VyYXRpb25cIiwgXCJpdC1JVFwiOiBcIlJpY2hpZXN0YSBpbnZva2UgaWdub3JhdGEgaW4gcXVhbnRvIFNpZ25hbFIgbm9uIMOoIGF0dGl2byBkYSBjb25maWd1cmF6aW9uZVwiLCB9LFxyXG4gICAgXCJSZXF1ZXN0IGludm9rZWQgdG8gc2VydmVyXCI6IHsgXCJlbi1VU1wiOiBcIlJlcXVlc3QgaW52b2tlZCB0byBzZXJ2ZXJcIiwgXCJpdC1JVFwiOiBcIlJpY2hpZXN0YSBpbnZva2UgaW52aWF0YSBhbCBzZXJ2ZXJcIiwgfSxcclxuICAgIFwiT2JzZXJ2ZSByZXF1ZXN0IGlnbm9yZWQgYmVjYXVzZSBTaWduYWxSIGlzIG5vdCBhY3RpdmUgYnkgY29uZmlndXJhdGlvblwiOiB7IFwiZW4tVVNcIjogXCJPYnNlcnZlIHJlcXVlc3QgaWdub3JlZCBiZWNhdXNlIFNpZ25hbFIgaXMgbm90IGFjdGl2ZSBieSBjb25maWd1cmF0aW9uXCIsIFwiaXQtSVRcIjogXCJPc3NlcnZhemlvbmUgaWdub3JhdGEgaW4gcXVhbnRvIFNpZ25hbFIgbm9uIMOoIGF0dGl2byBkYSBjb25maWd1cmF6aW9uZVwiLCB9LFxyXG4gICAgXCJSZXR1cm5pbmcgb2JzZXJ2YWJsZSBmb3IgcmVxdWlyZWQgZW5kcG9pbnRcIjogeyBcImVuLVVTXCI6IFwiUmV0dXJuaW5nIG9ic2VydmFibGUgZm9yIHJlcXVpcmVkIGVuZHBvaW50XCIsIFwiaXQtSVRcIjogXCJSZXN0aXR1aXNjbyBsJ29ic2VydmFibGUgcGVyIGwnZW5kcG9pbnQgcmljaGllc3RvXCIsIH0sXHJcbiAgICBcIkRpc2Nvbm5lY3Rpb24gcmVxdWVzdCBpZ25vcmVkIGJlY2F1c2UgU2lnbmFsUiBpcyBub3QgYWN0aXZlIGJ5IGNvbmZpZ3VyYXRpb25cIjogeyBcImVuLVVTXCI6IFwiRGlzY29ubmVjdGlvbiByZXF1ZXN0IGlnbm9yZWQgYmVjYXVzZSBTaWduYWxSIGlzIG5vdCBhY3RpdmUgYnkgY29uZmlndXJhdGlvblwiLCBcIml0LUlUXCI6IFwiUmljaGllc3RhIGRpIGRpc2Nvbm5lc2lvbmUgaWdub3JhdGEgaW4gcXVhbnRvIFNpZ25hbFIgbm9uIMOoIGF0dGl2byBkYSBjb25maWd1cmF6aW9uZVwiLCB9LFxyXG4gICAgXCJEaXNjb25uZWN0aW9uIHJlcXVlc3QgaG9ub3JlZFwiOiB7IFwiZW4tVVNcIjogXCJSZXR1cm5pbmcgb2JzZXJ2YWJsZSBmb3IgcmVxdWlyZWQgZW5kcG9pbnRcIiwgXCJpdC1JVFwiOiBcIlJlc3RpdHVpdG8gb2JzZXJ2YWJsZSBwZXIgbCdlbmRwb2ludCByaWNoaWVzdG9cIiwgfSxcclxuICAgIFwiRVJST1JTIG9uIHJlY29ubmVjdGluZyBiZWZvcmUgcmV0cnlpbmcgYSBzZW5kIGNvbW1hbmQuIFNlbnQgbWVzc2FnZSBXSUxMIEJFIExPU1RcIjogeyBcImVuLVVTXCI6IFwiRVJST1JTIG9uIHJlY29ubmVjdGluZyBiZWZvcmUgcmV0cnlpbmcgYSBzZW5kIGNvbW1hbmQuIFNlbnQgbWVzc2FnZSBXSUxMIEJFIExPU1RcIiwgXCJpdC1JVFwiOiBcIkVSUk9SRSBuZWxsYSByaWNvbm5lc3Npb25lIHByZWNlZGVudGUgYSB1biBudW92byB0ZW50YXRpdm8gZGkgJ1NlbmQnLiBJbCBtZXNzYWdnaW8gaW4gcXVlc3Rpb25lIFNBUkEnIFBFUlNPXCJ9XHJcbn0iXX0=
26
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnbmFsci1ub3RpZmljYXRpb25zLnNlcnZpY2UubG9jLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvc2lnbmFsci1ub3RpZmljYXRpb25zL3NyYy9saWIvc2lnbmFsci1ub3RpZmljYXRpb25zLnNlcnZpY2UubG9jLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sR0FBRyxHQUFFO0lBQ2QsZ0NBQWdDLEVBQUUsRUFBQyxPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsT0FBTyxFQUFFLHFDQUFxQyxFQUFDO0lBQzdILGtEQUFrRCxFQUFFLEVBQUUsT0FBTyxFQUFFLGtEQUFrRCxFQUFFLE9BQU8sRUFBRSx1REFBdUQsR0FBRztJQUN0TCxnREFBZ0QsRUFBRSxFQUFFLE9BQU8sRUFBRSxnREFBZ0QsRUFBRSxPQUFPLEVBQUUsaUVBQWlFLEdBQUc7SUFDNUwsMEZBQTBGLEVBQUUsRUFBRSxPQUFPLEVBQUUsMEZBQTBGLEVBQUUsT0FBTyxFQUFFLDRHQUE0RyxHQUFHO0lBQzNULDRGQUE0RixFQUFFLEVBQUUsT0FBTyxFQUFFLDRGQUE0RixFQUFFLE9BQU8sRUFBRSw4R0FBOEcsR0FBRztJQUNqVSw2Q0FBNkMsRUFBRyxFQUFFLE9BQU8sRUFBRSw2Q0FBNkMsRUFBRSxPQUFPLEVBQUUsZ0RBQWdELEdBQUc7SUFDdEssK0NBQStDLEVBQUUsRUFBRSxPQUFPLEVBQUUsK0NBQStDLEVBQUUsT0FBTyxFQUFFLG1EQUFtRCxHQUFHO0lBQzVLLGdEQUFnRCxFQUFFLEVBQUUsT0FBTyxFQUFFLGdEQUFnRCxFQUFFLE9BQU8sRUFBRSxxREFBcUQsR0FBRztJQUNoTCwrQ0FBK0MsRUFBRSxFQUFFLE9BQU8sRUFBRSwrQ0FBK0MsRUFBRSxPQUFPLEVBQUUsNENBQTRDLEdBQUc7SUFDckssK0JBQStCLEVBQUUsRUFBRSxPQUFPLEVBQUUsK0JBQStCLEVBQUUsT0FBTyxFQUFFLGtDQUFrQyxHQUFHO0lBQzNILHlDQUF5QyxFQUFFLEVBQUUsT0FBTyxFQUFFLHlDQUF5QyxFQUFFLE9BQU8sRUFBRSx5Q0FBeUMsR0FBRztJQUN0SixxRUFBcUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxxRUFBcUUsRUFBRSxPQUFPLEVBQUUsMEVBQTBFLEdBQUc7SUFDL08sd0JBQXdCLEVBQUUsRUFBRSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsT0FBTyxFQUFFLDZCQUE2QixHQUFHO0lBQ3hHLHVFQUF1RSxFQUFFLEVBQUUsT0FBTyxFQUFFLHVFQUF1RSxFQUFFLE9BQU8sRUFBRSw0RUFBNEUsR0FBRztJQUNyUCwyQkFBMkIsRUFBRSxFQUFFLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxPQUFPLEVBQUUsb0NBQW9DLEdBQUc7SUFDckgsd0VBQXdFLEVBQUUsRUFBRSxPQUFPLEVBQUUsd0VBQXdFLEVBQUUsT0FBTyxFQUFFLHdFQUF3RSxHQUFHO0lBQ25QLDRDQUE0QyxFQUFFLEVBQUUsT0FBTyxFQUFFLDRDQUE0QyxFQUFFLE9BQU8sRUFBRSxtREFBbUQsR0FBRztJQUN0Syw4RUFBOEUsRUFBRSxFQUFFLE9BQU8sRUFBRSw4RUFBOEUsRUFBRSxPQUFPLEVBQUUsc0ZBQXNGLEdBQUc7SUFDN1EsK0JBQStCLEVBQUUsRUFBRSxPQUFPLEVBQUUsNENBQTRDLEVBQUUsT0FBTyxFQUFFLGdEQUFnRCxHQUFHO0lBQ3RKLGtGQUFrRixFQUFFLEVBQUUsT0FBTyxFQUFFLGtGQUFrRixFQUFFLE9BQU8sRUFBRSw2R0FBNkcsRUFBQztDQUM3UyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIE9nZ2V0dG8gc3RhdGljbyBkaSBsb2NhbGl6emF6aW9uZSBwZXIgaSBtZXNzYWdnaSBzY3JpdHRpIGRhbCBzZXJ2aXppb1xyXG4gKi9cclxuZXhwb3J0IGNvbnN0IExvYyA9e1xyXG4gICAgXCJSZWNvdmVyaW5nIHJlcXVlc3QgdG8gRW5kcG9pbnRcIjoge1wiZW4tVVNcIjogXCJSZWNvdmVyaW5nIHJlcXVlc3QgdG8gRW5kcG9pbnRcIiwgXCJpdC1JVFwiOiBcIlJlY3VwZXJvIHJpY2hpZXN0YSB2ZXJzbyBsJ0VuZHBvaW50XCJ9LFxyXG4gICAgXCJCdWlsZGluZyBTaWduYWxSIEh1YiB3aXRoIEF1dG9tYXRpYyBSZWNvbm5lY3Rpb25cIjogeyBcImVuLVVTXCI6IFwiQnVpbGRpbmcgU2lnbmFsUiBIdWIgd2l0aCBBdXRvbWF0aWMgUmVjb25uZWN0aW9uXCIsIFwiaXQtSVRcIjogXCJDb21waWxvIGwnSHViIGRpIFNpZ25hbFIgY29uIHJpY29ubmVzc2lvbmUgYXV0b21hdGljYVwiLCB9LFxyXG4gICAgXCJDYW5ub3QgcmVjb25uZWN0IFNpZ25hbFIsIGZyb250ZW5kIEhVQiBvZmZsaW5lXCI6IHsgXCJlbi1VU1wiOiBcIkNhbm5vdCByZWNvbm5lY3QgU2lnbmFsUiwgZnJvbnRlbmQgSFVCIG9mZmxpbmVcIiwgXCJpdC1JVFwiOiBcIkltcG9zc2liaWxlIHJpY29ubmV0dGVyZSBTaWduYWxSLCBsJ0h1YiBkZWwgRnJvbnRlbmQgZScgT2ZmbGluZVwiLCB9LFxyXG4gICAgXCJTZW5kIHJlcXVlc3Qgc2VudCBiZWZvcmUgYSBjb25uZWN0aW9uIHdhcyBpbiBzdGFibGUgU3RhdGUsIHdhaXRpbmcgMSBzZWNvbmQgYW5kIHJldHJ5aW5nXCI6IHsgXCJlbi1VU1wiOiBcIlNlbmQgcmVxdWVzdCBzZW50IGJlZm9yZSBhIGNvbm5lY3Rpb24gd2FzIGluIHN0YWJsZSBTdGF0ZSwgd2FpdGluZyAxIHNlY29uZCBhbmQgcmV0cnlpbmdcIiwgXCJpdC1JVFwiOiBcIlJpY2hpZXN0YSAnU2VuZCcgcmljZXZ1dGEgcHJpbWEgY2hlIGxhIGNvbm5lc3Npb25lIGZvc3NlIGluIHVubyBzdGF0byBzdGFiaWxlLCBhdHRlbmRvIDEgc2Vjb25kbyBlIHJpcHJvdm9cIiwgfSxcclxuICAgIFwiSW52b2tlIHJlcXVlc3Qgc2VudCBiZWZvcmUgYSBjb25uZWN0aW9uIHdhcyBpbiBzdGFibGUgU3RhdGUsIHdhaXRpbmcgMSBzZWNvbmQgYW5kIHJldHJ5aW5nXCI6IHsgXCJlbi1VU1wiOiBcIkludm9rZSByZXF1ZXN0IHNlbnQgYmVmb3JlIGEgY29ubmVjdGlvbiB3YXMgaW4gc3RhYmxlIFN0YXRlLCB3YWl0aW5nIDEgc2Vjb25kIGFuZCByZXRyeWluZ1wiLCBcIml0LUlUXCI6IFwiUmljaGllc3RhICdJbnZva2UnIHJpY2V2dXRhIHByaW1hIGNoZSBsYSBjb25uZXNzaW9uZSBmb3NzZSBpbiB1bm8gc3RhdG8gc3RhYmlsZSwgYXR0ZW5kbyAxIHNlY29uZG8gZSByaXByb3ZvXCIsIH0sXHJcbiAgICBcIkNvbm5lY3Rpb24gbG9zdCBvciBtaXNzaW5nLCByZWNvbm5lY3RpbmcuLi5cIiA6IHsgXCJlbi1VU1wiOiBcIkNvbm5lY3Rpb24gbG9zdCBvciBtaXNzaW5nLCByZWNvbm5lY3RpbmcuLi5cIiwgXCJpdC1JVFwiOiBcIkNvbm5lc3Npb25lIHBlcnNhIG8gbWFuY2FudGUsIG1pIHJpY29ubmV0dG8uLi5cIiwgfSxcclxuICAgIFwiU2lnbmFsUiB3b24ndCBiZSBlbmFibGVkIGFzIHBlciBjb25maWd1cmF0aW9uXCI6IHsgXCJlbi1VU1wiOiBcIlNpZ25hbFIgd29uJ3QgYmUgZW5hYmxlZCBhcyBwZXIgY29uZmlndXJhdGlvblwiLCBcIml0LUlUXCI6IFwiU2lnbmFsUiBub24gdmVycsOgIGF0dGl2YXRvIGNvbWUgZGEgY29uZmlndXJhemlvbmVcIiwgfSxcclxuICAgIFwiQnVpbGRpbmcgU2lnbmFsUiBIdWIgd2l0aCBNZXNzYWdlUGFjayBwcm90b2NvbFwiOiB7IFwiZW4tVVNcIjogXCJCdWlsZGluZyBTaWduYWxSIEh1YiB3aXRoIE1lc3NhZ2VQYWNrIHByb3RvY29sXCIsIFwiaXQtSVRcIjogXCJDb21waWxvIGwnSHViIGRpIFNpZ25hbFIgY29uIHByb3RvY29sbG8gTWVzc2FnZVBhY2tcIiwgfSxcclxuICAgIFwiUmVxdWVzdCByZWNlaXZlZCBmcm9tIHRoZSBzZXJ2ZXIgZm9yIGVuZHBvaW50XCI6IHsgXCJlbi1VU1wiOiBcIlJlcXVlc3QgcmVjZWl2ZWQgZnJvbSB0aGUgc2VydmVyIGZvciBlbmRwb2ludFwiLCBcIml0LUlUXCI6IFwiUmljaGllc3RhIHJpY2V2dXRhIGRhbCBzZXJ2ZXIgcGVyIGVuZHBvaW50XCIsIH0sXHJcbiAgICBcIlJlZnVzaW5nIHRvIHJlZ2lzdGVyIGVuZHBvaW50XCI6IHsgXCJlbi1VU1wiOiBcIlJlZnVzaW5nIHRvIHJlZ2lzdGVyIGVuZHBvaW50XCIsIFwiaXQtSVRcIjogXCJSaWZpdXRvIGRpIHJlZ2lzdHJhcmUgbCdlbmRwb2ludFwiLCB9LFxyXG4gICAgXCJiZWNhdXNlIGl0IGlzIG5vdCBkZWNsYXJlZCBhcyBJTiAtIE9OTFlcIjogeyBcImVuLVVTXCI6IFwiYmVjYXVzZSBpdCBpcyBub3QgZGVjbGFyZWQgYXMgSU4gLSBPTkxZXCIsIFwiaXQtSVRcIjogXCJpbiBxdWFudG8gbm9uIMOoIHJlZ2lzdHJhdG8gc29sbyBjb21lIElOXCIsIH0sXHJcbiAgICBcIlNlbmQgcmVxdWVzdCBpZ25vcmVkIGJlY2F1c2UgU2lnbmFsUiBpcyBub3QgYWN0aXZlIGJ5IGNvbmZpZ3VyYXRpb25cIjogeyBcImVuLVVTXCI6IFwiU2VuZCByZXF1ZXN0IGlnbm9yZWQgYmVjYXVzZSBTaWduYWxSIGlzIG5vdCBhY3RpdmUgYnkgY29uZmlndXJhdGlvblwiLCBcIml0LUlUXCI6IFwiUmljaGllc3RhIHNlbmQgaWdub3JhdGEgaW4gcXVhbnRvIFNpZ25hbFIgbm9uIMOoIGF0dGl2byBkYSBjb25maWd1cmF6aW9uZVwiLCB9LFxyXG4gICAgXCJSZXF1ZXN0IHNlbnQgdG8gc2VydmVyXCI6IHsgXCJlbi1VU1wiOiBcIlJlcXVlc3Qgc2VudCB0byBzZXJ2ZXJcIiwgXCJpdC1JVFwiOiBcIlJpY2hpZXN0YSBpbnZpYXRhIGFsIHNlcnZlclwiLCB9LFxyXG4gICAgXCJJbnZva2UgcmVxdWVzdCBpZ25vcmVkIGJlY2F1c2UgU2lnbmFsUiBpcyBub3QgYWN0aXZlIGJ5IGNvbmZpZ3VyYXRpb25cIjogeyBcImVuLVVTXCI6IFwiSW52b2tlIHJlcXVlc3QgaWdub3JlZCBiZWNhdXNlIFNpZ25hbFIgaXMgbm90IGFjdGl2ZSBieSBjb25maWd1cmF0aW9uXCIsIFwiaXQtSVRcIjogXCJSaWNoaWVzdGEgaW52b2tlIGlnbm9yYXRhIGluIHF1YW50byBTaWduYWxSIG5vbiDDqCBhdHRpdm8gZGEgY29uZmlndXJhemlvbmVcIiwgfSxcclxuICAgIFwiUmVxdWVzdCBpbnZva2VkIHRvIHNlcnZlclwiOiB7IFwiZW4tVVNcIjogXCJSZXF1ZXN0IGludm9rZWQgdG8gc2VydmVyXCIsIFwiaXQtSVRcIjogXCJSaWNoaWVzdGEgaW52b2tlIGludmlhdGEgYWwgc2VydmVyXCIsIH0sXHJcbiAgICBcIk9ic2VydmUgcmVxdWVzdCBpZ25vcmVkIGJlY2F1c2UgU2lnbmFsUiBpcyBub3QgYWN0aXZlIGJ5IGNvbmZpZ3VyYXRpb25cIjogeyBcImVuLVVTXCI6IFwiT2JzZXJ2ZSByZXF1ZXN0IGlnbm9yZWQgYmVjYXVzZSBTaWduYWxSIGlzIG5vdCBhY3RpdmUgYnkgY29uZmlndXJhdGlvblwiLCBcIml0LUlUXCI6IFwiT3NzZXJ2YXppb25lIGlnbm9yYXRhIGluIHF1YW50byBTaWduYWxSIG5vbiDDqCBhdHRpdm8gZGEgY29uZmlndXJhemlvbmVcIiwgfSxcclxuICAgIFwiUmV0dXJuaW5nIG9ic2VydmFibGUgZm9yIHJlcXVpcmVkIGVuZHBvaW50XCI6IHsgXCJlbi1VU1wiOiBcIlJldHVybmluZyBvYnNlcnZhYmxlIGZvciByZXF1aXJlZCBlbmRwb2ludFwiLCBcIml0LUlUXCI6IFwiUmVzdGl0dWlzY28gbCdvYnNlcnZhYmxlIHBlciBsJ2VuZHBvaW50IHJpY2hpZXN0b1wiLCB9LFxyXG4gICAgXCJEaXNjb25uZWN0aW9uIHJlcXVlc3QgaWdub3JlZCBiZWNhdXNlIFNpZ25hbFIgaXMgbm90IGFjdGl2ZSBieSBjb25maWd1cmF0aW9uXCI6IHsgXCJlbi1VU1wiOiBcIkRpc2Nvbm5lY3Rpb24gcmVxdWVzdCBpZ25vcmVkIGJlY2F1c2UgU2lnbmFsUiBpcyBub3QgYWN0aXZlIGJ5IGNvbmZpZ3VyYXRpb25cIiwgXCJpdC1JVFwiOiBcIlJpY2hpZXN0YSBkaSBkaXNjb25uZXNpb25lIGlnbm9yYXRhIGluIHF1YW50byBTaWduYWxSIG5vbiDDqCBhdHRpdm8gZGEgY29uZmlndXJhemlvbmVcIiwgfSxcclxuICAgIFwiRGlzY29ubmVjdGlvbiByZXF1ZXN0IGhvbm9yZWRcIjogeyBcImVuLVVTXCI6IFwiUmV0dXJuaW5nIG9ic2VydmFibGUgZm9yIHJlcXVpcmVkIGVuZHBvaW50XCIsIFwiaXQtSVRcIjogXCJSZXN0aXR1aXRvIG9ic2VydmFibGUgcGVyIGwnZW5kcG9pbnQgcmljaGllc3RvXCIsIH0sXHJcbiAgICBcIkVSUk9SUyBvbiByZWNvbm5lY3RpbmcgYmVmb3JlIHJldHJ5aW5nIGEgc2VuZCBjb21tYW5kLiBTZW50IG1lc3NhZ2UgV0lMTCBCRSBMT1NUXCI6IHsgXCJlbi1VU1wiOiBcIkVSUk9SUyBvbiByZWNvbm5lY3RpbmcgYmVmb3JlIHJldHJ5aW5nIGEgc2VuZCBjb21tYW5kLiBTZW50IG1lc3NhZ2UgV0lMTCBCRSBMT1NUXCIsIFwiaXQtSVRcIjogXCJFUlJPUkUgbmVsbGEgcmljb25uZXNzaW9uZSBwcmVjZWRlbnRlIGEgdW4gbnVvdm8gdGVudGF0aXZvIGRpICdTZW5kJy4gSWwgbWVzc2FnZ2lvIGluIHF1ZXN0aW9uZSBTQVJBJyBQRVJTT1wifVxyXG59Il19
@@ -51,6 +51,7 @@ const AUTO_RECONNECT = new InjectionToken('AUTO_RECONNECT');
51
51
  * Oggetto statico di localizzazione per i messaggi scritti dal servizio
52
52
  */
53
53
  const Loc = {
54
+ "Recovering request to Endpoint": { "en-US": "Recovering request to Endpoint", "it-IT": "Recupero richiesta verso l'Endpoint" },
54
55
  "Building SignalR Hub with Automatic Reconnection": { "en-US": "Building SignalR Hub with Automatic Reconnection", "it-IT": "Compilo l'Hub di SignalR con riconnessione automatica", },
55
56
  "Cannot reconnect SignalR, frontend HUB offline": { "en-US": "Cannot reconnect SignalR, frontend HUB offline", "it-IT": "Impossibile riconnettere SignalR, l'Hub del Frontend e' Offline", },
56
57
  "Send request sent before a connection was in stable State, waiting 1 second and retrying": { "en-US": "Send request sent before a connection was in stable State, waiting 1 second and retrying", "it-IT": "Richiesta 'Send' ricevuta prima che la connessione fosse in uno stato stabile, attendo 1 secondo e riprovo", },
@@ -73,15 +74,9 @@ const Loc = {
73
74
  };
74
75
 
75
76
  // Angular
76
- /**
77
- * Servizio che gestisce la comunicazione con un Hub SignalR in base alle configurazioni fornite dall'applicazione
78
- */
77
+ /** Servizio che gestisce la comunicazione con un Hub SignalR in base alle configurazioni fornite dall'applicazione */
79
78
  class NotificationsService {
80
- /**
81
- * Costruttore
82
- *
83
- * @ignore
84
- */
79
+ /** @ignore Costruttore */
85
80
  constructor(MessageDef, endpoint_url, msgpack, enabled, debug, autoreconnect, locale) {
86
81
  this.MessageDef = MessageDef;
87
82
  this.endpoint_url = endpoint_url;
@@ -89,10 +84,10 @@ class NotificationsService {
89
84
  this.enabled = enabled;
90
85
  this.debug = debug;
91
86
  this.locale = locale;
92
- /**
93
- * Cache degli Observable generati in base agli Endpoint disponibili
94
- */
87
+ /** Cache degli Observable generati in base agli Endpoint disponibili */
95
88
  this.notifications$ = {};
89
+ /** Coda di chiamate da recuperare quando la connessione viene finalmente aperta */
90
+ this.RequestsToRecover = [];
96
91
  if (!this.enabled) {
97
92
  this.log(this.loc("SignalR won't be enabled as per configuration"));
98
93
  return;
@@ -111,13 +106,21 @@ class NotificationsService {
111
106
  builder = builder.withHubProtocol(new mphpModule.MessagePackHubProtocol());
112
107
  }
113
108
  this.connection = builder.build();
114
- this.connect();
109
+ this.connect(() => {
110
+ if (this.RequestsToRecover.length == 0)
111
+ return;
112
+ for (let i = 0; i < this.RequestsToRecover.length; i++) {
113
+ this.log(this.loc("Recovering request to Endpoint") + " " + this.RequestsToRecover[i].item.endpoint);
114
+ this.send(this.RequestsToRecover[i].item, this.RequestsToRecover[i].dto);
115
+ }
116
+ this.RequestsToRecover = [];
117
+ });
115
118
  }
116
119
  /**
117
120
  * Effettua la connessione all'Hub Signalr e registra tutti gli Endpoint per cui il Backend comunica con il Frontend sulla **connection**
118
121
  */
119
- connect() {
120
- this.connection.start().catch(err => console.log(err));
122
+ connect(onConnected) {
123
+ this.connection.start().catch(err => console.log(err)).then(_ => onConnected === null || onConnected === void 0 ? void 0 : onConnected());
121
124
  this.MessageDef.AllDefinitions.forEach(d => {
122
125
  //Registro solo le cose di IN, quelle di out sono chiamate che faccio io al BE quindi non servono
123
126
  if (d.inTypeDefault !== null && d.outTypeDefault === null)
@@ -158,6 +161,10 @@ class NotificationsService {
158
161
  * @param {TOut} dto Dto da inviare all'Endpoint
159
162
  */
160
163
  send(item, dto) {
164
+ if (!this.connection) {
165
+ this.RequestsToRecover.push({ item, dto });
166
+ return;
167
+ }
161
168
  if (!this.enabled) {
162
169
  this.log(this.loc("Send request ignored because SignalR is not active by configuration"));
163
170
  return EMPTY;
@@ -1 +1 @@
1
- {"version":3,"file":"esfaenza-signalr-notifications.js","sources":["../../../projects/signalr-notifications/src/lib/models/BaseMessageService.ts","../../../projects/signalr-notifications/src/lib/tokens.ts","../../../projects/signalr-notifications/src/lib/signalr-notifications.service.loc.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":["// 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}","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');","/**\r\n * Oggetto statico di localizzazione per i messaggi scritti dal servizio\r\n */\r\nexport const Loc ={\r\n \"Building SignalR Hub with Automatic Reconnection\": { \"en-US\": \"Building SignalR Hub with Automatic Reconnection\", \"it-IT\": \"Compilo l'Hub di SignalR con riconnessione automatica\", },\r\n \"Cannot reconnect SignalR, frontend HUB offline\": { \"en-US\": \"Cannot reconnect SignalR, frontend HUB offline\", \"it-IT\": \"Impossibile riconnettere SignalR, l'Hub del Frontend e' Offline\", },\r\n \"Send request sent before a connection was in stable State, waiting 1 second and retrying\": { \"en-US\": \"Send request sent before a connection was in stable State, waiting 1 second and retrying\", \"it-IT\": \"Richiesta 'Send' ricevuta prima che la connessione fosse in uno stato stabile, attendo 1 secondo e riprovo\", },\r\n \"Invoke request sent before a connection was in stable State, waiting 1 second and retrying\": { \"en-US\": \"Invoke request sent before a connection was in stable State, waiting 1 second and retrying\", \"it-IT\": \"Richiesta 'Invoke' ricevuta prima che la connessione fosse in uno stato stabile, attendo 1 secondo e riprovo\", },\r\n \"Connection lost or missing, reconnecting...\" : { \"en-US\": \"Connection lost or missing, reconnecting...\", \"it-IT\": \"Connessione persa o mancante, mi riconnetto...\", },\r\n \"SignalR won't be enabled as per configuration\": { \"en-US\": \"SignalR won't be enabled as per configuration\", \"it-IT\": \"SignalR non verrà attivato come da configurazione\", },\r\n \"Building SignalR Hub with MessagePack protocol\": { \"en-US\": \"Building SignalR Hub with MessagePack protocol\", \"it-IT\": \"Compilo l'Hub di SignalR con protocollo MessagePack\", },\r\n \"Request received from the server for endpoint\": { \"en-US\": \"Request received from the server for endpoint\", \"it-IT\": \"Richiesta ricevuta dal server per endpoint\", },\r\n \"Refusing to register endpoint\": { \"en-US\": \"Refusing to register endpoint\", \"it-IT\": \"Rifiuto di registrare l'endpoint\", },\r\n \"because it is not declared as IN - ONLY\": { \"en-US\": \"because it is not declared as IN - ONLY\", \"it-IT\": \"in quanto non è registrato solo come IN\", },\r\n \"Send request ignored because SignalR is not active by configuration\": { \"en-US\": \"Send request ignored because SignalR is not active by configuration\", \"it-IT\": \"Richiesta send ignorata in quanto SignalR non è attivo da configurazione\", },\r\n \"Request sent to server\": { \"en-US\": \"Request sent to server\", \"it-IT\": \"Richiesta inviata al server\", },\r\n \"Invoke request ignored because SignalR is not active by configuration\": { \"en-US\": \"Invoke request ignored because SignalR is not active by configuration\", \"it-IT\": \"Richiesta invoke ignorata in quanto SignalR non è attivo da configurazione\", },\r\n \"Request invoked to server\": { \"en-US\": \"Request invoked to server\", \"it-IT\": \"Richiesta invoke inviata al server\", },\r\n \"Observe request ignored because SignalR is not active by configuration\": { \"en-US\": \"Observe request ignored because SignalR is not active by configuration\", \"it-IT\": \"Osservazione ignorata in quanto SignalR non è attivo da configurazione\", },\r\n \"Returning observable for required endpoint\": { \"en-US\": \"Returning observable for required endpoint\", \"it-IT\": \"Restituisco l'observable per l'endpoint richiesto\", },\r\n \"Disconnection request ignored because SignalR is not active by configuration\": { \"en-US\": \"Disconnection request ignored because SignalR is not active by configuration\", \"it-IT\": \"Richiesta di disconnesione ignorata in quanto SignalR non è attivo da configurazione\", },\r\n \"Disconnection request honored\": { \"en-US\": \"Returning observable for required endpoint\", \"it-IT\": \"Restituito observable per l'endpoint richiesto\", },\r\n \"ERRORS on reconnecting before retrying a send command. Sent message WILL BE LOST\": { \"en-US\": \"ERRORS on reconnecting before retrying a send command. Sent message WILL BE LOST\", \"it-IT\": \"ERRORE nella riconnessione precedente a un nuovo tentativo di 'Send'. Il messaggio in questione SARA' PERSO\"}\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// Localizzazione\r\nimport { Loc } from './signalr-notifications.service.loc';\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, @Inject(LOCALE) private locale : string) {\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 if(!Loc[message])\r\n {\r\n console.warn(\"Untranslated message: \" + message)\r\n return \"\";\r\n }\r\n return Loc[message][this.locale];\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, LOCALE, 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: LOCALE, useValue: config?.locale || 'it-IT' },\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?.autoReconnect != null ? config?.autoReconnect : false },\r\n { provide: AUTO_RECONNECT, useValue: config?.useMessagePack != null ? config?.useMessagePack : false },\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\r\n /**\r\n * Lingua dei feedback a console, sono supportati 'it-IT' ed 'en-US'\r\n */\r\n locale? : string\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\nexport {AUTO_RECONNECT as ɵf,DEBUG_MODE as ɵc,ENDPOINT_URL as ɵa,LOCALE as ɵd,MESSAGE_PACK as ɵe,SIGNALR_ENABLED as ɵb} from './lib/tokens';"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"esfaenza-signalr-notifications.js","sources":["../../../projects/signalr-notifications/src/lib/models/BaseMessageService.ts","../../../projects/signalr-notifications/src/lib/tokens.ts","../../../projects/signalr-notifications/src/lib/signalr-notifications.service.loc.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":["// 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}","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');","/**\r\n * Oggetto statico di localizzazione per i messaggi scritti dal servizio\r\n */\r\nexport const Loc ={\r\n \"Recovering request to Endpoint\": {\"en-US\": \"Recovering request to Endpoint\", \"it-IT\": \"Recupero richiesta verso l'Endpoint\"},\r\n \"Building SignalR Hub with Automatic Reconnection\": { \"en-US\": \"Building SignalR Hub with Automatic Reconnection\", \"it-IT\": \"Compilo l'Hub di SignalR con riconnessione automatica\", },\r\n \"Cannot reconnect SignalR, frontend HUB offline\": { \"en-US\": \"Cannot reconnect SignalR, frontend HUB offline\", \"it-IT\": \"Impossibile riconnettere SignalR, l'Hub del Frontend e' Offline\", },\r\n \"Send request sent before a connection was in stable State, waiting 1 second and retrying\": { \"en-US\": \"Send request sent before a connection was in stable State, waiting 1 second and retrying\", \"it-IT\": \"Richiesta 'Send' ricevuta prima che la connessione fosse in uno stato stabile, attendo 1 secondo e riprovo\", },\r\n \"Invoke request sent before a connection was in stable State, waiting 1 second and retrying\": { \"en-US\": \"Invoke request sent before a connection was in stable State, waiting 1 second and retrying\", \"it-IT\": \"Richiesta 'Invoke' ricevuta prima che la connessione fosse in uno stato stabile, attendo 1 secondo e riprovo\", },\r\n \"Connection lost or missing, reconnecting...\" : { \"en-US\": \"Connection lost or missing, reconnecting...\", \"it-IT\": \"Connessione persa o mancante, mi riconnetto...\", },\r\n \"SignalR won't be enabled as per configuration\": { \"en-US\": \"SignalR won't be enabled as per configuration\", \"it-IT\": \"SignalR non verrà attivato come da configurazione\", },\r\n \"Building SignalR Hub with MessagePack protocol\": { \"en-US\": \"Building SignalR Hub with MessagePack protocol\", \"it-IT\": \"Compilo l'Hub di SignalR con protocollo MessagePack\", },\r\n \"Request received from the server for endpoint\": { \"en-US\": \"Request received from the server for endpoint\", \"it-IT\": \"Richiesta ricevuta dal server per endpoint\", },\r\n \"Refusing to register endpoint\": { \"en-US\": \"Refusing to register endpoint\", \"it-IT\": \"Rifiuto di registrare l'endpoint\", },\r\n \"because it is not declared as IN - ONLY\": { \"en-US\": \"because it is not declared as IN - ONLY\", \"it-IT\": \"in quanto non è registrato solo come IN\", },\r\n \"Send request ignored because SignalR is not active by configuration\": { \"en-US\": \"Send request ignored because SignalR is not active by configuration\", \"it-IT\": \"Richiesta send ignorata in quanto SignalR non è attivo da configurazione\", },\r\n \"Request sent to server\": { \"en-US\": \"Request sent to server\", \"it-IT\": \"Richiesta inviata al server\", },\r\n \"Invoke request ignored because SignalR is not active by configuration\": { \"en-US\": \"Invoke request ignored because SignalR is not active by configuration\", \"it-IT\": \"Richiesta invoke ignorata in quanto SignalR non è attivo da configurazione\", },\r\n \"Request invoked to server\": { \"en-US\": \"Request invoked to server\", \"it-IT\": \"Richiesta invoke inviata al server\", },\r\n \"Observe request ignored because SignalR is not active by configuration\": { \"en-US\": \"Observe request ignored because SignalR is not active by configuration\", \"it-IT\": \"Osservazione ignorata in quanto SignalR non è attivo da configurazione\", },\r\n \"Returning observable for required endpoint\": { \"en-US\": \"Returning observable for required endpoint\", \"it-IT\": \"Restituisco l'observable per l'endpoint richiesto\", },\r\n \"Disconnection request ignored because SignalR is not active by configuration\": { \"en-US\": \"Disconnection request ignored because SignalR is not active by configuration\", \"it-IT\": \"Richiesta di disconnesione ignorata in quanto SignalR non è attivo da configurazione\", },\r\n \"Disconnection request honored\": { \"en-US\": \"Returning observable for required endpoint\", \"it-IT\": \"Restituito observable per l'endpoint richiesto\", },\r\n \"ERRORS on reconnecting before retrying a send command. Sent message WILL BE LOST\": { \"en-US\": \"ERRORS on reconnecting before retrying a send command. Sent message WILL BE LOST\", \"it-IT\": \"ERRORE nella riconnessione precedente a un nuovo tentativo di 'Send'. Il messaggio in questione SARA' PERSO\"}\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// Localizzazione\r\nimport { Loc } from './signalr-notifications.service.loc';\r\n\r\n/** Servizio che gestisce la comunicazione con un Hub SignalR in base alle configurazioni fornite dall'applicazione */\r\n@Injectable()\r\nexport class NotificationsService {\r\n\r\n /** Cache degli Observable generati in base agli Endpoint disponibili */\r\n private notifications$: { [index: string]: Subject<any> } = {};\r\n\r\n /** Connessione Signalr */\r\n private connection: signalR.HubConnection;\r\n\r\n /** Coda di chiamate da recuperare quando la connessione viene finalmente aperta */\r\n private RequestsToRecover: { item: EndpointDef<any, any>, dto: any }[] = [];\r\n\r\n /** @ignore Costruttore */\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, @Inject(LOCALE) private locale: string) {\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 if (this.RequestsToRecover.length == 0)\r\n return;\r\n\r\n for (let i = 0; i < this.RequestsToRecover.length; i++) {\r\n this.log(this.loc(\"Recovering request to Endpoint\") + \" \" + this.RequestsToRecover[i].item.endpoint)\r\n this.send(this.RequestsToRecover[i].item, this.RequestsToRecover[i].dto);\r\n }\r\n\r\n this.RequestsToRecover = [];\r\n });\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(onConnected?: () => void) {\r\n this.connection.start().catch(err => console.log(err)).then(_ => onConnected?.());\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 /**\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.connection) {\r\n this.RequestsToRecover.push({ item, dto });\r\n return;\r\n }\r\n\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 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 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 if (!Loc[message]) {\r\n console.warn(\"Untranslated message: \" + message)\r\n return \"\";\r\n }\r\n return Loc[message][this.locale];\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, LOCALE, 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: LOCALE, useValue: config?.locale || 'it-IT' },\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?.autoReconnect != null ? config?.autoReconnect : false },\r\n { provide: AUTO_RECONNECT, useValue: config?.useMessagePack != null ? config?.useMessagePack : false },\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\r\n /**\r\n * Lingua dei feedback a console, sono supportati 'it-IT' ed 'en-US'\r\n */\r\n locale? : string\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\nexport {AUTO_RECONNECT as ɵf,DEBUG_MODE as ɵc,ENDPOINT_URL as ɵa,LOCALE as ɵd,MESSAGE_PACK as ɵe,SIGNALR_ENABLED as ɵb} from './lib/tokens';"],"names":[],"mappings":"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"}
@@ -1,9 +1,7 @@
1
1
  import { Observable } from "rxjs";
2
2
  import { BaseMessageService } from './models/BaseMessageService';
3
3
  import { EndpointDef } from './models/EndpointDef';
4
- /**
5
- * Servizio che gestisce la comunicazione con un Hub SignalR in base alle configurazioni fornite dall'applicazione
6
- */
4
+ /** Servizio che gestisce la comunicazione con un Hub SignalR in base alle configurazioni fornite dall'applicazione */
7
5
  export declare class NotificationsService {
8
6
  private MessageDef;
9
7
  private endpoint_url;
@@ -11,19 +9,13 @@ export declare class NotificationsService {
11
9
  private enabled;
12
10
  private debug;
13
11
  private locale;
14
- /**
15
- * Cache degli Observable generati in base agli Endpoint disponibili
16
- */
12
+ /** Cache degli Observable generati in base agli Endpoint disponibili */
17
13
  private notifications$;
18
- /**
19
- * Connessione Signalr
20
- */
14
+ /** Connessione Signalr */
21
15
  private connection;
22
- /**
23
- * Costruttore
24
- *
25
- * @ignore
26
- */
16
+ /** Coda di chiamate da recuperare quando la connessione viene finalmente aperta */
17
+ private RequestsToRecover;
18
+ /** @ignore Costruttore */
27
19
  constructor(MessageDef: BaseMessageService, endpoint_url: string, msgpack: boolean, enabled: boolean, debug: boolean, autoreconnect: boolean, locale: string);
28
20
  /**
29
21
  * Effettua la connessione all'Hub Signalr e registra tutti gli Endpoint per cui il Backend comunica con il Frontend sulla **connection**
@@ -2,6 +2,10 @@
2
2
  * Oggetto statico di localizzazione per i messaggi scritti dal servizio
3
3
  */
4
4
  export declare const Loc: {
5
+ "Recovering request to Endpoint": {
6
+ "en-US": string;
7
+ "it-IT": string;
8
+ };
5
9
  "Building SignalR Hub with Automatic Reconnection": {
6
10
  "en-US": string;
7
11
  "it-IT": string;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@esfaenza/signalr-notifications",
3
- "version": "11.2.12",
3
+ "version": "11.2.13",
4
4
  "dependencies": {
5
5
  "tslib": "^2.0.0"
6
6
  },