@dereekb/dbx-analytics 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +7 -0
- package/dereekb-dbx-analytics.d.ts +5 -0
- package/esm2020/dereekb-dbx-analytics.mjs +5 -0
- package/esm2020/index.mjs +2 -0
- package/esm2020/lib/action/analytics.action.directive.mjs +77 -0
- package/esm2020/lib/action/analytics.action.module.mjs +20 -0
- package/esm2020/lib/action/index.mjs +3 -0
- package/esm2020/lib/analytics.mjs +2 -0
- package/esm2020/lib/analytics.module.mjs +23 -0
- package/esm2020/lib/analytics.service.mjs +179 -0
- package/esm2020/lib/analytics.stream.mjs +13 -0
- package/esm2020/lib/index.mjs +6 -0
- package/fesm2015/dereekb-dbx-analytics.mjs +309 -0
- package/fesm2015/dereekb-dbx-analytics.mjs.map +1 -0
- package/fesm2020/dereekb-dbx-analytics.mjs +305 -0
- package/fesm2020/dereekb-dbx-analytics.mjs.map +1 -0
- package/index.d.ts +1 -0
- package/lib/action/analytics.action.directive.d.ts +34 -0
- package/lib/action/analytics.action.module.d.ts +7 -0
- package/lib/action/index.d.ts +2 -0
- package/lib/analytics.d.ts +24 -0
- package/lib/analytics.module.d.ts +14 -0
- package/lib/analytics.service.d.ts +83 -0
- package/lib/analytics.stream.d.ts +17 -0
- package/lib/index.d.ts +5 -0
- package/package.json +52 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dereekb-dbx-analytics.mjs","sources":["../../../../packages/dbx-analytics/src/lib/analytics.stream.ts","../../../../packages/dbx-analytics/src/lib/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.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 } from 'rxjs';\nimport { filter, first, shareReplay, switchMap } from 'rxjs/operators';\nimport { Inject, Injectable, Optional } from '@angular/core';\nimport { SubscriptionObject } 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 DbNgxAnalyticsEventEmitterService {\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 DbNgxAnalyticsEventStreamService {\n abstract readonly events$: Observable<AnalyticsStreamEvent>;\n}\n\nexport abstract class DbNgxAnalyticsUserSource {\n abstract readonly analyticsUser$: Observable<Maybe<AnalyticsUser>>;\n}\n\nexport abstract class DbNgxAnalyticsServiceListener {\n public abstract listenToService(service: DbNgxAnalyticsService): void;\n}\n\nexport abstract class AbstractAnalyticsServiceListener implements DbNgxAnalyticsServiceListener {\n\n protected _service?: DbNgxAnalyticsService;\n protected _sub = new SubscriptionObject();\n\n public listenToService(service: DbNgxAnalyticsService): void {\n this._service = service;\n this._sub.subscription = service.events$.pipe(filter((e) => this.filterEvent(e)))\n .subscribe((event) => this.updateOnStreamEvent(event));\n }\n\n protected filterEvent(streamEvent: AnalyticsStreamEvent): boolean {\n return true;\n }\n\n protected abstract updateOnStreamEvent(event: AnalyticsStreamEvent): void;\n\n}\n\nexport abstract class DbNgxAnalyticsServiceConfiguration {\n listeners: DbNgxAnalyticsServiceListener[] = [];\n isProduction?: boolean;\n logEvents?: boolean;\n userSource?: DbNgxAnalyticsUserSource;\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 DbNgxAnalyticsService implements DbNgxAnalyticsEventStreamService, DbNgxAnalyticsEventEmitterService, 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<DbNgxAnalyticsUserSource>>(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: DbNgxAnalyticsServiceConfiguration,\n @Optional() @Inject(DbNgxAnalyticsUserSource) userSource: Maybe<DbNgxAnalyticsUserSource> = _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<DbNgxAnalyticsUserSource>;\n\n if (user) {\n source = { analyticsUser$: of(user) };\n }\n\n this._userSource.next(source);\n }\n\n public setUserSource(source: DbNgxAnalyticsUserSource): void {\n this._userSource.next(source);\n }\n\n // MARK: DbNgxAnalyticsEventEmitterService\n /**\n * Sends an event.\n */\n public sendNewUserEvent(user: AnalyticsUser, data: NewUserAnalyticsEventData): void {\n this.sendNextEvent({\n name: DbNgxAnalyticsService.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: DbNgxAnalyticsService.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: DbNgxAnalyticsService.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: DbNgxAnalyticsService.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('DbNgxAnalyticsService: Analytics not in production mode. All analytics events are ignored.');\n }\n\n if (this._config.logEvents || !this._config.isProduction) {\n console.log('DbNgxAnalyticsService: Log analytics events enabled.');\n\n // Create a new subscription\n this._loggerSub.subscription = this._subject.subscribe((x) => {\n console.log(`DbNgxAnalyticsService: 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 { DbNgxAnalyticsService } from '../analytics.service';\nimport { Maybe, ReadableError } from '@dereekb/util';\n\nexport enum DbNgxActionAnalyticsTriggerType {\n TRIGGER,\n READY,\n SUCCESS,\n ERROR\n}\n\nexport interface DbNgxActionAnalyticsConfig<T = any, O = any> {\n onTriggered: (service: DbNgxAnalyticsService) => void;\n onReady: (service: DbNgxAnalyticsService, value: T) => void;\n onSuccess: (service: DbNgxAnalyticsService, value: Maybe<O>) => void;\n onError: (service: DbNgxAnalyticsService, 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 DbNgxActionAnalyticsDirective<T> extends AbstractSubscriptionDirective implements OnInit, OnDestroy {\n\n private _config = new BehaviorSubject<Maybe<DbNgxActionAnalyticsConfig>>(undefined);\n readonly config$ = this._config.pipe(filterMaybe(), shareReplay(1));\n\n @Input('dbxActionAnalytics')\n get config(): Maybe<DbNgxActionAnalyticsConfig> {\n return this._config.value;\n }\n\n set config(config: Maybe<DbNgxActionAnalyticsConfig>) {\n this._config.next(config);\n }\n\n constructor(\n @Host() readonly source: ActionContextStoreSourceInstance,\n readonly analyticsService: DbNgxAnalyticsService\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 { DbNgxActionAnalyticsDirective } from './analytics.action.directive';\n\n@NgModule({\n declarations: [\n DbNgxActionAnalyticsDirective\n ],\n exports: [\n DbNgxActionAnalyticsDirective\n ]\n})\nexport class DbNgxAnalyticsActionModule { }\n","import { NgModule, ModuleWithProviders, Provider } from '@angular/core';\nimport { DbNgxAnalyticsService } from './analytics.service';\n\n\nexport interface DbNgxAnalyticsModuleOptions {\n\n /**\n * Provides a AnalyticsServiceConfiguration value.\n */\n analyticsConfigurationProvider: Provider;\n\n}\n\n@NgModule()\nexport class DbNgxAnalyticsModule {\n\n static forRoot(options: DbNgxAnalyticsModuleOptions): ModuleWithProviders<DbNgxAnalyticsModule> {\n return {\n ngModule: DbNgxAnalyticsModule,\n providers: [\n // Configuration\n options.analyticsConfigurationProvider,\n // Service\n DbNgxAnalyticsService\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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"}
|
package/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './lib';
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { OnInit, OnDestroy } from '@angular/core';
|
|
2
|
+
import { Observable } from 'rxjs';
|
|
3
|
+
import { ActionContextStoreSourceInstance, AbstractSubscriptionDirective } from '@dereekb/dbx-core';
|
|
4
|
+
import { DbNgxAnalyticsService } from '../analytics.service';
|
|
5
|
+
import { Maybe, ReadableError } from '@dereekb/util';
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
export declare enum DbNgxActionAnalyticsTriggerType {
|
|
8
|
+
TRIGGER = 0,
|
|
9
|
+
READY = 1,
|
|
10
|
+
SUCCESS = 2,
|
|
11
|
+
ERROR = 3
|
|
12
|
+
}
|
|
13
|
+
export interface DbNgxActionAnalyticsConfig<T = any, O = any> {
|
|
14
|
+
onTriggered: (service: DbNgxAnalyticsService) => void;
|
|
15
|
+
onReady: (service: DbNgxAnalyticsService, value: T) => void;
|
|
16
|
+
onSuccess: (service: DbNgxAnalyticsService, value: Maybe<O>) => void;
|
|
17
|
+
onError: (service: DbNgxAnalyticsService, error: Maybe<ReadableError>) => void;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Used to listen to an ActionContext and send analytical events based on action events.
|
|
21
|
+
*/
|
|
22
|
+
export declare class DbNgxActionAnalyticsDirective<T> extends AbstractSubscriptionDirective implements OnInit, OnDestroy {
|
|
23
|
+
readonly source: ActionContextStoreSourceInstance;
|
|
24
|
+
readonly analyticsService: DbNgxAnalyticsService;
|
|
25
|
+
private _config;
|
|
26
|
+
readonly config$: Observable<DbNgxActionAnalyticsConfig<any, any>>;
|
|
27
|
+
get config(): Maybe<DbNgxActionAnalyticsConfig>;
|
|
28
|
+
set config(config: Maybe<DbNgxActionAnalyticsConfig>);
|
|
29
|
+
constructor(source: ActionContextStoreSourceInstance, analyticsService: DbNgxAnalyticsService);
|
|
30
|
+
ngOnInit(): void;
|
|
31
|
+
ngOnDestroy(): void;
|
|
32
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<DbNgxActionAnalyticsDirective<any>, [{ host: true; }, null]>;
|
|
33
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<DbNgxActionAnalyticsDirective<any>, "[dbxActionAnalytics]", never, { "config": "dbxActionAnalytics"; }, {}, never>;
|
|
34
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import * as i0 from "@angular/core";
|
|
2
|
+
import * as i1 from "./analytics.action.directive";
|
|
3
|
+
export declare class DbNgxAnalyticsActionModule {
|
|
4
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<DbNgxAnalyticsActionModule, never>;
|
|
5
|
+
static ɵmod: i0.ɵɵNgModuleDeclaration<DbNgxAnalyticsActionModule, [typeof i1.DbNgxActionAnalyticsDirective], never, [typeof i1.DbNgxActionAnalyticsDirective]>;
|
|
6
|
+
static ɵinj: i0.ɵɵInjectorDeclaration<DbNgxAnalyticsActionModule>;
|
|
7
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { Maybe, PrimativeKey } from "@dereekb/util";
|
|
2
|
+
export declare type AnalyticsEventName = string;
|
|
3
|
+
export declare type AnalyticsUserId = string;
|
|
4
|
+
export interface AnalyticsUser {
|
|
5
|
+
readonly user: AnalyticsUserId;
|
|
6
|
+
readonly properties?: {
|
|
7
|
+
readonly [key: string]: PrimativeKey | boolean;
|
|
8
|
+
};
|
|
9
|
+
}
|
|
10
|
+
export interface AnalyticsEventData {
|
|
11
|
+
readonly [key: string]: PrimativeKey | boolean;
|
|
12
|
+
}
|
|
13
|
+
export declare type NewUserRegistrationMethod = 'facebook' | 'google' | 'email' | string;
|
|
14
|
+
export interface NewUserAnalyticsEventData extends AnalyticsEventData {
|
|
15
|
+
method: NewUserRegistrationMethod;
|
|
16
|
+
}
|
|
17
|
+
export interface AnalyticsEvent {
|
|
18
|
+
readonly name?: AnalyticsEventName;
|
|
19
|
+
readonly value?: number;
|
|
20
|
+
readonly data?: AnalyticsEventData;
|
|
21
|
+
}
|
|
22
|
+
export interface UserAnalyticsEvent extends AnalyticsEvent {
|
|
23
|
+
readonly user?: Maybe<AnalyticsUser>;
|
|
24
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
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
|
+
}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { Observable } from 'rxjs';
|
|
2
|
+
import { SubscriptionObject } from '@dereekb/rxjs';
|
|
3
|
+
import { AnalyticsEvent, AnalyticsEventData, AnalyticsEventName, AnalyticsUser, NewUserAnalyticsEventData, UserAnalyticsEvent } from './analytics';
|
|
4
|
+
import { AnalyticsStreamEvent, AnalyticsStreamEventType } from './analytics.stream';
|
|
5
|
+
import { Maybe, Destroyable } from '@dereekb/util';
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
export declare abstract class DbNgxAnalyticsEventEmitterService {
|
|
8
|
+
abstract sendNewUserEvent(user: AnalyticsUser, data: NewUserAnalyticsEventData): void;
|
|
9
|
+
abstract sendUserLoginEvent(user: AnalyticsUser, data?: AnalyticsEventData): void;
|
|
10
|
+
abstract sendUserLogoutEvent(data?: AnalyticsEventData): void;
|
|
11
|
+
abstract sendUserPropertiesEvent(user: AnalyticsUser, data?: AnalyticsEventData): void;
|
|
12
|
+
abstract sendEventData(name: AnalyticsEventName, data?: AnalyticsEventData): void;
|
|
13
|
+
abstract sendEvent(event: AnalyticsEvent): void;
|
|
14
|
+
abstract sendPageView(page?: string): void;
|
|
15
|
+
}
|
|
16
|
+
export declare abstract class DbNgxAnalyticsEventStreamService {
|
|
17
|
+
abstract readonly events$: Observable<AnalyticsStreamEvent>;
|
|
18
|
+
}
|
|
19
|
+
export declare abstract class DbNgxAnalyticsUserSource {
|
|
20
|
+
abstract readonly analyticsUser$: Observable<Maybe<AnalyticsUser>>;
|
|
21
|
+
}
|
|
22
|
+
export declare abstract class DbNgxAnalyticsServiceListener {
|
|
23
|
+
abstract listenToService(service: DbNgxAnalyticsService): void;
|
|
24
|
+
}
|
|
25
|
+
export declare abstract class AbstractAnalyticsServiceListener implements DbNgxAnalyticsServiceListener {
|
|
26
|
+
protected _service?: DbNgxAnalyticsService;
|
|
27
|
+
protected _sub: SubscriptionObject;
|
|
28
|
+
listenToService(service: DbNgxAnalyticsService): void;
|
|
29
|
+
protected filterEvent(streamEvent: AnalyticsStreamEvent): boolean;
|
|
30
|
+
protected abstract updateOnStreamEvent(event: AnalyticsStreamEvent): void;
|
|
31
|
+
}
|
|
32
|
+
export declare abstract class DbNgxAnalyticsServiceConfiguration {
|
|
33
|
+
listeners: DbNgxAnalyticsServiceListener[];
|
|
34
|
+
isProduction?: boolean;
|
|
35
|
+
logEvents?: boolean;
|
|
36
|
+
userSource?: DbNgxAnalyticsUserSource;
|
|
37
|
+
}
|
|
38
|
+
export declare class AnalyticsStreamEventAnalyticsEventWrapper implements AnalyticsStreamEvent {
|
|
39
|
+
readonly event: UserAnalyticsEvent;
|
|
40
|
+
readonly type: AnalyticsStreamEventType;
|
|
41
|
+
constructor(event: UserAnalyticsEvent, type?: AnalyticsStreamEventType);
|
|
42
|
+
get user(): Maybe<AnalyticsUser>;
|
|
43
|
+
get userId(): string | undefined;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Primary analytics service that emits analytics events that components can listen to.
|
|
47
|
+
*/
|
|
48
|
+
export declare class DbNgxAnalyticsService implements DbNgxAnalyticsEventStreamService, DbNgxAnalyticsEventEmitterService, Destroyable {
|
|
49
|
+
private _config;
|
|
50
|
+
static readonly USER_REGISTRATION_EVENT_NAME = "User Registered";
|
|
51
|
+
static readonly USER_LOGIN_EVENT_NAME = "User Login";
|
|
52
|
+
static readonly USER_LOGOUT_EVENT_NAME = "User Logout";
|
|
53
|
+
static readonly USER_PROPERTIES_EVENT_NAME = "User Properties";
|
|
54
|
+
private _subject;
|
|
55
|
+
readonly events$: Observable<AnalyticsStreamEvent>;
|
|
56
|
+
private _userSource;
|
|
57
|
+
readonly user$: Observable<Maybe<AnalyticsUser>>;
|
|
58
|
+
private _userSourceSub;
|
|
59
|
+
private _loggerSub;
|
|
60
|
+
constructor(_config: DbNgxAnalyticsServiceConfiguration, userSource?: Maybe<DbNgxAnalyticsUserSource>);
|
|
61
|
+
/**
|
|
62
|
+
* Sets the user directly.
|
|
63
|
+
*/
|
|
64
|
+
setUser(user: Maybe<AnalyticsUser>): void;
|
|
65
|
+
setUserSource(source: DbNgxAnalyticsUserSource): void;
|
|
66
|
+
/**
|
|
67
|
+
* Sends an event.
|
|
68
|
+
*/
|
|
69
|
+
sendNewUserEvent(user: AnalyticsUser, data: NewUserAnalyticsEventData): void;
|
|
70
|
+
sendUserLoginEvent(user: AnalyticsUser, data?: AnalyticsEventData): void;
|
|
71
|
+
sendUserLogoutEvent(data?: AnalyticsEventData, clearUser?: boolean): void;
|
|
72
|
+
sendUserPropertiesEvent(user: AnalyticsUser, data?: AnalyticsEventData): void;
|
|
73
|
+
sendEventData(name: AnalyticsEventName, data?: AnalyticsEventData): void;
|
|
74
|
+
sendEventType(eventType: AnalyticsEventName): void;
|
|
75
|
+
sendEvent(event: AnalyticsEvent): void;
|
|
76
|
+
sendPageView(page?: string): void;
|
|
77
|
+
protected sendNextEvent(event: AnalyticsEvent | undefined, type: AnalyticsStreamEventType, userOverride?: AnalyticsUser): void;
|
|
78
|
+
protected nextEvent(event: UserAnalyticsEvent, type: AnalyticsStreamEventType): void;
|
|
79
|
+
private _init;
|
|
80
|
+
destroy(): void;
|
|
81
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<DbNgxAnalyticsService, [null, { optional: true; }]>;
|
|
82
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<DbNgxAnalyticsService>;
|
|
83
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { Maybe } from "@dereekb/util";
|
|
2
|
+
import { AnalyticsUser, UserAnalyticsEvent, AnalyticsUserId } from "./analytics";
|
|
3
|
+
export declare enum AnalyticsStreamEventType {
|
|
4
|
+
PageView = 0,
|
|
5
|
+
UserChange = 1,
|
|
6
|
+
NewUserEvent = 2,
|
|
7
|
+
UserLoginEvent = 3,
|
|
8
|
+
UserLogoutEvent = 4,
|
|
9
|
+
UserPropertiesEvent = 5,
|
|
10
|
+
Event = 6
|
|
11
|
+
}
|
|
12
|
+
export interface AnalyticsStreamEvent {
|
|
13
|
+
readonly type: AnalyticsStreamEventType;
|
|
14
|
+
readonly user?: Maybe<AnalyticsUser>;
|
|
15
|
+
readonly event?: UserAnalyticsEvent;
|
|
16
|
+
readonly userId?: AnalyticsUserId;
|
|
17
|
+
}
|
package/lib/index.d.ts
ADDED
package/package.json
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@dereekb/dbx-analytics",
|
|
3
|
+
"version": "0.0.1",
|
|
4
|
+
"peerDependencies": {
|
|
5
|
+
"@angular/common": "^13.1.0",
|
|
6
|
+
"@angular/core": "^13.1.0",
|
|
7
|
+
"@dereekb/rxjs": "0.0.1",
|
|
8
|
+
"rxjs": "^7.5.2",
|
|
9
|
+
"@dereekb/util": "0.0.1",
|
|
10
|
+
"extra-set": "^2.2.11",
|
|
11
|
+
"ms": "^3.0.0-canary.1",
|
|
12
|
+
"@dereekb/dbx-core": "0.0.1",
|
|
13
|
+
"@ngrx/component-store": "^13.0.2",
|
|
14
|
+
"@ngrx/data": "^13.0.2",
|
|
15
|
+
"@ngrx/effects": "^13.0.2",
|
|
16
|
+
"@ngrx/entity": "^13.0.2",
|
|
17
|
+
"@ngrx/store": "^13.0.2",
|
|
18
|
+
"@angular/platform-browser": "13.2.0",
|
|
19
|
+
"date-fns": "2.28.0",
|
|
20
|
+
"@dereekb/date": "0.0.1",
|
|
21
|
+
"date-fns-tz": "1.2.2",
|
|
22
|
+
"class-transformer": "0.5.1",
|
|
23
|
+
"class-validator": "0.13.2",
|
|
24
|
+
"reflect-metadata": "0.1.13",
|
|
25
|
+
"rrule": "dereekb/rrule#17adf5708d6567b4d01a3a8afd106261421ea492",
|
|
26
|
+
"@angular/router": "13.2.0",
|
|
27
|
+
"@uirouter/core": "^6.0.8"
|
|
28
|
+
},
|
|
29
|
+
"dependencies": {
|
|
30
|
+
"tslib": "^2.3.0"
|
|
31
|
+
},
|
|
32
|
+
"module": "fesm2015/dereekb-dbx-analytics.mjs",
|
|
33
|
+
"es2020": "fesm2020/dereekb-dbx-analytics.mjs",
|
|
34
|
+
"esm2020": "esm2020/dereekb-dbx-analytics.mjs",
|
|
35
|
+
"fesm2020": "fesm2020/dereekb-dbx-analytics.mjs",
|
|
36
|
+
"fesm2015": "fesm2015/dereekb-dbx-analytics.mjs",
|
|
37
|
+
"typings": "dereekb-dbx-analytics.d.ts",
|
|
38
|
+
"exports": {
|
|
39
|
+
"./package.json": {
|
|
40
|
+
"default": "./package.json"
|
|
41
|
+
},
|
|
42
|
+
".": {
|
|
43
|
+
"types": "./dereekb-dbx-analytics.d.ts",
|
|
44
|
+
"esm2020": "./esm2020/dereekb-dbx-analytics.mjs",
|
|
45
|
+
"es2020": "./fesm2020/dereekb-dbx-analytics.mjs",
|
|
46
|
+
"es2015": "./fesm2015/dereekb-dbx-analytics.mjs",
|
|
47
|
+
"node": "./fesm2015/dereekb-dbx-analytics.mjs",
|
|
48
|
+
"default": "./fesm2020/dereekb-dbx-analytics.mjs"
|
|
49
|
+
}
|
|
50
|
+
},
|
|
51
|
+
"sideEffects": false
|
|
52
|
+
}
|