@dereekb/dbx-analytics 0.0.1 → 1.2.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 +4 -5
- package/esm2020/lib/action/analytics.action.directive.mjs +15 -15
- package/esm2020/lib/action/analytics.action.module.mjs +9 -9
- package/esm2020/lib/analytics/analytics.mjs +2 -0
- package/esm2020/lib/analytics/analytics.module.mjs +23 -0
- package/esm2020/lib/analytics/analytics.service.mjs +190 -0
- package/esm2020/lib/analytics/analytics.stream.mjs +13 -0
- package/esm2020/lib/analytics/index.mjs +5 -0
- package/esm2020/lib/index.mjs +2 -4
- package/esm2020/lib/providers/index.mjs +2 -0
- package/esm2020/lib/providers/segment/index.mjs +4 -0
- package/esm2020/lib/providers/segment/segment.listener.service.mjs +92 -0
- package/esm2020/lib/providers/segment/segment.module.mjs +28 -0
- package/esm2020/lib/providers/segment/segment.service.mjs +61 -0
- package/fesm2015/dereekb-dbx-analytics.mjs +236 -58
- package/fesm2015/dereekb-dbx-analytics.mjs.map +1 -1
- package/fesm2020/dereekb-dbx-analytics.mjs +239 -58
- package/fesm2020/dereekb-dbx-analytics.mjs.map +1 -1
- package/lib/action/analytics.action.directive.d.ts +15 -15
- package/lib/action/analytics.action.module.d.ts +4 -4
- package/lib/{analytics.d.ts → analytics/analytics.d.ts} +0 -0
- package/lib/analytics/analytics.module.d.ts +14 -0
- package/lib/{analytics.service.d.ts → analytics/analytics.service.d.ts} +25 -21
- package/lib/{analytics.stream.d.ts → analytics/analytics.stream.d.ts} +0 -0
- package/lib/analytics/index.d.ts +4 -0
- package/lib/index.d.ts +1 -3
- package/lib/providers/index.d.ts +1 -0
- package/lib/providers/segment/index.d.ts +3 -0
- package/lib/providers/segment/segment.listener.service.d.ts +18 -0
- package/lib/providers/segment/segment.module.d.ts +8 -0
- package/lib/providers/segment/segment.service.d.ts +27 -0
- package/package.json +15 -14
- package/esm2020/lib/analytics.mjs +0 -2
- package/esm2020/lib/analytics.module.mjs +0 -23
- package/esm2020/lib/analytics.service.mjs +0 -179
- package/esm2020/lib/analytics.stream.mjs +0 -13
- package/lib/analytics.module.d.ts +0 -14
|
@@ -1,10 +1,9 @@
|
|
|
1
|
-
import { Observable } from 'rxjs';
|
|
2
|
-
import { SubscriptionObject } from '@dereekb/rxjs';
|
|
1
|
+
import { Observable, BehaviorSubject, Subscription } from 'rxjs';
|
|
3
2
|
import { AnalyticsEvent, AnalyticsEventData, AnalyticsEventName, AnalyticsUser, NewUserAnalyticsEventData, UserAnalyticsEvent } from './analytics';
|
|
4
3
|
import { AnalyticsStreamEvent, AnalyticsStreamEventType } from './analytics.stream';
|
|
5
4
|
import { Maybe, Destroyable } from '@dereekb/util';
|
|
6
5
|
import * as i0 from "@angular/core";
|
|
7
|
-
export declare abstract class
|
|
6
|
+
export declare abstract class AnalyticsEventEmitterService {
|
|
8
7
|
abstract sendNewUserEvent(user: AnalyticsUser, data: NewUserAnalyticsEventData): void;
|
|
9
8
|
abstract sendUserLoginEvent(user: AnalyticsUser, data?: AnalyticsEventData): void;
|
|
10
9
|
abstract sendUserLogoutEvent(data?: AnalyticsEventData): void;
|
|
@@ -13,27 +12,32 @@ export declare abstract class DbNgxAnalyticsEventEmitterService {
|
|
|
13
12
|
abstract sendEvent(event: AnalyticsEvent): void;
|
|
14
13
|
abstract sendPageView(page?: string): void;
|
|
15
14
|
}
|
|
16
|
-
export declare abstract class
|
|
15
|
+
export declare abstract class AnalyticsEventStreamService {
|
|
17
16
|
abstract readonly events$: Observable<AnalyticsStreamEvent>;
|
|
18
17
|
}
|
|
19
|
-
export declare abstract class
|
|
18
|
+
export declare abstract class AnalyticsUserSource {
|
|
20
19
|
abstract readonly analyticsUser$: Observable<Maybe<AnalyticsUser>>;
|
|
21
20
|
}
|
|
22
|
-
export declare abstract class
|
|
23
|
-
abstract listenToService(service:
|
|
21
|
+
export declare abstract class AnalyticsServiceListener {
|
|
22
|
+
abstract listenToService(service: AnalyticsService): void;
|
|
24
23
|
}
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
protected
|
|
24
|
+
/**
|
|
25
|
+
* Abstract AnalyticsServiceListener implementation.
|
|
26
|
+
*/
|
|
27
|
+
export declare abstract class AbstractAnalyticsServiceListener implements AnalyticsServiceListener, Destroyable {
|
|
28
|
+
private _sub;
|
|
29
|
+
protected _analytics: BehaviorSubject<Maybe<AnalyticsService>>;
|
|
30
|
+
readonly analytics$: Observable<AnalyticsService>;
|
|
31
|
+
readonly analyticsEvents$: Observable<AnalyticsStreamEvent>;
|
|
32
|
+
listenToService(service: AnalyticsService): void;
|
|
33
|
+
protected abstract _initializeServiceSubscription(): Subscription | false;
|
|
34
|
+
destroy(): void;
|
|
31
35
|
}
|
|
32
|
-
export declare abstract class
|
|
33
|
-
listeners:
|
|
36
|
+
export declare abstract class AnalyticsServiceConfiguration {
|
|
37
|
+
listeners: AnalyticsServiceListener[];
|
|
34
38
|
isProduction?: boolean;
|
|
35
39
|
logEvents?: boolean;
|
|
36
|
-
userSource?:
|
|
40
|
+
userSource?: AnalyticsUserSource;
|
|
37
41
|
}
|
|
38
42
|
export declare class AnalyticsStreamEventAnalyticsEventWrapper implements AnalyticsStreamEvent {
|
|
39
43
|
readonly event: UserAnalyticsEvent;
|
|
@@ -45,7 +49,7 @@ export declare class AnalyticsStreamEventAnalyticsEventWrapper implements Analyt
|
|
|
45
49
|
/**
|
|
46
50
|
* Primary analytics service that emits analytics events that components can listen to.
|
|
47
51
|
*/
|
|
48
|
-
export declare class
|
|
52
|
+
export declare class AnalyticsService implements AnalyticsEventStreamService, AnalyticsEventEmitterService, Destroyable {
|
|
49
53
|
private _config;
|
|
50
54
|
static readonly USER_REGISTRATION_EVENT_NAME = "User Registered";
|
|
51
55
|
static readonly USER_LOGIN_EVENT_NAME = "User Login";
|
|
@@ -57,12 +61,12 @@ export declare class DbNgxAnalyticsService implements DbNgxAnalyticsEventStreamS
|
|
|
57
61
|
readonly user$: Observable<Maybe<AnalyticsUser>>;
|
|
58
62
|
private _userSourceSub;
|
|
59
63
|
private _loggerSub;
|
|
60
|
-
constructor(_config:
|
|
64
|
+
constructor(_config: AnalyticsServiceConfiguration, userSource?: Maybe<AnalyticsUserSource>);
|
|
61
65
|
/**
|
|
62
66
|
* Sets the user directly.
|
|
63
67
|
*/
|
|
64
68
|
setUser(user: Maybe<AnalyticsUser>): void;
|
|
65
|
-
setUserSource(source:
|
|
69
|
+
setUserSource(source: AnalyticsUserSource): void;
|
|
66
70
|
/**
|
|
67
71
|
* Sends an event.
|
|
68
72
|
*/
|
|
@@ -78,6 +82,6 @@ export declare class DbNgxAnalyticsService implements DbNgxAnalyticsEventStreamS
|
|
|
78
82
|
protected nextEvent(event: UserAnalyticsEvent, type: AnalyticsStreamEventType): void;
|
|
79
83
|
private _init;
|
|
80
84
|
destroy(): void;
|
|
81
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<
|
|
82
|
-
static ɵprov: i0.ɵɵInjectableDeclaration<
|
|
85
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<AnalyticsService, [null, { optional: true; }]>;
|
|
86
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<AnalyticsService>;
|
|
83
87
|
}
|
|
File without changes
|
package/lib/index.d.ts
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './segment';
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/// <reference types="segment-analytics" />
|
|
2
|
+
import { AbstractAnalyticsServiceListener, AnalyticsStreamEvent } from '../../analytics';
|
|
3
|
+
import { SegmentApiService } from './segment.service';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
/**
|
|
6
|
+
* AnalyticsServiceListener adapter for Segment.
|
|
7
|
+
*/
|
|
8
|
+
export declare class SegmentAnalyticsListenerService extends AbstractAnalyticsServiceListener {
|
|
9
|
+
private _segmentApi;
|
|
10
|
+
constructor(_segmentApi: SegmentApiService);
|
|
11
|
+
protected _initializeServiceSubscription(): import("rxjs").Subscription;
|
|
12
|
+
protected handleStreamEvent(api: SegmentAnalytics.AnalyticsJS, streamEvent: AnalyticsStreamEvent): void;
|
|
13
|
+
protected updateWithNewUserEvent(api: SegmentAnalytics.AnalyticsJS, streamEvent: AnalyticsStreamEvent): void;
|
|
14
|
+
protected updateWithEvent(api: SegmentAnalytics.AnalyticsJS, streamEvent: AnalyticsStreamEvent, name?: string): void;
|
|
15
|
+
private changeUser;
|
|
16
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<SegmentAnalyticsListenerService, never>;
|
|
17
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<SegmentAnalyticsListenerService>;
|
|
18
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { ModuleWithProviders } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export declare class SegmentModule {
|
|
4
|
+
static forRoot(preloadService?: boolean): ModuleWithProviders<SegmentModule>;
|
|
5
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<SegmentModule, never>;
|
|
6
|
+
static ɵmod: i0.ɵɵNgModuleDeclaration<SegmentModule, never, never, never>;
|
|
7
|
+
static ɵinj: i0.ɵɵInjectorDeclaration<SegmentModule>;
|
|
8
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/// <reference types="segment-analytics" />
|
|
2
|
+
import { InjectionToken } from '@angular/core';
|
|
3
|
+
import { AbstractAsyncWindowLoadedService } from '@dereekb/browser';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
export declare const PRELOAD_SEGMENT_TOKEN: InjectionToken<string>;
|
|
6
|
+
export declare class SegmentApiServiceConfig {
|
|
7
|
+
writeKey: string;
|
|
8
|
+
logging: boolean;
|
|
9
|
+
active: boolean;
|
|
10
|
+
constructor(writeKey: string);
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Segment API Service used for waiting/retrieving the segment API from window when initialized.
|
|
14
|
+
*
|
|
15
|
+
* This requires some setup in index.html.
|
|
16
|
+
*/
|
|
17
|
+
export declare class SegmentApiService extends AbstractAsyncWindowLoadedService<SegmentAnalytics.AnalyticsJS> {
|
|
18
|
+
private _config;
|
|
19
|
+
static readonly SEGMENT_API_WINDOW_KEY = "analytics";
|
|
20
|
+
static readonly SEGMENT_READY_KEY = "SegmentReady";
|
|
21
|
+
constructor(_config: SegmentApiServiceConfig, preload?: boolean);
|
|
22
|
+
get config(): SegmentApiServiceConfig;
|
|
23
|
+
protected _prepareCompleteLoadingService(): Promise<void>;
|
|
24
|
+
protected _initService(service: SegmentAnalytics.AnalyticsJS): Promise<SegmentAnalytics.AnalyticsJS>;
|
|
25
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<SegmentApiService, never>;
|
|
26
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<SegmentApiService>;
|
|
27
|
+
}
|
package/package.json
CHANGED
|
@@ -1,30 +1,31 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dereekb/dbx-analytics",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "1.2.0",
|
|
4
4
|
"peerDependencies": {
|
|
5
5
|
"@angular/common": "^13.1.0",
|
|
6
6
|
"@angular/core": "^13.1.0",
|
|
7
|
-
"@dereekb/rxjs": "
|
|
7
|
+
"@dereekb/rxjs": "1.2.0",
|
|
8
8
|
"rxjs": "^7.5.2",
|
|
9
|
-
"@dereekb/util": "
|
|
9
|
+
"@dereekb/util": "1.2.0",
|
|
10
10
|
"extra-set": "^2.2.11",
|
|
11
11
|
"ms": "^3.0.0-canary.1",
|
|
12
|
-
"@dereekb/dbx-core": "
|
|
12
|
+
"@dereekb/dbx-core": "1.2.0",
|
|
13
13
|
"@ngrx/component-store": "^13.0.2",
|
|
14
14
|
"@ngrx/data": "^13.0.2",
|
|
15
15
|
"@ngrx/effects": "^13.0.2",
|
|
16
16
|
"@ngrx/entity": "^13.0.2",
|
|
17
17
|
"@ngrx/store": "^13.0.2",
|
|
18
|
-
"@angular/platform-browser": "13.
|
|
19
|
-
"date-fns": "2.28.0",
|
|
20
|
-
"@dereekb/date": "
|
|
21
|
-
"
|
|
22
|
-
"class-
|
|
23
|
-
"
|
|
24
|
-
"
|
|
25
|
-
"
|
|
26
|
-
"@
|
|
27
|
-
"@uirouter/
|
|
18
|
+
"@angular/platform-browser": "^13.0.0",
|
|
19
|
+
"date-fns": "^2.28.0",
|
|
20
|
+
"@dereekb/date": "1.2.0",
|
|
21
|
+
"class-transformer": "^0.5.1",
|
|
22
|
+
"class-validator": "^0.13.2",
|
|
23
|
+
"date-fns-tz": "^1.2.2",
|
|
24
|
+
"rrule": "git+https://git@github.com/dereekb/rrule.git#17adf5708d6567b4d01a3a8afd106261421ea492",
|
|
25
|
+
"@angular/router": "^13.0.0",
|
|
26
|
+
"@uirouter/core": "^6.0.8",
|
|
27
|
+
"@uirouter/angular": "^9.1.0",
|
|
28
|
+
"@dereekb/browser": "1.2.0"
|
|
28
29
|
},
|
|
29
30
|
"dependencies": {
|
|
30
31
|
"tslib": "^2.3.0"
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5hbHl0aWNzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZGJ4LWFuYWx5dGljcy9zcmMvbGliL2FuYWx5dGljcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTWF5YmUsIFByaW1hdGl2ZUtleSB9IGZyb20gXCJAZGVyZWVrYi91dGlsXCI7XG5cbmV4cG9ydCB0eXBlIEFuYWx5dGljc0V2ZW50TmFtZSA9IHN0cmluZztcbmV4cG9ydCB0eXBlIEFuYWx5dGljc1VzZXJJZCA9IHN0cmluZztcblxuZXhwb3J0IGludGVyZmFjZSBBbmFseXRpY3NVc2VyIHtcbiAgcmVhZG9ubHkgdXNlcjogQW5hbHl0aWNzVXNlcklkO1xuICByZWFkb25seSBwcm9wZXJ0aWVzPzoge1xuICAgIHJlYWRvbmx5IFtrZXk6IHN0cmluZ106IFByaW1hdGl2ZUtleSB8IGJvb2xlYW47XG4gIH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQW5hbHl0aWNzRXZlbnREYXRhIHtcbiAgcmVhZG9ubHkgW2tleTogc3RyaW5nXTogUHJpbWF0aXZlS2V5IHwgYm9vbGVhbjtcbn1cblxuZXhwb3J0IHR5cGUgTmV3VXNlclJlZ2lzdHJhdGlvbk1ldGhvZCA9ICdmYWNlYm9vaycgfCAnZ29vZ2xlJyB8ICdlbWFpbCcgfCBzdHJpbmc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmV3VXNlckFuYWx5dGljc0V2ZW50RGF0YSBleHRlbmRzIEFuYWx5dGljc0V2ZW50RGF0YSB7XG4gIG1ldGhvZDogTmV3VXNlclJlZ2lzdHJhdGlvbk1ldGhvZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBbmFseXRpY3NFdmVudCB7XG4gIHJlYWRvbmx5IG5hbWU/OiBBbmFseXRpY3NFdmVudE5hbWU7XG4gIHJlYWRvbmx5IHZhbHVlPzogbnVtYmVyO1xuICByZWFkb25seSBkYXRhPzogQW5hbHl0aWNzRXZlbnREYXRhO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJBbmFseXRpY3NFdmVudCBleHRlbmRzIEFuYWx5dGljc0V2ZW50IHtcbiAgcmVhZG9ubHkgdXNlcj86IE1heWJlPEFuYWx5dGljc1VzZXI+O1xufVxuIl19
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import { NgModule } from '@angular/core';
|
|
2
|
-
import { DbNgxAnalyticsService } from './analytics.service';
|
|
3
|
-
import * as i0 from "@angular/core";
|
|
4
|
-
export class DbNgxAnalyticsModule {
|
|
5
|
-
static forRoot(options) {
|
|
6
|
-
return {
|
|
7
|
-
ngModule: DbNgxAnalyticsModule,
|
|
8
|
-
providers: [
|
|
9
|
-
// Configuration
|
|
10
|
-
options.analyticsConfigurationProvider,
|
|
11
|
-
// Service
|
|
12
|
-
DbNgxAnalyticsService
|
|
13
|
-
]
|
|
14
|
-
};
|
|
15
|
-
}
|
|
16
|
-
}
|
|
17
|
-
DbNgxAnalyticsModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.0", ngImport: i0, type: DbNgxAnalyticsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
18
|
-
DbNgxAnalyticsModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.2.0", ngImport: i0, type: DbNgxAnalyticsModule });
|
|
19
|
-
DbNgxAnalyticsModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.2.0", ngImport: i0, type: DbNgxAnalyticsModule });
|
|
20
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.0", ngImport: i0, type: DbNgxAnalyticsModule, decorators: [{
|
|
21
|
-
type: NgModule
|
|
22
|
-
}] });
|
|
23
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5hbHl0aWNzLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2RieC1hbmFseXRpY3Mvc3JjL2xpYi9hbmFseXRpY3MubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQWlDLE1BQU0sZUFBZSxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDOztBQWE1RCxNQUFNLE9BQU8sb0JBQW9CO0lBRS9CLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBb0M7UUFDakQsT0FBTztZQUNMLFFBQVEsRUFBRSxvQkFBb0I7WUFDOUIsU0FBUyxFQUFFO2dCQUNULGdCQUFnQjtnQkFDaEIsT0FBTyxDQUFDLDhCQUE4QjtnQkFDdEMsVUFBVTtnQkFDVixxQkFBcUI7YUFDdEI7U0FDRixDQUFDO0lBQ0osQ0FBQzs7aUhBWlUsb0JBQW9CO2tIQUFwQixvQkFBb0I7a0hBQXBCLG9CQUFvQjsyRkFBcEIsb0JBQW9CO2tCQURoQyxRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdNb2R1bGUsIE1vZHVsZVdpdGhQcm92aWRlcnMsIFByb3ZpZGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEYk5neEFuYWx5dGljc1NlcnZpY2UgfSBmcm9tICcuL2FuYWx5dGljcy5zZXJ2aWNlJztcblxuXG5leHBvcnQgaW50ZXJmYWNlIERiTmd4QW5hbHl0aWNzTW9kdWxlT3B0aW9ucyB7XG5cbiAgLyoqXG4gICAqIFByb3ZpZGVzIGEgQW5hbHl0aWNzU2VydmljZUNvbmZpZ3VyYXRpb24gdmFsdWUuXG4gICAqL1xuICBhbmFseXRpY3NDb25maWd1cmF0aW9uUHJvdmlkZXI6IFByb3ZpZGVyO1xuXG59XG5cbkBOZ01vZHVsZSgpXG5leHBvcnQgY2xhc3MgRGJOZ3hBbmFseXRpY3NNb2R1bGUge1xuXG4gIHN0YXRpYyBmb3JSb290KG9wdGlvbnM6IERiTmd4QW5hbHl0aWNzTW9kdWxlT3B0aW9ucyk6IE1vZHVsZVdpdGhQcm92aWRlcnM8RGJOZ3hBbmFseXRpY3NNb2R1bGU+IHtcbiAgICByZXR1cm4ge1xuICAgICAgbmdNb2R1bGU6IERiTmd4QW5hbHl0aWNzTW9kdWxlLFxuICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIC8vIENvbmZpZ3VyYXRpb25cbiAgICAgICAgb3B0aW9ucy5hbmFseXRpY3NDb25maWd1cmF0aW9uUHJvdmlkZXIsXG4gICAgICAgIC8vIFNlcnZpY2VcbiAgICAgICAgRGJOZ3hBbmFseXRpY3NTZXJ2aWNlXG4gICAgICBdXG4gICAgfTtcbiAgfVxuXG59XG4iXX0=
|
|
@@ -1,179 +0,0 @@
|
|
|
1
|
-
import { Subject, BehaviorSubject, of } from 'rxjs';
|
|
2
|
-
import { filter, first, shareReplay, switchMap } from 'rxjs/operators';
|
|
3
|
-
import { Inject, Injectable, Optional } from '@angular/core';
|
|
4
|
-
import { SubscriptionObject } from '@dereekb/rxjs';
|
|
5
|
-
import { AnalyticsStreamEventType } from './analytics.stream';
|
|
6
|
-
import * as i0 from "@angular/core";
|
|
7
|
-
export class DbNgxAnalyticsEventEmitterService {
|
|
8
|
-
}
|
|
9
|
-
export class DbNgxAnalyticsEventStreamService {
|
|
10
|
-
}
|
|
11
|
-
export class DbNgxAnalyticsUserSource {
|
|
12
|
-
}
|
|
13
|
-
export class DbNgxAnalyticsServiceListener {
|
|
14
|
-
}
|
|
15
|
-
export class AbstractAnalyticsServiceListener {
|
|
16
|
-
constructor() {
|
|
17
|
-
this._sub = new SubscriptionObject();
|
|
18
|
-
}
|
|
19
|
-
listenToService(service) {
|
|
20
|
-
this._service = service;
|
|
21
|
-
this._sub.subscription = service.events$.pipe(filter((e) => this.filterEvent(e)))
|
|
22
|
-
.subscribe((event) => this.updateOnStreamEvent(event));
|
|
23
|
-
}
|
|
24
|
-
filterEvent(streamEvent) {
|
|
25
|
-
return true;
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
export class DbNgxAnalyticsServiceConfiguration {
|
|
29
|
-
constructor() {
|
|
30
|
-
this.listeners = [];
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
export class AnalyticsStreamEventAnalyticsEventWrapper {
|
|
34
|
-
constructor(event, type = AnalyticsStreamEventType.Event) {
|
|
35
|
-
this.event = event;
|
|
36
|
-
this.type = type;
|
|
37
|
-
}
|
|
38
|
-
get user() {
|
|
39
|
-
return this.event.user;
|
|
40
|
-
}
|
|
41
|
-
get userId() {
|
|
42
|
-
return (this.user) ? this.user.user : undefined;
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
/**
|
|
46
|
-
* Primary analytics service that emits analytics events that components can listen to.
|
|
47
|
-
*/
|
|
48
|
-
export class DbNgxAnalyticsService {
|
|
49
|
-
constructor(_config, userSource = _config.userSource) {
|
|
50
|
-
this._config = _config;
|
|
51
|
-
this._subject = new Subject();
|
|
52
|
-
this.events$ = this._subject.asObservable();
|
|
53
|
-
this._userSource = new BehaviorSubject(undefined);
|
|
54
|
-
this.user$ = this._userSource.pipe(switchMap(x => (x) ? x.analyticsUser$ : of(undefined)), shareReplay(1));
|
|
55
|
-
this._userSourceSub = new SubscriptionObject();
|
|
56
|
-
this._loggerSub = new SubscriptionObject();
|
|
57
|
-
this._init();
|
|
58
|
-
if (userSource) {
|
|
59
|
-
this.setUserSource(userSource);
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
// MARK: Source
|
|
63
|
-
/**
|
|
64
|
-
* Sets the user directly.
|
|
65
|
-
*/
|
|
66
|
-
setUser(user) {
|
|
67
|
-
let source;
|
|
68
|
-
if (user) {
|
|
69
|
-
source = { analyticsUser$: of(user) };
|
|
70
|
-
}
|
|
71
|
-
this._userSource.next(source);
|
|
72
|
-
}
|
|
73
|
-
setUserSource(source) {
|
|
74
|
-
this._userSource.next(source);
|
|
75
|
-
}
|
|
76
|
-
// MARK: DbNgxAnalyticsEventEmitterService
|
|
77
|
-
/**
|
|
78
|
-
* Sends an event.
|
|
79
|
-
*/
|
|
80
|
-
sendNewUserEvent(user, data) {
|
|
81
|
-
this.sendNextEvent({
|
|
82
|
-
name: DbNgxAnalyticsService.USER_REGISTRATION_EVENT_NAME,
|
|
83
|
-
data
|
|
84
|
-
}, AnalyticsStreamEventType.NewUserEvent, user);
|
|
85
|
-
}
|
|
86
|
-
sendUserLoginEvent(user, data) {
|
|
87
|
-
this.sendNextEvent({
|
|
88
|
-
name: DbNgxAnalyticsService.USER_LOGIN_EVENT_NAME,
|
|
89
|
-
data
|
|
90
|
-
}, AnalyticsStreamEventType.UserLoginEvent, user);
|
|
91
|
-
}
|
|
92
|
-
sendUserLogoutEvent(data, clearUser = true) {
|
|
93
|
-
this.sendNextEvent({
|
|
94
|
-
name: DbNgxAnalyticsService.USER_LOGOUT_EVENT_NAME,
|
|
95
|
-
data
|
|
96
|
-
}, AnalyticsStreamEventType.UserLogoutEvent);
|
|
97
|
-
if (clearUser) {
|
|
98
|
-
this.setUser(undefined);
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
sendUserPropertiesEvent(user, data) {
|
|
102
|
-
this.sendNextEvent({
|
|
103
|
-
name: DbNgxAnalyticsService.USER_PROPERTIES_EVENT_NAME,
|
|
104
|
-
data
|
|
105
|
-
}, AnalyticsStreamEventType.UserPropertiesEvent, user);
|
|
106
|
-
}
|
|
107
|
-
sendEventData(name, data) {
|
|
108
|
-
return this.sendEvent({
|
|
109
|
-
name,
|
|
110
|
-
data
|
|
111
|
-
});
|
|
112
|
-
}
|
|
113
|
-
sendEventType(eventType) {
|
|
114
|
-
this.sendNextEvent({
|
|
115
|
-
name: eventType
|
|
116
|
-
}, AnalyticsStreamEventType.Event);
|
|
117
|
-
}
|
|
118
|
-
sendEvent(event) {
|
|
119
|
-
this.sendNextEvent(event, AnalyticsStreamEventType.Event);
|
|
120
|
-
}
|
|
121
|
-
sendPageView(page) {
|
|
122
|
-
this.sendNextEvent({
|
|
123
|
-
name: page
|
|
124
|
-
}, AnalyticsStreamEventType.PageView);
|
|
125
|
-
}
|
|
126
|
-
sendNextEvent(event = {}, type, userOverride) {
|
|
127
|
-
this.user$.pipe(first()).subscribe((analyticsUser) => {
|
|
128
|
-
const user = (userOverride != null) ? userOverride : analyticsUser;
|
|
129
|
-
const analyticsEvent = { ...event, user };
|
|
130
|
-
this.nextEvent(analyticsEvent, type);
|
|
131
|
-
});
|
|
132
|
-
}
|
|
133
|
-
nextEvent(event, type) {
|
|
134
|
-
const wrapper = new AnalyticsStreamEventAnalyticsEventWrapper(event, type);
|
|
135
|
-
this._subject.next(wrapper);
|
|
136
|
-
}
|
|
137
|
-
// MARK: Internal
|
|
138
|
-
_init() {
|
|
139
|
-
if (this._config.isProduction) {
|
|
140
|
-
// Initialize listeners.
|
|
141
|
-
this._config.listeners.forEach((listener) => {
|
|
142
|
-
listener.listenToService(this);
|
|
143
|
-
});
|
|
144
|
-
}
|
|
145
|
-
else {
|
|
146
|
-
console.warn('DbNgxAnalyticsService: Analytics not in production mode. All analytics events are ignored.');
|
|
147
|
-
}
|
|
148
|
-
if (this._config.logEvents || !this._config.isProduction) {
|
|
149
|
-
console.log('DbNgxAnalyticsService: Log analytics events enabled.');
|
|
150
|
-
// Create a new subscription
|
|
151
|
-
this._loggerSub.subscription = this._subject.subscribe((x) => {
|
|
152
|
-
console.log(`DbNgxAnalyticsService: Analytics Event - ${AnalyticsStreamEventType[x.type]} User: ${x.userId} Data: ${JSON.stringify(x.event)}.`);
|
|
153
|
-
});
|
|
154
|
-
}
|
|
155
|
-
this._userSourceSub.subscription = this.user$.subscribe(() => {
|
|
156
|
-
this.sendNextEvent({}, AnalyticsStreamEventType.UserChange);
|
|
157
|
-
});
|
|
158
|
-
}
|
|
159
|
-
destroy() {
|
|
160
|
-
this._userSourceSub.destroy();
|
|
161
|
-
this._loggerSub.destroy();
|
|
162
|
-
}
|
|
163
|
-
}
|
|
164
|
-
// TODO: Make these configurable.
|
|
165
|
-
DbNgxAnalyticsService.USER_REGISTRATION_EVENT_NAME = 'User Registered';
|
|
166
|
-
DbNgxAnalyticsService.USER_LOGIN_EVENT_NAME = 'User Login';
|
|
167
|
-
DbNgxAnalyticsService.USER_LOGOUT_EVENT_NAME = 'User Logout';
|
|
168
|
-
DbNgxAnalyticsService.USER_PROPERTIES_EVENT_NAME = 'User Properties';
|
|
169
|
-
DbNgxAnalyticsService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.0", ngImport: i0, type: DbNgxAnalyticsService, deps: [{ token: DbNgxAnalyticsServiceConfiguration }, { token: DbNgxAnalyticsUserSource, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
170
|
-
DbNgxAnalyticsService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.2.0", ngImport: i0, type: DbNgxAnalyticsService });
|
|
171
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.0", ngImport: i0, type: DbNgxAnalyticsService, decorators: [{
|
|
172
|
-
type: Injectable
|
|
173
|
-
}], ctorParameters: function () { return [{ type: DbNgxAnalyticsServiceConfiguration }, { type: undefined, decorators: [{
|
|
174
|
-
type: Optional
|
|
175
|
-
}, {
|
|
176
|
-
type: Inject,
|
|
177
|
-
args: [DbNgxAnalyticsUserSource]
|
|
178
|
-
}] }]; } });
|
|
179
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5hbHl0aWNzLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9kYngtYW5hbHl0aWNzL3NyYy9saWIvYW5hbHl0aWNzLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFjLE9BQU8sRUFBRSxlQUFlLEVBQUUsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN2RSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0QsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRW5ELE9BQU8sRUFBd0Isd0JBQXdCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7QUFHcEYsTUFBTSxPQUFnQixpQ0FBaUM7Q0FRdEQ7QUFFRCxNQUFNLE9BQWdCLGdDQUFnQztDQUVyRDtBQUVELE1BQU0sT0FBZ0Isd0JBQXdCO0NBRTdDO0FBRUQsTUFBTSxPQUFnQiw2QkFBNkI7Q0FFbEQ7QUFFRCxNQUFNLE9BQWdCLGdDQUFnQztJQUF0RDtRQUdZLFNBQUksR0FBRyxJQUFJLGtCQUFrQixFQUFFLENBQUM7SUFjNUMsQ0FBQztJQVpRLGVBQWUsQ0FBQyxPQUE4QjtRQUNuRCxJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQztRQUN4QixJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUM5RSxTQUFTLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FB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QU8sQ0FBQyxHQUFHLENBQUMsNENBQTRDLHdCQUF3QixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsTUFBTSxVQUFVLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNsSixDQUFDLENBQUMsQ0FBQztTQUNKO1FBRUQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQzNELElBQUksQ0FBQyxhQUFhLENBQUMsRUFBRSxFQUFFLHdCQUF3QixDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzlELENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELE9BQU87UUFDTCxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQzlCLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDNUIsQ0FBQzs7QUFsSkQsaUNBQWlDO0FBRWpCLGtEQUE0QixHQUFHLGlCQUFrQixDQUFBO0FBQ2pELDJDQUFxQixHQUFHLFlBQWEsQ0FBQTtBQUNyQyw0Q0FBc0IsR0FBRyxhQUFjLENBQUE7QUFDdkMsZ0RBQTBCLEdBQUcsaUJBQWtCLENBQUE7a0hBUHBELHFCQUFxQixrQkFtQmIsa0NBQWtDLGFBQy9CLHdCQUF3QjtzSEFwQm5DLHFCQUFxQjsyRkFBckIscUJBQXFCO2tCQURqQyxVQUFVOzBEQW9CVSxrQ0FBa0M7MEJBQ2xELFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsd0JBQXdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3ViamVjdCwgQmVoYXZpb3JTdWJqZWN0LCBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmlsdGVyLCBmaXJzdCwgc2hhcmVSZXBsYXksIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSwgT3B0aW9uYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbk9iamVjdCB9IGZyb20gJ0BkZXJlZWtiL3J4anMnO1xuaW1wb3J0IHsgQW5hbHl0aWNzRXZlbnQsIEFuYWx5dGljc0V2ZW50RGF0YSwgQW5hbHl0aWNzRXZlbnROYW1lLCBBbmFseXRpY3NVc2VyLCBOZXdVc2VyQW5hbHl0aWNzRXZlbnREYXRhLCBVc2VyQW5hbHl0aWNzRXZlbnQgfSBmcm9tICcuL2FuYWx5dGljcyc7XG5pbXBvcnQgeyBBbmFseXRpY3NTdHJlYW1FdmVudCwgQW5hbHl0aWNzU3RyZWFtRXZlbnRUeXBlIH0gZnJvbSAnLi9hbmFseXRpY3Muc3RyZWFtJztcbmltcG9ydCB7IE1heWJlLCBEZXN0cm95YWJsZSB9IGZyb20gJ0BkZXJlZWtiL3V0aWwnO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgRGJOZ3hBbmFseXRpY3NFdmVudEVtaXR0ZXJTZXJ2aWNlIHtcbiAgYWJzdHJhY3Qgc2VuZE5ld1VzZXJFdmVudCh1c2VyOiBBbmFseXRpY3NVc2VyLCBkYXRhOiBOZXdVc2VyQW5hbHl0aWNzRXZlbnREYXRhKTogdm9pZDtcbiAgYWJzdHJhY3Qgc2VuZFVzZXJMb2dpbkV2ZW50KHVzZXI6IEFuYWx5dGljc1VzZXIsIGRhdGE/OiBBbmFseXRpY3NFdmVudERhdGEpOiB2b2lkO1xuICBhYnN0cmFjdCBzZW5kVXNlckxvZ291dEV2ZW50KGRhdGE/OiBBbmFseXRpY3NFdmVudERhdGEpOiB2b2lkO1xuICBhYnN0cmFjdCBzZW5kVXNlclByb3BlcnRpZXNFdmVudCh1c2VyOiBBbmFseXRpY3NVc2VyLCBkYXRhPzogQW5hbHl0aWNzRXZlbnREYXRhKTogdm9pZDtcbiAgYWJzdHJhY3Qgc2VuZEV2ZW50RGF0YShuYW1lOiBBbmFseXRpY3NFdmVudE5hbWUsIGRhdGE/OiBBbmFseXRpY3NFdmVudERhdGEpOiB2b2lkO1xuICBhYnN0cmFjdCBzZW5kRXZlbnQoZXZlbnQ6IEFuYWx5dGljc0V2ZW50KTogdm9pZDtcbiAgYWJzdHJhY3Qgc2VuZFBhZ2VWaWV3KHBhZ2U/OiBzdHJpbmcpOiB2b2lkO1xufVxuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgRGJOZ3hBbmFseXRpY3NFdmVudFN0cmVhbVNlcnZpY2Uge1xuICBhYnN0cmFjdCByZWFkb25seSBldmVudHMkOiBPYnNlcnZhYmxlPEFuYWx5dGljc1N0cmVhbUV2ZW50Pjtcbn1cblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIERiTmd4QW5hbHl0aWNzVXNlclNvdXJjZSB7XG4gIGFic3RyYWN0IHJlYWRvbmx5IGFuYWx5dGljc1VzZXIkOiBPYnNlcnZhYmxlPE1heWJlPEFuYWx5dGljc1VzZXI+Pjtcbn1cblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIERiTmd4QW5hbHl0aWNzU2VydmljZUxpc3RlbmVyIHtcbiAgcHVibGljIGFic3RyYWN0IGxpc3RlblRvU2VydmljZShzZXJ2aWNlOiBEYk5neEFuYWx5dGljc1NlcnZpY2UpOiB2b2lkO1xufVxuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RBbmFseXRpY3NTZXJ2aWNlTGlzdGVuZXIgaW1wbGVtZW50cyBEYk5neEFuYWx5dGljc1NlcnZpY2VMaXN0ZW5lciB7XG5cbiAgcHJvdGVjdGVkIF9zZXJ2aWNlPzogRGJOZ3hBbmFseXRpY3NTZXJ2aWNlO1xuICBwcm90ZWN0ZWQgX3N1YiA9IG5ldyBTdWJzY3JpcHRpb25PYmplY3QoKTtcblxuICBwdWJsaWMgbGlzdGVuVG9TZXJ2aWNlKHNlcnZpY2U6IERiTmd4QW5hbHl0aWNzU2VydmljZSk6IHZvaWQge1xuICAgIHRoaXMuX3NlcnZpY2UgPSBzZXJ2aWNlO1xuICAgIHRoaXMuX3N1Yi5zdWJzY3JpcHRpb24gPSBzZXJ2aWNlLmV2ZW50cyQucGlwZShmaWx0ZXIoKGUpID0+IHRoaXMuZmlsdGVyRXZlbnQoZSkpKVxuICAgICAgLnN1YnNjcmliZSgoZXZlbnQpID0+IHRoaXMudXBkYXRlT25TdHJlYW1FdmVudChldmVudCkpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGZpbHRlckV2ZW50KHN0cmVhbUV2ZW50OiBBbmFseXRpY3NTdHJlYW1FdmVudCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFic3RyYWN0IHVwZGF0ZU9uU3RyZWFtRXZlbnQoZXZlbnQ6IEFuYWx5dGljc1N0cmVhbUV2ZW50KTogdm9pZDtcblxufVxuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgRGJOZ3hBbmFseXRpY3NTZXJ2aWNlQ29uZmlndXJhdGlvbiB7XG4gIGxpc3RlbmVyczogRGJOZ3hBbmFseXRpY3NTZXJ2aWNlTGlzdGVuZXJbXSA9IFtdO1xuICBpc1Byb2R1Y3Rpb24/OiBib29sZWFuO1xuICBsb2dFdmVudHM/OiBib29sZWFuO1xuICB1c2VyU291cmNlPzogRGJOZ3hBbmFseXRpY3NVc2VyU291cmNlO1xufVxuXG5leHBvcnQgY2xhc3MgQW5hbHl0aWNzU3RyZWFtRXZlbnRBbmFseXRpY3NFdmVudFdyYXBwZXIgaW1wbGVtZW50cyBBbmFseXRpY3NTdHJlYW1FdmVudCB7XG5cbiAgY29uc3RydWN0b3IocHVibGljIHJlYWRvbmx5IGV2ZW50OiBVc2VyQW5hbHl0aWNzRXZlbnQsIHB1YmxpYyByZWFkb25seSB0eXBlOiBBbmFseXRpY3NTdHJlYW1FdmVudFR5cGUgPSBBbmFseXRpY3NTdHJlYW1FdmVudFR5cGUuRXZlbnQpIHsgfVxuXG4gIHB1YmxpYyBnZXQgdXNlcigpOiBNYXliZTxBbmFseXRpY3NVc2VyPiB7XG4gICAgcmV0dXJuIHRoaXMuZXZlbnQudXNlcjtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgdXNlcklkKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuICh0aGlzLnVzZXIpID8gdGhpcy51c2VyLnVzZXIgOiB1bmRlZmluZWQ7XG4gIH1cblxufVxuXG4vKipcbiAqIFByaW1hcnkgYW5hbHl0aWNzIHNlcnZpY2UgdGhhdCBlbWl0cyBhbmFseXRpY3MgZXZlbnRzIHRoYXQgY29tcG9uZW50cyBjYW4gbGlzdGVuIHRvLlxuICovXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgRGJOZ3hBbmFseXRpY3NTZXJ2aWNlIGltcGxlbWVudHMgRGJOZ3hBbmFseXRpY3NFdmVudFN0cmVhbVNlcnZpY2UsIERiTmd4QW5hbHl0aWNzRXZlbnRFbWl0dGVyU2VydmljZSwgRGVzdHJveWFibGUge1xuXG4gIC8vIFRPRE86IE1ha2UgdGhlc2UgY29uZmlndXJhYmxlLlxuXG4gIHN0YXRpYyByZWFkb25seSBVU0VSX1JFR0lTVFJBVElPTl9FVkVOVF9OQU1FID0gJ1VzZXIgUmVnaXN0ZXJlZCc7XG4gIHN0YXRpYyByZWFkb25seSBVU0VSX0xPR0lOX0VWRU5UX05BTUUgPSAnVXNlciBMb2dpbic7XG4gIHN0YXRpYyByZWFkb25seSBVU0VSX0xPR09VVF9FVkVOVF9OQU1FID0gJ1VzZXIgTG9nb3V0JztcbiAgc3RhdGljIHJlYWRvbmx5IFVTRVJfUFJPUEVSVElFU19FVkVOVF9OQU1FID0gJ1VzZXIgUHJvcGVydGllcyc7XG5cbiAgcHJpdmF0ZSBfc3ViamVjdCA9IG5ldyBTdWJqZWN0PEFuYWx5dGljc1N0cmVhbUV2ZW50PigpO1xuICByZWFkb25seSBldmVudHMkID0gdGhpcy5fc3ViamVjdC5hc09ic2VydmFibGUoKTtcblxuICBwcml2YXRlIF91c2VyU291cmNlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxNYXliZTxEYk5neEFuYWx5dGljc1VzZXJTb3VyY2U+Pih1bmRlZmluZWQpO1xuICByZWFkb25seSB1c2VyJCA9IHRoaXMuX3VzZXJTb3VyY2UucGlwZShzd2l0Y2hNYXAoeCA9PiAoeCkgPyB4LmFuYWx5dGljc1VzZXIkIDogb2YodW5kZWZpbmVkKSksIHNoYXJlUmVwbGF5KDEpKTtcblxuICBwcml2YXRlIF91c2VyU291cmNlU3ViID0gbmV3IFN1YnNjcmlwdGlvbk9iamVjdCgpO1xuICBwcml2YXRlIF9sb2dnZXJTdWIgPSBuZXcgU3Vic2NyaXB0aW9uT2JqZWN0KCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBfY29uZmlnOiBEYk5neEFuYWx5dGljc1NlcnZpY2VDb25maWd1cmF0aW9uLFxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoRGJOZ3hBbmFseXRpY3NVc2VyU291cmNlKSB1c2VyU291cmNlOiBNYXliZTxEYk5neEFuYWx5dGljc1VzZXJTb3VyY2U+ID0gX2NvbmZpZy51c2VyU291cmNlXG4gICkge1xuICAgIHRoaXMuX2luaXQoKTtcblxuICAgIGlmICh1c2VyU291cmNlKSB7XG4gICAgICB0aGlzLnNldFVzZXJTb3VyY2UodXNlclNvdXJjZSk7XG4gICAgfVxuICB9XG5cbiAgLy8gTUFSSzogU291cmNlXG4gIC8qKlxuICAgKiBTZXRzIHRoZSB1c2VyIGRpcmVjdGx5LlxuICAgKi9cbiAgcHVibGljIHNldFVzZXIodXNlcjogTWF5YmU8QW5hbHl0aWNzVXNlcj4pOiB2b2lkIHtcbiAgICBsZXQgc291cmNlOiBNYXliZTxEYk5neEFuYWx5dGljc1VzZXJTb3VyY2U+O1xuXG4gICAgaWYgKHVzZXIpIHtcbiAgICAgIHNvdXJjZSA9IHsgYW5hbHl0aWNzVXNlciQ6IG9mKHVzZXIpIH07XG4gICAgfVxuXG4gICAgdGhpcy5fdXNlclNvdXJjZS5uZXh0KHNvdXJjZSk7XG4gIH1cblxuICBwdWJsaWMgc2V0VXNlclNvdXJjZShzb3VyY2U6IERiTmd4QW5hbHl0aWNzVXNlclNvdXJjZSk6IHZvaWQge1xuICAgIHRoaXMuX3VzZXJTb3VyY2UubmV4dChzb3VyY2UpO1xuICB9XG5cbiAgLy8gTUFSSzogRGJOZ3hBbmFseXRpY3NFdmVudEVtaXR0ZXJTZXJ2aWNlXG4gIC8qKlxuICAgKiBTZW5kcyBhbiBldmVudC5cbiAgICovXG4gIHB1YmxpYyBzZW5kTmV3VXNlckV2ZW50KHVzZXI6IEFuYWx5dGljc1VzZXIsIGRhdGE6IE5ld1VzZXJBbmFseXRpY3NFdmVudERhdGEpOiB2b2lkIHtcbiAgICB0aGlzLnNlbmROZXh0RXZlbnQoe1xuICAgICAgbmFtZTogRGJOZ3hBbmFseXRpY3NTZXJ2aWNlLlVTRVJfUkVHSVNUUkFUSU9OX0VWRU5UX05BTUUsXG4gICAgICBkYXRhXG4gICAgfSwgQW5hbHl0aWNzU3RyZWFtRXZlbnRUeXBlLk5ld1VzZXJFdmVudCwgdXNlcik7XG4gIH1cblxuICBwdWJsaWMgc2VuZFVzZXJMb2dpbkV2ZW50KHVzZXI6IEFuYWx5dGljc1VzZXIsIGRhdGE/OiBBbmFseXRpY3NFdmVudERhdGEpOiB2b2lkIHtcbiAgICB0aGlzLnNlbmROZXh0RXZlbnQoe1xuICAgICAgbmFtZTogRGJOZ3hBbmFseXRpY3NTZXJ2aWNlLlVTRVJfTE9HSU5fRVZFTlRfTkFNRSxcbiAgICAgIGRhdGFcbiAgICB9LCBBbmFseXRpY3NTdHJlYW1FdmVudFR5cGUuVXNlckxvZ2luRXZlbnQsIHVzZXIpO1xuICB9XG5cbiAgcHVibGljIHNlbmRVc2VyTG9nb3V0RXZlbnQoZGF0YT86IEFuYWx5dGljc0V2ZW50RGF0YSwgY2xlYXJVc2VyID0gdHJ1ZSk6IHZvaWQge1xuICAgIHRoaXMuc2VuZE5leHRFdmVudCh7XG4gICAgICBuYW1lOiBEYk5neEFuYWx5dGljc1NlcnZpY2UuVVNFUl9MT0dPVVRfRVZFTlRfTkFNRSxcbiAgICAgIGRhdGFcbiAgICB9LCBBbmFseXRpY3NTdHJlYW1FdmVudFR5cGUuVXNlckxvZ291dEV2ZW50KTtcblxuICAgIGlmIChjbGVhclVzZXIpIHtcbiAgICAgIHRoaXMuc2V0VXNlcih1bmRlZmluZWQpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzZW5kVXNlclByb3BlcnRpZXNFdmVudCh1c2VyOiBBbmFseXRpY3NVc2VyLCBkYXRhPzogQW5hbHl0aWNzRXZlbnREYXRhKTogdm9pZCB7XG4gICAgdGhpcy5zZW5kTmV4dEV2ZW50KHtcbiAgICAgIG5hbWU6IERiTmd4QW5hbHl0aWNzU2VydmljZS5VU0VSX1BST1BFUlRJRVNfRVZFTlRfTkFNRSxcbiAgICAgIGRhdGFcbiAgICB9LCBBbmFseXRpY3NTdHJlYW1FdmVudFR5cGUuVXNlclByb3BlcnRpZXNFdmVudCwgdXNlcik7XG4gIH1cblxuICBwdWJsaWMgc2VuZEV2ZW50RGF0YShuYW1lOiBBbmFseXRpY3NFdmVudE5hbWUsIGRhdGE/OiBBbmFseXRpY3NFdmVudERhdGEpOiB2b2lkIHtcbiAgICByZXR1cm4gdGhpcy5zZW5kRXZlbnQoe1xuICAgICAgbmFtZSxcbiAgICAgIGRhdGFcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBzZW5kRXZlbnRUeXBlKGV2ZW50VHlwZTogQW5hbHl0aWNzRXZlbnROYW1lKTogdm9pZCB7XG4gICAgdGhpcy5zZW5kTmV4dEV2ZW50KHtcbiAgICAgIG5hbWU6IGV2ZW50VHlwZVxuICAgIH0sIEFuYWx5dGljc1N0cmVhbUV2ZW50VHlwZS5FdmVudCk7XG4gIH1cblxuICBwdWJsaWMgc2VuZEV2ZW50KGV2ZW50OiBBbmFseXRpY3NFdmVudCk6IHZvaWQge1xuICAgIHRoaXMuc2VuZE5leHRFdmVudChldmVudCwgQW5hbHl0aWNzU3RyZWFtRXZlbnRUeXBlLkV2ZW50KTtcbiAgfVxuXG4gIHB1YmxpYyBzZW5kUGFnZVZpZXcocGFnZT86IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuc2VuZE5leHRFdmVudCh7XG4gICAgICBuYW1lOiBwYWdlXG4gICAgfSwgQW5hbHl0aWNzU3RyZWFtRXZlbnRUeXBlLlBhZ2VWaWV3KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzZW5kTmV4dEV2ZW50KGV2ZW50OiBBbmFseXRpY3NFdmVudCA9IHt9LCB0eXBlOiBBbmFseXRpY3NTdHJlYW1FdmVudFR5cGUsIHVzZXJPdmVycmlkZT86IEFuYWx5dGljc1VzZXIpOiB2b2lkIHtcbiAgICB0aGlzLnVzZXIkLnBpcGUoZmlyc3QoKSkuc3Vic2NyaWJlKChhbmFseXRpY3NVc2VyKSA9PiB7XG4gICAgICBjb25zdCB1c2VyOiBNYXliZTxBbmFseXRpY3NVc2VyPiA9ICh1c2VyT3ZlcnJpZGUgIT0gbnVsbCkgPyB1c2VyT3ZlcnJpZGUgOiBhbmFseXRpY3NVc2VyO1xuICAgICAgY29uc3QgYW5hbHl0aWNzRXZlbnQ6IFVzZXJBbmFseXRpY3NFdmVudCA9IHsgLi4uZXZlbnQsIHVzZXIgfTtcbiAgICAgIHRoaXMubmV4dEV2ZW50KGFuYWx5dGljc0V2ZW50LCB0eXBlKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBuZXh0RXZlbnQoZXZlbnQ6IFVzZXJBbmFseXRpY3NFdmVudCwgdHlwZTogQW5hbHl0aWNzU3RyZWFtRXZlbnRUeXBlKTogdm9pZCB7XG4gICAgY29uc3Qgd3JhcHBlciA9IG5ldyBBbmFseXRpY3NTdHJlYW1FdmVudEFuYWx5dGljc0V2ZW50V3JhcHBlcihldmVudCwgdHlwZSk7XG4gICAgdGhpcy5fc3ViamVjdC5uZXh0KHdyYXBwZXIpO1xuICB9XG5cbiAgLy8gTUFSSzogSW50ZXJuYWxcbiAgcHJpdmF0ZSBfaW5pdCgpOiB2b2lkIHtcblxuICAgIGlmICh0aGlzLl9jb25maWcuaXNQcm9kdWN0aW9uKSB7XG4gICAgICAvLyBJbml0aWFsaXplIGxpc3RlbmVycy5cbiAgICAgIHRoaXMuX2NvbmZpZy5saXN0ZW5lcnMuZm9yRWFjaCgobGlzdGVuZXIpID0+IHtcbiAgICAgICAgbGlzdGVuZXIubGlzdGVuVG9TZXJ2aWNlKHRoaXMpO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUud2FybignRGJOZ3hBbmFseXRpY3NTZXJ2aWNlOiBBbmFseXRpY3Mgbm90IGluIHByb2R1Y3Rpb24gbW9kZS4gQWxsIGFuYWx5dGljcyBldmVudHMgYXJlIGlnbm9yZWQuJyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2NvbmZpZy5sb2dFdmVudHMgfHwgIXRoaXMuX2NvbmZpZy5pc1Byb2R1Y3Rpb24pIHtcbiAgICAgIGNvbnNvbGUubG9nKCdEYk5neEFuYWx5dGljc1NlcnZpY2U6IExvZyBhbmFseXRpY3MgZXZlbnRzIGVuYWJsZWQuJyk7XG5cbiAgICAgIC8vIENyZWF0ZSBhIG5ldyBzdWJzY3JpcHRpb25cbiAgICAgIHRoaXMuX2xvZ2dlclN1Yi5zdWJzY3JpcHRpb24gPSB0aGlzLl9zdWJqZWN0LnN1YnNjcmliZSgoeCkgPT4ge1xuICAgICAgICBjb25zb2xlLmxvZyhgRGJOZ3hBbmFseXRpY3NTZXJ2aWNlOiBBbmFseXRpY3MgRXZlbnQgLSAke0FuYWx5dGljc1N0cmVhbUV2ZW50VHlwZVt4LnR5cGVdfSBVc2VyOiAke3gudXNlcklkfSBEYXRhOiAke0pTT04uc3RyaW5naWZ5KHguZXZlbnQpfS5gKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHRoaXMuX3VzZXJTb3VyY2VTdWIuc3Vic2NyaXB0aW9uID0gdGhpcy51c2VyJC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgdGhpcy5zZW5kTmV4dEV2ZW50KHt9LCBBbmFseXRpY3NTdHJlYW1FdmVudFR5cGUuVXNlckNoYW5nZSk7XG4gICAgfSk7XG4gIH1cblxuICBkZXN0cm95KCkge1xuICAgIHRoaXMuX3VzZXJTb3VyY2VTdWIuZGVzdHJveSgpO1xuICAgIHRoaXMuX2xvZ2dlclN1Yi5kZXN0cm95KCk7XG4gIH1cblxufVxuIl19
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
export var AnalyticsStreamEventType;
|
|
2
|
-
(function (AnalyticsStreamEventType) {
|
|
3
|
-
AnalyticsStreamEventType[AnalyticsStreamEventType["PageView"] = 0] = "PageView";
|
|
4
|
-
AnalyticsStreamEventType[AnalyticsStreamEventType["UserChange"] = 1] = "UserChange";
|
|
5
|
-
// User Events
|
|
6
|
-
AnalyticsStreamEventType[AnalyticsStreamEventType["NewUserEvent"] = 2] = "NewUserEvent";
|
|
7
|
-
AnalyticsStreamEventType[AnalyticsStreamEventType["UserLoginEvent"] = 3] = "UserLoginEvent";
|
|
8
|
-
AnalyticsStreamEventType[AnalyticsStreamEventType["UserLogoutEvent"] = 4] = "UserLogoutEvent";
|
|
9
|
-
AnalyticsStreamEventType[AnalyticsStreamEventType["UserPropertiesEvent"] = 5] = "UserPropertiesEvent";
|
|
10
|
-
// Events
|
|
11
|
-
AnalyticsStreamEventType[AnalyticsStreamEventType["Event"] = 6] = "Event";
|
|
12
|
-
})(AnalyticsStreamEventType || (AnalyticsStreamEventType = {}));
|
|
13
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5hbHl0aWNzLnN0cmVhbS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2RieC1hbmFseXRpY3Mvc3JjL2xpYi9hbmFseXRpY3Muc3RyZWFtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLE1BQU0sQ0FBTixJQUFZLHdCQWNYO0FBZEQsV0FBWSx3QkFBd0I7SUFFbEMsK0VBQVEsQ0FBQTtJQUNSLG1GQUFVLENBQUE7SUFFVixjQUFjO0lBQ2QsdUZBQVksQ0FBQTtJQUNaLDJGQUFjLENBQUE7SUFDZCw2RkFBZSxDQUFBO0lBQ2YscUdBQW1CLENBQUE7SUFFbkIsU0FBUztJQUNULHlFQUFLLENBQUE7QUFFUCxDQUFDLEVBZFcsd0JBQXdCLEtBQXhCLHdCQUF3QixRQWNuQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE1heWJlIH0gZnJvbSBcIkBkZXJlZWtiL3V0aWxcIjtcbmltcG9ydCB7IEFuYWx5dGljc1VzZXIsIFVzZXJBbmFseXRpY3NFdmVudCwgQW5hbHl0aWNzVXNlcklkIH0gZnJvbSBcIi4vYW5hbHl0aWNzXCI7XG5cbmV4cG9ydCBlbnVtIEFuYWx5dGljc1N0cmVhbUV2ZW50VHlwZSB7XG5cbiAgUGFnZVZpZXcsXG4gIFVzZXJDaGFuZ2UsXG5cbiAgLy8gVXNlciBFdmVudHNcbiAgTmV3VXNlckV2ZW50LFxuICBVc2VyTG9naW5FdmVudCxcbiAgVXNlckxvZ291dEV2ZW50LFxuICBVc2VyUHJvcGVydGllc0V2ZW50LFxuXG4gIC8vIEV2ZW50c1xuICBFdmVudFxuXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQW5hbHl0aWNzU3RyZWFtRXZlbnQge1xuICByZWFkb25seSB0eXBlOiBBbmFseXRpY3NTdHJlYW1FdmVudFR5cGU7XG4gIHJlYWRvbmx5IHVzZXI/OiBNYXliZTxBbmFseXRpY3NVc2VyPjtcbiAgcmVhZG9ubHkgZXZlbnQ/OiBVc2VyQW5hbHl0aWNzRXZlbnQ7XG4gIHJlYWRvbmx5IHVzZXJJZD86IEFuYWx5dGljc1VzZXJJZDtcbn1cbiJdfQ==
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import { ModuleWithProviders, Provider } from '@angular/core';
|
|
2
|
-
import * as i0 from "@angular/core";
|
|
3
|
-
export interface DbNgxAnalyticsModuleOptions {
|
|
4
|
-
/**
|
|
5
|
-
* Provides a AnalyticsServiceConfiguration value.
|
|
6
|
-
*/
|
|
7
|
-
analyticsConfigurationProvider: Provider;
|
|
8
|
-
}
|
|
9
|
-
export declare class DbNgxAnalyticsModule {
|
|
10
|
-
static forRoot(options: DbNgxAnalyticsModuleOptions): ModuleWithProviders<DbNgxAnalyticsModule>;
|
|
11
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<DbNgxAnalyticsModule, never>;
|
|
12
|
-
static ɵmod: i0.ɵɵNgModuleDeclaration<DbNgxAnalyticsModule, never, never, never>;
|
|
13
|
-
static ɵinj: i0.ɵɵInjectorDeclaration<DbNgxAnalyticsModule>;
|
|
14
|
-
}
|