@dereekb/dbx-analytics 10.2.0 → 11.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/action/analytics.action.directive.mjs +9 -16
- package/esm2022/lib/action/analytics.action.module.mjs +4 -4
- package/esm2022/lib/analytics/analytics.module.mjs +4 -4
- package/esm2022/lib/analytics/analytics.service.mjs +29 -28
- package/esm2022/lib/providers/segment/segment.listener.service.mjs +11 -9
- package/esm2022/lib/providers/segment/segment.module.mjs +6 -7
- package/esm2022/lib/providers/segment/segment.service.mjs +18 -12
- package/fesm2022/dereekb-dbx-analytics.mjs +71 -68
- package/fesm2022/dereekb-dbx-analytics.mjs.map +1 -1
- package/lib/action/analytics.action.directive.d.ts +2 -3
- package/lib/analytics/analytics.service.d.ts +2 -2
- package/lib/providers/segment/segment.listener.service.d.ts +1 -2
- package/lib/providers/segment/segment.service.d.ts +4 -3
- package/package.json +1 -1
|
@@ -1,28 +1,23 @@
|
|
|
1
1
|
import { filterMaybe } from '@dereekb/rxjs';
|
|
2
2
|
import { switchMap, tap, shareReplay, BehaviorSubject, merge, of } from 'rxjs';
|
|
3
|
-
import {
|
|
3
|
+
import { Directive, Input, inject } from '@angular/core';
|
|
4
4
|
import { DbxActionContextStoreSourceInstance, AbstractSubscriptionDirective } from '@dereekb/dbx-core';
|
|
5
5
|
import { DbxAnalyticsService } from '../analytics/analytics.service';
|
|
6
6
|
import * as i0 from "@angular/core";
|
|
7
|
-
import * as i1 from "@dereekb/dbx-core";
|
|
8
|
-
import * as i2 from "../analytics/analytics.service";
|
|
9
7
|
/**
|
|
10
8
|
* Used to listen to an ActionContext and send analytical events based on action events.
|
|
11
9
|
*/
|
|
12
10
|
export class DbxActionAnalyticsDirective extends AbstractSubscriptionDirective {
|
|
11
|
+
source = inject((DbxActionContextStoreSourceInstance), { host: true });
|
|
12
|
+
analyticsService = inject(DbxAnalyticsService);
|
|
13
|
+
_config = new BehaviorSubject(undefined);
|
|
14
|
+
config$ = this._config.pipe(filterMaybe(), shareReplay(1));
|
|
13
15
|
get config() {
|
|
14
16
|
return this._config.value;
|
|
15
17
|
}
|
|
16
18
|
set config(config) {
|
|
17
19
|
this._config.next(config);
|
|
18
20
|
}
|
|
19
|
-
constructor(source, analyticsService) {
|
|
20
|
-
super();
|
|
21
|
-
this.source = source;
|
|
22
|
-
this.analyticsService = analyticsService;
|
|
23
|
-
this._config = new BehaviorSubject(undefined);
|
|
24
|
-
this.config$ = this._config.pipe(filterMaybe(), shareReplay(1));
|
|
25
|
-
}
|
|
26
21
|
ngOnInit() {
|
|
27
22
|
this.sub = this.config$
|
|
28
23
|
.pipe(switchMap(({ onTriggered, onReady, onSuccess, onError }) => {
|
|
@@ -54,18 +49,16 @@ export class DbxActionAnalyticsDirective extends AbstractSubscriptionDirective {
|
|
|
54
49
|
this._config.complete();
|
|
55
50
|
});
|
|
56
51
|
}
|
|
57
|
-
static
|
|
58
|
-
static
|
|
52
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DbxActionAnalyticsDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive });
|
|
53
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: DbxActionAnalyticsDirective, selector: "[dbxActionAnalytics]", inputs: { config: ["dbxActionAnalytics", "config"] }, usesInheritance: true, ngImport: i0 });
|
|
59
54
|
}
|
|
60
55
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DbxActionAnalyticsDirective, decorators: [{
|
|
61
56
|
type: Directive,
|
|
62
57
|
args: [{
|
|
63
58
|
selector: '[dbxActionAnalytics]'
|
|
64
59
|
}]
|
|
65
|
-
}],
|
|
66
|
-
type: Host
|
|
67
|
-
}] }, { type: i2.DbxAnalyticsService }]; }, propDecorators: { config: [{
|
|
60
|
+
}], propDecorators: { config: [{
|
|
68
61
|
type: Input,
|
|
69
62
|
args: ['dbxActionAnalytics']
|
|
70
63
|
}] } });
|
|
71
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
64
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5hbHl0aWNzLmFjdGlvbi5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9kYngtYW5hbHl0aWNzL3NyYy9saWIvYWN0aW9uL2FuYWx5dGljcy5hY3Rpb24uZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDNUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLGVBQWUsRUFBRSxLQUFLLEVBQWMsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzNGLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDNUUsT0FBTyxFQUFFLG1DQUFtQyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDdkcsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7O0FBYXJFOztHQUVHO0FBSUgsTUFBTSxPQUFPLDJCQUFrQyxTQUFRLDZCQUE2QjtJQUN6RSxNQUFNLEdBQUcsTUFBTSxDQUFDLENBQUEsbUNBQXlDLENBQUEsRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQzNFLGdCQUFnQixHQUFHLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0lBRXZDLE9BQU8sR0FBRyxJQUFJLGVBQWUsQ0FBd0MsU0FBUyxDQUFDLENBQUM7SUFDeEYsT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRXBFLElBQ0ksTUFBTTtRQUNSLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7SUFDNUIsQ0FBQztJQUVELElBQUksTUFBTSxDQUFDLE1BQTZDO1FBQ3RELElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzVCLENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsT0FBTzthQUNwQixJQUFJLENBQ0gsU0FBUyxDQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFO1lBQ3pELE1BQU0sVUFBVSxHQUEwQixFQUFFLENBQUM7WUFFN0MsSUFBSSxXQUFXLEVBQUU7Z0JBQ2YsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUM3RjtZQUVELElBQUksT0FBTyxFQUFFO2dCQUNYLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUN0RztZQUVELElBQUksU0FBUyxFQUFFO2dCQUNiLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUN2RztZQUVELElBQUksT0FBTyxFQUFFO2dCQUNYLFVBQVUsQ0FBQyxJQUFJLENBQ2IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUNyQixXQUFXLEVBQUUsRUFDYixHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FDdEQsQ0FDRixDQUFDO2FBQ0g7WUFFRCxJQUFJLFVBQVUsQ0FBQyxNQUFNLEVBQUU7Z0JBQ3JCLE9BQU8sS0FBSyxDQUFDLEdBQUcsVUFBVSxDQUFDLENBQUM7YUFDN0I7aUJBQU07Z0JBQ0wsT0FBTyxFQUFFLEVBQUUsQ0FBQzthQUNiO1FBQ0gsQ0FBQyxDQUFDLENBQ0g7YUFDQSxTQUFTLEVBQUUsQ0FBQztJQUNqQixDQUFDO0lBRVEsV0FBVztRQUNsQixJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFO1lBQ3BDLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNwQixJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzFCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzt3R0ExRFUsMkJBQTJCOzRGQUEzQiwyQkFBMkI7OzRGQUEzQiwyQkFBMkI7a0JBSHZDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLHNCQUFzQjtpQkFDakM7OEJBU0ssTUFBTTtzQkFEVCxLQUFLO3VCQUFDLG9CQUFvQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGZpbHRlck1heWJlIH0gZnJvbSAnQGRlcmVla2Ivcnhqcyc7XG5pbXBvcnQgeyBzd2l0Y2hNYXAsIHRhcCwgc2hhcmVSZXBsYXksIEJlaGF2aW9yU3ViamVjdCwgbWVyZ2UsIE9ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBEaXJlY3RpdmUsIElucHV0LCBPbkluaXQsIE9uRGVzdHJveSwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEYnhBY3Rpb25Db250ZXh0U3RvcmVTb3VyY2VJbnN0YW5jZSwgQWJzdHJhY3RTdWJzY3JpcHRpb25EaXJlY3RpdmUgfSBmcm9tICdAZGVyZWVrYi9kYngtY29yZSc7XG5pbXBvcnQgeyBEYnhBbmFseXRpY3NTZXJ2aWNlIH0gZnJvbSAnLi4vYW5hbHl0aWNzL2FuYWx5dGljcy5zZXJ2aWNlJztcbmltcG9ydCB7IE1heWJlLCBSZWFkYWJsZUVycm9yIH0gZnJvbSAnQGRlcmVla2IvdXRpbCc7XG5cbi8qKlxuICogRGJ4QWN0aW9uQW5hbHl0aWNzRGlyZWN0aXZlIGNvbmZpZ1xuICovXG5leHBvcnQgaW50ZXJmYWNlIERieEFjdGlvbkFuYWx5dGljc0NvbmZpZzxUID0gdW5rbm93biwgTyA9IHVua25vd24+IHtcbiAgb25UcmlnZ2VyZWQ/OiAoc2VydmljZTogRGJ4QW5hbHl0aWNzU2VydmljZSkgPT4gdm9pZDtcbiAgb25SZWFkeT86IChzZXJ2aWNlOiBEYnhBbmFseXRpY3NTZXJ2aWNlLCB2YWx1ZTogVCkgPT4gdm9pZDtcbiAgb25TdWNjZXNzPzogKHNlcnZpY2U6IERieEFuYWx5dGljc1NlcnZpY2UsIHZhbHVlOiBNYXliZTxPPikgPT4gdm9pZDtcbiAgb25FcnJvcj86IChzZXJ2aWNlOiBEYnhBbmFseXRpY3NTZXJ2aWNlLCBlcnJvcjogTWF5YmU8UmVhZGFibGVFcnJvcj4pID0+IHZvaWQ7XG59XG5cbi8qKlxuICogVXNlZCB0byBsaXN0ZW4gdG8gYW4gQWN0aW9uQ29udGV4dCBhbmQgc2VuZCBhbmFseXRpY2FsIGV2ZW50cyBiYXNlZCBvbiBhY3Rpb24gZXZlbnRzLlxuICovXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbZGJ4QWN0aW9uQW5hbHl0aWNzXSdcbn0pXG5leHBvcnQgY2xhc3MgRGJ4QWN0aW9uQW5hbHl0aWNzRGlyZWN0aXZlPFQsIE8+IGV4dGVuZHMgQWJzdHJhY3RTdWJzY3JpcHRpb25EaXJlY3RpdmUgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIHJlYWRvbmx5IHNvdXJjZSA9IGluamVjdChEYnhBY3Rpb25Db250ZXh0U3RvcmVTb3VyY2VJbnN0YW5jZTxULCBPPiwgeyBob3N0OiB0cnVlIH0pO1xuICByZWFkb25seSBhbmFseXRpY3NTZXJ2aWNlID0gaW5qZWN0KERieEFuYWx5dGljc1NlcnZpY2UpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2NvbmZpZyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8TWF5YmU8RGJ4QWN0aW9uQW5hbHl0aWNzQ29uZmlnPFQsIE8+Pj4odW5kZWZpbmVkKTtcbiAgcmVhZG9ubHkgY29uZmlnJCA9IHRoaXMuX2NvbmZpZy5waXBlKGZpbHRlck1heWJlKCksIHNoYXJlUmVwbGF5KDEpKTtcblxuICBASW5wdXQoJ2RieEFjdGlvbkFuYWx5dGljcycpXG4gIGdldCBjb25maWcoKTogTWF5YmU8RGJ4QWN0aW9uQW5hbHl0aWNzQ29uZmlnPFQsIE8+PiB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbmZpZy52YWx1ZTtcbiAgfVxuXG4gIHNldCBjb25maWcoY29uZmlnOiBNYXliZTxEYnhBY3Rpb25BbmFseXRpY3NDb25maWc8VCwgTz4+KSB7XG4gICAgdGhpcy5fY29uZmlnLm5leHQoY29uZmlnKTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuc3ViID0gdGhpcy5jb25maWckXG4gICAgICAucGlwZShcbiAgICAgICAgc3dpdGNoTWFwKCh7IG9uVHJpZ2dlcmVkLCBvblJlYWR5LCBvblN1Y2Nlc3MsIG9uRXJyb3IgfSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHRyaWdnZXJPYnM6IE9ic2VydmFibGU8dW5rbm93bj5bXSA9IFtdO1xuXG4gICAgICAgICAgaWYgKG9uVHJpZ2dlcmVkKSB7XG4gICAgICAgICAgICB0cmlnZ2VyT2JzLnB1c2godGhpcy5zb3VyY2UudHJpZ2dlcmVkJC5waXBlKHRhcCgoKSA9PiBvblRyaWdnZXJlZCh0aGlzLmFuYWx5dGljc1NlcnZpY2UpKSkpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChvblJlYWR5KSB7XG4gICAgICAgICAgICB0cmlnZ2VyT2JzLnB1c2godGhpcy5zb3VyY2UudmFsdWVSZWFkeSQucGlwZSh0YXAoKHZhbHVlKSA9PiBvblJlYWR5KHRoaXMuYW5hbHl0aWNzU2VydmljZSwgdmFsdWUpKSkpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChvblN1Y2Nlc3MpIHtcbiAgICAgICAgICAgIHRyaWdnZXJPYnMucHVzaCh0aGlzLnNvdXJjZS5zdWNjZXNzJC5waXBlKHRhcCgocmVzdWx0KSA9PiBvblN1Y2Nlc3ModGhpcy5hbmFseXRpY3NTZXJ2aWNlLCByZXN1bHQpKSkpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChvbkVycm9yKSB7XG4gICAgICAgICAgICB0cmlnZ2VyT2JzLnB1c2goXG4gICAgICAgICAgICAgIHRoaXMuc291cmNlLmVycm9yJC5waXBlKFxuICAgICAgICAgICAgICAgIGZpbHRlck1heWJlKCksXG4gICAgICAgICAgICAgICAgdGFwKChlcnJvcikgPT4gb25FcnJvcih0aGlzLmFuYWx5dGljc1NlcnZpY2UsIGVycm9yKSlcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodHJpZ2dlck9icy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBtZXJnZSguLi50cmlnZ2VyT2JzKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG9mKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuICB9XG5cbiAgb3ZlcnJpZGUgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5zb3VyY2UubG9ja1NldC5vbk5leHRVbmxvY2soKCkgPT4ge1xuICAgICAgc3VwZXIubmdPbkRlc3Ryb3koKTtcbiAgICAgIHRoaXMuX2NvbmZpZy5jb21wbGV0ZSgpO1xuICAgIH0pO1xuICB9XG59XG4iXX0=
|
|
@@ -2,9 +2,9 @@ import { NgModule } from '@angular/core';
|
|
|
2
2
|
import { DbxActionAnalyticsDirective } from './analytics.action.directive';
|
|
3
3
|
import * as i0 from "@angular/core";
|
|
4
4
|
export class DbxAnalyticsActionModule {
|
|
5
|
-
static
|
|
6
|
-
static
|
|
7
|
-
static
|
|
5
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DbxAnalyticsActionModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
6
|
+
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.2.12", ngImport: i0, type: DbxAnalyticsActionModule, declarations: [DbxActionAnalyticsDirective], exports: [DbxActionAnalyticsDirective] });
|
|
7
|
+
static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DbxAnalyticsActionModule });
|
|
8
8
|
}
|
|
9
9
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DbxAnalyticsActionModule, decorators: [{
|
|
10
10
|
type: NgModule,
|
|
@@ -13,4 +13,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
13
13
|
exports: [DbxActionAnalyticsDirective]
|
|
14
14
|
}]
|
|
15
15
|
}] });
|
|
16
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
16
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5hbHl0aWNzLmFjdGlvbi5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9kYngtYW5hbHl0aWNzL3NyYy9saWIvYWN0aW9uL2FuYWx5dGljcy5hY3Rpb24ubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sOEJBQThCLENBQUM7O0FBTTNFLE1BQU0sT0FBTyx3QkFBd0I7d0dBQXhCLHdCQUF3Qjt5R0FBeEIsd0JBQXdCLGlCQUhwQiwyQkFBMkIsYUFDaEMsMkJBQTJCO3lHQUUxQix3QkFBd0I7OzRGQUF4Qix3QkFBd0I7a0JBSnBDLFFBQVE7bUJBQUM7b0JBQ1IsWUFBWSxFQUFFLENBQUMsMkJBQTJCLENBQUM7b0JBQzNDLE9BQU8sRUFBRSxDQUFDLDJCQUEyQixDQUFDO2lCQUN2QyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEYnhBY3Rpb25BbmFseXRpY3NEaXJlY3RpdmUgfSBmcm9tICcuL2FuYWx5dGljcy5hY3Rpb24uZGlyZWN0aXZlJztcblxuQE5nTW9kdWxlKHtcbiAgZGVjbGFyYXRpb25zOiBbRGJ4QWN0aW9uQW5hbHl0aWNzRGlyZWN0aXZlXSxcbiAgZXhwb3J0czogW0RieEFjdGlvbkFuYWx5dGljc0RpcmVjdGl2ZV1cbn0pXG5leHBvcnQgY2xhc3MgRGJ4QW5hbHl0aWNzQWN0aW9uTW9kdWxlIHt9XG4iXX0=
|
|
@@ -13,11 +13,11 @@ export class DbxAnalyticsModule {
|
|
|
13
13
|
]
|
|
14
14
|
};
|
|
15
15
|
}
|
|
16
|
-
static
|
|
17
|
-
static
|
|
18
|
-
static
|
|
16
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DbxAnalyticsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
17
|
+
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.2.12", ngImport: i0, type: DbxAnalyticsModule });
|
|
18
|
+
static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DbxAnalyticsModule });
|
|
19
19
|
}
|
|
20
20
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DbxAnalyticsModule, decorators: [{
|
|
21
21
|
type: NgModule
|
|
22
22
|
}] });
|
|
23
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
23
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5hbHl0aWNzLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2RieC1hbmFseXRpY3Mvc3JjL2xpYi9hbmFseXRpY3MvYW5hbHl0aWNzLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFpQyxNQUFNLGVBQWUsQ0FBQztBQUN4RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7QUFVMUQsTUFBTSxPQUFPLGtCQUFrQjtJQUM3QixNQUFNLENBQUMsT0FBTyxDQUFDLE9BQWtDO1FBQy9DLE9BQU87WUFDTCxRQUFRLEVBQUUsa0JBQWtCO1lBQzVCLFNBQVMsRUFBRTtnQkFDVCxnQkFBZ0I7Z0JBQ2hCLE9BQU8sQ0FBQyw4QkFBOEI7Z0JBQ3RDLFVBQVU7Z0JBQ1YsbUJBQW1CO2FBQ3BCO1NBQ0YsQ0FBQztJQUNKLENBQUM7d0dBWFUsa0JBQWtCO3lHQUFsQixrQkFBa0I7eUdBQWxCLGtCQUFrQjs7NEZBQWxCLGtCQUFrQjtrQkFEOUIsUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlLCBNb2R1bGVXaXRoUHJvdmlkZXJzLCBQcm92aWRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRGJ4QW5hbHl0aWNzU2VydmljZSB9IGZyb20gJy4vYW5hbHl0aWNzLnNlcnZpY2UnO1xuXG5leHBvcnQgaW50ZXJmYWNlIERieEFuYWx5dGljc01vZHVsZU9wdGlvbnMge1xuICAvKipcbiAgICogUHJvdmlkZXMgYSBBbmFseXRpY3NTZXJ2aWNlQ29uZmlndXJhdGlvbiB2YWx1ZS5cbiAgICovXG4gIGFuYWx5dGljc0NvbmZpZ3VyYXRpb25Qcm92aWRlcjogUHJvdmlkZXI7XG59XG5cbkBOZ01vZHVsZSgpXG5leHBvcnQgY2xhc3MgRGJ4QW5hbHl0aWNzTW9kdWxlIHtcbiAgc3RhdGljIGZvclJvb3Qob3B0aW9uczogRGJ4QW5hbHl0aWNzTW9kdWxlT3B0aW9ucyk6IE1vZHVsZVdpdGhQcm92aWRlcnM8RGJ4QW5hbHl0aWNzTW9kdWxlPiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5nTW9kdWxlOiBEYnhBbmFseXRpY3NNb2R1bGUsXG4gICAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgLy8gQ29uZmlndXJhdGlvblxuICAgICAgICBvcHRpb25zLmFuYWx5dGljc0NvbmZpZ3VyYXRpb25Qcm92aWRlcixcbiAgICAgICAgLy8gU2VydmljZVxuICAgICAgICBEYnhBbmFseXRpY3NTZXJ2aWNlXG4gICAgICBdXG4gICAgfTtcbiAgfVxufVxuIl19
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Subject, BehaviorSubject, of, first, shareReplay, switchMap, distinctUntilChanged } from 'rxjs';
|
|
2
|
-
import { Inject, Injectable, Optional } from '@angular/core';
|
|
2
|
+
import { Inject, Injectable, Optional, inject } from '@angular/core';
|
|
3
3
|
import { SubscriptionObject, filterMaybe } from '@dereekb/rxjs';
|
|
4
4
|
import { DbxAnalyticsStreamEventType } from './analytics.stream';
|
|
5
5
|
import { safeCompareEquality } from '@dereekb/util';
|
|
@@ -16,12 +16,10 @@ export class DbxAnalyticsServiceListener {
|
|
|
16
16
|
* Abstract AnalyticsServiceListener implementation.
|
|
17
17
|
*/
|
|
18
18
|
export class AbstractDbxAnalyticsServiceListener {
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
this.analyticsEvents$ = this.analytics$.pipe(switchMap((x) => x.events$), shareReplay(1));
|
|
24
|
-
}
|
|
19
|
+
_sub = new SubscriptionObject();
|
|
20
|
+
_analytics = new BehaviorSubject(undefined);
|
|
21
|
+
analytics$ = this._analytics.pipe(filterMaybe(), shareReplay(1));
|
|
22
|
+
analyticsEvents$ = this.analytics$.pipe(switchMap((x) => x.events$), shareReplay(1));
|
|
25
23
|
// MARK: AnalyticsServiceListener
|
|
26
24
|
listenToService(service) {
|
|
27
25
|
this._analytics.next(service);
|
|
@@ -37,11 +35,14 @@ export class AbstractDbxAnalyticsServiceListener {
|
|
|
37
35
|
}
|
|
38
36
|
}
|
|
39
37
|
export class DbxAnalyticsServiceConfiguration {
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
38
|
+
listeners = [];
|
|
39
|
+
isProduction;
|
|
40
|
+
logEvents;
|
|
41
|
+
userSource;
|
|
43
42
|
}
|
|
44
43
|
export class DbxAnalyticsStreamEventAnalyticsEventWrapper {
|
|
44
|
+
event;
|
|
45
|
+
type;
|
|
45
46
|
constructor(event, type = DbxAnalyticsStreamEventType.Event) {
|
|
46
47
|
this.event = event;
|
|
47
48
|
this.type = type;
|
|
@@ -57,22 +58,22 @@ export class DbxAnalyticsStreamEventAnalyticsEventWrapper {
|
|
|
57
58
|
* Primary analytics service that emits analytics events that components can listen to.
|
|
58
59
|
*/
|
|
59
60
|
export class DbxAnalyticsService {
|
|
61
|
+
_config = inject(DbxAnalyticsServiceConfiguration);
|
|
60
62
|
// TODO: Make these configurable.
|
|
61
|
-
static
|
|
62
|
-
static
|
|
63
|
-
static
|
|
64
|
-
static
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
this._loggerSub = new SubscriptionObject();
|
|
63
|
+
static USER_REGISTRATION_EVENT_NAME = 'User Registered';
|
|
64
|
+
static USER_LOGIN_EVENT_NAME = 'User Login';
|
|
65
|
+
static USER_LOGOUT_EVENT_NAME = 'User Logout';
|
|
66
|
+
static USER_PROPERTIES_EVENT_NAME = 'User Properties';
|
|
67
|
+
_subject = new Subject();
|
|
68
|
+
events$ = this._subject.asObservable();
|
|
69
|
+
_userSource = new BehaviorSubject(undefined);
|
|
70
|
+
user$ = this._userSource.pipe(switchMap((x) => (x ? x.analyticsUser$ : of(undefined))), shareReplay(1));
|
|
71
|
+
_userSourceSub = new SubscriptionObject();
|
|
72
|
+
_userIdEventSub = new SubscriptionObject();
|
|
73
|
+
_loggerSub = new SubscriptionObject();
|
|
74
|
+
constructor(userSource) {
|
|
74
75
|
this._init();
|
|
75
|
-
userSource = userSource || _config.userSource;
|
|
76
|
+
userSource = userSource || this._config.userSource;
|
|
76
77
|
if (userSource) {
|
|
77
78
|
this.setUserSource(userSource);
|
|
78
79
|
}
|
|
@@ -194,15 +195,15 @@ export class DbxAnalyticsService {
|
|
|
194
195
|
this._userIdEventSub.destroy();
|
|
195
196
|
this._loggerSub.destroy();
|
|
196
197
|
}
|
|
197
|
-
static
|
|
198
|
-
static
|
|
198
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DbxAnalyticsService, deps: [{ token: DbxAnalyticsUserSource, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
199
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DbxAnalyticsService });
|
|
199
200
|
}
|
|
200
201
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DbxAnalyticsService, decorators: [{
|
|
201
202
|
type: Injectable
|
|
202
|
-
}], ctorParameters: function () { return [{ type:
|
|
203
|
+
}], ctorParameters: function () { return [{ type: undefined, decorators: [{
|
|
203
204
|
type: Optional
|
|
204
205
|
}, {
|
|
205
206
|
type: Inject,
|
|
206
207
|
args: [DbxAnalyticsUserSource]
|
|
207
208
|
}] }]; } });
|
|
208
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5hbHl0aWNzLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9kYngtYW5hbHl0aWNzL3NyYy9saWIvYW5hbHl0aWNzL2FuYWx5dGljcy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBYyxPQUFPLEVBQUUsZUFBZSxFQUFFLEVBQUUsRUFBZ0IsS0FBSyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDbkksT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFaEUsT0FBTyxFQUEyQiwyQkFBMkIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzFGLE9BQU8sRUFBc0IsbUJBQW1CLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBRXhFLE1BQU0sT0FBZ0IsK0JBQStCO0NBUXBEO0FBRUQsTUFBTSxPQUFnQiw4QkFBOEI7Q0FFbkQ7QUFFRCxNQUFNLE9BQWdCLHNCQUFzQjtDQUUzQztBQUVELE1BQU0sT0FBZ0IsMkJBQTJCO0NBRWhEO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLE9BQWdCLG1DQUFtQztJQUF6RDtRQUNVLFNBQUksR0FBRyxJQUFJLGtCQUFrQixFQUFFLENBQUM7UUFDOUIsZUFBVSxHQUFHLElBQUksZUFBZSxDQUE2QixTQUFTLENBQUMsQ0FBQztRQUV6RSxlQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDakUscUJBQWdCLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQzlDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMs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LENBQUMsYUFBYSxDQUFDLEVBQUUsRUFBRSwyQkFBMkIsQ0FBQyxVQUFVLEVBQUUsSUFBSSxJQUFJLElBQUksQ0FBQyxDQUFDO1FBQy9FLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLGVBQWUsQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1lBQzdKLElBQUksQ0FBQyxhQUFhLENBQUMsRUFBRSxFQUFFLDJCQUEyQixDQUFDLFlBQVksRUFBRSxJQUFJLElBQUksSUFBSSxDQUFDLENBQUM7UUFDakYsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsT0FBTztRQUNMLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUM1QixJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQzlCLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDL0IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUM1QixDQUFDOytHQTVMVSxtQkFBbUIsK0RBc0JxRCxzQkFBc0I7bUhBdEI5RixtQkFBbUI7OzRGQUFuQixtQkFBbUI7a0JBRC9CLFVBQVU7OzBCQXVCdUQsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxzQkFBc0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJqZWN0LCBCZWhhdmlvclN1YmplY3QsIG9mLCBTdWJzY3JpcHRpb24sIGZpcnN0LCBzaGFyZVJlcGxheSwgc3dpdGNoTWFwLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlLCBPcHRpb25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uT2JqZWN0LCBmaWx0ZXJNYXliZSB9IGZyb20gJ0BkZXJlZWtiL3J4anMnO1xuaW1wb3J0IHsgRGJ4QW5hbHl0aWNzRXZlbnQsIERieEFuYWx5dGljc0V2ZW50RGF0YSwgRGJ4QW5hbHl0aWNzRXZlbnROYW1lLCBEYnhBbmFseXRpY3NVc2VyLCBOZXdVc2VyQW5hbHl0aWNzRXZlbnREYXRhLCBEYnhVc2VyQW5hbHl0aWNzRXZlbnQgfSBmcm9tICcuL2FuYWx5dGljcyc7XG5pbXBvcnQgeyBEYnhBbmFseXRpY3NTdHJlYW1FdmVudCwgRGJ4QW5hbHl0aWNzU3RyZWFtRXZlbnRUeXBlIH0gZnJvbSAnLi9hbmFseXRpY3Muc3RyZWFtJztcbmltcG9ydCB7IE1heWJlLCBEZXN0cm95YWJsZSwgc2FmZUNvbXBhcmVFcXVhbGl0eSB9IGZyb20gJ0BkZXJlZWtiL3V0aWwnO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgRGJ4QW5hbHl0aWNzRXZlbnRFbWl0dGVyU2VydmljZSB7XG4gIGFic3RyYWN0IHNlbmROZXdVc2VyRXZlbnQodXNlcjogRGJ4QW5hbHl0aWNzVXNlciwgZGF0YTogTmV3VXNlckFuYWx5dGljc0V2ZW50RGF0YSk6IHZvaWQ7XG4gIGFic3RyYWN0IHNlbmRVc2VyTG9naW5FdmVudCh1c2VyOiBEYnhBbmFseXRpY3NVc2VyLCBkYXRhPzogRGJ4QW5hbHl0aWNzRXZlbnREYXRhKTogdm9pZDtcbiAgYWJzdHJhY3Qgc2VuZFVzZXJMb2dvdXRFdmVudChkYXRhPzogRGJ4QW5hbHl0aWNzRXZlbnREYXRhKTogdm9pZDtcbiAgYWJzdHJhY3Qgc2VuZFVzZXJQcm9wZXJ0aWVzRXZlbnQodXNlcjogRGJ4QW5hbHl0aWNzVXNlciwgZGF0YT86IERieEFuYWx5dGljc0V2ZW50RGF0YSk6IHZvaWQ7XG4gIGFic3RyYWN0IHNlbmRFdmVudERhdGEobmFtZTogRGJ4QW5hbHl0aWNzRXZlbnROYW1lLCBkYXRhPzogRGJ4QW5hbHl0aWNzRXZlbnREYXRhKTogdm9pZDtcbiAgYWJzdHJhY3Qgc2VuZEV2ZW50KGV2ZW50OiBEYnhBbmFseXRpY3NFdmVudCk6IHZvaWQ7XG4gIGFic3RyYWN0IHNlbmRQYWdlVmlldyhwYWdlPzogc3RyaW5nKTogdm9pZDtcbn1cblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIERieEFuYWx5dGljc0V2ZW50U3RyZWFtU2VydmljZSB7XG4gIGFic3RyYWN0IHJlYWRvbmx5IGV2ZW50cyQ6IE9ic2VydmFibGU8RGJ4QW5hbHl0aWNzU3RyZWFtRXZlbnQ+O1xufVxuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgRGJ4QW5hbHl0aWNzVXNlclNvdXJjZSB7XG4gIGFic3RyYWN0IHJlYWRvbmx5IGFuYWx5dGljc1VzZXIkOiBPYnNlcnZhYmxlPE1heWJlPERieEFuYWx5dGljc1VzZXI+Pjtcbn1cblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIERieEFuYWx5dGljc1NlcnZpY2VMaXN0ZW5lciB7XG4gIHB1YmxpYyBhYnN0cmFjdCBsaXN0ZW5Ub1NlcnZpY2Uoc2VydmljZTogRGJ4QW5hbHl0aWNzU2VydmljZSk6IHZvaWQ7XG59XG5cbi8qKlxuICogQWJzdHJhY3QgQW5hbHl0aWNzU2VydmljZUxpc3RlbmVyIGltcGxlbWVudGF0aW9uLlxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3REYnhBbmFseXRpY3NTZXJ2aWNlTGlzdGVuZXIgaW1wbGVtZW50cyBEYnhBbmFseXRpY3NTZXJ2aWNlTGlzdGVuZXIsIERlc3Ryb3lhYmxlIHtcbiAgcHJpdmF0ZSBfc3ViID0gbmV3IFN1YnNjcmlwdGlvbk9iamVjdCgpO1xuICBwcm90ZWN0ZWQgX2FuYWx5dGljcyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8TWF5YmU8RGJ4QW5hbHl0aWNzU2VydmljZT4+KHVuZGVmaW5lZCk7XG5cbiAgcmVhZG9ubHkgYW5hbHl0aWNzJCA9IHRoaXMuX2FuYWx5dGljcy5waXBlKGZpbHRlck1heWJlKCksIHNoYXJlUmVwbGF5KDEpKTtcbiAgcmVhZG9ubHkgYW5hbHl0aWNzRXZlbnRzJCA9IHRoaXMuYW5hbHl0aWNzJC5waXBlKFxuICAgIHN3aXRjaE1hcCgoeCkgPT4geC5ldmVudHMkKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIC8vIE1BUks6IEFuYWx5dGljc1NlcnZpY2VMaXN0ZW5lclxuICBsaXN0ZW5Ub1NlcnZpY2Uoc2VydmljZTogRGJ4QW5hbHl0aWNzU2VydmljZSk6IHZvaWQge1xuICAgIHRoaXMuX2FuYWx5dGljcy5uZXh0KHNlcnZpY2UpO1xuICAgIGNvbnN0IHN1YiA9IHRoaXMuX2luaXRpYWxpemVTZXJ2aWNlU3Vic2NyaXB0aW9uKCk7XG5cbiAgICBpZiAoc3ViICE9PSBmYWxzZSkge1xuICAgICAgdGhpcy5fc3ViLnN1YnNjcmlwdGlvbiA9IHN1YjtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgYWJzdHJhY3QgX2luaXRpYWxpemVTZXJ2aWNlU3Vic2NyaXB0aW9uKCk6IFN1YnNjcmlwdGlvbiB8IGZhbHNlO1xuXG4gIC8vIE1BUks6IERlc3Ryb3lcbiAgZGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLl9hbmFseXRpY3MuY29tcGxldGUoKTtcbiAgICB0aGlzLl9zdWIuZGVzdHJveSgpO1xuICB9XG59XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBEYnhBbmFseXRpY3NTZXJ2aWNlQ29uZmlndXJhdGlvbiB7XG4gIGxpc3RlbmVyczogRGJ4QW5hbHl0aWNzU2VydmljZUxpc3RlbmVyW10gPSBbXTtcbiAgaXNQcm9kdWN0aW9uPzogYm9vbGVhbjtcbiAgbG9nRXZlbnRzPzogYm9vbGVhbjtcbiAgdXNlclNvdXJjZT86IERieEFuYWx5dGljc1VzZXJTb3VyY2U7XG59XG5cbmV4cG9ydCBjbGFzcyBEYnhBbmFseXRpY3NTdHJlYW1FdmVudEFuYWx5dGljc0V2ZW50V3JhcHBlciBpbXBsZW1lbnRzIERieEFuYWx5dGljc1N0cmVhbUV2ZW50IHtcbiAgY29uc3RydWN0b3IocHVibGljIHJlYWRvbmx5IGV2ZW50OiBEYnhVc2VyQW5hbHl0aWNzRXZlbnQsIHB1YmxpYyByZWFkb25seSB0eXBlOiBEYnhBbmFseXRpY3NTdHJlYW1FdmVudFR5cGUgPSBEYnhBbmFseXRpY3NTdHJlYW1FdmVudFR5cGUuRXZlbnQpIHt9XG5cbiAgcHVibGljIGdldCB1c2VyKCk6IE1heWJlPERieEFuYWx5dGljc1VzZXI+IHtcbiAgICByZXR1cm4gdGhpcy5ldmVudC51c2VyO1xuICB9XG5cbiAgcHVibGljIGdldCB1c2VySWQoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy51c2VyID8gdGhpcy51c2VyLnVzZXIgOiB1bmRlZmluZWQ7XG4gIH1cbn1cblxuLyoqXG4gKiBQcmltYXJ5IGFuYWx5dGljcyBzZXJ2aWNlIHRoYXQgZW1pdHMgYW5hbHl0aWNzIGV2ZW50cyB0aGF0IGNvbXBvbmVudHMgY2FuIGxpc3RlbiB0by5cbiAqL1xuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIERieEFuYWx5dGljc1NlcnZpY2UgaW1wbGVtZW50cyBEYnhBbmFseXRpY3NFdmVudFN0cmVhbVNlcnZpY2UsIERieEFuYWx5dGljc0V2ZW50RW1pdHRlclNlcnZpY2UsIERlc3Ryb3lhYmxlIHtcbiAgLy8gVE9ETzogTWFrZSB0aGVzZSBjb25maWd1cmFibGUuXG5cbiAgc3RhdGljIHJlYWRvbmx5IFVTRVJfUkVHSVNUUkFUSU9OX0VWRU5UX05BTUUgPSAnVXNlciBSZWdpc3RlcmVkJztcbiAgc3RhdGljIHJlYWRvbmx5IFVTRVJfTE9HSU5fRVZFTlRfTkFNRSA9ICdVc2VyIExvZ2luJztcbiAgc3RhdGljIHJlYWRvbmx5IFVTRVJfTE9HT1VUX0VWRU5UX05BTUUgPSAnVXNlciBMb2dvdXQnO1xuICBzdGF0aWMgcmVhZG9ubHkgVVNFUl9QUk9QRVJUSUVTX0VWRU5UX05BTUUgPSAnVXNlciBQcm9wZXJ0aWVzJztcblxuICBwcml2YXRlIF9zdWJqZWN0ID0gbmV3IFN1YmplY3Q8RGJ4QW5hbHl0aWNzU3RyZWFtRXZlbnQ+KCk7XG4gIHJlYWRvbmx5IGV2ZW50cyQgPSB0aGlzLl9zdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuXG4gIHByaXZhdGUgX3VzZXJTb3VyY2UgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PE1heWJlPERieEFuYWx5dGljc1VzZXJTb3VyY2U+Pih1bmRlZmluZWQpO1xuXG4gIHJlYWRvbmx5IHVzZXIkID0gdGhpcy5fdXNlclNvdXJjZS5waXBlKFxuICAgIHN3aXRjaE1hcCgoeCkgPT4gKHggPyB4LmFuYWx5dGljc1VzZXIkIDogb2YodW5kZWZpbmVkKSkpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcHJpdmF0ZSBfdXNlclNvdXJjZVN1YiA9IG5ldyBTdWJzY3JpcHRpb25PYmplY3QoKTtcbiAgcHJpdmF0ZSBfdXNlcklkRXZlbnRTdWIgPSBuZXcgU3Vic2NyaXB0aW9uT2JqZWN0KCk7XG4gIHByaXZhdGUgX2xvZ2dlclN1YiA9IG5ldyBTdWJzY3JpcHRpb25PYmplY3QoKTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9jb25maWc6IERieEFuYWx5dGljc1NlcnZpY2VDb25maWd1cmF0aW9uLCBAT3B0aW9uYWwoKSBASW5qZWN0KERieEFuYWx5dGljc1VzZXJTb3VyY2UpIHVzZXJTb3VyY2U/OiBNYXliZTxEYnhBbmFseXRpY3NVc2VyU291cmNlPikge1xuICAgIHRoaXMuX2luaXQoKTtcblxuICAgIHVzZXJTb3VyY2UgPSB1c2VyU291cmNlIHx8IF9jb25maWcudXNlclNvdXJjZTtcbiAgICBpZiAodXNlclNvdXJjZSkge1xuICAgICAgdGhpcy5zZXRVc2VyU291cmNlKHVzZXJTb3VyY2UpO1xuICAgIH1cbiAgfVxuXG4gIC8vIE1BUks6IFNvdXJjZVxuICAvKipcbiAgICogU2V0cyB0aGUgdXNlciBkaXJlY3RseSwgb3ZlcnJpZGRpbmcgdGhlIFVzZXJTb3VyY2UuXG4gICAqL1xuICBwdWJsaWMgc2V0VXNlcih1c2VyOiBNYXliZTxEYnhBbmFseXRpY3NVc2VyPik6IHZvaWQge1xuICAgIGxldCBzb3VyY2U6IE1heWJlPERieEFuYWx5dGljc1VzZXJTb3VyY2U+O1xuXG4gICAgaWYgKHVzZXIpIHtcbiAgICAgIHNvdXJjZSA9IHsgYW5hbHl0aWNzVXNlciQ6IG9mKHVzZXIpIH07XG4gICAgfVxuXG4gICAgdGhpcy5fdXNlclNvdXJjZS5uZXh0KHNvdXJjZSk7XG5cbiAgICBpZiAodGhpcy5fdXNlclNvdXJjZS52YWx1ZSkge1xuICAgICAgY29uc29sZS53YXJuKCdEYnhBbmFseXRpY3NTZXJ2aWNlIGhhcyBhIHVzZXJTb3VyY2UgdGhhdCBpcyBzZXQuIFNvdXJjZSBpcyBub3cgb3ZlcnJpZGRlbiBieSBzZXRVc2VyKCkgdmFsdWUuJyk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHNldFVzZXJTb3VyY2Uoc291cmNlOiBEYnhBbmFseXRpY3NVc2VyU291cmNlKTogdm9pZCB7XG4gICAgdGhpcy5fdXNlclNvdXJjZS5uZXh0KHNvdXJjZSk7XG4gIH1cblxuICAvLyBNQVJLOiBBbmFseXRpY3NFdmVudEVtaXR0ZXJTZXJ2aWNlXG4gIC8qKlxuICAgKiBTZW5kcyBhbiBldmVudC5cbiAgICovXG4gIHB1YmxpYyBzZW5kTmV3VXNlckV2ZW50KHVzZXI6IERieEFuYWx5dGljc1VzZXIsIGRhdGE6IE5ld1VzZXJBbmFseXRpY3NFdmVudERhdGEpOiB2b2lkIHtcbiAgICB0aGlzLnNlbmROZXh0RXZlbnQoXG4gICAgICB7XG4gICAgICAgIG5hbWU6IERieEFuYWx5dGljc1NlcnZpY2UuVVNFUl9SRUdJU1RSQVRJT05fRVZFTlRfTkFNRSxcbiAgICAgICAgZGF0YVxuICAgICAgfSxcbiAgICAgIERieEFuYWx5dGljc1N0cmVhbUV2ZW50VHlwZS5OZXdVc2VyRXZlbnQsXG4gICAgICB1c2VyXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBzZW5kVXNlckxvZ2luRXZlbnQodXNlcjogRGJ4QW5hbHl0aWNzVXNlciwgZGF0YT86IERieEFuYWx5dGljc0V2ZW50RGF0YSk6IHZvaWQge1xuICAgIHRoaXMuc2VuZE5leHRFdmVudChcbiAgICAgIHtcbiAgICAgICAgbmFtZTogRGJ4QW5hbHl0aWNzU2VydmljZS5VU0VSX0xPR0lOX0VWRU5UX05BTUUsXG4gICAgICAgIGRhdGFcbiAgICAgIH0sXG4gICAgICBEYnhBbmFseXRpY3NTdHJlYW1FdmVudFR5cGUuVXNlckxvZ2luRXZlbnQsXG4gICAgICB1c2VyXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBzZW5kVXNlckxvZ291dEV2ZW50KGRhdGE/OiBEYnhBbmFseXRpY3NFdmVudERhdGEsIGNsZWFyVXNlciA9IHRydWUpOiB2b2lkIHtcbiAgICB0aGlzLnNlbmROZXh0RXZlbnQoXG4gICAgICB7XG4gICAgICAgIG5hbWU6IERieEFuYWx5dGljc1NlcnZpY2UuVVNFUl9MT0dPVVRfRVZFTlRfTkFNRSxcbiAgICAgICAgZGF0YVxuICAgICAgfSxcbiAgICAgIERieEFuYWx5dGljc1N0cmVhbUV2ZW50VHlwZS5Vc2VyTG9nb3V0RXZlbnRcbiAgICApO1xuXG4gICAgaWYgKGNsZWFyVXNlcikge1xuICAgICAgdGhpcy5zZXRVc2VyKHVuZGVmaW5lZCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHNlbmRVc2VyUHJvcGVydGllc0V2ZW50KHVzZXI6IERieEFuYWx5dGljc1VzZXIsIGRhdGE/OiBEYnhBbmFseXRpY3NFdmVudERhdGEpOiB2b2lkIHtcbiAgICB0aGlzLnNlbmROZXh0RXZlbnQoXG4gICAgICB7XG4gICAgICAgIG5hbWU6IERieEFuYWx5dGljc1NlcnZpY2UuVVNFUl9QUk9QRVJUSUVTX0VWRU5UX05BTUUsXG4gICAgICAgIGRhdGFcbiAgICAgIH0sXG4gICAgICBEYnhBbmFseXRpY3NTdHJlYW1FdmVudFR5cGUuVXNlclByb3BlcnRpZXNFdmVudCxcbiAgICAgIHVzZXJcbiAgICApO1xuICB9XG5cbiAgcHVibGljIHNlbmRFdmVudERhdGEobmFtZTogRGJ4QW5hbHl0aWNzRXZlbnROYW1lLCBkYXRhPzogRGJ4QW5hbHl0aWNzRXZlbnREYXRhKTogdm9pZCB7XG4gICAgcmV0dXJuIHRoaXMuc2VuZEV2ZW50KHtcbiAgICAgIG5hbWUsXG4gICAgICBkYXRhXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgc2VuZEV2ZW50VHlwZShldmVudFR5cGU6IERieEFuYWx5dGljc0V2ZW50TmFtZSk6IHZvaWQge1xuICAgIHRoaXMuc2VuZE5leHRFdmVudChcbiAgICAgIHtcbiAgICAgICAgbmFtZTogZXZlbnRUeXBlXG4gICAgICB9LFxuICAgICAgRGJ4QW5hbHl0aWNzU3RyZWFtRXZlbnRUeXBlLkV2ZW50XG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBzZW5kRXZlbnQoZXZlbnQ6IERieEFuYWx5dGljc0V2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5zZW5kTmV4dEV2ZW50KGV2ZW50LCBEYnhBbmFseXRpY3NTdHJlYW1FdmVudFR5cGUuRXZlbnQpO1xuICB9XG5cbiAgcHVibGljIHNlbmRQYWdlVmlldyhwYWdlPzogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5zZW5kTmV4dEV2ZW50KFxuICAgICAge1xuICAgICAgICBuYW1lOiBwYWdlXG4gICAgICB9LFxuICAgICAgRGJ4QW5hbHl0aWNzU3RyZWFtRXZlbnRUeXBlLlBhZ2VWaWV3XG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZW5kcyB0aGUgbmV4dCBldmVudC5cbiAgICpcbiAgICogQHBhcmFtIGV2ZW50XG4gICAqIEBwYXJhbSB0eXBlXG4gICAqIEBwYXJhbSB1c2VyT3ZlcnJpZGUgVXNlcyB0aGlzIHVzZXIgaWYgc2V0IGFzIG51bGwgb3IgYW4gb3ZlcnJpZGUgdmFsdWUuIElmIHVuZGVmaW5lZCB0aGUgY3VycmVudCBhbmFseXRpY3MgdXNlciBpcyB1c2VkLlxuICAgKi9cbiAgcHJvdGVjdGVkIHNlbmROZXh0RXZlbnQoZXZlbnQ6IERieEFuYWx5dGljc0V2ZW50ID0ge30sIHR5cGU6IERieEFuYWx5dGljc1N0cmVhbUV2ZW50VHlwZSwgdXNlck92ZXJyaWRlPzogTWF5YmU8RGJ4QW5hbHl0aWNzVXNlcj4pOiB2b2lkIHtcbiAgICB0aGlzLnVzZXIkLnBpcGUoZmlyc3QoKSkuc3Vic2NyaWJlKChhbmFseXRpY3NVc2VyKSA9PiB7XG4gICAgICBjb25zdCB1c2VyOiBNYXliZTxEYnhBbmFseXRpY3NVc2VyPiA9IHVzZXJPdmVycmlkZSAhPT0gdW5kZWZpbmVkID8gdXNlck92ZXJyaWRlIDogYW5hbHl0aWNzVXNlcjtcbiAgICAgIGNvbnN0IGFuYWx5dGljc0V2ZW50OiBEYnhVc2VyQW5hbHl0aWNzRXZlbnQgPSB7IC4uLmV2ZW50LCB1c2VyIH07XG4gICAgICB0aGlzLm5leHRFdmVudChhbmFseXRpY3NFdmVudCwgdHlwZSk7XG4gICAgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgbmV4dEV2ZW50KGV2ZW50OiBEYnhVc2VyQW5hbHl0aWNzRXZlbnQsIHR5cGU6IERieEFuYWx5dGljc1N0cmVhbUV2ZW50VHlwZSk6IHZvaWQge1xuICAgIGNvbnN0IHdyYXBwZXIgPSBuZXcgRGJ4QW5hbHl0aWNzU3RyZWFtRXZlbnRBbmFseXRpY3NFdmVudFdyYXBwZXIoZXZlbnQsIHR5cGUpO1xuICAgIHRoaXMuX3N1YmplY3QubmV4dCh3cmFwcGVyKTtcbiAgfVxuXG4gIC8vIE1BUks6IEludGVybmFsXG4gIHByaXZhdGUgX2luaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2NvbmZpZy5pc1Byb2R1Y3Rpb24pIHtcbiAgICAgIC8vIEluaXRpYWxpemUgbGlzdGVuZXJzLlxuICAgICAgdGhpcy5fY29uZmlnLmxpc3RlbmVycy5mb3JFYWNoKChsaXN0ZW5lcikgPT4ge1xuICAgICAgICBsaXN0ZW5lci5saXN0ZW5Ub1NlcnZpY2UodGhpcyk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS53YXJuKCdBbmFseXRpY3NTZXJ2aWNlOiBBbmFseXRpY3Mgbm90IGluIHByb2R1Y3Rpb24gbW9kZS4gQWxsIGFuYWx5dGljcyBldmVudHMgYXJlIGlnbm9yZWQuJyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2NvbmZpZy5sb2dFdmVudHMgfHwgIXRoaXMuX2NvbmZpZy5pc1Byb2R1Y3Rpb24pIHtcbiAgICAgIGNvbnNvbGUubG9nKCdBbmFseXRpY3NTZXJ2aWNlOiBMb2cgYW5hbHl0aWNzIGV2ZW50cyBlbmFibGVkLicpO1xuXG4gICAgICAvLyBDcmVhdGUgYSBuZXcgc3Vic2NyaXB0aW9uXG4gICAgICB0aGlzLl9sb2dnZXJTdWIuc3Vic2NyaXB0aW9uID0gdGhpcy5fc3ViamVjdC5zdWJzY3JpYmUoKHgpID0+IHtcbiAgICAgICAgY29uc29sZS5sb2coYEFuYWx5dGljc1NlcnZpY2U6IEFuYWx5dGljcyBFdmVudCAtICR7RGJ4QW5hbHl0aWNzU3RyZWFtRXZlbnRUeXBlW3gudHlwZV19IHwgVXNlcjogJHt4LnVzZXJJZH0gfCBEYXRhOiAke0pTT04uc3RyaW5naWZ5KHguZXZlbnQpfS5gKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHRoaXMuX3VzZXJTb3VyY2VTdWIuc3Vic2NyaXB0aW9uID0gdGhpcy51c2VyJC5zdWJzY3JpYmUoKHVzZXIpID0+IHtcbiAgICAgIHRoaXMuc2VuZE5leHRFdmVudCh7fSwgRGJ4QW5hbHl0aWNzU3RyZWFtRXZlbnRUeXBlLlVzZXJDaGFuZ2UsIHVzZXIgPz8gbnVsbCk7XG4gICAgfSk7XG5cbiAgICB0aGlzLl91c2VySWRFdmVudFN1Yi5zdWJzY3JpcHRpb24gPSB0aGlzLnVzZXIkLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKGEsIGIpID0+IHNhZmVDb21wYXJlRXF1YWxpdHkoYSwgYiwgKHgsIHkpID0+IHgudXNlciA9PT0geS51c2VyKSkpLnN1YnNjcmliZSgodXNlcikgPT4ge1xuICAgICAgdGhpcy5zZW5kTmV4dEV2ZW50KHt9LCBEYnhBbmFseXRpY3NTdHJlYW1FdmVudFR5cGUuVXNlcklkQ2hhbmdlLCB1c2VyID8/IG51bGwpO1xuICAgIH0pO1xuICB9XG5cbiAgZGVzdHJveSgpIHtcbiAgICB0aGlzLl9zdWJqZWN0LmNvbXBsZXRlKCk7XG4gICAgdGhpcy5fdXNlclNvdXJjZS5jb21wbGV0ZSgpO1xuICAgIHRoaXMuX3VzZXJTb3VyY2VTdWIuZGVzdHJveSgpO1xuICAgIHRoaXMuX3VzZXJJZEV2ZW50U3ViLmRlc3Ryb3koKTtcbiAgICB0aGlzLl9sb2dnZXJTdWIuZGVzdHJveSgpO1xuICB9XG59XG4iXX0=
|
|
209
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5hbHl0aWNzLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9kYngtYW5hbHl0aWNzL3NyYy9saWIvYW5hbHl0aWNzL2FuYWx5dGljcy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBYyxPQUFPLEVBQUUsZUFBZSxFQUFFLEVBQUUsRUFBZ0IsS0FBSyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDbkksT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNyRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsV0FBVyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRWhFLE9BQU8sRUFBMkIsMkJBQTJCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUMxRixPQUFPLEVBQXNCLG1CQUFtQixFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUV4RSxNQUFNLE9BQWdCLCtCQUErQjtDQVFwRDtBQUVELE1BQU0sT0FBZ0IsOEJBQThCO0NBRW5EO0FBRUQsTUFBTSxPQUFnQixzQkFBc0I7Q0FFM0M7QUFFRCxNQUFNLE9BQWdCLDJCQUEyQjtDQUVoRDtBQUVEOztHQUVHO0FBQ0gsTUFBTSxPQUFnQixtQ0FBbUM7SUFDL0MsSUFBSSxHQUFHLElBQUksa0JBQWtCLEVBQUUsQ0FBQztJQUM5QixVQUFVLEdBQUcsSUFBSSxlQUFlLENBQTZCLFNBQVMsQ0FBQyxDQUFDO0lBRXpFLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNqRSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FDOUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUs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cnZhYmxlLCBTdWJqZWN0LCBCZWhhdmlvclN1YmplY3QsIG9mLCBTdWJzY3JpcHRpb24sIGZpcnN0LCBzaGFyZVJlcGxheSwgc3dpdGNoTWFwLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlLCBPcHRpb25hbCwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb25PYmplY3QsIGZpbHRlck1heWJlIH0gZnJvbSAnQGRlcmVla2Ivcnhqcyc7XG5pbXBvcnQgeyBEYnhBbmFseXRpY3NFdmVudCwgRGJ4QW5hbHl0aWNzRXZlbnREYXRhLCBEYnhBbmFseXRpY3NFdmVudE5hbWUsIERieEFuYWx5dGljc1VzZXIsIE5ld1VzZXJBbmFseXRpY3NFdmVudERhdGEsIERieFVzZXJBbmFseXRpY3NFdmVudCB9IGZyb20gJy4vYW5hbHl0aWNzJztcbmltcG9ydCB7IERieEFuYWx5dGljc1N0cmVhbUV2ZW50LCBEYnhBbmFseXRpY3NTdHJlYW1FdmVudFR5cGUgfSBmcm9tICcuL2FuYWx5dGljcy5zdHJlYW0nO1xuaW1wb3J0IHsgTWF5YmUsIERlc3Ryb3lhYmxlLCBzYWZlQ29tcGFyZUVxdWFsaXR5IH0gZnJvbSAnQGRlcmVla2IvdXRpbCc7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBEYnhBbmFseXRpY3NFdmVudEVtaXR0ZXJTZXJ2aWNlIHtcbiAgYWJzdHJhY3Qgc2VuZE5ld1VzZXJFdmVudCh1c2VyOiBEYnhBbmFseXRpY3NVc2VyLCBkYXRhOiBOZXdVc2VyQW5hbHl0aWNzRXZlbnREYXRhKTogdm9pZDtcbiAgYWJzdHJhY3Qgc2VuZFVzZXJMb2dpbkV2ZW50KHVzZXI6IERieEFuYWx5dGljc1VzZXIsIGRhdGE/OiBEYnhBbmFseXRpY3NFdmVudERhdGEpOiB2b2lkO1xuICBhYnN0cmFjdCBzZW5kVXNlckxvZ291dEV2ZW50KGRhdGE/OiBEYnhBbmFseXRpY3NFdmVudERhdGEpOiB2b2lkO1xuICBhYnN0cmFjdCBzZW5kVXNlclByb3BlcnRpZXNFdmVudCh1c2VyOiBEYnhBbmFseXRpY3NVc2VyLCBkYXRhPzogRGJ4QW5hbHl0aWNzRXZlbnREYXRhKTogdm9pZDtcbiAgYWJzdHJhY3Qgc2VuZEV2ZW50RGF0YShuYW1lOiBEYnhBbmFseXRpY3NFdmVudE5hbWUsIGRhdGE/OiBEYnhBbmFseXRpY3NFdmVudERhdGEpOiB2b2lkO1xuICBhYnN0cmFjdCBzZW5kRXZlbnQoZXZlbnQ6IERieEFuYWx5dGljc0V2ZW50KTogdm9pZDtcbiAgYWJzdHJhY3Qgc2VuZFBhZ2VWaWV3KHBhZ2U/OiBzdHJpbmcpOiB2b2lkO1xufVxuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgRGJ4QW5hbHl0aWNzRXZlbnRTdHJlYW1TZXJ2aWNlIHtcbiAgYWJzdHJhY3QgcmVhZG9ubHkgZXZlbnRzJDogT2JzZXJ2YWJsZTxEYnhBbmFseXRpY3NTdHJlYW1FdmVudD47XG59XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBEYnhBbmFseXRpY3NVc2VyU291cmNlIHtcbiAgYWJzdHJhY3QgcmVhZG9ubHkgYW5hbHl0aWNzVXNlciQ6IE9ic2VydmFibGU8TWF5YmU8RGJ4QW5hbHl0aWNzVXNlcj4+O1xufVxuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgRGJ4QW5hbHl0aWNzU2VydmljZUxpc3RlbmVyIHtcbiAgcHVibGljIGFic3RyYWN0IGxpc3RlblRvU2VydmljZShzZXJ2aWNlOiBEYnhBbmFseXRpY3NTZXJ2aWNlKTogdm9pZDtcbn1cblxuLyoqXG4gKiBBYnN0cmFjdCBBbmFseXRpY3NTZXJ2aWNlTGlzdGVuZXIgaW1wbGVtZW50YXRpb24uXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBBYnN0cmFjdERieEFuYWx5dGljc1NlcnZpY2VMaXN0ZW5lciBpbXBsZW1lbnRzIERieEFuYWx5dGljc1NlcnZpY2VMaXN0ZW5lciwgRGVzdHJveWFibGUge1xuICBwcml2YXRlIF9zdWIgPSBuZXcgU3Vic2NyaXB0aW9uT2JqZWN0KCk7XG4gIHByb3RlY3RlZCBfYW5hbHl0aWNzID0gbmV3IEJlaGF2aW9yU3ViamVjdDxNYXliZTxEYnhBbmFseXRpY3NTZXJ2aWNlPj4odW5kZWZpbmVkKTtcblxuICByZWFkb25seSBhbmFseXRpY3MkID0gdGhpcy5fYW5hbHl0aWNzLnBpcGUoZmlsdGVyTWF5YmUoKSwgc2hhcmVSZXBsYXkoMSkpO1xuICByZWFkb25seSBhbmFseXRpY3NFdmVudHMkID0gdGhpcy5hbmFseXRpY3MkLnBpcGUoXG4gICAgc3dpdGNoTWFwKCh4KSA9PiB4LmV2ZW50cyQpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgLy8gTUFSSzogQW5hbHl0aWNzU2VydmljZUxpc3RlbmVyXG4gIGxpc3RlblRvU2VydmljZShzZXJ2aWNlOiBEYnhBbmFseXRpY3NTZXJ2aWNlKTogdm9pZCB7XG4gICAgdGhpcy5fYW5hbHl0aWNzLm5leHQoc2VydmljZSk7XG4gICAgY29uc3Qgc3ViID0gdGhpcy5faW5pdGlhbGl6ZVNlcnZpY2VTdWJzY3JpcHRpb24oKTtcblxuICAgIGlmIChzdWIgIT09IGZhbHNlKSB7XG4gICAgICB0aGlzLl9zdWIuc3Vic2NyaXB0aW9uID0gc3ViO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBfaW5pdGlhbGl6ZVNlcnZpY2VTdWJzY3JpcHRpb24oKTogU3Vic2NyaXB0aW9uIHwgZmFsc2U7XG5cbiAgLy8gTUFSSzogRGVzdHJveVxuICBkZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuX2FuYWx5dGljcy5jb21wbGV0ZSgpO1xuICAgIHRoaXMuX3N1Yi5kZXN0cm95KCk7XG4gIH1cbn1cblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIERieEFuYWx5dGljc1NlcnZpY2VDb25maWd1cmF0aW9uIHtcbiAgbGlzdGVuZXJzOiBEYnhBbmFseXRpY3NTZXJ2aWNlTGlzdGVuZXJbXSA9IFtdO1xuICBpc1Byb2R1Y3Rpb24/OiBib29sZWFuO1xuICBsb2dFdmVudHM/OiBib29sZWFuO1xuICB1c2VyU291cmNlPzogRGJ4QW5hbHl0aWNzVXNlclNvdXJjZTtcbn1cblxuZXhwb3J0IGNsYXNzIERieEFuYWx5dGljc1N0cmVhbUV2ZW50QW5hbHl0aWNzRXZlbnRXcmFwcGVyIGltcGxlbWVudHMgRGJ4QW5hbHl0aWNzU3RyZWFtRXZlbnQge1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgcmVhZG9ubHkgZXZlbnQ6IERieFVzZXJBbmFseXRpY3NFdmVudCwgcHVibGljIHJlYWRvbmx5IHR5cGU6IERieEFuYWx5dGljc1N0cmVhbUV2ZW50VHlwZSA9IERieEFuYWx5dGljc1N0cmVhbUV2ZW50VHlwZS5FdmVudCkge31cblxuICBwdWJsaWMgZ2V0IHVzZXIoKTogTWF5YmU8RGJ4QW5hbHl0aWNzVXNlcj4ge1xuICAgIHJldHVybiB0aGlzLmV2ZW50LnVzZXI7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHVzZXJJZCgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnVzZXIgPyB0aGlzLnVzZXIudXNlciA6IHVuZGVmaW5lZDtcbiAgfVxufVxuXG4vKipcbiAqIFByaW1hcnkgYW5hbHl0aWNzIHNlcnZpY2UgdGhhdCBlbWl0cyBhbmFseXRpY3MgZXZlbnRzIHRoYXQgY29tcG9uZW50cyBjYW4gbGlzdGVuIHRvLlxuICovXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgRGJ4QW5hbHl0aWNzU2VydmljZSBpbXBsZW1lbnRzIERieEFuYWx5dGljc0V2ZW50U3RyZWFtU2VydmljZSwgRGJ4QW5hbHl0aWNzRXZlbnRFbWl0dGVyU2VydmljZSwgRGVzdHJveWFibGUge1xuICBwcml2YXRlIF9jb25maWcgPSBpbmplY3QoRGJ4QW5hbHl0aWNzU2VydmljZUNvbmZpZ3VyYXRpb24pO1xuXG4gIC8vIFRPRE86IE1ha2UgdGhlc2UgY29uZmlndXJhYmxlLlxuICBzdGF0aWMgcmVhZG9ubHkgVVNFUl9SRUdJU1RSQVRJT05fRVZFTlRfTkFNRSA9ICdVc2VyIFJlZ2lzdGVyZWQnO1xuICBzdGF0aWMgcmVhZG9ubHkgVVNFUl9MT0dJTl9FVkVOVF9OQU1FID0gJ1VzZXIgTG9naW4nO1xuICBzdGF0aWMgcmVhZG9ubHkgVVNFUl9MT0dPVVRfRVZFTlRfTkFNRSA9ICdVc2VyIExvZ291dCc7XG4gIHN0YXRpYyByZWFkb25seSBVU0VSX1BST1BFUlRJRVNfRVZFTlRfTkFNRSA9ICdVc2VyIFByb3BlcnRpZXMnO1xuXG4gIHByaXZhdGUgX3N1YmplY3QgPSBuZXcgU3ViamVjdDxEYnhBbmFseXRpY3NTdHJlYW1FdmVudD4oKTtcbiAgcmVhZG9ubHkgZXZlbnRzJCA9IHRoaXMuX3N1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG5cbiAgcHJpdmF0ZSBfdXNlclNvdXJjZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8TWF5YmU8RGJ4QW5hbHl0aWNzVXNlclNvdXJjZT4+KHVuZGVmaW5lZCk7XG5cbiAgcmVhZG9ubHkgdXNlciQgPSB0aGlzLl91c2VyU291cmNlLnBpcGUoXG4gICAgc3dpdGNoTWFwKCh4KSA9PiAoeCA/IHguYW5hbHl0aWNzVXNlciQgOiBvZih1bmRlZmluZWQpKSksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICBwcml2YXRlIF91c2VyU291cmNlU3ViID0gbmV3IFN1YnNjcmlwdGlvbk9iamVjdCgpO1xuICBwcml2YXRlIF91c2VySWRFdmVudFN1YiA9IG5ldyBTdWJzY3JpcHRpb25PYmplY3QoKTtcbiAgcHJpdmF0ZSBfbG9nZ2VyU3ViID0gbmV3IFN1YnNjcmlwdGlvbk9iamVjdCgpO1xuXG4gIGNvbnN0cnVjdG9yKEBPcHRpb25hbCgpIEBJbmplY3QoRGJ4QW5hbHl0aWNzVXNlclNvdXJjZSkgdXNlclNvdXJjZT86IE1heWJlPERieEFuYWx5dGljc1VzZXJTb3VyY2U+KSB7XG4gICAgdGhpcy5faW5pdCgpO1xuXG4gICAgdXNlclNvdXJjZSA9IHVzZXJTb3VyY2UgfHwgdGhpcy5fY29uZmlnLnVzZXJTb3VyY2U7XG4gICAgaWYgKHVzZXJTb3VyY2UpIHtcbiAgICAgIHRoaXMuc2V0VXNlclNvdXJjZSh1c2VyU291cmNlKTtcbiAgICB9XG4gIH1cblxuICAvLyBNQVJLOiBTb3VyY2VcbiAgLyoqXG4gICAqIFNldHMgdGhlIHVzZXIgZGlyZWN0bHksIG92ZXJyaWRkaW5nIHRoZSBVc2VyU291cmNlLlxuICAgKi9cbiAgcHVibGljIHNldFVzZXIodXNlcjogTWF5YmU8RGJ4QW5hbHl0aWNzVXNlcj4pOiB2b2lkIHtcbiAgICBsZXQgc291cmNlOiBNYXliZTxEYnhBbmFseXRpY3NVc2VyU291cmNlPjtcblxuICAgIGlmICh1c2VyKSB7XG4gICAgICBzb3VyY2UgPSB7IGFuYWx5dGljc1VzZXIkOiBvZih1c2VyKSB9O1xuICAgIH1cblxuICAgIHRoaXMuX3VzZXJTb3VyY2UubmV4dChzb3VyY2UpO1xuXG4gICAgaWYgKHRoaXMuX3VzZXJTb3VyY2UudmFsdWUpIHtcbiAgICAgIGNvbnNvbGUud2FybignRGJ4QW5hbHl0aWNzU2VydmljZSBoYXMgYSB1c2VyU291cmNlIHRoYXQgaXMgc2V0LiBTb3VyY2UgaXMgbm93IG92ZXJyaWRkZW4gYnkgc2V0VXNlcigpIHZhbHVlLicpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzZXRVc2VyU291cmNlKHNvdXJjZTogRGJ4QW5hbHl0aWNzVXNlclNvdXJjZSk6IHZvaWQge1xuICAgIHRoaXMuX3VzZXJTb3VyY2UubmV4dChzb3VyY2UpO1xuICB9XG5cbiAgLy8gTUFSSzogQW5hbHl0aWNzRXZlbnRFbWl0dGVyU2VydmljZVxuICAvKipcbiAgICogU2VuZHMgYW4gZXZlbnQuXG4gICAqL1xuICBwdWJsaWMgc2VuZE5ld1VzZXJFdmVudCh1c2VyOiBEYnhBbmFseXRpY3NVc2VyLCBkYXRhOiBOZXdVc2VyQW5hbHl0aWNzRXZlbnREYXRhKTogdm9pZCB7XG4gICAgdGhpcy5zZW5kTmV4dEV2ZW50KFxuICAgICAge1xuICAgICAgICBuYW1lOiBEYnhBbmFseXRpY3NTZXJ2aWNlLlVTRVJfUkVHSVNUUkFUSU9OX0VWRU5UX05BTUUsXG4gICAgICAgIGRhdGFcbiAgICAgIH0sXG4gICAgICBEYnhBbmFseXRpY3NTdHJlYW1FdmVudFR5cGUuTmV3VXNlckV2ZW50LFxuICAgICAgdXNlclxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgc2VuZFVzZXJMb2dpbkV2ZW50KHVzZXI6IERieEFuYWx5dGljc1VzZXIsIGRhdGE/OiBEYnhBbmFseXRpY3NFdmVudERhdGEpOiB2b2lkIHtcbiAgICB0aGlzLnNlbmROZXh0RXZlbnQoXG4gICAgICB7XG4gICAgICAgIG5hbWU6IERieEFuYWx5dGljc1NlcnZpY2UuVVNFUl9MT0dJTl9FVkVOVF9OQU1FLFxuICAgICAgICBkYXRhXG4gICAgICB9LFxuICAgICAgRGJ4QW5hbHl0aWNzU3RyZWFtRXZlbnRUeXBlLlVzZXJMb2dpbkV2ZW50LFxuICAgICAgdXNlclxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgc2VuZFVzZXJMb2dvdXRFdmVudChkYXRhPzogRGJ4QW5hbHl0aWNzRXZlbnREYXRhLCBjbGVhclVzZXIgPSB0cnVlKTogdm9pZCB7XG4gICAgdGhpcy5zZW5kTmV4dEV2ZW50KFxuICAgICAge1xuICAgICAgICBuYW1lOiBEYnhBbmFseXRpY3NTZXJ2aWNlLlVTRVJfTE9HT1VUX0VWRU5UX05BTUUsXG4gICAgICAgIGRhdGFcbiAgICAgIH0sXG4gICAgICBEYnhBbmFseXRpY3NTdHJlYW1FdmVudFR5cGUuVXNlckxvZ291dEV2ZW50XG4gICAgKTtcblxuICAgIGlmIChjbGVhclVzZXIpIHtcbiAgICAgIHRoaXMuc2V0VXNlcih1bmRlZmluZWQpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzZW5kVXNlclByb3BlcnRpZXNFdmVudCh1c2VyOiBEYnhBbmFseXRpY3NVc2VyLCBkYXRhPzogRGJ4QW5hbHl0aWNzRXZlbnREYXRhKTogdm9pZCB7XG4gICAgdGhpcy5zZW5kTmV4dEV2ZW50KFxuICAgICAge1xuICAgICAgICBuYW1lOiBEYnhBbmFseXRpY3NTZXJ2aWNlLlVTRVJfUFJPUEVSVElFU19FVkVOVF9OQU1FLFxuICAgICAgICBkYXRhXG4gICAgICB9LFxuICAgICAgRGJ4QW5hbHl0aWNzU3RyZWFtRXZlbnRUeXBlLlVzZXJQcm9wZXJ0aWVzRXZlbnQsXG4gICAgICB1c2VyXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBzZW5kRXZlbnREYXRhKG5hbWU6IERieEFuYWx5dGljc0V2ZW50TmFtZSwgZGF0YT86IERieEFuYWx5dGljc0V2ZW50RGF0YSk6IHZvaWQge1xuICAgIHJldHVybiB0aGlzLnNlbmRFdmVudCh7XG4gICAgICBuYW1lLFxuICAgICAgZGF0YVxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHNlbmRFdmVudFR5cGUoZXZlbnRUeXBlOiBEYnhBbmFseXRpY3NFdmVudE5hbWUpOiB2b2lkIHtcbiAgICB0aGlzLnNlbmROZXh0RXZlbnQoXG4gICAgICB7XG4gICAgICAgIG5hbWU6IGV2ZW50VHlwZVxuICAgICAgfSxcbiAgICAgIERieEFuYWx5dGljc1N0cmVhbUV2ZW50VHlwZS5FdmVudFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgc2VuZEV2ZW50KGV2ZW50OiBEYnhBbmFseXRpY3NFdmVudCk6IHZvaWQge1xuICAgIHRoaXMuc2VuZE5leHRFdmVudChldmVudCwgRGJ4QW5hbHl0aWNzU3RyZWFtRXZlbnRUeXBlLkV2ZW50KTtcbiAgfVxuXG4gIHB1YmxpYyBzZW5kUGFnZVZpZXcocGFnZT86IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuc2VuZE5leHRFdmVudChcbiAgICAgIHtcbiAgICAgICAgbmFtZTogcGFnZVxuICAgICAgfSxcbiAgICAgIERieEFuYWx5dGljc1N0cmVhbUV2ZW50VHlwZS5QYWdlVmlld1xuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogU2VuZHMgdGhlIG5leHQgZXZlbnQuXG4gICAqXG4gICAqIEBwYXJhbSBldmVudFxuICAgKiBAcGFyYW0gdHlwZVxuICAgKiBAcGFyYW0gdXNlck92ZXJyaWRlIFVzZXMgdGhpcyB1c2VyIGlmIHNldCBhcyBudWxsIG9yIGFuIG92ZXJyaWRlIHZhbHVlLiBJZiB1bmRlZmluZWQgdGhlIGN1cnJlbnQgYW5hbHl0aWNzIHVzZXIgaXMgdXNlZC5cbiAgICovXG4gIHByb3RlY3RlZCBzZW5kTmV4dEV2ZW50KGV2ZW50OiBEYnhBbmFseXRpY3NFdmVudCA9IHt9LCB0eXBlOiBEYnhBbmFseXRpY3NTdHJlYW1FdmVudFR5cGUsIHVzZXJPdmVycmlkZT86IE1heWJlPERieEFuYWx5dGljc1VzZXI+KTogdm9pZCB7XG4gICAgdGhpcy51c2VyJC5waXBlKGZpcnN0KCkpLnN1YnNjcmliZSgoYW5hbHl0aWNzVXNlcikgPT4ge1xuICAgICAgY29uc3QgdXNlcjogTWF5YmU8RGJ4QW5hbHl0aWNzVXNlcj4gPSB1c2VyT3ZlcnJpZGUgIT09IHVuZGVmaW5lZCA/IHVzZXJPdmVycmlkZSA6IGFuYWx5dGljc1VzZXI7XG4gICAgICBjb25zdCBhbmFseXRpY3NFdmVudDogRGJ4VXNlckFuYWx5dGljc0V2ZW50ID0geyAuLi5ldmVudCwgdXNlciB9O1xuICAgICAgdGhpcy5uZXh0RXZlbnQoYW5hbHl0aWNzRXZlbnQsIHR5cGUpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIG5leHRFdmVudChldmVudDogRGJ4VXNlckFuYWx5dGljc0V2ZW50LCB0eXBlOiBEYnhBbmFseXRpY3NTdHJlYW1FdmVudFR5cGUpOiB2b2lkIHtcbiAgICBjb25zdCB3cmFwcGVyID0gbmV3IERieEFuYWx5dGljc1N0cmVhbUV2ZW50QW5hbHl0aWNzRXZlbnRXcmFwcGVyKGV2ZW50LCB0eXBlKTtcbiAgICB0aGlzLl9zdWJqZWN0Lm5leHQod3JhcHBlcik7XG4gIH1cblxuICAvLyBNQVJLOiBJbnRlcm5hbFxuICBwcml2YXRlIF9pbml0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9jb25maWcuaXNQcm9kdWN0aW9uKSB7XG4gICAgICAvLyBJbml0aWFsaXplIGxpc3RlbmVycy5cbiAgICAgIHRoaXMuX2NvbmZpZy5saXN0ZW5lcnMuZm9yRWFjaCgobGlzdGVuZXIpID0+IHtcbiAgICAgICAgbGlzdGVuZXIubGlzdGVuVG9TZXJ2aWNlKHRoaXMpO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUud2FybignQW5hbHl0aWNzU2VydmljZTogQW5hbHl0aWNzIG5vdCBpbiBwcm9kdWN0aW9uIG1vZGUuIEFsbCBhbmFseXRpY3MgZXZlbnRzIGFyZSBpZ25vcmVkLicpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9jb25maWcubG9nRXZlbnRzIHx8ICF0aGlzLl9jb25maWcuaXNQcm9kdWN0aW9uKSB7XG4gICAgICBjb25zb2xlLmxvZygnQW5hbHl0aWNzU2VydmljZTogTG9nIGFuYWx5dGljcyBldmVudHMgZW5hYmxlZC4nKTtcblxuICAgICAgLy8gQ3JlYXRlIGEgbmV3IHN1YnNjcmlwdGlvblxuICAgICAgdGhpcy5fbG9nZ2VyU3ViLnN1YnNjcmlwdGlvbiA9IHRoaXMuX3N1YmplY3Quc3Vic2NyaWJlKCh4KSA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBBbmFseXRpY3NTZXJ2aWNlOiBBbmFseXRpY3MgRXZlbnQgLSAke0RieEFuYWx5dGljc1N0cmVhbUV2ZW50VHlwZVt4LnR5cGVdfSB8IFVzZXI6ICR7eC51c2VySWR9IHwgRGF0YTogJHtKU09OLnN0cmluZ2lmeSh4LmV2ZW50KX0uYCk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLl91c2VyU291cmNlU3ViLnN1YnNjcmlwdGlvbiA9IHRoaXMudXNlciQuc3Vic2NyaWJlKCh1c2VyKSA9PiB7XG4gICAgICB0aGlzLnNlbmROZXh0RXZlbnQoe30sIERieEFuYWx5dGljc1N0cmVhbUV2ZW50VHlwZS5Vc2VyQ2hhbmdlLCB1c2VyID8/IG51bGwpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5fdXNlcklkRXZlbnRTdWIuc3Vic2NyaXB0aW9uID0gdGhpcy51c2VyJC5waXBlKGRpc3RpbmN0VW50aWxDaGFuZ2VkKChhLCBiKSA9PiBzYWZlQ29tcGFyZUVxdWFsaXR5KGEsIGIsICh4LCB5KSA9PiB4LnVzZXIgPT09IHkudXNlcikpKS5zdWJzY3JpYmUoKHVzZXIpID0+IHtcbiAgICAgIHRoaXMuc2VuZE5leHRFdmVudCh7fSwgRGJ4QW5hbHl0aWNzU3RyZWFtRXZlbnRUeXBlLlVzZXJJZENoYW5nZSwgdXNlciA/PyBudWxsKTtcbiAgICB9KTtcbiAgfVxuXG4gIGRlc3Ryb3koKSB7XG4gICAgdGhpcy5fc3ViamVjdC5jb21wbGV0ZSgpO1xuICAgIHRoaXMuX3VzZXJTb3VyY2UuY29tcGxldGUoKTtcbiAgICB0aGlzLl91c2VyU291cmNlU3ViLmRlc3Ryb3koKTtcbiAgICB0aGlzLl91c2VySWRFdmVudFN1Yi5kZXN0cm95KCk7XG4gICAgdGhpcy5fbG9nZ2VyU3ViLmRlc3Ryb3koKTtcbiAgfVxufVxuIl19
|
|
@@ -1,16 +1,15 @@
|
|
|
1
|
-
import { Injectable } from '@angular/core';
|
|
1
|
+
import { Injectable, inject } from '@angular/core';
|
|
2
2
|
import { combineLatest } from 'rxjs';
|
|
3
3
|
import { AbstractDbxAnalyticsServiceListener, DbxAnalyticsStreamEventType } from '../../analytics';
|
|
4
4
|
import { DbxAnalyticsSegmentApiService } from './segment.service';
|
|
5
5
|
import * as i0 from "@angular/core";
|
|
6
|
-
import * as i1 from "./segment.service";
|
|
7
6
|
/**
|
|
8
7
|
* DbxAnalyticsServiceListener adapter for Segment.
|
|
9
8
|
*/
|
|
10
9
|
export class DbxAnalyticsSegmentServiceListener extends AbstractDbxAnalyticsServiceListener {
|
|
11
|
-
|
|
10
|
+
_segmentApi = inject(DbxAnalyticsSegmentApiService);
|
|
11
|
+
constructor() {
|
|
12
12
|
super();
|
|
13
|
-
this._segmentApi = _segmentApi;
|
|
14
13
|
if (this._segmentApi.config.logging) {
|
|
15
14
|
console.log('SegmentAnalyticsListenerService: Segment is logging events.');
|
|
16
15
|
}
|
|
@@ -88,10 +87,13 @@ export class DbxAnalyticsSegmentServiceListener extends AbstractDbxAnalyticsServ
|
|
|
88
87
|
api.reset();
|
|
89
88
|
}
|
|
90
89
|
}
|
|
91
|
-
static
|
|
92
|
-
static
|
|
90
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DbxAnalyticsSegmentServiceListener, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
91
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DbxAnalyticsSegmentServiceListener, providedIn: 'root' });
|
|
93
92
|
}
|
|
94
93
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DbxAnalyticsSegmentServiceListener, decorators: [{
|
|
95
|
-
type: Injectable
|
|
96
|
-
|
|
97
|
-
|
|
94
|
+
type: Injectable,
|
|
95
|
+
args: [{
|
|
96
|
+
providedIn: 'root'
|
|
97
|
+
}]
|
|
98
|
+
}], ctorParameters: function () { return []; } });
|
|
99
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VnbWVudC5saXN0ZW5lci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZGJ4LWFuYWx5dGljcy9zcmMvbGliL3Byb3ZpZGVycy9zZWdtZW50L3NlZ21lbnQubGlzdGVuZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVuRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3JDLE9BQU8sRUFBRSxtQ0FBbUMsRUFBMkIsMkJBQTJCLEVBQW9CLE1BQU0saUJBQWlCLENBQUM7QUFDOUksT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sbUJBQW1CLENBQUM7O0FBRWxFOztHQUVHO0FBSUgsTUFBTSxPQUFPLGtDQUFtQyxTQUFRLG1DQUFtQztJQUNqRixXQUFXLEdBQUcsTUFBTSxDQUFDLDZCQUE2QixDQUFDLENBQUM7SUFFNUQ7UUFDRSxLQUFLLEVBQUUsQ0FBQztRQUVSLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFO1lBQ25DLE9BQU8sQ0FBQyxHQUFHLENBQUMsNkRBQTZELENBQUMsQ0FBQztTQUM1RTtRQUVELElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUU7WUFDbkMsT0FBTyxDQUFDLEdBQUcsQ0FBQyx5RkFBeUYsQ0FBQyxDQUFDO1NBQ3hHO0lBQ0gsQ0FBQztJQUVTLDhCQUE4QjtRQUN0QyxPQUFPLGFBQWEsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsV0FBVyxDQUEwRCxFQUFFLEVBQUU7WUFDckssSUFBSSxJQUFJLENBQUMsV0FB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LDJCQUEyQixDQUFDLENBQUM7aUJBQzFDO1lBQ0gsQ0FBQyxDQUNGLENBQUM7U0FDSDthQUFNO1lBQ0wsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDO1NBQ2I7SUFDSCxDQUFDO3dHQXBHVSxrQ0FBa0M7NEdBQWxDLGtDQUFrQyxjQUZqQyxNQUFNOzs0RkFFUCxrQ0FBa0M7a0JBSDlDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNYXliZSB9IGZyb20gJ0BkZXJlZWtiL3V0aWwnO1xuaW1wb3J0IHsgY29tYmluZUxhdGVzdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQWJzdHJhY3REYnhBbmFseXRpY3NTZXJ2aWNlTGlzdGVuZXIsIERieEFuYWx5dGljc1N0cmVhbUV2ZW50LCBEYnhBbmFseXRpY3NTdHJlYW1FdmVudFR5cGUsIERieEFuYWx5dGljc1VzZXIgfSBmcm9tICcuLi8uLi9hbmFseXRpY3MnO1xuaW1wb3J0IHsgRGJ4QW5hbHl0aWNzU2VnbWVudEFwaVNlcnZpY2UgfSBmcm9tICcuL3NlZ21lbnQuc2VydmljZSc7XG5cbi8qKlxuICogRGJ4QW5hbHl0aWNzU2VydmljZUxpc3RlbmVyIGFkYXB0ZXIgZm9yIFNlZ21lbnQuXG4gKi9cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIERieEFuYWx5dGljc1NlZ21lbnRTZXJ2aWNlTGlzdGVuZXIgZXh0ZW5kcyBBYnN0cmFjdERieEFuYWx5dGljc1NlcnZpY2VMaXN0ZW5lciB7XG4gIHByaXZhdGUgX3NlZ21lbnRBcGkgPSBpbmplY3QoRGJ4QW5hbHl0aWNzU2VnbWVudEFwaVNlcnZpY2UpO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG5cbiAgICBpZiAodGhpcy5fc2VnbWVudEFwaS5jb25maWcubG9nZ2luZykge1xuICAgICAgY29uc29sZS5sb2coJ1NlZ21lbnRBbmFseXRpY3NMaXN0ZW5lclNlcnZpY2U6IFNlZ21lbnQgaXMgbG9nZ2luZyBldmVudHMuJyk7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLl9zZWdtZW50QXBpLmNvbmZpZy5hY3RpdmUpIHtcbiAgICAgIGNvbnNvbGUubG9nKCdTZWdtZW50QW5hbHl0aWNzTGlzdGVuZXJTZXJ2aWNlOiBTZWdtZW50IGlzIGRpc2FibGVkIGZyb20gc2VuZGluZyBldmVudHMgdG8gdGhlIHNlcnZlci4nKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgX2luaXRpYWxpemVTZXJ2aWNlU3Vic2NyaXB0aW9uKCkge1xuICAgIHJldHVybiBjb21iaW5lTGF0ZXN0KFt0aGlzLl9zZWdtZW50QXBpLnNlcnZpY2UkLCB0aGlzLmFuYWx5dGljc0V2ZW50cyRdKS5zdWJzY3JpYmUoKFtzZWdtZW50LCBzdHJlYW1FdmVudF06IFtTZWdtZW50QW5hbHl0aWNzLkFuYWx5dGljc0pTLCBEYnhBbmFseXRpY3NTdHJlYW1FdmVudF0pID0+IHtcbiAgICAgIGlmICh0aGlzLl9zZWdtZW50QXBpLmNvbmZpZy5sb2dnaW5nKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdTZWdtZW50IExpc3RlbmVyIExvZ2dpbmcgRXZlbnQ6ICcsIHN0cmVhbUV2ZW50KTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuX3NlZ21lbnRBcGkuY29uZmlnLmFjdGl2ZSkge1xuICAgICAgICB0aGlzLmhhbmRsZVN0cmVhbUV2ZW50KHNlZ21lbnQsIHN0cmVhbUV2ZW50KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVTdHJlYW1FdmVudChhcGk6IFNlZ21lbnRBbmFseXRpY3MuQW5hbHl0aWNzSlMsIHN0cmVhbUV2ZW50OiBEYnhBbmFseXRpY3NTdHJlYW1FdmVudCk6IHZvaWQge1xuICAgIHN3aXRjaCAoc3RyZWFtRXZlbnQudHlwZSkge1xuICAgICAgY2FzZSBEYnhBbmFseXRpY3NTdHJlYW1FdmVudFR5cGUuTmV3VXNlckV2ZW50OlxuICAgICAgICB0aGlzLnVwZGF0ZVdpdGhOZXdVc2VyRXZlbnQoYXBpLCBzdHJlYW1FdmVudCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBEYnhBbmFseXRpY3NTdHJlYW1FdmVudFR5cGUuVXNlckxvZ2luRXZlbnQ6XG4gICAgICAgIHRoaXMuY2hhbmdlVXNlcihhcGksIHN0cmVhbUV2ZW50LnVzZXIpO1xuICAgICAgICB0aGlzLnVwZGF0ZVdpdGhFdmVudChhcGksIHN0cmVhbUV2ZW50KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIERieEFuYWx5dGljc1N0cmVhbUV2ZW50VHlwZS5FdmVudDpcbiAgICAgICAgdGhpcy51cGRhdGVXaXRoRXZlbnQoYXBpLCBzdHJlYW1FdmVudCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBEYnhBbmFseXRpY3NTdHJlYW1FdmVudFR5cGUuVXNlckxvZ291dEV2ZW50OlxuICAgICAgICB0aGlzLmNoYW5nZVVzZXIoYXBpLCB1bmRlZmluZWQpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRGJ4QW5hbHl0aWNzU3RyZWFtRXZlbnRUeXBlLlBhZ2VWaWV3OlxuICAgICAgICBhcGkucGFnZSgpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRGJ4QW5hbHl0aWNzU3RyZWFtRXZlbnRUeXBlLlVzZXJDaGFuZ2U6XG4gICAgICAgIHRoaXMuY2hhbmdlVXNlcihhcGksIHN0cmVhbUV2ZW50LnVzZXIpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgdXBkYXRlV2l0aE5ld1VzZXJFdmVudChhcGk6IFNlZ21lbnRBbmFseXRpY3MuQW5hbHl0aWNzSlMsIHN0cmVhbUV2ZW50OiBEYnhBbmFseXRpY3NTdHJlYW1FdmVudCk6IHZvaWQge1xuICAgIHRoaXMuY2hhbmdlVXNlcihhcGksIHN0cmVhbUV2ZW50LnVzZXIpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHVwZGF0ZVdpdGhFdmVudChhcGk6IFNlZ21lbnRBbmFseXRpY3MuQW5hbHl0aWNzSlMsIHN0cmVhbUV2ZW50OiBEYnhBbmFseXRpY3NTdHJlYW1FdmVudCwgbmFtZT86IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IGV2ZW50ID0gc3RyZWFtRXZlbnQuZXZlbnQ7XG4gICAgY29uc3QgZXZlbnROYW1lID0gbmFtZSB8fCBldmVudD8ubmFtZTtcblxuICAgIGlmIChldmVudE5hbWUpIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gZXZlbnQ/LnZhbHVlO1xuICAgICAgY29uc3QgZGF0YSA9IGV2ZW50Py5kYXRhO1xuXG4gICAgICBhcGkudHJhY2soXG4gICAgICAgIGV2ZW50TmFtZSxcbiAgICAgICAge1xuICAgICAgICAgIC4uLih2YWx1ZSAhPSBudWxsXG4gICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICB2YWx1ZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA6IHVuZGVmaW5lZCksXG4gICAgICAgICAgLi4uZGF0YVxuICAgICAgICB9LFxuICAgICAgICB7fSxcbiAgICAgICAgKCkgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLl9zZWdtZW50QXBpLmNvbmZpZy5sb2dnaW5nKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnU2VnbWVudCB0cmFjayBzdWNjZXNzLicpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNoYW5nZVVzZXIoYXBpOiBTZWdtZW50QW5hbHl0aWNzLkFuYWx5dGljc0pTLCB1c2VyOiBNYXliZTxEYnhBbmFseXRpY3NVc2VyPik6IHZvaWQge1xuICAgIGlmICh1c2VyPy51c2VyKSB7XG4gICAgICBhcGkuaWRlbnRpZnkoXG4gICAgICAgIHVzZXIudXNlcixcbiAgICAgICAge1xuICAgICAgICAgIC4uLnVzZXIucHJvcGVydGllc1xuICAgICAgICB9LFxuICAgICAgICB7fSxcbiAgICAgICAgKCkgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLl9zZWdtZW50QXBpLmNvbmZpZy5sb2dnaW5nKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnU2VnbWVudCBpZGVudGlmeSBzdWNjZXNzLicpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXBpLnJlc2V0KCk7XG4gICAgfVxuICB9XG59XG4iXX0=
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { NgModule } from '@angular/core';
|
|
2
|
-
import { PRELOAD_SEGMENT_TOKEN
|
|
2
|
+
import { PRELOAD_SEGMENT_TOKEN } from './segment.service';
|
|
3
3
|
import * as i0 from "@angular/core";
|
|
4
4
|
export class DbxAnalyticsSegmentModule {
|
|
5
5
|
static forRoot(preloadService) {
|
|
@@ -9,14 +9,13 @@ export class DbxAnalyticsSegmentModule {
|
|
|
9
9
|
{
|
|
10
10
|
provide: PRELOAD_SEGMENT_TOKEN,
|
|
11
11
|
useValue: preloadService
|
|
12
|
-
}
|
|
13
|
-
DbxAnalyticsSegmentApiService
|
|
12
|
+
}
|
|
14
13
|
]
|
|
15
14
|
};
|
|
16
15
|
}
|
|
17
|
-
static
|
|
18
|
-
static
|
|
19
|
-
static
|
|
16
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DbxAnalyticsSegmentModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
17
|
+
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.2.12", ngImport: i0, type: DbxAnalyticsSegmentModule });
|
|
18
|
+
static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DbxAnalyticsSegmentModule });
|
|
20
19
|
}
|
|
21
20
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DbxAnalyticsSegmentModule, decorators: [{
|
|
22
21
|
type: NgModule,
|
|
@@ -25,4 +24,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
25
24
|
imports: []
|
|
26
25
|
}]
|
|
27
26
|
}] });
|
|
28
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
27
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VnbWVudC5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9kYngtYW5hbHl0aWNzL3NyYy9saWIvcHJvdmlkZXJzL3NlZ21lbnQvc2VnbWVudC5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBdUIsTUFBTSxlQUFlLENBQUM7QUFDOUQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7O0FBTTFELE1BQU0sT0FBTyx5QkFBeUI7SUFDcEMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxjQUF3QjtRQUNyQyxPQUFPO1lBQ0wsUUFBUSxFQUFFLHlCQUF5QjtZQUNuQyxTQUFTLEVBQUU7Z0JBQ1Q7b0JBQ0UsT0FBTyxFQUFFLHFCQUFxQjtvQkFDOUIsUUFBUSxFQUFFLGNBQWM7aUJBQ3pCO2FBQ0Y7U0FDRixDQUFDO0lBQ0osQ0FBQzt3R0FYVSx5QkFBeUI7eUdBQXpCLHlCQUF5Qjt5R0FBekIseUJBQXlCOzs0RkFBekIseUJBQXlCO2tCQUpyQyxRQUFRO21CQUFDO29CQUNSLFlBQVksRUFBRSxFQUFFO29CQUNoQixPQUFPLEVBQUUsRUFBRTtpQkFDWiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlLCBNb2R1bGVXaXRoUHJvdmlkZXJzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBQUkVMT0FEX1NFR01FTlRfVE9LRU4gfSBmcm9tICcuL3NlZ21lbnQuc2VydmljZSc7XG5cbkBOZ01vZHVsZSh7XG4gIGRlY2xhcmF0aW9uczogW10sXG4gIGltcG9ydHM6IFtdXG59KVxuZXhwb3J0IGNsYXNzIERieEFuYWx5dGljc1NlZ21lbnRNb2R1bGUge1xuICBzdGF0aWMgZm9yUm9vdChwcmVsb2FkU2VydmljZT86IGJvb2xlYW4pOiBNb2R1bGVXaXRoUHJvdmlkZXJzPERieEFuYWx5dGljc1NlZ21lbnRNb2R1bGU+IHtcbiAgICByZXR1cm4ge1xuICAgICAgbmdNb2R1bGU6IERieEFuYWx5dGljc1NlZ21lbnRNb2R1bGUsXG4gICAgICBwcm92aWRlcnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIHByb3ZpZGU6IFBSRUxPQURfU0VHTUVOVF9UT0tFTixcbiAgICAgICAgICB1c2VWYWx1ZTogcHJlbG9hZFNlcnZpY2VcbiAgICAgICAgfVxuICAgICAgXVxuICAgIH07XG4gIH1cbn1cbiJdfQ==
|
|
@@ -1,13 +1,14 @@
|
|
|
1
|
-
import { Injectable, InjectionToken, Inject } from '@angular/core';
|
|
1
|
+
import { Injectable, InjectionToken, Inject, inject, Optional } from '@angular/core';
|
|
2
2
|
import { AbstractAsyncWindowLoadedService } from '@dereekb/browser';
|
|
3
3
|
import { poll } from '@dereekb/util';
|
|
4
4
|
import * as i0 from "@angular/core";
|
|
5
5
|
export const PRELOAD_SEGMENT_TOKEN = new InjectionToken('DbxAnalyticsSegmentApiServicePreload');
|
|
6
6
|
export class DbxAnalyticsSegmentApiServiceConfig {
|
|
7
|
+
writeKey;
|
|
8
|
+
logging = true;
|
|
9
|
+
active = true;
|
|
7
10
|
constructor(writeKey) {
|
|
8
11
|
this.writeKey = writeKey;
|
|
9
|
-
this.logging = true;
|
|
10
|
-
this.active = true;
|
|
11
12
|
}
|
|
12
13
|
}
|
|
13
14
|
/**
|
|
@@ -16,11 +17,11 @@ export class DbxAnalyticsSegmentApiServiceConfig {
|
|
|
16
17
|
* This requires some setup in index.html.
|
|
17
18
|
*/
|
|
18
19
|
export class DbxAnalyticsSegmentApiService extends AbstractAsyncWindowLoadedService {
|
|
19
|
-
|
|
20
|
-
static
|
|
21
|
-
|
|
20
|
+
_config = inject(DbxAnalyticsSegmentApiServiceConfig);
|
|
21
|
+
static SEGMENT_API_WINDOW_KEY = 'analytics';
|
|
22
|
+
static SEGMENT_READY_KEY = 'SegmentReady';
|
|
23
|
+
constructor(preload) {
|
|
22
24
|
super(DbxAnalyticsSegmentApiService.SEGMENT_API_WINDOW_KEY, undefined, 'Segment', preload);
|
|
23
|
-
this._config = _config;
|
|
24
25
|
}
|
|
25
26
|
get config() {
|
|
26
27
|
return this._config;
|
|
@@ -49,13 +50,18 @@ export class DbxAnalyticsSegmentApiService extends AbstractAsyncWindowLoadedServ
|
|
|
49
50
|
}
|
|
50
51
|
});
|
|
51
52
|
}
|
|
52
|
-
static
|
|
53
|
-
static
|
|
53
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DbxAnalyticsSegmentApiService, deps: [{ token: PRELOAD_SEGMENT_TOKEN, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
54
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DbxAnalyticsSegmentApiService, providedIn: 'root' });
|
|
54
55
|
}
|
|
55
56
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DbxAnalyticsSegmentApiService, decorators: [{
|
|
56
|
-
type: Injectable
|
|
57
|
-
|
|
57
|
+
type: Injectable,
|
|
58
|
+
args: [{
|
|
59
|
+
providedIn: 'root'
|
|
60
|
+
}]
|
|
61
|
+
}], ctorParameters: function () { return [{ type: undefined, decorators: [{
|
|
62
|
+
type: Optional
|
|
63
|
+
}, {
|
|
58
64
|
type: Inject,
|
|
59
65
|
args: [PRELOAD_SEGMENT_TOKEN]
|
|
60
66
|
}] }]; } });
|
|
61
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
67
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VnbWVudC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZGJ4LWFuYWx5dGljcy9zcmMvbGliL3Byb3ZpZGVycy9zZWdtZW50L3NlZ21lbnQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNyRixPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNwRSxPQUFPLEVBQVMsSUFBSSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUU1QyxNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBRyxJQUFJLGNBQWMsQ0FBUyxzQ0FBc0MsQ0FBQyxDQUFDO0FBRXhHLE1BQU0sT0FBTyxtQ0FBbUM7SUFHM0I7SUFGbkIsT0FBTyxHQUFHLElBQUksQ0FBQztJQUNmLE1BQU0sR0FBRyxJQUFJLENBQUM7SUFDZCxZQUFtQixRQUFnQjtRQUFoQixhQUFRLEdBQVIsUUFBUSxDQUFRO0lBQUcsQ0FBQztDQUN4QztBQU9EOzs7O0dBSUc7QUFJSCxNQUFNLE9BQU8sNkJBQThCLFNBQVEsZ0NBQThEO0lBQzlGLE9BQU8sR0FBRyxNQUFNLENBQUMsbUNBQW1DLENBQUMsQ0FBQztJQUV2RSxNQUFNLENBQVUsc0JBQXNCLEdBQUcsV0FBVyxDQUFDO0lBQ3JELE1BQU0sQ0FBVSxpQkFBaUIsR0FBRyxjQUFjLENBQUM7SUFFbkQsWUFBdUQsT0FBd0I7UUFDN0UsS0FBSyxDQUFDLDZCQUE2QixDQUFDLHNCQUFzQixFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDN0YsQ0FBQztJQUVELElBQUksTUFBTTtRQUNSLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN0QixDQUFDO0lBRWtCLDhCQUE4QjtRQUMvQyxPQUFPLElBQUksQ0FBQztZQUNWLHdDQUF3QztZQUN4QyxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFFLE1BQU0sQ0FBQyxTQUFxQyxDQUFDLE9BQU8sQ0FBQztZQUMzRSxhQUFhLEVBQUUsR0FBRztTQUNuQixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRWtCLFlBQVksQ0FBQyxPQUFxQztRQUNuRSxPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQ3JDLElBQUk7Z0JBQ0YsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMscUJBQXFCO2dCQUUxRCx3Q0FBd0M7Z0JBQ3hDLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFO29CQUNqQixpR0FBaUc7b0JBQ2pHLE1BQU0sT0FBTyxHQUFpQyxNQUFNLENBQUMsNkJBQTZCLENBQUMsc0JBQXNCLENBQUMsQ0FBQztvQkFDM0csT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUNuQixDQUFDLENBQUMsQ0FBQzthQUNKO1lBQUMsT0FBTyxDQUFDLEVBQUU7Z0JBQ1YsT0FBTyxDQUFDLEdBQUcsQ0FBQywwQkFBMEIsR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFDNUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ1g7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7d0dBdENVLDZCQUE2QixrQkFNUixxQkFBcUI7NEdBTjFDLDZCQUE2QixjQUY1QixNQUFNOzs0RkFFUCw2QkFBNkI7a0JBSHpDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25COzswQkFPYyxRQUFROzswQkFBSSxNQUFNOzJCQUFDLHFCQUFxQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIEluamVjdGlvblRva2VuLCBJbmplY3QsIGluamVjdCwgT3B0aW9uYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFic3RyYWN0QXN5bmNXaW5kb3dMb2FkZWRTZXJ2aWNlIH0gZnJvbSAnQGRlcmVla2IvYnJvd3Nlcic7XG5pbXBvcnQgeyBNYXliZSwgcG9sbCB9IGZyb20gJ0BkZXJlZWtiL3V0aWwnO1xuXG5leHBvcnQgY29uc3QgUFJFTE9BRF9TRUdNRU5UX1RPS0VOID0gbmV3IEluamVjdGlvblRva2VuPHN0cmluZz4oJ0RieEFuYWx5dGljc1NlZ21lbnRBcGlTZXJ2aWNlUHJlbG9hZCcpO1xuXG5leHBvcnQgY2xhc3MgRGJ4QW5hbHl0aWNzU2VnbWVudEFwaVNlcnZpY2VDb25maWcge1xuICBsb2dnaW5nID0gdHJ1ZTtcbiAgYWN0aXZlID0gdHJ1ZTtcbiAgY29uc3RydWN0b3IocHVibGljIHdyaXRlS2V5OiBzdHJpbmcpIHt9XG59XG5cbi8qKlxuICogV2hlbiB0aGUgU2VnbWVudCBsaWJyYXJ5IGZpbmlzaGVzIGxvYWRpbmcsIGl0IGlzIGludm9rZWQuXG4gKi9cbnR5cGUgU2VnbWVudEFuYWx5dGljc0ludm9rZWQgPSBTZWdtZW50QW5hbHl0aWNzLkFuYWx5dGljc0pTICYgeyBpbnZva2VkPzogYm9vbGVhbiB9O1xuXG4vKipcbiAqIFNlZ21lbnQgQVBJIFNlcnZpY2UgdXNlZCBmb3Igd2FpdGluZy9yZXRyaWV2aW5nIHRoZSBzZWdtZW50IEFQSSBmcm9tIHdpbmRvdyB3aGVuIGluaXRpYWxpemVkLlxuICpcbiAqIFRoaXMgcmVxdWlyZXMgc29tZSBzZXR1cCBpbiBpbmRleC5odG1sLlxuICovXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBEYnhBbmFseXRpY3NTZWdtZW50QXBpU2VydmljZSBleHRlbmRzIEFic3RyYWN0QXN5bmNXaW5kb3dMb2FkZWRTZXJ2aWNlPFNlZ21lbnRBbmFseXRpY3MuQW5hbHl0aWNzSlM+IHtcbiAgcHJpdmF0ZSByZWFkb25seSBfY29uZmlnID0gaW5qZWN0KERieEFuYWx5dGljc1NlZ21lbnRBcGlTZXJ2aWNlQ29uZmlnKTtcblxuICBzdGF0aWMgcmVhZG9ubHkgU0VHTUVOVF9BUElfV0lORE9XX0tFWSA9ICdhbmFseXRpY3MnO1xuICBzdGF0aWMgcmVhZG9ubHkgU0VHTUVOVF9SRUFEWV9LRVkgPSAnU2VnbWVudFJlYWR5JztcblxuICBjb25zdHJ1Y3RvcihAT3B0aW9uYWwoKSBASW5qZWN0KFBSRUxPQURfU0VHTUVOVF9UT0tFTikgcHJlbG9hZD86IE1heWJlPGJvb2xlYW4+KSB7XG4gICAgc3VwZXIoRGJ4QW5hbHl0aWNzU2VnbWVudEFwaVNlcnZpY2UuU0VHTUVOVF9BUElfV0lORE9XX0tFWSwgdW5kZWZpbmVkLCAnU2VnbWVudCcsIHByZWxvYWQpO1xuICB9XG5cbiAgZ2V0IGNvbmZpZygpOiBEYnhBbmFseXRpY3NTZWdtZW50QXBpU2VydmljZUNvbmZpZyB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbmZpZztcbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSBfcHJlcGFyZUNvbXBsZXRlTG9hZGluZ1NlcnZpY2UoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHBvbGwoe1xuICAgICAgLy8gcG9sbCB1bnRpbCBhbmFseXRpY3MuaW52b2tlZCBpcyB0cnVlLlxuICAgICAgY2hlY2s6ICgpID0+IEJvb2xlYW4oKHdpbmRvdy5hbmFseXRpY3MgYXMgU2VnbWVudEFuYWx5dGljc0ludm9rZWQpLmludm9rZWQpLFxuICAgICAgdGltZXNUb0dpdmV1cDogMTAwXG4gICAgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgX2luaXRTZXJ2aWNlKHNlcnZpY2U6IFNlZ21lbnRBbmFseXRpY3MuQW5hbHl0aWNzSlMpOiBQcm9taXNlPFNlZ21lbnRBbmFseXRpY3MuQW5hbHl0aWNzSlM+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgc2VydmljZS5sb2FkKHRoaXMuX2NvbmZpZy53cml0ZUtleSk7IC8vIEluaXRpYWxpemUgU2VnbWVudFxuXG4gICAgICAgIC8vIFdhaXQgZm9yIHRoZSBzZXJ2aWNlIHRvIHJlYWR5IGl0c2VsZi5cbiAgICAgICAgc2VydmljZS5yZWFkeSgoKSA9PiB7XG4gICAgICAgICAgLy8gU2VnbWVudCBjaGFuZ2VzIGl0c2VsZiBvciByYXRoZXIgdGhlIHRhcmdldCwgYW5kIHRoZSBwcmV2aW91cyBpbml0aWFsIHRhcmdldCBpcyBpZ25vcmVkIGFmdGVyLlxuICAgICAgICAgIGNvbnN0IHNlZ21lbnQ6IFNlZ21lbnRBbmFseXRpY3MuQW5hbHl0aWNzSlMgPSB3aW5kb3dbRGJ4QW5hbHl0aWNzU2VnbWVudEFwaVNlcnZpY2UuU0VHTUVOVF9BUElfV0lORE9XX0tFWV07XG4gICAgICAgICAgcmVzb2x2ZShzZWdtZW50KTtcbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdGYWlsZWQgdG8gaW5pdCBzZWdtZW50OiAnICsgZSk7XG4gICAgICAgIHJlamVjdChlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuIl19
|
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { Injectable, Optional, Inject, Directive,
|
|
2
|
+
import { inject, Injectable, Optional, Inject, Directive, Input, NgModule, InjectionToken } from '@angular/core';
|
|
3
3
|
import { SubscriptionObject, filterMaybe } from '@dereekb/rxjs';
|
|
4
4
|
import { BehaviorSubject, shareReplay, switchMap, Subject, of, first, distinctUntilChanged, tap, merge, combineLatest } from 'rxjs';
|
|
5
|
-
import
|
|
6
|
-
import { AbstractSubscriptionDirective } from '@dereekb/dbx-core';
|
|
5
|
+
import { AbstractSubscriptionDirective, DbxActionContextStoreSourceInstance } from '@dereekb/dbx-core';
|
|
7
6
|
import { safeCompareEquality, poll } from '@dereekb/util';
|
|
8
7
|
import { AbstractAsyncWindowLoadedService } from '@dereekb/browser';
|
|
9
8
|
|
|
@@ -41,12 +40,10 @@ class DbxAnalyticsServiceListener {
|
|
|
41
40
|
* Abstract AnalyticsServiceListener implementation.
|
|
42
41
|
*/
|
|
43
42
|
class AbstractDbxAnalyticsServiceListener {
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
this.analyticsEvents$ = this.analytics$.pipe(switchMap((x) => x.events$), shareReplay(1));
|
|
49
|
-
}
|
|
43
|
+
_sub = new SubscriptionObject();
|
|
44
|
+
_analytics = new BehaviorSubject(undefined);
|
|
45
|
+
analytics$ = this._analytics.pipe(filterMaybe(), shareReplay(1));
|
|
46
|
+
analyticsEvents$ = this.analytics$.pipe(switchMap((x) => x.events$), shareReplay(1));
|
|
50
47
|
// MARK: AnalyticsServiceListener
|
|
51
48
|
listenToService(service) {
|
|
52
49
|
this._analytics.next(service);
|
|
@@ -62,11 +59,14 @@ class AbstractDbxAnalyticsServiceListener {
|
|
|
62
59
|
}
|
|
63
60
|
}
|
|
64
61
|
class DbxAnalyticsServiceConfiguration {
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
62
|
+
listeners = [];
|
|
63
|
+
isProduction;
|
|
64
|
+
logEvents;
|
|
65
|
+
userSource;
|
|
68
66
|
}
|
|
69
67
|
class DbxAnalyticsStreamEventAnalyticsEventWrapper {
|
|
68
|
+
event;
|
|
69
|
+
type;
|
|
70
70
|
constructor(event, type = DbxAnalyticsStreamEventType.Event) {
|
|
71
71
|
this.event = event;
|
|
72
72
|
this.type = type;
|
|
@@ -82,22 +82,22 @@ class DbxAnalyticsStreamEventAnalyticsEventWrapper {
|
|
|
82
82
|
* Primary analytics service that emits analytics events that components can listen to.
|
|
83
83
|
*/
|
|
84
84
|
class DbxAnalyticsService {
|
|
85
|
+
_config = inject(DbxAnalyticsServiceConfiguration);
|
|
85
86
|
// TODO: Make these configurable.
|
|
86
|
-
static
|
|
87
|
-
static
|
|
88
|
-
static
|
|
89
|
-
static
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
this._loggerSub = new SubscriptionObject();
|
|
87
|
+
static USER_REGISTRATION_EVENT_NAME = 'User Registered';
|
|
88
|
+
static USER_LOGIN_EVENT_NAME = 'User Login';
|
|
89
|
+
static USER_LOGOUT_EVENT_NAME = 'User Logout';
|
|
90
|
+
static USER_PROPERTIES_EVENT_NAME = 'User Properties';
|
|
91
|
+
_subject = new Subject();
|
|
92
|
+
events$ = this._subject.asObservable();
|
|
93
|
+
_userSource = new BehaviorSubject(undefined);
|
|
94
|
+
user$ = this._userSource.pipe(switchMap((x) => (x ? x.analyticsUser$ : of(undefined))), shareReplay(1));
|
|
95
|
+
_userSourceSub = new SubscriptionObject();
|
|
96
|
+
_userIdEventSub = new SubscriptionObject();
|
|
97
|
+
_loggerSub = new SubscriptionObject();
|
|
98
|
+
constructor(userSource) {
|
|
99
99
|
this._init();
|
|
100
|
-
userSource = userSource || _config.userSource;
|
|
100
|
+
userSource = userSource || this._config.userSource;
|
|
101
101
|
if (userSource) {
|
|
102
102
|
this.setUserSource(userSource);
|
|
103
103
|
}
|
|
@@ -219,12 +219,12 @@ class DbxAnalyticsService {
|
|
|
219
219
|
this._userIdEventSub.destroy();
|
|
220
220
|
this._loggerSub.destroy();
|
|
221
221
|
}
|
|
222
|
-
static
|
|
223
|
-
static
|
|
222
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DbxAnalyticsService, deps: [{ token: DbxAnalyticsUserSource, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
223
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DbxAnalyticsService });
|
|
224
224
|
}
|
|
225
225
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DbxAnalyticsService, decorators: [{
|
|
226
226
|
type: Injectable
|
|
227
|
-
}], ctorParameters: function () { return [{ type:
|
|
227
|
+
}], ctorParameters: function () { return [{ type: undefined, decorators: [{
|
|
228
228
|
type: Optional
|
|
229
229
|
}, {
|
|
230
230
|
type: Inject,
|
|
@@ -235,19 +235,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
235
235
|
* Used to listen to an ActionContext and send analytical events based on action events.
|
|
236
236
|
*/
|
|
237
237
|
class DbxActionAnalyticsDirective extends AbstractSubscriptionDirective {
|
|
238
|
+
source = inject((DbxActionContextStoreSourceInstance), { host: true });
|
|
239
|
+
analyticsService = inject(DbxAnalyticsService);
|
|
240
|
+
_config = new BehaviorSubject(undefined);
|
|
241
|
+
config$ = this._config.pipe(filterMaybe(), shareReplay(1));
|
|
238
242
|
get config() {
|
|
239
243
|
return this._config.value;
|
|
240
244
|
}
|
|
241
245
|
set config(config) {
|
|
242
246
|
this._config.next(config);
|
|
243
247
|
}
|
|
244
|
-
constructor(source, analyticsService) {
|
|
245
|
-
super();
|
|
246
|
-
this.source = source;
|
|
247
|
-
this.analyticsService = analyticsService;
|
|
248
|
-
this._config = new BehaviorSubject(undefined);
|
|
249
|
-
this.config$ = this._config.pipe(filterMaybe(), shareReplay(1));
|
|
250
|
-
}
|
|
251
248
|
ngOnInit() {
|
|
252
249
|
this.sub = this.config$
|
|
253
250
|
.pipe(switchMap(({ onTriggered, onReady, onSuccess, onError }) => {
|
|
@@ -279,25 +276,23 @@ class DbxActionAnalyticsDirective extends AbstractSubscriptionDirective {
|
|
|
279
276
|
this._config.complete();
|
|
280
277
|
});
|
|
281
278
|
}
|
|
282
|
-
static
|
|
283
|
-
static
|
|
279
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DbxActionAnalyticsDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive });
|
|
280
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: DbxActionAnalyticsDirective, selector: "[dbxActionAnalytics]", inputs: { config: ["dbxActionAnalytics", "config"] }, usesInheritance: true, ngImport: i0 });
|
|
284
281
|
}
|
|
285
282
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DbxActionAnalyticsDirective, decorators: [{
|
|
286
283
|
type: Directive,
|
|
287
284
|
args: [{
|
|
288
285
|
selector: '[dbxActionAnalytics]'
|
|
289
286
|
}]
|
|
290
|
-
}],
|
|
291
|
-
type: Host
|
|
292
|
-
}] }, { type: DbxAnalyticsService }]; }, propDecorators: { config: [{
|
|
287
|
+
}], propDecorators: { config: [{
|
|
293
288
|
type: Input,
|
|
294
289
|
args: ['dbxActionAnalytics']
|
|
295
290
|
}] } });
|
|
296
291
|
|
|
297
292
|
class DbxAnalyticsActionModule {
|
|
298
|
-
static
|
|
299
|
-
static
|
|
300
|
-
static
|
|
293
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DbxAnalyticsActionModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
294
|
+
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.2.12", ngImport: i0, type: DbxAnalyticsActionModule, declarations: [DbxActionAnalyticsDirective], exports: [DbxActionAnalyticsDirective] });
|
|
295
|
+
static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DbxAnalyticsActionModule });
|
|
301
296
|
}
|
|
302
297
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DbxAnalyticsActionModule, decorators: [{
|
|
303
298
|
type: NgModule,
|
|
@@ -319,9 +314,9 @@ class DbxAnalyticsModule {
|
|
|
319
314
|
]
|
|
320
315
|
};
|
|
321
316
|
}
|
|
322
|
-
static
|
|
323
|
-
static
|
|
324
|
-
static
|
|
317
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DbxAnalyticsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
318
|
+
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.2.12", ngImport: i0, type: DbxAnalyticsModule });
|
|
319
|
+
static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DbxAnalyticsModule });
|
|
325
320
|
}
|
|
326
321
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DbxAnalyticsModule, decorators: [{
|
|
327
322
|
type: NgModule
|
|
@@ -329,10 +324,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
329
324
|
|
|
330
325
|
const PRELOAD_SEGMENT_TOKEN = new InjectionToken('DbxAnalyticsSegmentApiServicePreload');
|
|
331
326
|
class DbxAnalyticsSegmentApiServiceConfig {
|
|
327
|
+
writeKey;
|
|
328
|
+
logging = true;
|
|
329
|
+
active = true;
|
|
332
330
|
constructor(writeKey) {
|
|
333
331
|
this.writeKey = writeKey;
|
|
334
|
-
this.logging = true;
|
|
335
|
-
this.active = true;
|
|
336
332
|
}
|
|
337
333
|
}
|
|
338
334
|
/**
|
|
@@ -341,11 +337,11 @@ class DbxAnalyticsSegmentApiServiceConfig {
|
|
|
341
337
|
* This requires some setup in index.html.
|
|
342
338
|
*/
|
|
343
339
|
class DbxAnalyticsSegmentApiService extends AbstractAsyncWindowLoadedService {
|
|
344
|
-
|
|
345
|
-
static
|
|
346
|
-
|
|
340
|
+
_config = inject(DbxAnalyticsSegmentApiServiceConfig);
|
|
341
|
+
static SEGMENT_API_WINDOW_KEY = 'analytics';
|
|
342
|
+
static SEGMENT_READY_KEY = 'SegmentReady';
|
|
343
|
+
constructor(preload) {
|
|
347
344
|
super(DbxAnalyticsSegmentApiService.SEGMENT_API_WINDOW_KEY, undefined, 'Segment', preload);
|
|
348
|
-
this._config = _config;
|
|
349
345
|
}
|
|
350
346
|
get config() {
|
|
351
347
|
return this._config;
|
|
@@ -374,12 +370,17 @@ class DbxAnalyticsSegmentApiService extends AbstractAsyncWindowLoadedService {
|
|
|
374
370
|
}
|
|
375
371
|
});
|
|
376
372
|
}
|
|
377
|
-
static
|
|
378
|
-
static
|
|
373
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DbxAnalyticsSegmentApiService, deps: [{ token: PRELOAD_SEGMENT_TOKEN, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
374
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DbxAnalyticsSegmentApiService, providedIn: 'root' });
|
|
379
375
|
}
|
|
380
376
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DbxAnalyticsSegmentApiService, decorators: [{
|
|
381
|
-
type: Injectable
|
|
382
|
-
|
|
377
|
+
type: Injectable,
|
|
378
|
+
args: [{
|
|
379
|
+
providedIn: 'root'
|
|
380
|
+
}]
|
|
381
|
+
}], ctorParameters: function () { return [{ type: undefined, decorators: [{
|
|
382
|
+
type: Optional
|
|
383
|
+
}, {
|
|
383
384
|
type: Inject,
|
|
384
385
|
args: [PRELOAD_SEGMENT_TOKEN]
|
|
385
386
|
}] }]; } });
|
|
@@ -388,9 +389,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
388
389
|
* DbxAnalyticsServiceListener adapter for Segment.
|
|
389
390
|
*/
|
|
390
391
|
class DbxAnalyticsSegmentServiceListener extends AbstractDbxAnalyticsServiceListener {
|
|
391
|
-
|
|
392
|
+
_segmentApi = inject(DbxAnalyticsSegmentApiService);
|
|
393
|
+
constructor() {
|
|
392
394
|
super();
|
|
393
|
-
this._segmentApi = _segmentApi;
|
|
394
395
|
if (this._segmentApi.config.logging) {
|
|
395
396
|
console.log('SegmentAnalyticsListenerService: Segment is logging events.');
|
|
396
397
|
}
|
|
@@ -468,12 +469,15 @@ class DbxAnalyticsSegmentServiceListener extends AbstractDbxAnalyticsServiceList
|
|
|
468
469
|
api.reset();
|
|
469
470
|
}
|
|
470
471
|
}
|
|
471
|
-
static
|
|
472
|
-
static
|
|
472
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DbxAnalyticsSegmentServiceListener, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
473
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DbxAnalyticsSegmentServiceListener, providedIn: 'root' });
|
|
473
474
|
}
|
|
474
475
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DbxAnalyticsSegmentServiceListener, decorators: [{
|
|
475
|
-
type: Injectable
|
|
476
|
-
|
|
476
|
+
type: Injectable,
|
|
477
|
+
args: [{
|
|
478
|
+
providedIn: 'root'
|
|
479
|
+
}]
|
|
480
|
+
}], ctorParameters: function () { return []; } });
|
|
477
481
|
|
|
478
482
|
class DbxAnalyticsSegmentModule {
|
|
479
483
|
static forRoot(preloadService) {
|
|
@@ -483,14 +487,13 @@ class DbxAnalyticsSegmentModule {
|
|
|
483
487
|
{
|
|
484
488
|
provide: PRELOAD_SEGMENT_TOKEN,
|
|
485
489
|
useValue: preloadService
|
|
486
|
-
}
|
|
487
|
-
DbxAnalyticsSegmentApiService
|
|
490
|
+
}
|
|
488
491
|
]
|
|
489
492
|
};
|
|
490
493
|
}
|
|
491
|
-
static
|
|
492
|
-
static
|
|
493
|
-
static
|
|
494
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DbxAnalyticsSegmentModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
495
|
+
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.2.12", ngImport: i0, type: DbxAnalyticsSegmentModule });
|
|
496
|
+
static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DbxAnalyticsSegmentModule });
|
|
494
497
|
}
|
|
495
498
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DbxAnalyticsSegmentModule, decorators: [{
|
|
496
499
|
type: NgModule,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dereekb-dbx-analytics.mjs","sources":["../../../../packages/dbx-analytics/src/lib/analytics/analytics.stream.ts","../../../../packages/dbx-analytics/src/lib/analytics/analytics.service.ts","../../../../packages/dbx-analytics/src/lib/action/analytics.action.directive.ts","../../../../packages/dbx-analytics/src/lib/action/analytics.action.module.ts","../../../../packages/dbx-analytics/src/lib/analytics/analytics.module.ts","../../../../packages/dbx-analytics/src/lib/providers/segment/segment.service.ts","../../../../packages/dbx-analytics/src/lib/providers/segment/segment.listener.service.ts","../../../../packages/dbx-analytics/src/lib/providers/segment/segment.module.ts","../../../../packages/dbx-analytics/src/dereekb-dbx-analytics.ts"],"sourcesContent":["import { Maybe } from '@dereekb/util';\nimport { DbxAnalyticsUser, DbxUserAnalyticsEvent, DbxAnalyticsUserId } from './analytics';\n\nexport enum DbxAnalyticsStreamEventType {\n PageView,\n /**\n * Emitted any time the user value changes.\n *\n * Can emit when the user goes from defined to undefined.\n */\n UserChange,\n /**\n * Emitted any time the user id changes.\n */\n UserIdChange,\n\n // User Events\n NewUserEvent,\n UserLoginEvent,\n UserLogoutEvent,\n UserPropertiesEvent,\n\n // Events\n Event\n}\n\nexport interface DbxAnalyticsStreamEvent {\n readonly type: DbxAnalyticsStreamEventType;\n readonly user?: Maybe<DbxAnalyticsUser>;\n readonly event?: DbxUserAnalyticsEvent;\n readonly userId?: DbxAnalyticsUserId;\n}\n","import { Observable, Subject, BehaviorSubject, of, Subscription, first, shareReplay, switchMap, distinctUntilChanged } from 'rxjs';\nimport { Inject, Injectable, Optional } from '@angular/core';\nimport { SubscriptionObject, filterMaybe } from '@dereekb/rxjs';\nimport { DbxAnalyticsEvent, DbxAnalyticsEventData, DbxAnalyticsEventName, DbxAnalyticsUser, NewUserAnalyticsEventData, DbxUserAnalyticsEvent } from './analytics';\nimport { DbxAnalyticsStreamEvent, DbxAnalyticsStreamEventType } from './analytics.stream';\nimport { Maybe, Destroyable, safeCompareEquality } from '@dereekb/util';\n\nexport abstract class DbxAnalyticsEventEmitterService {\n abstract sendNewUserEvent(user: DbxAnalyticsUser, data: NewUserAnalyticsEventData): void;\n abstract sendUserLoginEvent(user: DbxAnalyticsUser, data?: DbxAnalyticsEventData): void;\n abstract sendUserLogoutEvent(data?: DbxAnalyticsEventData): void;\n abstract sendUserPropertiesEvent(user: DbxAnalyticsUser, data?: DbxAnalyticsEventData): void;\n abstract sendEventData(name: DbxAnalyticsEventName, data?: DbxAnalyticsEventData): void;\n abstract sendEvent(event: DbxAnalyticsEvent): void;\n abstract sendPageView(page?: string): void;\n}\n\nexport abstract class DbxAnalyticsEventStreamService {\n abstract readonly events$: Observable<DbxAnalyticsStreamEvent>;\n}\n\nexport abstract class DbxAnalyticsUserSource {\n abstract readonly analyticsUser$: Observable<Maybe<DbxAnalyticsUser>>;\n}\n\nexport abstract class DbxAnalyticsServiceListener {\n public abstract listenToService(service: DbxAnalyticsService): void;\n}\n\n/**\n * Abstract AnalyticsServiceListener implementation.\n */\nexport abstract class AbstractDbxAnalyticsServiceListener implements DbxAnalyticsServiceListener, Destroyable {\n private _sub = new SubscriptionObject();\n protected _analytics = new BehaviorSubject<Maybe<DbxAnalyticsService>>(undefined);\n\n readonly analytics$ = this._analytics.pipe(filterMaybe(), shareReplay(1));\n readonly analyticsEvents$ = this.analytics$.pipe(\n switchMap((x) => x.events$),\n shareReplay(1)\n );\n\n // MARK: AnalyticsServiceListener\n listenToService(service: DbxAnalyticsService): void {\n this._analytics.next(service);\n const sub = this._initializeServiceSubscription();\n\n if (sub !== false) {\n this._sub.subscription = sub;\n }\n }\n\n protected abstract _initializeServiceSubscription(): Subscription | false;\n\n // MARK: Destroy\n destroy(): void {\n this._analytics.complete();\n this._sub.destroy();\n }\n}\n\nexport abstract class DbxAnalyticsServiceConfiguration {\n listeners: DbxAnalyticsServiceListener[] = [];\n isProduction?: boolean;\n logEvents?: boolean;\n userSource?: DbxAnalyticsUserSource;\n}\n\nexport class DbxAnalyticsStreamEventAnalyticsEventWrapper implements DbxAnalyticsStreamEvent {\n constructor(public readonly event: DbxUserAnalyticsEvent, public readonly type: DbxAnalyticsStreamEventType = DbxAnalyticsStreamEventType.Event) {}\n\n public get user(): Maybe<DbxAnalyticsUser> {\n return this.event.user;\n }\n\n public get userId(): string | undefined {\n return this.user ? this.user.user : undefined;\n }\n}\n\n/**\n * Primary analytics service that emits analytics events that components can listen to.\n */\n@Injectable()\nexport class DbxAnalyticsService implements DbxAnalyticsEventStreamService, DbxAnalyticsEventEmitterService, Destroyable {\n // TODO: Make these configurable.\n\n static readonly USER_REGISTRATION_EVENT_NAME = 'User Registered';\n static readonly USER_LOGIN_EVENT_NAME = 'User Login';\n static readonly USER_LOGOUT_EVENT_NAME = 'User Logout';\n static readonly USER_PROPERTIES_EVENT_NAME = 'User Properties';\n\n private _subject = new Subject<DbxAnalyticsStreamEvent>();\n readonly events$ = this._subject.asObservable();\n\n private _userSource = new BehaviorSubject<Maybe<DbxAnalyticsUserSource>>(undefined);\n\n readonly user$ = this._userSource.pipe(\n switchMap((x) => (x ? x.analyticsUser$ : of(undefined))),\n shareReplay(1)\n );\n\n private _userSourceSub = new SubscriptionObject();\n private _userIdEventSub = new SubscriptionObject();\n private _loggerSub = new SubscriptionObject();\n\n constructor(private _config: DbxAnalyticsServiceConfiguration, @Optional() @Inject(DbxAnalyticsUserSource) userSource?: Maybe<DbxAnalyticsUserSource>) {\n this._init();\n\n userSource = userSource || _config.userSource;\n if (userSource) {\n this.setUserSource(userSource);\n }\n }\n\n // MARK: Source\n /**\n * Sets the user directly, overridding the UserSource.\n */\n public setUser(user: Maybe<DbxAnalyticsUser>): void {\n let source: Maybe<DbxAnalyticsUserSource>;\n\n if (user) {\n source = { analyticsUser$: of(user) };\n }\n\n this._userSource.next(source);\n\n if (this._userSource.value) {\n console.warn('DbxAnalyticsService has a userSource that is set. Source is now overridden by setUser() value.');\n }\n }\n\n public setUserSource(source: DbxAnalyticsUserSource): void {\n this._userSource.next(source);\n }\n\n // MARK: AnalyticsEventEmitterService\n /**\n * Sends an event.\n */\n public sendNewUserEvent(user: DbxAnalyticsUser, data: NewUserAnalyticsEventData): void {\n this.sendNextEvent(\n {\n name: DbxAnalyticsService.USER_REGISTRATION_EVENT_NAME,\n data\n },\n DbxAnalyticsStreamEventType.NewUserEvent,\n user\n );\n }\n\n public sendUserLoginEvent(user: DbxAnalyticsUser, data?: DbxAnalyticsEventData): void {\n this.sendNextEvent(\n {\n name: DbxAnalyticsService.USER_LOGIN_EVENT_NAME,\n data\n },\n DbxAnalyticsStreamEventType.UserLoginEvent,\n user\n );\n }\n\n public sendUserLogoutEvent(data?: DbxAnalyticsEventData, clearUser = true): void {\n this.sendNextEvent(\n {\n name: DbxAnalyticsService.USER_LOGOUT_EVENT_NAME,\n data\n },\n DbxAnalyticsStreamEventType.UserLogoutEvent\n );\n\n if (clearUser) {\n this.setUser(undefined);\n }\n }\n\n public sendUserPropertiesEvent(user: DbxAnalyticsUser, data?: DbxAnalyticsEventData): void {\n this.sendNextEvent(\n {\n name: DbxAnalyticsService.USER_PROPERTIES_EVENT_NAME,\n data\n },\n DbxAnalyticsStreamEventType.UserPropertiesEvent,\n user\n );\n }\n\n public sendEventData(name: DbxAnalyticsEventName, data?: DbxAnalyticsEventData): void {\n return this.sendEvent({\n name,\n data\n });\n }\n\n public sendEventType(eventType: DbxAnalyticsEventName): void {\n this.sendNextEvent(\n {\n name: eventType\n },\n DbxAnalyticsStreamEventType.Event\n );\n }\n\n public sendEvent(event: DbxAnalyticsEvent): void {\n this.sendNextEvent(event, DbxAnalyticsStreamEventType.Event);\n }\n\n public sendPageView(page?: string): void {\n this.sendNextEvent(\n {\n name: page\n },\n DbxAnalyticsStreamEventType.PageView\n );\n }\n\n /**\n * Sends the next event.\n *\n * @param event\n * @param type\n * @param userOverride Uses this user if set as null or an override value. If undefined the current analytics user is used.\n */\n protected sendNextEvent(event: DbxAnalyticsEvent = {}, type: DbxAnalyticsStreamEventType, userOverride?: Maybe<DbxAnalyticsUser>): void {\n this.user$.pipe(first()).subscribe((analyticsUser) => {\n const user: Maybe<DbxAnalyticsUser> = userOverride !== undefined ? userOverride : analyticsUser;\n const analyticsEvent: DbxUserAnalyticsEvent = { ...event, user };\n this.nextEvent(analyticsEvent, type);\n });\n }\n\n protected nextEvent(event: DbxUserAnalyticsEvent, type: DbxAnalyticsStreamEventType): void {\n const wrapper = new DbxAnalyticsStreamEventAnalyticsEventWrapper(event, type);\n this._subject.next(wrapper);\n }\n\n // MARK: Internal\n private _init(): void {\n if (this._config.isProduction) {\n // Initialize listeners.\n this._config.listeners.forEach((listener) => {\n listener.listenToService(this);\n });\n } else {\n console.warn('AnalyticsService: Analytics not in production mode. All analytics events are ignored.');\n }\n\n if (this._config.logEvents || !this._config.isProduction) {\n console.log('AnalyticsService: Log analytics events enabled.');\n\n // Create a new subscription\n this._loggerSub.subscription = this._subject.subscribe((x) => {\n console.log(`AnalyticsService: Analytics Event - ${DbxAnalyticsStreamEventType[x.type]} | User: ${x.userId} | Data: ${JSON.stringify(x.event)}.`);\n });\n }\n\n this._userSourceSub.subscription = this.user$.subscribe((user) => {\n this.sendNextEvent({}, DbxAnalyticsStreamEventType.UserChange, user ?? null);\n });\n\n this._userIdEventSub.subscription = this.user$.pipe(distinctUntilChanged((a, b) => safeCompareEquality(a, b, (x, y) => x.user === y.user))).subscribe((user) => {\n this.sendNextEvent({}, DbxAnalyticsStreamEventType.UserIdChange, user ?? null);\n });\n }\n\n destroy() {\n this._subject.complete();\n this._userSource.complete();\n this._userSourceSub.destroy();\n this._userIdEventSub.destroy();\n this._loggerSub.destroy();\n }\n}\n","import { filterMaybe } from '@dereekb/rxjs';\nimport { switchMap, tap, shareReplay, BehaviorSubject, merge, Observable, of } from 'rxjs';\nimport { Host, Directive, Input, OnInit, OnDestroy } from '@angular/core';\nimport { DbxActionContextStoreSourceInstance, AbstractSubscriptionDirective } from '@dereekb/dbx-core';\nimport { DbxAnalyticsService } from '../analytics/analytics.service';\nimport { Maybe, ReadableError } from '@dereekb/util';\n\n/**\n * DbxActionAnalyticsDirective config\n */\nexport interface DbxActionAnalyticsConfig<T = unknown, O = unknown> {\n onTriggered?: (service: DbxAnalyticsService) => void;\n onReady?: (service: DbxAnalyticsService, value: T) => void;\n onSuccess?: (service: DbxAnalyticsService, value: Maybe<O>) => void;\n onError?: (service: DbxAnalyticsService, error: Maybe<ReadableError>) => void;\n}\n\n/**\n * Used to listen to an ActionContext and send analytical events based on action events.\n */\n@Directive({\n selector: '[dbxActionAnalytics]'\n})\nexport class DbxActionAnalyticsDirective<T, O> extends AbstractSubscriptionDirective implements OnInit, OnDestroy {\n private _config = new BehaviorSubject<Maybe<DbxActionAnalyticsConfig<T, O>>>(undefined);\n readonly config$ = this._config.pipe(filterMaybe(), shareReplay(1));\n\n @Input('dbxActionAnalytics')\n get config(): Maybe<DbxActionAnalyticsConfig<T, O>> {\n return this._config.value;\n }\n\n set config(config: Maybe<DbxActionAnalyticsConfig<T, O>>) {\n this._config.next(config);\n }\n\n constructor(@Host() readonly source: DbxActionContextStoreSourceInstance<T, O>, readonly analyticsService: DbxAnalyticsService) {\n super();\n }\n\n ngOnInit(): void {\n this.sub = this.config$\n .pipe(\n switchMap(({ onTriggered, onReady, onSuccess, onError }) => {\n const triggerObs: Observable<unknown>[] = [];\n\n if (onTriggered) {\n triggerObs.push(this.source.triggered$.pipe(tap(() => onTriggered(this.analyticsService))));\n }\n\n if (onReady) {\n triggerObs.push(this.source.valueReady$.pipe(tap((value) => onReady(this.analyticsService, value))));\n }\n\n if (onSuccess) {\n triggerObs.push(this.source.success$.pipe(tap((result) => onSuccess(this.analyticsService, result))));\n }\n\n if (onError) {\n triggerObs.push(\n this.source.error$.pipe(\n filterMaybe(),\n tap((error) => onError(this.analyticsService, error))\n )\n );\n }\n\n if (triggerObs.length) {\n return merge(...triggerObs);\n } else {\n return of();\n }\n })\n )\n .subscribe();\n }\n\n override ngOnDestroy(): void {\n this.source.lockSet.onNextUnlock(() => {\n super.ngOnDestroy();\n this._config.complete();\n });\n }\n}\n","import { NgModule } from '@angular/core';\nimport { DbxActionAnalyticsDirective } from './analytics.action.directive';\n\n@NgModule({\n declarations: [DbxActionAnalyticsDirective],\n exports: [DbxActionAnalyticsDirective]\n})\nexport class DbxAnalyticsActionModule {}\n","import { NgModule, ModuleWithProviders, Provider } from '@angular/core';\nimport { DbxAnalyticsService } from './analytics.service';\n\nexport interface DbxAnalyticsModuleOptions {\n /**\n * Provides a AnalyticsServiceConfiguration value.\n */\n analyticsConfigurationProvider: Provider;\n}\n\n@NgModule()\nexport class DbxAnalyticsModule {\n static forRoot(options: DbxAnalyticsModuleOptions): ModuleWithProviders<DbxAnalyticsModule> {\n return {\n ngModule: DbxAnalyticsModule,\n providers: [\n // Configuration\n options.analyticsConfigurationProvider,\n // Service\n DbxAnalyticsService\n ]\n };\n }\n}\n","import { Injectable, InjectionToken, Inject } from '@angular/core';\nimport { AbstractAsyncWindowLoadedService } from '@dereekb/browser';\nimport { poll } from '@dereekb/util';\n\nexport const PRELOAD_SEGMENT_TOKEN = new InjectionToken<string>('DbxAnalyticsSegmentApiServicePreload');\n\nexport class DbxAnalyticsSegmentApiServiceConfig {\n logging = true;\n active = true;\n constructor(public writeKey: string) {}\n}\n\n/**\n * When the Segment library finishes loading, it is invoked.\n */\ntype SegmentAnalyticsInvoked = SegmentAnalytics.AnalyticsJS & { invoked?: boolean };\n\n/**\n * Segment API Service used for waiting/retrieving the segment API from window when initialized.\n *\n * This requires some setup in index.html.\n */\n@Injectable()\nexport class DbxAnalyticsSegmentApiService extends AbstractAsyncWindowLoadedService<SegmentAnalytics.AnalyticsJS> {\n static readonly SEGMENT_API_WINDOW_KEY = 'analytics';\n static readonly SEGMENT_READY_KEY = 'SegmentReady';\n\n constructor(private _config: DbxAnalyticsSegmentApiServiceConfig, @Inject(PRELOAD_SEGMENT_TOKEN) preload: boolean = true) {\n super(DbxAnalyticsSegmentApiService.SEGMENT_API_WINDOW_KEY, undefined, 'Segment', preload);\n }\n\n get config(): DbxAnalyticsSegmentApiServiceConfig {\n return this._config;\n }\n\n protected override _prepareCompleteLoadingService(): Promise<void> {\n return poll({\n // poll until analytics.invoked is true.\n check: () => Boolean((window.analytics as SegmentAnalyticsInvoked).invoked),\n timesToGiveup: 100\n });\n }\n\n protected override _initService(service: SegmentAnalytics.AnalyticsJS): Promise<SegmentAnalytics.AnalyticsJS> {\n return new Promise((resolve, reject) => {\n try {\n service.load(this._config.writeKey); // Initialize Segment\n\n // Wait for the service to ready itself.\n service.ready(() => {\n // Segment changes itself or rather the target, and the previous initial target is ignored after.\n const segment: SegmentAnalytics.AnalyticsJS = window[DbxAnalyticsSegmentApiService.SEGMENT_API_WINDOW_KEY];\n resolve(segment);\n });\n } catch (e) {\n console.log('Failed to init segment: ' + e);\n reject(e);\n }\n });\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Maybe } from '@dereekb/util';\nimport { combineLatest } from 'rxjs';\nimport { AbstractDbxAnalyticsServiceListener, DbxAnalyticsStreamEvent, DbxAnalyticsStreamEventType, DbxAnalyticsUser } from '../../analytics';\nimport { DbxAnalyticsSegmentApiService } from './segment.service';\n\n/**\n * DbxAnalyticsServiceListener adapter for Segment.\n */\n@Injectable()\nexport class DbxAnalyticsSegmentServiceListener extends AbstractDbxAnalyticsServiceListener {\n constructor(private _segmentApi: DbxAnalyticsSegmentApiService) {\n super();\n\n if (this._segmentApi.config.logging) {\n console.log('SegmentAnalyticsListenerService: Segment is logging events.');\n }\n\n if (!this._segmentApi.config.active) {\n console.log('SegmentAnalyticsListenerService: Segment is disabled from sending events to the server.');\n }\n }\n\n protected _initializeServiceSubscription() {\n return combineLatest([this._segmentApi.service$, this.analyticsEvents$]).subscribe(([segment, streamEvent]: [SegmentAnalytics.AnalyticsJS, DbxAnalyticsStreamEvent]) => {\n if (this._segmentApi.config.logging) {\n console.log('Segment Listener Logging Event: ', streamEvent);\n }\n\n if (this._segmentApi.config.active) {\n this.handleStreamEvent(segment, streamEvent);\n }\n });\n }\n\n protected handleStreamEvent(api: SegmentAnalytics.AnalyticsJS, streamEvent: DbxAnalyticsStreamEvent): void {\n switch (streamEvent.type) {\n case DbxAnalyticsStreamEventType.NewUserEvent:\n this.updateWithNewUserEvent(api, streamEvent);\n break;\n case DbxAnalyticsStreamEventType.UserLoginEvent:\n this.changeUser(api, streamEvent.user);\n this.updateWithEvent(api, streamEvent);\n break;\n case DbxAnalyticsStreamEventType.Event:\n this.updateWithEvent(api, streamEvent);\n break;\n case DbxAnalyticsStreamEventType.UserLogoutEvent:\n this.changeUser(api, undefined);\n break;\n case DbxAnalyticsStreamEventType.PageView:\n api.page();\n break;\n case DbxAnalyticsStreamEventType.UserChange:\n this.changeUser(api, streamEvent.user);\n break;\n }\n }\n\n protected updateWithNewUserEvent(api: SegmentAnalytics.AnalyticsJS, streamEvent: DbxAnalyticsStreamEvent): void {\n this.changeUser(api, streamEvent.user);\n }\n\n protected updateWithEvent(api: SegmentAnalytics.AnalyticsJS, streamEvent: DbxAnalyticsStreamEvent, name?: string): void {\n const event = streamEvent.event;\n const eventName = name || event?.name;\n\n if (eventName) {\n const value = event?.value;\n const data = event?.data;\n\n api.track(\n eventName,\n {\n ...(value != null\n ? {\n value\n }\n : undefined),\n ...data\n },\n {},\n () => {\n if (this._segmentApi.config.logging) {\n console.log('Segment track success.');\n }\n }\n );\n }\n }\n\n private changeUser(api: SegmentAnalytics.AnalyticsJS, user: Maybe<DbxAnalyticsUser>): void {\n if (user?.user) {\n api.identify(\n user.user,\n {\n ...user.properties\n },\n {},\n () => {\n if (this._segmentApi.config.logging) {\n console.log('Segment identify success.');\n }\n }\n );\n } else {\n api.reset();\n }\n }\n}\n","import { NgModule, ModuleWithProviders } from '@angular/core';\nimport { PRELOAD_SEGMENT_TOKEN, DbxAnalyticsSegmentApiService } from './segment.service';\n\n@NgModule({\n declarations: [],\n imports: []\n})\nexport class DbxAnalyticsSegmentModule {\n static forRoot(preloadService?: boolean): ModuleWithProviders<DbxAnalyticsSegmentModule> {\n return {\n ngModule: DbxAnalyticsSegmentModule,\n providers: [\n {\n provide: PRELOAD_SEGMENT_TOKEN,\n useValue: preloadService\n },\n DbxAnalyticsSegmentApiService\n ]\n };\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i2.DbxAnalyticsService","i1.DbxAnalyticsSegmentApiService"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"dereekb-dbx-analytics.mjs","sources":["../../../../packages/dbx-analytics/src/lib/analytics/analytics.stream.ts","../../../../packages/dbx-analytics/src/lib/analytics/analytics.service.ts","../../../../packages/dbx-analytics/src/lib/action/analytics.action.directive.ts","../../../../packages/dbx-analytics/src/lib/action/analytics.action.module.ts","../../../../packages/dbx-analytics/src/lib/analytics/analytics.module.ts","../../../../packages/dbx-analytics/src/lib/providers/segment/segment.service.ts","../../../../packages/dbx-analytics/src/lib/providers/segment/segment.listener.service.ts","../../../../packages/dbx-analytics/src/lib/providers/segment/segment.module.ts","../../../../packages/dbx-analytics/src/dereekb-dbx-analytics.ts"],"sourcesContent":["import { Maybe } from '@dereekb/util';\nimport { DbxAnalyticsUser, DbxUserAnalyticsEvent, DbxAnalyticsUserId } from './analytics';\n\nexport enum DbxAnalyticsStreamEventType {\n PageView,\n /**\n * Emitted any time the user value changes.\n *\n * Can emit when the user goes from defined to undefined.\n */\n UserChange,\n /**\n * Emitted any time the user id changes.\n */\n UserIdChange,\n\n // User Events\n NewUserEvent,\n UserLoginEvent,\n UserLogoutEvent,\n UserPropertiesEvent,\n\n // Events\n Event\n}\n\nexport interface DbxAnalyticsStreamEvent {\n readonly type: DbxAnalyticsStreamEventType;\n readonly user?: Maybe<DbxAnalyticsUser>;\n readonly event?: DbxUserAnalyticsEvent;\n readonly userId?: DbxAnalyticsUserId;\n}\n","import { Observable, Subject, BehaviorSubject, of, Subscription, first, shareReplay, switchMap, distinctUntilChanged } from 'rxjs';\nimport { Inject, Injectable, Optional, inject } from '@angular/core';\nimport { SubscriptionObject, filterMaybe } from '@dereekb/rxjs';\nimport { DbxAnalyticsEvent, DbxAnalyticsEventData, DbxAnalyticsEventName, DbxAnalyticsUser, NewUserAnalyticsEventData, DbxUserAnalyticsEvent } from './analytics';\nimport { DbxAnalyticsStreamEvent, DbxAnalyticsStreamEventType } from './analytics.stream';\nimport { Maybe, Destroyable, safeCompareEquality } from '@dereekb/util';\n\nexport abstract class DbxAnalyticsEventEmitterService {\n abstract sendNewUserEvent(user: DbxAnalyticsUser, data: NewUserAnalyticsEventData): void;\n abstract sendUserLoginEvent(user: DbxAnalyticsUser, data?: DbxAnalyticsEventData): void;\n abstract sendUserLogoutEvent(data?: DbxAnalyticsEventData): void;\n abstract sendUserPropertiesEvent(user: DbxAnalyticsUser, data?: DbxAnalyticsEventData): void;\n abstract sendEventData(name: DbxAnalyticsEventName, data?: DbxAnalyticsEventData): void;\n abstract sendEvent(event: DbxAnalyticsEvent): void;\n abstract sendPageView(page?: string): void;\n}\n\nexport abstract class DbxAnalyticsEventStreamService {\n abstract readonly events$: Observable<DbxAnalyticsStreamEvent>;\n}\n\nexport abstract class DbxAnalyticsUserSource {\n abstract readonly analyticsUser$: Observable<Maybe<DbxAnalyticsUser>>;\n}\n\nexport abstract class DbxAnalyticsServiceListener {\n public abstract listenToService(service: DbxAnalyticsService): void;\n}\n\n/**\n * Abstract AnalyticsServiceListener implementation.\n */\nexport abstract class AbstractDbxAnalyticsServiceListener implements DbxAnalyticsServiceListener, Destroyable {\n private _sub = new SubscriptionObject();\n protected _analytics = new BehaviorSubject<Maybe<DbxAnalyticsService>>(undefined);\n\n readonly analytics$ = this._analytics.pipe(filterMaybe(), shareReplay(1));\n readonly analyticsEvents$ = this.analytics$.pipe(\n switchMap((x) => x.events$),\n shareReplay(1)\n );\n\n // MARK: AnalyticsServiceListener\n listenToService(service: DbxAnalyticsService): void {\n this._analytics.next(service);\n const sub = this._initializeServiceSubscription();\n\n if (sub !== false) {\n this._sub.subscription = sub;\n }\n }\n\n protected abstract _initializeServiceSubscription(): Subscription | false;\n\n // MARK: Destroy\n destroy(): void {\n this._analytics.complete();\n this._sub.destroy();\n }\n}\n\nexport abstract class DbxAnalyticsServiceConfiguration {\n listeners: DbxAnalyticsServiceListener[] = [];\n isProduction?: boolean;\n logEvents?: boolean;\n userSource?: DbxAnalyticsUserSource;\n}\n\nexport class DbxAnalyticsStreamEventAnalyticsEventWrapper implements DbxAnalyticsStreamEvent {\n constructor(public readonly event: DbxUserAnalyticsEvent, public readonly type: DbxAnalyticsStreamEventType = DbxAnalyticsStreamEventType.Event) {}\n\n public get user(): Maybe<DbxAnalyticsUser> {\n return this.event.user;\n }\n\n public get userId(): string | undefined {\n return this.user ? this.user.user : undefined;\n }\n}\n\n/**\n * Primary analytics service that emits analytics events that components can listen to.\n */\n@Injectable()\nexport class DbxAnalyticsService implements DbxAnalyticsEventStreamService, DbxAnalyticsEventEmitterService, Destroyable {\n private _config = inject(DbxAnalyticsServiceConfiguration);\n\n // TODO: Make these configurable.\n static readonly USER_REGISTRATION_EVENT_NAME = 'User Registered';\n static readonly USER_LOGIN_EVENT_NAME = 'User Login';\n static readonly USER_LOGOUT_EVENT_NAME = 'User Logout';\n static readonly USER_PROPERTIES_EVENT_NAME = 'User Properties';\n\n private _subject = new Subject<DbxAnalyticsStreamEvent>();\n readonly events$ = this._subject.asObservable();\n\n private _userSource = new BehaviorSubject<Maybe<DbxAnalyticsUserSource>>(undefined);\n\n readonly user$ = this._userSource.pipe(\n switchMap((x) => (x ? x.analyticsUser$ : of(undefined))),\n shareReplay(1)\n );\n\n private _userSourceSub = new SubscriptionObject();\n private _userIdEventSub = new SubscriptionObject();\n private _loggerSub = new SubscriptionObject();\n\n constructor(@Optional() @Inject(DbxAnalyticsUserSource) userSource?: Maybe<DbxAnalyticsUserSource>) {\n this._init();\n\n userSource = userSource || this._config.userSource;\n if (userSource) {\n this.setUserSource(userSource);\n }\n }\n\n // MARK: Source\n /**\n * Sets the user directly, overridding the UserSource.\n */\n public setUser(user: Maybe<DbxAnalyticsUser>): void {\n let source: Maybe<DbxAnalyticsUserSource>;\n\n if (user) {\n source = { analyticsUser$: of(user) };\n }\n\n this._userSource.next(source);\n\n if (this._userSource.value) {\n console.warn('DbxAnalyticsService has a userSource that is set. Source is now overridden by setUser() value.');\n }\n }\n\n public setUserSource(source: DbxAnalyticsUserSource): void {\n this._userSource.next(source);\n }\n\n // MARK: AnalyticsEventEmitterService\n /**\n * Sends an event.\n */\n public sendNewUserEvent(user: DbxAnalyticsUser, data: NewUserAnalyticsEventData): void {\n this.sendNextEvent(\n {\n name: DbxAnalyticsService.USER_REGISTRATION_EVENT_NAME,\n data\n },\n DbxAnalyticsStreamEventType.NewUserEvent,\n user\n );\n }\n\n public sendUserLoginEvent(user: DbxAnalyticsUser, data?: DbxAnalyticsEventData): void {\n this.sendNextEvent(\n {\n name: DbxAnalyticsService.USER_LOGIN_EVENT_NAME,\n data\n },\n DbxAnalyticsStreamEventType.UserLoginEvent,\n user\n );\n }\n\n public sendUserLogoutEvent(data?: DbxAnalyticsEventData, clearUser = true): void {\n this.sendNextEvent(\n {\n name: DbxAnalyticsService.USER_LOGOUT_EVENT_NAME,\n data\n },\n DbxAnalyticsStreamEventType.UserLogoutEvent\n );\n\n if (clearUser) {\n this.setUser(undefined);\n }\n }\n\n public sendUserPropertiesEvent(user: DbxAnalyticsUser, data?: DbxAnalyticsEventData): void {\n this.sendNextEvent(\n {\n name: DbxAnalyticsService.USER_PROPERTIES_EVENT_NAME,\n data\n },\n DbxAnalyticsStreamEventType.UserPropertiesEvent,\n user\n );\n }\n\n public sendEventData(name: DbxAnalyticsEventName, data?: DbxAnalyticsEventData): void {\n return this.sendEvent({\n name,\n data\n });\n }\n\n public sendEventType(eventType: DbxAnalyticsEventName): void {\n this.sendNextEvent(\n {\n name: eventType\n },\n DbxAnalyticsStreamEventType.Event\n );\n }\n\n public sendEvent(event: DbxAnalyticsEvent): void {\n this.sendNextEvent(event, DbxAnalyticsStreamEventType.Event);\n }\n\n public sendPageView(page?: string): void {\n this.sendNextEvent(\n {\n name: page\n },\n DbxAnalyticsStreamEventType.PageView\n );\n }\n\n /**\n * Sends the next event.\n *\n * @param event\n * @param type\n * @param userOverride Uses this user if set as null or an override value. If undefined the current analytics user is used.\n */\n protected sendNextEvent(event: DbxAnalyticsEvent = {}, type: DbxAnalyticsStreamEventType, userOverride?: Maybe<DbxAnalyticsUser>): void {\n this.user$.pipe(first()).subscribe((analyticsUser) => {\n const user: Maybe<DbxAnalyticsUser> = userOverride !== undefined ? userOverride : analyticsUser;\n const analyticsEvent: DbxUserAnalyticsEvent = { ...event, user };\n this.nextEvent(analyticsEvent, type);\n });\n }\n\n protected nextEvent(event: DbxUserAnalyticsEvent, type: DbxAnalyticsStreamEventType): void {\n const wrapper = new DbxAnalyticsStreamEventAnalyticsEventWrapper(event, type);\n this._subject.next(wrapper);\n }\n\n // MARK: Internal\n private _init(): void {\n if (this._config.isProduction) {\n // Initialize listeners.\n this._config.listeners.forEach((listener) => {\n listener.listenToService(this);\n });\n } else {\n console.warn('AnalyticsService: Analytics not in production mode. All analytics events are ignored.');\n }\n\n if (this._config.logEvents || !this._config.isProduction) {\n console.log('AnalyticsService: Log analytics events enabled.');\n\n // Create a new subscription\n this._loggerSub.subscription = this._subject.subscribe((x) => {\n console.log(`AnalyticsService: Analytics Event - ${DbxAnalyticsStreamEventType[x.type]} | User: ${x.userId} | Data: ${JSON.stringify(x.event)}.`);\n });\n }\n\n this._userSourceSub.subscription = this.user$.subscribe((user) => {\n this.sendNextEvent({}, DbxAnalyticsStreamEventType.UserChange, user ?? null);\n });\n\n this._userIdEventSub.subscription = this.user$.pipe(distinctUntilChanged((a, b) => safeCompareEquality(a, b, (x, y) => x.user === y.user))).subscribe((user) => {\n this.sendNextEvent({}, DbxAnalyticsStreamEventType.UserIdChange, user ?? null);\n });\n }\n\n destroy() {\n this._subject.complete();\n this._userSource.complete();\n this._userSourceSub.destroy();\n this._userIdEventSub.destroy();\n this._loggerSub.destroy();\n }\n}\n","import { filterMaybe } from '@dereekb/rxjs';\nimport { switchMap, tap, shareReplay, BehaviorSubject, merge, Observable, of } from 'rxjs';\nimport { Directive, Input, OnInit, OnDestroy, inject } from '@angular/core';\nimport { DbxActionContextStoreSourceInstance, AbstractSubscriptionDirective } from '@dereekb/dbx-core';\nimport { DbxAnalyticsService } from '../analytics/analytics.service';\nimport { Maybe, ReadableError } from '@dereekb/util';\n\n/**\n * DbxActionAnalyticsDirective config\n */\nexport interface DbxActionAnalyticsConfig<T = unknown, O = unknown> {\n onTriggered?: (service: DbxAnalyticsService) => void;\n onReady?: (service: DbxAnalyticsService, value: T) => void;\n onSuccess?: (service: DbxAnalyticsService, value: Maybe<O>) => void;\n onError?: (service: DbxAnalyticsService, error: Maybe<ReadableError>) => void;\n}\n\n/**\n * Used to listen to an ActionContext and send analytical events based on action events.\n */\n@Directive({\n selector: '[dbxActionAnalytics]'\n})\nexport class DbxActionAnalyticsDirective<T, O> extends AbstractSubscriptionDirective implements OnInit, OnDestroy {\n readonly source = inject(DbxActionContextStoreSourceInstance<T, O>, { host: true });\n readonly analyticsService = inject(DbxAnalyticsService);\n\n private readonly _config = new BehaviorSubject<Maybe<DbxActionAnalyticsConfig<T, O>>>(undefined);\n readonly config$ = this._config.pipe(filterMaybe(), shareReplay(1));\n\n @Input('dbxActionAnalytics')\n get config(): Maybe<DbxActionAnalyticsConfig<T, O>> {\n return this._config.value;\n }\n\n set config(config: Maybe<DbxActionAnalyticsConfig<T, O>>) {\n this._config.next(config);\n }\n\n ngOnInit(): void {\n this.sub = this.config$\n .pipe(\n switchMap(({ onTriggered, onReady, onSuccess, onError }) => {\n const triggerObs: Observable<unknown>[] = [];\n\n if (onTriggered) {\n triggerObs.push(this.source.triggered$.pipe(tap(() => onTriggered(this.analyticsService))));\n }\n\n if (onReady) {\n triggerObs.push(this.source.valueReady$.pipe(tap((value) => onReady(this.analyticsService, value))));\n }\n\n if (onSuccess) {\n triggerObs.push(this.source.success$.pipe(tap((result) => onSuccess(this.analyticsService, result))));\n }\n\n if (onError) {\n triggerObs.push(\n this.source.error$.pipe(\n filterMaybe(),\n tap((error) => onError(this.analyticsService, error))\n )\n );\n }\n\n if (triggerObs.length) {\n return merge(...triggerObs);\n } else {\n return of();\n }\n })\n )\n .subscribe();\n }\n\n override ngOnDestroy(): void {\n this.source.lockSet.onNextUnlock(() => {\n super.ngOnDestroy();\n this._config.complete();\n });\n }\n}\n","import { NgModule } from '@angular/core';\nimport { DbxActionAnalyticsDirective } from './analytics.action.directive';\n\n@NgModule({\n declarations: [DbxActionAnalyticsDirective],\n exports: [DbxActionAnalyticsDirective]\n})\nexport class DbxAnalyticsActionModule {}\n","import { NgModule, ModuleWithProviders, Provider } from '@angular/core';\nimport { DbxAnalyticsService } from './analytics.service';\n\nexport interface DbxAnalyticsModuleOptions {\n /**\n * Provides a AnalyticsServiceConfiguration value.\n */\n analyticsConfigurationProvider: Provider;\n}\n\n@NgModule()\nexport class DbxAnalyticsModule {\n static forRoot(options: DbxAnalyticsModuleOptions): ModuleWithProviders<DbxAnalyticsModule> {\n return {\n ngModule: DbxAnalyticsModule,\n providers: [\n // Configuration\n options.analyticsConfigurationProvider,\n // Service\n DbxAnalyticsService\n ]\n };\n }\n}\n","import { Injectable, InjectionToken, Inject, inject, Optional } from '@angular/core';\nimport { AbstractAsyncWindowLoadedService } from '@dereekb/browser';\nimport { Maybe, poll } from '@dereekb/util';\n\nexport const PRELOAD_SEGMENT_TOKEN = new InjectionToken<string>('DbxAnalyticsSegmentApiServicePreload');\n\nexport class DbxAnalyticsSegmentApiServiceConfig {\n logging = true;\n active = true;\n constructor(public writeKey: string) {}\n}\n\n/**\n * When the Segment library finishes loading, it is invoked.\n */\ntype SegmentAnalyticsInvoked = SegmentAnalytics.AnalyticsJS & { invoked?: boolean };\n\n/**\n * Segment API Service used for waiting/retrieving the segment API from window when initialized.\n *\n * This requires some setup in index.html.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class DbxAnalyticsSegmentApiService extends AbstractAsyncWindowLoadedService<SegmentAnalytics.AnalyticsJS> {\n private readonly _config = inject(DbxAnalyticsSegmentApiServiceConfig);\n\n static readonly SEGMENT_API_WINDOW_KEY = 'analytics';\n static readonly SEGMENT_READY_KEY = 'SegmentReady';\n\n constructor(@Optional() @Inject(PRELOAD_SEGMENT_TOKEN) preload?: Maybe<boolean>) {\n super(DbxAnalyticsSegmentApiService.SEGMENT_API_WINDOW_KEY, undefined, 'Segment', preload);\n }\n\n get config(): DbxAnalyticsSegmentApiServiceConfig {\n return this._config;\n }\n\n protected override _prepareCompleteLoadingService(): Promise<void> {\n return poll({\n // poll until analytics.invoked is true.\n check: () => Boolean((window.analytics as SegmentAnalyticsInvoked).invoked),\n timesToGiveup: 100\n });\n }\n\n protected override _initService(service: SegmentAnalytics.AnalyticsJS): Promise<SegmentAnalytics.AnalyticsJS> {\n return new Promise((resolve, reject) => {\n try {\n service.load(this._config.writeKey); // Initialize Segment\n\n // Wait for the service to ready itself.\n service.ready(() => {\n // Segment changes itself or rather the target, and the previous initial target is ignored after.\n const segment: SegmentAnalytics.AnalyticsJS = window[DbxAnalyticsSegmentApiService.SEGMENT_API_WINDOW_KEY];\n resolve(segment);\n });\n } catch (e) {\n console.log('Failed to init segment: ' + e);\n reject(e);\n }\n });\n }\n}\n","import { Injectable, inject } from '@angular/core';\nimport { Maybe } from '@dereekb/util';\nimport { combineLatest } from 'rxjs';\nimport { AbstractDbxAnalyticsServiceListener, DbxAnalyticsStreamEvent, DbxAnalyticsStreamEventType, DbxAnalyticsUser } from '../../analytics';\nimport { DbxAnalyticsSegmentApiService } from './segment.service';\n\n/**\n * DbxAnalyticsServiceListener adapter for Segment.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class DbxAnalyticsSegmentServiceListener extends AbstractDbxAnalyticsServiceListener {\n private _segmentApi = inject(DbxAnalyticsSegmentApiService);\n\n constructor() {\n super();\n\n if (this._segmentApi.config.logging) {\n console.log('SegmentAnalyticsListenerService: Segment is logging events.');\n }\n\n if (!this._segmentApi.config.active) {\n console.log('SegmentAnalyticsListenerService: Segment is disabled from sending events to the server.');\n }\n }\n\n protected _initializeServiceSubscription() {\n return combineLatest([this._segmentApi.service$, this.analyticsEvents$]).subscribe(([segment, streamEvent]: [SegmentAnalytics.AnalyticsJS, DbxAnalyticsStreamEvent]) => {\n if (this._segmentApi.config.logging) {\n console.log('Segment Listener Logging Event: ', streamEvent);\n }\n\n if (this._segmentApi.config.active) {\n this.handleStreamEvent(segment, streamEvent);\n }\n });\n }\n\n protected handleStreamEvent(api: SegmentAnalytics.AnalyticsJS, streamEvent: DbxAnalyticsStreamEvent): void {\n switch (streamEvent.type) {\n case DbxAnalyticsStreamEventType.NewUserEvent:\n this.updateWithNewUserEvent(api, streamEvent);\n break;\n case DbxAnalyticsStreamEventType.UserLoginEvent:\n this.changeUser(api, streamEvent.user);\n this.updateWithEvent(api, streamEvent);\n break;\n case DbxAnalyticsStreamEventType.Event:\n this.updateWithEvent(api, streamEvent);\n break;\n case DbxAnalyticsStreamEventType.UserLogoutEvent:\n this.changeUser(api, undefined);\n break;\n case DbxAnalyticsStreamEventType.PageView:\n api.page();\n break;\n case DbxAnalyticsStreamEventType.UserChange:\n this.changeUser(api, streamEvent.user);\n break;\n }\n }\n\n protected updateWithNewUserEvent(api: SegmentAnalytics.AnalyticsJS, streamEvent: DbxAnalyticsStreamEvent): void {\n this.changeUser(api, streamEvent.user);\n }\n\n protected updateWithEvent(api: SegmentAnalytics.AnalyticsJS, streamEvent: DbxAnalyticsStreamEvent, name?: string): void {\n const event = streamEvent.event;\n const eventName = name || event?.name;\n\n if (eventName) {\n const value = event?.value;\n const data = event?.data;\n\n api.track(\n eventName,\n {\n ...(value != null\n ? {\n value\n }\n : undefined),\n ...data\n },\n {},\n () => {\n if (this._segmentApi.config.logging) {\n console.log('Segment track success.');\n }\n }\n );\n }\n }\n\n private changeUser(api: SegmentAnalytics.AnalyticsJS, user: Maybe<DbxAnalyticsUser>): void {\n if (user?.user) {\n api.identify(\n user.user,\n {\n ...user.properties\n },\n {},\n () => {\n if (this._segmentApi.config.logging) {\n console.log('Segment identify success.');\n }\n }\n );\n } else {\n api.reset();\n }\n }\n}\n","import { NgModule, ModuleWithProviders } from '@angular/core';\nimport { PRELOAD_SEGMENT_TOKEN } from './segment.service';\n\n@NgModule({\n declarations: [],\n imports: []\n})\nexport class DbxAnalyticsSegmentModule {\n static forRoot(preloadService?: boolean): ModuleWithProviders<DbxAnalyticsSegmentModule> {\n return {\n ngModule: DbxAnalyticsSegmentModule,\n providers: [\n {\n provide: PRELOAD_SEGMENT_TOKEN,\n useValue: preloadService\n }\n ]\n };\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;IAGY,4BAqBX;AArBD,CAAA,UAAY,2BAA2B,EAAA;AACrC,IAAA,2BAAA,CAAA,2BAAA,CAAA,UAAA,CAAA,GAAA,CAAA,CAAA,GAAA,UAAQ,CAAA;AACR;;;;AAIG;AACH,IAAA,2BAAA,CAAA,2BAAA,CAAA,YAAA,CAAA,GAAA,CAAA,CAAA,GAAA,YAAU,CAAA;AACV;;AAEG;AACH,IAAA,2BAAA,CAAA,2BAAA,CAAA,cAAA,CAAA,GAAA,CAAA,CAAA,GAAA,cAAY,CAAA;;AAGZ,IAAA,2BAAA,CAAA,2BAAA,CAAA,cAAA,CAAA,GAAA,CAAA,CAAA,GAAA,cAAY,CAAA;AACZ,IAAA,2BAAA,CAAA,2BAAA,CAAA,gBAAA,CAAA,GAAA,CAAA,CAAA,GAAA,gBAAc,CAAA;AACd,IAAA,2BAAA,CAAA,2BAAA,CAAA,iBAAA,CAAA,GAAA,CAAA,CAAA,GAAA,iBAAe,CAAA;AACf,IAAA,2BAAA,CAAA,2BAAA,CAAA,qBAAA,CAAA,GAAA,CAAA,CAAA,GAAA,qBAAmB,CAAA;;AAGnB,IAAA,2BAAA,CAAA,2BAAA,CAAA,OAAA,CAAA,GAAA,CAAA,CAAA,GAAA,OAAK,CAAA;AACP,CAAC,EArBW,2BAA2B,KAA3B,2BAA2B,GAqBtC,EAAA,CAAA,CAAA;;MCjBqB,+BAA+B,CAAA;AAQpD,CAAA;MAEqB,8BAA8B,CAAA;AAEnD,CAAA;MAEqB,sBAAsB,CAAA;AAE3C,CAAA;MAEqB,2BAA2B,CAAA;AAEhD,CAAA;AAED;;AAEG;MACmB,mCAAmC,CAAA;AAC/C,IAAA,IAAI,GAAG,IAAI,kBAAkB,EAAE,CAAC;AAC9B,IAAA,UAAU,GAAG,IAAI,eAAe,CAA6B,SAAS,CAAC,CAAC;AAEzE,IAAA,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;IACjE,gBAAgB,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAC9C,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,EAC3B,WAAW,CAAC,CAAC,CAAC,CACf,CAAC;;AAGF,IAAA,eAAe,CAAC,OAA4B,EAAA;AAC1C,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC9B,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,8BAA8B,EAAE,CAAC;QAElD,IAAI,GAAG,KAAK,KAAK,EAAE;AACjB,YAAA,IAAI,CAAC,IAAI,CAAC,YAAY,GAAG,GAAG,CAAC;AAC9B,SAAA;KACF;;IAKD,OAAO,GAAA;AACL,QAAA,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC;AAC3B,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;KACrB;AACF,CAAA;MAEqB,gCAAgC,CAAA;IACpD,SAAS,GAAkC,EAAE,CAAC;AAC9C,IAAA,YAAY,CAAW;AACvB,IAAA,SAAS,CAAW;AACpB,IAAA,UAAU,CAA0B;AACrC,CAAA;MAEY,4CAA4C,CAAA;AAC3B,IAAA,KAAA,CAAA;AAA8C,IAAA,IAAA,CAAA;AAA1E,IAAA,WAAA,CAA4B,KAA4B,EAAkB,IAAoC,GAAA,2BAA2B,CAAC,KAAK,EAAA;QAAnH,IAAK,CAAA,KAAA,GAAL,KAAK,CAAuB;QAAkB,IAAI,CAAA,IAAA,GAAJ,IAAI,CAAiE;KAAI;AAEnJ,IAAA,IAAW,IAAI,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;KACxB;AAED,IAAA,IAAW,MAAM,GAAA;AACf,QAAA,OAAO,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,SAAS,CAAC;KAC/C;AACF,CAAA;AAED;;AAEG;MAEU,mBAAmB,CAAA;AACtB,IAAA,OAAO,GAAG,MAAM,CAAC,gCAAgC,CAAC,CAAC;;AAG3D,IAAA,OAAgB,4BAA4B,GAAG,iBAAiB,CAAC;AACjE,IAAA,OAAgB,qBAAqB,GAAG,YAAY,CAAC;AACrD,IAAA,OAAgB,sBAAsB,GAAG,aAAa,CAAC;AACvD,IAAA,OAAgB,0BAA0B,GAAG,iBAAiB,CAAC;AAEvD,IAAA,QAAQ,GAAG,IAAI,OAAO,EAA2B,CAAC;AACjD,IAAA,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC;AAExC,IAAA,WAAW,GAAG,IAAI,eAAe,CAAgC,SAAS,CAAC,CAAC;AAE3E,IAAA,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CACpC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,cAAc,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,EACxD,WAAW,CAAC,CAAC,CAAC,CACf,CAAC;AAEM,IAAA,cAAc,GAAG,IAAI,kBAAkB,EAAE,CAAC;AAC1C,IAAA,eAAe,GAAG,IAAI,kBAAkB,EAAE,CAAC;AAC3C,IAAA,UAAU,GAAG,IAAI,kBAAkB,EAAE,CAAC;AAE9C,IAAA,WAAA,CAAwD,UAA0C,EAAA;QAChG,IAAI,CAAC,KAAK,EAAE,CAAC;QAEb,UAAU,GAAG,UAAU,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC;AACnD,QAAA,IAAI,UAAU,EAAE;AACd,YAAA,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;AAChC,SAAA;KACF;;AAGD;;AAEG;AACI,IAAA,OAAO,CAAC,IAA6B,EAAA;AAC1C,QAAA,IAAI,MAAqC,CAAC;AAE1C,QAAA,IAAI,IAAI,EAAE;YACR,MAAM,GAAG,EAAE,cAAc,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;AACvC,SAAA;AAED,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAE9B,QAAA,IAAI,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE;AAC1B,YAAA,OAAO,CAAC,IAAI,CAAC,gGAAgG,CAAC,CAAC;AAChH,SAAA;KACF;AAEM,IAAA,aAAa,CAAC,MAA8B,EAAA;AACjD,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;KAC/B;;AAGD;;AAEG;IACI,gBAAgB,CAAC,IAAsB,EAAE,IAA+B,EAAA;QAC7E,IAAI,CAAC,aAAa,CAChB;YACE,IAAI,EAAE,mBAAmB,CAAC,4BAA4B;YACtD,IAAI;AACL,SAAA,EACD,2BAA2B,CAAC,YAAY,EACxC,IAAI,CACL,CAAC;KACH;IAEM,kBAAkB,CAAC,IAAsB,EAAE,IAA4B,EAAA;QAC5E,IAAI,CAAC,aAAa,CAChB;YACE,IAAI,EAAE,mBAAmB,CAAC,qBAAqB;YAC/C,IAAI;AACL,SAAA,EACD,2BAA2B,CAAC,cAAc,EAC1C,IAAI,CACL,CAAC;KACH;AAEM,IAAA,mBAAmB,CAAC,IAA4B,EAAE,SAAS,GAAG,IAAI,EAAA;QACvE,IAAI,CAAC,aAAa,CAChB;YACE,IAAI,EAAE,mBAAmB,CAAC,sBAAsB;YAChD,IAAI;AACL,SAAA,EACD,2BAA2B,CAAC,eAAe,CAC5C,CAAC;AAEF,QAAA,IAAI,SAAS,EAAE;AACb,YAAA,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;AACzB,SAAA;KACF;IAEM,uBAAuB,CAAC,IAAsB,EAAE,IAA4B,EAAA;QACjF,IAAI,CAAC,aAAa,CAChB;YACE,IAAI,EAAE,mBAAmB,CAAC,0BAA0B;YACpD,IAAI;AACL,SAAA,EACD,2BAA2B,CAAC,mBAAmB,EAC/C,IAAI,CACL,CAAC;KACH;IAEM,aAAa,CAAC,IAA2B,EAAE,IAA4B,EAAA;QAC5E,OAAO,IAAI,CAAC,SAAS,CAAC;YACpB,IAAI;YACJ,IAAI;AACL,SAAA,CAAC,CAAC;KACJ;AAEM,IAAA,aAAa,CAAC,SAAgC,EAAA;QACnD,IAAI,CAAC,aAAa,CAChB;AACE,YAAA,IAAI,EAAE,SAAS;AAChB,SAAA,EACD,2BAA2B,CAAC,KAAK,CAClC,CAAC;KACH;AAEM,IAAA,SAAS,CAAC,KAAwB,EAAA;QACvC,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,2BAA2B,CAAC,KAAK,CAAC,CAAC;KAC9D;AAEM,IAAA,YAAY,CAAC,IAAa,EAAA;QAC/B,IAAI,CAAC,aAAa,CAChB;AACE,YAAA,IAAI,EAAE,IAAI;AACX,SAAA,EACD,2BAA2B,CAAC,QAAQ,CACrC,CAAC;KACH;AAED;;;;;;AAMG;AACO,IAAA,aAAa,CAAC,KAA2B,GAAA,EAAE,EAAE,IAAiC,EAAE,YAAsC,EAAA;AAC9H,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,aAAa,KAAI;AACnD,YAAA,MAAM,IAAI,GAA4B,YAAY,KAAK,SAAS,GAAG,YAAY,GAAG,aAAa,CAAC;YAChG,MAAM,cAAc,GAA0B,EAAE,GAAG,KAAK,EAAE,IAAI,EAAE,CAAC;AACjE,YAAA,IAAI,CAAC,SAAS,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;AACvC,SAAC,CAAC,CAAC;KACJ;IAES,SAAS,CAAC,KAA4B,EAAE,IAAiC,EAAA;QACjF,MAAM,OAAO,GAAG,IAAI,4CAA4C,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AAC9E,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;KAC7B;;IAGO,KAAK,GAAA;AACX,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE;;YAE7B,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,QAAQ,KAAI;AAC1C,gBAAA,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;AACjC,aAAC,CAAC,CAAC;AACJ,SAAA;AAAM,aAAA;AACL,YAAA,OAAO,CAAC,IAAI,CAAC,uFAAuF,CAAC,CAAC;AACvG,SAAA;AAED,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE;AACxD,YAAA,OAAO,CAAC,GAAG,CAAC,iDAAiD,CAAC,CAAC;;AAG/D,YAAA,IAAI,CAAC,UAAU,CAAC,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,KAAI;gBAC3D,OAAO,CAAC,GAAG,CAAC,CAAuC,oCAAA,EAAA,2BAA2B,CAAC,CAAC,CAAC,IAAI,CAAC,CAAY,SAAA,EAAA,CAAC,CAAC,MAAM,CAAA,SAAA,EAAY,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAG,CAAA,CAAA,CAAC,CAAC;AACpJ,aAAC,CAAC,CAAC;AACJ,SAAA;AAED,QAAA,IAAI,CAAC,cAAc,CAAC,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,KAAI;AAC/D,YAAA,IAAI,CAAC,aAAa,CAAC,EAAE,EAAE,2BAA2B,CAAC,UAAU,EAAE,IAAI,IAAI,IAAI,CAAC,CAAC;AAC/E,SAAC,CAAC,CAAC;QAEH,IAAI,CAAC,eAAe,CAAC,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,mBAAmB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,KAAI;AAC7J,YAAA,IAAI,CAAC,aAAa,CAAC,EAAE,EAAE,2BAA2B,CAAC,YAAY,EAAE,IAAI,IAAI,IAAI,CAAC,CAAC;AACjF,SAAC,CAAC,CAAC;KACJ;IAED,OAAO,GAAA;AACL,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;AACzB,QAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC;AAC5B,QAAA,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC;AAC9B,QAAA,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,CAAC;AAC/B,QAAA,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;KAC3B;AA7LU,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,mBAAmB,kBAuBE,sBAAsB,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;4GAvB3C,mBAAmB,EAAA,CAAA,CAAA;;4FAAnB,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAD/B,UAAU;;0BAwBI,QAAQ;;0BAAI,MAAM;2BAAC,sBAAsB,CAAA;;;AC1FxD;;AAEG;AAIG,MAAO,2BAAkC,SAAQ,6BAA6B,CAAA;AACzE,IAAA,MAAM,GAAG,MAAM,EAAC,mCAAyC,GAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;AAC3E,IAAA,gBAAgB,GAAG,MAAM,CAAC,mBAAmB,CAAC,CAAC;AAEvC,IAAA,OAAO,GAAG,IAAI,eAAe,CAAwC,SAAS,CAAC,CAAC;AACxF,IAAA,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;AAEpE,IAAA,IACI,MAAM,GAAA;AACR,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;KAC3B;IAED,IAAI,MAAM,CAAC,MAA6C,EAAA;AACtD,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;KAC3B;IAED,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,OAAO;AACpB,aAAA,IAAI,CACH,SAAS,CAAC,CAAC,EAAE,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,KAAI;YACzD,MAAM,UAAU,GAA0B,EAAE,CAAC;AAE7C,YAAA,IAAI,WAAW,EAAE;gBACf,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,WAAW,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7F,aAAA;AAED,YAAA,IAAI,OAAO,EAAE;AACX,gBAAA,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,OAAO,CAAC,IAAI,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AACtG,aAAA;AAED,YAAA,IAAI,SAAS,EAAE;AACb,gBAAA,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,IAAI,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AACvG,aAAA;AAED,YAAA,IAAI,OAAO,EAAE;AACX,gBAAA,UAAU,CAAC,IAAI,CACb,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CACrB,WAAW,EAAE,EACb,GAAG,CAAC,CAAC,KAAK,KAAK,OAAO,CAAC,IAAI,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAC,CACtD,CACF,CAAC;AACH,aAAA;YAED,IAAI,UAAU,CAAC,MAAM,EAAE;AACrB,gBAAA,OAAO,KAAK,CAAC,GAAG,UAAU,CAAC,CAAC;AAC7B,aAAA;AAAM,iBAAA;gBACL,OAAO,EAAE,EAAE,CAAC;AACb,aAAA;AACH,SAAC,CAAC,CACH;AACA,aAAA,SAAS,EAAE,CAAC;KAChB;IAEQ,WAAW,GAAA;QAClB,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,MAAK;YACpC,KAAK,CAAC,WAAW,EAAE,CAAC;AACpB,YAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;AAC1B,SAAC,CAAC,CAAC;KACJ;wGA1DU,2BAA2B,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;4FAA3B,2BAA2B,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,CAAA,EAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;4FAA3B,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBAHvC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,sBAAsB;AACjC,iBAAA,CAAA;8BASK,MAAM,EAAA,CAAA;sBADT,KAAK;uBAAC,oBAAoB,CAAA;;;MCvBhB,wBAAwB,CAAA;wGAAxB,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;yGAAxB,wBAAwB,EAAA,YAAA,EAAA,CAHpB,2BAA2B,CAAA,EAAA,OAAA,EAAA,CAChC,2BAA2B,CAAA,EAAA,CAAA,CAAA;yGAE1B,wBAAwB,EAAA,CAAA,CAAA;;4FAAxB,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAJpC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACR,YAAY,EAAE,CAAC,2BAA2B,CAAC;oBAC3C,OAAO,EAAE,CAAC,2BAA2B,CAAC;AACvC,iBAAA,CAAA;;;MCKY,kBAAkB,CAAA;IAC7B,OAAO,OAAO,CAAC,OAAkC,EAAA;QAC/C,OAAO;AACL,YAAA,QAAQ,EAAE,kBAAkB;AAC5B,YAAA,SAAS,EAAE;;AAET,gBAAA,OAAO,CAAC,8BAA8B;;gBAEtC,mBAAmB;AACpB,aAAA;SACF,CAAC;KACH;wGAXU,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;yGAAlB,kBAAkB,EAAA,CAAA,CAAA;yGAAlB,kBAAkB,EAAA,CAAA,CAAA;;4FAAlB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAD9B,QAAQ;;;MCNI,qBAAqB,GAAG,IAAI,cAAc,CAAS,sCAAsC,EAAE;MAE3F,mCAAmC,CAAA;AAG3B,IAAA,QAAA,CAAA;IAFnB,OAAO,GAAG,IAAI,CAAC;IACf,MAAM,GAAG,IAAI,CAAC;AACd,IAAA,WAAA,CAAmB,QAAgB,EAAA;QAAhB,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAQ;KAAI;AACxC,CAAA;AAOD;;;;AAIG;AAIG,MAAO,6BAA8B,SAAQ,gCAA8D,CAAA;AAC9F,IAAA,OAAO,GAAG,MAAM,CAAC,mCAAmC,CAAC,CAAC;AAEvE,IAAA,OAAgB,sBAAsB,GAAG,WAAW,CAAC;AACrD,IAAA,OAAgB,iBAAiB,GAAG,cAAc,CAAC;AAEnD,IAAA,WAAA,CAAuD,OAAwB,EAAA;QAC7E,KAAK,CAAC,6BAA6B,CAAC,sBAAsB,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;KAC5F;AAED,IAAA,IAAI,MAAM,GAAA;QACR,OAAO,IAAI,CAAC,OAAO,CAAC;KACrB;IAEkB,8BAA8B,GAAA;AAC/C,QAAA,OAAO,IAAI,CAAC;;YAEV,KAAK,EAAE,MAAM,OAAO,CAAE,MAAM,CAAC,SAAqC,CAAC,OAAO,CAAC;AAC3E,YAAA,aAAa,EAAE,GAAG;AACnB,SAAA,CAAC,CAAC;KACJ;AAEkB,IAAA,YAAY,CAAC,OAAqC,EAAA;QACnE,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAI;YACrC,IAAI;gBACF,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;;AAGpC,gBAAA,OAAO,CAAC,KAAK,CAAC,MAAK;;oBAEjB,MAAM,OAAO,GAAiC,MAAM,CAAC,6BAA6B,CAAC,sBAAsB,CAAC,CAAC;oBAC3G,OAAO,CAAC,OAAO,CAAC,CAAC;AACnB,iBAAC,CAAC,CAAC;AACJ,aAAA;AAAC,YAAA,OAAO,CAAC,EAAE;AACV,gBAAA,OAAO,CAAC,GAAG,CAAC,0BAA0B,GAAG,CAAC,CAAC,CAAC;gBAC5C,MAAM,CAAC,CAAC,CAAC,CAAC;AACX,aAAA;AACH,SAAC,CAAC,CAAC;KACJ;AAtCU,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,6BAA6B,kBAMR,qBAAqB,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAN1C,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,6BAA6B,cAF5B,MAAM,EAAA,CAAA,CAAA;;4FAEP,6BAA6B,EAAA,UAAA,EAAA,CAAA;kBAHzC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA,CAAA;;0BAOc,QAAQ;;0BAAI,MAAM;2BAAC,qBAAqB,CAAA;;;ACzBvD;;AAEG;AAIG,MAAO,kCAAmC,SAAQ,mCAAmC,CAAA;AACjF,IAAA,WAAW,GAAG,MAAM,CAAC,6BAA6B,CAAC,CAAC;AAE5D,IAAA,WAAA,GAAA;AACE,QAAA,KAAK,EAAE,CAAC;AAER,QAAA,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,EAAE;AACnC,YAAA,OAAO,CAAC,GAAG,CAAC,6DAA6D,CAAC,CAAC;AAC5E,SAAA;QAED,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE;AACnC,YAAA,OAAO,CAAC,GAAG,CAAC,yFAAyF,CAAC,CAAC;AACxG,SAAA;KACF;IAES,8BAA8B,GAAA;QACtC,OAAO,aAAa,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,EAAE,WAAW,CAA0D,KAAI;AACrK,YAAA,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,EAAE;AACnC,gBAAA,OAAO,CAAC,GAAG,CAAC,kCAAkC,EAAE,WAAW,CAAC,CAAC;AAC9D,aAAA;AAED,YAAA,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE;AAClC,gBAAA,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;AAC9C,aAAA;AACH,SAAC,CAAC,CAAC;KACJ;IAES,iBAAiB,CAAC,GAAiC,EAAE,WAAoC,EAAA;QACjG,QAAQ,WAAW,CAAC,IAAI;YACtB,KAAK,2BAA2B,CAAC,YAAY;AAC3C,gBAAA,IAAI,CAAC,sBAAsB,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;gBAC9C,MAAM;YACR,KAAK,2BAA2B,CAAC,cAAc;gBAC7C,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC;AACvC,gBAAA,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;gBACvC,MAAM;YACR,KAAK,2BAA2B,CAAC,KAAK;AACpC,gBAAA,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;gBACvC,MAAM;YACR,KAAK,2BAA2B,CAAC,eAAe;AAC9C,gBAAA,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;gBAChC,MAAM;YACR,KAAK,2BAA2B,CAAC,QAAQ;gBACvC,GAAG,CAAC,IAAI,EAAE,CAAC;gBACX,MAAM;YACR,KAAK,2BAA2B,CAAC,UAAU;gBACzC,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC;gBACvC,MAAM;AACT,SAAA;KACF;IAES,sBAAsB,CAAC,GAAiC,EAAE,WAAoC,EAAA;QACtG,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC;KACxC;AAES,IAAA,eAAe,CAAC,GAAiC,EAAE,WAAoC,EAAE,IAAa,EAAA;AAC9G,QAAA,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC;AAChC,QAAA,MAAM,SAAS,GAAG,IAAI,IAAI,KAAK,EAAE,IAAI,CAAC;AAEtC,QAAA,IAAI,SAAS,EAAE;AACb,YAAA,MAAM,KAAK,GAAG,KAAK,EAAE,KAAK,CAAC;AAC3B,YAAA,MAAM,IAAI,GAAG,KAAK,EAAE,IAAI,CAAC;AAEzB,YAAA,GAAG,CAAC,KAAK,CACP,SAAS,EACT;gBACE,IAAI,KAAK,IAAI,IAAI;AACf,sBAAE;wBACE,KAAK;AACN,qBAAA;sBACD,SAAS,CAAC;AACd,gBAAA,GAAG,IAAI;aACR,EACD,EAAE,EACF,MAAK;AACH,gBAAA,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,EAAE;AACnC,oBAAA,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;AACvC,iBAAA;AACH,aAAC,CACF,CAAC;AACH,SAAA;KACF;IAEO,UAAU,CAAC,GAAiC,EAAE,IAA6B,EAAA;QACjF,IAAI,IAAI,EAAE,IAAI,EAAE;AACd,YAAA,GAAG,CAAC,QAAQ,CACV,IAAI,CAAC,IAAI,EACT;gBACE,GAAG,IAAI,CAAC,UAAU;aACnB,EACD,EAAE,EACF,MAAK;AACH,gBAAA,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,EAAE;AACnC,oBAAA,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;AAC1C,iBAAA;AACH,aAAC,CACF,CAAC;AACH,SAAA;AAAM,aAAA;YACL,GAAG,CAAC,KAAK,EAAE,CAAC;AACb,SAAA;KACF;wGApGU,kCAAkC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAlC,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kCAAkC,cAFjC,MAAM,EAAA,CAAA,CAAA;;4FAEP,kCAAkC,EAAA,UAAA,EAAA,CAAA;kBAH9C,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA,CAAA;;;MCJY,yBAAyB,CAAA;IACpC,OAAO,OAAO,CAAC,cAAwB,EAAA;QACrC,OAAO;AACL,YAAA,QAAQ,EAAE,yBAAyB;AACnC,YAAA,SAAS,EAAE;AACT,gBAAA;AACE,oBAAA,OAAO,EAAE,qBAAqB;AAC9B,oBAAA,QAAQ,EAAE,cAAc;AACzB,iBAAA;AACF,aAAA;SACF,CAAC;KACH;wGAXU,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;yGAAzB,yBAAyB,EAAA,CAAA,CAAA;yGAAzB,yBAAyB,EAAA,CAAA,CAAA;;4FAAzB,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBAJrC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,YAAY,EAAE,EAAE;AAChB,oBAAA,OAAO,EAAE,EAAE;AACZ,iBAAA,CAAA;;;ACND;;AAEG;;;;"}
|
|
@@ -19,13 +19,12 @@ export interface DbxActionAnalyticsConfig<T = unknown, O = unknown> {
|
|
|
19
19
|
export declare class DbxActionAnalyticsDirective<T, O> extends AbstractSubscriptionDirective implements OnInit, OnDestroy {
|
|
20
20
|
readonly source: DbxActionContextStoreSourceInstance<T, O>;
|
|
21
21
|
readonly analyticsService: DbxAnalyticsService;
|
|
22
|
-
private _config;
|
|
22
|
+
private readonly _config;
|
|
23
23
|
readonly config$: Observable<DbxActionAnalyticsConfig<T, O>>;
|
|
24
24
|
get config(): Maybe<DbxActionAnalyticsConfig<T, O>>;
|
|
25
25
|
set config(config: Maybe<DbxActionAnalyticsConfig<T, O>>);
|
|
26
|
-
constructor(source: DbxActionContextStoreSourceInstance<T, O>, analyticsService: DbxAnalyticsService);
|
|
27
26
|
ngOnInit(): void;
|
|
28
27
|
ngOnDestroy(): void;
|
|
29
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<DbxActionAnalyticsDirective<any, any>,
|
|
28
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<DbxActionAnalyticsDirective<any, any>, never>;
|
|
30
29
|
static ɵdir: i0.ɵɵDirectiveDeclaration<DbxActionAnalyticsDirective<any, any>, "[dbxActionAnalytics]", never, { "config": { "alias": "dbxActionAnalytics"; "required": false; }; }, {}, never, never, false, never>;
|
|
31
30
|
}
|
|
@@ -62,7 +62,7 @@ export declare class DbxAnalyticsService implements DbxAnalyticsEventStreamServi
|
|
|
62
62
|
private _userSourceSub;
|
|
63
63
|
private _userIdEventSub;
|
|
64
64
|
private _loggerSub;
|
|
65
|
-
constructor(
|
|
65
|
+
constructor(userSource?: Maybe<DbxAnalyticsUserSource>);
|
|
66
66
|
/**
|
|
67
67
|
* Sets the user directly, overridding the UserSource.
|
|
68
68
|
*/
|
|
@@ -90,6 +90,6 @@ export declare class DbxAnalyticsService implements DbxAnalyticsEventStreamServi
|
|
|
90
90
|
protected nextEvent(event: DbxUserAnalyticsEvent, type: DbxAnalyticsStreamEventType): void;
|
|
91
91
|
private _init;
|
|
92
92
|
destroy(): void;
|
|
93
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<DbxAnalyticsService, [
|
|
93
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<DbxAnalyticsService, [{ optional: true; }]>;
|
|
94
94
|
static ɵprov: i0.ɵɵInjectableDeclaration<DbxAnalyticsService>;
|
|
95
95
|
}
|
|
@@ -1,13 +1,12 @@
|
|
|
1
1
|
/// <reference types="segment-analytics" />
|
|
2
2
|
import { AbstractDbxAnalyticsServiceListener, DbxAnalyticsStreamEvent } from '../../analytics';
|
|
3
|
-
import { DbxAnalyticsSegmentApiService } from './segment.service';
|
|
4
3
|
import * as i0 from "@angular/core";
|
|
5
4
|
/**
|
|
6
5
|
* DbxAnalyticsServiceListener adapter for Segment.
|
|
7
6
|
*/
|
|
8
7
|
export declare class DbxAnalyticsSegmentServiceListener extends AbstractDbxAnalyticsServiceListener {
|
|
9
8
|
private _segmentApi;
|
|
10
|
-
constructor(
|
|
9
|
+
constructor();
|
|
11
10
|
protected _initializeServiceSubscription(): import("rxjs").Subscription;
|
|
12
11
|
protected handleStreamEvent(api: SegmentAnalytics.AnalyticsJS, streamEvent: DbxAnalyticsStreamEvent): void;
|
|
13
12
|
protected updateWithNewUserEvent(api: SegmentAnalytics.AnalyticsJS, streamEvent: DbxAnalyticsStreamEvent): void;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/// <reference types="segment-analytics" />
|
|
2
2
|
import { InjectionToken } from '@angular/core';
|
|
3
3
|
import { AbstractAsyncWindowLoadedService } from '@dereekb/browser';
|
|
4
|
+
import { Maybe } from '@dereekb/util';
|
|
4
5
|
import * as i0 from "@angular/core";
|
|
5
6
|
export declare const PRELOAD_SEGMENT_TOKEN: InjectionToken<string>;
|
|
6
7
|
export declare class DbxAnalyticsSegmentApiServiceConfig {
|
|
@@ -15,13 +16,13 @@ export declare class DbxAnalyticsSegmentApiServiceConfig {
|
|
|
15
16
|
* This requires some setup in index.html.
|
|
16
17
|
*/
|
|
17
18
|
export declare class DbxAnalyticsSegmentApiService extends AbstractAsyncWindowLoadedService<SegmentAnalytics.AnalyticsJS> {
|
|
18
|
-
private _config;
|
|
19
|
+
private readonly _config;
|
|
19
20
|
static readonly SEGMENT_API_WINDOW_KEY = "analytics";
|
|
20
21
|
static readonly SEGMENT_READY_KEY = "SegmentReady";
|
|
21
|
-
constructor(
|
|
22
|
+
constructor(preload?: Maybe<boolean>);
|
|
22
23
|
get config(): DbxAnalyticsSegmentApiServiceConfig;
|
|
23
24
|
protected _prepareCompleteLoadingService(): Promise<void>;
|
|
24
25
|
protected _initService(service: SegmentAnalytics.AnalyticsJS): Promise<SegmentAnalytics.AnalyticsJS>;
|
|
25
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<DbxAnalyticsSegmentApiService,
|
|
26
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<DbxAnalyticsSegmentApiService, [{ optional: true; }]>;
|
|
26
27
|
static ɵprov: i0.ɵɵInjectableDeclaration<DbxAnalyticsSegmentApiService>;
|
|
27
28
|
}
|