@dereekb/dbx-analytics 9.25.15 → 10.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.
Files changed (25) hide show
  1. package/{esm2020 → esm2022}/lib/action/analytics.action.directive.mjs +10 -10
  2. package/{esm2020 → esm2022}/lib/action/analytics.action.module.mjs +5 -5
  3. package/{esm2020 → esm2022}/lib/analytics/analytics.module.mjs +5 -5
  4. package/esm2022/lib/analytics/analytics.service.mjs +191 -0
  5. package/{esm2020 → esm2022}/lib/providers/segment/segment.listener.service.mjs +4 -4
  6. package/{esm2020 → esm2022}/lib/providers/segment/segment.module.mjs +5 -5
  7. package/esm2022/lib/providers/segment/segment.service.mjs +61 -0
  8. package/{fesm2020 → fesm2022}/dereekb-dbx-analytics.mjs +37 -37
  9. package/{fesm2020 → fesm2022}/dereekb-dbx-analytics.mjs.map +1 -1
  10. package/lib/action/analytics.action.directive.d.ts +1 -1
  11. package/lib/analytics/analytics.d.ts +3 -3
  12. package/package.json +12 -17
  13. package/esm2020/lib/analytics/analytics.service.mjs +0 -191
  14. package/esm2020/lib/providers/segment/segment.service.mjs +0 -61
  15. package/fesm2015/dereekb-dbx-analytics.mjs +0 -481
  16. package/fesm2015/dereekb-dbx-analytics.mjs.map +0 -1
  17. /package/{esm2020 → esm2022}/dereekb-dbx-analytics.mjs +0 -0
  18. /package/{esm2020 → esm2022}/index.mjs +0 -0
  19. /package/{esm2020 → esm2022}/lib/action/index.mjs +0 -0
  20. /package/{esm2020 → esm2022}/lib/analytics/analytics.mjs +0 -0
  21. /package/{esm2020 → esm2022}/lib/analytics/analytics.stream.mjs +0 -0
  22. /package/{esm2020 → esm2022}/lib/analytics/index.mjs +0 -0
  23. /package/{esm2020 → esm2022}/lib/index.mjs +0 -0
  24. /package/{esm2020 → esm2022}/lib/providers/index.mjs +0 -0
  25. /package/{esm2020 → esm2022}/lib/providers/segment/index.mjs +0 -0
@@ -1,61 +0,0 @@
1
- import { Injectable, InjectionToken, Inject } from '@angular/core';
2
- import { AbstractAsyncWindowLoadedService } from '@dereekb/browser';
3
- import { poll } from '@dereekb/util';
4
- import * as i0 from "@angular/core";
5
- export const PRELOAD_SEGMENT_TOKEN = new InjectionToken('DbxAnalyticsSegmentApiServicePreload');
6
- export class DbxAnalyticsSegmentApiServiceConfig {
7
- constructor(writeKey) {
8
- this.writeKey = writeKey;
9
- this.logging = true;
10
- this.active = true;
11
- }
12
- }
13
- /**
14
- * Segment API Service used for waiting/retrieving the segment API from window when initialized.
15
- *
16
- * This requires some setup in index.html.
17
- */
18
- export class DbxAnalyticsSegmentApiService extends AbstractAsyncWindowLoadedService {
19
- constructor(_config, preload = true) {
20
- super(DbxAnalyticsSegmentApiService.SEGMENT_API_WINDOW_KEY, undefined, 'Segment', preload);
21
- this._config = _config;
22
- }
23
- get config() {
24
- return this._config;
25
- }
26
- _prepareCompleteLoadingService() {
27
- return poll({
28
- // poll until analytics.invoked is true.
29
- check: () => Boolean(window.analytics.invoked),
30
- timesToGiveup: 100
31
- });
32
- }
33
- _initService(service) {
34
- return new Promise((resolve, reject) => {
35
- try {
36
- service.load(this._config.writeKey); // Initialize Segment
37
- // Wait for the service to ready itself.
38
- service.ready(() => {
39
- // Segment changes itself or rather the target, and the previous initial target is ignored after.
40
- const segment = window[DbxAnalyticsSegmentApiService.SEGMENT_API_WINDOW_KEY];
41
- resolve(segment);
42
- });
43
- }
44
- catch (e) {
45
- console.log('Failed to init segment: ' + e);
46
- reject(e);
47
- }
48
- });
49
- }
50
- }
51
- DbxAnalyticsSegmentApiService.SEGMENT_API_WINDOW_KEY = 'analytics';
52
- DbxAnalyticsSegmentApiService.SEGMENT_READY_KEY = 'SegmentReady';
53
- DbxAnalyticsSegmentApiService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", 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: "14.2.12", ngImport: i0, type: DbxAnalyticsSegmentApiService });
55
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: DbxAnalyticsSegmentApiService, decorators: [{
56
- type: Injectable
57
- }], ctorParameters: function () { return [{ type: DbxAnalyticsSegmentApiServiceConfig }, { type: undefined, decorators: [{
58
- type: Inject,
59
- args: [PRELOAD_SEGMENT_TOKEN]
60
- }] }]; } });
61
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VnbWVudC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZGJ4LWFuYWx5dGljcy9zcmMvbGliL3Byb3ZpZGVycy9zZWdtZW50L3NlZ21lbnQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkUsT0FBTyxFQUFFLGdDQUFnQyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDcEUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFFckMsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsSUFBSSxjQUFjLENBQVMsc0NBQXNDLENBQUMsQ0FBQztBQUV4RyxNQUFNLE9BQU8sbUNBQW1DO0lBRzlDLFlBQW1CLFFBQWdCO1FBQWhCLGFBQVEsR0FBUixRQUFRLENBQVE7UUFGbkMsWUFBTyxHQUFHLElBQUksQ0FBQztRQUNmLFdBQU0sR0FBRyxJQUFJLENBQUM7SUFDd0IsQ0FBQztDQUN4QztBQU9EOzs7O0dBSUc7QUFFSCxNQUFNLE9BQU8sNkJBQThCLFNBQVEsZ0NBQThEO0lBSS9HLFlBQW9CLE9BQTRDLEVBQWlDLFVBQW1CLElBQUk7UUFDdEgsS0FBSyxDQUFDLDZCQUE2QixDQUFDLHNCQUFzQixFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFEekUsWUFBTyxHQUFQLE9BQU8sQ0FBcUM7SUFFaEUsQ0FBQztJQUVELElBQUksTUFBTTtRQUNSLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN0QixDQUFDO0lBRWtCLDhCQUE4QjtRQUMvQyxPQUFPLElBQUksQ0FBQztZQUNWLHdDQUF3QztZQUN4QyxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFFLE1BQU0sQ0FBQyxTQUFxQyxDQUFDLE9BQU8sQ0FBQztZQUMzRSxhQUFhLEVBQUUsR0FBRztTQUNuQixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRWtCLFlBQVksQ0FBQyxPQUFxQztRQUNuRSxPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQ3JDLElBQUk7Z0JBQ0YsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMscUJBQXFCO2dCQUUxRCx3Q0FBd0M7Z0JBQ3hDLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFO29CQUNqQixpR0FBaUc7b0JBQ2pHLE1BQU0sT0FBTyxHQUFpQyxNQUFNLENBQUMsNkJBQTZCLENBQUMsc0JBQXNCLENBQUMsQ0FBQztvQkFDM0csT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUNuQixDQUFDLENBQUMsQ0FBQzthQUNKO1lBQUMsT0FBTyxDQUFDLEVBQUU7Z0JBQ1YsT0FBTyxDQUFDLEdBQUcsQ0FBQywwQkFBMEIsR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFDNUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ1g7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7O0FBbkNlLG9EQUFzQixHQUFHLFdBQVcsQ0FBQztBQUNyQywrQ0FBaUIsR0FBRyxjQUFjLENBQUM7MkhBRnhDLDZCQUE2QixrRUFJa0MscUJBQXFCOytIQUpwRiw2QkFBNkI7NEZBQTdCLDZCQUE2QjtrQkFEekMsVUFBVTs7MEJBSzBELE1BQU07MkJBQUMscUJBQXFCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgSW5qZWN0aW9uVG9rZW4sIEluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWJzdHJhY3RBc3luY1dpbmRvd0xvYWRlZFNlcnZpY2UgfSBmcm9tICdAZGVyZWVrYi9icm93c2VyJztcbmltcG9ydCB7IHBvbGwgfSBmcm9tICdAZGVyZWVrYi91dGlsJztcblxuZXhwb3J0IGNvbnN0IFBSRUxPQURfU0VHTUVOVF9UT0tFTiA9IG5ldyBJbmplY3Rpb25Ub2tlbjxzdHJpbmc+KCdEYnhBbmFseXRpY3NTZWdtZW50QXBpU2VydmljZVByZWxvYWQnKTtcblxuZXhwb3J0IGNsYXNzIERieEFuYWx5dGljc1NlZ21lbnRBcGlTZXJ2aWNlQ29uZmlnIHtcbiAgbG9nZ2luZyA9IHRydWU7XG4gIGFjdGl2ZSA9IHRydWU7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyB3cml0ZUtleTogc3RyaW5nKSB7fVxufVxuXG4vKipcbiAqIFdoZW4gdGhlIFNlZ21lbnQgbGlicmFyeSBmaW5pc2hlcyBsb2FkaW5nLCBpdCBpcyBpbnZva2VkLlxuICovXG50eXBlIFNlZ21lbnRBbmFseXRpY3NJbnZva2VkID0gU2VnbWVudEFuYWx5dGljcy5BbmFseXRpY3NKUyAmIHsgaW52b2tlZD86IGJvb2xlYW4gfTtcblxuLyoqXG4gKiBTZWdtZW50IEFQSSBTZXJ2aWNlIHVzZWQgZm9yIHdhaXRpbmcvcmV0cmlldmluZyB0aGUgc2VnbWVudCBBUEkgZnJvbSB3aW5kb3cgd2hlbiBpbml0aWFsaXplZC5cbiAqXG4gKiBUaGlzIHJlcXVpcmVzIHNvbWUgc2V0dXAgaW4gaW5kZXguaHRtbC5cbiAqL1xuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIERieEFuYWx5dGljc1NlZ21lbnRBcGlTZXJ2aWNlIGV4dGVuZHMgQWJzdHJhY3RBc3luY1dpbmRvd0xvYWRlZFNlcnZpY2U8U2VnbWVudEFuYWx5dGljcy5BbmFseXRpY3NKUz4ge1xuICBzdGF0aWMgcmVhZG9ubHkgU0VHTUVOVF9BUElfV0lORE9XX0tFWSA9ICdhbmFseXRpY3MnO1xuICBzdGF0aWMgcmVhZG9ubHkgU0VHTUVOVF9SRUFEWV9LRVkgPSAnU2VnbWVudFJlYWR5JztcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9jb25maWc6IERieEFuYWx5dGljc1NlZ21lbnRBcGlTZXJ2aWNlQ29uZmlnLCBASW5qZWN0KFBSRUxPQURfU0VHTUVOVF9UT0tFTikgcHJlbG9hZDogYm9vbGVhbiA9IHRydWUpIHtcbiAgICBzdXBlcihEYnhBbmFseXRpY3NTZWdtZW50QXBpU2VydmljZS5TRUdNRU5UX0FQSV9XSU5ET1dfS0VZLCB1bmRlZmluZWQsICdTZWdtZW50JywgcHJlbG9hZCk7XG4gIH1cblxuICBnZXQgY29uZmlnKCk6IERieEFuYWx5dGljc1NlZ21lbnRBcGlTZXJ2aWNlQ29uZmlnIHtcbiAgICByZXR1cm4gdGhpcy5fY29uZmlnO1xuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIF9wcmVwYXJlQ29tcGxldGVMb2FkaW5nU2VydmljZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gcG9sbCh7XG4gICAgICAvLyBwb2xsIHVudGlsIGFuYWx5dGljcy5pbnZva2VkIGlzIHRydWUuXG4gICAgICBjaGVjazogKCkgPT4gQm9vbGVhbigod2luZG93LmFuYWx5dGljcyBhcyBTZWdtZW50QW5hbHl0aWNzSW52b2tlZCkuaW52b2tlZCksXG4gICAgICB0aW1lc1RvR2l2ZXVwOiAxMDBcbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSBfaW5pdFNlcnZpY2Uoc2VydmljZTogU2VnbWVudEFuYWx5dGljcy5BbmFseXRpY3NKUyk6IFByb21pc2U8U2VnbWVudEFuYWx5dGljcy5BbmFseXRpY3NKUz4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBzZXJ2aWNlLmxvYWQodGhpcy5fY29uZmlnLndyaXRlS2V5KTsgLy8gSW5pdGlhbGl6ZSBTZWdtZW50XG5cbiAgICAgICAgLy8gV2FpdCBmb3IgdGhlIHNlcnZpY2UgdG8gcmVhZHkgaXRzZWxmLlxuICAgICAgICBzZXJ2aWNlLnJlYWR5KCgpID0+IHtcbiAgICAgICAgICAvLyBTZWdtZW50IGNoYW5nZXMgaXRzZWxmIG9yIHJhdGhlciB0aGUgdGFyZ2V0LCBhbmQgdGhlIHByZXZpb3VzIGluaXRpYWwgdGFyZ2V0IGlzIGlnbm9yZWQgYWZ0ZXIuXG4gICAgICAgICAgY29uc3Qgc2VnbWVudDogU2VnbWVudEFuYWx5dGljcy5BbmFseXRpY3NKUyA9IHdpbmRvd1tEYnhBbmFseXRpY3NTZWdtZW50QXBpU2VydmljZS5TRUdNRU5UX0FQSV9XSU5ET1dfS0VZXTtcbiAgICAgICAgICByZXNvbHZlKHNlZ21lbnQpO1xuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY29uc29sZS5sb2coJ0ZhaWxlZCB0byBpbml0IHNlZ21lbnQ6ICcgKyBlKTtcbiAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG4iXX0=
@@ -1,481 +0,0 @@
1
- import * as i0 from '@angular/core';
2
- import { Injectable, Optional, Inject, Directive, Host, Input, NgModule, InjectionToken } from '@angular/core';
3
- import { SubscriptionObject, filterMaybe } from '@dereekb/rxjs';
4
- import { BehaviorSubject, shareReplay, switchMap, Subject, of, first, tap, merge, combineLatest } from 'rxjs';
5
- import * as i1 from '@dereekb/dbx-core';
6
- import { AbstractSubscriptionDirective } from '@dereekb/dbx-core';
7
- import { AbstractAsyncWindowLoadedService } from '@dereekb/browser';
8
- import { poll } from '@dereekb/util';
9
-
10
- var DbxAnalyticsStreamEventType;
11
- (function (DbxAnalyticsStreamEventType) {
12
- DbxAnalyticsStreamEventType[DbxAnalyticsStreamEventType["PageView"] = 0] = "PageView";
13
- DbxAnalyticsStreamEventType[DbxAnalyticsStreamEventType["UserChange"] = 1] = "UserChange";
14
- // User Events
15
- DbxAnalyticsStreamEventType[DbxAnalyticsStreamEventType["NewUserEvent"] = 2] = "NewUserEvent";
16
- DbxAnalyticsStreamEventType[DbxAnalyticsStreamEventType["UserLoginEvent"] = 3] = "UserLoginEvent";
17
- DbxAnalyticsStreamEventType[DbxAnalyticsStreamEventType["UserLogoutEvent"] = 4] = "UserLogoutEvent";
18
- DbxAnalyticsStreamEventType[DbxAnalyticsStreamEventType["UserPropertiesEvent"] = 5] = "UserPropertiesEvent";
19
- // Events
20
- DbxAnalyticsStreamEventType[DbxAnalyticsStreamEventType["Event"] = 6] = "Event";
21
- })(DbxAnalyticsStreamEventType || (DbxAnalyticsStreamEventType = {}));
22
-
23
- class DbxAnalyticsEventEmitterService {
24
- }
25
- class DbxAnalyticsEventStreamService {
26
- }
27
- class DbxAnalyticsUserSource {
28
- }
29
- class DbxAnalyticsServiceListener {
30
- }
31
- /**
32
- * Abstract AnalyticsServiceListener implementation.
33
- */
34
- class AbstractDbxAnalyticsServiceListener {
35
- constructor() {
36
- this._sub = new SubscriptionObject();
37
- this._analytics = new BehaviorSubject(undefined);
38
- this.analytics$ = this._analytics.pipe(filterMaybe(), shareReplay(1));
39
- this.analyticsEvents$ = this.analytics$.pipe(switchMap((x) => x.events$), shareReplay(1));
40
- }
41
- // MARK: AnalyticsServiceListener
42
- listenToService(service) {
43
- this._analytics.next(service);
44
- const sub = this._initializeServiceSubscription();
45
- if (sub !== false) {
46
- this._sub.subscription = sub;
47
- }
48
- }
49
- // MARK: Destroy
50
- destroy() {
51
- this._analytics.complete();
52
- this._sub.destroy();
53
- }
54
- }
55
- class DbxAnalyticsServiceConfiguration {
56
- constructor() {
57
- this.listeners = [];
58
- }
59
- }
60
- class DbxAnalyticsStreamEventAnalyticsEventWrapper {
61
- constructor(event, type = DbxAnalyticsStreamEventType.Event) {
62
- this.event = event;
63
- this.type = type;
64
- }
65
- get user() {
66
- return this.event.user;
67
- }
68
- get userId() {
69
- return this.user ? this.user.user : undefined;
70
- }
71
- }
72
- /**
73
- * Primary analytics service that emits analytics events that components can listen to.
74
- */
75
- class DbxAnalyticsService {
76
- constructor(_config, userSource) {
77
- this._config = _config;
78
- this._subject = new Subject();
79
- this.events$ = this._subject.asObservable();
80
- this._userSource = new BehaviorSubject(undefined);
81
- this.user$ = this._userSource.pipe(switchMap((x) => (x ? x.analyticsUser$ : of(undefined))), shareReplay(1));
82
- this._userSourceSub = new SubscriptionObject();
83
- this._loggerSub = new SubscriptionObject();
84
- this._init();
85
- userSource = userSource || _config.userSource;
86
- if (userSource) {
87
- this.setUserSource(userSource);
88
- }
89
- }
90
- // MARK: Source
91
- /**
92
- * Sets the user directly.
93
- */
94
- setUser(user) {
95
- let source;
96
- if (user) {
97
- source = { analyticsUser$: of(user) };
98
- }
99
- this._userSource.next(source);
100
- }
101
- setUserSource(source) {
102
- this._userSource.next(source);
103
- }
104
- // MARK: AnalyticsEventEmitterService
105
- /**
106
- * Sends an event.
107
- */
108
- sendNewUserEvent(user, data) {
109
- this.sendNextEvent({
110
- name: DbxAnalyticsService.USER_REGISTRATION_EVENT_NAME,
111
- data
112
- }, DbxAnalyticsStreamEventType.NewUserEvent, user);
113
- }
114
- sendUserLoginEvent(user, data) {
115
- this.sendNextEvent({
116
- name: DbxAnalyticsService.USER_LOGIN_EVENT_NAME,
117
- data
118
- }, DbxAnalyticsStreamEventType.UserLoginEvent, user);
119
- }
120
- sendUserLogoutEvent(data, clearUser = true) {
121
- this.sendNextEvent({
122
- name: DbxAnalyticsService.USER_LOGOUT_EVENT_NAME,
123
- data
124
- }, DbxAnalyticsStreamEventType.UserLogoutEvent);
125
- if (clearUser) {
126
- this.setUser(undefined);
127
- }
128
- }
129
- sendUserPropertiesEvent(user, data) {
130
- this.sendNextEvent({
131
- name: DbxAnalyticsService.USER_PROPERTIES_EVENT_NAME,
132
- data
133
- }, DbxAnalyticsStreamEventType.UserPropertiesEvent, user);
134
- }
135
- sendEventData(name, data) {
136
- return this.sendEvent({
137
- name,
138
- data
139
- });
140
- }
141
- sendEventType(eventType) {
142
- this.sendNextEvent({
143
- name: eventType
144
- }, DbxAnalyticsStreamEventType.Event);
145
- }
146
- sendEvent(event) {
147
- this.sendNextEvent(event, DbxAnalyticsStreamEventType.Event);
148
- }
149
- sendPageView(page) {
150
- this.sendNextEvent({
151
- name: page
152
- }, DbxAnalyticsStreamEventType.PageView);
153
- }
154
- sendNextEvent(event = {}, type, userOverride) {
155
- this.user$.pipe(first()).subscribe((analyticsUser) => {
156
- const user = userOverride != null ? userOverride : analyticsUser;
157
- const analyticsEvent = Object.assign(Object.assign({}, event), { user });
158
- this.nextEvent(analyticsEvent, type);
159
- });
160
- }
161
- nextEvent(event, type) {
162
- const wrapper = new DbxAnalyticsStreamEventAnalyticsEventWrapper(event, type);
163
- this._subject.next(wrapper);
164
- }
165
- // MARK: Internal
166
- _init() {
167
- if (this._config.isProduction) {
168
- // Initialize listeners.
169
- this._config.listeners.forEach((listener) => {
170
- listener.listenToService(this);
171
- });
172
- }
173
- else {
174
- console.warn('AnalyticsService: Analytics not in production mode. All analytics events are ignored.');
175
- }
176
- if (this._config.logEvents || !this._config.isProduction) {
177
- console.log('AnalyticsService: Log analytics events enabled.');
178
- // Create a new subscription
179
- this._loggerSub.subscription = this._subject.subscribe((x) => {
180
- console.log(`AnalyticsService: Analytics Event - ${DbxAnalyticsStreamEventType[x.type]} | User: ${x.userId} | Data: ${JSON.stringify(x.event)}.`);
181
- });
182
- }
183
- this._userSourceSub.subscription = this.user$.subscribe(() => {
184
- this.sendNextEvent({}, DbxAnalyticsStreamEventType.UserChange);
185
- });
186
- }
187
- destroy() {
188
- this._subject.complete();
189
- this._userSourceSub.destroy();
190
- this._loggerSub.destroy();
191
- }
192
- }
193
- // TODO: Make these configurable.
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: "14.2.12", 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: "14.2.12", ngImport: i0, type: DbxAnalyticsService });
200
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: DbxAnalyticsService, decorators: [{
201
- type: Injectable
202
- }], ctorParameters: function () {
203
- return [{ type: DbxAnalyticsServiceConfiguration }, { type: undefined, decorators: [{
204
- type: Optional
205
- }, {
206
- type: Inject,
207
- args: [DbxAnalyticsUserSource]
208
- }] }];
209
- } });
210
-
211
- /**
212
- * Used to listen to an ActionContext and send analytical events based on action events.
213
- */
214
- class DbxActionAnalyticsDirective extends AbstractSubscriptionDirective {
215
- constructor(source, analyticsService) {
216
- super();
217
- this.source = source;
218
- this.analyticsService = analyticsService;
219
- this._config = new BehaviorSubject(undefined);
220
- this.config$ = this._config.pipe(filterMaybe(), shareReplay(1));
221
- }
222
- get config() {
223
- return this._config.value;
224
- }
225
- set config(config) {
226
- this._config.next(config);
227
- }
228
- ngOnInit() {
229
- this.sub = this.config$
230
- .pipe(switchMap(({ onTriggered, onReady, onSuccess, onError }) => {
231
- const triggerObs = [];
232
- if (onTriggered) {
233
- triggerObs.push(this.source.triggered$.pipe(tap(() => onTriggered(this.analyticsService))));
234
- }
235
- if (onReady) {
236
- triggerObs.push(this.source.valueReady$.pipe(tap((value) => onReady(this.analyticsService, value))));
237
- }
238
- if (onSuccess) {
239
- triggerObs.push(this.source.success$.pipe(tap((result) => onSuccess(this.analyticsService, result))));
240
- }
241
- if (onError) {
242
- triggerObs.push(this.source.error$.pipe(filterMaybe(), tap((error) => onError(this.analyticsService, error))));
243
- }
244
- if (triggerObs.length) {
245
- return merge(...triggerObs);
246
- }
247
- else {
248
- return of();
249
- }
250
- }))
251
- .subscribe();
252
- }
253
- ngOnDestroy() {
254
- this.source.lockSet.onNextUnlock(() => {
255
- super.ngOnDestroy();
256
- this._config.complete();
257
- });
258
- }
259
- }
260
- DbxActionAnalyticsDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: DbxActionAnalyticsDirective, deps: [{ token: i1.DbxActionContextStoreSourceInstance, host: true }, { token: DbxAnalyticsService }], target: i0.ɵɵFactoryTarget.Directive });
261
- DbxActionAnalyticsDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.2.12", type: DbxActionAnalyticsDirective, selector: "[dbxActionAnalytics]", inputs: { config: ["dbxActionAnalytics", "config"] }, usesInheritance: true, ngImport: i0 });
262
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: DbxActionAnalyticsDirective, decorators: [{
263
- type: Directive,
264
- args: [{
265
- selector: '[dbxActionAnalytics]'
266
- }]
267
- }], ctorParameters: function () {
268
- return [{ type: i1.DbxActionContextStoreSourceInstance, decorators: [{
269
- type: Host
270
- }] }, { type: DbxAnalyticsService }];
271
- }, propDecorators: { config: [{
272
- type: Input,
273
- args: ['dbxActionAnalytics']
274
- }] } });
275
-
276
- class DbxAnalyticsActionModule {
277
- }
278
- DbxAnalyticsActionModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: DbxAnalyticsActionModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
279
- DbxAnalyticsActionModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.2.12", ngImport: i0, type: DbxAnalyticsActionModule, declarations: [DbxActionAnalyticsDirective], exports: [DbxActionAnalyticsDirective] });
280
- DbxAnalyticsActionModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: DbxAnalyticsActionModule });
281
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: DbxAnalyticsActionModule, decorators: [{
282
- type: NgModule,
283
- args: [{
284
- declarations: [DbxActionAnalyticsDirective],
285
- exports: [DbxActionAnalyticsDirective]
286
- }]
287
- }] });
288
-
289
- class DbxAnalyticsModule {
290
- static forRoot(options) {
291
- return {
292
- ngModule: DbxAnalyticsModule,
293
- providers: [
294
- // Configuration
295
- options.analyticsConfigurationProvider,
296
- // Service
297
- DbxAnalyticsService
298
- ]
299
- };
300
- }
301
- }
302
- DbxAnalyticsModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: DbxAnalyticsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
303
- DbxAnalyticsModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.2.12", ngImport: i0, type: DbxAnalyticsModule });
304
- DbxAnalyticsModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: DbxAnalyticsModule });
305
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: DbxAnalyticsModule, decorators: [{
306
- type: NgModule
307
- }] });
308
-
309
- const PRELOAD_SEGMENT_TOKEN = new InjectionToken('DbxAnalyticsSegmentApiServicePreload');
310
- class DbxAnalyticsSegmentApiServiceConfig {
311
- constructor(writeKey) {
312
- this.writeKey = writeKey;
313
- this.logging = true;
314
- this.active = true;
315
- }
316
- }
317
- /**
318
- * Segment API Service used for waiting/retrieving the segment API from window when initialized.
319
- *
320
- * This requires some setup in index.html.
321
- */
322
- class DbxAnalyticsSegmentApiService extends AbstractAsyncWindowLoadedService {
323
- constructor(_config, preload = true) {
324
- super(DbxAnalyticsSegmentApiService.SEGMENT_API_WINDOW_KEY, undefined, 'Segment', preload);
325
- this._config = _config;
326
- }
327
- get config() {
328
- return this._config;
329
- }
330
- _prepareCompleteLoadingService() {
331
- return poll({
332
- // poll until analytics.invoked is true.
333
- check: () => Boolean(window.analytics.invoked),
334
- timesToGiveup: 100
335
- });
336
- }
337
- _initService(service) {
338
- return new Promise((resolve, reject) => {
339
- try {
340
- service.load(this._config.writeKey); // Initialize Segment
341
- // Wait for the service to ready itself.
342
- service.ready(() => {
343
- // Segment changes itself or rather the target, and the previous initial target is ignored after.
344
- const segment = window[DbxAnalyticsSegmentApiService.SEGMENT_API_WINDOW_KEY];
345
- resolve(segment);
346
- });
347
- }
348
- catch (e) {
349
- console.log('Failed to init segment: ' + e);
350
- reject(e);
351
- }
352
- });
353
- }
354
- }
355
- DbxAnalyticsSegmentApiService.SEGMENT_API_WINDOW_KEY = 'analytics';
356
- DbxAnalyticsSegmentApiService.SEGMENT_READY_KEY = 'SegmentReady';
357
- DbxAnalyticsSegmentApiService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: DbxAnalyticsSegmentApiService, deps: [{ token: DbxAnalyticsSegmentApiServiceConfig }, { token: PRELOAD_SEGMENT_TOKEN }], target: i0.ɵɵFactoryTarget.Injectable });
358
- DbxAnalyticsSegmentApiService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: DbxAnalyticsSegmentApiService });
359
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: DbxAnalyticsSegmentApiService, decorators: [{
360
- type: Injectable
361
- }], ctorParameters: function () {
362
- return [{ type: DbxAnalyticsSegmentApiServiceConfig }, { type: undefined, decorators: [{
363
- type: Inject,
364
- args: [PRELOAD_SEGMENT_TOKEN]
365
- }] }];
366
- } });
367
-
368
- /**
369
- * DbxAnalyticsServiceListener adapter for Segment.
370
- */
371
- class DbxAnalyticsSegmentServiceListener extends AbstractDbxAnalyticsServiceListener {
372
- constructor(_segmentApi) {
373
- super();
374
- this._segmentApi = _segmentApi;
375
- if (this._segmentApi.config.logging) {
376
- console.log('SegmentAnalyticsListenerService: Segment is logging events.');
377
- }
378
- if (!this._segmentApi.config.active) {
379
- console.log('SegmentAnalyticsListenerService: Segment is disabled from sending events to the server.');
380
- }
381
- }
382
- _initializeServiceSubscription() {
383
- return combineLatest([this._segmentApi.service$, this.analyticsEvents$]).subscribe(([segment, streamEvent]) => {
384
- if (this._segmentApi.config.logging) {
385
- console.log('Segment Listener Logging Event: ', streamEvent);
386
- }
387
- if (this._segmentApi.config.active) {
388
- this.handleStreamEvent(segment, streamEvent);
389
- }
390
- });
391
- }
392
- handleStreamEvent(api, streamEvent) {
393
- switch (streamEvent.type) {
394
- case DbxAnalyticsStreamEventType.NewUserEvent:
395
- this.updateWithNewUserEvent(api, streamEvent);
396
- break;
397
- case DbxAnalyticsStreamEventType.UserLoginEvent:
398
- case DbxAnalyticsStreamEventType.Event:
399
- this.updateWithEvent(api, streamEvent);
400
- break;
401
- case DbxAnalyticsStreamEventType.UserLogoutEvent:
402
- this.changeUser(api, undefined);
403
- break;
404
- case DbxAnalyticsStreamEventType.PageView:
405
- api.page();
406
- break;
407
- case DbxAnalyticsStreamEventType.UserChange:
408
- this.changeUser(api, streamEvent.user);
409
- break;
410
- }
411
- }
412
- updateWithNewUserEvent(api, streamEvent) {
413
- this.changeUser(api, streamEvent.user);
414
- }
415
- updateWithEvent(api, streamEvent, name) {
416
- const event = streamEvent.event;
417
- const eventName = name || (event === null || event === void 0 ? void 0 : event.name);
418
- if (eventName) {
419
- const value = event === null || event === void 0 ? void 0 : event.value;
420
- const data = event === null || event === void 0 ? void 0 : event.data;
421
- api.track(eventName, Object.assign(Object.assign({}, (value != null
422
- ? {
423
- value
424
- }
425
- : undefined)), data), {}, () => {
426
- if (this._segmentApi.config.logging) {
427
- console.log('Segment track success.');
428
- }
429
- });
430
- }
431
- }
432
- changeUser(api, user) {
433
- if (user) {
434
- api.identify(user.user, Object.assign({}, user.properties), {}, () => {
435
- if (this._segmentApi.config.logging) {
436
- console.log('Segment identify success.');
437
- }
438
- });
439
- }
440
- else {
441
- api.reset();
442
- }
443
- }
444
- }
445
- DbxAnalyticsSegmentServiceListener.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: DbxAnalyticsSegmentServiceListener, deps: [{ token: DbxAnalyticsSegmentApiService }], target: i0.ɵɵFactoryTarget.Injectable });
446
- DbxAnalyticsSegmentServiceListener.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: DbxAnalyticsSegmentServiceListener });
447
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: DbxAnalyticsSegmentServiceListener, decorators: [{
448
- type: Injectable
449
- }], ctorParameters: function () { return [{ type: DbxAnalyticsSegmentApiService }]; } });
450
-
451
- class DbxAnalyticsSegmentModule {
452
- static forRoot(preloadService) {
453
- return {
454
- ngModule: DbxAnalyticsSegmentModule,
455
- providers: [
456
- {
457
- provide: PRELOAD_SEGMENT_TOKEN,
458
- useValue: preloadService
459
- },
460
- DbxAnalyticsSegmentApiService
461
- ]
462
- };
463
- }
464
- }
465
- DbxAnalyticsSegmentModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: DbxAnalyticsSegmentModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
466
- DbxAnalyticsSegmentModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.2.12", ngImport: i0, type: DbxAnalyticsSegmentModule });
467
- DbxAnalyticsSegmentModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: DbxAnalyticsSegmentModule });
468
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: DbxAnalyticsSegmentModule, decorators: [{
469
- type: NgModule,
470
- args: [{
471
- declarations: [],
472
- imports: []
473
- }]
474
- }] });
475
-
476
- /**
477
- * Generated bundle index. Do not edit.
478
- */
479
-
480
- export { AbstractDbxAnalyticsServiceListener, DbxActionAnalyticsDirective, DbxAnalyticsActionModule, DbxAnalyticsEventEmitterService, DbxAnalyticsEventStreamService, DbxAnalyticsModule, DbxAnalyticsSegmentApiService, DbxAnalyticsSegmentApiServiceConfig, DbxAnalyticsSegmentModule, DbxAnalyticsSegmentServiceListener, DbxAnalyticsService, DbxAnalyticsServiceConfiguration, DbxAnalyticsServiceListener, DbxAnalyticsStreamEventAnalyticsEventWrapper, DbxAnalyticsStreamEventType, DbxAnalyticsUserSource, PRELOAD_SEGMENT_TOKEN };
481
- //# sourceMappingURL=dereekb-dbx-analytics.mjs.map
@@ -1 +0,0 @@
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 UserChange,\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 } 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 } 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 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 _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.\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 {\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 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 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","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 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) {\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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"}
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes