@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.
@@ -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
@@ -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