valtech-components 4.0.969 → 4.0.971

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 (29) hide show
  1. package/esm2022/lib/components/organisms/comms-preferences-settings/comms-preferences-settings.component.mjs +153 -0
  2. package/esm2022/lib/components/organisms/comms-preferences-settings/comms-preferences-settings.i18n.mjs +25 -0
  3. package/esm2022/lib/components/organisms/comms-preferences-settings/types.mjs +2 -0
  4. package/esm2022/lib/components/organisms/page-block/page-block.component.mjs +254 -0
  5. package/esm2022/lib/components/organisms/page-block/types.mjs +20 -0
  6. package/esm2022/lib/components/organisms/video-player/types.mjs +12 -0
  7. package/esm2022/lib/components/organisms/video-player/video-player.component.mjs +235 -0
  8. package/esm2022/lib/services/comms-preferences/comms-preferences.service.mjs +38 -0
  9. package/esm2022/lib/services/comms-preferences/config.mjs +18 -0
  10. package/esm2022/lib/services/comms-preferences/index.mjs +4 -0
  11. package/esm2022/lib/services/comms-preferences/types.mjs +2 -0
  12. package/esm2022/lib/version.mjs +2 -2
  13. package/esm2022/public-api.mjs +13 -1
  14. package/fesm2022/valtech-components.mjs +780 -63
  15. package/fesm2022/valtech-components.mjs.map +1 -1
  16. package/lib/components/organisms/comms-preferences-settings/comms-preferences-settings.component.d.ts +29 -0
  17. package/lib/components/organisms/comms-preferences-settings/comms-preferences-settings.i18n.d.ts +24 -0
  18. package/lib/components/organisms/comms-preferences-settings/types.d.ts +4 -0
  19. package/lib/components/organisms/page-block/page-block.component.d.ts +65 -0
  20. package/lib/components/organisms/page-block/types.d.ts +102 -0
  21. package/lib/components/organisms/video-player/types.d.ts +45 -0
  22. package/lib/components/organisms/video-player/video-player.component.d.ts +42 -0
  23. package/lib/services/comms-preferences/comms-preferences.service.d.ts +15 -0
  24. package/lib/services/comms-preferences/config.d.ts +14 -0
  25. package/lib/services/comms-preferences/index.d.ts +3 -0
  26. package/lib/services/comms-preferences/types.d.ts +21 -0
  27. package/lib/version.d.ts +1 -1
  28. package/package.json +1 -1
  29. package/public-api.d.ts +7 -0
@@ -0,0 +1,235 @@
1
+ import { Component, computed, inject, input, signal } from '@angular/core';
2
+ import { DomSanitizer } from '@angular/platform-browser';
3
+ import { I18nService } from '../../../services/i18n';
4
+ import * as i0 from "@angular/core";
5
+ const VIDEO_PLAYER_I18N = {
6
+ es: {
7
+ uploadingTitle: 'Subiendo video',
8
+ uploadingBody: 'La subida está en curso. Vuelve en un momento.',
9
+ processingTitle: 'Video en proceso',
10
+ processingBody: 'Estamos preparando este video. Vuelve en unos minutos.',
11
+ rejectedTitle: 'Este video no se pudo publicar',
12
+ failedTitle: 'No pudimos procesar este video',
13
+ unsupportedLink: 'Este enlace no se puede reproducir aquí.',
14
+ },
15
+ en: {
16
+ uploadingTitle: 'Uploading video',
17
+ uploadingBody: 'The upload is in progress. Check back in a moment.',
18
+ processingTitle: 'Video processing',
19
+ processingBody: "We're getting this video ready. Check back in a few minutes.",
20
+ rejectedTitle: "This video couldn't be published",
21
+ failedTitle: "We couldn't process this video",
22
+ unsupportedLink: "This link can't be played here.",
23
+ },
24
+ };
25
+ /**
26
+ * `val-video-player` — reproductor de video de plataforma (ADR-087, "Fase 1 —
27
+ * Reproducción"). Presentacional/dumb: recibe un `VideoPlayerAsset` YA
28
+ * RESUELTO por el backend de turno y decide el render, sin fetch propio.
29
+ *
30
+ * - `source:'upload'` + `status:'ready'` → `<video>` nativo (`preload="none"`
31
+ * + portada — ADR-087 §8, cero bytes de video hasta que alguien le da play).
32
+ * - `source:'upload'` + `uploading|processing` → portada (si hay) + mensaje.
33
+ * - `source:'upload'` + `failed|rejected` → mensaje legible con `failReason`
34
+ * (texto ya resuelto por el backend, se muestra tal cual).
35
+ * - `source:'link'` → iframe **siempre** contra un patrón fijo por proveedor
36
+ * conocido (`youtube-nocookie.com/embed/{id}` · `player.vimeo.com/video/{id}`),
37
+ * nunca un `src` armado con datos crudos del usuario. Proveedor no
38
+ * reconocido → mensaje, nunca un iframe "por si acaso".
39
+ *
40
+ * @example
41
+ * <val-video-player [video]="doc.video" />
42
+ */
43
+ export class VideoPlayerComponent {
44
+ constructor() {
45
+ this.i18n = inject(I18nService);
46
+ this.sanitizer = inject(DomSanitizer);
47
+ /** El `VideoAsset` ya resuelto por el backend. `null`/`undefined` → no renderiza nada. */
48
+ this.video = input(null);
49
+ this.asset = computed(() => this.video() ?? null);
50
+ this.thumbFailed = signal(false);
51
+ /**
52
+ * Arma el embed SIEMPRE contra un patrón fijo por proveedor conocido — el
53
+ * `externalId` es el único dato del backend que entra en el `src`. Un
54
+ * proveedor no reconocido devuelve `null` (el template cae al mensaje, no a
55
+ * un iframe "por si acaso"). `bypassSecurityTrustResourceUrl` es seguro acá
56
+ * porque el string completo lo arma este componente, nunca el usuario.
57
+ */
58
+ this.embedUrl = computed(() => {
59
+ const v = this.asset();
60
+ if (!v || v.source !== 'link' || !v.externalId)
61
+ return null;
62
+ const raw = this.buildEmbedUrl(v.provider, v.externalId);
63
+ return raw ? this.sanitizer.bypassSecurityTrustResourceUrl(raw) : null;
64
+ });
65
+ if (!this.i18n.hasNamespace('VideoPlayer')) {
66
+ this.i18n.registerContent('VideoPlayer', VIDEO_PLAYER_I18N);
67
+ }
68
+ }
69
+ buildEmbedUrl(provider, externalId) {
70
+ switch (provider) {
71
+ case 'youtube':
72
+ return `https://www.youtube-nocookie.com/embed/${encodeURIComponent(externalId)}`;
73
+ case 'vimeo':
74
+ return `https://player.vimeo.com/video/${encodeURIComponent(externalId)}`;
75
+ default:
76
+ return null;
77
+ }
78
+ }
79
+ t(key) {
80
+ return this.i18n.t(key, 'VideoPlayer');
81
+ }
82
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: VideoPlayerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
83
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: VideoPlayerComponent, isStandalone: true, selector: "val-video-player", inputs: { video: { classPropertyName: "video", publicName: "video", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
84
+ @if (asset(); as v) {
85
+ @if (v.source === 'upload') {
86
+ @if (v.status === 'ready' && v.url) {
87
+ <video
88
+ class="val-video-player__video"
89
+ [src]="v.url"
90
+ [poster]="v.thumbnail || undefined"
91
+ controls
92
+ preload="none"
93
+ playsinline
94
+ ></video>
95
+ } @else if (v.status === 'rejected' || v.status === 'failed') {
96
+ <div class="val-video-player__state val-video-player__state--error">
97
+ @if (v.thumbnail && !thumbFailed()) {
98
+ <img
99
+ class="val-video-player__poster"
100
+ [src]="v.thumbnail"
101
+ alt=""
102
+ loading="lazy"
103
+ (error)="thumbFailed.set(true)"
104
+ />
105
+ }
106
+ <div class="val-video-player__overlay">
107
+ <strong>{{ v.status === 'rejected' ? t('rejectedTitle') : t('failedTitle') }}</strong>
108
+ @if (v.failReason) {
109
+ <span>{{ v.failReason }}</span>
110
+ }
111
+ </div>
112
+ </div>
113
+ } @else {
114
+ <!-- uploading | processing -->
115
+ <div class="val-video-player__state" aria-live="polite">
116
+ @if (v.thumbnail && !thumbFailed()) {
117
+ <img
118
+ class="val-video-player__poster"
119
+ [src]="v.thumbnail"
120
+ alt=""
121
+ loading="lazy"
122
+ (error)="thumbFailed.set(true)"
123
+ />
124
+ }
125
+ <div class="val-video-player__overlay">
126
+ <span class="val-video-player__spinner" aria-hidden="true"></span>
127
+ <strong>{{ v.status === 'uploading' ? t('uploadingTitle') : t('processingTitle') }}</strong>
128
+ <span>{{ v.status === 'uploading' ? t('uploadingBody') : t('processingBody') }}</span>
129
+ </div>
130
+ </div>
131
+ }
132
+ } @else {
133
+ <!-- source: link -->
134
+ @if (embedUrl(); as src) {
135
+ <div class="val-video-player__embed-wrap">
136
+ <iframe
137
+ class="val-video-player__embed"
138
+ [src]="src"
139
+ title="video"
140
+ frameborder="0"
141
+ referrerpolicy="strict-origin-when-cross-origin"
142
+ allow="accelerometer; encrypted-media; gyroscope; picture-in-picture"
143
+ allowfullscreen
144
+ loading="lazy"
145
+ ></iframe>
146
+ </div>
147
+ } @else {
148
+ <div class="val-video-player__state">
149
+ <div class="val-video-player__overlay">
150
+ <span>{{ t('unsupportedLink') }}</span>
151
+ </div>
152
+ </div>
153
+ }
154
+ }
155
+ }
156
+ `, isInline: true, styles: [":host{display:block}.val-video-player__video{display:block;width:100%;max-height:70vh;border-radius:12px;background:#000}.val-video-player__embed-wrap{position:relative;width:100%;padding-top:56.25%;border-radius:12px;overflow:hidden;background:#000}.val-video-player__embed{position:absolute;inset:0;width:100%;height:100%;border:0}.val-video-player__state{position:relative;width:100%;aspect-ratio:16 / 9;border-radius:12px;overflow:hidden;background:var(--ion-color-light, rgba(0, 0, 0, .06));display:flex;align-items:flex-end}.val-video-player__poster{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;opacity:.55}.val-video-player__overlay{position:relative;z-index:1;display:flex;flex-direction:column;gap:4px;width:100%;padding:14px 16px;color:var(--ion-text-color, #000);background:linear-gradient(to top,rgba(0,0,0,.08),transparent)}.val-video-player__state--error .val-video-player__overlay{color:var(--ion-color-danger, #eb445a)}.val-video-player__overlay strong{font-size:.9375rem}.val-video-player__overlay span{font-size:.8125rem;opacity:.85}.val-video-player__spinner{width:18px;height:18px;border-radius:50%;border:2px solid rgba(127,127,127,.35);border-top-color:var(--ion-color-dark, #313131);animation:val-video-player-spin .8s linear infinite}@keyframes val-video-player-spin{to{transform:rotate(360deg)}}\n"] }); }
157
+ }
158
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: VideoPlayerComponent, decorators: [{
159
+ type: Component,
160
+ args: [{ selector: 'val-video-player', standalone: true, imports: [], template: `
161
+ @if (asset(); as v) {
162
+ @if (v.source === 'upload') {
163
+ @if (v.status === 'ready' && v.url) {
164
+ <video
165
+ class="val-video-player__video"
166
+ [src]="v.url"
167
+ [poster]="v.thumbnail || undefined"
168
+ controls
169
+ preload="none"
170
+ playsinline
171
+ ></video>
172
+ } @else if (v.status === 'rejected' || v.status === 'failed') {
173
+ <div class="val-video-player__state val-video-player__state--error">
174
+ @if (v.thumbnail && !thumbFailed()) {
175
+ <img
176
+ class="val-video-player__poster"
177
+ [src]="v.thumbnail"
178
+ alt=""
179
+ loading="lazy"
180
+ (error)="thumbFailed.set(true)"
181
+ />
182
+ }
183
+ <div class="val-video-player__overlay">
184
+ <strong>{{ v.status === 'rejected' ? t('rejectedTitle') : t('failedTitle') }}</strong>
185
+ @if (v.failReason) {
186
+ <span>{{ v.failReason }}</span>
187
+ }
188
+ </div>
189
+ </div>
190
+ } @else {
191
+ <!-- uploading | processing -->
192
+ <div class="val-video-player__state" aria-live="polite">
193
+ @if (v.thumbnail && !thumbFailed()) {
194
+ <img
195
+ class="val-video-player__poster"
196
+ [src]="v.thumbnail"
197
+ alt=""
198
+ loading="lazy"
199
+ (error)="thumbFailed.set(true)"
200
+ />
201
+ }
202
+ <div class="val-video-player__overlay">
203
+ <span class="val-video-player__spinner" aria-hidden="true"></span>
204
+ <strong>{{ v.status === 'uploading' ? t('uploadingTitle') : t('processingTitle') }}</strong>
205
+ <span>{{ v.status === 'uploading' ? t('uploadingBody') : t('processingBody') }}</span>
206
+ </div>
207
+ </div>
208
+ }
209
+ } @else {
210
+ <!-- source: link -->
211
+ @if (embedUrl(); as src) {
212
+ <div class="val-video-player__embed-wrap">
213
+ <iframe
214
+ class="val-video-player__embed"
215
+ [src]="src"
216
+ title="video"
217
+ frameborder="0"
218
+ referrerpolicy="strict-origin-when-cross-origin"
219
+ allow="accelerometer; encrypted-media; gyroscope; picture-in-picture"
220
+ allowfullscreen
221
+ loading="lazy"
222
+ ></iframe>
223
+ </div>
224
+ } @else {
225
+ <div class="val-video-player__state">
226
+ <div class="val-video-player__overlay">
227
+ <span>{{ t('unsupportedLink') }}</span>
228
+ </div>
229
+ </div>
230
+ }
231
+ }
232
+ }
233
+ `, styles: [":host{display:block}.val-video-player__video{display:block;width:100%;max-height:70vh;border-radius:12px;background:#000}.val-video-player__embed-wrap{position:relative;width:100%;padding-top:56.25%;border-radius:12px;overflow:hidden;background:#000}.val-video-player__embed{position:absolute;inset:0;width:100%;height:100%;border:0}.val-video-player__state{position:relative;width:100%;aspect-ratio:16 / 9;border-radius:12px;overflow:hidden;background:var(--ion-color-light, rgba(0, 0, 0, .06));display:flex;align-items:flex-end}.val-video-player__poster{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;opacity:.55}.val-video-player__overlay{position:relative;z-index:1;display:flex;flex-direction:column;gap:4px;width:100%;padding:14px 16px;color:var(--ion-text-color, #000);background:linear-gradient(to top,rgba(0,0,0,.08),transparent)}.val-video-player__state--error .val-video-player__overlay{color:var(--ion-color-danger, #eb445a)}.val-video-player__overlay strong{font-size:.9375rem}.val-video-player__overlay span{font-size:.8125rem;opacity:.85}.val-video-player__spinner{width:18px;height:18px;border-radius:50%;border:2px solid rgba(127,127,127,.35);border-top-color:var(--ion-color-dark, #313131);animation:val-video-player-spin .8s linear infinite}@keyframes val-video-player-spin{to{transform:rotate(360deg)}}\n"] }]
234
+ }], ctorParameters: () => [] });
235
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlkZW8tcGxheWVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9vcmdhbmlzbXMvdmlkZW8tcGxheWVyL3ZpZGVvLXBsYXllci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0UsT0FBTyxFQUFFLFlBQVksRUFBbUIsTUFBTSwyQkFBMkIsQ0FBQztBQUMxRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7O0FBR3JELE1BQU0saUJBQWlCLEdBQUc7SUFDeEIsRUFBRSxFQUFFO1FBQ0YsY0FBYyxFQUFFLGdCQUFnQjtRQUNoQyxhQUFhLEVBQUUsZ0RBQWdEO1FBQy9ELGVBQWUsRUFBRSxrQkFBa0I7UUFDbkMsY0FBYyxFQUFFLHdEQUF3RDtRQUN4RSxhQUFhLEVBQUUsZ0NBQWdDO1FBQy9DLFdBQVcsRUFBRSxnQ0FBZ0M7UUFDN0MsZUFBZSxFQUFFLDBDQUEwQztLQUM1RDtJQUNELEVBQUUsRUFBRTtRQUNGLGNBQWMsRUFBRSxpQkFBaUI7UUFDakMsYUFBYSxFQUFFLG9EQUFvRDtRQUNuRSxlQUFlLEVBQUUsa0JBQWtCO1FBQ25DLGNBQWMsRUFBRSw4REFBOEQ7UUFDOUUsYUFBYSxFQUFFLGtDQUFrQztRQUNqRCxXQUFXLEVBQUUsZ0NBQWdDO1FBQzdDLGVBQWUsRUFBRSxpQ0FBaUM7S0FDbkQ7Q0FDRixDQUFDO0FBRUY7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBaUJHO0FBNktILE1BQU0sT0FBTyxvQkFBb0I7SUF5Qi9CO1FBeEJpQixTQUFJLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQzNCLGNBQVMsR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7UUFFbEQsMEZBQTBGO1FBQ2pGLFVBQUssR0FBRyxLQUFLLENBQXNDLElBQUksQ0FBQyxDQUFDO1FBRXpELFVBQUssR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLElBQUksQ0FBQyxDQUFDO1FBRTdDLGdCQUFXLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRXJDOzs7Ozs7V0FNRztRQUNNLGFBQVEsR0FBRyxRQUFRLENBQXlCLEdBQUcsRUFBRTtZQUN4RCxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDdkIsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxLQUFLLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxVQUFVO2dCQUFFLE9BQU8sSUFBSSxDQUFDO1lBQzVELE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDekQsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsOEJBQThCLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUN6RSxDQUFDLENBQUMsQ0FBQztRQUdELElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDO1lBQzNDLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLGFBQWEsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO1FBQzlELENBQUM7SUFDSCxDQUFDO0lBRU8sYUFBYSxDQUFDLFFBQTRCLEVBQUUsVUFBa0I7UUFDcEUsUUFBUSxRQUFRLEVBQUUsQ0FBQztZQUNqQixLQUFLLFNBQVM7Z0JBQ1osT0FBTywwQ0FBMEMsa0JBQWtCLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztZQUNwRixLQUFLLE9BQU87Z0JBQ1YsT0FBTyxrQ0FBa0Msa0JBQWtCLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztZQUM1RTtnQkFDRSxPQUFPLElBQUksQ0FBQztRQUNoQixDQUFDO0lBQ0gsQ0FBQztJQUVELENBQUMsQ0FBQyxHQUFXO1FBQ1gsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsYUFBYSxDQUFDLENBQUM7SUFDekMsQ0FBQzsrR0E1Q1Usb0JBQW9CO21HQUFwQixvQkFBb0IsZ05BeEtyQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXlFVDs7NEZBK0ZVLG9CQUFvQjtrQkE1S2hDLFNBQVM7K0JBQ0Usa0JBQWtCLGNBQ2hCLElBQUksV0FDUCxFQUFFLFlBQ0Q7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F5RVQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIGNvbXB1dGVkLCBpbmplY3QsIGlucHV0LCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERvbVNhbml0aXplciwgU2FmZVJlc291cmNlVXJsIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5pbXBvcnQgeyBJMThuU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2kxOG4nO1xuaW1wb3J0IHsgVmlkZW9QbGF5ZXJBc3NldCB9IGZyb20gJy4vdHlwZXMnO1xuXG5jb25zdCBWSURFT19QTEFZRVJfSTE4TiA9IHtcbiAgZXM6IHtcbiAgICB1cGxvYWRpbmdUaXRsZTogJ1N1YmllbmRvIHZpZGVvJyxcbiAgICB1cGxvYWRpbmdCb2R5OiAnTGEgc3ViaWRhIGVzdMOhIGVuIGN1cnNvLiBWdWVsdmUgZW4gdW4gbW9tZW50by4nLFxuICAgIHByb2Nlc3NpbmdUaXRsZTogJ1ZpZGVvIGVuIHByb2Nlc28nLFxuICAgIHByb2Nlc3NpbmdCb2R5OiAnRXN0YW1vcyBwcmVwYXJhbmRvIGVzdGUgdmlkZW8uIFZ1ZWx2ZSBlbiB1bm9zIG1pbnV0b3MuJyxcbiAgICByZWplY3RlZFRpdGxlOiAnRXN0ZSB2aWRlbyBubyBzZSBwdWRvIHB1YmxpY2FyJyxcbiAgICBmYWlsZWRUaXRsZTogJ05vIHB1ZGltb3MgcHJvY2VzYXIgZXN0ZSB2aWRlbycsXG4gICAgdW5zdXBwb3J0ZWRMaW5rOiAnRXN0ZSBlbmxhY2Ugbm8gc2UgcHVlZGUgcmVwcm9kdWNpciBhcXXDrS4nLFxuICB9LFxuICBlbjoge1xuICAgIHVwbG9hZGluZ1RpdGxlOiAnVXBsb2FkaW5nIHZpZGVvJyxcbiAgICB1cGxvYWRpbmdCb2R5OiAnVGhlIHVwbG9hZCBpcyBpbiBwcm9ncmVzcy4gQ2hlY2sgYmFjayBpbiBhIG1vbWVudC4nLFxuICAgIHByb2Nlc3NpbmdUaXRsZTogJ1ZpZGVvIHByb2Nlc3NpbmcnLFxuICAgIHByb2Nlc3NpbmdCb2R5OiBcIldlJ3JlIGdldHRpbmcgdGhpcyB2aWRlbyByZWFkeS4gQ2hlY2sgYmFjayBpbiBhIGZldyBtaW51dGVzLlwiLFxuICAgIHJlamVjdGVkVGl0bGU6IFwiVGhpcyB2aWRlbyBjb3VsZG4ndCBiZSBwdWJsaXNoZWRcIixcbiAgICBmYWlsZWRUaXRsZTogXCJXZSBjb3VsZG4ndCBwcm9jZXNzIHRoaXMgdmlkZW9cIixcbiAgICB1bnN1cHBvcnRlZExpbms6IFwiVGhpcyBsaW5rIGNhbid0IGJlIHBsYXllZCBoZXJlLlwiLFxuICB9LFxufTtcblxuLyoqXG4gKiBgdmFsLXZpZGVvLXBsYXllcmAg4oCUIHJlcHJvZHVjdG9yIGRlIHZpZGVvIGRlIHBsYXRhZm9ybWEgKEFEUi0wODcsIFwiRmFzZSAxIOKAlFxuICogUmVwcm9kdWNjacOzblwiKS4gUHJlc2VudGFjaW9uYWwvZHVtYjogcmVjaWJlIHVuIGBWaWRlb1BsYXllckFzc2V0YCBZQVxuICogUkVTVUVMVE8gcG9yIGVsIGJhY2tlbmQgZGUgdHVybm8geSBkZWNpZGUgZWwgcmVuZGVyLCBzaW4gZmV0Y2ggcHJvcGlvLlxuICpcbiAqIC0gYHNvdXJjZTondXBsb2FkJ2AgKyBgc3RhdHVzOidyZWFkeSdgIOKGkiBgPHZpZGVvPmAgbmF0aXZvIChgcHJlbG9hZD1cIm5vbmVcImBcbiAqICAgKyBwb3J0YWRhIOKAlCBBRFItMDg3IMKnOCwgY2VybyBieXRlcyBkZSB2aWRlbyBoYXN0YSBxdWUgYWxndWllbiBsZSBkYSBwbGF5KS5cbiAqIC0gYHNvdXJjZTondXBsb2FkJ2AgKyBgdXBsb2FkaW5nfHByb2Nlc3NpbmdgIOKGkiBwb3J0YWRhIChzaSBoYXkpICsgbWVuc2FqZS5cbiAqIC0gYHNvdXJjZTondXBsb2FkJ2AgKyBgZmFpbGVkfHJlamVjdGVkYCDihpIgbWVuc2FqZSBsZWdpYmxlIGNvbiBgZmFpbFJlYXNvbmBcbiAqICAgKHRleHRvIHlhIHJlc3VlbHRvIHBvciBlbCBiYWNrZW5kLCBzZSBtdWVzdHJhIHRhbCBjdWFsKS5cbiAqIC0gYHNvdXJjZTonbGluaydgIOKGkiBpZnJhbWUgKipzaWVtcHJlKiogY29udHJhIHVuIHBhdHLDs24gZmlqbyBwb3IgcHJvdmVlZG9yXG4gKiAgIGNvbm9jaWRvIChgeW91dHViZS1ub2Nvb2tpZS5jb20vZW1iZWQve2lkfWAgwrcgYHBsYXllci52aW1lby5jb20vdmlkZW8ve2lkfWApLFxuICogICBudW5jYSB1biBgc3JjYCBhcm1hZG8gY29uIGRhdG9zIGNydWRvcyBkZWwgdXN1YXJpby4gUHJvdmVlZG9yIG5vXG4gKiAgIHJlY29ub2NpZG8g4oaSIG1lbnNhamUsIG51bmNhIHVuIGlmcmFtZSBcInBvciBzaSBhY2Fzb1wiLlxuICpcbiAqIEBleGFtcGxlXG4gKiA8dmFsLXZpZGVvLXBsYXllciBbdmlkZW9dPVwiZG9jLnZpZGVvXCIgLz5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndmFsLXZpZGVvLXBsYXllcicsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtdLFxuICB0ZW1wbGF0ZTogYFxuICAgIEBpZiAoYXNzZXQoKTsgYXMgdikge1xuICAgICAgQGlmICh2LnNvdXJjZSA9PT0gJ3VwbG9hZCcpIHtcbiAgICAgICAgQGlmICh2LnN0YXR1cyA9PT0gJ3JlYWR5JyAmJiB2LnVybCkge1xuICAgICAgICAgIDx2aWRlb1xuICAgICAgICAgICAgY2xhc3M9XCJ2YWwtdmlkZW8tcGxheWVyX192aWRlb1wiXG4gICAgICAgICAgICBbc3JjXT1cInYudXJsXCJcbiAgICAgICAgICAgIFtwb3N0ZXJdPVwidi50aHVtYm5haWwgfHwgdW5kZWZpbmVkXCJcbiAgICAgICAgICAgIGNvbnRyb2xzXG4gICAgICAgICAgICBwcmVsb2FkPVwibm9uZVwiXG4gICAgICAgICAgICBwbGF5c2lubGluZVxuICAgICAgICAgID48L3ZpZGVvPlxuICAgICAgICB9IEBlbHNlIGlmICh2LnN0YXR1cyA9PT0gJ3JlamVjdGVkJyB8fCB2LnN0YXR1cyA9PT0gJ2ZhaWxlZCcpIHtcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidmFsLXZpZGVvLXBsYXllcl9fc3RhdGUgdmFsLXZpZGVvLXBsYXllcl9fc3RhdGUtLWVycm9yXCI+XG4gICAgICAgICAgICBAaWYgKHYudGh1bWJuYWlsICYmICF0aHVtYkZhaWxlZCgpKSB7XG4gICAgICAgICAgICAgIDxpbWdcbiAgICAgICAgICAgICAgICBjbGFzcz1cInZhbC12aWRlby1wbGF5ZXJfX3Bvc3RlclwiXG4gICAgICAgICAgICAgICAgW3NyY109XCJ2LnRodW1ibmFpbFwiXG4gICAgICAgICAgICAgICAgYWx0PVwiXCJcbiAgICAgICAgICAgICAgICBsb2FkaW5nPVwibGF6eVwiXG4gICAgICAgICAgICAgICAgKGVycm9yKT1cInRodW1iRmFpbGVkLnNldCh0cnVlKVwiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidmFsLXZpZGVvLXBsYXllcl9fb3ZlcmxheVwiPlxuICAgICAgICAgICAgICA8c3Ryb25nPnt7IHYuc3RhdHVzID09PSAncmVqZWN0ZWQnID8gdCgncmVqZWN0ZWRUaXRsZScpIDogdCgnZmFpbGVkVGl0bGUnKSB9fTwvc3Ryb25nPlxuICAgICAgICAgICAgICBAaWYgKHYuZmFpbFJlYXNvbikge1xuICAgICAgICAgICAgICAgIDxzcGFuPnt7IHYuZmFpbFJlYXNvbiB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgIDwhLS0gdXBsb2FkaW5nIHwgcHJvY2Vzc2luZyAtLT5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidmFsLXZpZGVvLXBsYXllcl9fc3RhdGVcIiBhcmlhLWxpdmU9XCJwb2xpdGVcIj5cbiAgICAgICAgICAgIEBpZiAodi50aHVtYm5haWwgJiYgIXRodW1iRmFpbGVkKCkpIHtcbiAgICAgICAgICAgICAgPGltZ1xuICAgICAgICAgICAgICAgIGNsYXNzPVwidmFsLXZpZGVvLXBsYXllcl9fcG9zdGVyXCJcbiAgICAgICAgICAgICAgICBbc3JjXT1cInYudGh1bWJuYWlsXCJcbiAgICAgICAgICAgICAgICBhbHQ9XCJcIlxuICAgICAgICAgICAgICAgIGxvYWRpbmc9XCJsYXp5XCJcbiAgICAgICAgICAgICAgICAoZXJyb3IpPVwidGh1bWJGYWlsZWQuc2V0KHRydWUpXCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ2YWwtdmlkZW8tcGxheWVyX19vdmVybGF5XCI+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidmFsLXZpZGVvLXBsYXllcl9fc3Bpbm5lclwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgPHN0cm9uZz57eyB2LnN0YXR1cyA9PT0gJ3VwbG9hZGluZycgPyB0KCd1cGxvYWRpbmdUaXRsZScpIDogdCgncHJvY2Vzc2luZ1RpdGxlJykgfX08L3N0cm9uZz5cbiAgICAgICAgICAgICAgPHNwYW4+e3sgdi5zdGF0dXMgPT09ICd1cGxvYWRpbmcnID8gdCgndXBsb2FkaW5nQm9keScpIDogdCgncHJvY2Vzc2luZ0JvZHknKSB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICB9IEBlbHNlIHtcbiAgICAgICAgPCEtLSBzb3VyY2U6IGxpbmsgLS0+XG4gICAgICAgIEBpZiAoZW1iZWRVcmwoKTsgYXMgc3JjKSB7XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInZhbC12aWRlby1wbGF5ZXJfX2VtYmVkLXdyYXBcIj5cbiAgICAgICAgICAgIDxpZnJhbWVcbiAgICAgICAgICAgICAgY2xhc3M9XCJ2YWwtdmlkZW8tcGxheWVyX19lbWJlZFwiXG4gICAgICAgICAgICAgIFtzcmNdPVwic3JjXCJcbiAgICAgICAgICAgICAgdGl0bGU9XCJ2aWRlb1wiXG4gICAgICAgICAgICAgIGZyYW1lYm9yZGVyPVwiMFwiXG4gICAgICAgICAgICAgIHJlZmVycmVycG9saWN5PVwic3RyaWN0LW9yaWdpbi13aGVuLWNyb3NzLW9yaWdpblwiXG4gICAgICAgICAgICAgIGFsbG93PVwiYWNjZWxlcm9tZXRlcjsgZW5jcnlwdGVkLW1lZGlhOyBneXJvc2NvcGU7IHBpY3R1cmUtaW4tcGljdHVyZVwiXG4gICAgICAgICAgICAgIGFsbG93ZnVsbHNjcmVlblxuICAgICAgICAgICAgICBsb2FkaW5nPVwibGF6eVwiXG4gICAgICAgICAgICA+PC9pZnJhbWU+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ2YWwtdmlkZW8tcGxheWVyX19zdGF0ZVwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInZhbC12aWRlby1wbGF5ZXJfX292ZXJsYXlcIj5cbiAgICAgICAgICAgICAgPHNwYW4+e3sgdCgndW5zdXBwb3J0ZWRMaW5rJykgfX08L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgYCxcbiAgc3R5bGVzOiBbXG4gICAgYFxuICAgICAgOmhvc3Qge1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIH1cblxuICAgICAgLnZhbC12aWRlby1wbGF5ZXJfX3ZpZGVvIHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICBtYXgtaGVpZ2h0OiA3MHZoO1xuICAgICAgICBib3JkZXItcmFkaXVzOiAxMnB4O1xuICAgICAgICBiYWNrZ3JvdW5kOiAjMDAwO1xuICAgICAgfVxuXG4gICAgICAudmFsLXZpZGVvLXBsYXllcl9fZW1iZWQtd3JhcCB7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIC8qIDE2Ojkgc2luIGRlcGVuZGVyIGRlIGFzcGVjdC1yYXRpbyAoc29wb3J0ZSBhbXBsaW8pICovXG4gICAgICAgIHBhZGRpbmctdG9wOiA1Ni4yNSU7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDEycHg7XG4gICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgIGJhY2tncm91bmQ6ICMwMDA7XG4gICAgICB9XG5cbiAgICAgIC52YWwtdmlkZW8tcGxheWVyX19lbWJlZCB7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgaW5zZXQ6IDA7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICAgIGJvcmRlcjogMDtcbiAgICAgIH1cblxuICAgICAgLnZhbC12aWRlby1wbGF5ZXJfX3N0YXRlIHtcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgYXNwZWN0LXJhdGlvOiAxNiAvIDk7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDEycHg7XG4gICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWlvbi1jb2xvci1saWdodCwgcmdiYSgwLCAwLCAwLCAwLjA2KSk7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGFsaWduLWl0ZW1zOiBmbGV4LWVuZDtcbiAgICAgIH1cblxuICAgICAgLnZhbC12aWRlby1wbGF5ZXJfX3Bvc3RlciB7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgaW5zZXQ6IDA7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICAgIG9iamVjdC1maXQ6IGNvdmVyO1xuICAgICAgICBvcGFjaXR5OiAwLjU1O1xuICAgICAgfVxuXG4gICAgICAudmFsLXZpZGVvLXBsYXllcl9fb3ZlcmxheSB7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgei1pbmRleDogMTtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgZ2FwOiA0cHg7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICBwYWRkaW5nOiAxNHB4IDE2cHg7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1pb24tdGV4dC1jb2xvciwgIzAwMCk7XG4gICAgICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCh0byB0b3AsIHJnYmEoMCwgMCwgMCwgMC4wOCksIHRyYW5zcGFyZW50KTtcbiAgICAgIH1cblxuICAgICAgLnZhbC12aWRlby1wbGF5ZXJfX3N0YXRlLS1lcnJvciAudmFsLXZpZGVvLXBsYXllcl9fb3ZlcmxheSB7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1pb24tY29sb3ItZGFuZ2VyLCAjZWI0NDVhKTtcbiAgICAgIH1cblxuICAgICAgLnZhbC12aWRlby1wbGF5ZXJfX292ZXJsYXkgc3Ryb25nIHtcbiAgICAgICAgZm9udC1zaXplOiAwLjkzNzVyZW07XG4gICAgICB9XG5cbiAgICAgIC52YWwtdmlkZW8tcGxheWVyX19vdmVybGF5IHNwYW4ge1xuICAgICAgICBmb250LXNpemU6IDAuODEyNXJlbTtcbiAgICAgICAgb3BhY2l0eTogMC44NTtcbiAgICAgIH1cblxuICAgICAgLnZhbC12aWRlby1wbGF5ZXJfX3NwaW5uZXIge1xuICAgICAgICB3aWR0aDogMThweDtcbiAgICAgICAgaGVpZ2h0OiAxOHB4O1xuICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7XG4gICAgICAgIGJvcmRlcjogMnB4IHNvbGlkIHJnYmEoMTI3LCAxMjcsIDEyNywgMC4zNSk7XG4gICAgICAgIGJvcmRlci10b3AtY29sb3I6IHZhcigtLWlvbi1jb2xvci1kYXJrLCAjMzEzMTMxKTtcbiAgICAgICAgYW5pbWF0aW9uOiB2YWwtdmlkZW8tcGxheWVyLXNwaW4gMC44cyBsaW5lYXIgaW5maW5pdGU7XG4gICAgICB9XG5cbiAgICAgIEBrZXlmcmFtZXMgdmFsLXZpZGVvLXBsYXllci1zcGluIHtcbiAgICAgICAgdG8ge1xuICAgICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICBgLFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBWaWRlb1BsYXllckNvbXBvbmVudCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgaTE4biA9IGluamVjdChJMThuU2VydmljZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgc2FuaXRpemVyID0gaW5qZWN0KERvbVNhbml0aXplcik7XG5cbiAgLyoqIEVsIGBWaWRlb0Fzc2V0YCB5YSByZXN1ZWx0byBwb3IgZWwgYmFja2VuZC4gYG51bGxgL2B1bmRlZmluZWRgIOKGkiBubyByZW5kZXJpemEgbmFkYS4gKi9cbiAgcmVhZG9ubHkgdmlkZW8gPSBpbnB1dDxWaWRlb1BsYXllckFzc2V0IHwgbnVsbCB8IHVuZGVmaW5lZD4obnVsbCk7XG5cbiAgcmVhZG9ubHkgYXNzZXQgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnZpZGVvKCkgPz8gbnVsbCk7XG5cbiAgcmVhZG9ubHkgdGh1bWJGYWlsZWQgPSBzaWduYWwoZmFsc2UpO1xuXG4gIC8qKlxuICAgKiBBcm1hIGVsIGVtYmVkIFNJRU1QUkUgY29udHJhIHVuIHBhdHLDs24gZmlqbyBwb3IgcHJvdmVlZG9yIGNvbm9jaWRvIOKAlCBlbFxuICAgKiBgZXh0ZXJuYWxJZGAgZXMgZWwgw7puaWNvIGRhdG8gZGVsIGJhY2tlbmQgcXVlIGVudHJhIGVuIGVsIGBzcmNgLiBVblxuICAgKiBwcm92ZWVkb3Igbm8gcmVjb25vY2lkbyBkZXZ1ZWx2ZSBgbnVsbGAgKGVsIHRlbXBsYXRlIGNhZSBhbCBtZW5zYWplLCBubyBhXG4gICAqIHVuIGlmcmFtZSBcInBvciBzaSBhY2Fzb1wiKS4gYGJ5cGFzc1NlY3VyaXR5VHJ1c3RSZXNvdXJjZVVybGAgZXMgc2VndXJvIGFjw6FcbiAgICogcG9ycXVlIGVsIHN0cmluZyBjb21wbGV0byBsbyBhcm1hIGVzdGUgY29tcG9uZW50ZSwgbnVuY2EgZWwgdXN1YXJpby5cbiAgICovXG4gIHJlYWRvbmx5IGVtYmVkVXJsID0gY29tcHV0ZWQ8U2FmZVJlc291cmNlVXJsIHwgbnVsbD4oKCkgPT4ge1xuICAgIGNvbnN0IHYgPSB0aGlzLmFzc2V0KCk7XG4gICAgaWYgKCF2IHx8IHYuc291cmNlICE9PSAnbGluaycgfHwgIXYuZXh0ZXJuYWxJZCkgcmV0dXJuIG51bGw7XG4gICAgY29uc3QgcmF3ID0gdGhpcy5idWlsZEVtYmVkVXJsKHYucHJvdmlkZXIsIHYuZXh0ZXJuYWxJZCk7XG4gICAgcmV0dXJuIHJhdyA/IHRoaXMuc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RSZXNvdXJjZVVybChyYXcpIDogbnVsbDtcbiAgfSk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgaWYgKCF0aGlzLmkxOG4uaGFzTmFtZXNwYWNlKCdWaWRlb1BsYXllcicpKSB7XG4gICAgICB0aGlzLmkxOG4ucmVnaXN0ZXJDb250ZW50KCdWaWRlb1BsYXllcicsIFZJREVPX1BMQVlFUl9JMThOKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkRW1iZWRVcmwocHJvdmlkZXI6IHN0cmluZyB8IHVuZGVmaW5lZCwgZXh0ZXJuYWxJZDogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgc3dpdGNoIChwcm92aWRlcikge1xuICAgICAgY2FzZSAneW91dHViZSc6XG4gICAgICAgIHJldHVybiBgaHR0cHM6Ly93d3cueW91dHViZS1ub2Nvb2tpZS5jb20vZW1iZWQvJHtlbmNvZGVVUklDb21wb25lbnQoZXh0ZXJuYWxJZCl9YDtcbiAgICAgIGNhc2UgJ3ZpbWVvJzpcbiAgICAgICAgcmV0dXJuIGBodHRwczovL3BsYXllci52aW1lby5jb20vdmlkZW8vJHtlbmNvZGVVUklDb21wb25lbnQoZXh0ZXJuYWxJZCl9YDtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHQoa2V5OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmkxOG4udChrZXksICdWaWRlb1BsYXllcicpO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,38 @@
1
+ import { Injectable, Optional, Inject } from '@angular/core';
2
+ import { HttpParams } from '@angular/common/http';
3
+ import { EMPTY } from 'rxjs';
4
+ import { VALTECH_COMMS_PREFERENCES_CONFIG } from './config';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "@angular/common/http";
7
+ export class CommsPreferencesService {
8
+ constructor(http, config) {
9
+ this.http = http;
10
+ this.config = config;
11
+ this.baseUrl = config ? `${config.apiUrl}/v2/comms-preferences` : null;
12
+ this.appId = config?.appId ?? null;
13
+ }
14
+ list() {
15
+ if (!this.baseUrl || !this.appId)
16
+ return EMPTY;
17
+ const params = new HttpParams().set('appId', this.appId);
18
+ return this.http.get(`${this.baseUrl}/settings`, { params });
19
+ }
20
+ setEnabled(templateId, enabled) {
21
+ if (!this.baseUrl || !this.appId)
22
+ return EMPTY;
23
+ const params = new HttpParams().set('appId', this.appId);
24
+ return this.http.put(`${this.baseUrl}/settings/${templateId}`, { enabled }, { params });
25
+ }
26
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CommsPreferencesService, deps: [{ token: i1.HttpClient }, { token: VALTECH_COMMS_PREFERENCES_CONFIG, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
27
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CommsPreferencesService, providedIn: 'root' }); }
28
+ }
29
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CommsPreferencesService, decorators: [{
30
+ type: Injectable,
31
+ args: [{ providedIn: 'root' }]
32
+ }], ctorParameters: () => [{ type: i1.HttpClient }, { type: undefined, decorators: [{
33
+ type: Optional
34
+ }, {
35
+ type: Inject,
36
+ args: [VALTECH_COMMS_PREFERENCES_CONFIG]
37
+ }] }] });
38
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbXMtcHJlZmVyZW5jZXMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvc2VydmljZXMvY29tbXMtcHJlZmVyZW5jZXMvY29tbXMtcHJlZmVyZW5jZXMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0QsT0FBTyxFQUFjLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzlELE9BQU8sRUFBYyxLQUFLLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDekMsT0FBTyxFQUFFLGdDQUFnQyxFQUFFLE1BQU0sVUFBVSxDQUFDOzs7QUFRNUQsTUFBTSxPQUFPLHVCQUF1QjtJQUlsQyxZQUNtQixJQUFnQixFQUdoQixNQUE0QztRQUg1QyxTQUFJLEdBQUosSUFBSSxDQUFZO1FBR2hCLFdBQU0sR0FBTixNQUFNLENBQXNDO1FBRTdELElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDdkUsSUFBSSxDQUFDLEtBQUssR0FBRyxNQUFNLEVBQUUsS0FBSyxJQUFJLElBQUksQ0FBQztJQUNyQyxDQUFDO0lBRUQsSUFBSTtRQUNGLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUs7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUMvQyxNQUFNLE1BQU0sR0FBRyxJQUFJLFVBQVUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3pELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQTRCLEdBQUcsSUFBSSxDQUFDLE9BQU8sV0FBVyxFQUFFLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUMxRixDQUFDO0lBRUQsVUFBVSxDQUFDLFVBQWtCLEVBQUUsT0FBZ0I7UUFDN0MsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSztZQUFFLE9BQU8sS0FBSyxDQUFDO1FBQy9DLE1BQU0sTUFBTSxHQUFHLElBQUksVUFBVSxFQUFFLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDekQsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FDbEIsR0FBRyxJQUFJLENBQUMsT0FBTyxhQUFhLFVBQVUsRUFBRSxFQUN4QyxFQUFFLE9BQU8sRUFBRSxFQUNYLEVBQUUsTUFBTSxFQUFFLENBQ1gsQ0FBQztJQUNKLENBQUM7K0dBNUJVLHVCQUF1Qiw0Q0FPeEIsZ0NBQWdDO21IQVAvQix1QkFBdUIsY0FEVixNQUFNOzs0RkFDbkIsdUJBQXVCO2tCQURuQyxVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRTs7MEJBTzdCLFFBQVE7OzBCQUNSLE1BQU07MkJBQUMsZ0NBQWdDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgT3B0aW9uYWwsIEluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSHR0cENsaWVudCwgSHR0cFBhcmFtcyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IE9ic2VydmFibGUsIEVNUFRZIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBWQUxURUNIX0NPTU1TX1BSRUZFUkVOQ0VTX0NPTkZJRyB9IGZyb20gJy4vY29uZmlnJztcbmltcG9ydCB7XG4gIExpc3RDb21tc1NldHRpbmdzUmVzcG9uc2UsXG4gIFNldENvbW1zRW5hYmxlZFJlc3BvbnNlLFxuICBWYWx0ZWNoQ29tbXNQcmVmZXJlbmNlc0NvbmZpZyxcbn0gZnJvbSAnLi90eXBlcyc7XG5cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgQ29tbXNQcmVmZXJlbmNlc1NlcnZpY2Uge1xuICBwcml2YXRlIHJlYWRvbmx5IGJhc2VVcmw6IHN0cmluZyB8IG51bGw7XG4gIHByaXZhdGUgcmVhZG9ubHkgYXBwSWQ6IHN0cmluZyB8IG51bGw7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBodHRwOiBIdHRwQ2xpZW50LFxuICAgIEBPcHRpb25hbCgpXG4gICAgQEluamVjdChWQUxURUNIX0NPTU1TX1BSRUZFUkVOQ0VTX0NPTkZJRylcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNvbmZpZzogVmFsdGVjaENvbW1zUHJlZmVyZW5jZXNDb25maWcgfCBudWxsXG4gICkge1xuICAgIHRoaXMuYmFzZVVybCA9IGNvbmZpZyA/IGAke2NvbmZpZy5hcGlVcmx9L3YyL2NvbW1zLXByZWZlcmVuY2VzYCA6IG51bGw7XG4gICAgdGhpcy5hcHBJZCA9IGNvbmZpZz8uYXBwSWQgPz8gbnVsbDtcbiAgfVxuXG4gIGxpc3QoKTogT2JzZXJ2YWJsZTxMaXN0Q29tbXNTZXR0aW5nc1Jlc3BvbnNlPiB7XG4gICAgaWYgKCF0aGlzLmJhc2VVcmwgfHwgIXRoaXMuYXBwSWQpIHJldHVybiBFTVBUWTtcbiAgICBjb25zdCBwYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpLnNldCgnYXBwSWQnLCB0aGlzLmFwcElkKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxMaXN0Q29tbXNTZXR0aW5nc1Jlc3BvbnNlPihgJHt0aGlzLmJhc2VVcmx9L3NldHRpbmdzYCwgeyBwYXJhbXMgfSk7XG4gIH1cblxuICBzZXRFbmFibGVkKHRlbXBsYXRlSWQ6IHN0cmluZywgZW5hYmxlZDogYm9vbGVhbik6IE9ic2VydmFibGU8U2V0Q29tbXNFbmFibGVkUmVzcG9uc2U+IHtcbiAgICBpZiAoIXRoaXMuYmFzZVVybCB8fCAhdGhpcy5hcHBJZCkgcmV0dXJuIEVNUFRZO1xuICAgIGNvbnN0IHBhcmFtcyA9IG5ldyBIdHRwUGFyYW1zKCkuc2V0KCdhcHBJZCcsIHRoaXMuYXBwSWQpO1xuICAgIHJldHVybiB0aGlzLmh0dHAucHV0PFNldENvbW1zRW5hYmxlZFJlc3BvbnNlPihcbiAgICAgIGAke3RoaXMuYmFzZVVybH0vc2V0dGluZ3MvJHt0ZW1wbGF0ZUlkfWAsXG4gICAgICB7IGVuYWJsZWQgfSxcbiAgICAgIHsgcGFyYW1zIH1cbiAgICApO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,18 @@
1
+ import { InjectionToken, makeEnvironmentProviders } from '@angular/core';
2
+ export const VALTECH_COMMS_PREFERENCES_CONFIG = new InjectionToken('ValtechCommsPreferencesConfig');
3
+ /**
4
+ * Provee el servicio de comms-preferences (ADR-089) a la aplicacion Angular.
5
+ *
6
+ * @example
7
+ * bootstrapApplication(AppComponent, {
8
+ * providers: [
9
+ * provideValtechCommsPreferences({ apiUrl: environment.apiUrl, appId: 'bingo' }),
10
+ * ],
11
+ * });
12
+ */
13
+ export function provideValtechCommsPreferences(config) {
14
+ return makeEnvironmentProviders([
15
+ { provide: VALTECH_COMMS_PREFERENCES_CONFIG, useValue: config },
16
+ ]);
17
+ }
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9zZXJ2aWNlcy9jb21tcy1wcmVmZXJlbmNlcy9jb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUF3QixjQUFjLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHL0YsTUFBTSxDQUFDLE1BQU0sZ0NBQWdDLEdBQUcsSUFBSSxjQUFjLENBQ2hFLCtCQUErQixDQUNoQyxDQUFDO0FBRUY7Ozs7Ozs7OztHQVNHO0FBQ0gsTUFBTSxVQUFVLDhCQUE4QixDQUM1QyxNQUFxQztJQUVyQyxPQUFPLHdCQUF3QixDQUFDO1FBQzlCLEVBQUUsT0FBTyxFQUFFLGdDQUFnQyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUU7S0FDaEUsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVudmlyb25tZW50UHJvdmlkZXJzLCBJbmplY3Rpb25Ub2tlbiwgbWFrZUVudmlyb25tZW50UHJvdmlkZXJzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBWYWx0ZWNoQ29tbXNQcmVmZXJlbmNlc0NvbmZpZyB9IGZyb20gJy4vdHlwZXMnO1xuXG5leHBvcnQgY29uc3QgVkFMVEVDSF9DT01NU19QUkVGRVJFTkNFU19DT05GSUcgPSBuZXcgSW5qZWN0aW9uVG9rZW48VmFsdGVjaENvbW1zUHJlZmVyZW5jZXNDb25maWc+KFxuICAnVmFsdGVjaENvbW1zUHJlZmVyZW5jZXNDb25maWcnXG4pO1xuXG4vKipcbiAqIFByb3ZlZSBlbCBzZXJ2aWNpbyBkZSBjb21tcy1wcmVmZXJlbmNlcyAoQURSLTA4OSkgYSBsYSBhcGxpY2FjaW9uIEFuZ3VsYXIuXG4gKlxuICogQGV4YW1wbGVcbiAqIGJvb3RzdHJhcEFwcGxpY2F0aW9uKEFwcENvbXBvbmVudCwge1xuICogICBwcm92aWRlcnM6IFtcbiAqICAgICBwcm92aWRlVmFsdGVjaENvbW1zUHJlZmVyZW5jZXMoeyBhcGlVcmw6IGVudmlyb25tZW50LmFwaVVybCwgYXBwSWQ6ICdiaW5nbycgfSksXG4gKiAgIF0sXG4gKiB9KTtcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByb3ZpZGVWYWx0ZWNoQ29tbXNQcmVmZXJlbmNlcyhcbiAgY29uZmlnOiBWYWx0ZWNoQ29tbXNQcmVmZXJlbmNlc0NvbmZpZ1xuKTogRW52aXJvbm1lbnRQcm92aWRlcnMge1xuICByZXR1cm4gbWFrZUVudmlyb25tZW50UHJvdmlkZXJzKFtcbiAgICB7IHByb3ZpZGU6IFZBTFRFQ0hfQ09NTVNfUFJFRkVSRU5DRVNfQ09ORklHLCB1c2VWYWx1ZTogY29uZmlnIH0sXG4gIF0pO1xufVxuIl19
@@ -0,0 +1,4 @@
1
+ export * from './comms-preferences.service';
2
+ export * from './config';
3
+ export * from './types';
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL3NlcnZpY2VzL2NvbW1zLXByZWZlcmVuY2VzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsNkJBQTZCLENBQUM7QUFDNUMsY0FBYyxVQUFVLENBQUM7QUFDekIsY0FBYyxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2NvbW1zLXByZWZlcmVuY2VzLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25maWcnO1xuZXhwb3J0ICogZnJvbSAnLi90eXBlcyc7XG4iXX0=
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL3NlcnZpY2VzL2NvbW1zLXByZWZlcmVuY2VzL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgaW50ZXJmYWNlIFZhbHRlY2hDb21tc1ByZWZlcmVuY2VzQ29uZmlnIHtcbiAgYXBpVXJsOiBzdHJpbmc7XG4gIGFwcElkOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tbXVuaWNhdGlvblNldHRpbmcge1xuICB0ZW1wbGF0ZUlkOiBzdHJpbmc7XG4gIGxhYmVsOiBzdHJpbmc7XG4gIGxhYmVsRW46IHN0cmluZztcbiAgYXVkaWVuY2U6IHN0cmluZztcbiAgZW5hYmxlZDogYm9vbGVhbjtcbiAgaXNEZWZhdWx0OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIExpc3RDb21tc1NldHRpbmdzUmVzcG9uc2Uge1xuICBvcGVyYXRpb25JZDogc3RyaW5nO1xuICBzZXR0aW5nczogQ29tbXVuaWNhdGlvblNldHRpbmdbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTZXRDb21tc0VuYWJsZWRSZXNwb25zZSB7XG4gIG9wZXJhdGlvbklkOiBzdHJpbmc7XG4gIHRlbXBsYXRlSWQ6IHN0cmluZztcbiAgZW5hYmxlZDogYm9vbGVhbjtcbn1cbiJdfQ==
@@ -2,5 +2,5 @@
2
2
  * Current version of valtech-components.
3
3
  * This is automatically updated during the publish process.
4
4
  */
5
- export const VERSION = '4.0.969';
6
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvdmVyc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDdXJyZW50IHZlcnNpb24gb2YgdmFsdGVjaC1jb21wb25lbnRzLlxuICogVGhpcyBpcyBhdXRvbWF0aWNhbGx5IHVwZGF0ZWQgZHVyaW5nIHRoZSBwdWJsaXNoIHByb2Nlc3MuXG4gKi9cbmV4cG9ydCBjb25zdCBWRVJTSU9OID0gJzQuMC45NjknO1xuIl19
5
+ export const VERSION = '4.0.971';
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvdmVyc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDdXJyZW50IHZlcnNpb24gb2YgdmFsdGVjaC1jb21wb25lbnRzLlxuICogVGhpcyBpcyBhdXRvbWF0aWNhbGx5IHVwZGF0ZWQgZHVyaW5nIHRoZSBwdWJsaXNoIHByb2Nlc3MuXG4gKi9cbmV4cG9ydCBjb25zdCBWRVJTSU9OID0gJzQuMC45NzEnO1xuIl19