uitec-ng-header 1.1.0 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. package/README.md +11 -182
  2. package/esm2020/lib/ui-header.component.mjs +20 -26
  3. package/esm2020/lib/ui-header.module.mjs +4 -10
  4. package/esm2020/public-api.mjs +1 -17
  5. package/fesm2015/uitec-ng-header.mjs +24 -1808
  6. package/fesm2015/uitec-ng-header.mjs.map +1 -1
  7. package/fesm2020/uitec-ng-header.mjs +24 -1771
  8. package/fesm2020/uitec-ng-header.mjs.map +1 -1
  9. package/lib/ui-header.component.d.ts +8 -11
  10. package/lib/ui-header.module.d.ts +1 -2
  11. package/package.json +2 -3
  12. package/public-api.d.ts +0 -15
  13. package/esm2020/lib/assistant/components/assistant-action-card/ui-assistant-action-card.component.mjs +0 -102
  14. package/esm2020/lib/assistant/components/assistant-button/ui-assistant-button.component.mjs +0 -18
  15. package/esm2020/lib/assistant/components/assistant-composer/ui-assistant-composer.component.mjs +0 -79
  16. package/esm2020/lib/assistant/components/assistant-layout/ui-assistant-layout.component.mjs +0 -140
  17. package/esm2020/lib/assistant/components/assistant-messages/ui-assistant-messages.component.mjs +0 -144
  18. package/esm2020/lib/assistant/components/assistant-panel/ui-assistant-panel.component.mjs +0 -156
  19. package/esm2020/lib/assistant/components/assistant-text/ui-assistant-text.component.mjs +0 -26
  20. package/esm2020/lib/assistant/models/uiny-api.models.mjs +0 -12
  21. package/esm2020/lib/assistant/models/uiny.models.mjs +0 -2
  22. package/esm2020/lib/assistant/services/ui-assistant.service.mjs +0 -137
  23. package/esm2020/lib/assistant/services/uiny-api.service.mjs +0 -149
  24. package/esm2020/lib/assistant/services/uiny-chat.service.mjs +0 -368
  25. package/esm2020/lib/assistant/services/uiny-session.service.mjs +0 -74
  26. package/esm2020/lib/assistant/ui-assistant.module.mjs +0 -59
  27. package/esm2020/lib/assistant/uiny.config.mjs +0 -53
  28. package/esm2020/lib/assistant/utils/uiny-api.adapter.mjs +0 -154
  29. package/esm2020/lib/assistant/utils/uiny-contexto.mjs +0 -43
  30. package/esm2020/lib/assistant/utils/uiny-markdown.mjs +0 -122
  31. package/lib/assistant/components/assistant-action-card/ui-assistant-action-card.component.d.ts +0 -33
  32. package/lib/assistant/components/assistant-button/ui-assistant-button.component.d.ts +0 -9
  33. package/lib/assistant/components/assistant-composer/ui-assistant-composer.component.d.ts +0 -24
  34. package/lib/assistant/components/assistant-layout/ui-assistant-layout.component.d.ts +0 -51
  35. package/lib/assistant/components/assistant-messages/ui-assistant-messages.component.d.ts +0 -38
  36. package/lib/assistant/components/assistant-panel/ui-assistant-panel.component.d.ts +0 -53
  37. package/lib/assistant/components/assistant-text/ui-assistant-text.component.d.ts +0 -14
  38. package/lib/assistant/models/uiny-api.models.d.ts +0 -109
  39. package/lib/assistant/models/uiny.models.d.ts +0 -104
  40. package/lib/assistant/services/ui-assistant.service.d.ts +0 -55
  41. package/lib/assistant/services/uiny-api.service.d.ts +0 -38
  42. package/lib/assistant/services/uiny-chat.service.d.ts +0 -82
  43. package/lib/assistant/services/uiny-session.service.d.ts +0 -38
  44. package/lib/assistant/ui-assistant.module.d.ts +0 -19
  45. package/lib/assistant/uiny.config.d.ts +0 -31
  46. package/lib/assistant/utils/uiny-api.adapter.d.ts +0 -22
  47. package/lib/assistant/utils/uiny-contexto.d.ts +0 -7
  48. package/lib/assistant/utils/uiny-markdown.d.ts +0 -37
@@ -1,137 +0,0 @@
1
- import { Inject, Injectable, isDevMode, Optional } from '@angular/core';
2
- import { BehaviorSubject, combineLatest, Subject } from 'rxjs';
3
- import { distinctUntilChanged, map, shareReplay } from 'rxjs/operators';
4
- import { UINY_CONFIG } from '../uiny.config';
5
- import { normalizarContexto, mesmoContexto } from '../utils/uiny-contexto';
6
- import { UinyApiService } from './uiny-api.service';
7
- import { UinySessionService } from './uiny-session.service';
8
- import * as i0 from "@angular/core";
9
- import * as i1 from "./uiny-session.service";
10
- import * as i2 from "./uiny-api.service";
11
- /**
12
- * Estado compartilhado da Uiny: quem habilitou (o header), quem hospeda o painel
13
- * (o ui-assistant-layout), se está aberto, o contexto da tela e os eventos de saída.
14
- *
15
- * O painel só fica disponível quando TODAS as condições valem:
16
- * - algum ui-header está com [showAssistant]="true";
17
- * - existe um ui-assistant-layout na página para receber o painel;
18
- * - há sessão autenticada no AuthService (e a API não a recusou);
19
- * - a URL da API está configurada.
20
- */
21
- export class UiAssistantService {
22
- constructor(session, api, config) {
23
- this.session = session;
24
- this.api = api;
25
- this.config = config;
26
- this.habilitadores$ = new BehaviorSubject(new Set());
27
- this.hosts$ = new BehaviorSubject(0);
28
- this.abertoInterno$ = new BehaviorSubject(false);
29
- this.contextoInterno$ = new BehaviorSubject({});
30
- this.eventosInternos$ = new Subject();
31
- this.gatilho = null;
32
- this.avisouSemHost = false;
33
- this.contexto$ = this.contextoInterno$.pipe(distinctUntilChanged(mesmoContexto));
34
- /** Ações concluídas e instruções de interface vindas da API, já validadas. */
35
- this.eventos$ = this.eventosInternos$.asObservable();
36
- this.disponivel$ = combineLatest([this.habilitadores$, this.hosts$, this.session.sessao$]).pipe(map(([habilitadores, hosts, sessao]) => habilitadores.size > 0 && hosts > 0 && !!sessao && this.api.configurada && !!this.config), distinctUntilChanged(), shareReplay({ bufferSize: 1, refCount: false }));
37
- this.aberto$ = combineLatest([this.abertoInterno$, this.disponivel$]).pipe(map(([aberto, disponivel]) => aberto && disponivel), distinctUntilChanged(), shareReplay({ bufferSize: 1, refCount: false }));
38
- // Indisponível (logout, sessão recusada, header sem a flag): fecha sem devolver foco.
39
- this.disponivel$.subscribe(disponivel => {
40
- if (!disponivel && this.abertoInterno$.value) {
41
- this.gatilho = null;
42
- this.abertoInterno$.next(false);
43
- }
44
- });
45
- combineLatest([this.habilitadores$, this.hosts$]).subscribe(([habilitadores, hosts]) => this.diagnosticar(habilitadores.size > 0, hosts));
46
- }
47
- get aberto() {
48
- return this.abertoInterno$.value;
49
- }
50
- get sistemaOrigem() {
51
- return this.config?.sistemaOrigem ?? null;
52
- }
53
- abrir(gatilho) {
54
- if (gatilho)
55
- this.gatilho = gatilho;
56
- this.abertoInterno$.next(true);
57
- }
58
- /** Fecha o painel e devolve o foco ao botão que o abriu, se ele ainda existir. */
59
- fechar(devolverFoco = true) {
60
- if (!this.abertoInterno$.value)
61
- return;
62
- this.abertoInterno$.next(false);
63
- const gatilho = this.gatilho;
64
- this.gatilho = null;
65
- if (devolverFoco && gatilho) {
66
- // espera o layout reexibir a aplicação (no celular ela fica recolhida)
67
- setTimeout(() => gatilho.isConnected && gatilho.focus());
68
- }
69
- }
70
- alternar(gatilho) {
71
- this.abertoInterno$.value ? this.fechar() : this.abrir(gatilho);
72
- }
73
- /** Substitui o contexto da tela atual. Campos fora do tipo UinyContexto são ignorados. */
74
- definirContexto(contexto) {
75
- this.contextoInterno$.next(normalizarContexto(contexto));
76
- }
77
- /** Altera apenas os campos informados do contexto. */
78
- atualizarContexto(parcial) {
79
- this.contextoInterno$.next(normalizarContexto({ ...this.contextoInterno$.value, ...parcial }));
80
- }
81
- get contexto() {
82
- return this.contextoInterno$.value;
83
- }
84
- /** @internal usado pelo ui-header */
85
- definirHabilitado(origem, habilitado) {
86
- const atual = new Set(this.habilitadores$.value);
87
- habilitado ? atual.add(origem) : atual.delete(origem);
88
- if (atual.size !== this.habilitadores$.value.size)
89
- this.habilitadores$.next(atual);
90
- }
91
- /** @internal usado pelo ui-assistant-layout */
92
- registrarHost() {
93
- this.hosts$.next(this.hosts$.value + 1);
94
- let removido = false;
95
- return () => {
96
- if (removido)
97
- return;
98
- removido = true;
99
- this.hosts$.next(Math.max(0, this.hosts$.value - 1));
100
- };
101
- }
102
- /** @internal usado pelo serviço de conversa */
103
- emitir(evento) {
104
- this.eventosInternos$.next(evento);
105
- }
106
- diagnosticar(habilitado, hosts) {
107
- if (!isDevMode() || !habilitado)
108
- return;
109
- if (!this.config) {
110
- console.error('[Uiny] showAssistant está ativo, mas UiAssistantModule.forRoot({ sistemaOrigem }) não foi importado.');
111
- }
112
- else if (!this.api.configurada) {
113
- console.error('[Uiny] URL da API não configurada. Informe APP_ENVIRONMENT.domain.uiny ou forRoot({ apiUrl }).');
114
- }
115
- else if (hosts === 0 && !this.avisouSemHost) {
116
- // o layout pode ser criado logo depois do header; avisa só se continuar faltando
117
- this.avisouSemHost = true;
118
- setTimeout(() => {
119
- if (this.hosts$.value === 0) {
120
- console.warn('[Uiny] showAssistant está ativo, mas nenhum <ui-assistant-layout> envolve a aplicação. O botão fica oculto.');
121
- }
122
- }, 2000);
123
- }
124
- }
125
- }
126
- UiAssistantService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: UiAssistantService, deps: [{ token: i1.UinySessionService }, { token: i2.UinyApiService }, { token: UINY_CONFIG, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
127
- UiAssistantService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: UiAssistantService, providedIn: 'root' });
128
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: UiAssistantService, decorators: [{
129
- type: Injectable,
130
- args: [{ providedIn: 'root' }]
131
- }], ctorParameters: function () { return [{ type: i1.UinySessionService }, { type: i2.UinyApiService }, { type: undefined, decorators: [{
132
- type: Optional
133
- }, {
134
- type: Inject,
135
- args: [UINY_CONFIG]
136
- }] }]; } });
137
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWktYXNzaXN0YW50LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS1oZWFkZXIvc3JjL2xpYi9hc3Npc3RhbnQvc2VydmljZXMvdWktYXNzaXN0YW50LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN4RSxPQUFPLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBYyxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDM0UsT0FBTyxFQUFFLG9CQUFvQixFQUFFLEdBQUcsRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4RSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGtCQUFrQixFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzNFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNwRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQzs7OztBQUU1RDs7Ozs7Ozs7O0dBU0c7QUFFSCxNQUFNLE9BQU8sa0JBQWtCO0lBa0IzQixZQUNZLE9BQTJCLEVBQzNCLEdBQW1CLEVBQ2MsTUFBeUI7UUFGMUQsWUFBTyxHQUFQLE9BQU8sQ0FBb0I7UUFDM0IsUUFBRyxHQUFILEdBQUcsQ0FBZ0I7UUFDYyxXQUFNLEdBQU4sTUFBTSxDQUFtQjtRQW5CckQsbUJBQWMsR0FBRyxJQUFJLGVBQWUsQ0FBc0IsSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQ3JFLFdBQU0sR0FBRyxJQUFJLGVBQWUsQ0FBUyxDQUFDLENBQUMsQ0FBQztRQUN4QyxtQkFBYyxHQUFHLElBQUksZUFBZSxDQUFVLEtBQUssQ0FBQyxDQUFDO1FBQ3JELHFCQUFnQixH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bkg7YUFBTSxJQUFJLEtBQUssS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFO1lBQzNDLGlGQUFpRjtZQUNqRixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztZQUMxQixVQUFVLENBQUMsR0FBRyxFQUFFO2dCQUNaLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEtBQUssQ0FBQyxFQUFFO29CQUN6QixPQUFPLENBQUMsSUFBSSxDQUFDLDZHQUE2RyxDQUFDLENBQUM7aUJBQy9IO1lBQ0wsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1NBQ1o7SUFDTCxDQUFDOztnSEEvSFEsa0JBQWtCLGtGQXFCSCxXQUFXO29IQXJCMUIsa0JBQWtCLGNBREwsTUFBTTs0RkFDbkIsa0JBQWtCO2tCQUQ5QixVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRTs7MEJBc0J6QixRQUFROzswQkFBSSxNQUFNOzJCQUFDLFdBQVciLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUsIGlzRGV2TW9kZSwgT3B0aW9uYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgY29tYmluZUxhdGVzdCwgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGlzdGluY3RVbnRpbENoYW5nZWQsIG1hcCwgc2hhcmVSZXBsYXkgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBVaW55Q29uZmlnLCBVaW55Q29udGV4dG8sIFVpbnlFdmVudG8gfSBmcm9tICcuLi9tb2RlbHMvdWlueS5tb2RlbHMnO1xuaW1wb3J0IHsgVUlOWV9DT05GSUcgfSBmcm9tICcuLi91aW55LmNvbmZpZyc7XG5pbXBvcnQgeyBub3JtYWxpemFyQ29udGV4dG8sIG1lc21vQ29udGV4dG8gfSBmcm9tICcuLi91dGlscy91aW55LWNvbnRleHRvJztcbmltcG9ydCB7IFVpbnlBcGlTZXJ2aWNlIH0gZnJvbSAnLi91aW55LWFwaS5zZXJ2aWNlJztcbmltcG9ydCB7IFVpbnlTZXNzaW9uU2VydmljZSB9IGZyb20gJy4vdWlueS1zZXNzaW9uLnNlcnZpY2UnO1xuXG4vKipcbiAqIEVzdGFkbyBjb21wYXJ0aWxoYWRvIGRhIFVpbnk6IHF1ZW0gaGFiaWxpdG91IChvIGhlYWRlciksIHF1ZW0gaG9zcGVkYSBvIHBhaW5lbFxuICogKG8gdWktYXNzaXN0YW50LWxheW91dCksIHNlIGVzdMOhIGFiZXJ0bywgbyBjb250ZXh0byBkYSB0ZWxhIGUgb3MgZXZlbnRvcyBkZSBzYcOtZGEuXG4gKlxuICogTyBwYWluZWwgc8OzIGZpY2EgZGlzcG9uw612ZWwgcXVhbmRvIFRPREFTIGFzIGNvbmRpw6fDtWVzIHZhbGVtOlxuICogIC0gYWxndW0gdWktaGVhZGVyIGVzdMOhIGNvbSBbc2hvd0Fzc2lzdGFudF09XCJ0cnVlXCI7XG4gKiAgLSBleGlzdGUgdW0gdWktYXNzaXN0YW50LWxheW91dCBuYSBww6FnaW5hIHBhcmEgcmVjZWJlciBvIHBhaW5lbDtcbiAqICAtIGjDoSBzZXNzw6NvIGF1dGVudGljYWRhIG5vIEF1dGhTZXJ2aWNlIChlIGEgQVBJIG7Do28gYSByZWN1c291KTtcbiAqICAtIGEgVVJMIGRhIEFQSSBlc3TDoSBjb25maWd1cmFkYS5cbiAqL1xuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBVaUFzc2lzdGFudFNlcnZpY2Uge1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBoYWJpbGl0YWRvcmVzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8UmVhZG9ubHlTZXQ8b2JqZWN0Pj4obmV3IFNldCgpKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGhvc3RzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPigwKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGFiZXJ0b0ludGVybm8kID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBjb250ZXh0b0ludGVybm8kID0gbmV3IEJlaGF2aW9yU3ViamVjdDxVaW55Q29udGV4dG8+KHt9KTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGV2ZW50b3NJbnRlcm5vcyQgPSBuZXcgU3ViamVjdDxVaW55RXZlbnRvPigpO1xuICAgIHByaXZhdGUgZ2F0aWxobzogSFRNTEVsZW1lbnQgfCBudWxsID0gbnVsbDtcbiAgICBwcml2YXRlIGF2aXNvdVNlbUhvc3QgPSBmYWxzZTtcblxuICAgIC8qKiBIZWFkZXIgaGFiaWxpdG91IGUgaMOhIHVzdcOhcmlvIGF1dGVudGljYWRvIChjb250cm9sYSBvIGJvdMOjbykuICovXG4gICAgcmVhZG9ubHkgZGlzcG9uaXZlbCQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gICAgLyoqIFBhaW5lbCBhYmVydG8gKHNlbXByZSBmYWxzZSBxdWFuZG8gaW5kaXNwb27DrXZlbCkuICovXG4gICAgcmVhZG9ubHkgYWJlcnRvJDogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgICByZWFkb25seSBjb250ZXh0byQ6IE9ic2VydmFibGU8VWlueUNvbnRleHRvPiA9IHRoaXMuY29udGV4dG9JbnRlcm5vJC5waXBlKGRpc3RpbmN0VW50aWxDaGFuZ2VkKG1lc21vQ29udGV4dG8pKTtcbiAgICAvKiogQcOnw7VlcyBjb25jbHXDrWRhcyBlIGluc3RydcOnw7VlcyBkZSBpbnRlcmZhY2UgdmluZGFzIGRhIEFQSSwgasOhIHZhbGlkYWRhcy4gKi9cbiAgICByZWFkb25seSBldmVudG9zJDogT2JzZXJ2YWJsZTxVaW55RXZlbnRvPiA9IHRoaXMuZXZlbnRvc0ludGVybm9zJC5hc09ic2VydmFibGUoKTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIHNlc3Npb246IFVpbnlTZXNzaW9uU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBhcGk6IFVpbnlBcGlTZXJ2aWNlLFxuICAgICAgICBAT3B0aW9uYWwoKSBASW5qZWN0KFVJTllfQ09ORklHKSBwcml2YXRlIGNvbmZpZzogVWlueUNvbmZpZyB8IG51bGxcbiAgICApIHtcbiAgICAgICAgdGhpcy5kaXNwb25pdmVsJCA9IGNvbWJpbmVMYXRlc3QoW3RoaXMuaGFiaWxpdGFkb3JlcyQsIHRoaXMuaG9zdHMkLCB0aGlzLnNlc3Npb24uc2Vzc2FvJF0pLnBpcGUoXG4gICAgICAgICAgICBtYXAoKFtoYWJpbGl0YWRvcmVzLCBob3N0cywgc2Vzc2FvXSkgPT4gaGFiaWxpdGFkb3Jlcy5zaXplID4gMCAmJiBob3N0cyA+IDAgJiYgISFzZXNzYW8gJiYgdGhpcy5hcGkuY29uZmlndXJhZGEgJiYgISF0aGlzLmNvbmZpZyksXG4gICAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgICAgICAgc2hhcmVSZXBsYXkoeyBidWZmZXJTaXplOiAxLCByZWZDb3VudDogZmFsc2UgfSlcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLmFiZXJ0byQgPSBjb21iaW5lTGF0ZXN0KFt0aGlzLmFiZXJ0b0ludGVybm8kLCB0aGlzLmRpc3Bvbml2ZWwkXSkucGlwZShcbiAgICAgICAgICAgIG1hcCgoW2FiZXJ0bywgZGlzcG9uaXZlbF0pID0+IGFiZXJ0byAmJiBkaXNwb25pdmVsKSxcbiAgICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICAgICAgICBzaGFyZVJlcGxheSh7IGJ1ZmZlclNpemU6IDEsIHJlZkNvdW50OiBmYWxzZSB9KVxuICAgICAgICApO1xuXG4gICAgICAgIC8vIEluZGlzcG9uw612ZWwgKGxvZ291dCwgc2Vzc8OjbyByZWN1c2FkYSwgaGVhZGVyIHNlbSBhIGZsYWcpOiBmZWNoYSBzZW0gZGV2b2x2ZXIgZm9jby5cbiAgICAgICAgdGhpcy5kaXNwb25pdmVsJC5zdWJzY3JpYmUoZGlzcG9uaXZlbCA9PiB7XG4gICAgICAgICAgICBpZiAoIWRpc3Bvbml2ZWwgJiYgdGhpcy5hYmVydG9JbnRlcm5vJC52YWx1ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZ2F0aWxobyA9IG51bGw7XG4gICAgICAgICAgICAgICAgdGhpcy5hYmVydG9JbnRlcm5vJC5uZXh0KGZhbHNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29tYmluZUxhdGVzdChbdGhpcy5oYWJpbGl0YWRvcmVzJCwgdGhpcy5ob3N0cyRdKS5zdWJzY3JpYmUoKFtoYWJpbGl0YWRvcmVzLCBob3N0c10pID0+IHRoaXMuZGlhZ25vc3RpY2FyKGhhYmlsaXRhZG9yZXMuc2l6ZSA+IDAsIGhvc3RzKSk7XG4gICAgfVxuXG4gICAgZ2V0IGFiZXJ0bygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWJlcnRvSW50ZXJubyQudmFsdWU7XG4gICAgfVxuXG4gICAgZ2V0IHNpc3RlbWFPcmlnZW0oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbmZpZz8uc2lzdGVtYU9yaWdlbSA/PyBudWxsO1xuICAgIH1cblxuICAgIGFicmlyKGdhdGlsaG8/OiBIVE1MRWxlbWVudCB8IG51bGwpOiB2b2lkIHtcbiAgICAgICAgaWYgKGdhdGlsaG8pIHRoaXMuZ2F0aWxobyA9IGdhdGlsaG87XG4gICAgICAgIHRoaXMuYWJlcnRvSW50ZXJubyQubmV4dCh0cnVlKTtcbiAgICB9XG5cbiAgICAvKiogRmVjaGEgbyBwYWluZWwgZSBkZXZvbHZlIG8gZm9jbyBhbyBib3TDo28gcXVlIG8gYWJyaXUsIHNlIGVsZSBhaW5kYSBleGlzdGlyLiAqL1xuICAgIGZlY2hhcihkZXZvbHZlckZvY28gPSB0cnVlKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5hYmVydG9JbnRlcm5vJC52YWx1ZSkgcmV0dXJuO1xuICAgICAgICB0aGlzLmFiZXJ0b0ludGVybm8kLm5leHQoZmFsc2UpO1xuICAgICAgICBjb25zdCBnYXRpbGhvID0gdGhpcy5nYXRpbGhvO1xuICAgICAgICB0aGlzLmdhdGlsaG8gPSBudWxsO1xuICAgICAgICBpZiAoZGV2b2x2ZXJGb2NvICYmIGdhdGlsaG8pIHtcbiAgICAgICAgICAgIC8vIGVzcGVyYSBvIGxheW91dCByZWV4aWJpciBhIGFwbGljYcOnw6NvIChubyBjZWx1bGFyIGVsYSBmaWNhIHJlY29saGlkYSlcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gZ2F0aWxoby5pc0Nvbm5lY3RlZCAmJiBnYXRpbGhvLmZvY3VzKCkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYWx0ZXJuYXIoZ2F0aWxobz86IEhUTUxFbGVtZW50IHwgbnVsbCk6IHZvaWQge1xuICAgICAgICB0aGlzLmFiZXJ0b0ludGVybm8kLnZhbHVlID8gdGhpcy5mZWNoYXIoKSA6IHRoaXMuYWJyaXIoZ2F0aWxobyk7XG4gICAgfVxuXG4gICAgLyoqIFN1YnN0aXR1aSBvIGNvbnRleHRvIGRhIHRlbGEgYXR1YWwuIENhbXBvcyBmb3JhIGRvIHRpcG8gVWlueUNvbnRleHRvIHPDo28gaWdub3JhZG9zLiAqL1xuICAgIGRlZmluaXJDb250ZXh0byhjb250ZXh0bzogVWlueUNvbnRleHRvIHwgbnVsbCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNvbnRleHRvSW50ZXJubyQubmV4dChub3JtYWxpemFyQ29udGV4dG8oY29udGV4dG8pKTtcbiAgICB9XG5cbiAgICAvKiogQWx0ZXJhIGFwZW5hcyBvcyBjYW1wb3MgaW5mb3JtYWRvcyBkbyBjb250ZXh0by4gKi9cbiAgICBhdHVhbGl6YXJDb250ZXh0byhwYXJjaWFsOiBQYXJ0aWFsPFVpbnlDb250ZXh0bz4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jb250ZXh0b0ludGVybm8kLm5leHQobm9ybWFsaXphckNvbnRleHRvKHsgLi4udGhpcy5jb250ZXh0b0ludGVybm8kLnZhbHVlLCAuLi5wYXJjaWFsIH0pKTtcbiAgICB9XG5cbiAgICBnZXQgY29udGV4dG8oKTogVWlueUNvbnRleHRvIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29udGV4dG9JbnRlcm5vJC52YWx1ZTtcbiAgICB9XG5cbiAgICAvKiogQGludGVybmFsIHVzYWRvIHBlbG8gdWktaGVhZGVyICovXG4gICAgZGVmaW5pckhhYmlsaXRhZG8ob3JpZ2VtOiBvYmplY3QsIGhhYmlsaXRhZG86IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgYXR1YWwgPSBuZXcgU2V0KHRoaXMuaGFiaWxpdGFkb3JlcyQudmFsdWUpO1xuICAgICAgICBoYWJpbGl0YWRvID8gYXR1YWwuYWRkKG9yaWdlbSkgOiBhdHVhbC5kZWxldGUob3JpZ2VtKTtcbiAgICAgICAgaWYgKGF0dWFsLnNpemUgIT09IHRoaXMuaGFiaWxpdGFkb3JlcyQudmFsdWUuc2l6ZSkgdGhpcy5oYWJpbGl0YWRvcmVzJC5uZXh0KGF0dWFsKTtcbiAgICB9XG5cbiAgICAvKiogQGludGVybmFsIHVzYWRvIHBlbG8gdWktYXNzaXN0YW50LWxheW91dCAqL1xuICAgIHJlZ2lzdHJhckhvc3QoKTogKCkgPT4gdm9pZCB7XG4gICAgICAgIHRoaXMuaG9zdHMkLm5leHQodGhpcy5ob3N0cyQudmFsdWUgKyAxKTtcbiAgICAgICAgbGV0IHJlbW92aWRvID0gZmFsc2U7XG4gICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICBpZiAocmVtb3ZpZG8pIHJldHVybjtcbiAgICAgICAgICAgIHJlbW92aWRvID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuaG9zdHMkLm5leHQoTWF0aC5tYXgoMCwgdGhpcy5ob3N0cyQudmFsdWUgLSAxKSk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqIEBpbnRlcm5hbCB1c2FkbyBwZWxvIHNlcnZpw6dvIGRlIGNvbnZlcnNhICovXG4gICAgZW1pdGlyKGV2ZW50bzogVWlueUV2ZW50byk6IHZvaWQge1xuICAgICAgICB0aGlzLmV2ZW50b3NJbnRlcm5vcyQubmV4dChldmVudG8pO1xuICAgIH1cblxuICAgIHByaXZhdGUgZGlhZ25vc3RpY2FyKGhhYmlsaXRhZG86IGJvb2xlYW4sIGhvc3RzOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgaWYgKCFpc0Rldk1vZGUoKSB8fCAhaGFiaWxpdGFkbykgcmV0dXJuO1xuICAgICAgICBpZiAoIXRoaXMuY29uZmlnKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdbVWlueV0gc2hvd0Fzc2lzdGFudCBlc3TDoSBhdGl2bywgbWFzIFVpQXNzaXN0YW50TW9kdWxlLmZvclJvb3QoeyBzaXN0ZW1hT3JpZ2VtIH0pIG7Do28gZm9pIGltcG9ydGFkby4nKTtcbiAgICAgICAgfSBlbHNlIGlmICghdGhpcy5hcGkuY29uZmlndXJhZGEpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1tVaW55XSBVUkwgZGEgQVBJIG7Do28gY29uZmlndXJhZGEuIEluZm9ybWUgQVBQX0VOVklST05NRU5ULmRvbWFpbi51aW55IG91IGZvclJvb3QoeyBhcGlVcmwgfSkuJyk7XG4gICAgICAgIH0gZWxzZSBpZiAoaG9zdHMgPT09IDAgJiYgIXRoaXMuYXZpc291U2VtSG9zdCkge1xuICAgICAgICAgICAgLy8gbyBsYXlvdXQgcG9kZSBzZXIgY3JpYWRvIGxvZ28gZGVwb2lzIGRvIGhlYWRlcjsgYXZpc2Egc8OzIHNlIGNvbnRpbnVhciBmYWx0YW5kb1xuICAgICAgICAgICAgdGhpcy5hdmlzb3VTZW1Ib3N0ID0gdHJ1ZTtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmhvc3RzJC52YWx1ZSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ1tVaW55XSBzaG93QXNzaXN0YW50IGVzdMOhIGF0aXZvLCBtYXMgbmVuaHVtIDx1aS1hc3Npc3RhbnQtbGF5b3V0PiBlbnZvbHZlIGEgYXBsaWNhw6fDo28uIE8gYm90w6NvIGZpY2Egb2N1bHRvLicpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIDIwMDApO1xuICAgICAgICB9XG4gICAgfVxufVxuIl19
@@ -1,149 +0,0 @@
1
- import { HttpBackend, HttpClient, HttpErrorResponse, HttpHeaders, HttpParams } from '@angular/common/http';
2
- import { Inject, Injectable, Optional } from '@angular/core';
3
- import { defer, throwError, TimeoutError } from 'rxjs';
4
- import { catchError, timeout } from 'rxjs/operators';
5
- import { resolverUrlUiny, UINY_CONFIG, UINY_TIMEOUT_ACAO_MS, UINY_TIMEOUT_CONSULTA_MS, UINY_TIMEOUT_MENSAGEM_MS } from '../uiny.config';
6
- import { idValido } from '../utils/uiny-api.adapter';
7
- import { UinySessionService } from './uiny-session.service';
8
- import * as i0 from "@angular/core";
9
- import * as i1 from "@angular/common/http";
10
- import * as i2 from "./uiny-session.service";
11
- const MENSAGENS_PADRAO = {
12
- sessao: 'Sua sessão expirou. Entre novamente na Uishop para continuar com a Uiny.',
13
- rede: 'Não foi possível conectar à Uiny. Verifique sua internet e tente de novo.',
14
- timeout: 'A Uiny demorou demais para responder. Tente de novo em instantes.',
15
- conflito: 'Não foi possível concluir agora. Atualize e tente de novo.',
16
- nao_encontrado: 'Não encontramos o que você pediu. Ele pode ter sido removido.',
17
- invalido: 'Não foi possível processar esse pedido.',
18
- limite: 'Você enviou muitas mensagens em pouco tempo. Aguarde um pouco e tente de novo.',
19
- servidor: 'A Uiny está com instabilidade no momento. Tente de novo em instantes.',
20
- configuracao: 'A Uiny não está configurada neste sistema.',
21
- };
22
- /**
23
- * Cliente HTTP da API da Uiny (uishop-ia, /api/v1).
24
- *
25
- * Usa um HttpClient sobre o HttpBackend, sem os interceptors da aplicação:
26
- * - o ErrorInterceptor do uitec-ng-core troca o erro por uma string (perde status e o corpo,
27
- * necessários para sessão expirada, ação expirada/invalidada e conflitos) e abre um toast global;
28
- * - o SpinnerInterceptor cobriria a tela a cada mensagem.
29
- * O token é o mesmo usado pelo JwtInterceptor (AuthService.currentUserValue.token) e só é
30
- * anexado a requisições cuja URL começa com a URL-base configurada da Uiny.
31
- */
32
- export class UinyApiService {
33
- constructor(httpBackend, session, config, env) {
34
- this.session = session;
35
- this.http = new HttpClient(httpBackend);
36
- this.baseUrl = resolverUrlUiny(config, env);
37
- }
38
- get configurada() {
39
- return !!this.baseUrl;
40
- }
41
- listarConversas() {
42
- return defer(() => this.request('GET', '/conversas', null, UINY_TIMEOUT_CONSULTA_MS, new HttpParams().set('page', 1).set('per_page', 20)));
43
- }
44
- criarConversa(contexto) {
45
- return defer(() => this.request('POST', '/conversas', { contexto }, UINY_TIMEOUT_CONSULTA_MS));
46
- }
47
- /** Página mais recente do histórico (até 100 mensagens), em ordem cronológica. */
48
- historico(idConversa) {
49
- return defer(() => this.request('GET', `/conversas/${this.id(idConversa)}`, null, UINY_TIMEOUT_CONSULTA_MS, new HttpParams().set('page', 1).set('per_page', 100)));
50
- }
51
- enviarMensagem(idConversa, texto, contexto) {
52
- return defer(() => this.request('POST', `/conversas/${this.id(idConversa)}/mensagens`, { texto, contexto }, UINY_TIMEOUT_MENSAGEM_MS));
53
- }
54
- /** Confirma pelo id da ação persistida. Nenhum argumento é enviado. Nunca é repetida automaticamente. */
55
- confirmarAcao(idAcao) {
56
- return defer(() => this.request('POST', `/acoes/${this.id(idAcao)}/confirmar`, {}, UINY_TIMEOUT_ACAO_MS));
57
- }
58
- cancelarAcao(idAcao) {
59
- return defer(() => this.request('POST', `/acoes/${this.id(idAcao)}/cancelar`, {}, UINY_TIMEOUT_CONSULTA_MS));
60
- }
61
- id(valor) {
62
- const id = idValido(valor);
63
- if (!id)
64
- throw this.erro('invalido', 0);
65
- return id;
66
- }
67
- request(method, path, body, timeoutMs, params) {
68
- if (!this.baseUrl) {
69
- return throwError(() => this.erro('configuracao', 0));
70
- }
71
- const url = this.baseUrl + path;
72
- const token = this.session.token();
73
- if (!token) {
74
- return throwError(() => this.erro('sessao', 401));
75
- }
76
- let headers = new HttpHeaders({ 'Accept': 'application/json' });
77
- // Garantia explícita: o token só segue para a URL-base da Uiny.
78
- if (url.startsWith(this.baseUrl + '/')) {
79
- headers = headers.set('Authorization', `Bearer ${token}`);
80
- }
81
- if (method === 'POST') {
82
- headers = headers.set('Content-Type', 'application/json');
83
- }
84
- return this.http.request(method, url, { body: body ?? undefined, headers, params, responseType: 'json' }).pipe(timeout(timeoutMs), catchError(err => throwError(() => this.normalizarErro(err))));
85
- }
86
- normalizarErro(err) {
87
- if (err instanceof TimeoutError) {
88
- return this.erro('timeout', 0);
89
- }
90
- if (!(err instanceof HttpErrorResponse)) {
91
- return this.erro('servidor', 0);
92
- }
93
- const corpo = err.error && typeof err.error === 'object' ? err.error : null;
94
- const correlacao = this.textoSeguro(corpo?.id_correlacao, 64) || this.textoSeguro(err.headers?.get('X-Correlation-Id'), 64);
95
- const codigo = this.textoSeguro(corpo?.erro?.codigo, 60);
96
- const mensagemApi = this.textoSeguro(corpo?.erro?.mensagem, 300);
97
- let tipo;
98
- if (err.status === 0)
99
- tipo = 'rede';
100
- else if (err.status === 401)
101
- tipo = 'sessao';
102
- else if (err.status === 404)
103
- tipo = 'nao_encontrado';
104
- else if (err.status === 409)
105
- tipo = 'conflito';
106
- else if (err.status === 429)
107
- tipo = 'limite';
108
- else if (err.status === 400 || err.status === 403 || err.status === 422)
109
- tipo = 'invalido';
110
- else
111
- tipo = 'servidor';
112
- if (tipo === 'sessao') {
113
- this.session.recusarSessaoAtual();
114
- }
115
- // 502/503/504 trazem mensagens próprias e seguras (INTEGRACAO_*, PROVEDOR_IA_INDISPONIVEL).
116
- // 500 (INTERNO) e falhas de rede usam sempre o texto padrão.
117
- const usarMensagemApi = tipo !== 'rede' && tipo !== 'sessao' && err.status !== 500;
118
- const mensagem = (usarMensagemApi && mensagemApi) || MENSAGENS_PADRAO[tipo];
119
- return { tipo, status: err.status, codigo, mensagem, correlacao, corpo };
120
- }
121
- erro(tipo, status) {
122
- return { tipo, status, codigo: null, mensagem: MENSAGENS_PADRAO[tipo], correlacao: null };
123
- }
124
- textoSeguro(valor, max) {
125
- if (typeof valor !== 'string')
126
- return null;
127
- const texto = valor.trim();
128
- if (!texto || /bearer\s/i.test(texto))
129
- return null;
130
- return texto.length > max ? texto.slice(0, max) + '…' : texto;
131
- }
132
- }
133
- UinyApiService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: UinyApiService, deps: [{ token: i1.HttpBackend }, { token: i2.UinySessionService }, { token: UINY_CONFIG, optional: true }, { token: 'APP_ENVIRONMENT', optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
134
- UinyApiService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: UinyApiService, providedIn: 'root' });
135
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: UinyApiService, decorators: [{
136
- type: Injectable,
137
- args: [{ providedIn: 'root' }]
138
- }], ctorParameters: function () { return [{ type: i1.HttpBackend }, { type: i2.UinySessionService }, { type: undefined, decorators: [{
139
- type: Optional
140
- }, {
141
- type: Inject,
142
- args: [UINY_CONFIG]
143
- }] }, { type: undefined, decorators: [{
144
- type: Optional
145
- }, {
146
- type: Inject,
147
- args: ['APP_ENVIRONMENT']
148
- }] }]; } });
149
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWlueS1hcGkuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpLWhlYWRlci9zcmMvbGliL2Fzc2lzdGFudC9zZXJ2aWNlcy91aW55LWFwaS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLGlCQUFpQixFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUMzRyxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0QsT0FBTyxFQUFFLEtBQUssRUFBYyxVQUFVLEVBQUUsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ25FLE9BQU8sRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFTckQsT0FBTyxFQUNILGVBQWUsRUFDZixXQUFXLEVBQ1gsb0JBQW9CLEVBQ3BCLHdCQUF3QixFQUN4Qix3QkFBd0IsRUFDM0IsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDckQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7Ozs7QUFFNUQsTUFBTSxnQkFBZ0IsR0FBcUM7SUFDdkQsTUFBTSxFQUFFLDBFQUEwRTtJQUNsRixJQUFJLEVBQUUsMkVBQTJFO0lBQ2pGLE9BQU8sRUFBRSxtRUFBbUU7SUFDNUUsUUFBUSxFQUFFLDREQUE0RDtJQUN0RSxjQUFjLEVBQUUsK0RBQStEO0lBQy9FLFFBQVEsRUFBRSx5Q0FBeUM7SUFDbkQsTUFBTSxFQUFFLGdGQUFnRjtJQUN4RixRQUFRLEVBQUUsdUVBQXVFO0lBQ2pGLFlBQVksRUFBRSw0Q0FBNEM7Q0FDN0QsQ0FBQztBQUVGOzs7Ozs7Ozs7R0FTRztBQUVILE1BQU0sT0FBTyxjQUFj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M0MsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzNCLElBQUksQ0FBQyxLQUFLLElBQUksV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7WUFBRSxPQUFPLElBQUksQ0FBQztRQUNuRCxPQUFPLEtBQUssQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztJQUNsRSxDQUFDOzs0R0F6SFEsY0FBYywrRUFRQyxXQUFXLDZCQUNYLGlCQUFpQjtnSEFUaEMsY0FBYyxjQURELE1BQU07NEZBQ25CLGNBQWM7a0JBRDFCLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFOzswQkFTekIsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxXQUFXOzswQkFDOUIsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxpQkFBaUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwQmFja2VuZCwgSHR0cENsaWVudCwgSHR0cEVycm9yUmVzcG9uc2UsIEh0dHBIZWFkZXJzLCBIdHRwUGFyYW1zIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlLCBPcHRpb25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZGVmZXIsIE9ic2VydmFibGUsIHRocm93RXJyb3IsIFRpbWVvdXRFcnJvciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgdGltZW91dCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7XG4gICAgVWlueUNvbnRleHRvQXBpLFxuICAgIFVpbnlDcmlhckNvbnZlcnNhUmVzcG9uc2UsXG4gICAgVWlueUhpc3Rvcmljb1Jlc3BvbnNlLFxuICAgIFVpbnlMaXN0YUNvbnZlcnNhc1Jlc3BvbnNlLFxuICAgIFVpbnlSZXNwb3N0YUFwaVxufSBmcm9tICcuLi9tb2RlbHMvdWlueS1hcGkubW9kZWxzJztcbmltcG9ydCB7IFVpbnlDb25maWcsIFVpbnlFcnJvIH0gZnJvbSAnLi4vbW9kZWxzL3VpbnkubW9kZWxzJztcbmltcG9ydCB7XG4gICAgcmVzb2x2ZXJVcmxVaW55LFxuICAgIFVJTllfQ09ORklHLFxuICAgIFVJTllfVElNRU9VVF9BQ0FPX01TLFxuICAgIFVJTllfVElNRU9VVF9DT05TVUxUQV9NUyxcbiAgICBVSU5ZX1RJTUVPVVRfTUVOU0FHRU1fTVNcbn0gZnJvbSAnLi4vdWlueS5jb25maWcnO1xuaW1wb3J0IHsgaWRWYWxpZG8gfSBmcm9tICcuLi91dGlscy91aW55LWFwaS5hZGFwdGVyJztcbmltcG9ydCB7IFVpbnlTZXNzaW9uU2VydmljZSB9IGZyb20gJy4vdWlueS1zZXNzaW9uLnNlcnZpY2UnO1xuXG5jb25zdCBNRU5TQUdFTlNfUEFEUkFPOiBSZWNvcmQ8VWlueUVycm9bJ3RpcG8nXSwgc3RyaW5nPiA9IHtcbiAgICBzZXNzYW86ICdTdWEgc2Vzc8OjbyBleHBpcm91LiBFbnRyZSBub3ZhbWVudGUgbmEgVWlzaG9wIHBhcmEgY29udGludWFyIGNvbSBhIFVpbnkuJyxcbiAgICByZWRlOiAnTsOjbyBmb2kgcG9zc8OtdmVsIGNvbmVjdGFyIMOgIFVpbnkuIFZlcmlmaXF1ZSBzdWEgaW50ZXJuZXQgZSB0ZW50ZSBkZSBub3ZvLicsXG4gICAgdGltZW91dDogJ0EgVWlueSBkZW1vcm91IGRlbWFpcyBwYXJhIHJlc3BvbmRlci4gVGVudGUgZGUgbm92byBlbSBpbnN0YW50ZXMuJyxcbiAgICBjb25mbGl0bzogJ07Do28gZm9pIHBvc3PDrXZlbCBjb25jbHVpciBhZ29yYS4gQXR1YWxpemUgZSB0ZW50ZSBkZSBub3ZvLicsXG4gICAgbmFvX2VuY29udHJhZG86ICdOw6NvIGVuY29udHJhbW9zIG8gcXVlIHZvY8OqIHBlZGl1LiBFbGUgcG9kZSB0ZXIgc2lkbyByZW1vdmlkby4nLFxuICAgIGludmFsaWRvOiAnTsOjbyBmb2kgcG9zc8OtdmVsIHByb2Nlc3NhciBlc3NlIHBlZGlkby4nLFxuICAgIGxpbWl0ZTogJ1ZvY8OqIGVudmlvdSBtdWl0YXMgbWVuc2FnZW5zIGVtIHBvdWNvIHRlbXBvLiBBZ3VhcmRlIHVtIHBvdWNvIGUgdGVudGUgZGUgbm92by4nLFxuICAgIHNlcnZpZG9yOiAnQSBVaW55IGVzdMOhIGNvbSBpbnN0YWJpbGlkYWRlIG5vIG1vbWVudG8uIFRlbnRlIGRlIG5vdm8gZW0gaW5zdGFudGVzLicsXG4gICAgY29uZmlndXJhY2FvOiAnQSBVaW55IG7Do28gZXN0w6EgY29uZmlndXJhZGEgbmVzdGUgc2lzdGVtYS4nLFxufTtcblxuLyoqXG4gKiBDbGllbnRlIEhUVFAgZGEgQVBJIGRhIFVpbnkgKHVpc2hvcC1pYSwgL2FwaS92MSkuXG4gKlxuICogVXNhIHVtIEh0dHBDbGllbnQgc29icmUgbyBIdHRwQmFja2VuZCwgc2VtIG9zIGludGVyY2VwdG9ycyBkYSBhcGxpY2HDp8OjbzpcbiAqICAtIG8gRXJyb3JJbnRlcmNlcHRvciBkbyB1aXRlYy1uZy1jb3JlIHRyb2NhIG8gZXJybyBwb3IgdW1hIHN0cmluZyAocGVyZGUgc3RhdHVzIGUgbyBjb3JwbyxcbiAqICAgIG5lY2Vzc8OhcmlvcyBwYXJhIHNlc3PDo28gZXhwaXJhZGEsIGHDp8OjbyBleHBpcmFkYS9pbnZhbGlkYWRhIGUgY29uZmxpdG9zKSBlIGFicmUgdW0gdG9hc3QgZ2xvYmFsO1xuICogIC0gbyBTcGlubmVySW50ZXJjZXB0b3IgY29icmlyaWEgYSB0ZWxhIGEgY2FkYSBtZW5zYWdlbS5cbiAqIE8gdG9rZW4gw6kgbyBtZXNtbyB1c2FkbyBwZWxvIEp3dEludGVyY2VwdG9yIChBdXRoU2VydmljZS5jdXJyZW50VXNlclZhbHVlLnRva2VuKSBlIHPDsyDDqVxuICogYW5leGFkbyBhIHJlcXVpc2nDp8O1ZXMgY3VqYSBVUkwgY29tZcOnYSBjb20gYSBVUkwtYmFzZSBjb25maWd1cmFkYSBkYSBVaW55LlxuICovXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIFVpbnlBcGlTZXJ2aWNlIHtcblxuICAgIHJlYWRvbmx5IGJhc2VVcmw6IHN0cmluZyB8IG51bGw7XG4gICAgcHJpdmF0ZSByZWFkb25seSBodHRwOiBIdHRwQ2xpZW50O1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIGh0dHBCYWNrZW5kOiBIdHRwQmFja2VuZCxcbiAgICAgICAgcHJpdmF0ZSBzZXNzaW9uOiBVaW55U2Vzc2lvblNlcnZpY2UsXG4gICAgICAgIEBPcHRpb25hbCgpIEBJbmplY3QoVUlOWV9DT05GSUcpIGNvbmZpZzogVWlueUNvbmZpZyB8IG51bGwsXG4gICAgICAgIEBPcHRpb25hbCgpIEBJbmplY3QoJ0FQUF9FTlZJUk9OTUVOVCcpIGVudjogYW55XG4gICAgKSB7XG4gICAgICAgIHRoaXMuaHR0cCA9IG5ldyBIdHRwQ2xpZW50KGh0dHBCYWNrZW5kKTtcbiAgICAgICAgdGhpcy5iYXNlVXJsID0gcmVzb2x2ZXJVcmxVaW55KGNvbmZpZywgZW52KTtcbiAgICB9XG5cbiAgICBnZXQgY29uZmlndXJhZGEoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuYmFzZVVybDtcbiAgICB9XG5cbiAgICBsaXN0YXJDb252ZXJzYXMoKTogT2JzZXJ2YWJsZTxVaW55TGlzdGFDb252ZXJzYXNSZXNwb25zZT4ge1xuICAgICAgICByZXR1cm4gZGVmZXIoKCkgPT4gdGhpcy5yZXF1ZXN0PFVpbnlMaXN0YUNvbnZlcnNhc1Jlc3BvbnNlPignR0VUJywgJy9jb252ZXJzYXMnLCBudWxsLCBVSU5ZX1RJTUVPVVRfQ09OU1VMVEFfTVMsXG4gICAgICAgICAgICBuZXcgSHR0cFBhcmFtcygpLnNldCgncGFnZScsIDEpLnNldCgncGVyX3BhZ2UnLCAyMCkpKTtcbiAgICB9XG5cbiAgICBjcmlhckNvbnZlcnNhKGNvbnRleHRvOiBVaW55Q29udGV4dG9BcGkpOiBPYnNlcnZhYmxlPFVpbnlDcmlhckNvbnZlcnNhUmVzcG9uc2U+IHtcbiAgICAgICAgcmV0dXJuIGRlZmVyKCgpID0+IHRoaXMucmVxdWVzdDxVaW55Q3JpYXJDb252ZXJzYVJlc3BvbnNlPignUE9TVCcsICcvY29udmVyc2FzJywgeyBjb250ZXh0byB9LCBVSU5ZX1RJTUVPVVRfQ09OU1VMVEFfTVMpKTtcbiAgICB9XG5cbiAgICAvKiogUMOhZ2luYSBtYWlzIHJlY2VudGUgZG8gaGlzdMOzcmljbyAoYXTDqSAxMDAgbWVuc2FnZW5zKSwgZW0gb3JkZW0gY3Jvbm9sw7NnaWNhLiAqL1xuICAgIGhpc3RvcmljbyhpZENvbnZlcnNhOiBzdHJpbmcpOiBPYnNlcnZhYmxlPFVpbnlIaXN0b3JpY29SZXNwb25zZT4ge1xuICAgICAgICByZXR1cm4gZGVmZXIoKCkgPT4gdGhpcy5yZXF1ZXN0PFVpbnlIaXN0b3JpY29SZXNwb25zZT4oJ0dFVCcsIGAvY29udmVyc2FzLyR7dGhpcy5pZChpZENvbnZlcnNhKX1gLCBudWxsLCBVSU5ZX1RJTUVPVVRfQ09OU1VMVEFfTVMsXG4gICAgICAgICAgICBuZXcgSHR0cFBhcmFtcygpLnNldCgncGFnZScsIDEpLnNldCgncGVyX3BhZ2UnLCAxMDApKSk7XG4gICAgfVxuXG4gICAgZW52aWFyTWVuc2FnZW0oaWRDb252ZXJzYTogc3RyaW5nLCB0ZXh0bzogc3RyaW5nLCBjb250ZXh0bzogVWlueUNvbnRleHRvQXBpKTogT2JzZXJ2YWJsZTxVaW55UmVzcG9zdGFBcGk+IHtcbiAgICAgICAgcmV0dXJuIGRlZmVyKCgpID0+IHRoaXMucmVxdWVzdDxVaW55UmVzcG9zdGFBcGk+KCdQT1NUJywgYC9jb252ZXJzYXMvJHt0aGlzLmlkKGlkQ29udmVyc2EpfS9tZW5zYWdlbnNgLCB7IHRleHRvLCBjb250ZXh0byB9LCBVSU5ZX1RJTUVPVVRfTUVOU0FHRU1fTVMpKTtcbiAgICB9XG5cbiAgICAvKiogQ29uZmlybWEgcGVsbyBpZCBkYSBhw6fDo28gcGVyc2lzdGlkYS4gTmVuaHVtIGFyZ3VtZW50byDDqSBlbnZpYWRvLiBOdW5jYSDDqSByZXBldGlkYSBhdXRvbWF0aWNhbWVudGUuICovXG4gICAgY29uZmlybWFyQWNhbyhpZEFjYW86IHN0cmluZyk6IE9ic2VydmFibGU8VWlueVJlc3Bvc3RhQXBpPiB7XG4gICAgICAgIHJldHVybiBkZWZlcigoKSA9PiB0aGlzLnJlcXVlc3Q8VWlueVJlc3Bvc3RhQXBpPignUE9TVCcsIGAvYWNvZXMvJHt0aGlzLmlkKGlkQWNhbyl9L2NvbmZpcm1hcmAsIHt9LCBVSU5ZX1RJTUVPVVRfQUNBT19NUykpO1xuICAgIH1cblxuICAgIGNhbmNlbGFyQWNhbyhpZEFjYW86IHN0cmluZyk6IE9ic2VydmFibGU8VWlueVJlc3Bvc3RhQXBpPiB7XG4gICAgICAgIHJldHVybiBkZWZlcigoKSA9PiB0aGlzLnJlcXVlc3Q8VWlueVJlc3Bvc3RhQXBpPignUE9TVCcsIGAvYWNvZXMvJHt0aGlzLmlkKGlkQWNhbyl9L2NhbmNlbGFyYCwge30sIFVJTllfVElNRU9VVF9DT05TVUxUQV9NUykpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaWQodmFsb3I6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IGlkID0gaWRWYWxpZG8odmFsb3IpO1xuICAgICAgICBpZiAoIWlkKSB0aHJvdyB0aGlzLmVycm8oJ2ludmFsaWRvJywgMCk7XG4gICAgICAgIHJldHVybiBpZDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlcXVlc3Q8VD4obWV0aG9kOiAnR0VUJyB8ICdQT1NUJywgcGF0aDogc3RyaW5nLCBib2R5OiBhbnksIHRpbWVvdXRNczogbnVtYmVyLCBwYXJhbXM/OiBIdHRwUGFyYW1zKTogT2JzZXJ2YWJsZTxUPiB7XG4gICAgICAgIGlmICghdGhpcy5iYXNlVXJsKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiB0aGlzLmVycm8oJ2NvbmZpZ3VyYWNhbycsIDApKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB1cmwgPSB0aGlzLmJhc2VVcmwgKyBwYXRoO1xuICAgICAgICBjb25zdCB0b2tlbiA9IHRoaXMuc2Vzc2lvbi50b2tlbigpO1xuICAgICAgICBpZiAoIXRva2VuKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiB0aGlzLmVycm8oJ3Nlc3NhbycsIDQwMSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoeyAnQWNjZXB0JzogJ2FwcGxpY2F0aW9uL2pzb24nIH0pO1xuICAgICAgICAvLyBHYXJhbnRpYSBleHBsw61jaXRhOiBvIHRva2VuIHPDsyBzZWd1ZSBwYXJhIGEgVVJMLWJhc2UgZGEgVWlueS5cbiAgICAgICAgaWYgKHVybC5zdGFydHNXaXRoKHRoaXMuYmFzZVVybCArICcvJykpIHtcbiAgICAgICAgICAgIGhlYWRlcnMgPSBoZWFkZXJzLnNldCgnQXV0aG9yaXphdGlvbicsIGBCZWFyZXIgJHt0b2tlbn1gKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWV0aG9kID09PSAnUE9TVCcpIHtcbiAgICAgICAgICAgIGhlYWRlcnMgPSBoZWFkZXJzLnNldCgnQ29udGVudC1UeXBlJywgJ2FwcGxpY2F0aW9uL2pzb24nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucmVxdWVzdDxUPihtZXRob2QsIHVybCwgeyBib2R5OiBib2R5ID8/IHVuZGVmaW5lZCwgaGVhZGVycywgcGFyYW1zLCByZXNwb25zZVR5cGU6ICdqc29uJyB9KS5waXBlKFxuICAgICAgICAgICAgdGltZW91dCh0aW1lb3V0TXMpLFxuICAgICAgICAgICAgY2F0Y2hFcnJvcihlcnIgPT4gdGhyb3dFcnJvcigoKSA9PiB0aGlzLm5vcm1hbGl6YXJFcnJvKGVycikpKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHByaXZhdGUgbm9ybWFsaXphckVycm8oZXJyOiBhbnkpOiBVaW55RXJybyB7XG4gICAgICAgIGlmIChlcnIgaW5zdGFuY2VvZiBUaW1lb3V0RXJyb3IpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmVycm8oJ3RpbWVvdXQnLCAwKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIShlcnIgaW5zdGFuY2VvZiBIdHRwRXJyb3JSZXNwb25zZSkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmVycm8oJ3NlcnZpZG9yJywgMCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjb3JwbzogVWlueVJlc3Bvc3RhQXBpID0gZXJyLmVycm9yICYmIHR5cGVvZiBlcnIuZXJyb3IgPT09ICdvYmplY3QnID8gZXJyLmVycm9yIDogbnVsbDtcbiAgICAgICAgY29uc3QgY29ycmVsYWNhbyA9IHRoaXMudGV4dG9TZWd1cm8oY29ycG8/LmlkX2NvcnJlbGFjYW8sIDY0KSB8fCB0aGlzLnRleHRvU2VndXJvKGVyci5oZWFkZXJzPy5nZXQoJ1gtQ29ycmVsYXRpb24tSWQnKSwgNjQpO1xuICAgICAgICBjb25zdCBjb2RpZ28gPSB0aGlzLnRleHRvU2VndXJvKGNvcnBvPy5lcnJvPy5jb2RpZ28sIDYwKTtcbiAgICAgICAgY29uc3QgbWVuc2FnZW1BcGkgPSB0aGlzLnRleHRvU2VndXJvKGNvcnBvPy5lcnJvPy5tZW5zYWdlbSwgMzAwKTtcblxuICAgICAgICBsZXQgdGlwbzogVWlueUVycm9bJ3RpcG8nXTtcbiAgICAgICAgaWYgKGVyci5zdGF0dXMgPT09IDApIHRpcG8gPSAncmVkZSc7XG4gICAgICAgIGVsc2UgaWYgKGVyci5zdGF0dXMgPT09IDQwMSkgdGlwbyA9ICdzZXNzYW8nO1xuICAgICAgICBlbHNlIGlmIChlcnIuc3RhdHVzID09PSA0MDQpIHRpcG8gPSAnbmFvX2VuY29udHJhZG8nO1xuICAgICAgICBlbHNlIGlmIChlcnIuc3RhdHVzID09PSA0MDkpIHRpcG8gPSAnY29uZmxpdG8nO1xuICAgICAgICBlbHNlIGlmIChlcnIuc3RhdHVzID09PSA0MjkpIHRpcG8gPSAnbGltaXRlJztcbiAgICAgICAgZWxzZSBpZiAoZXJyLnN0YXR1cyA9PT0gNDAwIHx8IGVyci5zdGF0dXMgPT09IDQwMyB8fCBlcnIuc3RhdHVzID09PSA0MjIpIHRpcG8gPSAnaW52YWxpZG8nO1xuICAgICAgICBlbHNlIHRpcG8gPSAnc2Vydmlkb3InO1xuXG4gICAgICAgIGlmICh0aXBvID09PSAnc2Vzc2FvJykge1xuICAgICAgICAgICAgdGhpcy5zZXNzaW9uLnJlY3VzYXJTZXNzYW9BdHVhbCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gNTAyLzUwMy81MDQgdHJhemVtIG1lbnNhZ2VucyBwcsOzcHJpYXMgZSBzZWd1cmFzIChJTlRFR1JBQ0FPXyosIFBST1ZFRE9SX0lBX0lORElTUE9OSVZFTCkuXG4gICAgICAgIC8vIDUwMCAoSU5URVJOTykgZSBmYWxoYXMgZGUgcmVkZSB1c2FtIHNlbXByZSBvIHRleHRvIHBhZHLDo28uXG4gICAgICAgIGNvbnN0IHVzYXJNZW5zYWdlbUFwaSA9IHRpcG8gIT09ICdyZWRlJyAmJiB0aXBvICE9PSAnc2Vzc2FvJyAmJiBlcnIuc3RhdHVzICE9PSA1MDA7XG4gICAgICAgIGNvbnN0IG1lbnNhZ2VtID0gKHVzYXJNZW5zYWdlbUFwaSAmJiBtZW5zYWdlbUFwaSkgfHwgTUVOU0FHRU5TX1BBRFJBT1t0aXBvXTtcblxuICAgICAgICByZXR1cm4geyB0aXBvLCBzdGF0dXM6IGVyci5zdGF0dXMsIGNvZGlnbywgbWVuc2FnZW0sIGNvcnJlbGFjYW8sIGNvcnBvIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBlcnJvKHRpcG86IFVpbnlFcnJvWyd0aXBvJ10sIHN0YXR1czogbnVtYmVyKTogVWlueUVycm8ge1xuICAgICAgICByZXR1cm4geyB0aXBvLCBzdGF0dXMsIGNvZGlnbzogbnVsbCwgbWVuc2FnZW06IE1FTlNBR0VOU19QQURSQU9bdGlwb10sIGNvcnJlbGFjYW86IG51bGwgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHRleHRvU2VndXJvKHZhbG9yOiBhbnksIG1heDogbnVtYmVyKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgICAgIGlmICh0eXBlb2YgdmFsb3IgIT09ICdzdHJpbmcnKSByZXR1cm4gbnVsbDtcbiAgICAgICAgY29uc3QgdGV4dG8gPSB2YWxvci50cmltKCk7XG4gICAgICAgIGlmICghdGV4dG8gfHwgL2JlYXJlclxccy9pLnRlc3QodGV4dG8pKSByZXR1cm4gbnVsbDtcbiAgICAgICAgcmV0dXJuIHRleHRvLmxlbmd0aCA+IG1heCA/IHRleHRvLnNsaWNlKDAsIG1heCkgKyAn4oCmJyA6IHRleHRvO1xuICAgIH1cbn1cbiJdfQ==