ems-web-app-event-tracker 0.0.20 → 0.0.21
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/esm2020/lib/event-dispatcher.component.mjs +2 -2
- package/fesm2015/ems-web-app-event-tracker.mjs +1 -1
- package/fesm2015/ems-web-app-event-tracker.mjs.map +1 -1
- package/fesm2020/ems-web-app-event-tracker.mjs +1 -1
- package/fesm2020/ems-web-app-event-tracker.mjs.map +1 -1
- package/package.json +1 -1
|
@@ -12,12 +12,12 @@ export class EventDispatcherComponent {
|
|
|
12
12
|
this.updateSession = () => {
|
|
13
13
|
const timestamp = (new Date()).getTime();
|
|
14
14
|
window.localStorage.setItem("ems_et_sessionTime", timestamp.toString());
|
|
15
|
+
window.localStorage.setItem("ems_et_sessionId", this._sessionId);
|
|
15
16
|
};
|
|
16
17
|
}
|
|
17
18
|
ngOnInit() {
|
|
18
19
|
this.service.endpoint = this.endpoint;
|
|
19
20
|
this._sessionId = this.determineSessionId();
|
|
20
|
-
console.log("setting session id", this._sessionId);
|
|
21
21
|
window.localStorage.setItem("ems_et_sessionId", this._sessionId);
|
|
22
22
|
window.setInterval(this.updateSession, 1000);
|
|
23
23
|
}
|
|
@@ -69,4 +69,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImpor
|
|
|
69
69
|
type: Input,
|
|
70
70
|
args: ["sessionLimit"]
|
|
71
71
|
}] } });
|
|
72
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
72
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnQtZGlzcGF0Y2hlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL2V2ZW50LWRpc3BhdGNoZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsS0FBSyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBR2pFLE9BQU8sRUFBRSxFQUFFLElBQUksSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2xDLE9BQU8sRUFBUyxLQUFLLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQzs7O0FBUWpELE1BQU0sT0FBTyx3QkFBd0I7SUFTbkMsWUFBb0IsT0FBK0I7UUFBL0IsWUFBTyxHQUFQLE9BQU8sQ0FBd0I7UUFONUIsVUFBSyxHQUFXLE9BQU8sQ0FBQyxDQUFDLEtBQUs7UUFFN0MsV0FBTSxHQUErQyxFQUFFLENBQUM7UUFDeEQsZ0JBQVcsR0FBWSxLQUFLLENBQUM7UUFrRDdCLGtCQUFhLEdBQUcsR0FBRyxFQUFFO1lBQzNCLE1BQU0sU0FBUyxHQUFHLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ3pDLE1BQU0sQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLG9CQUFvQixFQUFFLFNBQVMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1lBQ3hFLE1BQU0sQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLGtCQUFrQixFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNuRSxDQUFDLENBQUE7SUFuRHFELENBQUM7SUFFdkQsUUFBUTtRQUNOLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7UUFDdEMsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUM1QyxNQUFNLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDakUsTUFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFFTSxRQUFRLENBQUMsS0FBdUIsRUFBRSxJQUFhO1FBQ3BELEtBQUssQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztRQUNsQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUNwQixPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFTyxLQUFLLENBQUMsWUFBWTtRQUN4QixJQUFHLElBQUksQ0FBQyxXQUFXO1lBQUUsT0FBTztRQUM1QixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztRQUV4QixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2hDLElBQUcsQ0FBQyxHQUFHLEVBQUU7WUFDUCxJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztZQUN6QixPQUFPO1NBQ1I7UUFFRCxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2pELElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBRU8sa0JBQWtCO1FBQ3hCLE1BQU0sZ0JBQWdCLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLG9CQUFvQixDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7UUFDM0YsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUNsRSxNQUFNLEdBQUcsR0FBRyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUVuQyxJQUFHLENBQUMsS0FBSyxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLEVBQUUsZ0JBQWdCLENBQUMsRUFBRTtZQUM5RixPQUFPLFNBQVUsQ0FBQztTQUNuQjtRQUVELE9BQU8sSUFBSSxFQUFFLENBQUM7SUFDaEIsQ0FBQztJQUVPLGNBQWMsQ0FBQyxLQUFhLEVBQUUsS0FBYTtRQUNqRCxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDOUMsQ0FBQzs7cUhBdERVLHdCQUF3Qjt5R0FBeEIsd0JBQXdCLDRIQUp6QixFQUFFOzJGQUlELHdCQUF3QjtrQkFOcEMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsa0JBQWtCO29CQUM1QixRQUFRLEVBQUUsRUFBRTtvQkFDWixNQUFNLEVBQUUsRUFDUDtpQkFDRjs2R0FHb0IsUUFBUTtzQkFBMUIsS0FBSzt1QkFBQyxVQUFVO2dCQUNNLEtBQUs7c0JBQTNCLEtBQUs7dUJBQUMsY0FBYyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBJbnB1dCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBFdmVudERpc3BhdGNoZXJTZXJ2aWNlIH0gZnJvbSBcIi4vZXZlbnQtZGlzcGF0Y2hlci5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBJRGlzcGF0Y2hlckV2ZW50IH0gZnJvbSBcIi4vZXZlbnQtZGlzcGF0Y2hlci5pbnRlcmZhY2VzXCI7XG5pbXBvcnQgeyB2NCBhcyB1dWlkIH0gZnJvbSBcInV1aWRcIjtcbmltcG9ydCB7IHRyYWNlLCBlbXB0eSB9IGZyb20gXCJlbXMtd2ViLWFwcC11dGlsc1wiO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdldmVudC1kaXNwYXRjaGVyJyxcbiAgdGVtcGxhdGU6ICcnLFxuICBzdHlsZXM6IFtcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBFdmVudERpc3BhdGNoZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuXG4gIEBJbnB1dChcImVuZHBvaW50XCIpIGVuZHBvaW50ITogc3RyaW5nO1xuICBASW5wdXQoXCJzZXNzaW9uTGltaXRcIikgbGltaXQ6IG51bWJlciA9IDE4MDAwMDA7IC8vMzBtXG5cbiAgcHJpdmF0ZSBfcXVldWU6IHtldmVudDogSURpc3BhdGNoZXJFdmVudCwgbmFtZT86IHN0cmluZ31bXSA9IFtdO1xuICBwcml2YXRlIF9wcm9jZXNzaW5nOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgX3Nlc3Npb25JZCE6IHN0cmluZztcbiAgXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgc2VydmljZTogRXZlbnREaXNwYXRjaGVyU2VydmljZSkge31cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnNlcnZpY2UuZW5kcG9pbnQgPSB0aGlzLmVuZHBvaW50O1xuICAgIHRoaXMuX3Nlc3Npb25JZCA9IHRoaXMuZGV0ZXJtaW5lU2Vzc2lvbklkKCk7XG4gICAgd2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKFwiZW1zX2V0X3Nlc3Npb25JZFwiLCB0aGlzLl9zZXNzaW9uSWQpO1xuICAgIHdpbmRvdy5zZXRJbnRlcnZhbCh0aGlzLnVwZGF0ZVNlc3Npb24sIDEwMDApO1xuICB9XG5cbiAgcHVibGljIGRpc3BhdGNoKGV2ZW50OiBJRGlzcGF0Y2hlckV2ZW50LCBuYW1lPzogc3RyaW5nKTogYW55IHtcbiAgICBldmVudC5zZXNzaW9uSWQgPSB0aGlzLl9zZXNzaW9uSWQ7XG4gICAgdGhpcy5fcXVldWUucHVzaCh7IGV2ZW50LCBuYW1lIH0pO1xuICAgIHRoaXMucHJvY2Vzc1F1ZXVlKCk7XG4gICAgcmV0dXJuIGV2ZW50O1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBwcm9jZXNzUXVldWUoKSB7XG4gICAgaWYodGhpcy5fcHJvY2Vzc2luZykgcmV0dXJuO1xuICAgIHRoaXMuX3Byb2Nlc3NpbmcgPSB0cnVlO1xuXG4gICAgY29uc3Qgb2JqID0gdGhpcy5fcXVldWUuc2hpZnQoKTtcbiAgICBpZighb2JqKSB7XG4gICAgICB0aGlzLl9wcm9jZXNzaW5nID0gZmFsc2U7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy5zZXJ2aWNlLmRpc3BhdGNoKG9iai5ldmVudCwgb2JqLm5hbWUpO1xuICAgIHRoaXMuX3Byb2Nlc3NpbmcgPSBmYWxzZTtcbiAgICB0aGlzLnByb2Nlc3NRdWV1ZSgpOyBcbiAgfVxuXG4gIHByaXZhdGUgZGV0ZXJtaW5lU2Vzc2lvbklkKCkge1xuICAgIGNvbnN0IHNlc3Npb25UaW1lc3RhbXAgPSBwYXJzZUludCh3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJlbXNfZXRfc2Vzc2lvblRpbWVcIikgPz8gXCJcIik7XG4gICAgY29uc3Qgc2Vzc2lvbklkID0gd2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiZW1zX2V0X3Nlc3Npb25JZFwiKTtcbiAgICBjb25zdCBub3cgPSAobmV3IERhdGUoKSkuZ2V0VGltZSgpO1xuXG4gICAgaWYoIWlzTmFOKHNlc3Npb25UaW1lc3RhbXApICYmICFlbXB0eShzZXNzaW9uSWQpICYmIHRoaXMuc3RpbGxJblNlc3Npb24obm93LCBzZXNzaW9uVGltZXN0YW1wKSkge1xuICAgICAgcmV0dXJuIHNlc3Npb25JZCE7XG4gICAgfVxuICAgIFxuICAgIHJldHVybiB1dWlkKCk7XG4gIH1cblxuICBwcml2YXRlIHN0aWxsSW5TZXNzaW9uKHRpbWUxOiBudW1iZXIsIHRpbWUyOiBudW1iZXIpIHtcbiAgICByZXR1cm4gTWF0aC5hYnModGltZTEgLSB0aW1lMikgPCB0aGlzLmxpbWl0O1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVTZXNzaW9uID0gKCkgPT4ge1xuICAgIGNvbnN0IHRpbWVzdGFtcCA9IChuZXcgRGF0ZSgpKS5nZXRUaW1lKCk7XG4gICAgd2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKFwiZW1zX2V0X3Nlc3Npb25UaW1lXCIsIHRpbWVzdGFtcC50b1N0cmluZygpKTtcbiAgICB3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oXCJlbXNfZXRfc2Vzc2lvbklkXCIsIHRoaXMuX3Nlc3Npb25JZCk7XG4gIH1cblxufVxuIl19
|
|
@@ -67,12 +67,12 @@ class EventDispatcherComponent {
|
|
|
67
67
|
this.updateSession = () => {
|
|
68
68
|
const timestamp = (new Date()).getTime();
|
|
69
69
|
window.localStorage.setItem("ems_et_sessionTime", timestamp.toString());
|
|
70
|
+
window.localStorage.setItem("ems_et_sessionId", this._sessionId);
|
|
70
71
|
};
|
|
71
72
|
}
|
|
72
73
|
ngOnInit() {
|
|
73
74
|
this.service.endpoint = this.endpoint;
|
|
74
75
|
this._sessionId = this.determineSessionId();
|
|
75
|
-
console.log("setting session id", this._sessionId);
|
|
76
76
|
window.localStorage.setItem("ems_et_sessionId", this._sessionId);
|
|
77
77
|
window.setInterval(this.updateSession, 1000);
|
|
78
78
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ems-web-app-event-tracker.mjs","sources":["../../src/lib/event-dispatcher.service.ts","../../src/lib/event-dispatcher.component.ts","../../src/lib/event-dispatcher.module.ts","../../src/public-api.ts","../../src/ems-web-app-event-tracker.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport { HttpClient, HttpHeaders, HttpResponse, HttpRequest, HttpErrorResponse, HttpParams } from '@angular/common/http';\nimport { Observable, Subject, BehaviorSubject, throwError, of } from 'rxjs';\nimport { catchError, map, tap, take } from \"rxjs/operators\";\nimport { IDispatcherEvent } from \"./event-dispatcher.interfaces\";\nimport { v4 as uuid } from \"uuid\";\nimport { trace, empty } from \"ems-web-app-utils\";\nimport * as _ from \"underscore\";\n\n@Injectable({\n providedIn: 'root'\n})\nexport class EventDispatcherService {\n \n public jwt?: string;\n public endpoint!: string;\n\n constructor(private http: HttpClient) {}\n\n public dispatch(event: IDispatcherEvent, name?: string):Promise<any> {\n const key = `${name ?? uuid()}.json`;\n const namespace = (event.namespace ? `${event.namespace}%2F` : \"\").replace(/:::/gim,\"%2F\");\n const request = this.buildRequest(`${namespace}${key}`);\n return this.executePutRequest(request, event);\n }\n\n public getEventTemplate(type: string): IDispatcherEvent {\n return {\n type,\n agent: window.navigator.userAgent,\n time: (new Date()).getTime(),\n timestamp: (new Date()).toISOString(),\n properties: {}\n }\n }\n\n private executePutRequest(request: string, data: any, transform?: (input: any) => any, suppressErrors?: boolean, customHeaders?: any ): Promise<any> {\n const headers = this.headers(customHeaders || {});\n return this.http.put(request, data, { headers }).pipe(\n map((result: any) => \n transform ? transform(result) : result\n ),\n catchError(suppressErrors ? this.handleErrorQuietly : this.handleError)\n ).toPromise()\n }\n\n private buildRequest(endpoint: string): string {\n return `${this.endpoint}/${endpoint}`;\n }\n\n private handleError(error: HttpErrorResponse) {\n return throwError(error);\n }\n\n private handleErrorQuietly(error: HttpErrorResponse) {\n console.error(error);\n return of(null);\n }\n\n private headers(custom: any = {}): HttpHeaders {\n const headers = _.extend({ \n \"Content-Type\": \"application/json\"\n }, custom);\n return new HttpHeaders(headers);\n }\n}\n","import { Component, OnInit, Input, Output } from '@angular/core';\nimport { EventDispatcherService } from \"./event-dispatcher.service\";\nimport { IDispatcherEvent } from \"./event-dispatcher.interfaces\";\nimport { v4 as uuid } from \"uuid\";\nimport { trace, empty } from \"ems-web-app-utils\";\n\n@Component({\n selector: 'event-dispatcher',\n template: '',\n styles: [\n ]\n})\nexport class EventDispatcherComponent implements OnInit {\n\n @Input(\"endpoint\") endpoint!: string;\n @Input(\"sessionLimit\") limit: number = 1800000; //30m\n\n private _queue: {event: IDispatcherEvent, name?: string}[] = [];\n private _processing: boolean = false;\n private _sessionId!: string;\n \n constructor(private service: EventDispatcherService) {}\n\n ngOnInit(): void {\n this.service.endpoint = this.endpoint;\n this._sessionId = this.determineSessionId();\n console.log(\"setting session id\", this._sessionId);\n window.localStorage.setItem(\"ems_et_sessionId\", this._sessionId);\n window.setInterval(this.updateSession, 1000);\n }\n\n public dispatch(event: IDispatcherEvent, name?: string): any {\n event.sessionId = this._sessionId;\n this._queue.push({ event, name });\n this.processQueue();\n return event;\n }\n\n private async processQueue() {\n if(this._processing) return;\n this._processing = true;\n\n const obj = this._queue.shift();\n if(!obj) {\n this._processing = false;\n return;\n }\n\n await this.service.dispatch(obj.event, obj.name);\n this._processing = false;\n this.processQueue(); \n }\n\n private determineSessionId() {\n const sessionTimestamp = parseInt(window.localStorage.getItem(\"ems_et_sessionTime\") ?? \"\");\n const sessionId = window.localStorage.getItem(\"ems_et_sessionId\");\n const now = (new Date()).getTime();\n\n if(!isNaN(sessionTimestamp) && !empty(sessionId) && this.stillInSession(now, sessionTimestamp)) {\n return sessionId!;\n }\n \n return uuid();\n }\n\n private stillInSession(time1: number, time2: number) {\n return Math.abs(time1 - time2) < this.limit;\n }\n\n private updateSession = () => {\n const timestamp = (new Date()).getTime();\n window.localStorage.setItem(\"ems_et_sessionTime\", timestamp.toString());\n }\n\n}\n","import { NgModule } from '@angular/core';\nimport { EventDispatcherComponent } from './event-dispatcher.component';\n\n\n\n@NgModule({\n declarations: [\n EventDispatcherComponent\n ],\n imports: [\n ],\n exports: [\n EventDispatcherComponent\n ]\n})\nexport class EventDispatcherModule { }\n","/*\n * Public API Surface of event-dispatcher\n */\n\nexport * from './lib/event-dispatcher.service';\nexport * from './lib/event-dispatcher.component';\nexport * from './lib/event-dispatcher.module';\nexport * from './lib/event-dispatcher.interfaces';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["uuid","i1.EventDispatcherService"],"mappings":";;;;;;;;;;;MAYa,sBAAsB,CAAA;AAKjC,IAAA,WAAA,CAAoB,IAAgB,EAAA;AAAhB,QAAA,IAAI,CAAA,IAAA,GAAJ,IAAI,CAAY;KAAI;IAEjC,QAAQ,CAAC,KAAuB,EAAE,IAAa,EAAA;AACpD,QAAA,MAAM,GAAG,GAAG,CAAG,EAAA,IAAI,KAAJ,IAAA,IAAA,IAAI,KAAJ,KAAA,CAAA,GAAA,IAAI,GAAIA,EAAI,EAAE,CAAA,KAAA,CAAO,CAAC;QACrC,MAAM,SAAS,GAAG,CAAC,KAAK,CAAC,SAAS,GAAG,CAAG,EAAA,KAAK,CAAC,SAAS,KAAK,GAAG,EAAE,EAAE,OAAO,CAAC,QAAQ,EAAC,KAAK,CAAC,CAAC;AAC3F,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,CAAG,EAAA,SAAS,CAAG,EAAA,GAAG,CAAE,CAAA,CAAC,CAAC;QACxD,OAAO,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;KAC/C;AAEM,IAAA,gBAAgB,CAAC,IAAY,EAAA;QAClC,OAAO;YACH,IAAI;AACJ,YAAA,KAAK,EAAE,MAAM,CAAC,SAAS,CAAC,SAAS;YACjC,IAAI,EAAE,CAAC,IAAI,IAAI,EAAE,EAAE,OAAO,EAAE;YAC5B,SAAS,EAAE,CAAC,IAAI,IAAI,EAAE,EAAE,WAAW,EAAE;AACrC,YAAA,UAAU,EAAE,EAAE;SACf,CAAA;KACJ;IAEO,iBAAiB,CAAC,OAAe,EAAE,IAAS,EAAE,SAA+B,EAAE,cAAwB,EAAE,aAAmB,EAAA;QAClI,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,IAAI,EAAE,CAAC,CAAC;QAClD,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,IAAI,CACnD,GAAG,CAAC,CAAC,MAAW,KACd,SAAS,GAAI,SAAS,CAAC,MAAM,CAAC,GAAG,MAAM,CACxC,EACD,UAAU,CAAC,cAAc,GAAG,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,WAAW,CAAC,CACxE,CAAC,SAAS,EAAE,CAAA;KACd;AAEO,IAAA,YAAY,CAAC,QAAgB,EAAA;AACnC,QAAA,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAI,CAAA,EAAA,QAAQ,EAAE,CAAC;KACvC;AAEO,IAAA,WAAW,CAAC,KAAwB,EAAA;AAC1C,QAAA,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC;KAC1B;AAEO,IAAA,kBAAkB,CAAC,KAAwB,EAAA;AACjD,QAAA,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AACrB,QAAA,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC;KACjB;IAEO,OAAO,CAAC,SAAc,EAAE,EAAA;AAC9B,QAAA,MAAM,OAAO,GAAG,CAAC,CAAC,MAAM,CAAC;AACnB,YAAA,cAAc,EAAE,kBAAkB;SACpC,EAAE,MAAM,CAAC,CAAC;AACd,QAAA,OAAO,IAAI,WAAW,CAAC,OAAO,CAAC,CAAC;KACjC;;mHApDU,sBAAsB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAtB,sBAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,sBAAsB,cAFrB,MAAM,EAAA,CAAA,CAAA;2FAEP,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAHlC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;iBACnB,CAAA;;;MCCY,wBAAwB,CAAA;AASnC,IAAA,WAAA,CAAoB,OAA+B,EAAA;AAA/B,QAAA,IAAO,CAAA,OAAA,GAAP,OAAO,CAAwB;AAN5B,QAAA,IAAA,CAAA,KAAK,GAAW,OAAO,CAAC;AAEvC,QAAA,IAAM,CAAA,MAAA,GAA+C,EAAE,CAAC;AACxD,QAAA,IAAW,CAAA,WAAA,GAAY,KAAK,CAAC;AAmD7B,QAAA,IAAa,CAAA,aAAA,GAAG,MAAK;YAC3B,MAAM,SAAS,GAAG,CAAC,IAAI,IAAI,EAAE,EAAE,OAAO,EAAE,CAAC;AACzC,YAAA,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,oBAAoB,EAAE,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC;AAC1E,SAAC,CAAA;KAnDsD;IAEvD,QAAQ,GAAA;QACN,IAAI,CAAC,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;AACtC,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC5C,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;QACnD,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,kBAAkB,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;QACjE,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;KAC9C;IAEM,QAAQ,CAAC,KAAuB,EAAE,IAAa,EAAA;AACpD,QAAA,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC;QAClC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAClC,IAAI,CAAC,YAAY,EAAE,CAAC;AACpB,QAAA,OAAO,KAAK,CAAC;KACd;IAEa,YAAY,GAAA;;YACxB,IAAG,IAAI,CAAC,WAAW;gBAAE,OAAO;AAC5B,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;YAExB,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YAChC,IAAG,CAAC,GAAG,EAAE;AACP,gBAAA,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;gBACzB,OAAO;AACR,aAAA;AAED,YAAA,MAAM,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;AACjD,YAAA,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;YACzB,IAAI,CAAC,YAAY,EAAE,CAAC;SACrB,CAAA,CAAA;AAAA,KAAA;IAEO,kBAAkB,GAAA;;AACxB,QAAA,MAAM,gBAAgB,GAAG,QAAQ,CAAC,CAAA,EAAA,GAAA,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,oBAAoB,CAAC,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,EAAE,CAAC,CAAC;QAC3F,MAAM,SAAS,GAAG,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;QAClE,MAAM,GAAG,GAAG,CAAC,IAAI,IAAI,EAAE,EAAE,OAAO,EAAE,CAAC;QAEnC,IAAG,CAAC,KAAK,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE,gBAAgB,CAAC,EAAE;AAC9F,YAAA,OAAO,SAAU,CAAC;AACnB,SAAA;QAED,OAAOA,EAAI,EAAE,CAAC;KACf;IAEO,cAAc,CAAC,KAAa,EAAE,KAAa,EAAA;AACjD,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,KAAK,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC;KAC7C;;qHAvDU,wBAAwB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,sBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAxB,wBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,wBAAwB,4HAJzB,EAAE,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,CAAA;2FAID,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBANpC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,kBAAkB;AAC5B,oBAAA,QAAQ,EAAE,EAAE;AACZ,oBAAA,MAAM,EAAE,EACP;iBACF,CAAA;0GAGoB,QAAQ,EAAA,CAAA;sBAA1B,KAAK;uBAAC,UAAU,CAAA;gBACM,KAAK,EAAA,CAAA;sBAA3B,KAAK;uBAAC,cAAc,CAAA;;;MCAV,qBAAqB,CAAA;;kHAArB,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;mHAArB,qBAAqB,EAAA,YAAA,EAAA,CAR9B,wBAAwB,CAAA,EAAA,OAAA,EAAA,CAKxB,wBAAwB,CAAA,EAAA,CAAA,CAAA;AAGf,qBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,qBAAqB,YANvB,EACR,CAAA,EAAA,CAAA,CAAA;2FAKU,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAVjC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,YAAY,EAAE;wBACZ,wBAAwB;AACzB,qBAAA;AACD,oBAAA,OAAO,EAAE,EACR;AACD,oBAAA,OAAO,EAAE;wBACP,wBAAwB;AACzB,qBAAA;iBACF,CAAA;;;ACdD;;AAEG;;ACFH;;AAEG;;;;"}
|
|
1
|
+
{"version":3,"file":"ems-web-app-event-tracker.mjs","sources":["../../src/lib/event-dispatcher.service.ts","../../src/lib/event-dispatcher.component.ts","../../src/lib/event-dispatcher.module.ts","../../src/public-api.ts","../../src/ems-web-app-event-tracker.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport { HttpClient, HttpHeaders, HttpResponse, HttpRequest, HttpErrorResponse, HttpParams } from '@angular/common/http';\nimport { Observable, Subject, BehaviorSubject, throwError, of } from 'rxjs';\nimport { catchError, map, tap, take } from \"rxjs/operators\";\nimport { IDispatcherEvent } from \"./event-dispatcher.interfaces\";\nimport { v4 as uuid } from \"uuid\";\nimport { trace, empty } from \"ems-web-app-utils\";\nimport * as _ from \"underscore\";\n\n@Injectable({\n providedIn: 'root'\n})\nexport class EventDispatcherService {\n \n public jwt?: string;\n public endpoint!: string;\n\n constructor(private http: HttpClient) {}\n\n public dispatch(event: IDispatcherEvent, name?: string):Promise<any> {\n const key = `${name ?? uuid()}.json`;\n const namespace = (event.namespace ? `${event.namespace}%2F` : \"\").replace(/:::/gim,\"%2F\");\n const request = this.buildRequest(`${namespace}${key}`);\n return this.executePutRequest(request, event);\n }\n\n public getEventTemplate(type: string): IDispatcherEvent {\n return {\n type,\n agent: window.navigator.userAgent,\n time: (new Date()).getTime(),\n timestamp: (new Date()).toISOString(),\n properties: {}\n }\n }\n\n private executePutRequest(request: string, data: any, transform?: (input: any) => any, suppressErrors?: boolean, customHeaders?: any ): Promise<any> {\n const headers = this.headers(customHeaders || {});\n return this.http.put(request, data, { headers }).pipe(\n map((result: any) => \n transform ? transform(result) : result\n ),\n catchError(suppressErrors ? this.handleErrorQuietly : this.handleError)\n ).toPromise()\n }\n\n private buildRequest(endpoint: string): string {\n return `${this.endpoint}/${endpoint}`;\n }\n\n private handleError(error: HttpErrorResponse) {\n return throwError(error);\n }\n\n private handleErrorQuietly(error: HttpErrorResponse) {\n console.error(error);\n return of(null);\n }\n\n private headers(custom: any = {}): HttpHeaders {\n const headers = _.extend({ \n \"Content-Type\": \"application/json\"\n }, custom);\n return new HttpHeaders(headers);\n }\n}\n","import { Component, OnInit, Input, Output } from '@angular/core';\nimport { EventDispatcherService } from \"./event-dispatcher.service\";\nimport { IDispatcherEvent } from \"./event-dispatcher.interfaces\";\nimport { v4 as uuid } from \"uuid\";\nimport { trace, empty } from \"ems-web-app-utils\";\n\n@Component({\n selector: 'event-dispatcher',\n template: '',\n styles: [\n ]\n})\nexport class EventDispatcherComponent implements OnInit {\n\n @Input(\"endpoint\") endpoint!: string;\n @Input(\"sessionLimit\") limit: number = 1800000; //30m\n\n private _queue: {event: IDispatcherEvent, name?: string}[] = [];\n private _processing: boolean = false;\n private _sessionId!: string;\n \n constructor(private service: EventDispatcherService) {}\n\n ngOnInit(): void {\n this.service.endpoint = this.endpoint;\n this._sessionId = this.determineSessionId();\n window.localStorage.setItem(\"ems_et_sessionId\", this._sessionId);\n window.setInterval(this.updateSession, 1000);\n }\n\n public dispatch(event: IDispatcherEvent, name?: string): any {\n event.sessionId = this._sessionId;\n this._queue.push({ event, name });\n this.processQueue();\n return event;\n }\n\n private async processQueue() {\n if(this._processing) return;\n this._processing = true;\n\n const obj = this._queue.shift();\n if(!obj) {\n this._processing = false;\n return;\n }\n\n await this.service.dispatch(obj.event, obj.name);\n this._processing = false;\n this.processQueue(); \n }\n\n private determineSessionId() {\n const sessionTimestamp = parseInt(window.localStorage.getItem(\"ems_et_sessionTime\") ?? \"\");\n const sessionId = window.localStorage.getItem(\"ems_et_sessionId\");\n const now = (new Date()).getTime();\n\n if(!isNaN(sessionTimestamp) && !empty(sessionId) && this.stillInSession(now, sessionTimestamp)) {\n return sessionId!;\n }\n \n return uuid();\n }\n\n private stillInSession(time1: number, time2: number) {\n return Math.abs(time1 - time2) < this.limit;\n }\n\n private updateSession = () => {\n const timestamp = (new Date()).getTime();\n window.localStorage.setItem(\"ems_et_sessionTime\", timestamp.toString());\n window.localStorage.setItem(\"ems_et_sessionId\", this._sessionId);\n }\n\n}\n","import { NgModule } from '@angular/core';\nimport { EventDispatcherComponent } from './event-dispatcher.component';\n\n\n\n@NgModule({\n declarations: [\n EventDispatcherComponent\n ],\n imports: [\n ],\n exports: [\n EventDispatcherComponent\n ]\n})\nexport class EventDispatcherModule { }\n","/*\n * Public API Surface of event-dispatcher\n */\n\nexport * from './lib/event-dispatcher.service';\nexport * from './lib/event-dispatcher.component';\nexport * from './lib/event-dispatcher.module';\nexport * from './lib/event-dispatcher.interfaces';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["uuid","i1.EventDispatcherService"],"mappings":";;;;;;;;;;;MAYa,sBAAsB,CAAA;AAKjC,IAAA,WAAA,CAAoB,IAAgB,EAAA;AAAhB,QAAA,IAAI,CAAA,IAAA,GAAJ,IAAI,CAAY;KAAI;IAEjC,QAAQ,CAAC,KAAuB,EAAE,IAAa,EAAA;AACpD,QAAA,MAAM,GAAG,GAAG,CAAG,EAAA,IAAI,KAAJ,IAAA,IAAA,IAAI,KAAJ,KAAA,CAAA,GAAA,IAAI,GAAIA,EAAI,EAAE,CAAA,KAAA,CAAO,CAAC;QACrC,MAAM,SAAS,GAAG,CAAC,KAAK,CAAC,SAAS,GAAG,CAAG,EAAA,KAAK,CAAC,SAAS,KAAK,GAAG,EAAE,EAAE,OAAO,CAAC,QAAQ,EAAC,KAAK,CAAC,CAAC;AAC3F,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,CAAG,EAAA,SAAS,CAAG,EAAA,GAAG,CAAE,CAAA,CAAC,CAAC;QACxD,OAAO,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;KAC/C;AAEM,IAAA,gBAAgB,CAAC,IAAY,EAAA;QAClC,OAAO;YACH,IAAI;AACJ,YAAA,KAAK,EAAE,MAAM,CAAC,SAAS,CAAC,SAAS;YACjC,IAAI,EAAE,CAAC,IAAI,IAAI,EAAE,EAAE,OAAO,EAAE;YAC5B,SAAS,EAAE,CAAC,IAAI,IAAI,EAAE,EAAE,WAAW,EAAE;AACrC,YAAA,UAAU,EAAE,EAAE;SACf,CAAA;KACJ;IAEO,iBAAiB,CAAC,OAAe,EAAE,IAAS,EAAE,SAA+B,EAAE,cAAwB,EAAE,aAAmB,EAAA;QAClI,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,IAAI,EAAE,CAAC,CAAC;QAClD,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,IAAI,CACnD,GAAG,CAAC,CAAC,MAAW,KACd,SAAS,GAAI,SAAS,CAAC,MAAM,CAAC,GAAG,MAAM,CACxC,EACD,UAAU,CAAC,cAAc,GAAG,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,WAAW,CAAC,CACxE,CAAC,SAAS,EAAE,CAAA;KACd;AAEO,IAAA,YAAY,CAAC,QAAgB,EAAA;AACnC,QAAA,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAI,CAAA,EAAA,QAAQ,EAAE,CAAC;KACvC;AAEO,IAAA,WAAW,CAAC,KAAwB,EAAA;AAC1C,QAAA,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC;KAC1B;AAEO,IAAA,kBAAkB,CAAC,KAAwB,EAAA;AACjD,QAAA,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AACrB,QAAA,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC;KACjB;IAEO,OAAO,CAAC,SAAc,EAAE,EAAA;AAC9B,QAAA,MAAM,OAAO,GAAG,CAAC,CAAC,MAAM,CAAC;AACnB,YAAA,cAAc,EAAE,kBAAkB;SACpC,EAAE,MAAM,CAAC,CAAC;AACd,QAAA,OAAO,IAAI,WAAW,CAAC,OAAO,CAAC,CAAC;KACjC;;mHApDU,sBAAsB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAtB,sBAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,sBAAsB,cAFrB,MAAM,EAAA,CAAA,CAAA;2FAEP,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAHlC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;iBACnB,CAAA;;;MCCY,wBAAwB,CAAA;AASnC,IAAA,WAAA,CAAoB,OAA+B,EAAA;AAA/B,QAAA,IAAO,CAAA,OAAA,GAAP,OAAO,CAAwB;AAN5B,QAAA,IAAA,CAAA,KAAK,GAAW,OAAO,CAAC;AAEvC,QAAA,IAAM,CAAA,MAAA,GAA+C,EAAE,CAAC;AACxD,QAAA,IAAW,CAAA,WAAA,GAAY,KAAK,CAAC;AAkD7B,QAAA,IAAa,CAAA,aAAA,GAAG,MAAK;YAC3B,MAAM,SAAS,GAAG,CAAC,IAAI,IAAI,EAAE,EAAE,OAAO,EAAE,CAAC;AACzC,YAAA,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,oBAAoB,EAAE,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC;YACxE,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,kBAAkB,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;AACnE,SAAC,CAAA;KAnDsD;IAEvD,QAAQ,GAAA;QACN,IAAI,CAAC,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;AACtC,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC5C,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,kBAAkB,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;QACjE,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;KAC9C;IAEM,QAAQ,CAAC,KAAuB,EAAE,IAAa,EAAA;AACpD,QAAA,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC;QAClC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAClC,IAAI,CAAC,YAAY,EAAE,CAAC;AACpB,QAAA,OAAO,KAAK,CAAC;KACd;IAEa,YAAY,GAAA;;YACxB,IAAG,IAAI,CAAC,WAAW;gBAAE,OAAO;AAC5B,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;YAExB,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YAChC,IAAG,CAAC,GAAG,EAAE;AACP,gBAAA,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;gBACzB,OAAO;AACR,aAAA;AAED,YAAA,MAAM,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;AACjD,YAAA,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;YACzB,IAAI,CAAC,YAAY,EAAE,CAAC;SACrB,CAAA,CAAA;AAAA,KAAA;IAEO,kBAAkB,GAAA;;AACxB,QAAA,MAAM,gBAAgB,GAAG,QAAQ,CAAC,CAAA,EAAA,GAAA,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,oBAAoB,CAAC,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,EAAE,CAAC,CAAC;QAC3F,MAAM,SAAS,GAAG,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;QAClE,MAAM,GAAG,GAAG,CAAC,IAAI,IAAI,EAAE,EAAE,OAAO,EAAE,CAAC;QAEnC,IAAG,CAAC,KAAK,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE,gBAAgB,CAAC,EAAE;AAC9F,YAAA,OAAO,SAAU,CAAC;AACnB,SAAA;QAED,OAAOA,EAAI,EAAE,CAAC;KACf;IAEO,cAAc,CAAC,KAAa,EAAE,KAAa,EAAA;AACjD,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,KAAK,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC;KAC7C;;qHAtDU,wBAAwB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,sBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAxB,wBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,wBAAwB,4HAJzB,EAAE,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,CAAA;2FAID,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBANpC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,kBAAkB;AAC5B,oBAAA,QAAQ,EAAE,EAAE;AACZ,oBAAA,MAAM,EAAE,EACP;iBACF,CAAA;0GAGoB,QAAQ,EAAA,CAAA;sBAA1B,KAAK;uBAAC,UAAU,CAAA;gBACM,KAAK,EAAA,CAAA;sBAA3B,KAAK;uBAAC,cAAc,CAAA;;;MCAV,qBAAqB,CAAA;;kHAArB,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;mHAArB,qBAAqB,EAAA,YAAA,EAAA,CAR9B,wBAAwB,CAAA,EAAA,OAAA,EAAA,CAKxB,wBAAwB,CAAA,EAAA,CAAA,CAAA;AAGf,qBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,qBAAqB,YANvB,EACR,CAAA,EAAA,CAAA,CAAA;2FAKU,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAVjC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,YAAY,EAAE;wBACZ,wBAAwB;AACzB,qBAAA;AACD,oBAAA,OAAO,EAAE,EACR;AACD,oBAAA,OAAO,EAAE;wBACP,wBAAwB;AACzB,qBAAA;iBACF,CAAA;;;ACdD;;AAEG;;ACFH;;AAEG;;;;"}
|
|
@@ -66,12 +66,12 @@ class EventDispatcherComponent {
|
|
|
66
66
|
this.updateSession = () => {
|
|
67
67
|
const timestamp = (new Date()).getTime();
|
|
68
68
|
window.localStorage.setItem("ems_et_sessionTime", timestamp.toString());
|
|
69
|
+
window.localStorage.setItem("ems_et_sessionId", this._sessionId);
|
|
69
70
|
};
|
|
70
71
|
}
|
|
71
72
|
ngOnInit() {
|
|
72
73
|
this.service.endpoint = this.endpoint;
|
|
73
74
|
this._sessionId = this.determineSessionId();
|
|
74
|
-
console.log("setting session id", this._sessionId);
|
|
75
75
|
window.localStorage.setItem("ems_et_sessionId", this._sessionId);
|
|
76
76
|
window.setInterval(this.updateSession, 1000);
|
|
77
77
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ems-web-app-event-tracker.mjs","sources":["../../src/lib/event-dispatcher.service.ts","../../src/lib/event-dispatcher.component.ts","../../src/lib/event-dispatcher.module.ts","../../src/public-api.ts","../../src/ems-web-app-event-tracker.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport { HttpClient, HttpHeaders, HttpResponse, HttpRequest, HttpErrorResponse, HttpParams } from '@angular/common/http';\nimport { Observable, Subject, BehaviorSubject, throwError, of } from 'rxjs';\nimport { catchError, map, tap, take } from \"rxjs/operators\";\nimport { IDispatcherEvent } from \"./event-dispatcher.interfaces\";\nimport { v4 as uuid } from \"uuid\";\nimport { trace, empty } from \"ems-web-app-utils\";\nimport * as _ from \"underscore\";\n\n@Injectable({\n providedIn: 'root'\n})\nexport class EventDispatcherService {\n \n public jwt?: string;\n public endpoint!: string;\n\n constructor(private http: HttpClient) {}\n\n public dispatch(event: IDispatcherEvent, name?: string):Promise<any> {\n const key = `${name ?? uuid()}.json`;\n const namespace = (event.namespace ? `${event.namespace}%2F` : \"\").replace(/:::/gim,\"%2F\");\n const request = this.buildRequest(`${namespace}${key}`);\n return this.executePutRequest(request, event);\n }\n\n public getEventTemplate(type: string): IDispatcherEvent {\n return {\n type,\n agent: window.navigator.userAgent,\n time: (new Date()).getTime(),\n timestamp: (new Date()).toISOString(),\n properties: {}\n }\n }\n\n private executePutRequest(request: string, data: any, transform?: (input: any) => any, suppressErrors?: boolean, customHeaders?: any ): Promise<any> {\n const headers = this.headers(customHeaders || {});\n return this.http.put(request, data, { headers }).pipe(\n map((result: any) => \n transform ? transform(result) : result\n ),\n catchError(suppressErrors ? this.handleErrorQuietly : this.handleError)\n ).toPromise()\n }\n\n private buildRequest(endpoint: string): string {\n return `${this.endpoint}/${endpoint}`;\n }\n\n private handleError(error: HttpErrorResponse) {\n return throwError(error);\n }\n\n private handleErrorQuietly(error: HttpErrorResponse) {\n console.error(error);\n return of(null);\n }\n\n private headers(custom: any = {}): HttpHeaders {\n const headers = _.extend({ \n \"Content-Type\": \"application/json\"\n }, custom);\n return new HttpHeaders(headers);\n }\n}\n","import { Component, OnInit, Input, Output } from '@angular/core';\nimport { EventDispatcherService } from \"./event-dispatcher.service\";\nimport { IDispatcherEvent } from \"./event-dispatcher.interfaces\";\nimport { v4 as uuid } from \"uuid\";\nimport { trace, empty } from \"ems-web-app-utils\";\n\n@Component({\n selector: 'event-dispatcher',\n template: '',\n styles: [\n ]\n})\nexport class EventDispatcherComponent implements OnInit {\n\n @Input(\"endpoint\") endpoint!: string;\n @Input(\"sessionLimit\") limit: number = 1800000; //30m\n\n private _queue: {event: IDispatcherEvent, name?: string}[] = [];\n private _processing: boolean = false;\n private _sessionId!: string;\n \n constructor(private service: EventDispatcherService) {}\n\n ngOnInit(): void {\n this.service.endpoint = this.endpoint;\n this._sessionId = this.determineSessionId();\n console.log(\"setting session id\", this._sessionId);\n window.localStorage.setItem(\"ems_et_sessionId\", this._sessionId);\n window.setInterval(this.updateSession, 1000);\n }\n\n public dispatch(event: IDispatcherEvent, name?: string): any {\n event.sessionId = this._sessionId;\n this._queue.push({ event, name });\n this.processQueue();\n return event;\n }\n\n private async processQueue() {\n if(this._processing) return;\n this._processing = true;\n\n const obj = this._queue.shift();\n if(!obj) {\n this._processing = false;\n return;\n }\n\n await this.service.dispatch(obj.event, obj.name);\n this._processing = false;\n this.processQueue(); \n }\n\n private determineSessionId() {\n const sessionTimestamp = parseInt(window.localStorage.getItem(\"ems_et_sessionTime\") ?? \"\");\n const sessionId = window.localStorage.getItem(\"ems_et_sessionId\");\n const now = (new Date()).getTime();\n\n if(!isNaN(sessionTimestamp) && !empty(sessionId) && this.stillInSession(now, sessionTimestamp)) {\n return sessionId!;\n }\n \n return uuid();\n }\n\n private stillInSession(time1: number, time2: number) {\n return Math.abs(time1 - time2) < this.limit;\n }\n\n private updateSession = () => {\n const timestamp = (new Date()).getTime();\n window.localStorage.setItem(\"ems_et_sessionTime\", timestamp.toString());\n }\n\n}\n","import { NgModule } from '@angular/core';\nimport { EventDispatcherComponent } from './event-dispatcher.component';\n\n\n\n@NgModule({\n declarations: [\n EventDispatcherComponent\n ],\n imports: [\n ],\n exports: [\n EventDispatcherComponent\n ]\n})\nexport class EventDispatcherModule { }\n","/*\n * Public API Surface of event-dispatcher\n */\n\nexport * from './lib/event-dispatcher.service';\nexport * from './lib/event-dispatcher.component';\nexport * from './lib/event-dispatcher.module';\nexport * from './lib/event-dispatcher.interfaces';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["uuid","i1.EventDispatcherService"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ems-web-app-event-tracker.mjs","sources":["../../src/lib/event-dispatcher.service.ts","../../src/lib/event-dispatcher.component.ts","../../src/lib/event-dispatcher.module.ts","../../src/public-api.ts","../../src/ems-web-app-event-tracker.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport { HttpClient, HttpHeaders, HttpResponse, HttpRequest, HttpErrorResponse, HttpParams } from '@angular/common/http';\nimport { Observable, Subject, BehaviorSubject, throwError, of } from 'rxjs';\nimport { catchError, map, tap, take } from \"rxjs/operators\";\nimport { IDispatcherEvent } from \"./event-dispatcher.interfaces\";\nimport { v4 as uuid } from \"uuid\";\nimport { trace, empty } from \"ems-web-app-utils\";\nimport * as _ from \"underscore\";\n\n@Injectable({\n providedIn: 'root'\n})\nexport class EventDispatcherService {\n \n public jwt?: string;\n public endpoint!: string;\n\n constructor(private http: HttpClient) {}\n\n public dispatch(event: IDispatcherEvent, name?: string):Promise<any> {\n const key = `${name ?? uuid()}.json`;\n const namespace = (event.namespace ? `${event.namespace}%2F` : \"\").replace(/:::/gim,\"%2F\");\n const request = this.buildRequest(`${namespace}${key}`);\n return this.executePutRequest(request, event);\n }\n\n public getEventTemplate(type: string): IDispatcherEvent {\n return {\n type,\n agent: window.navigator.userAgent,\n time: (new Date()).getTime(),\n timestamp: (new Date()).toISOString(),\n properties: {}\n }\n }\n\n private executePutRequest(request: string, data: any, transform?: (input: any) => any, suppressErrors?: boolean, customHeaders?: any ): Promise<any> {\n const headers = this.headers(customHeaders || {});\n return this.http.put(request, data, { headers }).pipe(\n map((result: any) => \n transform ? transform(result) : result\n ),\n catchError(suppressErrors ? this.handleErrorQuietly : this.handleError)\n ).toPromise()\n }\n\n private buildRequest(endpoint: string): string {\n return `${this.endpoint}/${endpoint}`;\n }\n\n private handleError(error: HttpErrorResponse) {\n return throwError(error);\n }\n\n private handleErrorQuietly(error: HttpErrorResponse) {\n console.error(error);\n return of(null);\n }\n\n private headers(custom: any = {}): HttpHeaders {\n const headers = _.extend({ \n \"Content-Type\": \"application/json\"\n }, custom);\n return new HttpHeaders(headers);\n }\n}\n","import { Component, OnInit, Input, Output } from '@angular/core';\nimport { EventDispatcherService } from \"./event-dispatcher.service\";\nimport { IDispatcherEvent } from \"./event-dispatcher.interfaces\";\nimport { v4 as uuid } from \"uuid\";\nimport { trace, empty } from \"ems-web-app-utils\";\n\n@Component({\n selector: 'event-dispatcher',\n template: '',\n styles: [\n ]\n})\nexport class EventDispatcherComponent implements OnInit {\n\n @Input(\"endpoint\") endpoint!: string;\n @Input(\"sessionLimit\") limit: number = 1800000; //30m\n\n private _queue: {event: IDispatcherEvent, name?: string}[] = [];\n private _processing: boolean = false;\n private _sessionId!: string;\n \n constructor(private service: EventDispatcherService) {}\n\n ngOnInit(): void {\n this.service.endpoint = this.endpoint;\n this._sessionId = this.determineSessionId();\n window.localStorage.setItem(\"ems_et_sessionId\", this._sessionId);\n window.setInterval(this.updateSession, 1000);\n }\n\n public dispatch(event: IDispatcherEvent, name?: string): any {\n event.sessionId = this._sessionId;\n this._queue.push({ event, name });\n this.processQueue();\n return event;\n }\n\n private async processQueue() {\n if(this._processing) return;\n this._processing = true;\n\n const obj = this._queue.shift();\n if(!obj) {\n this._processing = false;\n return;\n }\n\n await this.service.dispatch(obj.event, obj.name);\n this._processing = false;\n this.processQueue(); \n }\n\n private determineSessionId() {\n const sessionTimestamp = parseInt(window.localStorage.getItem(\"ems_et_sessionTime\") ?? \"\");\n const sessionId = window.localStorage.getItem(\"ems_et_sessionId\");\n const now = (new Date()).getTime();\n\n if(!isNaN(sessionTimestamp) && !empty(sessionId) && this.stillInSession(now, sessionTimestamp)) {\n return sessionId!;\n }\n \n return uuid();\n }\n\n private stillInSession(time1: number, time2: number) {\n return Math.abs(time1 - time2) < this.limit;\n }\n\n private updateSession = () => {\n const timestamp = (new Date()).getTime();\n window.localStorage.setItem(\"ems_et_sessionTime\", timestamp.toString());\n window.localStorage.setItem(\"ems_et_sessionId\", this._sessionId);\n }\n\n}\n","import { NgModule } from '@angular/core';\nimport { EventDispatcherComponent } from './event-dispatcher.component';\n\n\n\n@NgModule({\n declarations: [\n EventDispatcherComponent\n ],\n imports: [\n ],\n exports: [\n EventDispatcherComponent\n ]\n})\nexport class EventDispatcherModule { }\n","/*\n * Public API Surface of event-dispatcher\n */\n\nexport * from './lib/event-dispatcher.service';\nexport * from './lib/event-dispatcher.component';\nexport * from './lib/event-dispatcher.module';\nexport * from './lib/event-dispatcher.interfaces';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["uuid","i1.EventDispatcherService"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"description": "This angular.io module includes a component and service that dispatch events to a given endpoint, while tracking a local session.",
|
|
5
5
|
"funding": "https://paypal.me/spencech",
|
|
6
6
|
"license": "MIT",
|
|
7
|
-
"version": "0.0.
|
|
7
|
+
"version": "0.0.21",
|
|
8
8
|
"peerDependencies": {
|
|
9
9
|
"@angular/common": "^13.2.0",
|
|
10
10
|
"@angular/core": "^13.2.0",
|