@consentx/angular 1.0.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.
@@ -0,0 +1,51 @@
1
+ import { APP_INITIALIZER, makeEnvironmentProviders, } from '@angular/core';
2
+ import { CONSENTX_CONFIG } from './consentx.tokens';
3
+ import { ConsentXService } from './consentx.service';
4
+ /**
5
+ * Factory used by APP_INITIALIZER. Initialising on app boot means the embed is
6
+ * injected once the Angular application is ready (i.e. after hydration on SSR),
7
+ * which is the SPA-safe load point the Connect spec recommends so the
8
+ * framework's DOM reconciliation does not strip the appended
9
+ * `#consentx-cookie-consent` div.
10
+ */
11
+ export function consentxInitFactory(service) {
12
+ return () => service.init();
13
+ }
14
+ /**
15
+ * Standalone-app provider. Use in `bootstrapApplication(...)`:
16
+ *
17
+ * ```ts
18
+ * bootstrapApplication(AppComponent, {
19
+ * providers: [provideConsentX({ siteKey: 'YOUR_SITE_KEY' })],
20
+ * });
21
+ * ```
22
+ */
23
+ export function provideConsentX(config) {
24
+ return makeEnvironmentProviders([
25
+ { provide: CONSENTX_CONFIG, useValue: config },
26
+ ConsentXService,
27
+ {
28
+ provide: APP_INITIALIZER,
29
+ multi: true,
30
+ useFactory: consentxInitFactory,
31
+ deps: [ConsentXService],
32
+ },
33
+ ]);
34
+ }
35
+ /**
36
+ * Internal: the providers `ConsentXModule.forRoot()` contributes. Kept separate
37
+ * so both the NgModule and the standalone API share one source of truth.
38
+ */
39
+ export function consentxRootProviders(config) {
40
+ return [
41
+ { provide: CONSENTX_CONFIG, useValue: config },
42
+ ConsentXService,
43
+ {
44
+ provide: APP_INITIALIZER,
45
+ multi: true,
46
+ useFactory: consentxInitFactory,
47
+ deps: [ConsentXService],
48
+ },
49
+ ];
50
+ }
51
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc2VudHgucHJvdmlkZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9jb25zZW50eC5wcm92aWRlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLGVBQWUsRUFHZix3QkFBd0IsR0FDekIsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUdyRDs7Ozs7O0dBTUc7QUFDSCxNQUFNLFVBQVUsbUJBQW1CLENBQUMsT0FBd0I7SUFDMUQsT0FBTyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDOUIsQ0FBQztBQUVEOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxVQUFVLGVBQWUsQ0FBQyxNQUFzQjtJQUNwRCxPQUFPLHdCQUF3QixDQUFDO1FBQzlCLEVBQUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFO1FBQzlDLGVBQWU7UUFDZjtZQUNFLE9BQU8sRUFBRSxlQUFlO1lBQ3hCLEtBQUssRUFBRSxJQUFJO1lBQ1gsVUFBVSxFQUFFLG1CQUFtQjtZQUMvQixJQUFJLEVBQUUsQ0FBQyxlQUFlLENBQUM7U0FDeEI7S0FDRixDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLHFCQUFxQixDQUFDLE1BQXNCO0lBQzFELE9BQU87UUFDTCxFQUFFLE9BQU8sRUFBRSxlQUFlLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRTtRQUM5QyxlQUFlO1FBQ2Y7WUFDRSxPQUFPLEVBQUUsZUFBZTtZQUN4QixLQUFLLEVBQUUsSUFBSTtZQUNYLFVBQVUsRUFBRSxtQkFBbUI7WUFDL0IsSUFBSSxFQUFFLENBQUMsZUFBZSxDQUFDO1NBQ3hCO0tBQ0YsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBUFBfSU5JVElBTElaRVIsXG4gIEVudmlyb25tZW50UHJvdmlkZXJzLFxuICBQcm92aWRlcixcbiAgbWFrZUVudmlyb25tZW50UHJvdmlkZXJzLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgQ09OU0VOVFhfQ09ORklHIH0gZnJvbSAnLi9jb25zZW50eC50b2tlbnMnO1xuaW1wb3J0IHsgQ29uc2VudFhTZXJ2aWNlIH0gZnJvbSAnLi9jb25zZW50eC5zZXJ2aWNlJztcbmltcG9ydCB7IENvbnNlbnRYQ29uZmlnIH0gZnJvbSAnLi9jb25zZW50eC50eXBlcyc7XG5cbi8qKlxuICogRmFjdG9yeSB1c2VkIGJ5IEFQUF9JTklUSUFMSVpFUi4gSW5pdGlhbGlzaW5nIG9uIGFwcCBib290IG1lYW5zIHRoZSBlbWJlZCBpc1xuICogaW5qZWN0ZWQgb25jZSB0aGUgQW5ndWxhciBhcHBsaWNhdGlvbiBpcyByZWFkeSAoaS5lLiBhZnRlciBoeWRyYXRpb24gb24gU1NSKSxcbiAqIHdoaWNoIGlzIHRoZSBTUEEtc2FmZSBsb2FkIHBvaW50IHRoZSBDb25uZWN0IHNwZWMgcmVjb21tZW5kcyBzbyB0aGVcbiAqIGZyYW1ld29yaydzIERPTSByZWNvbmNpbGlhdGlvbiBkb2VzIG5vdCBzdHJpcCB0aGUgYXBwZW5kZWRcbiAqIGAjY29uc2VudHgtY29va2llLWNvbnNlbnRgIGRpdi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbnNlbnR4SW5pdEZhY3Rvcnkoc2VydmljZTogQ29uc2VudFhTZXJ2aWNlKTogKCkgPT4gdm9pZCB7XG4gIHJldHVybiAoKSA9PiBzZXJ2aWNlLmluaXQoKTtcbn1cblxuLyoqXG4gKiBTdGFuZGFsb25lLWFwcCBwcm92aWRlci4gVXNlIGluIGBib290c3RyYXBBcHBsaWNhdGlvbiguLi4pYDpcbiAqXG4gKiBgYGB0c1xuICogYm9vdHN0cmFwQXBwbGljYXRpb24oQXBwQ29tcG9uZW50LCB7XG4gKiAgIHByb3ZpZGVyczogW3Byb3ZpZGVDb25zZW50WCh7IHNpdGVLZXk6ICdZT1VSX1NJVEVfS0VZJyB9KV0sXG4gKiB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlkZUNvbnNlbnRYKGNvbmZpZzogQ29uc2VudFhDb25maWcpOiBFbnZpcm9ubWVudFByb3ZpZGVycyB7XG4gIHJldHVybiBtYWtlRW52aXJvbm1lbnRQcm92aWRlcnMoW1xuICAgIHsgcHJvdmlkZTogQ09OU0VOVFhfQ09ORklHLCB1c2VWYWx1ZTogY29uZmlnIH0sXG4gICAgQ29uc2VudFhTZXJ2aWNlLFxuICAgIHtcbiAgICAgIHByb3ZpZGU6IEFQUF9JTklUSUFMSVpFUixcbiAgICAgIG11bHRpOiB0cnVlLFxuICAgICAgdXNlRmFjdG9yeTogY29uc2VudHhJbml0RmFjdG9yeSxcbiAgICAgIGRlcHM6IFtDb25zZW50WFNlcnZpY2VdLFxuICAgIH0sXG4gIF0pO1xufVxuXG4vKipcbiAqIEludGVybmFsOiB0aGUgcHJvdmlkZXJzIGBDb25zZW50WE1vZHVsZS5mb3JSb290KClgIGNvbnRyaWJ1dGVzLiBLZXB0IHNlcGFyYXRlXG4gKiBzbyBib3RoIHRoZSBOZ01vZHVsZSBhbmQgdGhlIHN0YW5kYWxvbmUgQVBJIHNoYXJlIG9uZSBzb3VyY2Ugb2YgdHJ1dGguXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb25zZW50eFJvb3RQcm92aWRlcnMoY29uZmlnOiBDb25zZW50WENvbmZpZyk6IFByb3ZpZGVyW10ge1xuICByZXR1cm4gW1xuICAgIHsgcHJvdmlkZTogQ09OU0VOVFhfQ09ORklHLCB1c2VWYWx1ZTogY29uZmlnIH0sXG4gICAgQ29uc2VudFhTZXJ2aWNlLFxuICAgIHtcbiAgICAgIHByb3ZpZGU6IEFQUF9JTklUSUFMSVpFUixcbiAgICAgIG11bHRpOiB0cnVlLFxuICAgICAgdXNlRmFjdG9yeTogY29uc2VudHhJbml0RmFjdG9yeSxcbiAgICAgIGRlcHM6IFtDb25zZW50WFNlcnZpY2VdLFxuICAgIH0sXG4gIF07XG59XG4iXX0=
@@ -0,0 +1,230 @@
1
+ import { Inject, Injectable, Optional, PLATFORM_ID, } from '@angular/core';
2
+ import { DOCUMENT, isPlatformBrowser } from '@angular/common';
3
+ import { BehaviorSubject } from 'rxjs';
4
+ import { distinctUntilChanged, map } from 'rxjs/operators';
5
+ import { CONSENTX_CONFIG } from './consentx.tokens';
6
+ import { CONSENTX_DEFAULT_APP_URL, } from './consentx.types';
7
+ import * as i0 from "@angular/core";
8
+ const SCRIPT_ID = 'consentx-embed';
9
+ const CONSENT_MODE_ID = 'consentx-consent-mode';
10
+ /**
11
+ * Injects the ConsentX embed script (`/api/SITE_KEY/embed.js`) into `<head>`
12
+ * and exposes the visitor's consent state, derived from the widget's
13
+ * `cx:consent` events.
14
+ *
15
+ * Site-key model (Connect spec, Model C): no redirect handshake. The Site Key
16
+ * is supplied via configuration; this service only performs clean embed
17
+ * injection plus a consent hook.
18
+ *
19
+ * The service is `providedIn: 'root'` so it is a singleton across the app. It
20
+ * is SSR-safe: all DOM access is guarded behind `isPlatformBrowser`, so it is a
21
+ * no-op on the server and runs once the app boots in the browser.
22
+ */
23
+ export class ConsentXService {
24
+ config;
25
+ document;
26
+ zone;
27
+ appUrl;
28
+ isBrowser;
29
+ listenerBound = false;
30
+ boundConsentListener;
31
+ stateSubject = new BehaviorSubject({
32
+ loaded: false,
33
+ decided: false,
34
+ granted: [],
35
+ detail: null,
36
+ });
37
+ /** Full consent state as an observable. Emits an initial snapshot. */
38
+ state$ = this.stateSubject.asObservable();
39
+ /** Convenience stream of the granted category slugs. */
40
+ granted$ = this.state$.pipe(map((s) => s.granted), distinctUntilChanged((a, b) => a.length === b.length && a.every((v, i) => v === b[i])));
41
+ constructor(config, platformId, document, zone) {
42
+ this.config = config;
43
+ this.document = document;
44
+ this.zone = zone;
45
+ this.isBrowser = isPlatformBrowser(platformId);
46
+ this.appUrl = this.normalizeAppUrl(this.config?.appUrl);
47
+ if (!this.config?.siteKey) {
48
+ // Misconfiguration is loud but non-fatal: the app keeps working without
49
+ // the banner instead of crashing bootstrap.
50
+ // eslint-disable-next-line no-console
51
+ console.error('[ConsentX] No siteKey provided. Pass { siteKey } to ConsentXModule.forRoot() ' +
52
+ 'or provideConsentX(). Copy the Site Key from the ConsentX dashboard -> ' +
53
+ 'Websites -> your site.');
54
+ }
55
+ }
56
+ /**
57
+ * Auto-init entry point. Called once during app initialisation (via an
58
+ * APP_INITIALIZER registered by the module/provider) unless `manualLoad` is
59
+ * set. Binds the consent listener and injects the embed.
60
+ */
61
+ init() {
62
+ if (!this.isBrowser) {
63
+ return;
64
+ }
65
+ this.bindConsentListener();
66
+ if (!this.config?.manualLoad) {
67
+ this.load();
68
+ }
69
+ }
70
+ /**
71
+ * Inject the ConsentX embed into `<head>`. Idempotent: a second call is a
72
+ * no-op if the script is already present. Safe to call manually when
73
+ * `manualLoad` is enabled (e.g. after a cookie-policy route is reached).
74
+ */
75
+ load() {
76
+ if (!this.isBrowser) {
77
+ return;
78
+ }
79
+ const siteKey = this.config?.siteKey?.trim();
80
+ if (!siteKey) {
81
+ return;
82
+ }
83
+ this.bindConsentListener();
84
+ if (this.config?.consentMode) {
85
+ this.injectConsentModeDefaults();
86
+ }
87
+ // Expose the key the way embed.js expects (window.consentx_key), matching
88
+ // the canonical embed contract.
89
+ this.document.defaultView.consentx_key = siteKey;
90
+ if (this.document.getElementById(SCRIPT_ID)) {
91
+ // Already injected — make sure the loaded flag reflects reality.
92
+ this.patchState({ loaded: true });
93
+ return;
94
+ }
95
+ const head = this.document.head || this.document.getElementsByTagName('head')[0];
96
+ if (!head) {
97
+ return;
98
+ }
99
+ const script = this.document.createElement('script');
100
+ script.id = SCRIPT_ID;
101
+ script.type = 'module';
102
+ script.src = `${this.appUrl}/api/${encodeURIComponent(siteKey)}/embed.js`;
103
+ script.setAttribute('data-consentx', siteKey);
104
+ script.async = true;
105
+ script.addEventListener('load', () => {
106
+ this.zone.run(() => this.patchState({ loaded: true }));
107
+ });
108
+ script.addEventListener('error', () => {
109
+ // eslint-disable-next-line no-console
110
+ console.error(`[ConsentX] Failed to load embed from ${script.src}`);
111
+ });
112
+ head.appendChild(script);
113
+ }
114
+ /**
115
+ * Open the ConsentX preferences dialog. Requires the embed to have loaded and
116
+ * exposed `window.ConsentX`. Returns `true` if the call was dispatched.
117
+ */
118
+ openPreferences() {
119
+ if (!this.isBrowser) {
120
+ return false;
121
+ }
122
+ const api = this.document.defaultView?.ConsentX;
123
+ if (api && typeof api.open === 'function') {
124
+ api.open();
125
+ return true;
126
+ }
127
+ return false;
128
+ }
129
+ /** Latest granted category slugs (synchronous snapshot). */
130
+ getGranted() {
131
+ return this.stateSubject.value.granted;
132
+ }
133
+ /**
134
+ * Whether the visitor has granted a specific consent category slug, e.g.
135
+ * `hasConsent('analytics')`.
136
+ */
137
+ hasConsent(slug) {
138
+ return this.stateSubject.value.granted.includes(slug);
139
+ }
140
+ /** Current full state snapshot (synchronous). */
141
+ getState() {
142
+ return this.stateSubject.value;
143
+ }
144
+ ngOnDestroy() {
145
+ if (this.isBrowser && this.boundConsentListener) {
146
+ this.document.defaultView?.removeEventListener('cx:consent', this.boundConsentListener);
147
+ }
148
+ }
149
+ // --- internals -----------------------------------------------------------
150
+ /**
151
+ * Print the Google Consent Mode v2 denied-by-default stub before any
152
+ * analytics tag fires. Idempotent. Mirrors the canonical embed contract.
153
+ */
154
+ injectConsentModeDefaults() {
155
+ const win = this.document.defaultView;
156
+ if (!win) {
157
+ return;
158
+ }
159
+ if (this.document.getElementById(CONSENT_MODE_ID)) {
160
+ return;
161
+ }
162
+ win.dataLayer = win.dataLayer || [];
163
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
164
+ const gtag = (...args) => win.dataLayer.push(args);
165
+ gtag('consent', 'default', {
166
+ ad_storage: 'denied',
167
+ analytics_storage: 'denied',
168
+ ad_user_data: 'denied',
169
+ ad_personalization: 'denied',
170
+ functionality_storage: 'denied',
171
+ personalization_storage: 'denied',
172
+ security_storage: 'granted',
173
+ wait_for_update: 500,
174
+ });
175
+ // Marker so a second call (or a duplicate inline tag) is a no-op.
176
+ const marker = this.document.createElement('script');
177
+ marker.id = CONSENT_MODE_ID;
178
+ marker.type = 'application/json';
179
+ marker.textContent = '{"consentx":"consent-mode-defaults"}';
180
+ (this.document.head || this.document.documentElement).appendChild(marker);
181
+ }
182
+ /** Subscribe to the widget's `cx:consent` events exactly once. */
183
+ bindConsentListener() {
184
+ if (this.listenerBound || !this.isBrowser) {
185
+ return;
186
+ }
187
+ const win = this.document.defaultView;
188
+ if (!win) {
189
+ return;
190
+ }
191
+ this.boundConsentListener = (event) => {
192
+ const detail = event.detail;
193
+ const granted = Array.isArray(detail?.granted) ? detail.granted : [];
194
+ // Re-enter Angular so bound templates/observables update.
195
+ this.zone.run(() => this.patchState({
196
+ decided: true,
197
+ granted,
198
+ detail: detail ?? null,
199
+ }));
200
+ };
201
+ win.addEventListener('cx:consent', this.boundConsentListener);
202
+ this.listenerBound = true;
203
+ }
204
+ patchState(partial) {
205
+ this.stateSubject.next({ ...this.stateSubject.value, ...partial });
206
+ }
207
+ /** Resolve + sanitise the app host (strip trailing slash). */
208
+ normalizeAppUrl(url) {
209
+ const raw = (url || CONSENTX_DEFAULT_APP_URL).trim();
210
+ return raw.replace(/\/+$/, '');
211
+ }
212
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ConsentXService, deps: [{ token: CONSENTX_CONFIG, optional: true }, { token: PLATFORM_ID }, { token: DOCUMENT }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Injectable });
213
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ConsentXService, providedIn: 'root' });
214
+ }
215
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ConsentXService, decorators: [{
216
+ type: Injectable,
217
+ args: [{ providedIn: 'root' }]
218
+ }], ctorParameters: () => [{ type: undefined, decorators: [{
219
+ type: Optional
220
+ }, {
221
+ type: Inject,
222
+ args: [CONSENTX_CONFIG]
223
+ }] }, { type: undefined, decorators: [{
224
+ type: Inject,
225
+ args: [PLATFORM_ID]
226
+ }] }, { type: Document, decorators: [{
227
+ type: Inject,
228
+ args: [DOCUMENT]
229
+ }] }, { type: i0.NgZone }] });
230
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc2VudHguc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvY29uc2VudHguc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsTUFBTSxFQUNOLFVBQVUsRUFHVixRQUFRLEVBQ1IsV0FBVyxHQUNaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxRQUFRLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsZUFBZSxFQUFjLE1BQU0sTUFBTSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUUzRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDcEQsT0FBTyxFQUNMLHdCQUF3QixHQUt6QixNQUFNLGtCQUFrQixDQUFDOztBQUUxQixNQUFNLFNBQVMsR0FBRyxnQkFBZ0IsQ0FBQztBQUNuQyxNQUFNLGVBQWUsR0FBRyx1QkFBdUIsQ0FBQztBQUVoRDs7Ozs7Ozs7Ozs7O0dBWUc7QUFFSCxNQUFNLE9BQU8sZUFBZTtJQXVCOEI7SUFFbkI7SUFDbEI7SUF6QkYsTUFBTSxDQUFTO0lBQ2YsU0FBUyxDQUFVO0lBQzVCLGFBQWEsR0FBRyxLQUFLLENBQUM7SUFDdEIsb0JBQW9CLENBQTBCO0lBRXJDLFlBQVksR0FBRyxJQUFJLGVBQWUsQ0FBZ0I7UUFDakUsTUFBTSxFQUFFLEtBQUs7UUFDYixPQUFPLEVBQUUsS0FBSztRQUNkLE9BQU8sRUFBRSxFQUFFO1FBQ1gsTUFBTSxFQUFFLElBQUk7S0FDYixDQUFDLENBQUM7SUFFSCxzRUFBc0U7SUFDN0QsTUFBTSxHQUE4QixJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBRTlFLHdEQUF3RDtJQUMvQyxRQUFRLEdBQStCLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUM5RCxH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QU8sRUFBRSxJQUFJO2dCQUNiLE9BQU87Z0JBQ1AsTUFBTSxFQUFFLE1BQU0sSUFBSSxJQUFJO2FBQ3ZCLENBQUMsQ0FDSCxDQUFDO1FBQ0osQ0FBQyxDQUFDO1FBQ0YsR0FBRyxDQUFDLGdCQUFnQixDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsb0JBQXFDLENBQUMsQ0FBQztRQUMvRSxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztJQUM1QixDQUFDO0lBRU8sVUFBVSxDQUFDLE9BQStCO1FBQ2hELElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxHQUFHLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDckUsQ0FBQztJQUVELDhEQUE4RDtJQUN0RCxlQUFlLENBQUMsR0FBWTtRQUNsQyxNQUFNLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSx3QkFBd0IsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3JELE9BQU8sR0FBRyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDakMsQ0FBQzt3R0E5TlUsZUFBZSxrQkF1QkosZUFBZSw2QkFDM0IsV0FBVyxhQUNYLFFBQVE7NEdBekJQLGVBQWUsY0FERixNQUFNOzs0RkFDbkIsZUFBZTtrQkFEM0IsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUU7OzBCQXdCN0IsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxlQUFlOzswQkFDbEMsTUFBTTsyQkFBQyxXQUFXOzswQkFDbEIsTUFBTTsyQkFBQyxRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgSW5qZWN0LFxuICBJbmplY3RhYmxlLFxuICBOZ1pvbmUsXG4gIE9uRGVzdHJveSxcbiAgT3B0aW9uYWwsXG4gIFBMQVRGT1JNX0lELFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERPQ1VNRU5ULCBpc1BsYXRmb3JtQnJvd3NlciB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IENPTlNFTlRYX0NPTkZJRyB9IGZyb20gJy4vY29uc2VudHgudG9rZW5zJztcbmltcG9ydCB7XG4gIENPTlNFTlRYX0RFRkFVTFRfQVBQX1VSTCxcbiAgQ29uc2VudEdyYW50ZWQsXG4gIENvbnNlbnRYQ29uZmlnLFxuICBDb25zZW50WENvbnNlbnREZXRhaWwsXG4gIENvbnNlbnRYU3RhdGUsXG59IGZyb20gJy4vY29uc2VudHgudHlwZXMnO1xuXG5jb25zdCBTQ1JJUFRfSUQgPSAnY29uc2VudHgtZW1iZWQnO1xuY29uc3QgQ09OU0VOVF9NT0RFX0lEID0gJ2NvbnNlbnR4LWNvbnNlbnQtbW9kZSc7XG5cbi8qKlxuICogSW5qZWN0cyB0aGUgQ29uc2VudFggZW1iZWQgc2NyaXB0IChgL2FwaS9TSVRFX0tFWS9lbWJlZC5qc2ApIGludG8gYDxoZWFkPmBcbiAqIGFuZCBleHBvc2VzIHRoZSB2aXNpdG9yJ3MgY29uc2VudCBzdGF0ZSwgZGVyaXZlZCBmcm9tIHRoZSB3aWRnZXQnc1xuICogYGN4OmNvbnNlbnRgIGV2ZW50cy5cbiAqXG4gKiBTaXRlLWtleSBtb2RlbCAoQ29ubmVjdCBzcGVjLCBNb2RlbCBDKTogbm8gcmVkaXJlY3QgaGFuZHNoYWtlLiBUaGUgU2l0ZSBLZXlcbiAqIGlzIHN1cHBsaWVkIHZpYSBjb25maWd1cmF0aW9uOyB0aGlzIHNlcnZpY2Ugb25seSBwZXJmb3JtcyBjbGVhbiBlbWJlZFxuICogaW5qZWN0aW9uIHBsdXMgYSBjb25zZW50IGhvb2suXG4gKlxuICogVGhlIHNlcnZpY2UgaXMgYHByb3ZpZGVkSW46ICdyb290J2Agc28gaXQgaXMgYSBzaW5nbGV0b24gYWNyb3NzIHRoZSBhcHAuIEl0XG4gKiBpcyBTU1Itc2FmZTogYWxsIERPTSBhY2Nlc3MgaXMgZ3VhcmRlZCBiZWhpbmQgYGlzUGxhdGZvcm1Ccm93c2VyYCwgc28gaXQgaXMgYVxuICogbm8tb3Agb24gdGhlIHNlcnZlciBhbmQgcnVucyBvbmNlIHRoZSBhcHAgYm9vdHMgaW4gdGhlIGJyb3dzZXIuXG4gKi9cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgQ29uc2VudFhTZXJ2aWNlIGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgcHJpdmF0ZSByZWFkb25seSBhcHBVcmw6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBpc0Jyb3dzZXI6IGJvb2xlYW47XG4gIHByaXZhdGUgbGlzdGVuZXJCb3VuZCA9IGZhbHNlO1xuICBwcml2YXRlIGJvdW5kQ29uc2VudExpc3RlbmVyPzogKGV2ZW50OiBFdmVudCkgPT4gdm9pZDtcblxuICBwcml2YXRlIHJlYWRvbmx5IHN0YXRlU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Q29uc2VudFhTdGF0ZT4oe1xuICAgIGxvYWRlZDogZmFsc2UsXG4gICAgZGVjaWRlZDogZmFsc2UsXG4gICAgZ3JhbnRlZDogW10sXG4gICAgZGV0YWlsOiBudWxsLFxuICB9KTtcblxuICAvKiogRnVsbCBjb25zZW50IHN0YXRlIGFzIGFuIG9ic2VydmFibGUuIEVtaXRzIGFuIGluaXRpYWwgc25hcHNob3QuICovXG4gIHJlYWRvbmx5IHN0YXRlJDogT2JzZXJ2YWJsZTxDb25zZW50WFN0YXRlPiA9IHRoaXMuc3RhdGVTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuXG4gIC8qKiBDb252ZW5pZW5jZSBzdHJlYW0gb2YgdGhlIGdyYW50ZWQgY2F0ZWdvcnkgc2x1Z3MuICovXG4gIHJlYWRvbmx5IGdyYW50ZWQkOiBPYnNlcnZhYmxlPENvbnNlbnRHcmFudGVkPiA9IHRoaXMuc3RhdGUkLnBpcGUoXG4gICAgbWFwKChzKSA9PiBzLmdyYW50ZWQpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKChhLCBiKSA9PiBhLmxlbmd0aCA9PT0gYi5sZW5ndGggJiYgYS5ldmVyeSgodiwgaSkgPT4gdiA9PT0gYltpXSkpLFxuICApO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoQ09OU0VOVFhfQ09ORklHKSBwcml2YXRlIHJlYWRvbmx5IGNvbmZpZzogQ29uc2VudFhDb25maWcgfCBudWxsLFxuICAgIEBJbmplY3QoUExBVEZPUk1fSUQpIHBsYXRmb3JtSWQ6IG9iamVjdCxcbiAgICBASW5qZWN0KERPQ1VNRU5UKSBwcml2YXRlIHJlYWRvbmx5IGRvY3VtZW50OiBEb2N1bWVudCxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHpvbmU6IE5nWm9uZSxcbiAgKSB7XG4gICAgdGhpcy5pc0Jyb3dzZXIgPSBpc1BsYXRmb3JtQnJvd3NlcihwbGF0Zm9ybUlkKTtcbiAgICB0aGlzLmFwcFVybCA9IHRoaXMubm9ybWFsaXplQXBwVXJsKHRoaXMuY29uZmlnPy5hcHBVcmwpO1xuXG4gICAgaWYgKCF0aGlzLmNvbmZpZz8uc2l0ZUtleSkge1xuICAgICAgLy8gTWlzY29uZmlndXJhdGlvbiBpcyBsb3VkIGJ1dCBub24tZmF0YWw6IHRoZSBhcHAga2VlcHMgd29ya2luZyB3aXRob3V0XG4gICAgICAvLyB0aGUgYmFubmVyIGluc3RlYWQgb2YgY3Jhc2hpbmcgYm9vdHN0cmFwLlxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICdbQ29uc2VudFhdIE5vIHNpdGVLZXkgcHJvdmlkZWQuIFBhc3MgeyBzaXRlS2V5IH0gdG8gQ29uc2VudFhNb2R1bGUuZm9yUm9vdCgpICcgK1xuICAgICAgICAgICdvciBwcm92aWRlQ29uc2VudFgoKS4gQ29weSB0aGUgU2l0ZSBLZXkgZnJvbSB0aGUgQ29uc2VudFggZGFzaGJvYXJkIC0+ICcgK1xuICAgICAgICAgICdXZWJzaXRlcyAtPiB5b3VyIHNpdGUuJyxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEF1dG8taW5pdCBlbnRyeSBwb2ludC4gQ2FsbGVkIG9uY2UgZHVyaW5nIGFwcCBpbml0aWFsaXNhdGlvbiAodmlhIGFuXG4gICAqIEFQUF9JTklUSUFMSVpFUiByZWdpc3RlcmVkIGJ5IHRoZSBtb2R1bGUvcHJvdmlkZXIpIHVubGVzcyBgbWFudWFsTG9hZGAgaXNcbiAgICogc2V0LiBCaW5kcyB0aGUgY29uc2VudCBsaXN0ZW5lciBhbmQgaW5qZWN0cyB0aGUgZW1iZWQuXG4gICAqL1xuICBpbml0KCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5pc0Jyb3dzZXIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5iaW5kQ29uc2VudExpc3RlbmVyKCk7XG4gICAgaWYgKCF0aGlzLmNvbmZpZz8ubWFudWFsTG9hZCkge1xuICAgICAgdGhpcy5sb2FkKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEluamVjdCB0aGUgQ29uc2VudFggZW1iZWQgaW50byBgPGhlYWQ+YC4gSWRlbXBvdGVudDogYSBzZWNvbmQgY2FsbCBpcyBhXG4gICAqIG5vLW9wIGlmIHRoZSBzY3JpcHQgaXMgYWxyZWFkeSBwcmVzZW50LiBTYWZlIHRvIGNhbGwgbWFudWFsbHkgd2hlblxuICAgKiBgbWFudWFsTG9hZGAgaXMgZW5hYmxlZCAoZS5nLiBhZnRlciBhIGNvb2tpZS1wb2xpY3kgcm91dGUgaXMgcmVhY2hlZCkuXG4gICAqL1xuICBsb2FkKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5pc0Jyb3dzZXIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgc2l0ZUtleSA9IHRoaXMuY29uZmlnPy5zaXRlS2V5Py50cmltKCk7XG4gICAgaWYgKCFzaXRlS2V5KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5iaW5kQ29uc2VudExpc3RlbmVyKCk7XG5cbiAgICBpZiAodGhpcy5jb25maWc/LmNvbnNlbnRNb2RlKSB7XG4gICAgICB0aGlzLmluamVjdENvbnNlbnRNb2RlRGVmYXVsdHMoKTtcbiAgICB9XG5cbiAgICAvLyBFeHBvc2UgdGhlIGtleSB0aGUgd2F5IGVtYmVkLmpzIGV4cGVjdHMgKHdpbmRvdy5jb25zZW50eF9rZXkpLCBtYXRjaGluZ1xuICAgIC8vIHRoZSBjYW5vbmljYWwgZW1iZWQgY29udHJhY3QuXG4gICAgdGhpcy5kb2N1bWVudC5kZWZhdWx0VmlldyEuY29uc2VudHhfa2V5ID0gc2l0ZUtleTtcblxuICAgIGlmICh0aGlzLmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFNDUklQVF9JRCkpIHtcbiAgICAgIC8vIEFscmVhZHkgaW5qZWN0ZWQg4oCUIG1ha2Ugc3VyZSB0aGUgbG9hZGVkIGZsYWcgcmVmbGVjdHMgcmVhbGl0eS5cbiAgICAgIHRoaXMucGF0Y2hTdGF0ZSh7IGxvYWRlZDogdHJ1ZSB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBoZWFkID0gdGhpcy5kb2N1bWVudC5oZWFkIHx8IHRoaXMuZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2hlYWQnKVswXTtcbiAgICBpZiAoIWhlYWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBzY3JpcHQgPSB0aGlzLmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpO1xuICAgIHNjcmlwdC5pZCA9IFNDUklQVF9JRDtcbiAgICBzY3JpcHQudHlwZSA9ICdtb2R1bGUnO1xuICAgIHNjcmlwdC5zcmMgPSBgJHt0aGlzLmFwcFVybH0vYXBpLyR7ZW5jb2RlVVJJQ29tcG9uZW50KHNpdGVLZXkpfS9lbWJlZC5qc2A7XG4gICAgc2NyaXB0LnNldEF0dHJpYnV0ZSgnZGF0YS1jb25zZW50eCcsIHNpdGVLZXkpO1xuICAgIHNjcmlwdC5hc3luYyA9IHRydWU7XG5cbiAgICBzY3JpcHQuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsICgpID0+IHtcbiAgICAgIHRoaXMuem9uZS5ydW4oKCkgPT4gdGhpcy5wYXRjaFN0YXRlKHsgbG9hZGVkOiB0cnVlIH0pKTtcbiAgICB9KTtcbiAgICBzY3JpcHQuYWRkRXZlbnRMaXN0ZW5lcignZXJyb3InLCAoKSA9PiB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgY29uc29sZS5lcnJvcihgW0NvbnNlbnRYXSBGYWlsZWQgdG8gbG9hZCBlbWJlZCBmcm9tICR7c2NyaXB0LnNyY31gKTtcbiAgICB9KTtcblxuICAgIGhlYWQuYXBwZW5kQ2hpbGQoc2NyaXB0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPcGVuIHRoZSBDb25zZW50WCBwcmVmZXJlbmNlcyBkaWFsb2cuIFJlcXVpcmVzIHRoZSBlbWJlZCB0byBoYXZlIGxvYWRlZCBhbmRcbiAgICogZXhwb3NlZCBgd2luZG93LkNvbnNlbnRYYC4gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGNhbGwgd2FzIGRpc3BhdGNoZWQuXG4gICAqL1xuICBvcGVuUHJlZmVyZW5jZXMoKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLmlzQnJvd3Nlcikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCBhcGkgPSB0aGlzLmRvY3VtZW50LmRlZmF1bHRWaWV3Py5Db25zZW50WDtcbiAgICBpZiAoYXBpICYmIHR5cGVvZiBhcGkub3BlbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgYXBpLm9wZW4oKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKiogTGF0ZXN0IGdyYW50ZWQgY2F0ZWdvcnkgc2x1Z3MgKHN5bmNocm9ub3VzIHNuYXBzaG90KS4gKi9cbiAgZ2V0R3JhbnRlZCgpOiBDb25zZW50R3JhbnRlZCB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdGVTdWJqZWN0LnZhbHVlLmdyYW50ZWQ7XG4gIH1cblxuICAvKipcbiAgICogV2hldGhlciB0aGUgdmlzaXRvciBoYXMgZ3JhbnRlZCBhIHNwZWNpZmljIGNvbnNlbnQgY2F0ZWdvcnkgc2x1ZywgZS5nLlxuICAgKiBgaGFzQ29uc2VudCgnYW5hbHl0aWNzJylgLlxuICAgKi9cbiAgaGFzQ29uc2VudChzbHVnOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zdGF0ZVN1YmplY3QudmFsdWUuZ3JhbnRlZC5pbmNsdWRlcyhzbHVnKTtcbiAgfVxuXG4gIC8qKiBDdXJyZW50IGZ1bGwgc3RhdGUgc25hcHNob3QgKHN5bmNocm9ub3VzKS4gKi9cbiAgZ2V0U3RhdGUoKTogQ29uc2VudFhTdGF0ZSB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdGVTdWJqZWN0LnZhbHVlO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNCcm93c2VyICYmIHRoaXMuYm91bmRDb25zZW50TGlzdGVuZXIpIHtcbiAgICAgIHRoaXMuZG9jdW1lbnQuZGVmYXVsdFZpZXc/LnJlbW92ZUV2ZW50TGlzdGVuZXIoXG4gICAgICAgICdjeDpjb25zZW50JyxcbiAgICAgICAgdGhpcy5ib3VuZENvbnNlbnRMaXN0ZW5lciBhcyBFdmVudExpc3RlbmVyLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvLyAtLS0gaW50ZXJuYWxzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgLyoqXG4gICAqIFByaW50IHRoZSBHb29nbGUgQ29uc2VudCBNb2RlIHYyIGRlbmllZC1ieS1kZWZhdWx0IHN0dWIgYmVmb3JlIGFueVxuICAgKiBhbmFseXRpY3MgdGFnIGZpcmVzLiBJZGVtcG90ZW50LiBNaXJyb3JzIHRoZSBjYW5vbmljYWwgZW1iZWQgY29udHJhY3QuXG4gICAqL1xuICBwcml2YXRlIGluamVjdENvbnNlbnRNb2RlRGVmYXVsdHMoKTogdm9pZCB7XG4gICAgY29uc3Qgd2luID0gdGhpcy5kb2N1bWVudC5kZWZhdWx0VmlldztcbiAgICBpZiAoIXdpbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5kb2N1bWVudC5nZXRFbGVtZW50QnlJZChDT05TRU5UX01PREVfSUQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHdpbi5kYXRhTGF5ZXIgPSB3aW4uZGF0YUxheWVyIHx8IFtdO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgY29uc3QgZ3RhZyA9ICguLi5hcmdzOiB1bmtub3duW10pID0+ICh3aW4uZGF0YUxheWVyIGFzIGFueVtdKS5wdXNoKGFyZ3MpO1xuICAgIGd0YWcoJ2NvbnNlbnQnLCAnZGVmYXVsdCcsIHtcbiAgICAgIGFkX3N0b3JhZ2U6ICdkZW5pZWQnLFxuICAgICAgYW5hbHl0aWNzX3N0b3JhZ2U6ICdkZW5pZWQnLFxuICAgICAgYWRfdXNlcl9kYXRhOiAnZGVuaWVkJyxcbiAgICAgIGFkX3BlcnNvbmFsaXphdGlvbjogJ2RlbmllZCcsXG4gICAgICBmdW5jdGlvbmFsaXR5X3N0b3JhZ2U6ICdkZW5pZWQnLFxuICAgICAgcGVyc29uYWxpemF0aW9uX3N0b3JhZ2U6ICdkZW5pZWQnLFxuICAgICAgc2VjdXJpdHlfc3RvcmFnZTogJ2dyYW50ZWQnLFxuICAgICAgd2FpdF9mb3JfdXBkYXRlOiA1MDAsXG4gICAgfSk7XG4gICAgLy8gTWFya2VyIHNvIGEgc2Vjb25kIGNhbGwgKG9yIGEgZHVwbGljYXRlIGlubGluZSB0YWcpIGlzIGEgbm8tb3AuXG4gICAgY29uc3QgbWFya2VyID0gdGhpcy5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTtcbiAgICBtYXJrZXIuaWQgPSBDT05TRU5UX01PREVfSUQ7XG4gICAgbWFya2VyLnR5cGUgPSAnYXBwbGljYXRpb24vanNvbic7XG4gICAgbWFya2VyLnRleHRDb250ZW50ID0gJ3tcImNvbnNlbnR4XCI6XCJjb25zZW50LW1vZGUtZGVmYXVsdHNcIn0nO1xuICAgICh0aGlzLmRvY3VtZW50LmhlYWQgfHwgdGhpcy5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpLmFwcGVuZENoaWxkKG1hcmtlcik7XG4gIH1cblxuICAvKiogU3Vic2NyaWJlIHRvIHRoZSB3aWRnZXQncyBgY3g6Y29uc2VudGAgZXZlbnRzIGV4YWN0bHkgb25jZS4gKi9cbiAgcHJpdmF0ZSBiaW5kQ29uc2VudExpc3RlbmVyKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmxpc3RlbmVyQm91bmQgfHwgIXRoaXMuaXNCcm93c2VyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHdpbiA9IHRoaXMuZG9jdW1lbnQuZGVmYXVsdFZpZXc7XG4gICAgaWYgKCF3aW4pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5ib3VuZENvbnNlbnRMaXN0ZW5lciA9IChldmVudDogRXZlbnQpID0+IHtcbiAgICAgIGNvbnN0IGRldGFpbCA9IChldmVudCBhcyBDdXN0b21FdmVudDxDb25zZW50WENvbnNlbnREZXRhaWw+KS5kZXRhaWw7XG4gICAgICBjb25zdCBncmFudGVkID0gQXJyYXkuaXNBcnJheShkZXRhaWw/LmdyYW50ZWQpID8gZGV0YWlsIS5ncmFudGVkIDogW107XG4gICAgICAvLyBSZS1lbnRlciBBbmd1bGFyIHNvIGJvdW5kIHRlbXBsYXRlcy9vYnNlcnZhYmxlcyB1cGRhdGUuXG4gICAgICB0aGlzLnpvbmUucnVuKCgpID0+XG4gICAgICAgIHRoaXMucGF0Y2hTdGF0ZSh7XG4gICAgICAgICAgZGVjaWRlZDogdHJ1ZSxcbiAgICAgICAgICBncmFudGVkLFxuICAgICAgICAgIGRldGFpbDogZGV0YWlsID8/IG51bGwsXG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgICB9O1xuICAgIHdpbi5hZGRFdmVudExpc3RlbmVyKCdjeDpjb25zZW50JywgdGhpcy5ib3VuZENvbnNlbnRMaXN0ZW5lciBhcyBFdmVudExpc3RlbmVyKTtcbiAgICB0aGlzLmxpc3RlbmVyQm91bmQgPSB0cnVlO1xuICB9XG5cbiAgcHJpdmF0ZSBwYXRjaFN0YXRlKHBhcnRpYWw6IFBhcnRpYWw8Q29uc2VudFhTdGF0ZT4pOiB2b2lkIHtcbiAgICB0aGlzLnN0YXRlU3ViamVjdC5uZXh0KHsgLi4udGhpcy5zdGF0ZVN1YmplY3QudmFsdWUsIC4uLnBhcnRpYWwgfSk7XG4gIH1cblxuICAvKiogUmVzb2x2ZSArIHNhbml0aXNlIHRoZSBhcHAgaG9zdCAoc3RyaXAgdHJhaWxpbmcgc2xhc2gpLiAqL1xuICBwcml2YXRlIG5vcm1hbGl6ZUFwcFVybCh1cmw/OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IHJhdyA9ICh1cmwgfHwgQ09OU0VOVFhfREVGQVVMVF9BUFBfVVJMKS50cmltKCk7XG4gICAgcmV0dXJuIHJhdy5yZXBsYWNlKC9cXC8rJC8sICcnKTtcbiAgfVxufVxuIl19
@@ -0,0 +1,7 @@
1
+ import { InjectionToken } from '@angular/core';
2
+ /**
3
+ * DI token carrying the resolved {@link ConsentXConfig}. Provided by
4
+ * `ConsentXModule.forRoot(...)` or `provideConsentX(...)`.
5
+ */
6
+ export const CONSENTX_CONFIG = new InjectionToken('CONSENTX_CONFIG');
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc2VudHgudG9rZW5zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9jb25zZW50eC50b2tlbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUcvQzs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsSUFBSSxjQUFjLENBQWlCLGlCQUFpQixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3Rpb25Ub2tlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29uc2VudFhDb25maWcgfSBmcm9tICcuL2NvbnNlbnR4LnR5cGVzJztcblxuLyoqXG4gKiBESSB0b2tlbiBjYXJyeWluZyB0aGUgcmVzb2x2ZWQge0BsaW5rIENvbnNlbnRYQ29uZmlnfS4gUHJvdmlkZWQgYnlcbiAqIGBDb25zZW50WE1vZHVsZS5mb3JSb290KC4uLilgIG9yIGBwcm92aWRlQ29uc2VudFgoLi4uKWAuXG4gKi9cbmV4cG9ydCBjb25zdCBDT05TRU5UWF9DT05GSUcgPSBuZXcgSW5qZWN0aW9uVG9rZW48Q29uc2VudFhDb25maWc+KCdDT05TRU5UWF9DT05GSUcnKTtcbiJdfQ==
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Public types for @consentx/angular.
3
+ *
4
+ * ConsentX runs on the site-key model (Model C in the Connect spec): the user
5
+ * pastes the Site Key copied from the ConsentX dashboard (Websites -> their
6
+ * site) and ensures their domain is on that site's allowlist. The embed then
7
+ * loads with no server-side handshake.
8
+ */
9
+ /** Default ConsentX application host (no trailing slash). */
10
+ export const CONSENTX_DEFAULT_APP_URL = 'https://app.consentx.io';
11
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc2VudHgudHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL2NvbnNlbnR4LnR5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7O0dBT0c7QUFFSCw2REFBNkQ7QUFDN0QsTUFBTSxDQUFDLE1BQU0sd0JBQXdCLEdBQUcseUJBQXlCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFB1YmxpYyB0eXBlcyBmb3IgQGNvbnNlbnR4L2FuZ3VsYXIuXG4gKlxuICogQ29uc2VudFggcnVucyBvbiB0aGUgc2l0ZS1rZXkgbW9kZWwgKE1vZGVsIEMgaW4gdGhlIENvbm5lY3Qgc3BlYyk6IHRoZSB1c2VyXG4gKiBwYXN0ZXMgdGhlIFNpdGUgS2V5IGNvcGllZCBmcm9tIHRoZSBDb25zZW50WCBkYXNoYm9hcmQgKFdlYnNpdGVzIC0+IHRoZWlyXG4gKiBzaXRlKSBhbmQgZW5zdXJlcyB0aGVpciBkb21haW4gaXMgb24gdGhhdCBzaXRlJ3MgYWxsb3dsaXN0LiBUaGUgZW1iZWQgdGhlblxuICogbG9hZHMgd2l0aCBubyBzZXJ2ZXItc2lkZSBoYW5kc2hha2UuXG4gKi9cblxuLyoqIERlZmF1bHQgQ29uc2VudFggYXBwbGljYXRpb24gaG9zdCAobm8gdHJhaWxpbmcgc2xhc2gpLiAqL1xuZXhwb3J0IGNvbnN0IENPTlNFTlRYX0RFRkFVTFRfQVBQX1VSTCA9ICdodHRwczovL2FwcC5jb25zZW50eC5pbyc7XG5cbi8qKlxuICogQ29uZmlndXJhdGlvbiBwYXNzZWQgdG8gYENvbnNlbnRYTW9kdWxlLmZvclJvb3QoLi4uKWAgKE5nTW9kdWxlIGFwcHMpIG9yXG4gKiBgcHJvdmlkZUNvbnNlbnRYKC4uLilgIChzdGFuZGFsb25lIGFwcHMpLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbnNlbnRYQ29uZmlnIHtcbiAgLyoqXG4gICAqIFRoZSBDb25zZW50WCBTaXRlIEtleSBmb3IgdGhpcyB3ZWJzaXRlLiBDb3B5IGl0IGZyb20gdGhlIENvbnNlbnRYXG4gICAqIGRhc2hib2FyZCAtPiBXZWJzaXRlcyAtPiB5b3VyIHNpdGUuIFJlcXVpcmVkLlxuICAgKi9cbiAgc2l0ZUtleTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBPdmVycmlkZSB0aGUgQ29uc2VudFggYXBwIGhvc3QgKHNjaGVtZSArIGhvc3QsIG5vIHRyYWlsaW5nIHNsYXNoKS5cbiAgICogRGVmYXVsdHMgdG8gYGh0dHBzOi8vYXBwLmNvbnNlbnR4LmlvYC4gVXNlIHRoaXMgZm9yIHN0YWdpbmcgaG9zdHMgc3VjaCBhc1xuICAgKiBgaHR0cHM6Ly9jb25zZW50eDEuc2F0eWFtcmFzdG9naS5jb21gLlxuICAgKi9cbiAgYXBwVXJsPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXaGVuIGB0cnVlYCwgdGhlIHNlcnZpY2UgcHJpbnRzIHRoZSBHb29nbGUgQ29uc2VudCBNb2RlIHYyXG4gICAqIGRlbmllZC1ieS1kZWZhdWx0IHN0dWIgaW50byBgPGhlYWQ+YCBiZWZvcmUgdGhlIGVtYmVkIGxvYWRzLCBzbyBhbnlcbiAgICogYW5hbHl0aWNzIHRhZyB0aGF0IGZpcmVzIGJlZm9yZSBjb25zZW50IHN0YXJ0cyBkZW5pZWQuIFRoZSBDb25zZW50WFxuICAgKiB3aWRnZXQgZW1pdHMgdGhlIGBndGFnKCdjb25zZW50JywndXBkYXRlJywuLi4pYCBjYWxscyBvbiB0aGUgdmlzaXRvcidzXG4gICAqIGNob2ljZS4gRGVmYXVsdHMgdG8gYGZhbHNlYC5cbiAgICovXG4gIGNvbnNlbnRNb2RlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogRGlzYWJsZSBhdXRvbWF0aWMgZW1iZWQgaW5qZWN0aW9uIG9uIGFwcCBpbml0LiBTZXQgdGhpcyB0byBgdHJ1ZWAgaWYgeW91XG4gICAqIHdhbnQgdG8gY2FsbCBgQ29uc2VudFhTZXJ2aWNlLmxvYWQoKWAgeW91cnNlbGYgYXQgYSBjdXN0b20gcG9pbnQuXG4gICAqIERlZmF1bHRzIHRvIGBmYWxzZWAgKGF1dG8taW5qZWN0IG9uIGluaXQpLlxuICAgKi9cbiAgbWFudWFsTG9hZD86IGJvb2xlYW47XG59XG5cbi8qKiBUaGUgY2F0ZWdvcnkgc2x1Z3MgYSB2aXNpdG9yIGhhcyBncmFudGVkLCBlLmcuIGBbJ2FuYWx5dGljcycsJ21hcmtldGluZyddYC4gKi9cbmV4cG9ydCB0eXBlIENvbnNlbnRHcmFudGVkID0gc3RyaW5nW107XG5cbi8qKlxuICogVGhlIGRldGFpbCBwYXlsb2FkIG9mIHRoZSBgY3g6Y29uc2VudGAgYnJvd3NlciBldmVudCBlbWl0dGVkIGJ5IHRoZSBDb25zZW50WFxuICogd2lkZ2V0LiBgZ3JhbnRlZGAgaXMgdGhlIGFycmF5IG9mIGdyYW50ZWQgY2F0ZWdvcnkgc2x1Z3MuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29uc2VudFhDb25zZW50RGV0YWlsIHtcbiAgZ3JhbnRlZDogQ29uc2VudEdyYW50ZWQ7XG4gIFtrZXk6IHN0cmluZ106IHVua25vd247XG59XG5cbi8qKiBTbmFwc2hvdCBvZiBjb25zZW50IHN0YXRlIGV4cG9zZWQgYnkgYENvbnNlbnRYU2VydmljZS5zdGF0ZSRgLiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb25zZW50WFN0YXRlIHtcbiAgLyoqIFdoZXRoZXIgdGhlIGVtYmVkIHNjcmlwdCBoYXMgbG9hZGVkIGludG8gdGhlIHBhZ2UuICovXG4gIGxvYWRlZDogYm9vbGVhbjtcbiAgLyoqIFdoZXRoZXIgYSBgY3g6Y29uc2VudGAgZXZlbnQgaGFzIGJlZW4gcmVjZWl2ZWQgdGhpcyBzZXNzaW9uLiAqL1xuICBkZWNpZGVkOiBib29sZWFuO1xuICAvKiogR3JhbnRlZCBjYXRlZ29yeSBzbHVncyBmcm9tIHRoZSBsYXRlc3QgYGN4OmNvbnNlbnRgIGV2ZW50LiAqL1xuICBncmFudGVkOiBDb25zZW50R3JhbnRlZDtcbiAgLyoqIFJhdyBkZXRhaWwgb2YgdGhlIGxhdGVzdCBgY3g6Y29uc2VudGAgZXZlbnQsIGlmIGFueS4gKi9cbiAgZGV0YWlsOiBDb25zZW50WENvbnNlbnREZXRhaWwgfCBudWxsO1xufVxuXG4vKipcbiAqIFRoZSBgd2luZG93LkNvbnNlbnRYYCBBUEkgdGhlIHdpZGdldCBleHBvc2VzIG9uY2UgbG9hZGVkLiBDdXJyZW50bHkgdXNlZCB0b1xuICogcmUtb3BlbiB0aGUgcHJlZmVyZW5jZXMgZGlhbG9nLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbnNlbnRYV2lkZ2V0QXBpIHtcbiAgb3Blbj86ICgpID0+IHZvaWQ7XG4gIFtrZXk6IHN0cmluZ106IHVua25vd247XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIFdpbmRvdyB7XG4gICAgLyoqIENhcnJpZXMgdGhlIGNvbm5lY3RlZCBTaXRlIEtleSBmb3IgdGhlIGVtYmVkIChyZWFkIGJ5IGVtYmVkLmpzKS4gKi9cbiAgICBjb25zZW50eF9rZXk/OiBzdHJpbmc7XG4gICAgLyoqIFRoZSB3aWRnZXQgQVBJLCBwcmVzZW50IG9uY2UgZW1iZWQuanMgaGFzIGluaXRpYWxpc2VkLiAqL1xuICAgIENvbnNlbnRYPzogQ29uc2VudFhXaWRnZXRBcGk7XG4gICAgZGF0YUxheWVyPzogdW5rbm93bltdO1xuICB9XG5cbiAgaW50ZXJmYWNlIFdpbmRvd0V2ZW50TWFwIHtcbiAgICAnY3g6Y29uc2VudCc6IEN1c3RvbUV2ZW50PENvbnNlbnRYQ29uc2VudERldGFpbD47XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,9 @@
1
+ /*
2
+ * Public API surface of @consentx/angular.
3
+ */
4
+ export { ConsentXModule } from './lib/consentx.module';
5
+ export { ConsentXService } from './lib/consentx.service';
6
+ export { provideConsentX, consentxInitFactory, consentxRootProviders, } from './lib/consentx.providers';
7
+ export { CONSENTX_CONFIG } from './lib/consentx.tokens';
8
+ export { CONSENTX_DEFAULT_APP_URL, } from './lib/consentx.types';
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN6RCxPQUFPLEVBQ0wsZUFBZSxFQUNmLG1CQUFtQixFQUNuQixxQkFBcUIsR0FDdEIsTUFBTSwwQkFBMEIsQ0FBQztBQUNsQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDeEQsT0FBTyxFQUNMLHdCQUF3QixHQU16QixNQUFNLHNCQUFzQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIFB1YmxpYyBBUEkgc3VyZmFjZSBvZiBAY29uc2VudHgvYW5ndWxhci5cbiAqL1xuXG5leHBvcnQgeyBDb25zZW50WE1vZHVsZSB9IGZyb20gJy4vbGliL2NvbnNlbnR4Lm1vZHVsZSc7XG5leHBvcnQgeyBDb25zZW50WFNlcnZpY2UgfSBmcm9tICcuL2xpYi9jb25zZW50eC5zZXJ2aWNlJztcbmV4cG9ydCB7XG4gIHByb3ZpZGVDb25zZW50WCxcbiAgY29uc2VudHhJbml0RmFjdG9yeSxcbiAgY29uc2VudHhSb290UHJvdmlkZXJzLFxufSBmcm9tICcuL2xpYi9jb25zZW50eC5wcm92aWRlcnMnO1xuZXhwb3J0IHsgQ09OU0VOVFhfQ09ORklHIH0gZnJvbSAnLi9saWIvY29uc2VudHgudG9rZW5zJztcbmV4cG9ydCB7XG4gIENPTlNFTlRYX0RFRkFVTFRfQVBQX1VSTCxcbiAgQ29uc2VudFhDb25maWcsXG4gIENvbnNlbnRYU3RhdGUsXG4gIENvbnNlbnRHcmFudGVkLFxuICBDb25zZW50WENvbnNlbnREZXRhaWwsXG4gIENvbnNlbnRYV2lkZ2V0QXBpLFxufSBmcm9tICcuL2xpYi9jb25zZW50eC50eXBlcyc7XG4iXX0=