@seniorsistemas/components-ai 1.3.0-master-e23db6ad → 1.3.0-master-2a543e72
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/esm2022/lib/services/websocket.service.mjs +187 -0
- package/esm2022/public-api.mjs +2 -1
- package/fesm2022/seniorsistemas-components-ai.mjs +186 -4
- package/fesm2022/seniorsistemas-components-ai.mjs.map +1 -1
- package/lib/services/websocket.service.d.ts +65 -0
- package/package.json +4 -2
- package/public-api.d.ts +1 -0
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import { Subject, BehaviorSubject, filter, share, takeUntil } from 'rxjs';
|
|
3
|
+
import { Stomp } from '@stomp/stompjs';
|
|
4
|
+
import SockJS from 'sockjs-client';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
import * as i1 from "./auth.service";
|
|
7
|
+
import * as i2 from "./cookie.service";
|
|
8
|
+
export class WebSocketService {
|
|
9
|
+
authService;
|
|
10
|
+
cookieService;
|
|
11
|
+
client = null;
|
|
12
|
+
destroy$ = new Subject();
|
|
13
|
+
messages$ = new Subject();
|
|
14
|
+
connectionState$ = new BehaviorSubject('disconnected');
|
|
15
|
+
stompSubscriptions = new Map();
|
|
16
|
+
pendingSubscriptions = [];
|
|
17
|
+
subscriptionCounter = 0;
|
|
18
|
+
reconnectAttempts = 0;
|
|
19
|
+
maxReconnectAttempts = 5;
|
|
20
|
+
reconnectTimeout;
|
|
21
|
+
constructor(authService, cookieService) {
|
|
22
|
+
this.authService = authService;
|
|
23
|
+
this.cookieService = cookieService;
|
|
24
|
+
}
|
|
25
|
+
/** Estado atual da conexão */
|
|
26
|
+
get state$() {
|
|
27
|
+
return this.connectionState$.asObservable();
|
|
28
|
+
}
|
|
29
|
+
/** Conecta ao WebSocket usando a URL base do cookie via SockJS + STOMP */
|
|
30
|
+
connect() {
|
|
31
|
+
if (this.client?.connected) {
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
const wsUrl = this.buildWebSocketUrl();
|
|
35
|
+
if (!wsUrl) {
|
|
36
|
+
console.error('[WebSocketService] Não foi possível construir a URL do WebSocket. Cookie de URL base não encontrado.');
|
|
37
|
+
this.connectionState$.next('error');
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
this.connectionState$.next('connecting');
|
|
41
|
+
try {
|
|
42
|
+
this.client = Stomp.over(new SockJS(wsUrl));
|
|
43
|
+
// Desabilita logs do STOMP no console
|
|
44
|
+
this.client.debug = () => { };
|
|
45
|
+
this.client.connect({}, () => this.onConnected(), (error) => this.onError(error), () => this.onDisconnected());
|
|
46
|
+
}
|
|
47
|
+
catch (error) {
|
|
48
|
+
console.error('[WebSocketService] Erro ao criar conexão SockJS:', error);
|
|
49
|
+
this.connectionState$.next('error');
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
/** Desconecta do WebSocket */
|
|
53
|
+
disconnect() {
|
|
54
|
+
this.clearReconnect();
|
|
55
|
+
this.reconnectAttempts = 0;
|
|
56
|
+
// Unsubscribe de todas as subscriptions STOMP
|
|
57
|
+
for (const [, sub] of this.stompSubscriptions.entries()) {
|
|
58
|
+
try {
|
|
59
|
+
sub.unsubscribe();
|
|
60
|
+
}
|
|
61
|
+
catch { /* ignore */ }
|
|
62
|
+
}
|
|
63
|
+
this.stompSubscriptions.clear();
|
|
64
|
+
this.pendingSubscriptions = [];
|
|
65
|
+
if (this.client?.connected) {
|
|
66
|
+
this.client.disconnect();
|
|
67
|
+
}
|
|
68
|
+
this.client = null;
|
|
69
|
+
this.connectionState$.next('disconnected');
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Inscreve-se em um tópico baseado na configuração.
|
|
73
|
+
* Padrão do bind: /topic/{token}/{domain}/{service}/{primitive}
|
|
74
|
+
*/
|
|
75
|
+
subscribe(config) {
|
|
76
|
+
const destination = this.buildDestination(config);
|
|
77
|
+
const subId = `sub-${this.subscriptionCounter++}`;
|
|
78
|
+
if (this.client?.connected) {
|
|
79
|
+
this.doSubscribe(destination, subId);
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
this.pendingSubscriptions.push({ destination, id: subId });
|
|
83
|
+
if (this.connectionState$.value === 'disconnected') {
|
|
84
|
+
this.connect();
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
return this.messages$.pipe(filter(msg => msg.destination === destination), takeUntil(this.destroy$), share());
|
|
88
|
+
}
|
|
89
|
+
/** Remove a inscrição de um tópico */
|
|
90
|
+
unsubscribe(config) {
|
|
91
|
+
const destination = this.buildDestination(config);
|
|
92
|
+
const entry = [...this.stompSubscriptions.entries()].find(([key]) => key.startsWith(destination));
|
|
93
|
+
if (entry) {
|
|
94
|
+
const [key, sub] = entry;
|
|
95
|
+
try {
|
|
96
|
+
sub.unsubscribe();
|
|
97
|
+
}
|
|
98
|
+
catch { /* ignore */ }
|
|
99
|
+
this.stompSubscriptions.delete(key);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
ngOnDestroy() {
|
|
103
|
+
this.disconnect();
|
|
104
|
+
this.destroy$.next();
|
|
105
|
+
this.destroy$.complete();
|
|
106
|
+
}
|
|
107
|
+
// ── Privados ──────────────────────────────────────────────
|
|
108
|
+
buildWebSocketUrl() {
|
|
109
|
+
const baseUrl = this.cookieService.getCookie('com.senior.base.url');
|
|
110
|
+
if (!baseUrl) {
|
|
111
|
+
return null;
|
|
112
|
+
}
|
|
113
|
+
const cleanBaseUrl = baseUrl.replace(/\/$/, '');
|
|
114
|
+
return `${cleanBaseUrl}/websocket/subscription`;
|
|
115
|
+
}
|
|
116
|
+
buildDestination(config) {
|
|
117
|
+
const parts = ['/topic'];
|
|
118
|
+
if (config.userScoped) {
|
|
119
|
+
const token = this.authService.getAccessToken();
|
|
120
|
+
if (token) {
|
|
121
|
+
parts.push(token);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
parts.push(config.domain, config.service, config.primitive);
|
|
125
|
+
return parts.join('/');
|
|
126
|
+
}
|
|
127
|
+
onConnected() {
|
|
128
|
+
this.reconnectAttempts = 0;
|
|
129
|
+
this.connectionState$.next('connected');
|
|
130
|
+
this.resubscribeAll();
|
|
131
|
+
}
|
|
132
|
+
onError(error) {
|
|
133
|
+
console.error('[WebSocketService] STOMP error:', error);
|
|
134
|
+
this.connectionState$.next('error');
|
|
135
|
+
}
|
|
136
|
+
onDisconnected() {
|
|
137
|
+
this.connectionState$.next('disconnected');
|
|
138
|
+
if (this.reconnectAttempts < this.maxReconnectAttempts) {
|
|
139
|
+
this.scheduleReconnect();
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
scheduleReconnect() {
|
|
143
|
+
this.clearReconnect();
|
|
144
|
+
const delay = Math.min(1000 * Math.pow(2, this.reconnectAttempts), 30000);
|
|
145
|
+
this.reconnectAttempts++;
|
|
146
|
+
console.log(`[WebSocketService] Reconectando em ${delay}ms (tentativa ${this.reconnectAttempts}/${this.maxReconnectAttempts})`);
|
|
147
|
+
this.reconnectTimeout = setTimeout(() => this.connect(), delay);
|
|
148
|
+
}
|
|
149
|
+
clearReconnect() {
|
|
150
|
+
if (this.reconnectTimeout) {
|
|
151
|
+
clearTimeout(this.reconnectTimeout);
|
|
152
|
+
this.reconnectTimeout = null;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
resubscribeAll() {
|
|
156
|
+
for (const pending of this.pendingSubscriptions) {
|
|
157
|
+
this.doSubscribe(pending.destination, pending.id);
|
|
158
|
+
}
|
|
159
|
+
this.pendingSubscriptions = [];
|
|
160
|
+
}
|
|
161
|
+
doSubscribe(destination, id) {
|
|
162
|
+
if (!this.client?.connected)
|
|
163
|
+
return;
|
|
164
|
+
const sub = this.client.subscribe(destination, (message) => {
|
|
165
|
+
let body = message.body;
|
|
166
|
+
try {
|
|
167
|
+
body = JSON.parse(message.body);
|
|
168
|
+
}
|
|
169
|
+
catch { /* mantém como string */ }
|
|
170
|
+
const headers = {};
|
|
171
|
+
for (const key of Object.keys(message.headers)) {
|
|
172
|
+
headers[key] = message.headers[key];
|
|
173
|
+
}
|
|
174
|
+
this.messages$.next({ destination, body, headers });
|
|
175
|
+
});
|
|
176
|
+
this.stompSubscriptions.set(`${destination}::${id}`, sub);
|
|
177
|
+
}
|
|
178
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: WebSocketService, deps: [{ token: i1.AuthService }, { token: i2.CookieService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
179
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: WebSocketService, providedIn: 'root' });
|
|
180
|
+
}
|
|
181
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: WebSocketService, decorators: [{
|
|
182
|
+
type: Injectable,
|
|
183
|
+
args: [{
|
|
184
|
+
providedIn: 'root'
|
|
185
|
+
}]
|
|
186
|
+
}], ctorParameters: () => [{ type: i1.AuthService }, { type: i2.CookieService }] });
|
|
187
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2Vic29ja2V0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzLWFpL3NyYy9saWIvc2VydmljZXMvd2Vic29ja2V0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBYSxNQUFNLGVBQWUsQ0FBQztBQUd0RCxPQUFPLEVBQWMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN0RixPQUFPLEVBQWdCLEtBQUssRUFBWSxNQUFNLGdCQUFnQixDQUFDO0FBQy9ELE9BQU8sTUFBTSxNQUFNLGVBQWUsQ0FBQzs7OztBQTJCbkMsTUFBTSxPQUFPLGdCQUFnQjtJQWFqQjtJQUNBO0lBYkYsTUFBTSxHQUF3QixJQUFJLENBQUM7SUFDMUIsUUFBUSxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7SUFDL0IsU0FBUyxHQUFHLElBQUksT0FBTyxFQUFnQixDQUFDO0lBQ3hDLGdCQUFnQixHQUFHLElBQUksZUFBZSxDQUFrQixjQUFjLENBQUMsQ0FBQztJQUNqRixrQkFBa0IsR0FBRyxJQUFJLEdBQUcsRUFBZSxDQUFDO0lBQzVDLG9CQUFvQixHQUErQyxFQUFFLENBQUM7SUFDdEUsbUJBQW1CLEdBQUcsQ0FBQyxDQUFDO0lBQ3hCLGlCQUFpQixHQUFHLENBQUMsQ0FBQztJQUNiLG9CQUFvQixHQUFHLENBQUMsQ0FBQztJQUNsQyxnQkFBZ0IsQ0FBTTtJQUU5QixZQUNVLFdBQXdCLEVBQ3hCLGFBQTRCO1FBRDVCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLGtCQUFhLEdBQWIsYUFBYSxDQUFlO0lBQ25DLENBQUM7SUFFSiw4QkFBOEI7SUFDOUIsSUFBSSxNQUFNO1FBQ1IsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDOUMsQ0FBQztJ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eSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQXV0aFNlcnZpY2UgfSBmcm9tICcuL2F1dGguc2VydmljZSc7XG5pbXBvcnQgeyBDb29raWVTZXJ2aWNlIH0gZnJvbSAnLi9jb29raWUuc2VydmljZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJqZWN0LCBCZWhhdmlvclN1YmplY3QsIGZpbHRlciwgc2hhcmUsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQ29tcGF0Q2xpZW50LCBTdG9tcCwgSU1lc3NhZ2UgfSBmcm9tICdAc3RvbXAvc3RvbXBqcyc7XG5pbXBvcnQgU29ja0pTIGZyb20gJ3NvY2tqcy1jbGllbnQnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFdlYlNvY2tldENvbmZpZyB7XG4gIC8qKiBEb23DrW5pbyBkbyBzZXJ2acOnbyAoZXg6ICdjcm14JykgKi9cbiAgZG9tYWluOiBzdHJpbmc7XG4gIC8qKiBOb21lIGRvIHNlcnZpw6dvIChleDogJ3NjaGVkdWxlJykgKi9cbiAgc2VydmljZTogc3RyaW5nO1xuICAvKiogUHJpbWl0aXZhL2VudGlkYWRlIChleDogJ2FwcG9pbnRtZW50JykgKi9cbiAgcHJpbWl0aXZlOiBzdHJpbmc7XG4gIC8qKiBTZSB0cnVlLCBpbmNsdWkgbyB0b2tlbiBkbyB1c3XDoXJpbyBubyBiaW5kIHBhcmEgcmVjZWJlciBtZW5zYWdlbnMgZXNwZWPDrWZpY2FzIGRvIHVzdcOhcmlvICovXG4gIHVzZXJTY29wZWQ/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFN0b21wTWVzc2FnZTxUID0gYW55PiB7XG4gIC8qKiBEZXN0aW5vL3TDs3BpY28gZGEgbWVuc2FnZW0gKi9cbiAgZGVzdGluYXRpb246IHN0cmluZztcbiAgLyoqIENvcnBvIGRhIG1lbnNhZ2VtIHBhcnNlYWRvICovXG4gIGJvZHk6IFQ7XG4gIC8qKiBIZWFkZXJzIGRhIG1lbnNhZ2VtIFNUT01QICovXG4gIGhlYWRlcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG59XG5cbnR5cGUgQ29ubmVjdGlvblN0YXRlID0gJ2Rpc2Nvbm5lY3RlZCcgfCAnY29ubmVjdGluZycgfCAnY29ubmVjdGVkJyB8ICdlcnJvcic7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIFdlYlNvY2tldFNlcnZpY2UgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICBwcml2YXRlIGNsaWVudDogQ29tcGF0Q2xpZW50IHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgcmVhZG9ubHkgZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICBwcml2YXRlIHJlYWRvbmx5IG1lc3NhZ2VzJCA9IG5ldyBTdWJqZWN0PFN0b21wTWVzc2FnZT4oKTtcbiAgcHJpdmF0ZSByZWFkb25seSBjb25uZWN0aW9uU3RhdGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxDb25uZWN0aW9uU3RhdGU+KCdkaXNjb25uZWN0ZWQnKTtcbiAgcHJpdmF0ZSBzdG9tcFN1YnNjcmlwdGlvbnMgPSBuZXcgTWFwPHN0cmluZywgYW55PigpO1xuICBwcml2YXRlIHBlbmRpbmdTdWJzY3JpcHRpb25zOiBBcnJheTx7IGRlc3RpbmF0aW9uOiBzdHJpbmc7IGlkOiBzdHJpbmcgfT4gPSBbXTtcbiAgcHJpdmF0ZSBzdWJzY3JpcHRpb25Db3VudGVyID0gMDtcbiAgcHJpdmF0ZSByZWNvbm5lY3RBdHRlbXB0cyA9IDA7XG4gIHByaXZhdGUgcmVhZG9ubHkgbWF4UmVjb25uZWN0QXR0ZW1wdHMgPSA1O1xuICBwcml2YXRlIHJlY29ubmVjdFRpbWVvdXQ6IGFueTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGF1dGhTZXJ2aWNlOiBBdXRoU2VydmljZSxcbiAgICBwcml2YXRlIGNvb2tpZVNlcnZpY2U6IENvb2tpZVNlcnZpY2VcbiAgKSB7fVxuXG4gIC8qKiBFc3RhZG8gYXR1YWwgZGEgY29uZXjDo28gKi9cbiAgZ2V0IHN0YXRlJCgpOiBPYnNlcnZhYmxlPENvbm5lY3Rpb25TdGF0ZT4ge1xuICAgIHJldHVybiB0aGlzLmNvbm5lY3Rpb25TdGF0ZSQuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICAvKiogQ29uZWN0YSBhbyBXZWJTb2NrZXQgdXNhbmRvIGEgVVJMIGJhc2UgZG8gY29va2llIHZpYSBTb2NrSlMgKyBTVE9NUCAqL1xuICBjb25uZWN0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmNsaWVudD8uY29ubmVjdGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgd3NVcmwgPSB0aGlzLmJ1aWxkV2ViU29ja2V0VXJsKCk7XG4gICAgaWYgKCF3c1VybCkge1xuICAgICAgY29uc29sZS5lcnJvcignW1dlYlNvY2tldFNlcnZpY2VdIE7Do28gZm9pIHBvc3PDrXZlbCBjb25zdHJ1aXIgYSBVUkwgZG8gV2ViU29ja2V0LiBDb29raWUgZGUgVVJMIGJhc2UgbsOjbyBlbmNvbnRyYWRvLicpO1xuICAgICAgdGhpcy5jb25uZWN0aW9uU3RhdGUkLm5leHQoJ2Vycm9yJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5jb25uZWN0aW9uU3RhdGUkLm5leHQoJ2Nvbm5lY3RpbmcnKTtcblxuICAgIHRyeSB7XG4gICAgICB0aGlzLmNsaWVudCA9IFN0b21wLm92ZXIobmV3IFNvY2tKUyh3c1VybCkpO1xuICAgICAgLy8gRGVzYWJpbGl0YSBsb2dzIGRvIFNUT01QIG5vIGNvbnNvbGVcbiAgICAgIHRoaXMuY2xpZW50LmRlYnVnID0gKCkgPT4ge307XG5cbiAgICAgIHRoaXMuY2xpZW50LmNvbm5lY3QoXG4gICAgICAgIHt9LFxuICAgICAgICAoKSA9PiB0aGlzLm9uQ29ubmVjdGVkKCksXG4gICAgICAgIChlcnJvcjogYW55KSA9PiB0aGlzLm9uRXJyb3IoZXJyb3IpLFxuICAgICAgICAoKSA9PiB0aGlzLm9uRGlzY29ubmVjdGVkKClcbiAgICAgICk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1tXZWJTb2NrZXRTZXJ2aWNlXSBFcnJvIGFvIGNyaWFyIGNvbmV4w6NvIFNvY2tKUzonLCBlcnJvcik7XG4gICAgICB0aGlzLmNvbm5lY3Rpb25TdGF0ZSQubmV4dCgnZXJyb3InKTtcbiAgICB9XG4gIH1cblxuICAvKiogRGVzY29uZWN0YSBkbyBXZWJTb2NrZXQgKi9cbiAgZGlzY29ubmVjdCgpOiB2b2lkIHtcbiAgICB0aGlzLmNsZWFyUmVjb25uZWN0KCk7XG4gICAgdGhpcy5yZWNvbm5lY3RBdHRlbXB0cyA9IDA7XG5cbiAgICAvLyBVbnN1YnNjcmliZSBkZSB0b2RhcyBhcyBzdWJzY3JpcHRpb25zIFNUT01QXG4gICAgZm9yIChjb25zdCBbLCBzdWJdIG9mIHRoaXMuc3RvbXBTdWJzY3JpcHRpb25zLmVudHJpZXMoKSkge1xuICAgICAgdHJ5IHsgc3ViLnVuc3Vic2NyaWJlKCk7IH0gY2F0Y2ggeyAvKiBpZ25vcmUgKi8gfVxuICAgIH1cbiAgICB0aGlzLnN0b21wU3Vic2NyaXB0aW9ucy5jbGVhcigpO1xuICAgIHRoaXMucGVuZGluZ1N1YnNjcmlwdGlvbnMgPSBbXTtcblxuICAgIGlmICh0aGlzLmNsaWVudD8uY29ubmVjdGVkKSB7XG4gICAgICB0aGlzLmNsaWVudC5kaXNjb25uZWN0KCk7XG4gICAgfVxuICAgIHRoaXMuY2xpZW50ID0gbnVsbDtcbiAgICB0aGlzLmNvbm5lY3Rpb25TdGF0ZSQubmV4dCgnZGlzY29ubmVjdGVkJyk7XG4gIH1cblxuICAvKipcbiAgICogSW5zY3JldmUtc2UgZW0gdW0gdMOzcGljbyBiYXNlYWRvIG5hIGNvbmZpZ3VyYcOnw6NvLlxuICAgKiBQYWRyw6NvIGRvIGJpbmQ6IC90b3BpYy97dG9rZW59L3tkb21haW59L3tzZXJ2aWNlfS97cHJpbWl0aXZlfVxuICAgKi9cbiAgc3Vic2NyaWJlPFQgPSBhbnk+KGNvbmZpZzogV2ViU29ja2V0Q29uZmlnKTogT2JzZXJ2YWJsZTxTdG9tcE1lc3NhZ2U8VD4+IHtcbiAgICBjb25zdCBkZXN0aW5hdGlvbiA9IHRoaXMuYnVpbGREZXN0aW5hdGlvbihjb25maWcpO1xuICAgIGNvbnN0IHN1YklkID0gYHN1Yi0ke3RoaXMuc3Vic2NyaXB0aW9uQ291bnRlcisrfWA7XG5cbiAgICBpZiAodGhpcy5jbGllbnQ/LmNvbm5lY3RlZCkge1xuICAgICAgdGhpcy5kb1N1YnNjcmliZShkZXN0aW5hdGlvbiwgc3ViSWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnBlbmRpbmdTdWJzY3JpcHRpb25zLnB1c2goeyBkZXN0aW5hdGlvbiwgaWQ6IHN1YklkIH0pO1xuICAgICAgaWYgKHRoaXMuY29ubmVjdGlvblN0YXRlJC52YWx1ZSA9PT0gJ2Rpc2Nvbm5lY3RlZCcpIHtcbiAgICAgICAgdGhpcy5jb25uZWN0KCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMubWVzc2FnZXMkLnBpcGUoXG4gICAgICBmaWx0ZXIobXNnID0+IG1zZy5kZXN0aW5hdGlvbiA9PT0gZGVzdGluYXRpb24pLFxuICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpLFxuICAgICAgc2hhcmUoKVxuICAgICkgYXMgT2JzZXJ2YWJsZTxTdG9tcE1lc3NhZ2U8VD4+O1xuICB9XG5cbiAgLyoqIFJlbW92ZSBhIGluc2NyacOnw6NvIGRlIHVtIHTDs3BpY28gKi9cbiAgdW5zdWJzY3JpYmUoY29uZmlnOiBXZWJTb2NrZXRDb25maWcpOiB2b2lkIHtcbiAgICBjb25zdCBkZXN0aW5hdGlvbiA9IHRoaXMuYnVpbGREZXN0aW5hdGlvbihjb25maWcpO1xuICAgIGNvbnN0IGVudHJ5ID0gWy4uLnRoaXMuc3RvbXBTdWJzY3JpcHRpb25zLmVudHJpZXMoKV0uZmluZCgoW2tleV0pID0+IGtleS5zdGFydHNXaXRoKGRlc3RpbmF0aW9uKSk7XG5cbiAgICBpZiAoZW50cnkpIHtcbiAgICAgIGNvbnN0IFtrZXksIHN1Yl0gPSBlbnRyeTtcbiAgICAgIHRyeSB7IHN1Yi51bnN1YnNjcmliZSgpOyB9IGNhdGNoIHsgLyogaWdub3JlICovIH1cbiAgICAgIHRoaXMuc3RvbXBTdWJzY3JpcHRpb25zLmRlbGV0ZShrZXkpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuZGlzY29ubmVjdCgpO1xuICAgIHRoaXMuZGVzdHJveSQubmV4dCgpO1xuICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcbiAgfVxuXG4gIC8vIOKUgOKUgCBQcml2YWRvcyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICBwcml2YXRlIGJ1aWxkV2ViU29ja2V0VXJsKCk6IHN0cmluZyB8IG51bGwge1xuICAgIGNvbnN0IGJhc2VVcmwgPSB0aGlzLmNvb2tpZVNlcnZpY2UuZ2V0Q29va2llKCdjb20uc2VuaW9yLmJhc2UudXJsJyk7XG4gICAgaWYgKCFiYXNlVXJsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBjbGVhbkJhc2VVcmwgPSBiYXNlVXJsLnJlcGxhY2UoL1xcLyQvLCAnJyk7XG4gICAgcmV0dXJuIGAke2NsZWFuQmFzZVVybH0vd2Vic29ja2V0L3N1YnNjcmlwdGlvbmA7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkRGVzdGluYXRpb24oY29uZmlnOiBXZWJTb2NrZXRDb25maWcpOiBzdHJpbmcge1xuICAgIGNvbnN0IHBhcnRzID0gWycvdG9waWMnXTtcblxuICAgIGlmIChjb25maWcudXNlclNjb3BlZCkge1xuICAgICAgY29uc3QgdG9rZW4gPSB0aGlzLmF1dGhTZXJ2aWNlLmdldEFjY2Vzc1Rva2VuKCk7XG4gICAgICBpZiAodG9rZW4pIHtcbiAgICAgICAgcGFydHMucHVzaCh0b2tlbik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcGFydHMucHVzaChjb25maWcuZG9tYWluLCBjb25maWcuc2VydmljZSwgY29uZmlnLnByaW1pdGl2ZSk7XG4gICAgcmV0dXJuIHBhcnRzLmpvaW4oJy8nKTtcbiAgfVxuXG4gIHByaXZhdGUgb25Db25uZWN0ZWQoKTogdm9pZCB7XG4gICAgdGhpcy5yZWNvbm5lY3RBdHRlbXB0cyA9IDA7XG4gICAgdGhpcy5jb25uZWN0aW9uU3RhdGUkLm5leHQoJ2Nvbm5lY3RlZCcpO1xuICAgIHRoaXMucmVzdWJzY3JpYmVBbGwoKTtcbiAgfVxuXG4gIHByaXZhdGUgb25FcnJvcihlcnJvcjogYW55KTogdm9pZCB7XG4gICAgY29uc29sZS5lcnJvcignW1dlYlNvY2tldFNlcnZpY2VdIFNUT01QIGVycm9yOicsIGVycm9yKTtcbiAgICB0aGlzLmNvbm5lY3Rpb25TdGF0ZSQubmV4dCgnZXJyb3InKTtcbiAgfVxuXG4gIHByaXZhdGUgb25EaXNjb25uZWN0ZWQoKTogdm9pZCB7XG4gICAgdGhpcy5jb25uZWN0aW9uU3RhdGUkLm5leHQoJ2Rpc2Nvbm5lY3RlZCcpO1xuICAgIGlmICh0aGlzLnJlY29ubmVjdEF0dGVtcHRzIDwgdGhpcy5tYXhSZWNvbm5lY3RBdHRlbXB0cykge1xuICAgICAgdGhpcy5zY2hlZHVsZVJlY29ubmVjdCgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2NoZWR1bGVSZWNvbm5lY3QoKTogdm9pZCB7XG4gICAgdGhpcy5jbGVhclJlY29ubmVjdCgpO1xuICAgIGNvbnN0IGRlbGF5ID0gTWF0aC5taW4oMTAwMCAqIE1hdGgucG93KDIsIHRoaXMucmVjb25uZWN0QXR0ZW1wdHMpLCAzMDAwMCk7XG4gICAgdGhpcy5yZWNvbm5lY3RBdHRlbXB0cysrO1xuICAgIGNvbnNvbGUubG9nKGBbV2ViU29ja2V0U2VydmljZV0gUmVjb25lY3RhbmRvIGVtICR7ZGVsYXl9bXMgKHRlbnRhdGl2YSAke3RoaXMucmVjb25uZWN0QXR0ZW1wdHN9LyR7dGhpcy5tYXhSZWNvbm5lY3RBdHRlbXB0c30pYCk7XG4gICAgdGhpcy5yZWNvbm5lY3RUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB0aGlzLmNvbm5lY3QoKSwgZGVsYXkpO1xuICB9XG5cbiAgcHJpdmF0ZSBjbGVhclJlY29ubmVjdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5yZWNvbm5lY3RUaW1lb3V0KSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5yZWNvbm5lY3RUaW1lb3V0KTtcbiAgICAgIHRoaXMucmVjb25uZWN0VGltZW91dCA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSByZXN1YnNjcmliZUFsbCgpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IHBlbmRpbmcgb2YgdGhpcy5wZW5kaW5nU3Vic2NyaXB0aW9ucykge1xuICAgICAgdGhpcy5kb1N1YnNjcmliZShwZW5kaW5nLmRlc3RpbmF0aW9uLCBwZW5kaW5nLmlkKTtcbiAgICB9XG4gICAgdGhpcy5wZW5kaW5nU3Vic2NyaXB0aW9ucyA9IFtdO1xuICB9XG5cbiAgcHJpdmF0ZSBkb1N1YnNjcmliZShkZXN0aW5hdGlvbjogc3RyaW5nLCBpZDogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmNsaWVudD8uY29ubmVjdGVkKSByZXR1cm47XG5cbiAgICBjb25zdCBzdWIgPSB0aGlzLmNsaWVudC5zdWJzY3JpYmUoZGVzdGluYXRpb24sIChtZXNzYWdlOiBJTWVzc2FnZSkgPT4ge1xuICAgICAgbGV0IGJvZHk6IGFueSA9IG1lc3NhZ2UuYm9keTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGJvZHkgPSBKU09OLnBhcnNlKG1lc3NhZ2UuYm9keSk7XG4gICAgICB9IGNhdGNoIHsgLyogbWFudMOpbSBjb21vIHN0cmluZyAqLyB9XG5cbiAgICAgIGNvbnN0IGhlYWRlcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcbiAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKG1lc3NhZ2UuaGVhZGVycykpIHtcbiAgICAgICAgaGVhZGVyc1trZXldID0gbWVzc2FnZS5oZWFkZXJzW2tleV07XG4gICAgICB9XG5cbiAgICAgIHRoaXMubWVzc2FnZXMkLm5leHQoeyBkZXN0aW5hdGlvbiwgYm9keSwgaGVhZGVycyB9KTtcbiAgICB9KTtcblxuICAgIHRoaXMuc3RvbXBTdWJzY3JpcHRpb25zLnNldChgJHtkZXN0aW5hdGlvbn06OiR7aWR9YCwgc3ViKTtcbiAgfVxufVxuIl19
|
package/esm2022/public-api.mjs
CHANGED
|
@@ -20,6 +20,7 @@ export { ThemeService } from './lib/services/theme.service';
|
|
|
20
20
|
export { TranslationService } from './lib/services/translation.service';
|
|
21
21
|
export { MaskService } from './lib/services/mask.service';
|
|
22
22
|
export { LocaleService } from './lib/services/locale.service';
|
|
23
|
+
export { WebSocketService } from './lib/services/websocket.service';
|
|
23
24
|
// ============================================================================
|
|
24
25
|
// COMPONENTS
|
|
25
26
|
// ============================================================================
|
|
@@ -105,4 +106,4 @@ export { FieldType, mergeUnique, getTypeInformation, isValidFilter, getProp, set
|
|
|
105
106
|
// export * from './lib/i18n/translation.config';
|
|
106
107
|
// export * from './lib/i18n/locale.config';
|
|
107
108
|
// export * from './lib/i18n/fallback';
|
|
108
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMtYWkvc3JjL3B1YmxpYy1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7O0dBS0c7QUFFSCwrRUFBK0U7QUFDL0UsU0FBUztBQUNULCtFQUErRTtBQUMvRSxjQUFjLGlDQUFpQyxDQUFDO0FBRWhELCtFQUErRTtBQUMvRSxXQUFXO0FBQ1gsK0VBQStFO0FBQy9FLE9BQU8sRUFBRSxhQUFhLEVBQW9JLE1BQU0sK0JBQStCLENBQUM7QUFDaE0sT0FBTyxFQUFFLFdBQVcsRUFBa0IsTUFBTSw2QkFBNkIsQ0FBQztBQUMxRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGlCQUFpQixFQUFpSSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3JNLE9BQU8sRUFBRSxrQkFBa0IsRUFBd0IsTUFBTSxxQ0FBcUMsQ0FBQztBQUMvRixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDNUQsT0FBTyxFQUFFLGtCQUFrQixFQUFrRCxNQUFNLG9DQUFvQyxDQUFDO0FBQ3hILE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFFOUQsK0VBQStFO0FBQy9FLGFBQWE7QUFDYiwrRUFBK0U7QUFDL0UsT0FBTyxFQUFFLHFCQUFxQixFQUFxQixNQUFNLHdEQUF3RCxDQUFDO0FBQ2xILE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGtFQUFrRSxDQUFDO0FBQzdHLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGtEQUFrRCxDQUFDO0FBQ3ZGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGlEQUFpRCxD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cUM7QUFFckMsT0FBTztBQUNQLGlEQUFpRDtBQUNqRCw0Q0FBNEM7QUFDNUMsdUNBQXVDIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIFB1YmxpYyBBUEkgU3VyZmFjZSBvZiBAc2VuaW9yc2lzdGVtYXMvY29tcG9uZW50cy1haVxuICogXG4gKiBFc3RlIGFycXVpdm8gc2Vyw6EgcG9wdWxhZG8gY29uZm9ybWUgb3MgY29tcG9uZW50ZXMgZm9yZW0gbWlncmFkb3MuXG4gKiBQb3IgZW5xdWFudG8sIGV4cG9ydGEgYXBlbmFzIG8gbcOzZHVsbyBwcmluY2lwYWwuXG4gKi9cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gTU9EVUxFXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5leHBvcnQgKiBmcm9tICcuL2xpYi9hbmd1bGFyLWNvbXBvbmVudHMubW9kdWxlJztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gU0VSVklDRVNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbmV4cG9ydCB7IEVudGl0eVNlcnZpY2UsIHR5cGUgU29ydE1ldGEsIHR5cGUgTGlzdFBhcmFtcywgdHlwZSBCb2R5UGFyYW1zLCB0eXBlIEVudGl0eUxpc3RSZXNwb25zZSwgdHlwZSBUcmFuc2xhdGlvblNlcnZpY2UgYXMgVHJhbnNsYXRpb25TZXJ2aWNlSW50ZXJmYWNlIH0gZnJvbSAnLi9saWIvc2VydmljZXMvZW50aXR5LnNlcnZpY2UnO1xuZXhwb3J0IHsgQXV0aFNlcnZpY2UsIHR5cGUgVXNlclRva2VuIH0gZnJvbSAnLi9saWIvc2VydmljZXMvYXV0aC5zZXJ2aWNlJztcbmV4cG9ydCB7IENvb2tpZVNlcnZpY2UgfSBmcm9tICcuL2xpYi9zZXJ2aWNlcy9jb29raWUuc2VydmljZSc7XG5leHBvcnQgeyBQZXJtaXNzaW9uU2VydmljZSwgdHlwZSBQZXJtaXNzaW9uUmVxdWVzdCwgdHlwZSBQZXJtaXNzaW9uUmVzcG9uc2UsIHR5cGUgQ2hlY2tBY2Nlc3NSZXF1ZXN0LCB0eXBlIENoZWNrQWNjZXNzUmVzcG9uc2UsIHR5cGUgQXV0aFNlcnZpY2VJbnRlcmZhY2UgfSBmcm9tICcuL2xpYi9zZXJ2aWNlcy9wZXJtaXNzaW9uLnNlcnZpY2UnO1xuZXhwb3J0IHsgU2VuaW9yVG9rZW5TZXJ2aWNlLCB0eXBlIFNlbmlvclRva2VuRGF0YSB9IGZyb20gJy4vbGliL3NlcnZpY2VzL3Nlbmlvci10b2tlbi5zZXJ2aWNlJztcbmV4cG9ydCB7IFRoZW1lU2VydmljZSB9IGZyb20gJy4vbGliL3NlcnZpY2VzL3RoZW1lLnNlcnZpY2UnO1xuZXhwb3J0IHsgVHJhbnNsYXRpb25TZXJ2aWNlLCB0eXBlIFN1cHBvcnRlZExhbmd1YWdlLCB0eXBlIFRyYW5zbGF0aW9uTG9hZGVyIH0gZnJvbSAnLi9saWIvc2VydmljZXMvdHJhbnNsYXRpb24uc2VydmljZSc7XG5leHBvcnQgeyBNYXNrU2VydmljZSB9IGZyb20gJy4vbGliL3NlcnZpY2VzL21hc2suc2VydmljZSc7XG5leHBvcnQgeyBMb2NhbGVTZXJ2aWNlIH0gZnJvbSAnLi9saWIvc2VydmljZXMvbG9jYWxlLnNlcnZpY2UnO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBDT01QT05FTlRTXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5leHBvcnQgeyBFeHBvcnREaWFsb2dDb21wb25lbnQsIHR5cGUgQ29sdW1uT3B0aW9uIH0gZnJvbSAnLi9saWIvY29tcG9uZW50cy9leHBvcnQtZGlhbG9nL2V4cG9ydC1kaWFsb2cuY29tcG9uZW50JztcbmV4cG9ydCB7IEJ1bGtEZWxldGVEaWFsb2dDb21wb25lbnQgfSBmcm9tICcuL2xpYi9jb21wb25lbnRzL2J1bGstZGVsZXRlLWRpYWxvZy9idWxrLWRlbGV0ZS1kaWFsb2cuY29tcG9uZW50JztcbmV4cG9ydCB7IEJyZWFkY3J1bWJDb21wb25lbnQgfSBmcm9tICcuL2xpYi9jb21wb25lbnRzL2JyZWFkY3J1bWIvYnJlYWRjcnVtYi5jb21wb25lbnQnO1xuZXhwb3J0IHsgTG9hZGluZ0NvbXBvbmVudCB9IGZyb20gJy4vbGliL2NvbXBvbmVudHMvbG9hZGluZy9sb2FkaW5nLmNvbXBvbmVudCc7XG5leHBvcnQgeyBJYXNzaXN0SWNvbkNvbXBvbmVudCB9IGZyb20gJy4vbGliL2NvbXBvbmVudHMvbG9hZGluZy9pYXNzaXN0LWljb24uY29tcG9uZW50JztcbmV4cG9ydCB7IEVudGl0eUxpc3RCYXNlQ29tcG9uZW50IH0gZnJvbSAnLi9saWIvY29tcG9uZW50cy9iYXNlL2VudGl0eS1saXN0LWJhc2UuY29tcG9uZW50JztcblxuLy8gRHluYW1pYyBGb3JtXG5leHBvcnQgeyBEeW5hbWljRm9ybUNvbXBvbmVudCB9IGZyb20gJy4vbGliL2NvbXBvbmVudHMvZHluYW1pYy1mb3JtL2R5bmFtaWMtZm9ybS5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9keW5hbWljLWZvcm0vbW9kZWxzL2R5bmFtaWMtZm9ybS5tb2RlbHMnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9keW5hbWljLWZvcm0vZmllbGRzJztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gTU9ERUxTXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5leHBvcnQgdHlwZSB7IEJhc2VFbnRpdHkgfSBmcm9tICcuL2xpYi9tb2RlbHMvYmFzZS1lbnRpdHkuaW50ZXJmYWNlJztcbmV4cG9ydCB0eXBlIHsgXG4gIFRhYmxlQ29sdW1uLCBcbiAgRm9ybUZpZWxkIGFzIEVudGl0eUZvcm1GaWVsZCwgXG4gIEZpbHRlckZpZWxkLCBcbiAgRXhwb3J0RmllbGQsIFxuICBFbnRpdHlDb25maWcgXG59IGZyb20gJy4vbGliL21vZGVscy9lbnRpdHktY29uZmlnLmludGVyZmFjZSc7XG5leHBvcnQgdHlwZSB7IFxuICBDb2x1bW5Db25maWcsIFxuICBMb29rdXBDb2x1bW4sIFxuICBGaWx0ZXJGaWVsZFNpemUsIFxuICBGaWx0ZXJTZWN0aW9uLCBcbiAgRmlsdGVyQ29uZmlnLCBcbiAgRm9ybUZpZWxkQ29uZmlnIGFzIEVudGl0eUZvcm1GaWVsZENvbmZpZywgXG4gIEVudGl0eUxpc3RDb25maWcgXG59IGZyb20gJy4vbGliL21vZGVscy9lbnRpdHktbGlzdC5jb25maWcnO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBDT05GSUdcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbmV4cG9ydCB7IFRSQU5TTEFUSU9OX0NPTkZJRywgU1VQUE9SVEVEX0xBTkdVQUdFUywgREVGQVVMVF9MQU5HVUFHRSwgbWFwVG9rZW5Mb2NhbGVUb0xhbmd1YWdlLCBnZXRMYW5ndWFnZUluZm8sIHR5cGUgTGFuZ3VhZ2VDb25maWcgfSBmcm9tICcuL2xpYi9jb25maWcvdHJhbnNsYXRpb24uY29uZmlnJztcbmV4cG9ydCB7IHByb3ZpZGVTZW5pb3JQcmltZU5HLCBTZW5pb3JQcmVzZXQsIHR5cGUgU2VuaW9yUHJpbWVOR0NvbmZpZyB9IGZyb20gJy4vbGliL2NvbmZpZy9wcmltZW5nLmNvbmZpZyc7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIElOVEVSQ0VQVE9SU1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuZXhwb3J0IHsgYXBpSW50ZXJjZXB0b3IgfSBmcm9tICcuL2xpYi9pbnRlcmNlcHRvcnMvYXBpLmludGVyY2VwdG9yJztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gTk9UQTogT3MgZXhwb3J0cyBhYmFpeG8gc2Vyw6NvIGRlc2NvbWVudGFkb3MgY29uZm9ybWUgb3MgYXJxdWl2b3MgZm9yZW0gbWlncmFkb3Ncbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLy8gQ09NUE9ORU5UUyAtIEJBU0Vcbi8vIGV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvYmFzZS9lbnRpdHktbGlzdC1iYXNlL2VudGl0eS1saXN0LWJhc2UuY29tcG9uZW50Jztcbi8vIGV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvYmFzZS9lbnRpdHktZm9ybS1iYXNlL2VudGl0eS1mb3JtLWJhc2UuY29tcG9uZW50JztcblxuLy8gQ09NUE9ORU5UUyAtIEZPUk1TXG4vLyBleHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2Zvcm1zL2VudGl0eS1mb3JtLWZpZWxkcy9lbnRpdHktZm9ybS1maWVsZHMuY29tcG9uZW50Jztcbi8vIGV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvZm9ybXMvZW50aXR5LWZvcm0tZGlhbG9nL2VudGl0eS1mb3JtLWRpYWxvZy5jb21wb25lbnQnO1xuLy8gZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9mb3Jtcy9lbnRpdHktZm9ybS1kcmF3ZXIvZW50aXR5LWZvcm0tZHJhd2VyLmNvbXBvbmVudCc7XG4vLyBleHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2Zvcm1zL3N1Yi1yZXNvdXJjZS1mb3JtLWRpYWxvZy9zdWItcmVzb3VyY2UtZm9ybS1kaWFsb2cuY29tcG9uZW50JztcblxuLy8gQ09NUE9ORU5UUyAtIExJU1RTXG4vLyBleHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2xpc3RzL2Zvcm0tZmlsdGVyL2Zvcm0tZmlsdGVyLmNvbXBvbmVudCc7XG4vLyBleHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2xpc3RzL2V4cG9ydC1kaWFsb2cvZXhwb3J0LWRpYWxvZy5jb21wb25lbnQnO1xuLy8gZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9saXN0cy9idWxrLWRlbGV0ZS1kaWFsb2cvYnVsay1kZWxldGUtZGlhbG9nLmNvbXBvbmVudCc7XG5cbi8vIENPTVBPTkVOVFMgLSBVSVxuLy8gZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy91aS9icmVhZGNydW1iL2JyZWFkY3J1bWIuY29tcG9uZW50Jztcbi8vIGV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvdWkvZWRpdC1pbmxpbmUvZWRpdC1pbmxpbmUuY29tcG9uZW50Jztcbi8vIGV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvdWkvbG9va3VwLWZpZWxkL2xvb2t1cC1maWVsZC5jb21wb25lbnQnO1xuLy8gZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy91aS9rYW5iYW4tYm9hcmQva2FuYmFuLWJvYXJkLmNvbXBvbmVudCc7XG4vLyBleHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL3VpL3RoZW1lLXRvZ2dsZS90aGVtZS10b2dnbGUuY29tcG9uZW50JztcblxuLy8gU0VSVklDRVNcbi8vIGV4cG9ydCAqIGZyb20gJy4vbGliL3NlcnZpY2VzL2VudGl0eS5zZXJ2aWNlJztcbi8vIGV4cG9ydCAqIGZyb20gJy4vbGliL3NlcnZpY2VzL2F1dGguc2VydmljZSc7XG4vLyBleHBvcnQgKiBmcm9tICcuL2xpYi9zZXJ2aWNlcy90cmFuc2xhdGlvbi5zZXJ2aWNlJztcbi8vIGV4cG9ydCAqIGZyb20gJy4vbGliL3NlcnZpY2VzL3RoZW1lLnNlcnZpY2UnO1xuLy8gZXhwb3J0ICogZnJvbSAnLi9saWIvc2VydmljZXMvcGVybWlzc2lvbi5zZXJ2aWNlJztcbi8vIGV4cG9ydCAqIGZyb20gJy4vbGliL3NlcnZpY2VzL2Nvb2tpZS5zZXJ2aWNlJztcbi8vIGV4cG9ydCAqIGZyb20gJy4vbGliL3NlcnZpY2VzL3Nlbmlvci10b2tlbi5zZXJ2aWNlJztcbi8vIGV4cG9ydCAqIGZyb20gJy4vbGliL3NlcnZpY2VzL21hc2suc2VydmljZSc7XG5cbi8vIERJUkVDVElWRVNcbmV4cG9ydCB7IFBvc3RhbENvZGVNYXNrRGlyZWN0aXZlIH0gZnJvbSAnLi9saWIvZGlyZWN0aXZlcy9wb3N0YWwtY29kZS1tYXNrLmRpcmVjdGl2ZSc7XG5leHBvcnQgeyBEb2N1bWVudE1hc2tEaXJlY3RpdmUgfSBmcm9tICcuL2xpYi9kaXJlY3RpdmVzL2RvY3VtZW50LW1hc2suZGlyZWN0aXZlJztcbmV4cG9ydCB7IFBob25lTWFza0RpcmVjdGl2ZSB9IGZyb20gJy4vbGliL2RpcmVjdGl2ZXMvcGhvbmUtbWFzay5kaXJlY3RpdmUnO1xuZXhwb3J0IHsgTW9uZXlNYXNrRGlyZWN0aXZlIH0gZnJvbSAnLi9saWIvZGlyZWN0aXZlcy9tb25leS1tYXNrLmRpcmVjdGl2ZSc7XG5leHBvcnQgeyBUYWJsZUxvYWRpbmdEaXJlY3RpdmUgfSBmcm9tICcuL2xpYi9kaXJlY3RpdmVzL3RhYmxlLWxvYWRpbmcvdGFibGUtbG9hZGluZy5kaXJlY3RpdmUnO1xuXG4vLyBQSVBFU1xuZXhwb3J0IHsgVHJhbnNsYXRlUGlwZSB9IGZyb20gJy4vbGliL3BpcGVzL3RyYW5zbGF0ZS5waXBlJztcbmV4cG9ydCB7IENwZlBpcGUgfSBmcm9tICcuL2xpYi9waXBlcy9jcGYucGlwZSc7XG5leHBvcnQgeyBDbnBqUGlwZSB9IGZyb20gJy4vbGliL3BpcGVzL2NucGoucGlwZSc7XG5leHBvcnQgeyBEb2N1bWVudFBpcGUgfSBmcm9tICcuL2xpYi9waXBlcy9kb2N1bWVudC5waXBlJztcbmV4cG9ydCB7IFBob25lUGlwZSB9IGZyb20gJy4vbGliL3BpcGVzL3Bob25lLnBpcGUnO1xuZXhwb3J0IHsgUG9zdGFsQ29kZVBpcGUgfSBmcm9tICcuL2xpYi9waXBlcy9wb3N0YWwtY29kZS5waXBlJztcbmV4cG9ydCB7IE1vbmV5UGlwZSB9IGZyb20gJy4vbGliL3BpcGVzL21vbmV5LnBpcGUnO1xuZXhwb3J0IHsgRGF0ZUZvcm1hdFBpcGUgfSBmcm9tICcuL2xpYi9waXBlcy9kYXRlLWZvcm1hdC5waXBlJztcblxuLy8gVVRJTFNcbmV4cG9ydCB7IFRyYW5zbGF0aW9uSGVscGVyIH0gZnJvbSAnLi9saWIvdXRpbHMvdHJhbnNsYXRpb24uaGVscGVyJztcbmV4cG9ydCB7IFxuICBGaWVsZFR5cGUsXG4gIHR5cGUgRm9ybUZpZWxkIGFzIFV0aWxzRm9ybUZpZWxkLFxuICB0eXBlIE9wdGlvbixcbiAgdHlwZSBGaWx0ZXJUb2tlbixcbiAgbWVyZ2VVbmlxdWUsXG4gIGdldFR5cGVJbmZvcm1hdGlvbixcbiAgaXNWYWxpZEZpbHRlcixcbiAgZ2V0UHJvcCxcbiAgc2V0UHJvcCxcbiAgZ2V0TGFiZWxWYWx1ZVJlcXVlc3QsXG4gIGdldFN1Z2dlc3Rpb25WYWx1ZSxcbiAgZ2V0RW51bVF1ZXJ5LFxuICBlc2NhcGVGaWx0ZXJWYWx1ZSxcbiAgY3JlYXRlRmlsdGVyU3RyaW5nLFxuICBjcmVhdGVGaWx0ZXJUb2tlbnMsXG4gIHJlc29sdmVSZWZzLFxuICBkZWVwQ2xvbmUsXG4gIGRlZXBFcXVhbCxcbiAgZGVib3VuY2UsXG4gIHRocm90dGxlXG59IGZyb20gJy4vbGliL3V0aWxzL3V0aWxzJztcblxuLy8gSU5URVJDRVBUT1JTXG4vLyBleHBvcnQgKiBmcm9tICcuL2xpYi9pbnRlcmNlcHRvcnMvYXBpLmludGVyY2VwdG9yJztcblxuLy8gTU9ERUxTIC0gSU5URVJGQUNFU1xuLy8gZXhwb3J0ICogZnJvbSAnLi9saWIvbW9kZWxzL2ludGVyZmFjZXMvYmFzZS1lbnRpdHkuaW50ZXJmYWNlJztcbi8vIGV4cG9ydCAqIGZyb20gJy4vbGliL21vZGVscy9pbnRlcmZhY2VzL2VudGl0eS1jb25maWcuaW50ZXJmYWNlJztcbi8vIGV4cG9ydCAqIGZyb20gJy4vbGliL21vZGVscy9pbnRlcmZhY2VzL2VudGl0eS1saXN0LmNvbmZpZyc7XG5cbi8vIE1PREVMUyAtIEVOVU1TXG4vLyBleHBvcnQgKiBmcm9tICcuL2xpYi9tb2RlbHMvZW51bXMvc3RhdHVzLmVudW0nO1xuLy8gZXhwb3J0ICogZnJvbSAnLi9saWIvbW9kZWxzL2VudW1zL3R5cGUtcGVyc29uLmVudW0nO1xuXG4vLyBVVElMU1xuLy8gZXhwb3J0ICogZnJvbSAnLi9saWIvdXRpbHMvdXRpbHMnO1xuXG4vLyBJMThOXG4vLyBleHBvcnQgKiBmcm9tICcuL2xpYi9pMThuL3RyYW5zbGF0aW9uLmNvbmZpZyc7XG4vLyBleHBvcnQgKiBmcm9tICcuL2xpYi9pMThuL2xvY2FsZS5jb25maWcnO1xuLy8gZXhwb3J0ICogZnJvbSAnLi9saWIvaTE4bi9mYWxsYmFjayc7XG4iXX0=
|
|
109
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMtYWkvc3JjL3B1YmxpYy1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7O0dBS0c7QUFFSCwrRUFBK0U7QUFDL0UsU0FBUztBQUNULCtFQUErRTtBQUMvRSxjQUFjLGlDQUFpQyxDQUFDO0FBRWhELCtFQUErRTtBQUMvRSxXQUFXO0FBQ1gsK0VBQStFO0FBQy9FLE9BQU8sRUFBRSxhQUFhLEVBQW9JLE1BQU0sK0JBQStCLENBQUM7QUFDaE0sT0FBTyxFQUFFLFdBQVcsRUFBa0IsTUFBTSw2QkFBNkIsQ0FBQztBQUMxRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGlCQUFpQixFQUFpSSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3JNLE9BQU8sRUFBRSxrQkFBa0IsRUFBd0IsTUFBTSxxQ0FBcUMsQ0FBQztBQUMvRixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDNUQsT0FBTyxFQUFFLGtCQUFrQixFQUFrRCxNQUFNLG9DQUFvQyxDQUFDO0FBQ3hILE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGdCQUFnQixFQUEyQyxNQUFNLGtDQUFrQyxDQUFDO0FBRTdHLCtFQUErRTtBQUMvRSxhQUFhO0FBQ2IsK0VBQStFO0FBQy9FLE9BQU8sRUFBRSxxQkFBcUIsRUFBcUIsTUFBTSx3REFBd0QsQ0FBQztBQUNsSCxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxrRUFBa0UsQ0FBQztBQUM3RyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUN2RixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw0Q0FBNEMs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QUFDakIsa0RBQWtEO0FBQ2xELHVEQUF1RDtBQUV2RCxRQUFRO0FBQ1IscUNBQXFDO0FBRXJDLE9BQU87QUFDUCxpREFBaUQ7QUFDakQsNENBQTRDO0FBQzVDLHVDQUF1QyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBQdWJsaWMgQVBJIFN1cmZhY2Ugb2YgQHNlbmlvcnNpc3RlbWFzL2NvbXBvbmVudHMtYWlcbiAqIFxuICogRXN0ZSBhcnF1aXZvIHNlcsOhIHBvcHVsYWRvIGNvbmZvcm1lIG9zIGNvbXBvbmVudGVzIGZvcmVtIG1pZ3JhZG9zLlxuICogUG9yIGVucXVhbnRvLCBleHBvcnRhIGFwZW5hcyBvIG3Ds2R1bG8gcHJpbmNpcGFsLlxuICovXG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIE1PRFVMRVxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuZXhwb3J0ICogZnJvbSAnLi9saWIvYW5ndWxhci1jb21wb25lbnRzLm1vZHVsZSc7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFNFUlZJQ0VTXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5leHBvcnQgeyBFbnRpdHlTZXJ2aWNlLCB0eXBlIFNvcnRNZXRhLCB0eXBlIExpc3RQYXJhbXMsIHR5cGUgQm9keVBhcmFtcywgdHlwZSBFbnRpdHlMaXN0UmVzcG9uc2UsIHR5cGUgVHJhbnNsYXRpb25TZXJ2aWNlIGFzIFRyYW5zbGF0aW9uU2VydmljZUludGVyZmFjZSB9IGZyb20gJy4vbGliL3NlcnZpY2VzL2VudGl0eS5zZXJ2aWNlJztcbmV4cG9ydCB7IEF1dGhTZXJ2aWNlLCB0eXBlIFVzZXJUb2tlbiB9IGZyb20gJy4vbGliL3NlcnZpY2VzL2F1dGguc2VydmljZSc7XG5leHBvcnQgeyBDb29raWVTZXJ2aWNlIH0gZnJvbSAnLi9saWIvc2VydmljZXMvY29va2llLnNlcnZpY2UnO1xuZXhwb3J0IHsgUGVybWlzc2lvblNlcnZpY2UsIHR5cGUgUGVybWlzc2lvblJlcXVlc3QsIHR5cGUgUGVybWlzc2lvblJlc3BvbnNlLCB0eXBlIENoZWNrQWNjZXNzUmVxdWVzdCwgdHlwZSBDaGVja0FjY2Vzc1Jlc3BvbnNlLCB0eXBlIEF1dGhTZXJ2aWNlSW50ZXJmYWNlIH0gZnJvbSAnLi9saWIvc2VydmljZXMvcGVybWlzc2lvbi5zZXJ2aWNlJztcbmV4cG9ydCB7IFNlbmlvclRva2VuU2VydmljZSwgdHlwZSBTZW5pb3JUb2tlbkRhdGEgfSBmcm9tICcuL2xpYi9zZXJ2aWNlcy9zZW5pb3ItdG9rZW4uc2VydmljZSc7XG5leHBvcnQgeyBUaGVtZVNlcnZpY2UgfSBmcm9tICcuL2xpYi9zZXJ2aWNlcy90aGVtZS5zZXJ2aWNlJztcbmV4cG9ydCB7IFRyYW5zbGF0aW9uU2VydmljZSwgdHlwZSBTdXBwb3J0ZWRMYW5ndWFnZSwgdHlwZSBUcmFuc2xhdGlvbkxvYWRlciB9IGZyb20gJy4vbGliL3NlcnZpY2VzL3RyYW5zbGF0aW9uLnNlcnZpY2UnO1xuZXhwb3J0IHsgTWFza1NlcnZpY2UgfSBmcm9tICcuL2xpYi9zZXJ2aWNlcy9tYXNrLnNlcnZpY2UnO1xuZXhwb3J0IHsgTG9jYWxlU2VydmljZSB9IGZyb20gJy4vbGliL3NlcnZpY2VzL2xvY2FsZS5zZXJ2aWNlJztcbmV4cG9ydCB7IFdlYlNvY2tldFNlcnZpY2UsIHR5cGUgV2ViU29ja2V0Q29uZmlnLCB0eXBlIFN0b21wTWVzc2FnZSB9IGZyb20gJy4vbGliL3NlcnZpY2VzL3dlYnNvY2tldC5zZXJ2aWNlJztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gQ09NUE9ORU5UU1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuZXhwb3J0IHsgRXhwb3J0RGlhbG9nQ29tcG9uZW50LCB0eXBlIENvbHVtbk9wdGlvbiB9IGZyb20gJy4vbGliL2NvbXBvbmVudHMvZXhwb3J0LWRpYWxvZy9leHBvcnQtZGlhbG9nLmNvbXBvbmVudCc7XG5leHBvcnQgeyBCdWxrRGVsZXRlRGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi9saWIvY29tcG9uZW50cy9idWxrLWRlbGV0ZS1kaWFsb2cvYnVsay1kZWxldGUtZGlhbG9nLmNvbXBvbmVudCc7XG5leHBvcnQgeyBCcmVhZGNydW1iQ29tcG9uZW50IH0gZnJvbSAnLi9saWIvY29tcG9uZW50cy9icmVhZGNydW1iL2JyZWFkY3J1bWIuY29tcG9uZW50JztcbmV4cG9ydCB7IExvYWRpbmdDb21wb25lbnQgfSBmcm9tICcuL2xpYi9jb21wb25lbnRzL2xvYWRpbmcvbG9hZGluZy5jb21wb25lbnQnO1xuZXhwb3J0IHsgSWFzc2lzdEljb25Db21wb25lbnQgfSBmcm9tICcuL2xpYi9jb21wb25lbnRzL2xvYWRpbmcvaWFzc2lzdC1pY29uLmNvbXBvbmVudCc7XG5leHBvcnQgeyBFbnRpdHlMaXN0QmFzZUNvbXBvbmVudCB9IGZyb20gJy4vbGliL2NvbXBvbmVudHMvYmFzZS9lbnRpdHktbGlzdC1iYXNlLmNvbXBvbmVudCc7XG5cbi8vIER5bmFtaWMgRm9ybVxuZXhwb3J0IHsgRHluYW1pY0Zvcm1Db21wb25lbnQgfSBmcm9tICcuL2xpYi9jb21wb25lbnRzL2R5bmFtaWMtZm9ybS9keW5hbWljLWZvcm0uY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvZHluYW1pYy1mb3JtL21vZGVscy9keW5hbWljLWZvcm0ubW9kZWxzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvZHluYW1pYy1mb3JtL2ZpZWxkcyc7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIE1PREVMU1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuZXhwb3J0IHR5cGUgeyBCYXNlRW50aXR5IH0gZnJvbSAnLi9saWIvbW9kZWxzL2Jhc2UtZW50aXR5LmludGVyZmFjZSc7XG5leHBvcnQgdHlwZSB7IFxuICBUYWJsZUNvbHVtbiwgXG4gIEZvcm1GaWVsZCBhcyBFbnRpdHlGb3JtRmllbGQsIFxuICBGaWx0ZXJGaWVsZCwgXG4gIEV4cG9ydEZpZWxkLCBcbiAgRW50aXR5Q29uZmlnIFxufSBmcm9tICcuL2xpYi9tb2RlbHMvZW50aXR5LWNvbmZpZy5pbnRlcmZhY2UnO1xuZXhwb3J0IHR5cGUgeyBcbiAgQ29sdW1uQ29uZmlnLCBcbiAgTG9va3VwQ29sdW1uLCBcbiAgRmlsdGVyRmllbGRTaXplLCBcbiAgRmlsdGVyU2VjdGlvbiwgXG4gIEZpbHRlckNvbmZpZywgXG4gIEZvcm1GaWVsZENvbmZpZyBhcyBFbnRpdHlGb3JtRmllbGRDb25maWcsIFxuICBFbnRpdHlMaXN0Q29uZmlnIFxufSBmcm9tICcuL2xpYi9tb2RlbHMvZW50aXR5LWxpc3QuY29uZmlnJztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gQ09ORklHXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5leHBvcnQgeyBUUkFOU0xBVElPTl9DT05GSUcsIFNVUFBPUlRFRF9MQU5HVUFHRVMsIERFRkFVTFRfTEFOR1VBR0UsIG1hcFRva2VuTG9jYWxlVG9MYW5ndWFnZSwgZ2V0TGFuZ3VhZ2VJbmZvLCB0eXBlIExhbmd1YWdlQ29uZmlnIH0gZnJvbSAnLi9saWIvY29uZmlnL3RyYW5zbGF0aW9uLmNvbmZpZyc7XG5leHBvcnQgeyBwcm92aWRlU2VuaW9yUHJpbWVORywgU2VuaW9yUHJlc2V0LCB0eXBlIFNlbmlvclByaW1lTkdDb25maWcgfSBmcm9tICcuL2xpYi9jb25maWcvcHJpbWVuZy5jb25maWcnO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBJTlRFUkNFUFRPUlNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbmV4cG9ydCB7IGFwaUludGVyY2VwdG9yIH0gZnJvbSAnLi9saWIvaW50ZXJjZXB0b3JzL2FwaS5pbnRlcmNlcHRvcic7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIE5PVEE6IE9zIGV4cG9ydHMgYWJhaXhvIHNlcsOjbyBkZXNjb21lbnRhZG9zIGNvbmZvcm1lIG9zIGFycXVpdm9zIGZvcmVtIG1pZ3JhZG9zXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8vIENPTVBPTkVOVFMgLSBCQVNFXG4vLyBleHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2Jhc2UvZW50aXR5LWxpc3QtYmFzZS9lbnRpdHktbGlzdC1iYXNlLmNvbXBvbmVudCc7XG4vLyBleHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2Jhc2UvZW50aXR5LWZvcm0tYmFzZS9lbnRpdHktZm9ybS1iYXNlLmNvbXBvbmVudCc7XG5cbi8vIENPTVBPTkVOVFMgLSBGT1JNU1xuLy8gZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9mb3Jtcy9lbnRpdHktZm9ybS1maWVsZHMvZW50aXR5LWZvcm0tZmllbGRzLmNvbXBvbmVudCc7XG4vLyBleHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2Zvcm1zL2VudGl0eS1mb3JtLWRpYWxvZy9lbnRpdHktZm9ybS1kaWFsb2cuY29tcG9uZW50Jztcbi8vIGV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvZm9ybXMvZW50aXR5LWZvcm0tZHJhd2VyL2VudGl0eS1mb3JtLWRyYXdlci5jb21wb25lbnQnO1xuLy8gZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9mb3Jtcy9zdWItcmVzb3VyY2UtZm9ybS1kaWFsb2cvc3ViLXJlc291cmNlLWZvcm0tZGlhbG9nLmNvbXBvbmVudCc7XG5cbi8vIENPTVBPTkVOVFMgLSBMSVNUU1xuLy8gZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9saXN0cy9mb3JtLWZpbHRlci9mb3JtLWZpbHRlci5jb21wb25lbnQnO1xuLy8gZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9saXN0cy9leHBvcnQtZGlhbG9nL2V4cG9ydC1kaWFsb2cuY29tcG9uZW50Jztcbi8vIGV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvbGlzdHMvYnVsay1kZWxldGUtZGlhbG9nL2J1bGstZGVsZXRlLWRpYWxvZy5jb21wb25lbnQnO1xuXG4vLyBDT01QT05FTlRTIC0gVUlcbi8vIGV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvdWkvYnJlYWRjcnVtYi9icmVhZGNydW1iLmNvbXBvbmVudCc7XG4vLyBleHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL3VpL2VkaXQtaW5saW5lL2VkaXQtaW5saW5lLmNvbXBvbmVudCc7XG4vLyBleHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL3VpL2xvb2t1cC1maWVsZC9sb29rdXAtZmllbGQuY29tcG9uZW50Jztcbi8vIGV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvdWkva2FuYmFuLWJvYXJkL2thbmJhbi1ib2FyZC5jb21wb25lbnQnO1xuLy8gZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy91aS90aGVtZS10b2dnbGUvdGhlbWUtdG9nZ2xlLmNvbXBvbmVudCc7XG5cbi8vIFNFUlZJQ0VTXG4vLyBleHBvcnQgKiBmcm9tICcuL2xpYi9zZXJ2aWNlcy9lbnRpdHkuc2VydmljZSc7XG4vLyBleHBvcnQgKiBmcm9tICcuL2xpYi9zZXJ2aWNlcy9hdXRoLnNlcnZpY2UnO1xuLy8gZXhwb3J0ICogZnJvbSAnLi9saWIvc2VydmljZXMvdHJhbnNsYXRpb24uc2VydmljZSc7XG4vLyBleHBvcnQgKiBmcm9tICcuL2xpYi9zZXJ2aWNlcy90aGVtZS5zZXJ2aWNlJztcbi8vIGV4cG9ydCAqIGZyb20gJy4vbGliL3NlcnZpY2VzL3Blcm1pc3Npb24uc2VydmljZSc7XG4vLyBleHBvcnQgKiBmcm9tICcuL2xpYi9zZXJ2aWNlcy9jb29raWUuc2VydmljZSc7XG4vLyBleHBvcnQgKiBmcm9tICcuL2xpYi9zZXJ2aWNlcy9zZW5pb3ItdG9rZW4uc2VydmljZSc7XG4vLyBleHBvcnQgKiBmcm9tICcuL2xpYi9zZXJ2aWNlcy9tYXNrLnNlcnZpY2UnO1xuXG4vLyBESVJFQ1RJVkVTXG5leHBvcnQgeyBQb3N0YWxDb2RlTWFza0RpcmVjdGl2ZSB9IGZyb20gJy4vbGliL2RpcmVjdGl2ZXMvcG9zdGFsLWNvZGUtbWFzay5kaXJlY3RpdmUnO1xuZXhwb3J0IHsgRG9jdW1lbnRNYXNrRGlyZWN0aXZlIH0gZnJvbSAnLi9saWIvZGlyZWN0aXZlcy9kb2N1bWVudC1tYXNrLmRpcmVjdGl2ZSc7XG5leHBvcnQgeyBQaG9uZU1hc2tEaXJlY3RpdmUgfSBmcm9tICcuL2xpYi9kaXJlY3RpdmVzL3Bob25lLW1hc2suZGlyZWN0aXZlJztcbmV4cG9ydCB7IE1vbmV5TWFza0RpcmVjdGl2ZSB9IGZyb20gJy4vbGliL2RpcmVjdGl2ZXMvbW9uZXktbWFzay5kaXJlY3RpdmUnO1xuZXhwb3J0IHsgVGFibGVMb2FkaW5nRGlyZWN0aXZlIH0gZnJvbSAnLi9saWIvZGlyZWN0aXZlcy90YWJsZS1sb2FkaW5nL3RhYmxlLWxvYWRpbmcuZGlyZWN0aXZlJztcblxuLy8gUElQRVNcbmV4cG9ydCB7IFRyYW5zbGF0ZVBpcGUgfSBmcm9tICcuL2xpYi9waXBlcy90cmFuc2xhdGUucGlwZSc7XG5leHBvcnQgeyBDcGZQaXBlIH0gZnJvbSAnLi9saWIvcGlwZXMvY3BmLnBpcGUnO1xuZXhwb3J0IHsgQ25walBpcGUgfSBmcm9tICcuL2xpYi9waXBlcy9jbnBqLnBpcGUnO1xuZXhwb3J0IHsgRG9jdW1lbnRQaXBlIH0gZnJvbSAnLi9saWIvcGlwZXMvZG9jdW1lbnQucGlwZSc7XG5leHBvcnQgeyBQaG9uZVBpcGUgfSBmcm9tICcuL2xpYi9waXBlcy9waG9uZS5waXBlJztcbmV4cG9ydCB7IFBvc3RhbENvZGVQaXBlIH0gZnJvbSAnLi9saWIvcGlwZXMvcG9zdGFsLWNvZGUucGlwZSc7XG5leHBvcnQgeyBNb25leVBpcGUgfSBmcm9tICcuL2xpYi9waXBlcy9tb25leS5waXBlJztcbmV4cG9ydCB7IERhdGVGb3JtYXRQaXBlIH0gZnJvbSAnLi9saWIvcGlwZXMvZGF0ZS1mb3JtYXQucGlwZSc7XG5cbi8vIFVUSUxTXG5leHBvcnQgeyBUcmFuc2xhdGlvbkhlbHBlciB9IGZyb20gJy4vbGliL3V0aWxzL3RyYW5zbGF0aW9uLmhlbHBlcic7XG5leHBvcnQgeyBcbiAgRmllbGRUeXBlLFxuICB0eXBlIEZvcm1GaWVsZCBhcyBVdGlsc0Zvcm1GaWVsZCxcbiAgdHlwZSBPcHRpb24sXG4gIHR5cGUgRmlsdGVyVG9rZW4sXG4gIG1lcmdlVW5pcXVlLFxuICBnZXRUeXBlSW5mb3JtYXRpb24sXG4gIGlzVmFsaWRGaWx0ZXIsXG4gIGdldFByb3AsXG4gIHNldFByb3AsXG4gIGdldExhYmVsVmFsdWVSZXF1ZXN0LFxuICBnZXRTdWdnZXN0aW9uVmFsdWUsXG4gIGdldEVudW1RdWVyeSxcbiAgZXNjYXBlRmlsdGVyVmFsdWUsXG4gIGNyZWF0ZUZpbHRlclN0cmluZyxcbiAgY3JlYXRlRmlsdGVyVG9rZW5zLFxuICByZXNvbHZlUmVmcyxcbiAgZGVlcENsb25lLFxuICBkZWVwRXF1YWwsXG4gIGRlYm91bmNlLFxuICB0aHJvdHRsZVxufSBmcm9tICcuL2xpYi91dGlscy91dGlscyc7XG5cbi8vIElOVEVSQ0VQVE9SU1xuLy8gZXhwb3J0ICogZnJvbSAnLi9saWIvaW50ZXJjZXB0b3JzL2FwaS5pbnRlcmNlcHRvcic7XG5cbi8vIE1PREVMUyAtIElOVEVSRkFDRVNcbi8vIGV4cG9ydCAqIGZyb20gJy4vbGliL21vZGVscy9pbnRlcmZhY2VzL2Jhc2UtZW50aXR5LmludGVyZmFjZSc7XG4vLyBleHBvcnQgKiBmcm9tICcuL2xpYi9tb2RlbHMvaW50ZXJmYWNlcy9lbnRpdHktY29uZmlnLmludGVyZmFjZSc7XG4vLyBleHBvcnQgKiBmcm9tICcuL2xpYi9tb2RlbHMvaW50ZXJmYWNlcy9lbnRpdHktbGlzdC5jb25maWcnO1xuXG4vLyBNT0RFTFMgLSBFTlVNU1xuLy8gZXhwb3J0ICogZnJvbSAnLi9saWIvbW9kZWxzL2VudW1zL3N0YXR1cy5lbnVtJztcbi8vIGV4cG9ydCAqIGZyb20gJy4vbGliL21vZGVscy9lbnVtcy90eXBlLXBlcnNvbi5lbnVtJztcblxuLy8gVVRJTFNcbi8vIGV4cG9ydCAqIGZyb20gJy4vbGliL3V0aWxzL3V0aWxzJztcblxuLy8gSTE4TlxuLy8gZXhwb3J0ICogZnJvbSAnLi9saWIvaTE4bi90cmFuc2xhdGlvbi5jb25maWcnO1xuLy8gZXhwb3J0ICogZnJvbSAnLi9saWIvaTE4bi9sb2NhbGUuY29uZmlnJztcbi8vIGV4cG9ydCAqIGZyb20gJy4vbGliL2kxOG4vZmFsbGJhY2snO1xuIl19
|
|
@@ -4,10 +4,12 @@ import * as i2 from '@angular/common';
|
|
|
4
4
|
import { CommonModule, DOCUMENT } from '@angular/common';
|
|
5
5
|
import * as i1 from '@angular/common/http';
|
|
6
6
|
import { HttpParams } from '@angular/common/http';
|
|
7
|
-
import { throwError, BehaviorSubject, of, from, concatMap, catchError as catchError$1 } from 'rxjs';
|
|
8
|
-
import { map, catchError, filter } from 'rxjs/operators';
|
|
7
|
+
import { throwError, BehaviorSubject, of, Subject, filter, takeUntil, share, from, concatMap, catchError as catchError$1 } from 'rxjs';
|
|
8
|
+
import { map, catchError, filter as filter$1 } from 'rxjs/operators';
|
|
9
9
|
import * as i1$1 from 'primeng/config';
|
|
10
10
|
import { providePrimeNG } from 'primeng/config';
|
|
11
|
+
import { Stomp } from '@stomp/stompjs';
|
|
12
|
+
import SockJS from 'sockjs-client';
|
|
11
13
|
import * as i2$1 from '@angular/forms';
|
|
12
14
|
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
|
|
13
15
|
import * as i4 from 'primeng/dialog';
|
|
@@ -1963,6 +1965,186 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
1963
1965
|
}]
|
|
1964
1966
|
}], ctorParameters: () => [{ type: i1$1.PrimeNG }, { type: TranslationService }] });
|
|
1965
1967
|
|
|
1968
|
+
class WebSocketService {
|
|
1969
|
+
authService;
|
|
1970
|
+
cookieService;
|
|
1971
|
+
client = null;
|
|
1972
|
+
destroy$ = new Subject();
|
|
1973
|
+
messages$ = new Subject();
|
|
1974
|
+
connectionState$ = new BehaviorSubject('disconnected');
|
|
1975
|
+
stompSubscriptions = new Map();
|
|
1976
|
+
pendingSubscriptions = [];
|
|
1977
|
+
subscriptionCounter = 0;
|
|
1978
|
+
reconnectAttempts = 0;
|
|
1979
|
+
maxReconnectAttempts = 5;
|
|
1980
|
+
reconnectTimeout;
|
|
1981
|
+
constructor(authService, cookieService) {
|
|
1982
|
+
this.authService = authService;
|
|
1983
|
+
this.cookieService = cookieService;
|
|
1984
|
+
}
|
|
1985
|
+
/** Estado atual da conexão */
|
|
1986
|
+
get state$() {
|
|
1987
|
+
return this.connectionState$.asObservable();
|
|
1988
|
+
}
|
|
1989
|
+
/** Conecta ao WebSocket usando a URL base do cookie via SockJS + STOMP */
|
|
1990
|
+
connect() {
|
|
1991
|
+
if (this.client?.connected) {
|
|
1992
|
+
return;
|
|
1993
|
+
}
|
|
1994
|
+
const wsUrl = this.buildWebSocketUrl();
|
|
1995
|
+
if (!wsUrl) {
|
|
1996
|
+
console.error('[WebSocketService] Não foi possível construir a URL do WebSocket. Cookie de URL base não encontrado.');
|
|
1997
|
+
this.connectionState$.next('error');
|
|
1998
|
+
return;
|
|
1999
|
+
}
|
|
2000
|
+
this.connectionState$.next('connecting');
|
|
2001
|
+
try {
|
|
2002
|
+
this.client = Stomp.over(new SockJS(wsUrl));
|
|
2003
|
+
// Desabilita logs do STOMP no console
|
|
2004
|
+
this.client.debug = () => { };
|
|
2005
|
+
this.client.connect({}, () => this.onConnected(), (error) => this.onError(error), () => this.onDisconnected());
|
|
2006
|
+
}
|
|
2007
|
+
catch (error) {
|
|
2008
|
+
console.error('[WebSocketService] Erro ao criar conexão SockJS:', error);
|
|
2009
|
+
this.connectionState$.next('error');
|
|
2010
|
+
}
|
|
2011
|
+
}
|
|
2012
|
+
/** Desconecta do WebSocket */
|
|
2013
|
+
disconnect() {
|
|
2014
|
+
this.clearReconnect();
|
|
2015
|
+
this.reconnectAttempts = 0;
|
|
2016
|
+
// Unsubscribe de todas as subscriptions STOMP
|
|
2017
|
+
for (const [, sub] of this.stompSubscriptions.entries()) {
|
|
2018
|
+
try {
|
|
2019
|
+
sub.unsubscribe();
|
|
2020
|
+
}
|
|
2021
|
+
catch { /* ignore */ }
|
|
2022
|
+
}
|
|
2023
|
+
this.stompSubscriptions.clear();
|
|
2024
|
+
this.pendingSubscriptions = [];
|
|
2025
|
+
if (this.client?.connected) {
|
|
2026
|
+
this.client.disconnect();
|
|
2027
|
+
}
|
|
2028
|
+
this.client = null;
|
|
2029
|
+
this.connectionState$.next('disconnected');
|
|
2030
|
+
}
|
|
2031
|
+
/**
|
|
2032
|
+
* Inscreve-se em um tópico baseado na configuração.
|
|
2033
|
+
* Padrão do bind: /topic/{token}/{domain}/{service}/{primitive}
|
|
2034
|
+
*/
|
|
2035
|
+
subscribe(config) {
|
|
2036
|
+
const destination = this.buildDestination(config);
|
|
2037
|
+
const subId = `sub-${this.subscriptionCounter++}`;
|
|
2038
|
+
if (this.client?.connected) {
|
|
2039
|
+
this.doSubscribe(destination, subId);
|
|
2040
|
+
}
|
|
2041
|
+
else {
|
|
2042
|
+
this.pendingSubscriptions.push({ destination, id: subId });
|
|
2043
|
+
if (this.connectionState$.value === 'disconnected') {
|
|
2044
|
+
this.connect();
|
|
2045
|
+
}
|
|
2046
|
+
}
|
|
2047
|
+
return this.messages$.pipe(filter(msg => msg.destination === destination), takeUntil(this.destroy$), share());
|
|
2048
|
+
}
|
|
2049
|
+
/** Remove a inscrição de um tópico */
|
|
2050
|
+
unsubscribe(config) {
|
|
2051
|
+
const destination = this.buildDestination(config);
|
|
2052
|
+
const entry = [...this.stompSubscriptions.entries()].find(([key]) => key.startsWith(destination));
|
|
2053
|
+
if (entry) {
|
|
2054
|
+
const [key, sub] = entry;
|
|
2055
|
+
try {
|
|
2056
|
+
sub.unsubscribe();
|
|
2057
|
+
}
|
|
2058
|
+
catch { /* ignore */ }
|
|
2059
|
+
this.stompSubscriptions.delete(key);
|
|
2060
|
+
}
|
|
2061
|
+
}
|
|
2062
|
+
ngOnDestroy() {
|
|
2063
|
+
this.disconnect();
|
|
2064
|
+
this.destroy$.next();
|
|
2065
|
+
this.destroy$.complete();
|
|
2066
|
+
}
|
|
2067
|
+
// ── Privados ──────────────────────────────────────────────
|
|
2068
|
+
buildWebSocketUrl() {
|
|
2069
|
+
const baseUrl = this.cookieService.getCookie('com.senior.base.url');
|
|
2070
|
+
if (!baseUrl) {
|
|
2071
|
+
return null;
|
|
2072
|
+
}
|
|
2073
|
+
const cleanBaseUrl = baseUrl.replace(/\/$/, '');
|
|
2074
|
+
return `${cleanBaseUrl}/websocket/subscription`;
|
|
2075
|
+
}
|
|
2076
|
+
buildDestination(config) {
|
|
2077
|
+
const parts = ['/topic'];
|
|
2078
|
+
if (config.userScoped) {
|
|
2079
|
+
const token = this.authService.getAccessToken();
|
|
2080
|
+
if (token) {
|
|
2081
|
+
parts.push(token);
|
|
2082
|
+
}
|
|
2083
|
+
}
|
|
2084
|
+
parts.push(config.domain, config.service, config.primitive);
|
|
2085
|
+
return parts.join('/');
|
|
2086
|
+
}
|
|
2087
|
+
onConnected() {
|
|
2088
|
+
this.reconnectAttempts = 0;
|
|
2089
|
+
this.connectionState$.next('connected');
|
|
2090
|
+
this.resubscribeAll();
|
|
2091
|
+
}
|
|
2092
|
+
onError(error) {
|
|
2093
|
+
console.error('[WebSocketService] STOMP error:', error);
|
|
2094
|
+
this.connectionState$.next('error');
|
|
2095
|
+
}
|
|
2096
|
+
onDisconnected() {
|
|
2097
|
+
this.connectionState$.next('disconnected');
|
|
2098
|
+
if (this.reconnectAttempts < this.maxReconnectAttempts) {
|
|
2099
|
+
this.scheduleReconnect();
|
|
2100
|
+
}
|
|
2101
|
+
}
|
|
2102
|
+
scheduleReconnect() {
|
|
2103
|
+
this.clearReconnect();
|
|
2104
|
+
const delay = Math.min(1000 * Math.pow(2, this.reconnectAttempts), 30000);
|
|
2105
|
+
this.reconnectAttempts++;
|
|
2106
|
+
console.log(`[WebSocketService] Reconectando em ${delay}ms (tentativa ${this.reconnectAttempts}/${this.maxReconnectAttempts})`);
|
|
2107
|
+
this.reconnectTimeout = setTimeout(() => this.connect(), delay);
|
|
2108
|
+
}
|
|
2109
|
+
clearReconnect() {
|
|
2110
|
+
if (this.reconnectTimeout) {
|
|
2111
|
+
clearTimeout(this.reconnectTimeout);
|
|
2112
|
+
this.reconnectTimeout = null;
|
|
2113
|
+
}
|
|
2114
|
+
}
|
|
2115
|
+
resubscribeAll() {
|
|
2116
|
+
for (const pending of this.pendingSubscriptions) {
|
|
2117
|
+
this.doSubscribe(pending.destination, pending.id);
|
|
2118
|
+
}
|
|
2119
|
+
this.pendingSubscriptions = [];
|
|
2120
|
+
}
|
|
2121
|
+
doSubscribe(destination, id) {
|
|
2122
|
+
if (!this.client?.connected)
|
|
2123
|
+
return;
|
|
2124
|
+
const sub = this.client.subscribe(destination, (message) => {
|
|
2125
|
+
let body = message.body;
|
|
2126
|
+
try {
|
|
2127
|
+
body = JSON.parse(message.body);
|
|
2128
|
+
}
|
|
2129
|
+
catch { /* mantém como string */ }
|
|
2130
|
+
const headers = {};
|
|
2131
|
+
for (const key of Object.keys(message.headers)) {
|
|
2132
|
+
headers[key] = message.headers[key];
|
|
2133
|
+
}
|
|
2134
|
+
this.messages$.next({ destination, body, headers });
|
|
2135
|
+
});
|
|
2136
|
+
this.stompSubscriptions.set(`${destination}::${id}`, sub);
|
|
2137
|
+
}
|
|
2138
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: WebSocketService, deps: [{ token: AuthService }, { token: CookieService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
2139
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: WebSocketService, providedIn: 'root' });
|
|
2140
|
+
}
|
|
2141
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: WebSocketService, decorators: [{
|
|
2142
|
+
type: Injectable,
|
|
2143
|
+
args: [{
|
|
2144
|
+
providedIn: 'root'
|
|
2145
|
+
}]
|
|
2146
|
+
}], ctorParameters: () => [{ type: AuthService }, { type: CookieService }] });
|
|
2147
|
+
|
|
1966
2148
|
class TranslatePipe {
|
|
1967
2149
|
translationService;
|
|
1968
2150
|
cdr;
|
|
@@ -2387,7 +2569,7 @@ class BreadcrumbComponent {
|
|
|
2387
2569
|
this.buildBreadcrumbs();
|
|
2388
2570
|
// Atualiza breadcrumbs quando a navegação muda
|
|
2389
2571
|
this.router.events
|
|
2390
|
-
.pipe(filter(event => event instanceof NavigationEnd))
|
|
2572
|
+
.pipe(filter$1(event => event instanceof NavigationEnd))
|
|
2391
2573
|
.subscribe(() => this.buildBreadcrumbs());
|
|
2392
2574
|
}
|
|
2393
2575
|
updateHomeItem() {
|
|
@@ -6680,5 +6862,5 @@ const throttle = (func, limit) => {
|
|
|
6680
6862
|
* Generated bundle index. Do not edit.
|
|
6681
6863
|
*/
|
|
6682
6864
|
|
|
6683
|
-
export { AngularComponentsModule, AuthService, BreadcrumbComponent, BulkDeleteDialogComponent, CnpjPipe, CookieService, CpfPipe, DEFAULT_LANGUAGE, DateFormatPipe, DocumentMaskDirective, DocumentPipe, DynamicFieldCheckboxComponent, DynamicFieldDateComponent, DynamicFieldDropdownComponent, DynamicFieldImageComponent, DynamicFieldLookupComponent, DynamicFieldMultiselectComponent, DynamicFieldNumberComponent, DynamicFieldTextComponent, DynamicFieldTextareaComponent, DynamicFieldTimeComponent, DynamicFieldWrapperComponent, DynamicFormComponent, EntityListBaseComponent, EntityService, ExportDialogComponent, FieldType, IassistIconComponent, LoadingComponent, LocaleService, MaskService, MoneyMaskDirective, MoneyPipe, PermissionService, PhoneMaskDirective, PhonePipe, PostalCodeMaskDirective, PostalCodePipe, SUPPORTED_LANGUAGES, SeniorPreset, SeniorTokenService, TRANSLATION_CONFIG, TableLoadingDirective, ThemeService, TranslatePipe, TranslationHelper, TranslationService, apiInterceptor, createFilterString, createFilterTokens, debounce, deepClone, deepEqual, escapeFilterValue, getEnumQuery, getLabelValueRequest, getLanguageInfo, getProp, getSuggestionValue, getTypeInformation, isValidFilter, mapTokenLocaleToLanguage, mergeUnique, provideSeniorPrimeNG, resolveRefs, setProp, throttle };
|
|
6865
|
+
export { AngularComponentsModule, AuthService, BreadcrumbComponent, BulkDeleteDialogComponent, CnpjPipe, CookieService, CpfPipe, DEFAULT_LANGUAGE, DateFormatPipe, DocumentMaskDirective, DocumentPipe, DynamicFieldCheckboxComponent, DynamicFieldDateComponent, DynamicFieldDropdownComponent, DynamicFieldImageComponent, DynamicFieldLookupComponent, DynamicFieldMultiselectComponent, DynamicFieldNumberComponent, DynamicFieldTextComponent, DynamicFieldTextareaComponent, DynamicFieldTimeComponent, DynamicFieldWrapperComponent, DynamicFormComponent, EntityListBaseComponent, EntityService, ExportDialogComponent, FieldType, IassistIconComponent, LoadingComponent, LocaleService, MaskService, MoneyMaskDirective, MoneyPipe, PermissionService, PhoneMaskDirective, PhonePipe, PostalCodeMaskDirective, PostalCodePipe, SUPPORTED_LANGUAGES, SeniorPreset, SeniorTokenService, TRANSLATION_CONFIG, TableLoadingDirective, ThemeService, TranslatePipe, TranslationHelper, TranslationService, WebSocketService, apiInterceptor, createFilterString, createFilterTokens, debounce, deepClone, deepEqual, escapeFilterValue, getEnumQuery, getLabelValueRequest, getLanguageInfo, getProp, getSuggestionValue, getTypeInformation, isValidFilter, mapTokenLocaleToLanguage, mergeUnique, provideSeniorPrimeNG, resolveRefs, setProp, throttle };
|
|
6684
6866
|
//# sourceMappingURL=seniorsistemas-components-ai.mjs.map
|