wm-menu 1.2.9 → 1.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundles/wm-menu.umd.js +368 -31
- package/bundles/wm-menu.umd.js.map +1 -1
- package/bundles/wm-menu.umd.min.js +2 -2
- package/bundles/wm-menu.umd.min.js.map +1 -1
- package/esm2015/lib/wm-menu/asistente-datos/asistente-datos-api.service.js +52 -0
- package/esm2015/lib/wm-menu/asistente-datos/asistente-datos.component.js +178 -0
- package/esm2015/lib/wm-menu/asistente-datos/reconocimiento-voz.service.js +77 -0
- package/esm2015/lib/wm-menu/services/wm-menu-alerta-panico.service.js +4 -21
- package/esm2015/lib/wm-menu/services/wm-menu-servicio.service.js +9 -1
- package/esm2015/lib/wm-menu/wm-menu.component.js +35 -7
- package/esm2015/lib/wm-menu.module.js +9 -2
- package/esm2015/wm-menu.js +4 -1
- package/esm5/lib/wm-menu/asistente-datos/asistente-datos-api.service.js +53 -0
- package/esm5/lib/wm-menu/asistente-datos/asistente-datos.component.js +194 -0
- package/esm5/lib/wm-menu/asistente-datos/reconocimiento-voz.service.js +79 -0
- package/esm5/lib/wm-menu/services/wm-menu-alerta-panico.service.js +4 -21
- package/esm5/lib/wm-menu/services/wm-menu-servicio.service.js +9 -1
- package/esm5/lib/wm-menu/wm-menu.component.js +39 -7
- package/esm5/lib/wm-menu.module.js +9 -2
- package/esm5/wm-menu.js +4 -1
- package/fesm2015/wm-menu.js +343 -29
- package/fesm2015/wm-menu.js.map +1 -1
- package/fesm5/wm-menu.js +366 -29
- package/fesm5/wm-menu.js.map +1 -1
- package/lib/wm-menu/asistente-datos/asistente-datos-api.service.d.ts +26 -0
- package/lib/wm-menu/asistente-datos/asistente-datos.component.d.ts +39 -0
- package/lib/wm-menu/asistente-datos/reconocimiento-voz.service.d.ts +7 -0
- package/lib/wm-menu/services/wm-menu-servicio.service.d.ts +1 -0
- package/lib/wm-menu/wm-menu.component.d.ts +10 -3
- package/package.json +1 -1
- package/wm-menu.d.ts +3 -0
- package/wm-menu.metadata.json +1 -1
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { __decorate } from "tslib";
|
|
2
|
+
import { Injectable } from '@angular/core';
|
|
3
|
+
import { HttpClient, HttpHeaders } from '@angular/common/http';
|
|
4
|
+
import { throwError } from 'rxjs';
|
|
5
|
+
import { catchError } from 'rxjs/operators';
|
|
6
|
+
import { JwtHelperService } from '@auth0/angular-jwt';
|
|
7
|
+
import * as i0 from "@angular/core";
|
|
8
|
+
import * as i1 from "@angular/common/http";
|
|
9
|
+
var AsistenteDatosApiService = /** @class */ (function () {
|
|
10
|
+
function AsistenteDatosApiService(http) {
|
|
11
|
+
this.http = http;
|
|
12
|
+
// La fija el componente desde su @Input urlConsultar (reemplaza WmChatConfigService.urlConsultar).
|
|
13
|
+
this.url = '';
|
|
14
|
+
// Mismo origen del JWT que WmSeguridadService.getJWT() en wm-chat: localStorage['WMTKN'],
|
|
15
|
+
// descartado si está vencido. Se replica aquí para que el header Authorization sea idéntico
|
|
16
|
+
// al del chat original sin depender de un servicio de config externo.
|
|
17
|
+
this.TOKEN_KEY = 'WMTKN';
|
|
18
|
+
this.jwtHelper = new JwtHelperService();
|
|
19
|
+
}
|
|
20
|
+
AsistenteDatosApiService.prototype.consultar = function (pregunta, proveedor) {
|
|
21
|
+
var headers = new HttpHeaders({
|
|
22
|
+
Authorization: "Bearer " + this.obtenerJWT(),
|
|
23
|
+
'Content-Type': 'application/json; charset=utf-8',
|
|
24
|
+
});
|
|
25
|
+
return this.http
|
|
26
|
+
.post(this.url, { Pregunta: pregunta, Proveedor: proveedor }, { headers: headers })
|
|
27
|
+
.pipe(catchError(function (error) {
|
|
28
|
+
return throwError(error.error);
|
|
29
|
+
}));
|
|
30
|
+
};
|
|
31
|
+
AsistenteDatosApiService.prototype.obtenerJWT = function () {
|
|
32
|
+
var jwt = localStorage.getItem(this.TOKEN_KEY);
|
|
33
|
+
if (jwt) {
|
|
34
|
+
try {
|
|
35
|
+
return this.jwtHelper.isTokenExpired(jwt) ? null : jwt;
|
|
36
|
+
}
|
|
37
|
+
catch (_a) { }
|
|
38
|
+
}
|
|
39
|
+
return null;
|
|
40
|
+
};
|
|
41
|
+
AsistenteDatosApiService.ctorParameters = function () { return [
|
|
42
|
+
{ type: HttpClient }
|
|
43
|
+
]; };
|
|
44
|
+
AsistenteDatosApiService.ɵprov = i0.ɵɵdefineInjectable({ factory: function AsistenteDatosApiService_Factory() { return new AsistenteDatosApiService(i0.ɵɵinject(i1.HttpClient)); }, token: AsistenteDatosApiService, providedIn: "root" });
|
|
45
|
+
AsistenteDatosApiService = __decorate([
|
|
46
|
+
Injectable({
|
|
47
|
+
providedIn: 'root',
|
|
48
|
+
})
|
|
49
|
+
], AsistenteDatosApiService);
|
|
50
|
+
return AsistenteDatosApiService;
|
|
51
|
+
}());
|
|
52
|
+
export { AsistenteDatosApiService };
|
|
53
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNpc3RlbnRlLWRhdG9zLWFwaS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vd20tbWVudS8iLCJzb3VyY2VzIjpbImxpYi93bS1tZW51L2FzaXN0ZW50ZS1kYXRvcy9hc2lzdGVudGUtZGF0b3MtYXBpLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUMvRCxPQUFPLEVBQWMsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzlDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM1QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7O0FBc0J0RDtJQVVJLGtDQUFvQixJQUFnQjtRQUFoQixTQUFJLEdBQUosSUFBSSxDQUFZO1FBVHBDLG1HQUFtRztRQUM1RixRQUFHLEdBQUcsRUFBRSxDQUFDO1FBRWhCLDBGQUEwRjtRQUMxRiw0RkFBNEY7UUFDNUYsc0VBQXNFO1FBQ3JELGNBQVMsR0FBRyxPQUFPLENBQUM7UUFDcEIsY0FBUyxHQUFHLElBQUksZ0JBQWdCLEVBQUUsQ0FBQztJQUViLENBQUM7SUFFeEMsNENBQVMsR0FBVCxVQUFVLFFBQWdCLEVBQUUsU0FBa0I7UUFDMUMsSUFBTSxPQUFPLEdBQUcsSUFBSSxXQUFXLENBQUM7WUFDNUIsYUFBYSxFQUFFLFlBQVUsSUFBSSxDQUFDLFVBQVUsRUFBSTtZQUM1QyxjQUFjLEVBQUUsaUNBQWlDO1NBQ3BELENBQUMsQ0FBQztRQUVILE9BQU8sSUFBSSxDQUFDLElBQUk7YUFDWCxJQUFJLENBQ0QsSUFBSSxDQUFDLEdBQUcsRUFDUixFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxFQUM1QyxFQUFFLE9BQU8sU0FBQSxFQUFFLENBQ2Q7YUFDQSxJQUFJLENBQ0QsVUFBVSxDQUFDLFVBQUMsS0FBSztZQUNiLE9BQU8sVUFBVSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNuQyxDQUFDLENBQUMsQ0FDTCxDQUFDO0lBQ1YsQ0FBQztJQUVPLDZDQUFVLEdBQWxCO1FBQ0ksSUFBTSxHQUFHLEdBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFFakQsSUFBSSxHQUFHLEVBQUU7WUFDTCxJQUFJO2dCQUNBLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO2FBQzFEO1lBQUMsV0FBTSxHQUFFO1NBQ2I7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDOztnQkE5QnlCLFVBQVU7OztJQVYzQix3QkFBd0I7UUFIcEMsVUFBVSxDQUFDO1lBQ1IsVUFBVSxFQUFFLE1BQU07U0FDckIsQ0FBQztPQUNXLHdCQUF3QixDQXlDcEM7bUNBbkVEO0NBbUVDLEFBekNELElBeUNDO1NBekNZLHdCQUF3QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgSHR0cENsaWVudCwgSHR0cEhlYWRlcnMgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsIHRocm93RXJyb3IgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgY2F0Y2hFcnJvciB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgSnd0SGVscGVyU2VydmljZSB9IGZyb20gJ0BhdXRoMC9hbmd1bGFyLWp3dCc7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEVDb25zdWx0YURpbmFtaWNhQXBpIHtcclxuICAgIEVudGlkYWQ6IHN0cmluZztcclxuICAgIFdoZXJlPzogc3RyaW5nO1xyXG4gICAgU2VsZWN0Pzogc3RyaW5nO1xyXG4gICAgR3JvdXBCeT86IHN0cmluZztcclxuICAgIE9yZGVyQnk/OiBzdHJpbmc7XHJcbiAgICBUYWtlOiBudW1iZXI7XHJcbiAgICBTa2lwOiBudW1iZXI7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgUmVzcHVlc3RhQXNpc3RlbnRlRGF0b3Mge1xyXG4gICAgUmVzdWx0YWRvOiBhbnlbXTtcclxuICAgIENvbnN1bHRhOiBFQ29uc3VsdGFEaW5hbWljYUFwaTtcclxuICAgIFByb3ZlZWRvcjogc3RyaW5nO1xyXG4gICAgRGVzY3JpcGNpb24/OiBzdHJpbmc7XHJcbn1cclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICAgIHByb3ZpZGVkSW46ICdyb290JyxcclxufSlcclxuZXhwb3J0IGNsYXNzIEFzaXN0ZW50ZURhdG9zQXBpU2VydmljZSB7XHJcbiAgICAvLyBMYSBmaWphIGVsIGNvbXBvbmVudGUgZGVzZGUgc3UgQElucHV0IHVybENvbnN1bHRhciAocmVlbXBsYXphIFdtQ2hhdENvbmZpZ1NlcnZpY2UudXJsQ29uc3VsdGFyKS5cclxuICAgIHB1YmxpYyB1cmwgPSAnJztcclxuXHJcbiAgICAvLyBNaXNtbyBvcmlnZW4gZGVsIEpXVCBxdWUgV21TZWd1cmlkYWRTZXJ2aWNlLmdldEpXVCgpIGVuIHdtLWNoYXQ6IGxvY2FsU3RvcmFnZVsnV01US04nXSxcclxuICAgIC8vIGRlc2NhcnRhZG8gc2kgZXN0w6EgdmVuY2lkby4gU2UgcmVwbGljYSBhcXXDrSBwYXJhIHF1ZSBlbCBoZWFkZXIgQXV0aG9yaXphdGlvbiBzZWEgaWTDqW50aWNvXHJcbiAgICAvLyBhbCBkZWwgY2hhdCBvcmlnaW5hbCBzaW4gZGVwZW5kZXIgZGUgdW4gc2VydmljaW8gZGUgY29uZmlnIGV4dGVybm8uXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IFRPS0VOX0tFWSA9ICdXTVRLTic7XHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGp3dEhlbHBlciA9IG5ldyBKd3RIZWxwZXJTZXJ2aWNlKCk7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50KSB7fVxyXG5cclxuICAgIGNvbnN1bHRhcihwcmVndW50YTogc3RyaW5nLCBwcm92ZWVkb3I/OiBzdHJpbmcpOiBPYnNlcnZhYmxlPFJlc3B1ZXN0YUFzaXN0ZW50ZURhdG9zPiB7XHJcbiAgICAgICAgY29uc3QgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycyh7XHJcbiAgICAgICAgICAgIEF1dGhvcml6YXRpb246IGBCZWFyZXIgJHt0aGlzLm9idGVuZXJKV1QoKX1gLFxyXG4gICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9dXRmLTgnLFxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwXHJcbiAgICAgICAgICAgIC5wb3N0PFJlc3B1ZXN0YUFzaXN0ZW50ZURhdG9zPihcclxuICAgICAgICAgICAgICAgIHRoaXMudXJsLFxyXG4gICAgICAgICAgICAgICAgeyBQcmVndW50YTogcHJlZ3VudGEsIFByb3ZlZWRvcjogcHJvdmVlZG9yIH0sXHJcbiAgICAgICAgICAgICAgICB7IGhlYWRlcnMgfVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihlcnJvci5lcnJvcik7XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgb2J0ZW5lckpXVCgpOiBzdHJpbmcge1xyXG4gICAgICAgIGNvbnN0IGp3dCA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMuVE9LRU5fS0VZKTtcclxuXHJcbiAgICAgICAgaWYgKGp3dCkge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuand0SGVscGVyLmlzVG9rZW5FeHBpcmVkKGp3dCkgPyBudWxsIDogand0O1xyXG4gICAgICAgICAgICB9IGNhdGNoIHt9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
|
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
import { __decorate } from "tslib";
|
|
2
|
+
import { Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';
|
|
3
|
+
import { ReconocimientoVozService } from './reconocimiento-voz.service';
|
|
4
|
+
import { AsistenteDatosApiService } from './asistente-datos-api.service';
|
|
5
|
+
var AsistenteDatosComponent = /** @class */ (function () {
|
|
6
|
+
function AsistenteDatosComponent(asistenteDatosApiService, reconocimientoVoz) {
|
|
7
|
+
this.asistenteDatosApiService = asistenteDatosApiService;
|
|
8
|
+
this.reconocimientoVoz = reconocimientoVoz;
|
|
9
|
+
// La apertura/cierre del panel la controla el padre (el menú). El panel solo se renderiza
|
|
10
|
+
// cuando `abierto` es true y avisa, vía `cerrarChange`, cuando el usuario toca la X.
|
|
11
|
+
this.abierto = false;
|
|
12
|
+
// Idioma para el reconocimiento de voz (Web Speech API).
|
|
13
|
+
this.idioma = 'es-CO';
|
|
14
|
+
this.cerrarChange = new EventEmitter();
|
|
15
|
+
this.mensajes = [];
|
|
16
|
+
this.borrador = '';
|
|
17
|
+
// Alterna el alto de la caja del mensaje (compacta ↔ expandida), igual que el "pedir cambios"
|
|
18
|
+
// del asistente de IA del generador de formularios (ver filasBorrador / onClickExpandirBorrador).
|
|
19
|
+
this.borradorExpandido = false;
|
|
20
|
+
this.consultando = false;
|
|
21
|
+
// "Gemini" o "Groq" — mismo selector que el asistente de generación de formularios
|
|
22
|
+
// (ver ProveedorIAServicio en el backend).
|
|
23
|
+
this.proveedorSeleccionado = 'Gemini';
|
|
24
|
+
// Dictado por voz (Web Speech API) — sin soporte en Firefox, inconsistente en Safari.
|
|
25
|
+
this.escuchando = false;
|
|
26
|
+
// Preguntas ya verificadas como respondibles hoy (whitelist + contrato de la IA — ver
|
|
27
|
+
// ChatConsultaWhitelistServicio/ChatConsultaPromptServicio en el backend), mostradas como chips
|
|
28
|
+
// de sugerencia en el estado vacío del chat.
|
|
29
|
+
this.chipsSugeridos = [
|
|
30
|
+
'¿Cuántos formularios se diligenciaron hoy?',
|
|
31
|
+
'¿Cuántos formularios se diligenciaron esta semana?',
|
|
32
|
+
'Muéstrame los últimos 10 formularios diligenciados',
|
|
33
|
+
];
|
|
34
|
+
}
|
|
35
|
+
Object.defineProperty(AsistenteDatosComponent.prototype, "urlConsultar", {
|
|
36
|
+
// URL del POST de consulta. Se refleja en el api service (propiedad `url`), que es donde se usa.
|
|
37
|
+
set: function (valor) {
|
|
38
|
+
if (valor) {
|
|
39
|
+
this.asistenteDatosApiService.url = valor;
|
|
40
|
+
}
|
|
41
|
+
},
|
|
42
|
+
enumerable: true,
|
|
43
|
+
configurable: true
|
|
44
|
+
});
|
|
45
|
+
// El padre abre/cierra el panel; aquí solo se avisa que el usuario pidió cerrarlo (botón X).
|
|
46
|
+
AsistenteDatosComponent.prototype.cerrar = function () {
|
|
47
|
+
this.cerrarChange.emit();
|
|
48
|
+
};
|
|
49
|
+
Object.defineProperty(AsistenteDatosComponent.prototype, "filasBorrador", {
|
|
50
|
+
// Caja del mensaje compacta (1 fila, como era el chat originalmente) ↔ expandida (6 filas).
|
|
51
|
+
// El botón de expandir es el mismo patrón del "pedir cambios" del generador.
|
|
52
|
+
get: function () {
|
|
53
|
+
return this.borradorExpandido ? 6 : 1;
|
|
54
|
+
},
|
|
55
|
+
enumerable: true,
|
|
56
|
+
configurable: true
|
|
57
|
+
});
|
|
58
|
+
AsistenteDatosComponent.prototype.onClickExpandirBorrador = function () {
|
|
59
|
+
this.borradorExpandido = !this.borradorExpandido;
|
|
60
|
+
};
|
|
61
|
+
Object.defineProperty(AsistenteDatosComponent.prototype, "micDisponible", {
|
|
62
|
+
get: function () {
|
|
63
|
+
return this.reconocimientoVoz.estaSoportado();
|
|
64
|
+
},
|
|
65
|
+
enumerable: true,
|
|
66
|
+
configurable: true
|
|
67
|
+
});
|
|
68
|
+
AsistenteDatosComponent.prototype.onClickMicrofono = function () {
|
|
69
|
+
var _this = this;
|
|
70
|
+
if (this.escuchando) {
|
|
71
|
+
this.reconocimientoVoz.detener();
|
|
72
|
+
this.escuchando = false;
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
if (!this.reconocimientoVoz.estaSoportado()) {
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
// El resultado del reconocimiento no incluye lo que ya estaba escrito — se guarda antes de
|
|
79
|
+
// empezar y se antepone en cada actualización (que llega con la transcripción COMPLETA de
|
|
80
|
+
// esta sesión de escucha, no un incremento) para no perder lo que ya había en el campo.
|
|
81
|
+
var textoPrevio = this.borrador.trim();
|
|
82
|
+
this.escuchando = true;
|
|
83
|
+
this.reconocimientoVoz.iniciar(this.idioma, function (texto) { return (_this.borrador = textoPrevio ? textoPrevio + " " + texto : texto); }, function () { return (_this.escuchando = false); });
|
|
84
|
+
};
|
|
85
|
+
AsistenteDatosComponent.prototype.onClickEnviar = function (textoPreset) {
|
|
86
|
+
var _this = this;
|
|
87
|
+
var pregunta = ((textoPreset !== null && textoPreset !== void 0 ? textoPreset : this.borrador)).trim();
|
|
88
|
+
if (!pregunta || this.consultando) {
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
this.mensajes.push({ deUsuario: true, texto: pregunta });
|
|
92
|
+
this.borrador = '';
|
|
93
|
+
// Sin url de consulta no se hace la petición: el usuario ve el mismo error genérico que
|
|
94
|
+
// cuando la API falla.
|
|
95
|
+
if (!this.asistenteDatosApiService.url) {
|
|
96
|
+
this.mensajes.push({
|
|
97
|
+
deUsuario: false,
|
|
98
|
+
texto: 'No se pudo procesar la consulta.',
|
|
99
|
+
esError: true,
|
|
100
|
+
});
|
|
101
|
+
this.scrollAlFinal();
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
this.consultando = true;
|
|
105
|
+
this.scrollAlFinal();
|
|
106
|
+
this.asistenteDatosApiService.consultar(pregunta, this.proveedorSeleccionado).subscribe({
|
|
107
|
+
// El tipo (RespuestaAsistenteDatos) se infiere del Observable: importar la interfaz
|
|
108
|
+
// dejaba un import a un símbolo inexistente en el JS de la librería (aviso de rollup).
|
|
109
|
+
next: function (respuesta) {
|
|
110
|
+
var _a;
|
|
111
|
+
_this.consultando = false;
|
|
112
|
+
_this.mensajes.push({
|
|
113
|
+
deUsuario: false,
|
|
114
|
+
descripcion: respuesta.Descripcion,
|
|
115
|
+
resultado: (_a = respuesta.Resultado, (_a !== null && _a !== void 0 ? _a : [])),
|
|
116
|
+
proveedor: respuesta.Proveedor,
|
|
117
|
+
});
|
|
118
|
+
_this.scrollAlFinal();
|
|
119
|
+
},
|
|
120
|
+
error: function (error) {
|
|
121
|
+
var _a;
|
|
122
|
+
_this.consultando = false;
|
|
123
|
+
_this.mensajes.push({
|
|
124
|
+
deUsuario: false,
|
|
125
|
+
texto: ((_a = error) === null || _a === void 0 ? void 0 : _a.Mensaje) || 'No se pudo procesar la consulta.',
|
|
126
|
+
esError: true,
|
|
127
|
+
});
|
|
128
|
+
_this.scrollAlFinal();
|
|
129
|
+
},
|
|
130
|
+
});
|
|
131
|
+
};
|
|
132
|
+
// El nuevo mensaje recién se refleja en el DOM después del siguiente ciclo de detección de
|
|
133
|
+
// cambios — por eso el scrollTop se ajusta en un setTimeout(0), no inmediatamente después del
|
|
134
|
+
// push, para que scrollHeight ya incluya el mensaje agregado.
|
|
135
|
+
AsistenteDatosComponent.prototype.scrollAlFinal = function () {
|
|
136
|
+
var _this = this;
|
|
137
|
+
setTimeout(function () {
|
|
138
|
+
var _a;
|
|
139
|
+
var elemento = (_a = _this.mensajesContainer) === null || _a === void 0 ? void 0 : _a.nativeElement;
|
|
140
|
+
if (elemento) {
|
|
141
|
+
elemento.scrollTop = elemento.scrollHeight;
|
|
142
|
+
}
|
|
143
|
+
});
|
|
144
|
+
};
|
|
145
|
+
AsistenteDatosComponent.prototype.columnasDe = function (resultado) {
|
|
146
|
+
return resultado.length ? Object.keys(resultado[0]) : [];
|
|
147
|
+
};
|
|
148
|
+
// El backend devuelve un conteo (ChatConsultaIAServicio.EjecutarConteo) como una sola fila con
|
|
149
|
+
// una sola columna llamada literalmente "Resultado" — se muestra como número grande en vez de
|
|
150
|
+
// como tabla de una celda.
|
|
151
|
+
AsistenteDatosComponent.prototype.esConteo = function (resultado) {
|
|
152
|
+
var _a;
|
|
153
|
+
return ((_a = resultado) === null || _a === void 0 ? void 0 : _a.length) === 1 && Object.keys(resultado[0]).length === 1 && 'Resultado' in resultado[0];
|
|
154
|
+
};
|
|
155
|
+
// Listado con una sola columna (ej. una lista de nombres/ids) — se muestra como texto simple
|
|
156
|
+
// en vez de una tabla de una sola columna repetida.
|
|
157
|
+
AsistenteDatosComponent.prototype.esListaSimple = function (resultado) {
|
|
158
|
+
var _a;
|
|
159
|
+
return ((_a = resultado) === null || _a === void 0 ? void 0 : _a.length) > 0 && !this.esConteo(resultado) && this.columnasDe(resultado).length === 1;
|
|
160
|
+
};
|
|
161
|
+
AsistenteDatosComponent.prototype.textoListaSimple = function (resultado) {
|
|
162
|
+
var columna = this.columnasDe(resultado)[0];
|
|
163
|
+
return resultado.map(function (fila) { return fila[columna]; }).join(', ');
|
|
164
|
+
};
|
|
165
|
+
AsistenteDatosComponent.ctorParameters = function () { return [
|
|
166
|
+
{ type: AsistenteDatosApiService },
|
|
167
|
+
{ type: ReconocimientoVozService }
|
|
168
|
+
]; };
|
|
169
|
+
__decorate([
|
|
170
|
+
ViewChild('mensajesContainer')
|
|
171
|
+
], AsistenteDatosComponent.prototype, "mensajesContainer", void 0);
|
|
172
|
+
__decorate([
|
|
173
|
+
Input()
|
|
174
|
+
], AsistenteDatosComponent.prototype, "abierto", void 0);
|
|
175
|
+
__decorate([
|
|
176
|
+
Input()
|
|
177
|
+
], AsistenteDatosComponent.prototype, "urlConsultar", null);
|
|
178
|
+
__decorate([
|
|
179
|
+
Input()
|
|
180
|
+
], AsistenteDatosComponent.prototype, "idioma", void 0);
|
|
181
|
+
__decorate([
|
|
182
|
+
Output()
|
|
183
|
+
], AsistenteDatosComponent.prototype, "cerrarChange", void 0);
|
|
184
|
+
AsistenteDatosComponent = __decorate([
|
|
185
|
+
Component({
|
|
186
|
+
selector: 'wm-asistente-datos',
|
|
187
|
+
template: "<!-- Panel (abierto) -->\r\n<div class=\"chat-ia-panel\" *ngIf=\"abierto\">\r\n <div class=\"chat-ia-header\">\r\n <div class=\"chat-ia-header-info\">\r\n <div class=\"chat-ia-header-icono\">\r\n <svg width=\"17\" height=\"17\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#fff\" stroke-width=\"1.8\">\r\n <path d=\"M4 5h16v10H9l-4 4V15H4z\"></path>\r\n </svg>\r\n </div>\r\n <div>\r\n <div class=\"chat-ia-titulo\">Preg\u00FAntale a tus Datos</div>\r\n <div class=\"chat-ia-subtitulo\">Consulta tus reportes en lenguaje natural</div>\r\n </div>\r\n </div>\r\n <div class=\"chat-ia-cerrar\" (click)=\"cerrar()\">\r\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" stroke=\"#fff\" stroke-width=\"2\" fill=\"none\" stroke-linecap=\"round\">\r\n <path d=\"M6 6l12 12M18 6L6 18\"></path>\r\n </svg>\r\n </div>\r\n </div>\r\n\r\n <div class=\"chat-ia-mensajes\" #mensajesContainer>\r\n <div class=\"chat-ia-bienvenida-texto\">Hola, soy tu asistente de datos de Snap Forms. Preg\u00FAntame lo que quieras saber sobre tu operaci\u00F3n.</div>\r\n\r\n <div class=\"chat-ia-mensaje\" *ngFor=\"let mensaje of mensajes\" [class.chat-ia-mensaje-usuario]=\"mensaje.deUsuario\">\r\n <div class=\"chat-ia-burbuja\" [class.chat-ia-burbuja-error]=\"mensaje.esError\">\r\n <span *ngIf=\"mensaje.texto\">{{ mensaje.texto }}</span>\r\n\r\n <ng-container *ngIf=\"mensaje.resultado\">\r\n <div class=\"chat-ia-descripcion\" *ngIf=\"mensaje.descripcion\">{{ mensaje.descripcion }}</div>\r\n\r\n <div class=\"chat-ia-sin-resultados\" *ngIf=\"mensaje.resultado.length === 0\">La consulta no encontr\u00F3 resultados.</div>\r\n\r\n <div class=\"chat-ia-stat\" *ngIf=\"esConteo(mensaje.resultado)\">\r\n <div class=\"chat-ia-stat-valor\">{{ mensaje.resultado[0].Resultado | number }}</div>\r\n </div>\r\n\r\n <div class=\"chat-ia-lista-simple\" *ngIf=\"esListaSimple(mensaje.resultado)\">{{ textoListaSimple(mensaje.resultado) }}</div>\r\n\r\n <div class=\"chat-ia-tabla-resultado\" *ngIf=\"mensaje.resultado.length > 0 && !esConteo(mensaje.resultado) && !esListaSimple(mensaje.resultado)\">\r\n <table mat-table [dataSource]=\"mensaje.resultado\">\r\n <ng-container *ngFor=\"let columna of columnasDe(mensaje.resultado)\" [matColumnDef]=\"columna\">\r\n <th mat-header-cell *matHeaderCellDef>{{ columna }}</th>\r\n <td mat-cell *matCellDef=\"let fila\">{{ fila[columna] }}</td>\r\n </ng-container>\r\n <tr mat-header-row *matHeaderRowDef=\"columnasDe(mensaje.resultado)\"></tr>\r\n <tr mat-row *matRowDef=\"let fila; columns: columnasDe(mensaje.resultado);\"></tr>\r\n </table>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n\r\n <div class=\"chat-ia-pensando\" *ngIf=\"consultando\">\r\n <span class=\"chat-ia-dot\"></span><span class=\"chat-ia-dot\"></span><span class=\"chat-ia-dot\"></span>\r\n </div>\r\n </div>\r\n\r\n <div class=\"chips-chat-ia\">\r\n <span class=\"chip-chat-ia\" *ngFor=\"let chip of chipsSugeridos\"\r\n (click)=\"onClickEnviar(chip)\">{{ chip }}</span>\r\n </div>\r\n\r\n <div class=\"chat-ia-entrada\">\r\n <div class=\"chat-ia-caja-entrada\">\r\n <mat-icon class=\"chat-ia-expandir\" (click)=\"onClickExpandirBorrador()\">{{ borradorExpandido ? 'close_fullscreen' : 'open_in_full' }}</mat-icon>\r\n <textarea [rows]=\"filasBorrador\" [(ngModel)]=\"borrador\" (keydown.enter)=\"$event.preventDefault(); onClickEnviar()\"\r\n [class.chat-ia-textarea-expandido]=\"borradorExpandido\"\r\n placeholder=\"Escribe tu pregunta...\"></textarea>\r\n <div class=\"chat-ia-pie-entrada\">\r\n <button class=\"chat-ia-selector-modelo\" [matMenuTriggerFor]=\"menuModeloChatIA\" type=\"button\">\r\n <span *ngIf=\"proveedorSeleccionado === 'Gemini'\">Gemini</span>\r\n <span *ngIf=\"proveedorSeleccionado === 'Groq'\">Groq</span>\r\n <svg width=\"10\" height=\"10\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.6\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <path d=\"M6 9l6 6 6-6\"></path>\r\n </svg>\r\n </button>\r\n <button class=\"chat-ia-microfono\" [class.chat-ia-microfono-activo]=\"escuchando\" *ngIf=\"micDisponible\"\r\n (click)=\"onClickMicrofono()\" type=\"button\">\r\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <path d=\"M12 1a3 3 0 0 0-3 3v8a3 3 0 0 0 6 0V4a3 3 0 0 0-3-3z\"></path>\r\n <path d=\"M19 10v2a7 7 0 0 1-14 0v-2\"></path>\r\n <line x1=\"12\" y1=\"19\" x2=\"12\" y2=\"23\"></line>\r\n </svg>\r\n </button>\r\n <button class=\"chat-ia-enviar\" [disabled]=\"!borrador.trim() || consultando\" (click)=\"onClickEnviar()\" type=\"button\">\r\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.4\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <path d=\"M12 19V6\"></path>\r\n <path d=\"M5 13l7-7 7 7\"></path>\r\n </svg>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<mat-menu #menuModeloChatIA=\"matMenu\" class=\"menu-modelo-chat-ia\">\r\n <button mat-menu-item [class.opcion-activa]=\"proveedorSeleccionado === 'Gemini'\"\r\n (click)=\"proveedorSeleccionado = 'Gemini'\">\r\n <span>Gemini</span>\r\n <svg *ngIf=\"proveedorSeleccionado === 'Gemini'\" class=\"chat-ia-check\" width=\"13\" height=\"13\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"3\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <path d=\"M20 6L9 17l-5-5\"></path>\r\n </svg>\r\n </button>\r\n <button mat-menu-item [class.opcion-activa]=\"proveedorSeleccionado === 'Groq'\"\r\n (click)=\"proveedorSeleccionado = 'Groq'\">\r\n <span>Groq</span>\r\n <svg *ngIf=\"proveedorSeleccionado === 'Groq'\" class=\"chat-ia-check\" width=\"13\" height=\"13\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"3\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <path d=\"M20 6L9 17l-5-5\"></path>\r\n </svg>\r\n </button>\r\n</mat-menu>\r\n",
|
|
188
|
+
styles: [":host{position:fixed;right:32px;bottom:32px;z-index:1000;font-family:Roboto,sans-serif}.chat-ia-panel{width:450px;height:650px;max-width:calc(100vw - 48px);max-height:calc(100vh - 96px);background:#fff;border-radius:18px;box-shadow:0 24px 60px rgba(20,25,30,.28);display:flex;flex-direction:column;overflow:hidden}.chat-ia-header{background:linear-gradient(135deg,#7c5ce0,#5f42bd);padding:16px 18px;display:flex;align-items:center;justify-content:space-between;flex-shrink:0}.chat-ia-header-info{display:flex;align-items:center;gap:10px;min-width:0}.chat-ia-header-icono{width:32px;height:32px;border-radius:50%;background:rgba(255,255,255,.22);display:flex;align-items:center;justify-content:center;flex:none}.chat-ia-titulo{color:#fff;font-size:14px;font-weight:500}.chat-ia-subtitulo{color:rgba(255,255,255,.75);font-size:11px;margin-top:1px}.chat-ia-cerrar{width:24px;height:24px;display:flex;align-items:center;justify-content:center;cursor:pointer;opacity:.85;flex:none}.chat-ia-cerrar:hover{opacity:1}.chat-ia-mensajes{flex:1;min-height:0;overflow-y:auto;display:flex;flex-direction:column;gap:12px;padding:16px;background:#fbfafc}.chat-ia-mensaje{display:flex}.chat-ia-mensaje .chat-ia-burbuja{max-width:88%;background:#f2eefb;color:#26313a;border-radius:14px 14px 14px 3px;padding:10px 13px;font-size:13px;line-height:1.5}.chat-ia-mensaje .chat-ia-burbuja-error{background:#fdecea;color:#7a1f14}.chat-ia-mensaje.chat-ia-mensaje-usuario{justify-content:flex-end}.chat-ia-mensaje.chat-ia-mensaje-usuario .chat-ia-burbuja{background:#7c5ce0;color:#fff;border-radius:14px 14px 3px}.chat-ia-bienvenida-texto{align-self:flex-start;max-width:88%;background:#f2eefb;color:#26313a;border-radius:14px 14px 14px 3px;padding:10px 13px;font-size:13px;line-height:1.5}.chips-chat-ia{flex:none;display:flex;flex-wrap:wrap;gap:6px;padding:0 16px 10px}.chip-chat-ia{border:1px solid #e7e2f5;background:#f2eefb;color:#5f42bd;border-radius:14px;padding:5px 10px;font-size:11px;cursor:pointer}.chip-chat-ia:hover{background:#e7ddfa}.chat-ia-descripcion{font-size:13px;line-height:1.5;margin-bottom:6px}.chat-ia-sin-resultados{color:#5a5a5a;font-style:italic}.chat-ia-stat{margin-top:4px}.chat-ia-stat-valor{font-size:30px;font-weight:600;color:#5f42bd;line-height:1.15;font-variant-numeric:proportional-nums}.chat-ia-lista-simple,.chat-ia-tabla-resultado{margin-top:4px;background:#fff;border-radius:10px;padding:8px 10px}.chat-ia-lista-simple{font-size:13px;line-height:1.5}.chat-ia-tabla-resultado{overflow-x:auto;max-width:100%;padding:4px 10px}.chat-ia-tabla-resultado table{font-size:12px;background:0 0}.chat-ia-tabla-resultado th.mat-header-cell{color:#6b6478;font-weight:600;padding:0 14px 5px 0;border-bottom:1px solid #f0edf7;white-space:nowrap}.chat-ia-tabla-resultado td.mat-cell{padding:7px 14px 0 0;white-space:nowrap;font-variant-numeric:tabular-nums}.chat-ia-pensando{align-self:flex-start;background:#f2eefb;padding:12px 16px;border-radius:14px 14px 14px 3px;display:flex;gap:5px;flex-shrink:0}.chat-ia-dot{width:6px;height:6px;border-radius:50%;background:#9a93ae;-webkit-animation:1.1s ease-in-out infinite chatIaBlink;animation:1.1s ease-in-out infinite chatIaBlink}.chat-ia-dot:nth-child(2){-webkit-animation-delay:.15s;animation-delay:.15s}.chat-ia-dot:nth-child(3){-webkit-animation-delay:.3s;animation-delay:.3s}@-webkit-keyframes chatIaBlink{0%,100%,80%{opacity:.25}40%{opacity:1}}@keyframes chatIaBlink{0%,100%,80%{opacity:.25}40%{opacity:1}}.chat-ia-entrada{padding:10px 14px 14px;border-top:1px solid #e9f2ee;flex-shrink:0}.chat-ia-caja-entrada{position:relative;background:#f2f7f5;border:1px solid #e6efea;border-radius:18px;padding:10px 12px 8px}.chat-ia-caja-entrada textarea{border:none;outline:0;background:0 0;width:100%;font:inherit;font-size:13.5px;color:#26313a;resize:none;line-height:1.45;max-height:110px;overflow-y:auto;display:block;padding:0 28px 0 0}.chat-ia-caja-entrada textarea.chat-ia-textarea-expandido{max-height:160px}.chat-ia-caja-entrada textarea::-webkit-input-placeholder{color:#9a93ae}.chat-ia-caja-entrada textarea::-moz-placeholder{color:#9a93ae}.chat-ia-caja-entrada textarea:-ms-input-placeholder{color:#9a93ae}.chat-ia-caja-entrada textarea::-ms-input-placeholder{color:#9a93ae}.chat-ia-caja-entrada textarea::placeholder{color:#9a93ae}.chat-ia-expandir{position:absolute;top:8px;right:10px;font-size:17px;height:17px;width:17px;color:#9a9a9a;cursor:pointer}.chat-ia-pie-entrada{display:flex;align-items:center;justify-content:flex-end;gap:8px;margin-top:8px}.chat-ia-selector-modelo{display:inline-flex;align-items:center;gap:4px;border:none;background:0 0;color:#4e5d57;border-radius:14px;padding:5px 9px;font-size:11.5px;font-weight:600;cursor:pointer}.chat-ia-enviar{width:32px;height:32px;border-radius:50%;border:none;background:#7c5ce0;color:#fff;display:flex;align-items:center;justify-content:center;cursor:pointer;flex:none}.chat-ia-enviar:disabled{background:#dce6e1;color:#a9bab3;cursor:default}.chat-ia-microfono{width:28px;height:28px;border-radius:50%;border:none;background:0 0;color:#6b6478;display:flex;align-items:center;justify-content:center;cursor:pointer;flex:none}.chat-ia-microfono:hover{background:#f2eefb}.chat-ia-microfono.chat-ia-microfono-activo{color:#fff;background:#e05a5a;-webkit-animation:1.1s ease-in-out infinite chatIaBlink;animation:1.1s ease-in-out infinite chatIaBlink}::ng-deep .mat-menu-panel.menu-modelo-chat-ia{min-width:132px;border:1px solid #e6efea;border-radius:10px;box-shadow:0 12px 26px rgba(20,25,30,.16)}::ng-deep .mat-menu-panel.menu-modelo-chat-ia .mat-menu-content{padding:4px}::ng-deep .mat-menu-panel.menu-modelo-chat-ia .mat-menu-item{display:flex;align-items:center;justify-content:space-between;gap:8px;height:auto;line-height:normal;padding:7px 10px;font-size:12px;color:#26313a;border-radius:7px}::ng-deep .mat-menu-panel.menu-modelo-chat-ia .mat-menu-item.opcion-activa{background:#f2f7f5}::ng-deep .mat-menu-panel.menu-modelo-chat-ia .mat-menu-item .chat-ia-check{color:#7c5ce0}"]
|
|
189
|
+
})
|
|
190
|
+
], AsistenteDatosComponent);
|
|
191
|
+
return AsistenteDatosComponent;
|
|
192
|
+
}());
|
|
193
|
+
export { AsistenteDatosComponent };
|
|
194
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNpc3RlbnRlLWRhdG9zLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL3dtLW1lbnUvIiwic291cmNlcyI6WyJsaWIvd20tbWVudS9hc2lzdGVudGUtZGF0b3MvYXNpc3RlbnRlLWRhdG9zLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBYyxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDOUYsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDeEUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFnQnpFO0lBd0NJLGlDQUNZLHdCQUFrRCxFQUNsRCxpQkFBMkM7UUFEM0MsNkJBQXdCLEdBQXhCLHdCQUF3QixDQUEwQjtRQUNsRCxzQkFBaUIsR0FBakIsaUJBQWlCLENBQTBCO1FBdkN2RCwwRkFBMEY7UUFDMUYscUZBQXFGO1FBQzVFLFlBQU8sR0FBRyxLQUFLLENBQUM7UUFTekIseURBQXlEO1FBQ2hELFdBQU0sR0FBRyxPQUFPLENBQUM7UUFFaEIsaUJBQVksR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBRTNDLGFBQVEsR0FBNEIsRUFBRSxDQUFDO1FBQ3ZDLGFBQVEsR0FBRyxFQUFFLENBQUM7UUFDckIsOEZBQThGO1FBQzlGLGtHQUFrRztRQUMzRixzQkFBaUIsR0FBRyxLQUFLLENBQUM7UUFDMUIsZ0JBQVcsR0FBRyxLQUFLLENBQUM7UUFDM0IsbUZBQW1GO1FBQ25GLDJDQUEyQztRQUNwQywwQkFBcUIsR0FBc0IsUUFBUSxDQUFDO1FBQzNELHNGQUFzRjtRQUMvRSxlQUFVLEdBQUcsS0FBSyxDQUFDO1FBRTFCLHNGQUFzRjtRQUN0RixnR0FBZ0c7UUFDaEcsNkNBQTZDO1FBQ3RDLG1CQUFjLEdBQWE7WUFDOUIsNENBQTRDO1lBQzVDLG9EQUFvRDtZQUNwRCxvREFBb0Q7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SUFJOUU7UUFBUixLQUFLLEVBQUU7NERBQWlCO0lBR2hCO1FBQVIsS0FBSyxFQUFFOytEQUlQO0lBR1E7UUFBUixLQUFLLEVBQUU7MkRBQWtCO0lBRWhCO1FBQVQsTUFBTSxFQUFFO2lFQUF5QztJQWpCekMsdUJBQXVCO1FBTG5DLFNBQVMsQ0FBQztZQUNQLFFBQVEsRUFBRSxvQkFBb0I7WUFDOUIsMmxPQUErQzs7U0FFbEQsQ0FBQztPQUNXLHVCQUF1QixDQXlLbkM7SUFBRCw4QkFBQztDQUFBLEFBektELElBeUtDO1NBektZLHVCQUF1QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgUmVjb25vY2ltaWVudG9Wb3pTZXJ2aWNlIH0gZnJvbSAnLi9yZWNvbm9jaW1pZW50by12b3ouc2VydmljZSc7XHJcbmltcG9ydCB7IEFzaXN0ZW50ZURhdG9zQXBpU2VydmljZSB9IGZyb20gJy4vYXNpc3RlbnRlLWRhdG9zLWFwaS5zZXJ2aWNlJztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgTWVuc2FqZUFzaXN0ZW50ZURhdG9zIHtcclxuICAgIGRlVXN1YXJpbzogYm9vbGVhbjtcclxuICAgIHRleHRvPzogc3RyaW5nO1xyXG4gICAgZGVzY3JpcGNpb24/OiBzdHJpbmc7XHJcbiAgICByZXN1bHRhZG8/OiBhbnlbXTtcclxuICAgIHByb3ZlZWRvcj86IHN0cmluZztcclxuICAgIGVzRXJyb3I/OiBib29sZWFuO1xyXG59XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnd20tYXNpc3RlbnRlLWRhdG9zJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9hc2lzdGVudGUtZGF0b3MuY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVVcmxzOiBbJy4vYXNpc3RlbnRlLWRhdG9zLmNvbXBvbmVudC5zY3NzJ10sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBc2lzdGVudGVEYXRvc0NvbXBvbmVudCB7XHJcbiAgICBAVmlld0NoaWxkKCdtZW5zYWplc0NvbnRhaW5lcicpIHByaXZhdGUgbWVuc2FqZXNDb250YWluZXI/OiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PjtcclxuXHJcbiAgICAvLyBMYSBhcGVydHVyYS9jaWVycmUgZGVsIHBhbmVsIGxhIGNvbnRyb2xhIGVsIHBhZHJlIChlbCBtZW7DuikuIEVsIHBhbmVsIHNvbG8gc2UgcmVuZGVyaXphXHJcbiAgICAvLyBjdWFuZG8gYGFiaWVydG9gIGVzIHRydWUgeSBhdmlzYSwgdsOtYSBgY2VycmFyQ2hhbmdlYCwgY3VhbmRvIGVsIHVzdWFyaW8gdG9jYSBsYSBYLlxyXG4gICAgQElucHV0KCkgYWJpZXJ0byA9IGZhbHNlO1xyXG5cclxuICAgIC8vIFVSTCBkZWwgUE9TVCBkZSBjb25zdWx0YS4gU2UgcmVmbGVqYSBlbiBlbCBhcGkgc2VydmljZSAocHJvcGllZGFkIGB1cmxgKSwgcXVlIGVzIGRvbmRlIHNlIHVzYS5cclxuICAgIEBJbnB1dCgpIHNldCB1cmxDb25zdWx0YXIodmFsb3I6IHN0cmluZykge1xyXG4gICAgICAgIGlmICh2YWxvcikge1xyXG4gICAgICAgICAgICB0aGlzLmFzaXN0ZW50ZURhdG9zQXBpU2VydmljZS51cmwgPSB2YWxvcjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gSWRpb21hIHBhcmEgZWwgcmVjb25vY2ltaWVudG8gZGUgdm96IChXZWIgU3BlZWNoIEFQSSkuXHJcbiAgICBASW5wdXQoKSBpZGlvbWEgPSAnZXMtQ08nO1xyXG5cclxuICAgIEBPdXRwdXQoKSBjZXJyYXJDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcblxyXG4gICAgcHVibGljIG1lbnNhamVzOiBNZW5zYWplQXNpc3RlbnRlRGF0b3NbXSA9IFtdO1xyXG4gICAgcHVibGljIGJvcnJhZG9yID0gJyc7XHJcbiAgICAvLyBBbHRlcm5hIGVsIGFsdG8gZGUgbGEgY2FqYSBkZWwgbWVuc2FqZSAoY29tcGFjdGEg4oaUIGV4cGFuZGlkYSksIGlndWFsIHF1ZSBlbCBcInBlZGlyIGNhbWJpb3NcIlxyXG4gICAgLy8gZGVsIGFzaXN0ZW50ZSBkZSBJQSBkZWwgZ2VuZXJhZG9yIGRlIGZvcm11bGFyaW9zICh2ZXIgZmlsYXNCb3JyYWRvciAvIG9uQ2xpY2tFeHBhbmRpckJvcnJhZG9yKS5cclxuICAgIHB1YmxpYyBib3JyYWRvckV4cGFuZGlkbyA9IGZhbHNlO1xyXG4gICAgcHVibGljIGNvbnN1bHRhbmRvID0gZmFsc2U7XHJcbiAgICAvLyBcIkdlbWluaVwiIG8gXCJHcm9xXCIg4oCUIG1pc21vIHNlbGVjdG9yIHF1ZSBlbCBhc2lzdGVudGUgZGUgZ2VuZXJhY2nDs24gZGUgZm9ybXVsYXJpb3NcclxuICAgIC8vICh2ZXIgUHJvdmVlZG9ySUFTZXJ2aWNpbyBlbiBlbCBiYWNrZW5kKS5cclxuICAgIHB1YmxpYyBwcm92ZWVkb3JTZWxlY2Npb25hZG86ICdHZW1pbmknIHwgJ0dyb3EnID0gJ0dlbWluaSc7XHJcbiAgICAvLyBEaWN0YWRvIHBvciB2b3ogKFdlYiBTcGVlY2ggQVBJKSDigJQgc2luIHNvcG9ydGUgZW4gRmlyZWZveCwgaW5jb25zaXN0ZW50ZSBlbiBTYWZhcmkuXHJcbiAgICBwdWJsaWMgZXNjdWNoYW5kbyA9IGZhbHNlO1xyXG5cclxuICAgIC8vIFByZWd1bnRhcyB5YSB2ZXJpZmljYWRhcyBjb21vIHJlc3BvbmRpYmxlcyBob3kgKHdoaXRlbGlzdCArIGNvbnRyYXRvIGRlIGxhIElBIOKAlCB2ZXJcclxuICAgIC8vIENoYXRDb25zdWx0YVdoaXRlbGlzdFNlcnZpY2lvL0NoYXRDb25zdWx0YVByb21wdFNlcnZpY2lvIGVuIGVsIGJhY2tlbmQpLCBtb3N0cmFkYXMgY29tbyBjaGlwc1xyXG4gICAgLy8gZGUgc3VnZXJlbmNpYSBlbiBlbCBlc3RhZG8gdmFjw61vIGRlbCBjaGF0LlxyXG4gICAgcHVibGljIGNoaXBzU3VnZXJpZG9zOiBzdHJpbmdbXSA9IFtcclxuICAgICAgICAnwr9DdcOhbnRvcyBmb3JtdWxhcmlvcyBzZSBkaWxpZ2VuY2lhcm9uIGhveT8nLFxyXG4gICAgICAgICfCv0N1w6FudG9zIGZvcm11bGFyaW9zIHNlIGRpbGlnZW5jaWFyb24gZXN0YSBzZW1hbmE/JyxcclxuICAgICAgICAnTXXDqXN0cmFtZSBsb3Mgw7psdGltb3MgMTAgZm9ybXVsYXJpb3MgZGlsaWdlbmNpYWRvcycsXHJcbiAgICBdO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHByaXZhdGUgYXNpc3RlbnRlRGF0b3NBcGlTZXJ2aWNlOiBBc2lzdGVudGVEYXRvc0FwaVNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSByZWNvbm9jaW1pZW50b1ZvejogUmVjb25vY2ltaWVudG9Wb3pTZXJ2aWNlXHJcbiAgICApIHt9XHJcblxyXG4gICAgLy8gRWwgcGFkcmUgYWJyZS9jaWVycmEgZWwgcGFuZWw7IGFxdcOtIHNvbG8gc2UgYXZpc2EgcXVlIGVsIHVzdWFyaW8gcGlkacOzIGNlcnJhcmxvIChib3TDs24gWCkuXHJcbiAgICBjZXJyYXIoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5jZXJyYXJDaGFuZ2UuZW1pdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIENhamEgZGVsIG1lbnNhamUgY29tcGFjdGEgKDEgZmlsYSwgY29tbyBlcmEgZWwgY2hhdCBvcmlnaW5hbG1lbnRlKSDihpQgZXhwYW5kaWRhICg2IGZpbGFzKS5cclxuICAgIC8vIEVsIGJvdMOzbiBkZSBleHBhbmRpciBlcyBlbCBtaXNtbyBwYXRyw7NuIGRlbCBcInBlZGlyIGNhbWJpb3NcIiBkZWwgZ2VuZXJhZG9yLlxyXG4gICAgZ2V0IGZpbGFzQm9ycmFkb3IoKTogbnVtYmVyIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5ib3JyYWRvckV4cGFuZGlkbyA/IDYgOiAxO1xyXG4gICAgfVxyXG5cclxuICAgIG9uQ2xpY2tFeHBhbmRpckJvcnJhZG9yKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuYm9ycmFkb3JFeHBhbmRpZG8gPSAhdGhpcy5ib3JyYWRvckV4cGFuZGlkbztcclxuICAgIH1cclxuXHJcbiAgICBnZXQgbWljRGlzcG9uaWJsZSgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5yZWNvbm9jaW1pZW50b1Zvei5lc3RhU29wb3J0YWRvKCk7XHJcbiAgICB9XHJcblxyXG4gICAgb25DbGlja01pY3JvZm9ubygpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5lc2N1Y2hhbmRvKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVjb25vY2ltaWVudG9Wb3ouZGV0ZW5lcigpO1xyXG4gICAgICAgICAgICB0aGlzLmVzY3VjaGFuZG8gPSBmYWxzZTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLnJlY29ub2NpbWllbnRvVm96LmVzdGFTb3BvcnRhZG8oKSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBFbCByZXN1bHRhZG8gZGVsIHJlY29ub2NpbWllbnRvIG5vIGluY2x1eWUgbG8gcXVlIHlhIGVzdGFiYSBlc2NyaXRvIOKAlCBzZSBndWFyZGEgYW50ZXMgZGVcclxuICAgICAgICAvLyBlbXBlemFyIHkgc2UgYW50ZXBvbmUgZW4gY2FkYSBhY3R1YWxpemFjacOzbiAocXVlIGxsZWdhIGNvbiBsYSB0cmFuc2NyaXBjacOzbiBDT01QTEVUQSBkZVxyXG4gICAgICAgIC8vIGVzdGEgc2VzacOzbiBkZSBlc2N1Y2hhLCBubyB1biBpbmNyZW1lbnRvKSBwYXJhIG5vIHBlcmRlciBsbyBxdWUgeWEgaGFiw61hIGVuIGVsIGNhbXBvLlxyXG4gICAgICAgIGNvbnN0IHRleHRvUHJldmlvID0gdGhpcy5ib3JyYWRvci50cmltKCk7XHJcbiAgICAgICAgdGhpcy5lc2N1Y2hhbmRvID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnJlY29ub2NpbWllbnRvVm96LmluaWNpYXIoXHJcbiAgICAgICAgICAgIHRoaXMuaWRpb21hLFxyXG4gICAgICAgICAgICAodGV4dG8pID0+ICh0aGlzLmJvcnJhZG9yID0gdGV4dG9QcmV2aW8gPyBgJHt0ZXh0b1ByZXZpb30gJHt0ZXh0b31gIDogdGV4dG8pLFxyXG4gICAgICAgICAgICAoKSA9PiAodGhpcy5lc2N1Y2hhbmRvID0gZmFsc2UpXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBvbkNsaWNrRW52aWFyKHRleHRvUHJlc2V0Pzogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgcHJlZ3VudGEgPSAodGV4dG9QcmVzZXQgPz8gdGhpcy5ib3JyYWRvcikudHJpbSgpO1xyXG4gICAgICAgIGlmICghcHJlZ3VudGEgfHwgdGhpcy5jb25zdWx0YW5kbykge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLm1lbnNhamVzLnB1c2goeyBkZVVzdWFyaW86IHRydWUsIHRleHRvOiBwcmVndW50YSB9KTtcclxuICAgICAgICB0aGlzLmJvcnJhZG9yID0gJyc7XHJcblxyXG4gICAgICAgIC8vIFNpbiB1cmwgZGUgY29uc3VsdGEgbm8gc2UgaGFjZSBsYSBwZXRpY2nDs246IGVsIHVzdWFyaW8gdmUgZWwgbWlzbW8gZXJyb3IgZ2Vuw6lyaWNvIHF1ZVxyXG4gICAgICAgIC8vIGN1YW5kbyBsYSBBUEkgZmFsbGEuXHJcbiAgICAgICAgaWYgKCF0aGlzLmFzaXN0ZW50ZURhdG9zQXBpU2VydmljZS51cmwpIHtcclxuICAgICAgICAgICAgdGhpcy5tZW5zYWplcy5wdXNoKHtcclxuICAgICAgICAgICAgICAgIGRlVXN1YXJpbzogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICB0ZXh0bzogJ05vIHNlIHB1ZG8gcHJvY2VzYXIgbGEgY29uc3VsdGEuJyxcclxuICAgICAgICAgICAgICAgIGVzRXJyb3I6IHRydWUsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB0aGlzLnNjcm9sbEFsRmluYWwoKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5jb25zdWx0YW5kbyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5zY3JvbGxBbEZpbmFsKCk7XHJcblxyXG4gICAgICAgIHRoaXMuYXNpc3RlbnRlRGF0b3NBcGlTZXJ2aWNlLmNvbnN1bHRhcihwcmVndW50YSwgdGhpcy5wcm92ZWVkb3JTZWxlY2Npb25hZG8pLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgIC8vIEVsIHRpcG8gKFJlc3B1ZXN0YUFzaXN0ZW50ZURhdG9zKSBzZSBpbmZpZXJlIGRlbCBPYnNlcnZhYmxlOiBpbXBvcnRhciBsYSBpbnRlcmZhelxyXG4gICAgICAgICAgICAvLyBkZWphYmEgdW4gaW1wb3J0IGEgdW4gc8OtbWJvbG8gaW5leGlzdGVudGUgZW4gZWwgSlMgZGUgbGEgbGlicmVyw61hIChhdmlzbyBkZSByb2xsdXApLlxyXG4gICAgICAgICAgICBuZXh0OiAocmVzcHVlc3RhKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnN1bHRhbmRvID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1lbnNhamVzLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgIGRlVXN1YXJpbzogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgZGVzY3JpcGNpb246IHJlc3B1ZXN0YS5EZXNjcmlwY2lvbixcclxuICAgICAgICAgICAgICAgICAgICByZXN1bHRhZG86IHJlc3B1ZXN0YS5SZXN1bHRhZG8gPz8gW10sXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvdmVlZG9yOiByZXNwdWVzdGEuUHJvdmVlZG9yLFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbEFsRmluYWwoKTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZXJyb3I6IChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb25zdWx0YW5kbyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tZW5zYWplcy5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICBkZVVzdWFyaW86IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgIHRleHRvOiBlcnJvcj8uTWVuc2FqZSB8fCAnTm8gc2UgcHVkbyBwcm9jZXNhciBsYSBjb25zdWx0YS4nLFxyXG4gICAgICAgICAgICAgICAgICAgIGVzRXJyb3I6IHRydWUsXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsQWxGaW5hbCgpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEVsIG51ZXZvIG1lbnNhamUgcmVjacOpbiBzZSByZWZsZWphIGVuIGVsIERPTSBkZXNwdcOpcyBkZWwgc2lndWllbnRlIGNpY2xvIGRlIGRldGVjY2nDs24gZGVcclxuICAgIC8vIGNhbWJpb3Mg4oCUIHBvciBlc28gZWwgc2Nyb2xsVG9wIHNlIGFqdXN0YSBlbiB1biBzZXRUaW1lb3V0KDApLCBubyBpbm1lZGlhdGFtZW50ZSBkZXNwdcOpcyBkZWxcclxuICAgIC8vIHB1c2gsIHBhcmEgcXVlIHNjcm9sbEhlaWdodCB5YSBpbmNsdXlhIGVsIG1lbnNhamUgYWdyZWdhZG8uXHJcbiAgICBwcml2YXRlIHNjcm9sbEFsRmluYWwoKTogdm9pZCB7XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRvID0gdGhpcy5tZW5zYWplc0NvbnRhaW5lcj8ubmF0aXZlRWxlbWVudDtcclxuICAgICAgICAgICAgaWYgKGVsZW1lbnRvKSB7XHJcbiAgICAgICAgICAgICAgICBlbGVtZW50by5zY3JvbGxUb3AgPSBlbGVtZW50by5zY3JvbGxIZWlnaHQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBjb2x1bW5hc0RlKHJlc3VsdGFkbzogYW55W10pOiBzdHJpbmdbXSB7XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdGFkby5sZW5ndGggPyBPYmplY3Qua2V5cyhyZXN1bHRhZG9bMF0pIDogW107XHJcbiAgICB9XHJcblxyXG4gICAgLy8gRWwgYmFja2VuZCBkZXZ1ZWx2ZSB1biBjb250ZW8gKENoYXRDb25zdWx0YUlBU2VydmljaW8uRWplY3V0YXJDb250ZW8pIGNvbW8gdW5hIHNvbGEgZmlsYSBjb25cclxuICAgIC8vIHVuYSBzb2xhIGNvbHVtbmEgbGxhbWFkYSBsaXRlcmFsbWVudGUgXCJSZXN1bHRhZG9cIiDigJQgc2UgbXVlc3RyYSBjb21vIG7Dum1lcm8gZ3JhbmRlIGVuIHZleiBkZVxyXG4gICAgLy8gY29tbyB0YWJsYSBkZSB1bmEgY2VsZGEuXHJcbiAgICBlc0NvbnRlbyhyZXN1bHRhZG86IGFueVtdKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdGFkbz8ubGVuZ3RoID09PSAxICYmIE9iamVjdC5rZXlzKHJlc3VsdGFkb1swXSkubGVuZ3RoID09PSAxICYmICdSZXN1bHRhZG8nIGluIHJlc3VsdGFkb1swXTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBMaXN0YWRvIGNvbiB1bmEgc29sYSBjb2x1bW5hIChlai4gdW5hIGxpc3RhIGRlIG5vbWJyZXMvaWRzKSDigJQgc2UgbXVlc3RyYSBjb21vIHRleHRvIHNpbXBsZVxyXG4gICAgLy8gZW4gdmV6IGRlIHVuYSB0YWJsYSBkZSB1bmEgc29sYSBjb2x1bW5hIHJlcGV0aWRhLlxyXG4gICAgZXNMaXN0YVNpbXBsZShyZXN1bHRhZG86IGFueVtdKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdGFkbz8ubGVuZ3RoID4gMCAmJiAhdGhpcy5lc0NvbnRlbyhyZXN1bHRhZG8pICYmIHRoaXMuY29sdW1uYXNEZShyZXN1bHRhZG8pLmxlbmd0aCA9PT0gMTtcclxuICAgIH1cclxuXHJcbiAgICB0ZXh0b0xpc3RhU2ltcGxlKHJlc3VsdGFkbzogYW55W10pOiBzdHJpbmcge1xyXG4gICAgICAgIGNvbnN0IGNvbHVtbmEgPSB0aGlzLmNvbHVtbmFzRGUocmVzdWx0YWRvKVswXTtcclxuICAgICAgICByZXR1cm4gcmVzdWx0YWRvLm1hcCgoZmlsYSkgPT4gZmlsYVtjb2x1bW5hXSkuam9pbignLCAnKTtcclxuICAgIH1cclxufVxyXG4iXX0=
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { __decorate } from "tslib";
|
|
2
|
+
import { Injectable } from '@angular/core';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
// Envoltorio de la Web Speech API (SpeechRecognition) del navegador — dictado de voz a texto,
|
|
5
|
+
// 100% cliente, sin backend. Soportado en Chrome/Edge; SIN soporte en Firefox y de forma
|
|
6
|
+
// inconsistente en Safari (limitación real del navegador, no de esta implementación).
|
|
7
|
+
var ReconocimientoVozService = /** @class */ (function () {
|
|
8
|
+
function ReconocimientoVozService() {
|
|
9
|
+
this.reconocimiento = null;
|
|
10
|
+
}
|
|
11
|
+
ReconocimientoVozService.prototype.estaSoportado = function () {
|
|
12
|
+
return !!(this.obtenerConstructor());
|
|
13
|
+
};
|
|
14
|
+
// onResultado se llama con el texto reconocido hasta el momento (incluye resultados
|
|
15
|
+
// provisionales — interimResults: true — para que el cuadro de texto se vea llenar en vivo).
|
|
16
|
+
// onFin se llama cuando el reconocimiento termina, ya sea porque el navegador detectó una
|
|
17
|
+
// pausa (continuous: false) o porque se llamó a detener().
|
|
18
|
+
ReconocimientoVozService.prototype.iniciar = function (idioma, onResultado, onFin) {
|
|
19
|
+
var _this = this;
|
|
20
|
+
var SpeechRecognitionCtor = this.obtenerConstructor();
|
|
21
|
+
if (!SpeechRecognitionCtor) {
|
|
22
|
+
onFin();
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
this.detener();
|
|
26
|
+
this.reconocimiento = new SpeechRecognitionCtor();
|
|
27
|
+
this.reconocimiento.lang = idioma;
|
|
28
|
+
this.reconocimiento.continuous = false;
|
|
29
|
+
this.reconocimiento.interimResults = true;
|
|
30
|
+
this.reconocimiento.onresult = function (evento) {
|
|
31
|
+
var texto = Array.from(evento.results)
|
|
32
|
+
.map(function (resultado) { return resultado[0].transcript; })
|
|
33
|
+
.join(' ');
|
|
34
|
+
onResultado(texto);
|
|
35
|
+
};
|
|
36
|
+
this.reconocimiento.onerror = function (evento) {
|
|
37
|
+
var _a;
|
|
38
|
+
// Motivos típicos (event.error de SpeechRecognitionErrorEvent): "not-allowed" (permiso de
|
|
39
|
+
// micrófono denegado o sitio sin HTTPS/localhost), "no-speech", "audio-capture" (sin
|
|
40
|
+
// micrófono), "network". Se deja en consola porque no hay backend que lo registre y el
|
|
41
|
+
// navegador no explica el motivo en la UI.
|
|
42
|
+
console.error('Reconocimiento de voz: error -', (_a = evento) === null || _a === void 0 ? void 0 : _a.error);
|
|
43
|
+
_this.reconocimiento = null;
|
|
44
|
+
onFin();
|
|
45
|
+
};
|
|
46
|
+
this.reconocimiento.onend = function () {
|
|
47
|
+
_this.reconocimiento = null;
|
|
48
|
+
onFin();
|
|
49
|
+
};
|
|
50
|
+
try {
|
|
51
|
+
this.reconocimiento.start();
|
|
52
|
+
}
|
|
53
|
+
catch (e) {
|
|
54
|
+
console.error('Reconocimiento de voz: no se pudo iniciar -', e);
|
|
55
|
+
this.reconocimiento = null;
|
|
56
|
+
onFin();
|
|
57
|
+
}
|
|
58
|
+
};
|
|
59
|
+
ReconocimientoVozService.prototype.detener = function () {
|
|
60
|
+
if (this.reconocimiento) {
|
|
61
|
+
this.reconocimiento.onend = null;
|
|
62
|
+
this.reconocimiento.onerror = null;
|
|
63
|
+
this.reconocimiento.stop();
|
|
64
|
+
this.reconocimiento = null;
|
|
65
|
+
}
|
|
66
|
+
};
|
|
67
|
+
ReconocimientoVozService.prototype.obtenerConstructor = function () {
|
|
68
|
+
return window.SpeechRecognition || window.webkitSpeechRecognition || null;
|
|
69
|
+
};
|
|
70
|
+
ReconocimientoVozService.ɵprov = i0.ɵɵdefineInjectable({ factory: function ReconocimientoVozService_Factory() { return new ReconocimientoVozService(); }, token: ReconocimientoVozService, providedIn: "root" });
|
|
71
|
+
ReconocimientoVozService = __decorate([
|
|
72
|
+
Injectable({
|
|
73
|
+
providedIn: 'root',
|
|
74
|
+
})
|
|
75
|
+
], ReconocimientoVozService);
|
|
76
|
+
return ReconocimientoVozService;
|
|
77
|
+
}());
|
|
78
|
+
export { ReconocimientoVozService };
|
|
79
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjb25vY2ltaWVudG8tdm96LnNlcnZpY2UuanMiLCJzb3VyY2VSb290Ijoibmc6Ly93bS1tZW51LyIsInNvdXJjZXMiOlsibGliL3dtLW1lbnUvYXNpc3RlbnRlLWRhdG9zL3JlY29ub2NpbWllbnRvLXZvei5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUUzQyw4RkFBOEY7QUFDOUYseUZBQXlGO0FBQ3pGLHNGQUFzRjtBQUl0RjtJQUFBO1FBQ1ksbUJBQWMsR0FBUSxJQUFJLENBQUM7S0FtRXRDO0lBakVHLGdEQUFhLEdBQWI7UUFDSSxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUVELG9GQUFvRjtJQUNwRiw2RkFBNkY7SUFDN0YsMEZBQTBGO0lBQzFGLDJEQUEyRDtJQUMzRCwwQ0FBTyxHQUFQLFVBQVEsTUFBYyxFQUFFLFdBQW9DLEVBQUUsS0FBaUI7UUFBL0UsaUJBMkNDO1FBMUNHLElBQU0scUJBQXFCLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDeEQsSUFBSSxDQUFDLHFCQUFxQixFQUFFO1lBQ3hCLEtBQUssRUFBRSxDQUFDO1lBQ1IsT0FBTztTQUNWO1FBRUQsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBRWYsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLHFCQUFxQixFQUFFLENBQUM7UUFDbEQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDO1FBQ2xDLElBQUksQ0FBQyxjQUFjLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztRQUN2QyxJQUFJLENBQUMsY0FBYyxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7UUFFMUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEdBQUcsVUFBQyxNQUFXO1lBQ3ZDLElBQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQztpQkFDbkMsR0FBRyxDQUFDLFVBQUMsU0FBYyxJQUFLLE9BQUEsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsRUFBdkIsQ0FBdUIsQ0FBQztpQkFDaEQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ2YsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3ZCLENBQUMsQ0FBQztRQUVGLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxHQUFHLFVBQUMsTUFBVzs7WUFDdEMsMEZBQTBGO1lBQzFGLHFGQUFxRjtZQUNyRix1RkFBdUY7WUFDdkYsMkNBQTJDO1lBQzNDLE9BQU8sQ0FBQyxLQUFLLENBQUMsZ0NBQWdDLFFBQUUsTUFBTSwwQ0FBRSxLQUFLLENBQUMsQ0FBQztZQUMvRCxLQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQztZQUMzQixLQUFLLEVBQUUsQ0FBQztRQUNaLENBQUMsQ0FBQztRQUVGLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxHQUFHO1lBQ3hCLEtBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO1lBQzNCLEtBQUssRUFBRSxDQUFDO1FBQ1osQ0FBQyxDQUFDO1FBRUYsSUFBSTtZQUNBLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFLENBQUM7U0FDL0I7UUFBQyxPQUFPLENBQUMsRUFBRTtZQUNSLE9BQU8sQ0FBQyxLQUFLLENBQUMsNkNBQTZDLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDaEUsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7WUFDM0IsS0FBSyxFQUFFLENBQUM7U0FDWDtJQUNMLENBQUM7SUFFRCwwQ0FBTyxHQUFQO1FBQ0ksSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFO1lBQ3JCLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztZQUNqQyxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7WUFDbkMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUMzQixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQztTQUM5QjtJQUNMLENBQUM7SUFFTyxxREFBa0IsR0FBMUI7UUFDSSxPQUFRLE1BQWMsQ0FBQyxpQkFBaUIsSUFBSyxNQUFjLENBQUMsdUJBQXVCLElBQUksSUFBSSxDQUFDO0lBQ2hHLENBQUM7O0lBbkVRLHdCQUF3QjtRQUhwQyxVQUFVLENBQUM7WUFDUixVQUFVLEVBQUUsTUFBTTtTQUNyQixDQUFDO09BQ1csd0JBQXdCLENBb0VwQzttQ0E1RUQ7Q0E0RUMsQUFwRUQsSUFvRUM7U0FwRVksd0JBQXdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuLy8gRW52b2x0b3JpbyBkZSBsYSBXZWIgU3BlZWNoIEFQSSAoU3BlZWNoUmVjb2duaXRpb24pIGRlbCBuYXZlZ2Fkb3Ig4oCUIGRpY3RhZG8gZGUgdm96IGEgdGV4dG8sXHJcbi8vIDEwMCUgY2xpZW50ZSwgc2luIGJhY2tlbmQuIFNvcG9ydGFkbyBlbiBDaHJvbWUvRWRnZTsgU0lOIHNvcG9ydGUgZW4gRmlyZWZveCB5IGRlIGZvcm1hXHJcbi8vIGluY29uc2lzdGVudGUgZW4gU2FmYXJpIChsaW1pdGFjacOzbiByZWFsIGRlbCBuYXZlZ2Fkb3IsIG5vIGRlIGVzdGEgaW1wbGVtZW50YWNpw7NuKS5cclxuQEluamVjdGFibGUoe1xyXG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgUmVjb25vY2ltaWVudG9Wb3pTZXJ2aWNlIHtcclxuICAgIHByaXZhdGUgcmVjb25vY2ltaWVudG86IGFueSA9IG51bGw7XHJcblxyXG4gICAgZXN0YVNvcG9ydGFkbygpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gISEodGhpcy5vYnRlbmVyQ29uc3RydWN0b3IoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gb25SZXN1bHRhZG8gc2UgbGxhbWEgY29uIGVsIHRleHRvIHJlY29ub2NpZG8gaGFzdGEgZWwgbW9tZW50byAoaW5jbHV5ZSByZXN1bHRhZG9zXHJcbiAgICAvLyBwcm92aXNpb25hbGVzIOKAlCBpbnRlcmltUmVzdWx0czogdHJ1ZSDigJQgcGFyYSBxdWUgZWwgY3VhZHJvIGRlIHRleHRvIHNlIHZlYSBsbGVuYXIgZW4gdml2bykuXHJcbiAgICAvLyBvbkZpbiBzZSBsbGFtYSBjdWFuZG8gZWwgcmVjb25vY2ltaWVudG8gdGVybWluYSwgeWEgc2VhIHBvcnF1ZSBlbCBuYXZlZ2Fkb3IgZGV0ZWN0w7MgdW5hXHJcbiAgICAvLyBwYXVzYSAoY29udGludW91czogZmFsc2UpIG8gcG9ycXVlIHNlIGxsYW3DsyBhIGRldGVuZXIoKS5cclxuICAgIGluaWNpYXIoaWRpb21hOiBzdHJpbmcsIG9uUmVzdWx0YWRvOiAodGV4dG86IHN0cmluZykgPT4gdm9pZCwgb25GaW46ICgpID0+IHZvaWQpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBTcGVlY2hSZWNvZ25pdGlvbkN0b3IgPSB0aGlzLm9idGVuZXJDb25zdHJ1Y3RvcigpO1xyXG4gICAgICAgIGlmICghU3BlZWNoUmVjb2duaXRpb25DdG9yKSB7XHJcbiAgICAgICAgICAgIG9uRmluKCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuZGV0ZW5lcigpO1xyXG5cclxuICAgICAgICB0aGlzLnJlY29ub2NpbWllbnRvID0gbmV3IFNwZWVjaFJlY29nbml0aW9uQ3RvcigpO1xyXG4gICAgICAgIHRoaXMucmVjb25vY2ltaWVudG8ubGFuZyA9IGlkaW9tYTtcclxuICAgICAgICB0aGlzLnJlY29ub2NpbWllbnRvLmNvbnRpbnVvdXMgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnJlY29ub2NpbWllbnRvLmludGVyaW1SZXN1bHRzID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgdGhpcy5yZWNvbm9jaW1pZW50by5vbnJlc3VsdCA9IChldmVudG86IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCB0ZXh0byA9IEFycmF5LmZyb20oZXZlbnRvLnJlc3VsdHMpXHJcbiAgICAgICAgICAgICAgICAubWFwKChyZXN1bHRhZG86IGFueSkgPT4gcmVzdWx0YWRvWzBdLnRyYW5zY3JpcHQpXHJcbiAgICAgICAgICAgICAgICAuam9pbignICcpO1xyXG4gICAgICAgICAgICBvblJlc3VsdGFkbyh0ZXh0byk7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5yZWNvbm9jaW1pZW50by5vbmVycm9yID0gKGV2ZW50bzogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIC8vIE1vdGl2b3MgdMOtcGljb3MgKGV2ZW50LmVycm9yIGRlIFNwZWVjaFJlY29nbml0aW9uRXJyb3JFdmVudCk6IFwibm90LWFsbG93ZWRcIiAocGVybWlzbyBkZVxyXG4gICAgICAgICAgICAvLyBtaWNyw7Nmb25vIGRlbmVnYWRvIG8gc2l0aW8gc2luIEhUVFBTL2xvY2FsaG9zdCksIFwibm8tc3BlZWNoXCIsIFwiYXVkaW8tY2FwdHVyZVwiIChzaW5cclxuICAgICAgICAgICAgLy8gbWljcsOzZm9ubyksIFwibmV0d29ya1wiLiBTZSBkZWphIGVuIGNvbnNvbGEgcG9ycXVlIG5vIGhheSBiYWNrZW5kIHF1ZSBsbyByZWdpc3RyZSB5IGVsXHJcbiAgICAgICAgICAgIC8vIG5hdmVnYWRvciBubyBleHBsaWNhIGVsIG1vdGl2byBlbiBsYSBVSS5cclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcignUmVjb25vY2ltaWVudG8gZGUgdm96OiBlcnJvciAtJywgZXZlbnRvPy5lcnJvcik7XHJcbiAgICAgICAgICAgIHRoaXMucmVjb25vY2ltaWVudG8gPSBudWxsO1xyXG4gICAgICAgICAgICBvbkZpbigpO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRoaXMucmVjb25vY2ltaWVudG8ub25lbmQgPSAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMucmVjb25vY2ltaWVudG8gPSBudWxsO1xyXG4gICAgICAgICAgICBvbkZpbigpO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVjb25vY2ltaWVudG8uc3RhcnQoKTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1JlY29ub2NpbWllbnRvIGRlIHZvejogbm8gc2UgcHVkbyBpbmljaWFyIC0nLCBlKTtcclxuICAgICAgICAgICAgdGhpcy5yZWNvbm9jaW1pZW50byA9IG51bGw7XHJcbiAgICAgICAgICAgIG9uRmluKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGRldGVuZXIoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMucmVjb25vY2ltaWVudG8pIHtcclxuICAgICAgICAgICAgdGhpcy5yZWNvbm9jaW1pZW50by5vbmVuZCA9IG51bGw7XHJcbiAgICAgICAgICAgIHRoaXMucmVjb25vY2ltaWVudG8ub25lcnJvciA9IG51bGw7XHJcbiAgICAgICAgICAgIHRoaXMucmVjb25vY2ltaWVudG8uc3RvcCgpO1xyXG4gICAgICAgICAgICB0aGlzLnJlY29ub2NpbWllbnRvID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBvYnRlbmVyQ29uc3RydWN0b3IoKTogYW55IHtcclxuICAgICAgICByZXR1cm4gKHdpbmRvdyBhcyBhbnkpLlNwZWVjaFJlY29nbml0aW9uIHx8ICh3aW5kb3cgYXMgYW55KS53ZWJraXRTcGVlY2hSZWNvZ25pdGlvbiB8fCBudWxsO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
|
|
@@ -13,28 +13,23 @@ var WmMenuAlertaPanicoService = /** @class */ (function () {
|
|
|
13
13
|
this.IdsAlertasPanicoActivas = new Set(); // Almacena los IDs de las alertas ya manejadas
|
|
14
14
|
this.soundTimeout = null; // Controla el temporizador del sonido
|
|
15
15
|
this.isRunning = false;
|
|
16
|
-
console.log('WmMenuAlertaPanicoService inicializado.');
|
|
17
16
|
}
|
|
18
17
|
WmMenuAlertaPanicoService.prototype.iniciarProceso = function (intervalMs, callback, urlObtenerParametro, token, rutaAudio) {
|
|
19
18
|
var _this = this;
|
|
20
|
-
console.log('iniciarProceso llamado con parámetros:', { intervalMs: intervalMs, urlObtenerParametro: urlObtenerParametro, token: token, rutaAudio: rutaAudio });
|
|
21
19
|
this.rutaAudio = rutaAudio;
|
|
22
20
|
var iniciarConInteraccion = function () {
|
|
23
|
-
console.log('iniciarConInteraccion ejecutado.');
|
|
24
21
|
_this.wmMenuServicioService
|
|
25
22
|
.menuApiObtener(urlObtenerParametro, null, token, 'ReporteAlertasPanico')
|
|
26
23
|
.subscribe(function (resp) {
|
|
27
|
-
|
|
24
|
+
// validar si el parametro ReporteAlertasPanico esta encendido
|
|
28
25
|
if (resp && resp.length > 0 && resp[0].Valor == 1) {
|
|
29
26
|
if (_this.isRunning) {
|
|
30
|
-
console.log('Proceso ya está corriendo.');
|
|
31
27
|
return;
|
|
32
28
|
}
|
|
29
|
+
// Inicializar la variable desde localStorage
|
|
33
30
|
var storedIds = localStorage.getItem('ALERTAS_PANICO_ACTIVAS_WM');
|
|
34
31
|
_this.IdsAlertasPanicoActivas = storedIds ? new Set(JSON.parse(storedIds)) : new Set();
|
|
35
|
-
console.log('IdsAlertasPanicoActivas inicializado:', _this.IdsAlertasPanicoActivas);
|
|
36
32
|
var ejecutarProceso_1 = function () {
|
|
37
|
-
console.log('ejecutarProceso iniciado.');
|
|
38
33
|
_this.isRunning = true;
|
|
39
34
|
callback();
|
|
40
35
|
setTimeout(function () {
|
|
@@ -47,49 +42,42 @@ var WmMenuAlertaPanicoService = /** @class */ (function () {
|
|
|
47
42
|
});
|
|
48
43
|
};
|
|
49
44
|
['drag', 'click'].forEach(function (evento) {
|
|
50
|
-
console.log("Evento " + evento + " registrado para iniciar proceso.");
|
|
51
45
|
document.addEventListener(evento, function () {
|
|
52
46
|
iniciarConInteraccion();
|
|
53
47
|
}, { once: true });
|
|
54
48
|
});
|
|
55
49
|
};
|
|
56
50
|
WmMenuAlertaPanicoService.prototype.stopProcess = function () {
|
|
57
|
-
console.log('stopProcess ejecutado.');
|
|
58
51
|
this.isRunning = false;
|
|
59
52
|
if (this.subscription) {
|
|
60
53
|
this.subscription.unsubscribe();
|
|
61
54
|
}
|
|
62
55
|
};
|
|
63
56
|
WmMenuAlertaPanicoService.prototype.ngOnDestroy = function () {
|
|
64
|
-
console.log('ngOnDestroy ejecutado.');
|
|
65
57
|
this.stopSound();
|
|
66
58
|
this.stopFlashingTitle();
|
|
67
59
|
};
|
|
68
60
|
WmMenuAlertaPanicoService.prototype.playSound = function () {
|
|
69
61
|
var _this = this;
|
|
70
|
-
console.log('playSound llamado.');
|
|
71
62
|
if (this.isPlaying)
|
|
72
63
|
return; // Evita reproducir si ya está sonando
|
|
73
64
|
this.isPlaying = true;
|
|
74
65
|
if (!this.audio) {
|
|
75
66
|
this.audio = new Audio(this.rutaAudio); // Ruta al archivo de sonido
|
|
76
67
|
}
|
|
77
|
-
console.log("Audio cargado: ", this.audio);
|
|
78
68
|
this.audio.loop = true; // Reproducir en bucle
|
|
79
69
|
this.audio.play()
|
|
80
70
|
.then(function () {
|
|
81
|
-
console.log('Sonido reproduciéndose.');
|
|
82
71
|
// Detener el sonido después de 10 segundos
|
|
83
72
|
_this.soundTimeout = setTimeout(function () {
|
|
84
73
|
_this.stopSound();
|
|
85
74
|
}, 10000); // Detener después de 10 segundos
|
|
86
75
|
})
|
|
87
76
|
.catch(function (error) {
|
|
88
|
-
console.
|
|
77
|
+
console.log('Error al reproducir el sonido:', error);
|
|
89
78
|
});
|
|
90
79
|
};
|
|
91
80
|
WmMenuAlertaPanicoService.prototype.stopSound = function () {
|
|
92
|
-
console.log('stopSound llamado.');
|
|
93
81
|
if (this.audio) {
|
|
94
82
|
this.audio.pause();
|
|
95
83
|
this.audio.currentTime = 0; // Reinicia el sonido
|
|
@@ -102,7 +90,6 @@ var WmMenuAlertaPanicoService = /** @class */ (function () {
|
|
|
102
90
|
};
|
|
103
91
|
WmMenuAlertaPanicoService.prototype.startFlashingTitle = function () {
|
|
104
92
|
var _this = this;
|
|
105
|
-
console.log('startFlashingTitle llamado.');
|
|
106
93
|
var toggle = false;
|
|
107
94
|
// Almacenar el título original si aún no se ha guardado
|
|
108
95
|
if (!this.originalTitle) {
|
|
@@ -117,7 +104,6 @@ var WmMenuAlertaPanicoService = /** @class */ (function () {
|
|
|
117
104
|
}
|
|
118
105
|
};
|
|
119
106
|
WmMenuAlertaPanicoService.prototype.stopFlashingTitle = function () {
|
|
120
|
-
console.log('stopFlashingTitle llamado.');
|
|
121
107
|
if (this.intervalId) {
|
|
122
108
|
clearInterval(this.intervalId);
|
|
123
109
|
this.intervalId = null;
|
|
@@ -126,16 +112,13 @@ var WmMenuAlertaPanicoService = /** @class */ (function () {
|
|
|
126
112
|
};
|
|
127
113
|
WmMenuAlertaPanicoService.prototype.revisarAlertasPendientes = function (urlObtenerAlertasPanico, token) {
|
|
128
114
|
var _this = this;
|
|
129
|
-
console.log('revisarAlertasPendientes llamado con parámetros:', { urlObtenerAlertasPanico: urlObtenerAlertasPanico, token: token });
|
|
130
115
|
var helper = new JwtHelperService();
|
|
131
116
|
var decodedToken = helper.decodeToken(token);
|
|
132
117
|
this.wmMenuServicioService
|
|
133
118
|
.menuApiObtener(urlObtenerAlertasPanico, decodedToken['id_usuario'], token)
|
|
134
119
|
.subscribe(function (resp) {
|
|
135
|
-
console.log('Respuesta obtenida de revisarAlertasPendientes:', resp);
|
|
136
120
|
if (resp && resp.length > 0) {
|
|
137
121
|
var alertasIds_1 = resp.map(function (alerta) { return alerta.IdAlertaPanico; });
|
|
138
|
-
console.log('IDs de alertas obtenidas:', alertasIds_1);
|
|
139
122
|
// Eliminar IDs que no están en la respuesta del servicio
|
|
140
123
|
_this.IdsAlertasPanicoActivas.forEach(function (id) {
|
|
141
124
|
if (!alertasIds_1.includes(id)) {
|
|
@@ -175,4 +158,4 @@ var WmMenuAlertaPanicoService = /** @class */ (function () {
|
|
|
175
158
|
return WmMenuAlertaPanicoService;
|
|
176
159
|
}());
|
|
177
160
|
export { WmMenuAlertaPanicoService };
|
|
178
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid20tbWVudS1hbGVydGEtcGFuaWNvLnNlcnZpY2UuanMiLCJzb3VyY2VSb290Ijoibmc6Ly93bS1tZW51LyIsInNvdXJjZXMiOlsibGliL3dtLW1lbnUvc2VydmljZXMvd20tbWVudS1hbGVydGEtcGFuaWNvLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDdEQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7OztBQUtuRTtJQVdFLG1DQUFvQixxQkFBNEM7UUFBNUMsMEJBQXFCLEdBQXJCLHFCQUFxQixDQUF1QjtRQVJ4RCxtQkFBYyxHQUFHLDJCQUEyQixDQUFDO1FBRTdDLFVBQUssR0FBNEIsSUFBSSxDQUFDO1FBQ3RDLGNBQVMsR0FBRyxLQUFLLENBQUMsQ0FBQyxnREFBZ0Q7UUFFbkUsNEJBQXVCLEdBQWdCLElBQUksR0FBRyxFQUFFLENBQUMsQ0FBQywrQ0FBK0M7UUFDakcsaUJBQVksR0FBUSxJQUFJLENBQUMsQ0FBQyxzQ0FBc0M7UUFPaEUsY0FBUyxHQUFZLEtBQUssQ0FBQztRQUpqQyxPQUFPLENBQUMsR0FBRyxDQUFDLHlDQUF5QyxDQUFDLENBQUM7SUFDekQsQ0FBQztJQUtELGtEQUFjLEdBQWQsVUFDRSxVQUFrQixFQUNsQixRQUFvQixFQUNwQixtQkFBMkIsRUFDM0IsS0FBYSxFQUNiLFNBQWlCO1FBTG5CLGlCQW1EQztRQTVDQyxPQUFPLENBQUMsR0FBRyxDQUFDLHdDQUF3QyxFQUFFLEVBQUUsVUFBVSxZQUFBLEVBQUUsbUJBQW1CLHFCQUFBLEVBQUUsS0FBSyxPQUFBLEVBQUUsU0FBUyxXQUFBLEVBQUUsQ0FBQyxDQUFDO1FBQzdHLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO1FBRTNCLElBQU0scUJBQXFCLEdBQUc7WUFDNUIsT0FB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QUFFO29CQUN6QyxLQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztpQkFDM0I7Z0JBQ0QscURBQXFEO2dCQUNyRCxJQUFJLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO29CQUN4QixLQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7aUJBQ2xCO2FBQ0Y7aUJBQU07Z0JBQ0wsc0RBQXNEO2dCQUN0RCxLQUFJLENBQUMsdUJBQXVCLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ3JDLEtBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO2FBQzFCO1lBQ0QsOENBQThDO1lBQzlDLFlBQVksQ0FBQyxPQUFPLENBQUMsMkJBQTJCLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUksQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM5RyxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7O2dCQWhMMEMscUJBQXFCOzs7SUFYckQseUJBQXlCO1FBSHJDLFVBQVUsQ0FBQztZQUNWLFVBQVUsRUFBRSxNQUFNO1NBQ25CLENBQUM7T0FDVyx5QkFBeUIsQ0E2THJDO29DQXBNRDtDQW9NQyxBQTdMRCxJQTZMQztTQTdMWSx5QkFBeUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEp3dEhlbHBlclNlcnZpY2UgfSBmcm9tICdAYXV0aDAvYW5ndWxhci1qd3QnO1xyXG5pbXBvcnQgeyBXbU1lbnVTZXJ2aWNpb1NlcnZpY2UgfSBmcm9tICcuL3dtLW1lbnUtc2VydmljaW8uc2VydmljZSc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBXbU1lbnVBbGVydGFQYW5pY29TZXJ2aWNlIHtcclxuXHJcbiAgcHJpdmF0ZSBpbnRlcnZhbElkOiBhbnk7XHJcbiAgcHJpdmF0ZSBhbHRlcm5hdGVUaXRsZSA9ICdBbGVydGEgZGUgUMOhbmljbyBSZWNpYmlkYSc7XHJcbiAgcHJpdmF0ZSBvcmlnaW5hbFRpdGxlOiBzdHJpbmc7XHJcbiAgcHJpdmF0ZSBhdWRpbzogSFRNTEF1ZGlvRWxlbWVudCB8IG51bGwgPSBudWxsO1xyXG4gIHByaXZhdGUgaXNQbGF5aW5nID0gZmFsc2U7IC8vIENvbnRyb2xhIHNpIGVsIHNvbmlkbyB5YSBlc3TDoSByZXByb2R1Y2nDqW5kb3NlXHJcbiAgcHVibGljIGZvcm11bGFyaW86IGFueTtcclxuICBwcml2YXRlIElkc0FsZXJ0YXNQYW5pY29BY3RpdmFzOiBTZXQ8bnVtYmVyPiA9IG5ldyBTZXQoKTsgLy8gQWxtYWNlbmEgbG9zIElEcyBkZSBsYXMgYWxlcnRhcyB5YSBtYW5lamFkYXNcclxuICBwcml2YXRlIHNvdW5kVGltZW91dDogYW55ID0gbnVsbDsgLy8gQ29udHJvbGEgZWwgdGVtcG9yaXphZG9yIGRlbCBzb25pZG9cclxuICBwcml2YXRlIHJ1dGFBdWRpbzogc3RyaW5nO1xyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgd21NZW51U2VydmljaW9TZXJ2aWNlOiBXbU1lbnVTZXJ2aWNpb1NlcnZpY2UpIHsgXHJcbiAgICBjb25zb2xlLmxvZygnV21NZW51QWxlcnRhUGFuaWNvU2VydmljZSBpbmljaWFsaXphZG8uJyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN1YnNjcmlwdGlvbjogYW55O1xyXG4gIHByaXZhdGUgaXNSdW5uaW5nOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIGluaWNpYXJQcm9jZXNvKFxyXG4gICAgaW50ZXJ2YWxNczogbnVtYmVyLFxyXG4gICAgY2FsbGJhY2s6ICgpID0+IHZvaWQsXHJcbiAgICB1cmxPYnRlbmVyUGFyYW1ldHJvOiBzdHJpbmcsXHJcbiAgICB0b2tlbjogc3RyaW5nLFxyXG4gICAgcnV0YUF1ZGlvOiBzdHJpbmdcclxuICApOiB2b2lkIHtcclxuICAgIGNvbnNvbGUubG9nKCdpbmljaWFyUHJvY2VzbyBsbGFtYWRvIGNvbiBwYXLDoW1ldHJvczonLCB7IGludGVydmFsTXMsIHVybE9idGVuZXJQYXJhbWV0cm8sIHRva2VuLCBydXRhQXVkaW8gfSk7XHJcbiAgICB0aGlzLnJ1dGFBdWRpbyA9IHJ1dGFBdWRpbztcclxuXHJcbiAgICBjb25zdCBpbmljaWFyQ29uSW50ZXJhY2Npb24gPSAoKSA9PiB7XHJcbiAgICAgIGNvbnNvbGUubG9nKCdpbmljaWFyQ29uSW50ZXJhY2Npb24gZWplY3V0YWRvLicpO1xyXG4gICAgICB0aGlzLndtTWVudVNlcnZpY2lvU2VydmljZVxyXG4gICAgICAgIC5tZW51QXBpT2J0ZW5lcih1cmxPYnRlbmVyUGFyYW1ldHJvLCBudWxsLCB0b2tlbiwgJ1JlcG9ydGVBbGVydGFzUGFuaWNvJylcclxuICAgICAgICAuc3Vic2NyaWJlKChyZXNwKSA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZygnUmVzcHVlc3RhIG9idGVuaWRhIGRlIG1lbnVBcGlPYnRlbmVyOicsIHJlc3ApO1xyXG4gICAgICAgICAgaWYgKHJlc3AgJiYgcmVzcC5sZW5ndGggPiAwICYmIHJlc3BbMF0uVmFsb3IgPT0gMSkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5pc1J1bm5pbmcpIHtcclxuICAgICAgICAgICAgICBjb25zb2xlLmxvZygnUHJvY2VzbyB5YSBlc3TDoSBjb3JyaWVuZG8uJyk7XHJcbiAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb25zdCBzdG9yZWRJZHMgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnQUxFUlRBU19QQU5JQ09fQUNUSVZBU19XTScpO1xyXG4gICAgICAgICAgICB0aGlzLklkc0FsZXJ0YXNQYW5pY29BY3RpdmFzID0gc3RvcmVkSWRzID8gbmV3IFNldChKU09OLnBhcnNlKHN0b3JlZElkcykpIDogbmV3IFNldCgpO1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnSWRzQWxlcnRhc1Bhbmljb0FjdGl2YXMgaW5pY2lhbGl6YWRvOicsIHRoaXMuSWRzQWxlcnRhc1Bhbmljb0FjdGl2YXMpO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgZWplY3V0YXJQcm9jZXNvID0gKCkgPT4ge1xyXG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdlamVjdXRhclByb2Nlc28gaW5pY2lhZG8uJyk7XHJcbiAgICAgICAgICAgICAgdGhpcy5pc1J1bm5pbmcgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIGNhbGxiYWNrKCk7XHJcbiAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzUnVubmluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgZWplY3V0YXJQcm9jZXNvKCk7XHJcbiAgICAgICAgICAgICAgfSwgaW50ZXJ2YWxNcyk7XHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBlamVjdXRhclByb2Nlc28oKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH07XHJcblxyXG4gICAgWydkcmFnJywgJ2NsaWNrJ10uZm9yRWFjaChldmVudG8gPT4ge1xyXG4gICAgICBjb25zb2xlLmxvZyhgRXZlbnRvICR7ZXZlbnRvfSByZWdpc3RyYWRvIHBhcmEgaW5pY2lhciBwcm9jZXNvLmApO1xyXG4gICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFxyXG4gICAgICAgIGV2ZW50byxcclxuICAgICAgICAoKSA9PiB7XHJcbiAgICAgICAgICBpbmljaWFyQ29uSW50ZXJhY2Npb24oKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHsgb25jZTogdHJ1ZSB9XHJcbiAgICAgICk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHN0b3BQcm9jZXNzKCk6IHZvaWQge1xyXG4gICAgY29uc29sZS5sb2coJ3N0b3BQcm9jZXNzIGVqZWN1dGFkby4nKTtcclxuICAgIHRoaXMuaXNSdW5uaW5nID0gZmFsc2U7XHJcbiAgICBpZiAodGhpcy5zdWJzY3JpcHRpb24pIHtcclxuICAgICAgdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgY29uc29sZS5sb2coJ25nT25EZXN0cm95IGVqZWN1dGFkby4nKTtcclxuICAgIHRoaXMuc3RvcFNvdW5kKCk7XHJcbiAgICB0aGlzLnN0b3BGbGFzaGluZ1RpdGxlKCk7XHJcbiAgfVxyXG5cclxuICBwbGF5U291bmQoKTogdm9pZCB7XHJcbiAgICBjb25zb2xlLmxvZygncGxheVNvdW5kIGxsYW1hZG8uJyk7XHJcbiAgICBpZiAodGhpcy5pc1BsYXlpbmcpIHJldHVybjsgLy8gRXZpdGEgcmVwcm9kdWNpciBzaSB5YSBlc3TDoSBzb25hbmRvXHJcbiAgICB0aGlzLmlzUGxheWluZyA9IHRydWU7XHJcbiAgICBpZiAoIXRoaXMuYXVkaW8pIHtcclxuICAgICAgdGhpcy5hdWRpbyA9IG5ldyBBdWRpbyh0aGlzLnJ1dGFBdWRpbyk7IC8vIFJ1dGEgYWwgYXJjaGl2byBkZSBzb25pZG9cclxuICAgIH1cclxuICAgIGNvbnNvbGUubG9nKFwiQXVkaW8gY2FyZ2FkbzogXCIsIHRoaXMuYXVkaW8pXHJcbiAgICB0aGlzLmF1ZGlvLmxvb3AgPSB0cnVlOyAvLyBSZXByb2R1Y2lyIGVuIGJ1Y2xlXHJcbiAgICB0aGlzLmF1ZGlvLnBsYXkoKVxyXG4gICAgICAudGhlbigoKSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ1NvbmlkbyByZXByb2R1Y2nDqW5kb3NlLicpO1xyXG4gICAgICAgIC8vIERldGVuZXIgZWwgc29uaWRvIGRlc3B1w6lzIGRlIDEwIHNlZ3VuZG9zXHJcbiAgICAgICAgdGhpcy5zb3VuZFRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgIHRoaXMuc3RvcFNvdW5kKCk7XHJcbiAgICAgICAgfSwgMTAwMDApOyAvLyBEZXRlbmVyIGRlc3B1w6lzIGRlIDEwIHNlZ3VuZG9zXHJcbiAgICAgIH0pXHJcbiAgICAgIC5jYXRjaChlcnJvciA9PiB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgYWwgcmVwcm9kdWNpciBlbCBzb25pZG86JywgZXJyb3IpO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIHN0b3BTb3VuZCgpOiB2b2lkIHtcclxuICAgIGNvbnNvbGUubG9nKCdzdG9wU291bmQgbGxhbWFkby4nKTtcclxuICAgIGlmICh0aGlzLmF1ZGlvKSB7XHJcbiAgICAgIHRoaXMuYXVkaW8ucGF1c2UoKTtcclxuICAgICAgdGhpcy5hdWRpby5jdXJyZW50VGltZSA9IDA7IC8vIFJlaW5pY2lhIGVsIHNvbmlkb1xyXG4gICAgfVxyXG4gICAgdGhpcy5pc1BsYXlpbmcgPSBmYWxzZTsgLy8gUmVzdGFibGVjZSBsYSBiYW5kZXJhXHJcbiAgICBpZiAodGhpcy5zb3VuZFRpbWVvdXQpIHtcclxuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuc291bmRUaW1lb3V0KTsgLy8gQXNlZ3VyYSBxdWUgZWwgdGVtcG9yaXphZG9yIHNlIGJvcnJlXHJcbiAgICAgIHRoaXMuc291bmRUaW1lb3V0ID0gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHN0YXJ0Rmxhc2hpbmdUaXRsZSgpOiB2b2lkIHtcclxuICAgIGNvbnNvbGUubG9nKCdzdGFydEZsYXNoaW5nVGl0bGUgbGxhbWFkby4nKTtcclxuICAgIGxldCB0b2dnbGUgPSBmYWxzZTtcclxuXHJcbiAgICAvLyBBbG1hY2VuYXIgZWwgdMOtdHVsbyBvcmlnaW5hbCBzaSBhw7puIG5vIHNlIGhhIGd1YXJkYWRvXHJcbiAgICBpZiAoIXRoaXMub3JpZ2luYWxUaXRsZSkge1xyXG4gICAgICB0aGlzLm9yaWdpbmFsVGl0bGUgPSBkb2N1bWVudC50aXRsZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXRoaXMuaW50ZXJ2YWxJZCkge1xyXG4gICAgICB0aGlzLmludGVydmFsSWQgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XHJcbiAgICAgICAgLy8gQWx0ZXJuYXIgZW50cmUgZWwgdMOtdHVsbyBhbHRlcm5hdGl2byB5IGVsIHTDrXR1bG8gb3JpZ2luYWxcclxuICAgICAgICBkb2N1bWVudC50aXRsZSA9IHRvZ2dsZSA/IHRoaXMuYWx0ZXJuYXRlVGl0bGUgOiB0aGlzLm9yaWdpbmFsVGl0bGU7XHJcbiAgICAgICAgdG9nZ2xlID0gIXRvZ2dsZTtcclxuICAgICAgfSwgMTAwMCk7IC8vIENhbWJpYSBlbCB0w610dWxvIGNhZGEgc2VndW5kb1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc3RvcEZsYXNoaW5nVGl0bGUoKTogdm9pZCB7XHJcbiAgICBjb25zb2xlLmxvZygnc3RvcEZsYXNoaW5nVGl0bGUgbGxhbWFkby4nKTtcclxuICAgIGlmICh0aGlzLmludGVydmFsSWQpIHtcclxuICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLmludGVydmFsSWQpO1xyXG4gICAgICB0aGlzLmludGVydmFsSWQgPSBudWxsO1xyXG4gICAgICBkb2N1bWVudC50aXRsZSA9IHRoaXMub3JpZ2luYWxUaXRsZTsgLy8gUmVzdGF1cmEgYSB2YWPDrW9cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJldmlzYXJBbGVydGFzUGVuZGllbnRlcyh1cmxPYnRlbmVyQWxlcnRhc1Bhbmljbzogc3RyaW5nLCB0b2tlbjogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBjb25zb2xlLmxvZygncmV2aXNhckFsZXJ0YXNQZW5kaWVudGVzIGxsYW1hZG8gY29uIHBhcsOhbWV0cm9zOicsIHsgdXJsT2J0ZW5lckFsZXJ0YXNQYW5pY28sIHRva2VuIH0pO1xyXG4gICAgY29uc3QgaGVscGVyID0gbmV3IEp3dEhlbHBlclNlcnZpY2UoKTtcclxuICAgIGNvbnN0IGRlY29kZWRUb2tlbiA9IGhlbHBlci5kZWNvZGVUb2tlbih0b2tlbik7XHJcbiAgICB0aGlzLndtTWVudVNlcnZpY2lvU2VydmljZVxyXG4gICAgICAubWVudUFwaU9idGVuZXIodXJsT2J0ZW5lckFsZXJ0YXNQYW5pY28sIGRlY29kZWRUb2tlblsnaWRfdXN1YXJpbyddLCB0b2tlbilcclxuICAgICAgLnN1YnNjcmliZSgocmVzcCkgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdSZXNwdWVzdGEgb2J0ZW5pZGEgZGUgcmV2aXNhckFsZXJ0YXNQZW5kaWVudGVzOicsIHJlc3ApO1xyXG4gICAgICAgIGlmIChyZXNwICYmIHJlc3AubGVuZ3RoID4gMCkge1xyXG5cclxuICAgICAgICAgIGNvbnN0IGFsZXJ0YXNJZHMgPSByZXNwLm1hcChhbGVydGEgPT4gYWxlcnRhLklkQWxlcnRhUGFuaWNvKTtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKCdJRHMgZGUgYWxlcnRhcyBvYnRlbmlkYXM6JywgYWxlcnRhc0lkcyk7XHJcblxyXG4gICAgICAgICAgLy8gRWxpbWluYXIgSURzIHF1ZSBubyBlc3TDoW4gZW4gbGEgcmVzcHVlc3RhIGRlbCBzZXJ2aWNpb1xyXG4gICAgICAgICAgdGhpcy5JZHNBbGVydGFzUGFuaWNvQWN0aXZhcy5mb3JFYWNoKChpZCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoIWFsZXJ0YXNJZHMuaW5jbHVkZXMoaWQpKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5JZHNBbGVydGFzUGFuaWNvQWN0aXZhcy5kZWxldGUoaWQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAvLyBGaWx0cmFyIGFsZXJ0YXMgbnVldmFzXHJcbiAgICAgICAgICBjb25zdCBuZXdBbGVydHMgPSByZXNwLmZpbHRlcihhbGVydGEgPT4gIXRoaXMuSWRzQWxlcnRhc1Bhbmljb0FjdGl2YXMuaGFzKGFsZXJ0YS5JZEFsZXJ0YVBhbmljbykpO1xyXG5cclxuICAgICAgICAgIC8vIEFncmVnYXIgbGFzIG51ZXZhcyBhbGVydGFzIGEgbGEgbGlzdGEgYWN0aXZhXHJcbiAgICAgICAgICBuZXdBbGVydHMuZm9yRWFjaChhbGVydGEgPT4gdGhpcy5JZHNBbGVydGFzUGFuaWNvQWN0aXZhcy5hZGQoYWxlcnRhLklkQWxlcnRhUGFuaWNvKSk7XHJcbiAgICAgICAgICBpZiAodGhpcy5JZHNBbGVydGFzUGFuaWNvQWN0aXZhcy5zaXplID4gMCkge1xyXG4gICAgICAgICAgICB0aGlzLnN0YXJ0Rmxhc2hpbmdUaXRsZSgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgLy8gU2kgaGF5IG51ZXZhcyBhbGVydGFzLCBkaXNwYXJhIG5vdGlmaWNhY2lvbiBzb25vcmFcclxuICAgICAgICAgIGlmIChuZXdBbGVydHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICB0aGlzLnBsYXlTb3VuZCgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAvLyBTaSBubyBoYXkgYWxlcnRhcyBlbiBsYSByZXNwdWVzdGEsIGxpbXBpYXIgbGEgbGlzdGFcclxuICAgICAgICAgIHRoaXMuSWRzQWxlcnRhc1Bhbmljb0FjdGl2YXMuY2xlYXIoKTtcclxuICAgICAgICAgIHRoaXMuc3RvcEZsYXNoaW5nVGl0bGUoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gQWN0dWFsaXphciBsb2NhbFN0b3JhZ2UgY29uIGxvcyBJRHMgYWN0aXZvc1xyXG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdBTEVSVEFTX1BBTklDT19BQ1RJVkFTX1dNJywgSlNPTi5zdHJpbmdpZnkoQXJyYXkuZnJvbSh0aGlzLklkc0FsZXJ0YXNQYW5pY29BY3RpdmFzKSkpO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG59XHJcbiJdfQ==
|
|
161
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid20tbWVudS1hbGVydGEtcGFuaWNvLnNlcnZpY2UuanMiLCJzb3VyY2VSb290Ijoibmc6Ly93bS1tZW51LyIsInNvdXJjZXMiOlsibGliL3dtLW1lbnUvc2VydmljZXMvd20tbWVudS1hbGVydGEtcGFuaWNvLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDdEQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7OztBQUtuRTtJQVdFLG1DQUFvQixxQkFBNEM7UUFBNUMsMEJBQXFCLEdBQXJCLHFCQUFxQixDQUF1QjtRQVJ4RCxtQkFBYyxHQUFHLDJCQUEyQixDQUFDO1FBRTdDLFVBQUssR0FBNEIsSUFBSSxDQUFDO1FBQ3RDLGNBQVMsR0FBRyxLQUFLLENBQUMsQ0FBQyxnREFBZ0Q7UUFFbkUsNEJBQXVCLEdBQWdCLElBQUksR0FBRyxFQUFFLENBQUMsQ0FBQywrQ0FBK0M7UUFDakcsaUJBQVksR0FBUSxJQUFJLENBQUMsQ0FBQyxzQ0FBc0M7UUFLaEUsY0FBUyxHQUFZLEtBQUssQ0FBQztJQUhpQyxDQUFDO0lBS3JFLGtEQUFjLEdBQWQsVUFDRSxVQUFrQixFQUNsQixRQUFvQixFQUNwQixtQkFBMkIsRUFDM0IsS0FBYSxFQUNiLFNBQWlCO1FBTG5CLGlCQThDQztRQXZDQyxJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztRQUUzQixJQUFNLHFCQUFxQixHQUFHO1lBQzVCLEtBQUksQ0FBQyxxQkFBcUI7aUJBQ3ZCLGNBQWMsQ0FBQyxtQkFBbUIsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLHNCQUFzQixDQUFDO2lCQUN4RSxTQUFTLENBQUMsVUFBQyxJQUFJO2dCQUNkLDhEQUE4RDtnQkFDOUQsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxD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QUMsRUFBRTtvQkFDeEIsS0FBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO2lCQUNsQjthQUNGO2lCQUFNO2dCQUNMLHNEQUFzRDtnQkFDdEQsS0FBSSxDQUFDLHVCQUF1QixDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUNyQyxLQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQzthQUMxQjtZQUNELDhDQUE4QztZQUM5QyxZQUFZLENBQUMsT0FBTyxDQUFDLDJCQUEyQixFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFJLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDOUcsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDOztnQkFqSzBDLHFCQUFxQjs7O0lBWHJELHlCQUF5QjtRQUhyQyxVQUFVLENBQUM7WUFDVixVQUFVLEVBQUUsTUFBTTtTQUNuQixDQUFDO09BQ1cseUJBQXlCLENBOEtyQztvQ0FyTEQ7Q0FxTEMsQUE5S0QsSUE4S0M7U0E5S1kseUJBQXlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBKd3RIZWxwZXJTZXJ2aWNlIH0gZnJvbSAnQGF1dGgwL2FuZ3VsYXItand0JztcclxuaW1wb3J0IHsgV21NZW51U2VydmljaW9TZXJ2aWNlIH0gZnJvbSAnLi93bS1tZW51LXNlcnZpY2lvLnNlcnZpY2UnO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgV21NZW51QWxlcnRhUGFuaWNvU2VydmljZSB7XHJcblxyXG4gIHByaXZhdGUgaW50ZXJ2YWxJZDogYW55O1xyXG4gIHByaXZhdGUgYWx0ZXJuYXRlVGl0bGUgPSAnQWxlcnRhIGRlIFDDoW5pY28gUmVjaWJpZGEnO1xyXG4gIHByaXZhdGUgb3JpZ2luYWxUaXRsZTogc3RyaW5nO1xyXG4gIHByaXZhdGUgYXVkaW86IEhUTUxBdWRpb0VsZW1lbnQgfCBudWxsID0gbnVsbDtcclxuICBwcml2YXRlIGlzUGxheWluZyA9IGZhbHNlOyAvLyBDb250cm9sYSBzaSBlbCBzb25pZG8geWEgZXN0w6EgcmVwcm9kdWNpw6luZG9zZVxyXG4gIHB1YmxpYyBmb3JtdWxhcmlvOiBhbnk7XHJcbiAgcHJpdmF0ZSBJZHNBbGVydGFzUGFuaWNvQWN0aXZhczogU2V0PG51bWJlcj4gPSBuZXcgU2V0KCk7IC8vIEFsbWFjZW5hIGxvcyBJRHMgZGUgbGFzIGFsZXJ0YXMgeWEgbWFuZWphZGFzXHJcbiAgcHJpdmF0ZSBzb3VuZFRpbWVvdXQ6IGFueSA9IG51bGw7IC8vIENvbnRyb2xhIGVsIHRlbXBvcml6YWRvciBkZWwgc29uaWRvXHJcbiAgcHJpdmF0ZSBydXRhQXVkaW86IHN0cmluZztcclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHdtTWVudVNlcnZpY2lvU2VydmljZTogV21NZW51U2VydmljaW9TZXJ2aWNlKSB7IH1cclxuXHJcbiAgcHJpdmF0ZSBzdWJzY3JpcHRpb246IGFueTtcclxuICBwcml2YXRlIGlzUnVubmluZzogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBpbmljaWFyUHJvY2VzbyhcclxuICAgIGludGVydmFsTXM6IG51bWJlcixcclxuICAgIGNhbGxiYWNrOiAoKSA9PiB2b2lkLFxyXG4gICAgdXJsT2J0ZW5lclBhcmFtZXRybzogc3RyaW5nLFxyXG4gICAgdG9rZW46IHN0cmluZyxcclxuICAgIHJ1dGFBdWRpbzogc3RyaW5nXHJcbiAgKTogdm9pZCB7XHJcbiAgICB0aGlzLnJ1dGFBdWRpbyA9IHJ1dGFBdWRpbztcclxuICBcclxuICAgIGNvbnN0IGluaWNpYXJDb25JbnRlcmFjY2lvbiA9ICgpID0+IHtcclxuICAgICAgdGhpcy53bU1lbnVTZXJ2aWNpb1NlcnZpY2VcclxuICAgICAgICAubWVudUFwaU9idGVuZXIodXJsT2J0ZW5lclBhcmFtZXRybywgbnVsbCwgdG9rZW4sICdSZXBvcnRlQWxlcnRhc1BhbmljbycpXHJcbiAgICAgICAgLnN1YnNjcmliZSgocmVzcCkgPT4ge1xyXG4gICAgICAgICAgLy8gdmFsaWRhciBzaSBlbCBwYXJhbWV0cm8gUmVwb3J0ZUFsZXJ0YXNQYW5pY28gZXN0YSBlbmNlbmRpZG9cclxuICAgICAgICAgIGlmIChyZXNwICYmIHJlc3AubGVuZ3RoID4gMCAmJiByZXNwWzBdLlZhbG9yID09IDEpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuaXNSdW5uaW5nKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIEluaWNpYWxpemFyIGxhIHZhcmlhYmxlIGRlc2RlIGxvY2FsU3RvcmFnZVxyXG4gICAgICAgICAgICBjb25zdCBzdG9yZWRJZHMgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnQUxFUlRBU19QQU5JQ09fQUNUSVZBU19XTScpO1xyXG4gICAgICAgICAgICB0aGlzLklkc0FsZXJ0YXNQYW5pY29BY3RpdmFzID0gc3RvcmVkSWRzID8gbmV3IFNldChKU09OLnBhcnNlKHN0b3JlZElkcykpIDogbmV3IFNldCgpO1xyXG4gIFxyXG4gICAgICAgICAgICBjb25zdCBlamVjdXRhclByb2Nlc28gPSAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy5pc1J1bm5pbmcgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIGNhbGxiYWNrKCk7XHJcbiAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzUnVubmluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgZWplY3V0YXJQcm9jZXNvKCk7XHJcbiAgICAgICAgICAgICAgfSwgaW50ZXJ2YWxNcyk7XHJcbiAgICAgICAgICAgIH07XHJcbiAgXHJcbiAgICAgICAgICAgIGVqZWN1dGFyUHJvY2VzbygpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfTtcclxuICBcclxuICAgIFsnZHJhZycsICdjbGljayddLmZvckVhY2goZXZlbnRvID0+IHtcclxuICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcclxuICAgICAgICBldmVudG8sXHJcbiAgICAgICAgKCkgPT4ge1xyXG4gICAgICAgICAgaW5pY2lhckNvbkludGVyYWNjaW9uKCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICB7IG9uY2U6IHRydWUgfVxyXG4gICAgICApO1xyXG4gICAgfSk7XHJcblxyXG4gIH1cclxuICBcclxuXHJcbiAgc3RvcFByb2Nlc3MoKTogdm9pZCB7XHJcbiAgICB0aGlzLmlzUnVubmluZyA9IGZhbHNlO1xyXG4gICAgaWYgKHRoaXMuc3Vic2NyaXB0aW9uKSB7XHJcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuc3RvcFNvdW5kKCk7XHJcbiAgICB0aGlzLnN0b3BGbGFzaGluZ1RpdGxlKCk7XHJcbiAgfVxyXG5cclxuICBwbGF5U291bmQoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5pc1BsYXlpbmcpIHJldHVybjsgLy8gRXZpdGEgcmVwcm9kdWNpciBzaSB5YSBlc3TDoSBzb25hbmRvXHJcblxyXG4gICAgdGhpcy5pc1BsYXlpbmcgPSB0cnVlO1xyXG4gICAgaWYgKCF0aGlzLmF1ZGlvKSB7XHJcbiAgICAgIHRoaXMuYXVkaW8gPSBuZXcgQXVkaW8odGhpcy5ydXRhQXVkaW8pOyAvLyBSdXRhIGFsIGFyY2hpdm8gZGUgc29uaWRvXHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5hdWRpby5sb29wID0gdHJ1ZTsgLy8gUmVwcm9kdWNpciBlbiBidWNsZVxyXG4gICAgdGhpcy5hdWRpby5wbGF5KClcclxuICAgICAgLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgIC8vIERldGVuZXIgZWwgc29uaWRvIGRlc3B1w6lzIGRlIDEwIHNlZ3VuZG9zXHJcbiAgICAgICAgdGhpcy5zb3VuZFRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgIHRoaXMuc3RvcFNvdW5kKCk7XHJcbiAgICAgICAgfSwgMTAwMDApOyAvLyBEZXRlbmVyIGRlc3B1w6lzIGRlIDEwIHNlZ3VuZG9zXHJcbiAgICAgIH0pXHJcbiAgICAgIC5jYXRjaChlcnJvciA9PiB7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ0Vycm9yIGFsIHJlcHJvZHVjaXIgZWwgc29uaWRvOicsIGVycm9yKTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBzdG9wU291bmQoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5hdWRpbykge1xyXG4gICAgICB0aGlzLmF1ZGlvLnBhdXNlKCk7XHJcbiAgICAgIHRoaXMuYXVkaW8uY3VycmVudFRpbWUgPSAwOyAvLyBSZWluaWNpYSBlbCBzb25pZG9cclxuICAgIH1cclxuICAgIHRoaXMuaXNQbGF5aW5nID0gZmFsc2U7IC8vIFJlc3RhYmxlY2UgbGEgYmFuZGVyYVxyXG4gICAgaWYgKHRoaXMuc291bmRUaW1lb3V0KSB7XHJcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLnNvdW5kVGltZW91dCk7IC8vIEFzZWd1cmEgcXVlIGVsIHRlbXBvcml6YWRvciBzZSBib3JyZVxyXG4gICAgICB0aGlzLnNvdW5kVGltZW91dCA9IG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzdGFydEZsYXNoaW5nVGl0bGUoKTogdm9pZCB7XHJcbiAgICBsZXQgdG9nZ2xlID0gZmFsc2U7XHJcbiAgXHJcbiAgICAvLyBBbG1hY2VuYXIgZWwgdMOtdHVsbyBvcmlnaW5hbCBzaSBhw7puIG5vIHNlIGhhIGd1YXJkYWRvXHJcbiAgICBpZiAoIXRoaXMub3JpZ2luYWxUaXRsZSkge1xyXG4gICAgICB0aGlzLm9yaWdpbmFsVGl0bGUgPSBkb2N1bWVudC50aXRsZTtcclxuICAgIH1cclxuICBcclxuICAgIGlmICghdGhpcy5pbnRlcnZhbElkKSB7XHJcbiAgICAgIHRoaXMuaW50ZXJ2YWxJZCA9IHNldEludGVydmFsKCgpID0+IHtcclxuICAgICAgICAvLyBBbHRlcm5hciBlbnRyZSBlbCB0w610dWxvIGFsdGVybmF0aXZvIHkgZWwgdMOtdHVsbyBvcmlnaW5hbFxyXG4gICAgICAgIGRvY3VtZW50LnRpdGxlID0gdG9nZ2xlID8gdGhpcy5hbHRlcm5hdGVUaXRsZSA6IHRoaXMub3JpZ2luYWxUaXRsZTtcclxuICAgICAgICB0b2dnbGUgPSAhdG9nZ2xlO1xyXG4gICAgICB9LCAxMDAwKTsgLy8gQ2FtYmlhIGVsIHTDrXR1bG8gY2FkYSBzZWd1bmRvXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzdG9wRmxhc2hpbmdUaXRsZSgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmludGVydmFsSWQpIHtcclxuICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLmludGVydmFsSWQpO1xyXG4gICAgICB0aGlzLmludGVydmFsSWQgPSBudWxsO1xyXG4gICAgICBkb2N1bWVudC50aXRsZSA9IHRoaXMub3JpZ2luYWxUaXRsZTsgLy8gUmVzdGF1cmEgYSB2YWPDrW9cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJldmlzYXJBbGVydGFzUGVuZGllbnRlcyh1cmxPYnRlbmVyQWxlcnRhc1Bhbmljbzogc3RyaW5nLCB0b2tlbjogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBjb25zdCBoZWxwZXIgPSBuZXcgSnd0SGVscGVyU2VydmljZSgpO1xyXG4gICAgY29uc3QgZGVjb2RlZFRva2VuID0gaGVscGVyLmRlY29kZVRva2VuKHRva2VuKTtcclxuICAgIHRoaXMud21NZW51U2VydmljaW9TZXJ2aWNlXHJcbiAgICAgIC5tZW51QXBpT2J0ZW5lcih1cmxPYnRlbmVyQWxlcnRhc1BhbmljbywgZGVjb2RlZFRva2VuWydpZF91c3VhcmlvJ10sIHRva2VuKVxyXG4gICAgICAuc3Vic2NyaWJlKChyZXNwKSA9PiB7XHJcbiAgICAgICAgaWYgKHJlc3AgJiYgcmVzcC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICBcclxuICAgICAgICAgIGNvbnN0IGFsZXJ0YXNJZHMgPSByZXNwLm1hcChhbGVydGEgPT4gYWxlcnRhLklkQWxlcnRhUGFuaWNvKTtcclxuXHJcbiAgICAgICAgICAvLyBFbGltaW5hciBJRHMgcXVlIG5vIGVzdMOhbiBlbiBsYSByZXNwdWVzdGEgZGVsIHNlcnZpY2lvXHJcbiAgICAgICAgICB0aGlzLklkc0FsZXJ0YXNQYW5pY29BY3RpdmFzLmZvckVhY2goKGlkKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICghYWxlcnRhc0lkcy5pbmNsdWRlcyhpZCkpIHtcclxuICAgICAgICAgICAgICB0aGlzLklkc0FsZXJ0YXNQYW5pY29BY3RpdmFzLmRlbGV0ZShpZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgIC8vIEZpbHRyYXIgYWxlcnRhcyBudWV2YXNcclxuICAgICAgICAgIGNvbnN0IG5ld0FsZXJ0cyA9IHJlc3AuZmlsdGVyKGFsZXJ0YSA9PiAhdGhpcy5JZHNBbGVydGFzUGFuaWNvQWN0aXZhcy5oYXMoYWxlcnRhLklkQWxlcnRhUGFuaWNvKSk7XHJcblxyXG4gICAgICAgICAgLy8gQWdyZWdhciBsYXMgbnVldmFzIGFsZXJ0YXMgYSBsYSBsaXN0YSBhY3RpdmFcclxuICAgICAgICAgIG5ld0FsZXJ0cy5mb3JFYWNoKGFsZXJ0YSA9PiB0aGlzLklkc0FsZXJ0YXNQYW5pY29BY3RpdmFzLmFkZChhbGVydGEuSWRBbGVydGFQYW5pY28pKTtcclxuICAgICAgICAgIGlmICh0aGlzLklkc0FsZXJ0YXNQYW5pY29BY3RpdmFzLnNpemUgPiAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3RhcnRGbGFzaGluZ1RpdGxlKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICAvLyBTaSBoYXkgbnVldmFzIGFsZXJ0YXMsIGRpc3BhcmEgbm90aWZpY2FjaW9uIHNvbm9yYVxyXG4gICAgICAgICAgaWYgKG5ld0FsZXJ0cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMucGxheVNvdW5kKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIC8vIFNpIG5vIGhheSBhbGVydGFzIGVuIGxhIHJlc3B1ZXN0YSwgbGltcGlhciBsYSBsaXN0YVxyXG4gICAgICAgICAgdGhpcy5JZHNBbGVydGFzUGFuaWNvQWN0aXZhcy5jbGVhcigpO1xyXG4gICAgICAgICAgdGhpcy5zdG9wRmxhc2hpbmdUaXRsZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBBY3R1YWxpemFyIGxvY2FsU3RvcmFnZSBjb24gbG9zIElEcyBhY3Rpdm9zXHJcbiAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ0FMRVJUQVNfUEFOSUNPX0FDVElWQVNfV00nLCBKU09OLnN0cmluZ2lmeShBcnJheS5mcm9tKHRoaXMuSWRzQWxlcnRhc1Bhbmljb0FjdGl2YXMpKSk7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbn1cclxuIl19
|