@dereekb/dbx-analytics 1.2.0 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/esm2020/lib/action/analytics.action.directive.mjs +8 -8
- package/esm2020/lib/action/analytics.action.module.mjs +6 -6
- package/esm2020/lib/analytics/analytics.mjs +1 -1
- package/esm2020/lib/analytics/analytics.module.mjs +7 -7
- package/esm2020/lib/analytics/analytics.service.mjs +35 -34
- package/esm2020/lib/analytics/analytics.stream.mjs +11 -11
- package/esm2020/lib/providers/segment/segment.listener.service.mjs +15 -15
- package/esm2020/lib/providers/segment/segment.module.mjs +9 -9
- package/esm2020/lib/providers/segment/segment.service.mjs +12 -12
- package/fesm2015/dereekb-dbx-analytics.mjs +89 -88
- package/fesm2015/dereekb-dbx-analytics.mjs.map +1 -1
- package/fesm2020/dereekb-dbx-analytics.mjs +89 -88
- package/fesm2020/dereekb-dbx-analytics.mjs.map +1 -1
- package/lib/action/analytics.action.directive.d.ts +9 -9
- package/lib/action/analytics.action.module.d.ts +4 -4
- package/lib/analytics/analytics.d.ts +14 -14
- package/lib/analytics/analytics.service.d.ts +45 -45
- package/lib/analytics/analytics.stream.d.ts +7 -7
- package/lib/providers/segment/segment.listener.service.d.ts +10 -10
- package/lib/providers/segment/segment.module.d.ts +5 -5
- package/lib/providers/segment/segment.service.d.ts +6 -6
- package/package.json +4 -23
|
@@ -2,8 +2,8 @@ import { Injectable, InjectionToken, Inject } 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
|
-
export const PRELOAD_SEGMENT_TOKEN = new InjectionToken('
|
|
6
|
-
export class
|
|
5
|
+
export const PRELOAD_SEGMENT_TOKEN = new InjectionToken('DbxAnalyticsSegmentApiServicePreload');
|
|
6
|
+
export class DbxAnalyticsSegmentApiServiceConfig {
|
|
7
7
|
constructor(writeKey) {
|
|
8
8
|
this.writeKey = writeKey;
|
|
9
9
|
this.logging = true;
|
|
@@ -15,9 +15,9 @@ export class SegmentApiServiceConfig {
|
|
|
15
15
|
*
|
|
16
16
|
* This requires some setup in index.html.
|
|
17
17
|
*/
|
|
18
|
-
export class
|
|
18
|
+
export class DbxAnalyticsSegmentApiService extends AbstractAsyncWindowLoadedService {
|
|
19
19
|
constructor(_config, preload = true) {
|
|
20
|
-
super(
|
|
20
|
+
super(DbxAnalyticsSegmentApiService.SEGMENT_API_WINDOW_KEY, undefined, 'Segment', preload);
|
|
21
21
|
this._config = _config;
|
|
22
22
|
}
|
|
23
23
|
get config() {
|
|
@@ -37,7 +37,7 @@ export class SegmentApiService extends AbstractAsyncWindowLoadedService {
|
|
|
37
37
|
// Wait for the service to ready itself.
|
|
38
38
|
service.ready(() => {
|
|
39
39
|
// Segment changes itself or rather the target, and the previous initial target is ignored after.
|
|
40
|
-
const segment = window[
|
|
40
|
+
const segment = window[DbxAnalyticsSegmentApiService.SEGMENT_API_WINDOW_KEY];
|
|
41
41
|
resolve(segment);
|
|
42
42
|
});
|
|
43
43
|
}
|
|
@@ -48,14 +48,14 @@ export class SegmentApiService extends AbstractAsyncWindowLoadedService {
|
|
|
48
48
|
});
|
|
49
49
|
}
|
|
50
50
|
}
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2
|
|
51
|
+
DbxAnalyticsSegmentApiService.SEGMENT_API_WINDOW_KEY = 'analytics';
|
|
52
|
+
DbxAnalyticsSegmentApiService.SEGMENT_READY_KEY = 'SegmentReady';
|
|
53
|
+
DbxAnalyticsSegmentApiService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.2", ngImport: i0, type: DbxAnalyticsSegmentApiService, deps: [{ token: DbxAnalyticsSegmentApiServiceConfig }, { token: PRELOAD_SEGMENT_TOKEN }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
54
|
+
DbxAnalyticsSegmentApiService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.2", ngImport: i0, type: DbxAnalyticsSegmentApiService });
|
|
55
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.2", ngImport: i0, type: DbxAnalyticsSegmentApiService, decorators: [{
|
|
56
56
|
type: Injectable
|
|
57
|
-
}], ctorParameters: function () { return [{ type:
|
|
57
|
+
}], ctorParameters: function () { return [{ type: DbxAnalyticsSegmentApiServiceConfig }, { type: undefined, decorators: [{
|
|
58
58
|
type: Inject,
|
|
59
59
|
args: [PRELOAD_SEGMENT_TOKEN]
|
|
60
60
|
}] }]; } });
|
|
61
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
61
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VnbWVudC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZGJ4LWFuYWx5dGljcy9zcmMvbGliL3Byb3ZpZGVycy9zZWdtZW50L3NlZ21lbnQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkUsT0FBTyxFQUFFLGdDQUFnQyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDcEUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFFckMsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsSUFBSSxjQUFjLENBQVMsc0NBQXNDLENBQUMsQ0FBQztBQUV4RyxNQUFNLE9BQU8sbUNBQW1DO0lBRzlDLFlBQW1CLFFBQWdCO1FBQWhCLGFBQVEsR0FBUixRQUFRLENBQVE7UUFGbkMsWUFBTyxHQUFHLElBQUksQ0FBQztRQUNmLFdBQU0sR0FBRyxJQUFJLENBQUM7SUFDeUIsQ0FBQztDQUN6QztBQUdEOzs7O0dBSUc7QUFFSCxNQUFNLE9BQU8sNkJBQThCLFNBQVEsZ0NBQThEO0lBSy9HLFlBQW9CLE9BQTRDLEVBQWlDLFVBQW1CLElBQUk7UUFDdEgsS0FBSyxDQUFDLDZCQUE2QixDQUFDLHNCQUFzQixFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFEekUsWUFBTyxHQUFQLE9BQU8sQ0FBcUM7SUFFaEUsQ0FBQztJQUVELElBQUksTUFBTTtRQUNSLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN0QixDQUFDO0lBRWtCLDhCQUE4QjtRQUMvQyxPQUFPLElBQUksQ0FBQztZQUNWLHdDQUF3QztZQUN4QyxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFFLE1BQU0sQ0FBQyxTQUFpQixFQUFFLE9BQU8sQ0FBQztZQUN4RCxhQUFhLEVBQUUsR0FBRztTQUNuQixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRWtCLFlBQVksQ0FBQyxPQUFxQztRQUNuRSxPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQ3JDLElBQUk7Z0JBQ0YsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMscUJBQXFCO2dCQUUxRCx3Q0FBd0M7Z0JBQ3hDLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFO29CQUNqQixpR0FBaUc7b0JBQ2pHLE1BQU0sT0FBTyxHQUFpQyxNQUFNLENBQUMsNkJBQTZCLENBQUMsc0JBQXNCLENBQUMsQ0FBQztvQkFDM0csT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUNuQixDQUFDLENBQUMsQ0FBQzthQUNKO1lBQUMsT0FBTyxDQUFDLEVBQUU7Z0JBQ1YsT0FBTyxDQUFDLEdBQUcsQ0FBQywwQkFBMEIsR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFDNUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ1g7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUVMLENBQUM7O0FBcENlLG9EQUFzQixHQUFHLFdBQVksQ0FBQTtBQUNyQywrQ0FBaUIsR0FBRyxjQUFlLENBQUE7MEhBSHhDLDZCQUE2QixrQkFLWCxtQ0FBbUMsYUFBVSxxQkFBcUI7OEhBTHBGLDZCQUE2QjsyRkFBN0IsNkJBQTZCO2tCQUR6QyxVQUFVOzBEQU1vQixtQ0FBbUM7MEJBQUcsTUFBTTsyQkFBQyxxQkFBcUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3Rpb25Ub2tlbiwgSW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBYnN0cmFjdEFzeW5jV2luZG93TG9hZGVkU2VydmljZSB9IGZyb20gJ0BkZXJlZWtiL2Jyb3dzZXInO1xuaW1wb3J0IHsgcG9sbCB9IGZyb20gJ0BkZXJlZWtiL3V0aWwnO1xuXG5leHBvcnQgY29uc3QgUFJFTE9BRF9TRUdNRU5UX1RPS0VOID0gbmV3IEluamVjdGlvblRva2VuPHN0cmluZz4oJ0RieEFuYWx5dGljc1NlZ21lbnRBcGlTZXJ2aWNlUHJlbG9hZCcpO1xuXG5leHBvcnQgY2xhc3MgRGJ4QW5hbHl0aWNzU2VnbWVudEFwaVNlcnZpY2VDb25maWcge1xuICBsb2dnaW5nID0gdHJ1ZTtcbiAgYWN0aXZlID0gdHJ1ZTtcbiAgY29uc3RydWN0b3IocHVibGljIHdyaXRlS2V5OiBzdHJpbmcpIHsgfVxufVxuXG5cbi8qKlxuICogU2VnbWVudCBBUEkgU2VydmljZSB1c2VkIGZvciB3YWl0aW5nL3JldHJpZXZpbmcgdGhlIHNlZ21lbnQgQVBJIGZyb20gd2luZG93IHdoZW4gaW5pdGlhbGl6ZWQuXG4gKlxuICogVGhpcyByZXF1aXJlcyBzb21lIHNldHVwIGluIGluZGV4Lmh0bWwuXG4gKi9cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBEYnhBbmFseXRpY3NTZWdtZW50QXBpU2VydmljZSBleHRlbmRzIEFic3RyYWN0QXN5bmNXaW5kb3dMb2FkZWRTZXJ2aWNlPFNlZ21lbnRBbmFseXRpY3MuQW5hbHl0aWNzSlM+IHtcblxuICBzdGF0aWMgcmVhZG9ubHkgU0VHTUVOVF9BUElfV0lORE9XX0tFWSA9ICdhbmFseXRpY3MnO1xuICBzdGF0aWMgcmVhZG9ubHkgU0VHTUVOVF9SRUFEWV9LRVkgPSAnU2VnbWVudFJlYWR5JztcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9jb25maWc6IERieEFuYWx5dGljc1NlZ21lbnRBcGlTZXJ2aWNlQ29uZmlnLCBASW5qZWN0KFBSRUxPQURfU0VHTUVOVF9UT0tFTikgcHJlbG9hZDogYm9vbGVhbiA9IHRydWUpIHtcbiAgICBzdXBlcihEYnhBbmFseXRpY3NTZWdtZW50QXBpU2VydmljZS5TRUdNRU5UX0FQSV9XSU5ET1dfS0VZLCB1bmRlZmluZWQsICdTZWdtZW50JywgcHJlbG9hZCk7XG4gIH1cblxuICBnZXQgY29uZmlnKCk6IERieEFuYWx5dGljc1NlZ21lbnRBcGlTZXJ2aWNlQ29uZmlnIHtcbiAgICByZXR1cm4gdGhpcy5fY29uZmlnO1xuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIF9wcmVwYXJlQ29tcGxldGVMb2FkaW5nU2VydmljZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gcG9sbCh7XG4gICAgICAvLyBwb2xsIHVudGlsIGFuYWx5dGljcy5pbnZva2VkIGlzIHRydWUuXG4gICAgICBjaGVjazogKCkgPT4gQm9vbGVhbigod2luZG93LmFuYWx5dGljcyBhcyBhbnkpPy5pbnZva2VkKSxcbiAgICAgIHRpbWVzVG9HaXZldXA6IDEwMFxuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIF9pbml0U2VydmljZShzZXJ2aWNlOiBTZWdtZW50QW5hbHl0aWNzLkFuYWx5dGljc0pTKTogUHJvbWlzZTxTZWdtZW50QW5hbHl0aWNzLkFuYWx5dGljc0pTPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHNlcnZpY2UubG9hZCh0aGlzLl9jb25maWcud3JpdGVLZXkpOyAvLyBJbml0aWFsaXplIFNlZ21lbnRcblxuICAgICAgICAvLyBXYWl0IGZvciB0aGUgc2VydmljZSB0byByZWFkeSBpdHNlbGYuXG4gICAgICAgIHNlcnZpY2UucmVhZHkoKCkgPT4ge1xuICAgICAgICAgIC8vIFNlZ21lbnQgY2hhbmdlcyBpdHNlbGYgb3IgcmF0aGVyIHRoZSB0YXJnZXQsIGFuZCB0aGUgcHJldmlvdXMgaW5pdGlhbCB0YXJnZXQgaXMgaWdub3JlZCBhZnRlci5cbiAgICAgICAgICBjb25zdCBzZWdtZW50OiBTZWdtZW50QW5hbHl0aWNzLkFuYWx5dGljc0pTID0gd2luZG93W0RieEFuYWx5dGljc1NlZ21lbnRBcGlTZXJ2aWNlLlNFR01FTlRfQVBJX1dJTkRPV19LRVldO1xuICAgICAgICAgIHJlc29sdmUoc2VnbWVudCk7XG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjb25zb2xlLmxvZygnRmFpbGVkIHRvIGluaXQgc2VnbWVudDogJyArIGUpO1xuICAgICAgICByZWplY3QoZSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgfVxuXG59XG4iXX0=
|
|
@@ -8,31 +8,31 @@ import { AbstractSubscriptionDirective } from '@dereekb/dbx-core';
|
|
|
8
8
|
import { AbstractAsyncWindowLoadedService } from '@dereekb/browser';
|
|
9
9
|
import { poll } from '@dereekb/util';
|
|
10
10
|
|
|
11
|
-
var
|
|
12
|
-
(function (
|
|
13
|
-
|
|
14
|
-
|
|
11
|
+
var DbxAnalyticsStreamEventType;
|
|
12
|
+
(function (DbxAnalyticsStreamEventType) {
|
|
13
|
+
DbxAnalyticsStreamEventType[DbxAnalyticsStreamEventType["PageView"] = 0] = "PageView";
|
|
14
|
+
DbxAnalyticsStreamEventType[DbxAnalyticsStreamEventType["UserChange"] = 1] = "UserChange";
|
|
15
15
|
// User Events
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
16
|
+
DbxAnalyticsStreamEventType[DbxAnalyticsStreamEventType["NewUserEvent"] = 2] = "NewUserEvent";
|
|
17
|
+
DbxAnalyticsStreamEventType[DbxAnalyticsStreamEventType["UserLoginEvent"] = 3] = "UserLoginEvent";
|
|
18
|
+
DbxAnalyticsStreamEventType[DbxAnalyticsStreamEventType["UserLogoutEvent"] = 4] = "UserLogoutEvent";
|
|
19
|
+
DbxAnalyticsStreamEventType[DbxAnalyticsStreamEventType["UserPropertiesEvent"] = 5] = "UserPropertiesEvent";
|
|
20
20
|
// Events
|
|
21
|
-
|
|
22
|
-
})(
|
|
21
|
+
DbxAnalyticsStreamEventType[DbxAnalyticsStreamEventType["Event"] = 6] = "Event";
|
|
22
|
+
})(DbxAnalyticsStreamEventType || (DbxAnalyticsStreamEventType = {}));
|
|
23
23
|
|
|
24
|
-
class
|
|
24
|
+
class DbxAnalyticsEventEmitterService {
|
|
25
25
|
}
|
|
26
|
-
class
|
|
26
|
+
class DbxAnalyticsEventStreamService {
|
|
27
27
|
}
|
|
28
|
-
class
|
|
28
|
+
class DbxAnalyticsUserSource {
|
|
29
29
|
}
|
|
30
|
-
class
|
|
30
|
+
class DbxAnalyticsServiceListener {
|
|
31
31
|
}
|
|
32
32
|
/**
|
|
33
33
|
* Abstract AnalyticsServiceListener implementation.
|
|
34
34
|
*/
|
|
35
|
-
class
|
|
35
|
+
class AbstractDbxAnalyticsServiceListener {
|
|
36
36
|
constructor() {
|
|
37
37
|
this._sub = new SubscriptionObject();
|
|
38
38
|
this._analytics = new BehaviorSubject(undefined);
|
|
@@ -53,13 +53,13 @@ class AbstractAnalyticsServiceListener {
|
|
|
53
53
|
this._sub.destroy();
|
|
54
54
|
}
|
|
55
55
|
}
|
|
56
|
-
class
|
|
56
|
+
class DbxAnalyticsServiceConfiguration {
|
|
57
57
|
constructor() {
|
|
58
58
|
this.listeners = [];
|
|
59
59
|
}
|
|
60
60
|
}
|
|
61
|
-
class
|
|
62
|
-
constructor(event, type =
|
|
61
|
+
class DbxAnalyticsStreamEventAnalyticsEventWrapper {
|
|
62
|
+
constructor(event, type = DbxAnalyticsStreamEventType.Event) {
|
|
63
63
|
this.event = event;
|
|
64
64
|
this.type = type;
|
|
65
65
|
}
|
|
@@ -73,7 +73,7 @@ class AnalyticsStreamEventAnalyticsEventWrapper {
|
|
|
73
73
|
/**
|
|
74
74
|
* Primary analytics service that emits analytics events that components can listen to.
|
|
75
75
|
*/
|
|
76
|
-
class
|
|
76
|
+
class DbxAnalyticsService {
|
|
77
77
|
constructor(_config, userSource = _config.userSource) {
|
|
78
78
|
this._config = _config;
|
|
79
79
|
this._subject = new Subject();
|
|
@@ -107,30 +107,30 @@ class AnalyticsService {
|
|
|
107
107
|
*/
|
|
108
108
|
sendNewUserEvent(user, data) {
|
|
109
109
|
this.sendNextEvent({
|
|
110
|
-
name:
|
|
110
|
+
name: DbxAnalyticsService.USER_REGISTRATION_EVENT_NAME,
|
|
111
111
|
data
|
|
112
|
-
},
|
|
112
|
+
}, DbxAnalyticsStreamEventType.NewUserEvent, user);
|
|
113
113
|
}
|
|
114
114
|
sendUserLoginEvent(user, data) {
|
|
115
115
|
this.sendNextEvent({
|
|
116
|
-
name:
|
|
116
|
+
name: DbxAnalyticsService.USER_LOGIN_EVENT_NAME,
|
|
117
117
|
data
|
|
118
|
-
},
|
|
118
|
+
}, DbxAnalyticsStreamEventType.UserLoginEvent, user);
|
|
119
119
|
}
|
|
120
120
|
sendUserLogoutEvent(data, clearUser = true) {
|
|
121
121
|
this.sendNextEvent({
|
|
122
|
-
name:
|
|
122
|
+
name: DbxAnalyticsService.USER_LOGOUT_EVENT_NAME,
|
|
123
123
|
data
|
|
124
|
-
},
|
|
124
|
+
}, DbxAnalyticsStreamEventType.UserLogoutEvent);
|
|
125
125
|
if (clearUser) {
|
|
126
126
|
this.setUser(undefined);
|
|
127
127
|
}
|
|
128
128
|
}
|
|
129
129
|
sendUserPropertiesEvent(user, data) {
|
|
130
130
|
this.sendNextEvent({
|
|
131
|
-
name:
|
|
131
|
+
name: DbxAnalyticsService.USER_PROPERTIES_EVENT_NAME,
|
|
132
132
|
data
|
|
133
|
-
},
|
|
133
|
+
}, DbxAnalyticsStreamEventType.UserPropertiesEvent, user);
|
|
134
134
|
}
|
|
135
135
|
sendEventData(name, data) {
|
|
136
136
|
return this.sendEvent({
|
|
@@ -141,15 +141,15 @@ class AnalyticsService {
|
|
|
141
141
|
sendEventType(eventType) {
|
|
142
142
|
this.sendNextEvent({
|
|
143
143
|
name: eventType
|
|
144
|
-
},
|
|
144
|
+
}, DbxAnalyticsStreamEventType.Event);
|
|
145
145
|
}
|
|
146
146
|
sendEvent(event) {
|
|
147
|
-
this.sendNextEvent(event,
|
|
147
|
+
this.sendNextEvent(event, DbxAnalyticsStreamEventType.Event);
|
|
148
148
|
}
|
|
149
149
|
sendPageView(page) {
|
|
150
150
|
this.sendNextEvent({
|
|
151
151
|
name: page
|
|
152
|
-
},
|
|
152
|
+
}, DbxAnalyticsStreamEventType.PageView);
|
|
153
153
|
}
|
|
154
154
|
sendNextEvent(event = {}, type, userOverride) {
|
|
155
155
|
this.user$.pipe(first()).subscribe((analyticsUser) => {
|
|
@@ -159,7 +159,7 @@ class AnalyticsService {
|
|
|
159
159
|
});
|
|
160
160
|
}
|
|
161
161
|
nextEvent(event, type) {
|
|
162
|
-
const wrapper = new
|
|
162
|
+
const wrapper = new DbxAnalyticsStreamEventAnalyticsEventWrapper(event, type);
|
|
163
163
|
this._subject.next(wrapper);
|
|
164
164
|
}
|
|
165
165
|
// MARK: Internal
|
|
@@ -177,33 +177,34 @@ class AnalyticsService {
|
|
|
177
177
|
console.log('AnalyticsService: Log analytics events enabled.');
|
|
178
178
|
// Create a new subscription
|
|
179
179
|
this._loggerSub.subscription = this._subject.subscribe((x) => {
|
|
180
|
-
console.log(`AnalyticsService: Analytics Event - ${
|
|
180
|
+
console.log(`AnalyticsService: Analytics Event - ${DbxAnalyticsStreamEventType[x.type]} User: ${x.userId} Data: ${JSON.stringify(x.event)}.`);
|
|
181
181
|
});
|
|
182
182
|
}
|
|
183
183
|
this._userSourceSub.subscription = this.user$.subscribe(() => {
|
|
184
|
-
this.sendNextEvent({},
|
|
184
|
+
this.sendNextEvent({}, DbxAnalyticsStreamEventType.UserChange);
|
|
185
185
|
});
|
|
186
186
|
}
|
|
187
187
|
destroy() {
|
|
188
|
+
this._subject.complete();
|
|
188
189
|
this._userSourceSub.destroy();
|
|
189
190
|
this._loggerSub.destroy();
|
|
190
191
|
}
|
|
191
192
|
}
|
|
192
193
|
// TODO: Make these configurable.
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2
|
|
194
|
+
DbxAnalyticsService.USER_REGISTRATION_EVENT_NAME = 'User Registered';
|
|
195
|
+
DbxAnalyticsService.USER_LOGIN_EVENT_NAME = 'User Login';
|
|
196
|
+
DbxAnalyticsService.USER_LOGOUT_EVENT_NAME = 'User Logout';
|
|
197
|
+
DbxAnalyticsService.USER_PROPERTIES_EVENT_NAME = 'User Properties';
|
|
198
|
+
DbxAnalyticsService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.2", ngImport: i0, type: DbxAnalyticsService, deps: [{ token: DbxAnalyticsServiceConfiguration }, { token: DbxAnalyticsUserSource, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
199
|
+
DbxAnalyticsService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.2", ngImport: i0, type: DbxAnalyticsService });
|
|
200
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.2", ngImport: i0, type: DbxAnalyticsService, decorators: [{
|
|
200
201
|
type: Injectable
|
|
201
202
|
}], ctorParameters: function () {
|
|
202
|
-
return [{ type:
|
|
203
|
+
return [{ type: DbxAnalyticsServiceConfiguration }, { type: undefined, decorators: [{
|
|
203
204
|
type: Optional
|
|
204
205
|
}, {
|
|
205
206
|
type: Inject,
|
|
206
|
-
args: [
|
|
207
|
+
args: [DbxAnalyticsUserSource]
|
|
207
208
|
}] }];
|
|
208
209
|
} });
|
|
209
210
|
|
|
@@ -261,28 +262,28 @@ class DbxActionAnalyticsDirective extends AbstractSubscriptionDirective {
|
|
|
261
262
|
});
|
|
262
263
|
}
|
|
263
264
|
}
|
|
264
|
-
DbxActionAnalyticsDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2
|
|
265
|
-
DbxActionAnalyticsDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.2
|
|
266
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2
|
|
265
|
+
DbxActionAnalyticsDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.2", ngImport: i0, type: DbxActionAnalyticsDirective, deps: [{ token: i1.DbxActionContextStoreSourceInstance, host: true }, { token: DbxAnalyticsService }], target: i0.ɵɵFactoryTarget.Directive });
|
|
266
|
+
DbxActionAnalyticsDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.2", type: DbxActionAnalyticsDirective, selector: "[dbxActionAnalytics]", inputs: { config: ["dbxActionAnalytics", "config"] }, usesInheritance: true, ngImport: i0 });
|
|
267
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.2", ngImport: i0, type: DbxActionAnalyticsDirective, decorators: [{
|
|
267
268
|
type: Directive,
|
|
268
269
|
args: [{
|
|
269
270
|
selector: '[dbxActionAnalytics]',
|
|
270
271
|
}]
|
|
271
272
|
}], ctorParameters: function () {
|
|
272
|
-
return [{ type: i1.
|
|
273
|
+
return [{ type: i1.DbxActionContextStoreSourceInstance, decorators: [{
|
|
273
274
|
type: Host
|
|
274
|
-
}] }, { type:
|
|
275
|
+
}] }, { type: DbxAnalyticsService }];
|
|
275
276
|
}, propDecorators: { config: [{
|
|
276
277
|
type: Input,
|
|
277
278
|
args: ['dbxActionAnalytics']
|
|
278
279
|
}] } });
|
|
279
280
|
|
|
280
|
-
class
|
|
281
|
+
class DbxAnalyticsActionModule {
|
|
281
282
|
}
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2
|
|
283
|
+
DbxAnalyticsActionModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.2", ngImport: i0, type: DbxAnalyticsActionModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
284
|
+
DbxAnalyticsActionModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.3.2", ngImport: i0, type: DbxAnalyticsActionModule, declarations: [DbxActionAnalyticsDirective], exports: [DbxActionAnalyticsDirective] });
|
|
285
|
+
DbxAnalyticsActionModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.3.2", ngImport: i0, type: DbxAnalyticsActionModule });
|
|
286
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.2", ngImport: i0, type: DbxAnalyticsActionModule, decorators: [{
|
|
286
287
|
type: NgModule,
|
|
287
288
|
args: [{
|
|
288
289
|
declarations: [
|
|
@@ -302,20 +303,20 @@ class DbxAnalyticsModule {
|
|
|
302
303
|
// Configuration
|
|
303
304
|
options.analyticsConfigurationProvider,
|
|
304
305
|
// Service
|
|
305
|
-
|
|
306
|
+
DbxAnalyticsService
|
|
306
307
|
]
|
|
307
308
|
};
|
|
308
309
|
}
|
|
309
310
|
}
|
|
310
|
-
DbxAnalyticsModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2
|
|
311
|
-
DbxAnalyticsModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.2
|
|
312
|
-
DbxAnalyticsModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.2
|
|
313
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2
|
|
311
|
+
DbxAnalyticsModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.2", ngImport: i0, type: DbxAnalyticsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
312
|
+
DbxAnalyticsModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.3.2", ngImport: i0, type: DbxAnalyticsModule });
|
|
313
|
+
DbxAnalyticsModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.3.2", ngImport: i0, type: DbxAnalyticsModule });
|
|
314
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.2", ngImport: i0, type: DbxAnalyticsModule, decorators: [{
|
|
314
315
|
type: NgModule
|
|
315
316
|
}] });
|
|
316
317
|
|
|
317
|
-
const PRELOAD_SEGMENT_TOKEN = new InjectionToken('
|
|
318
|
-
class
|
|
318
|
+
const PRELOAD_SEGMENT_TOKEN = new InjectionToken('DbxAnalyticsSegmentApiServicePreload');
|
|
319
|
+
class DbxAnalyticsSegmentApiServiceConfig {
|
|
319
320
|
constructor(writeKey) {
|
|
320
321
|
this.writeKey = writeKey;
|
|
321
322
|
this.logging = true;
|
|
@@ -327,9 +328,9 @@ class SegmentApiServiceConfig {
|
|
|
327
328
|
*
|
|
328
329
|
* This requires some setup in index.html.
|
|
329
330
|
*/
|
|
330
|
-
class
|
|
331
|
+
class DbxAnalyticsSegmentApiService extends AbstractAsyncWindowLoadedService {
|
|
331
332
|
constructor(_config, preload = true) {
|
|
332
|
-
super(
|
|
333
|
+
super(DbxAnalyticsSegmentApiService.SEGMENT_API_WINDOW_KEY, undefined, 'Segment', preload);
|
|
333
334
|
this._config = _config;
|
|
334
335
|
}
|
|
335
336
|
get config() {
|
|
@@ -349,7 +350,7 @@ class SegmentApiService extends AbstractAsyncWindowLoadedService {
|
|
|
349
350
|
// Wait for the service to ready itself.
|
|
350
351
|
service.ready(() => {
|
|
351
352
|
// Segment changes itself or rather the target, and the previous initial target is ignored after.
|
|
352
|
-
const segment = window[
|
|
353
|
+
const segment = window[DbxAnalyticsSegmentApiService.SEGMENT_API_WINDOW_KEY];
|
|
353
354
|
resolve(segment);
|
|
354
355
|
});
|
|
355
356
|
}
|
|
@@ -360,23 +361,23 @@ class SegmentApiService extends AbstractAsyncWindowLoadedService {
|
|
|
360
361
|
});
|
|
361
362
|
}
|
|
362
363
|
}
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2
|
|
364
|
+
DbxAnalyticsSegmentApiService.SEGMENT_API_WINDOW_KEY = 'analytics';
|
|
365
|
+
DbxAnalyticsSegmentApiService.SEGMENT_READY_KEY = 'SegmentReady';
|
|
366
|
+
DbxAnalyticsSegmentApiService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.2", ngImport: i0, type: DbxAnalyticsSegmentApiService, deps: [{ token: DbxAnalyticsSegmentApiServiceConfig }, { token: PRELOAD_SEGMENT_TOKEN }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
367
|
+
DbxAnalyticsSegmentApiService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.2", ngImport: i0, type: DbxAnalyticsSegmentApiService });
|
|
368
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.2", ngImport: i0, type: DbxAnalyticsSegmentApiService, decorators: [{
|
|
368
369
|
type: Injectable
|
|
369
370
|
}], ctorParameters: function () {
|
|
370
|
-
return [{ type:
|
|
371
|
+
return [{ type: DbxAnalyticsSegmentApiServiceConfig }, { type: undefined, decorators: [{
|
|
371
372
|
type: Inject,
|
|
372
373
|
args: [PRELOAD_SEGMENT_TOKEN]
|
|
373
374
|
}] }];
|
|
374
375
|
} });
|
|
375
376
|
|
|
376
377
|
/**
|
|
377
|
-
*
|
|
378
|
+
* DbxAnalyticsServiceListener adapter for Segment.
|
|
378
379
|
*/
|
|
379
|
-
class
|
|
380
|
+
class DbxAnalyticsSegmentServiceListener extends AbstractDbxAnalyticsServiceListener {
|
|
380
381
|
constructor(_segmentApi) {
|
|
381
382
|
super();
|
|
382
383
|
this._segmentApi = _segmentApi;
|
|
@@ -399,20 +400,20 @@ class SegmentAnalyticsListenerService extends AbstractAnalyticsServiceListener {
|
|
|
399
400
|
}
|
|
400
401
|
handleStreamEvent(api, streamEvent) {
|
|
401
402
|
switch (streamEvent.type) {
|
|
402
|
-
case
|
|
403
|
+
case DbxAnalyticsStreamEventType.NewUserEvent:
|
|
403
404
|
this.updateWithNewUserEvent(api, streamEvent);
|
|
404
405
|
break;
|
|
405
|
-
case
|
|
406
|
-
case
|
|
406
|
+
case DbxAnalyticsStreamEventType.UserLoginEvent:
|
|
407
|
+
case DbxAnalyticsStreamEventType.Event:
|
|
407
408
|
this.updateWithEvent(api, streamEvent);
|
|
408
409
|
break;
|
|
409
|
-
case
|
|
410
|
+
case DbxAnalyticsStreamEventType.UserLogoutEvent:
|
|
410
411
|
this.changeUser(api, undefined);
|
|
411
412
|
break;
|
|
412
|
-
case
|
|
413
|
+
case DbxAnalyticsStreamEventType.PageView:
|
|
413
414
|
api.page();
|
|
414
415
|
break;
|
|
415
|
-
case
|
|
416
|
+
case DbxAnalyticsStreamEventType.UserChange:
|
|
416
417
|
this.changeUser(api, streamEvent.user);
|
|
417
418
|
break;
|
|
418
419
|
}
|
|
@@ -448,30 +449,30 @@ class SegmentAnalyticsListenerService extends AbstractAnalyticsServiceListener {
|
|
|
448
449
|
}
|
|
449
450
|
}
|
|
450
451
|
}
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2
|
|
452
|
+
DbxAnalyticsSegmentServiceListener.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.2", ngImport: i0, type: DbxAnalyticsSegmentServiceListener, deps: [{ token: DbxAnalyticsSegmentApiService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
453
|
+
DbxAnalyticsSegmentServiceListener.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.2", ngImport: i0, type: DbxAnalyticsSegmentServiceListener });
|
|
454
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.2", ngImport: i0, type: DbxAnalyticsSegmentServiceListener, decorators: [{
|
|
454
455
|
type: Injectable
|
|
455
|
-
}], ctorParameters: function () { return [{ type:
|
|
456
|
+
}], ctorParameters: function () { return [{ type: DbxAnalyticsSegmentApiService }]; } });
|
|
456
457
|
|
|
457
|
-
class
|
|
458
|
+
class DbxAnalyticsSegmentModule {
|
|
458
459
|
static forRoot(preloadService) {
|
|
459
460
|
return {
|
|
460
|
-
ngModule:
|
|
461
|
+
ngModule: DbxAnalyticsSegmentModule,
|
|
461
462
|
providers: [
|
|
462
463
|
{
|
|
463
464
|
provide: PRELOAD_SEGMENT_TOKEN,
|
|
464
465
|
useValue: preloadService
|
|
465
466
|
},
|
|
466
|
-
|
|
467
|
+
DbxAnalyticsSegmentApiService
|
|
467
468
|
]
|
|
468
469
|
};
|
|
469
470
|
}
|
|
470
471
|
}
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2
|
|
472
|
+
DbxAnalyticsSegmentModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.2", ngImport: i0, type: DbxAnalyticsSegmentModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
473
|
+
DbxAnalyticsSegmentModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.3.2", ngImport: i0, type: DbxAnalyticsSegmentModule });
|
|
474
|
+
DbxAnalyticsSegmentModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.3.2", ngImport: i0, type: DbxAnalyticsSegmentModule, imports: [[]] });
|
|
475
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.2", ngImport: i0, type: DbxAnalyticsSegmentModule, decorators: [{
|
|
475
476
|
type: NgModule,
|
|
476
477
|
args: [{
|
|
477
478
|
declarations: [],
|
|
@@ -483,5 +484,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.4", ngImpor
|
|
|
483
484
|
* Generated bundle index. Do not edit.
|
|
484
485
|
*/
|
|
485
486
|
|
|
486
|
-
export {
|
|
487
|
+
export { AbstractDbxAnalyticsServiceListener, DbxActionAnalyticsDirective, DbxActionAnalyticsTriggerType, DbxAnalyticsActionModule, DbxAnalyticsEventEmitterService, DbxAnalyticsEventStreamService, DbxAnalyticsModule, DbxAnalyticsSegmentApiService, DbxAnalyticsSegmentApiServiceConfig, DbxAnalyticsSegmentModule, DbxAnalyticsSegmentServiceListener, DbxAnalyticsService, DbxAnalyticsServiceConfiguration, DbxAnalyticsServiceListener, DbxAnalyticsStreamEventAnalyticsEventWrapper, DbxAnalyticsStreamEventType, DbxAnalyticsUserSource, PRELOAD_SEGMENT_TOKEN };
|
|
487
488
|
//# sourceMappingURL=dereekb-dbx-analytics.mjs.map
|
|
@@ -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 { AnalyticsUser, UserAnalyticsEvent, AnalyticsUserId } from \"./analytics\";\n\nexport enum AnalyticsStreamEventType {\n\n PageView,\n UserChange,\n\n // User Events\n NewUserEvent,\n UserLoginEvent,\n UserLogoutEvent,\n UserPropertiesEvent,\n\n // Events\n Event\n\n}\n\nexport interface AnalyticsStreamEvent {\n readonly type: AnalyticsStreamEventType;\n readonly user?: Maybe<AnalyticsUser>;\n readonly event?: UserAnalyticsEvent;\n readonly userId?: AnalyticsUserId;\n}\n","import { Observable, Subject, BehaviorSubject, of, Subscription } from 'rxjs';\nimport { filter, first, shareReplay, switchMap } from 'rxjs/operators';\nimport { Inject, Injectable, Optional } from '@angular/core';\nimport { SubscriptionObject, filterMaybe } from '@dereekb/rxjs';\nimport { AnalyticsEvent, AnalyticsEventData, AnalyticsEventName, AnalyticsUser, NewUserAnalyticsEventData, UserAnalyticsEvent } from './analytics';\nimport { AnalyticsStreamEvent, AnalyticsStreamEventType } from './analytics.stream';\nimport { Maybe, Destroyable } from '@dereekb/util';\n\nexport abstract class AnalyticsEventEmitterService {\n abstract sendNewUserEvent(user: AnalyticsUser, data: NewUserAnalyticsEventData): void;\n abstract sendUserLoginEvent(user: AnalyticsUser, data?: AnalyticsEventData): void;\n abstract sendUserLogoutEvent(data?: AnalyticsEventData): void;\n abstract sendUserPropertiesEvent(user: AnalyticsUser, data?: AnalyticsEventData): void;\n abstract sendEventData(name: AnalyticsEventName, data?: AnalyticsEventData): void;\n abstract sendEvent(event: AnalyticsEvent): void;\n abstract sendPageView(page?: string): void;\n}\n\nexport abstract class AnalyticsEventStreamService {\n abstract readonly events$: Observable<AnalyticsStreamEvent>;\n}\n\nexport abstract class AnalyticsUserSource {\n abstract readonly analyticsUser$: Observable<Maybe<AnalyticsUser>>;\n}\n\nexport abstract class AnalyticsServiceListener {\n public abstract listenToService(service: AnalyticsService): void;\n}\n\n/**\n * Abstract AnalyticsServiceListener implementation.\n */\nexport abstract class AbstractAnalyticsServiceListener implements AnalyticsServiceListener, Destroyable {\n\n private _sub = new SubscriptionObject();\n protected _analytics = new BehaviorSubject<Maybe<AnalyticsService>>(undefined);\n\n readonly analytics$ = this._analytics.pipe(filterMaybe(), shareReplay(1));\n readonly analyticsEvents$ = this.analytics$.pipe(switchMap(x => x.events$), shareReplay(1));\n\n // MARK: AnalyticsServiceListener\n listenToService(service: AnalyticsService): 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}\n\nexport abstract class AnalyticsServiceConfiguration {\n listeners: AnalyticsServiceListener[] = [];\n isProduction?: boolean;\n logEvents?: boolean;\n userSource?: AnalyticsUserSource;\n}\n\nexport class AnalyticsStreamEventAnalyticsEventWrapper implements AnalyticsStreamEvent {\n\n constructor(public readonly event: UserAnalyticsEvent, public readonly type: AnalyticsStreamEventType = AnalyticsStreamEventType.Event) { }\n\n public get user(): Maybe<AnalyticsUser> {\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/**\n * Primary analytics service that emits analytics events that components can listen to.\n */\n@Injectable()\nexport class AnalyticsService implements AnalyticsEventStreamService, AnalyticsEventEmitterService, Destroyable {\n\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<AnalyticsStreamEvent>();\n readonly events$ = this._subject.asObservable();\n\n private _userSource = new BehaviorSubject<Maybe<AnalyticsUserSource>>(undefined);\n readonly user$ = this._userSource.pipe(switchMap(x => (x) ? x.analyticsUser$ : of(undefined)), shareReplay(1));\n\n private _userSourceSub = new SubscriptionObject();\n private _loggerSub = new SubscriptionObject();\n\n constructor(\n private _config: AnalyticsServiceConfiguration,\n @Optional() @Inject(AnalyticsUserSource) userSource: Maybe<AnalyticsUserSource> = _config.userSource\n ) {\n this._init();\n\n if (userSource) {\n this.setUserSource(userSource);\n }\n }\n\n // MARK: Source\n /**\n * Sets the user directly.\n */\n public setUser(user: Maybe<AnalyticsUser>): void {\n let source: Maybe<AnalyticsUserSource>;\n\n if (user) {\n source = { analyticsUser$: of(user) };\n }\n\n this._userSource.next(source);\n }\n\n public setUserSource(source: AnalyticsUserSource): void {\n this._userSource.next(source);\n }\n\n // MARK: AnalyticsEventEmitterService\n /**\n * Sends an event.\n */\n public sendNewUserEvent(user: AnalyticsUser, data: NewUserAnalyticsEventData): void {\n this.sendNextEvent({\n name: AnalyticsService.USER_REGISTRATION_EVENT_NAME,\n data\n }, AnalyticsStreamEventType.NewUserEvent, user);\n }\n\n public sendUserLoginEvent(user: AnalyticsUser, data?: AnalyticsEventData): void {\n this.sendNextEvent({\n name: AnalyticsService.USER_LOGIN_EVENT_NAME,\n data\n }, AnalyticsStreamEventType.UserLoginEvent, user);\n }\n\n public sendUserLogoutEvent(data?: AnalyticsEventData, clearUser = true): void {\n this.sendNextEvent({\n name: AnalyticsService.USER_LOGOUT_EVENT_NAME,\n data\n }, AnalyticsStreamEventType.UserLogoutEvent);\n\n if (clearUser) {\n this.setUser(undefined);\n }\n }\n\n public sendUserPropertiesEvent(user: AnalyticsUser, data?: AnalyticsEventData): void {\n this.sendNextEvent({\n name: AnalyticsService.USER_PROPERTIES_EVENT_NAME,\n data\n }, AnalyticsStreamEventType.UserPropertiesEvent, user);\n }\n\n public sendEventData(name: AnalyticsEventName, data?: AnalyticsEventData): void {\n return this.sendEvent({\n name,\n data\n });\n }\n\n public sendEventType(eventType: AnalyticsEventName): void {\n this.sendNextEvent({\n name: eventType\n }, AnalyticsStreamEventType.Event);\n }\n\n public sendEvent(event: AnalyticsEvent): void {\n this.sendNextEvent(event, AnalyticsStreamEventType.Event);\n }\n\n public sendPageView(page?: string): void {\n this.sendNextEvent({\n name: page\n }, AnalyticsStreamEventType.PageView);\n }\n\n protected sendNextEvent(event: AnalyticsEvent = {}, type: AnalyticsStreamEventType, userOverride?: AnalyticsUser): void {\n this.user$.pipe(first()).subscribe((analyticsUser) => {\n const user: Maybe<AnalyticsUser> = (userOverride != null) ? userOverride : analyticsUser;\n const analyticsEvent: UserAnalyticsEvent = { ...event, user };\n this.nextEvent(analyticsEvent, type);\n });\n }\n\n protected nextEvent(event: UserAnalyticsEvent, type: AnalyticsStreamEventType): void {\n const wrapper = new AnalyticsStreamEventAnalyticsEventWrapper(event, type);\n this._subject.next(wrapper);\n }\n\n // MARK: Internal\n private _init(): void {\n\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 - ${AnalyticsStreamEventType[x.type]} User: ${x.userId} Data: ${JSON.stringify(x.event)}.`);\n });\n }\n\n this._userSourceSub.subscription = this.user$.subscribe(() => {\n this.sendNextEvent({}, AnalyticsStreamEventType.UserChange);\n });\n }\n\n destroy() {\n this._userSourceSub.destroy();\n this._loggerSub.destroy();\n }\n\n}\n","import { filterMaybe } from '@dereekb/rxjs';\nimport { switchMap, tap, shareReplay } from 'rxjs/operators';\nimport { Host, Directive, Input, OnInit, OnDestroy } from '@angular/core';\nimport { BehaviorSubject, merge, Observable, of } from 'rxjs';\nimport { ActionContextStoreSourceInstance, AbstractSubscriptionDirective } from '@dereekb/dbx-core';\nimport { AnalyticsService } from '../analytics/analytics.service';\nimport { Maybe, ReadableError } from '@dereekb/util';\n\nexport enum DbxActionAnalyticsTriggerType {\n TRIGGER,\n READY,\n SUCCESS,\n ERROR\n}\n\nexport interface DbxActionAnalyticsConfig<T = any, O = any> {\n onTriggered: (service: AnalyticsService) => void;\n onReady: (service: AnalyticsService, value: T) => void;\n onSuccess: (service: AnalyticsService, value: Maybe<O>) => void;\n onError: (service: AnalyticsService, 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> extends AbstractSubscriptionDirective implements OnInit, OnDestroy {\n\n private _config = new BehaviorSubject<Maybe<DbxActionAnalyticsConfig>>(undefined);\n readonly config$ = this._config.pipe(filterMaybe(), shareReplay(1));\n\n @Input('dbxActionAnalytics')\n get config(): Maybe<DbxActionAnalyticsConfig> {\n return this._config.value;\n }\n\n set config(config: Maybe<DbxActionAnalyticsConfig>) {\n this._config.next(config);\n }\n\n constructor(\n @Host() readonly source: ActionContextStoreSourceInstance,\n readonly analyticsService: AnalyticsService\n ) {\n super();\n }\n\n ngOnInit(): void {\n this.sub = this.config$.pipe(\n switchMap(({ onTriggered, onReady, onSuccess, onError }) => {\n const triggerObs: Observable<any>[] = [];\n\n if (onTriggered) {\n triggerObs.push(this.source.triggered$.pipe(\n tap(() => onTriggered(this.analyticsService))\n ));\n }\n\n if (onReady) {\n triggerObs.push(this.source.valueReady$.pipe(\n tap((value) => onReady(this.analyticsService, value))\n ));\n }\n\n if (onSuccess) {\n triggerObs.push(this.source.success$.pipe(\n tap((result) => onSuccess(this.analyticsService, result))\n ));\n }\n\n if (onError) {\n triggerObs.push(this.source.error$.pipe(\n tap((error) => onError(this.analyticsService, error))\n ));\n }\n\n if (triggerObs.length) {\n return merge(triggerObs);\n } else {\n return of();\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}\n","import { NgModule } from '@angular/core';\nimport { DbxActionAnalyticsDirective } from './analytics.action.directive';\n\n@NgModule({\n declarations: [\n DbxActionAnalyticsDirective\n ],\n exports: [\n DbxActionAnalyticsDirective\n ]\n})\nexport class AnalyticsActionModule { }\n","import { NgModule, ModuleWithProviders, Provider } from '@angular/core';\nimport { AnalyticsService } from './analytics.service';\n\n\nexport interface DbxAnalyticsModuleOptions {\n\n /**\n * Provides a AnalyticsServiceConfiguration value.\n */\n analyticsConfigurationProvider: Provider;\n\n}\n\n@NgModule()\nexport class DbxAnalyticsModule {\n\n static forRoot(options: DbxAnalyticsModuleOptions): ModuleWithProviders<DbxAnalyticsModule> {\n return {\n ngModule: DbxAnalyticsModule,\n providers: [\n // Configuration\n options.analyticsConfigurationProvider,\n // Service\n AnalyticsService\n ]\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>('PreLoadSegmentService');\n\nexport class SegmentApiServiceConfig {\n logging = true;\n active = true;\n constructor(public writeKey: string) { }\n}\n\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 SegmentApiService extends AbstractAsyncWindowLoadedService<SegmentAnalytics.AnalyticsJS> {\n\n static readonly SEGMENT_API_WINDOW_KEY = 'analytics';\n static readonly SEGMENT_READY_KEY = 'SegmentReady';\n\n constructor(private _config: SegmentApiServiceConfig, @Inject(PRELOAD_SEGMENT_TOKEN) preload: boolean = true) {\n super(SegmentApiService.SEGMENT_API_WINDOW_KEY, undefined, 'Segment', preload);\n }\n\n get config(): SegmentApiServiceConfig {\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 any)?.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[SegmentApiService.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\n}\n","import { Injectable } from '@angular/core';\nimport { Maybe } from '@dereekb/util';\nimport { combineLatest } from 'rxjs';\nimport { AbstractAnalyticsServiceListener, AnalyticsStreamEvent, AnalyticsStreamEventType, AnalyticsUser } from '../../analytics';\nimport { SegmentApiService } from './segment.service';\n\n/**\n * AnalyticsServiceListener adapter for Segment.\n */\n@Injectable()\nexport class SegmentAnalyticsListenerService extends AbstractAnalyticsServiceListener {\n\n constructor(private _segmentApi: SegmentApiService) {\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(\n ([segment, streamEvent]: [SegmentAnalytics.AnalyticsJS, AnalyticsStreamEvent]) => {\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: AnalyticsStreamEvent): void {\n switch (streamEvent.type) {\n case AnalyticsStreamEventType.NewUserEvent:\n this.updateWithNewUserEvent(api, streamEvent);\n break;\n case AnalyticsStreamEventType.UserLoginEvent:\n case AnalyticsStreamEventType.Event:\n this.updateWithEvent(api, streamEvent);\n break;\n case AnalyticsStreamEventType.UserLogoutEvent:\n this.changeUser(api, undefined);\n break;\n case AnalyticsStreamEventType.PageView:\n api.page();\n break;\n case AnalyticsStreamEventType.UserChange:\n this.changeUser(api, streamEvent.user);\n break;\n }\n }\n\n protected updateWithNewUserEvent(api: SegmentAnalytics.AnalyticsJS, streamEvent: AnalyticsStreamEvent): void {\n this.changeUser(api, streamEvent.user);\n }\n\n protected updateWithEvent(api: SegmentAnalytics.AnalyticsJS, streamEvent: AnalyticsStreamEvent, 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(eventName, {\n ...(value != null) ? {\n value\n } : undefined,\n ...data\n }, {}, () => {\n if (this._segmentApi.config.logging) {\n console.log('Segment track success.');\n }\n });\n }\n }\n\n private changeUser(api: SegmentAnalytics.AnalyticsJS, user: Maybe<AnalyticsUser>): void {\n if (user) {\n api.identify(user.user, {\n ...user.properties\n }, {}, () => {\n if (this._segmentApi.config.logging) {\n console.log('Segment identify success.');\n }\n });\n } else {\n api.reset();\n }\n }\n\n}\n","import { NgModule, ModuleWithProviders } from '@angular/core';\nimport { PRELOAD_SEGMENT_TOKEN, SegmentApiService } from './segment.service';\n\n@NgModule({\n declarations: [],\n imports: []\n})\nexport class SegmentModule {\n\n static forRoot(preloadService?: boolean): ModuleWithProviders<SegmentModule> {\n return {\n ngModule: SegmentModule,\n providers: [\n {\n provide: PRELOAD_SEGMENT_TOKEN,\n useValue: preloadService\n },\n SegmentApiService\n ]\n };\n }\n\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"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\n PageView,\n UserChange,\n\n // User Events\n NewUserEvent,\n UserLoginEvent,\n UserLogoutEvent,\n UserPropertiesEvent,\n\n // Events\n Event\n\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 } from 'rxjs';\nimport { filter, first, shareReplay, switchMap } from 'rxjs/operators';\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 } 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\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(switchMap(x => x.events$), shareReplay(1));\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}\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\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/**\n * Primary analytics service that emits analytics events that components can listen to.\n */\n@Injectable()\nexport class DbxAnalyticsService implements DbxAnalyticsEventStreamService, DbxAnalyticsEventEmitterService, Destroyable {\n\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 readonly user$ = this._userSource.pipe(switchMap(x => (x) ? x.analyticsUser$ : of(undefined)), shareReplay(1));\n\n private _userSourceSub = new SubscriptionObject();\n private _loggerSub = new SubscriptionObject();\n\n constructor(\n private _config: DbxAnalyticsServiceConfiguration,\n @Optional() @Inject(DbxAnalyticsUserSource) userSource: Maybe<DbxAnalyticsUserSource> = _config.userSource\n ) {\n this._init();\n\n if (userSource) {\n this.setUserSource(userSource);\n }\n }\n\n // MARK: Source\n /**\n * Sets the user directly.\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\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 name: DbxAnalyticsService.USER_REGISTRATION_EVENT_NAME,\n data\n }, DbxAnalyticsStreamEventType.NewUserEvent, user);\n }\n\n public sendUserLoginEvent(user: DbxAnalyticsUser, data?: DbxAnalyticsEventData): void {\n this.sendNextEvent({\n name: DbxAnalyticsService.USER_LOGIN_EVENT_NAME,\n data\n }, DbxAnalyticsStreamEventType.UserLoginEvent, user);\n }\n\n public sendUserLogoutEvent(data?: DbxAnalyticsEventData, clearUser = true): void {\n this.sendNextEvent({\n name: DbxAnalyticsService.USER_LOGOUT_EVENT_NAME,\n data\n }, DbxAnalyticsStreamEventType.UserLogoutEvent);\n\n if (clearUser) {\n this.setUser(undefined);\n }\n }\n\n public sendUserPropertiesEvent(user: DbxAnalyticsUser, data?: DbxAnalyticsEventData): void {\n this.sendNextEvent({\n name: DbxAnalyticsService.USER_PROPERTIES_EVENT_NAME,\n data\n }, DbxAnalyticsStreamEventType.UserPropertiesEvent, user);\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 name: eventType\n }, DbxAnalyticsStreamEventType.Event);\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 name: page\n }, DbxAnalyticsStreamEventType.PageView);\n }\n\n protected sendNextEvent(event: DbxAnalyticsEvent = {}, type: DbxAnalyticsStreamEventType, userOverride?: DbxAnalyticsUser): void {\n this.user$.pipe(first()).subscribe((analyticsUser) => {\n const user: Maybe<DbxAnalyticsUser> = (userOverride != null) ? 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\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(() => {\n this.sendNextEvent({}, DbxAnalyticsStreamEventType.UserChange);\n });\n }\n\n destroy() {\n this._subject.complete();\n this._userSourceSub.destroy();\n this._loggerSub.destroy();\n }\n\n}\n","import { filterMaybe } from '@dereekb/rxjs';\nimport { switchMap, tap, shareReplay } from 'rxjs/operators';\nimport { Host, Directive, Input, OnInit, OnDestroy } from '@angular/core';\nimport { BehaviorSubject, merge, Observable, of } from 'rxjs';\nimport { DbxActionContextStoreSourceInstance, AbstractSubscriptionDirective } from '@dereekb/dbx-core';\nimport { DbxAnalyticsService } from '../analytics/analytics.service';\nimport { Maybe, ReadableError } from '@dereekb/util';\n\nexport enum DbxActionAnalyticsTriggerType {\n TRIGGER,\n READY,\n SUCCESS,\n ERROR\n}\n\nexport interface DbxActionAnalyticsConfig<T = any, O = any> {\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> extends AbstractSubscriptionDirective implements OnInit, OnDestroy {\n\n private _config = new BehaviorSubject<Maybe<DbxActionAnalyticsConfig>>(undefined);\n readonly config$ = this._config.pipe(filterMaybe(), shareReplay(1));\n\n @Input('dbxActionAnalytics')\n get config(): Maybe<DbxActionAnalyticsConfig> {\n return this._config.value;\n }\n\n set config(config: Maybe<DbxActionAnalyticsConfig>) {\n this._config.next(config);\n }\n\n constructor(\n @Host() readonly source: DbxActionContextStoreSourceInstance,\n readonly analyticsService: DbxAnalyticsService\n ) {\n super();\n }\n\n ngOnInit(): void {\n this.sub = this.config$.pipe(\n switchMap(({ onTriggered, onReady, onSuccess, onError }) => {\n const triggerObs: Observable<any>[] = [];\n\n if (onTriggered) {\n triggerObs.push(this.source.triggered$.pipe(\n tap(() => onTriggered(this.analyticsService))\n ));\n }\n\n if (onReady) {\n triggerObs.push(this.source.valueReady$.pipe(\n tap((value) => onReady(this.analyticsService, value))\n ));\n }\n\n if (onSuccess) {\n triggerObs.push(this.source.success$.pipe(\n tap((result) => onSuccess(this.analyticsService, result))\n ));\n }\n\n if (onError) {\n triggerObs.push(this.source.error$.pipe(\n tap((error) => onError(this.analyticsService, error))\n ));\n }\n\n if (triggerObs.length) {\n return merge(triggerObs);\n } else {\n return of();\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}\n","import { NgModule } from '@angular/core';\nimport { DbxActionAnalyticsDirective } from './analytics.action.directive';\n\n@NgModule({\n declarations: [\n DbxActionAnalyticsDirective\n ],\n exports: [\n DbxActionAnalyticsDirective\n ]\n})\nexport class DbxAnalyticsActionModule { }\n","import { NgModule, ModuleWithProviders, Provider } from '@angular/core';\nimport { DbxAnalyticsService } from './analytics.service';\n\n\nexport interface DbxAnalyticsModuleOptions {\n\n /**\n * Provides a AnalyticsServiceConfiguration value.\n */\n analyticsConfigurationProvider: Provider;\n\n}\n\n@NgModule()\nexport class DbxAnalyticsModule {\n\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}\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/**\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\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 any)?.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\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\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(\n ([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 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(eventName, {\n ...(value != null) ? {\n value\n } : undefined,\n ...data\n }, {}, () => {\n if (this._segmentApi.config.logging) {\n console.log('Segment track success.');\n }\n });\n }\n }\n\n private changeUser(api: SegmentAnalytics.AnalyticsJS, user: Maybe<DbxAnalyticsUser>): void {\n if (user) {\n api.identify(user.user, {\n ...user.properties\n }, {}, () => {\n if (this._segmentApi.config.logging) {\n console.log('Segment identify success.');\n }\n });\n } else {\n api.reset();\n }\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\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","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|