ems-web-app-event-tracker 0.0.26 → 0.0.28
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 -5
- package/esm2020/lib/event-dispatcher.interfaces.mjs +1 -1
- package/esm2020/lib/event-dispatcher.service.mjs +3 -2
- package/fesm2015/ems-web-app-event-tracker.mjs +3 -5
- package/fesm2015/ems-web-app-event-tracker.mjs.map +1 -1
- package/fesm2020/ems-web-app-event-tracker.mjs +3 -5
- package/fesm2020/ems-web-app-event-tracker.mjs.map +1 -1
- package/lib/event-dispatcher.interfaces.d.ts +1 -0
- package/package.json +1 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Component, Input } from '@angular/core';
|
|
2
2
|
import { v4 as uuid } from "uuid";
|
|
3
|
-
import {
|
|
3
|
+
import { empty, sleep } from "ems-web-app-utils";
|
|
4
4
|
import * as i0 from "@angular/core";
|
|
5
5
|
import * as i1 from "./event-dispatcher.service";
|
|
6
6
|
export class EventDispatcherComponent {
|
|
@@ -11,11 +11,9 @@ export class EventDispatcherComponent {
|
|
|
11
11
|
this._processing = false;
|
|
12
12
|
this._inactive = false;
|
|
13
13
|
this.onWindowFocus = (event) => {
|
|
14
|
-
trace("window active");
|
|
15
14
|
this._inactive = false;
|
|
16
15
|
};
|
|
17
16
|
this.onWindowBlur = (event) => {
|
|
18
|
-
trace("window inactive");
|
|
19
17
|
this._inactive = true;
|
|
20
18
|
};
|
|
21
19
|
this.updateSession = () => {
|
|
@@ -74,7 +72,6 @@ export class EventDispatcherComponent {
|
|
|
74
72
|
if (!isNaN(sessionTimestamp) && !empty(sessionId) && this.stillInSession(now, sessionTimestamp)) {
|
|
75
73
|
return sessionId;
|
|
76
74
|
}
|
|
77
|
-
trace("creating new session id");
|
|
78
75
|
return uuid();
|
|
79
76
|
}
|
|
80
77
|
stillInSession(time1, time2) {
|
|
@@ -100,4 +97,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImpor
|
|
|
100
97
|
type: Input,
|
|
101
98
|
args: ["authtoken"]
|
|
102
99
|
}] } });
|
|
103
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
100
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnQtZGlzcGF0Y2hlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL2V2ZW50LWRpc3BhdGNoZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsS0FBSyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBR2pFLE9BQU8sRUFBRSxFQUFFLElBQUksSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2xDLE9BQU8sRUFBUyxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7OztBQVF4RCxNQUFNLE9BQU8sd0JBQXdCO0lBV25DLFlBQW9CLE9BQStCO1FBQS9CLFlBQU8sR0FBUCxPQUFPLENBQXdCO1FBUjVCLFVBQUssR0FBVyxFQUFFLENBQUMsQ0FBQyxTQUFTO1FBRzVDLFdBQU0sR0FBK0MsRUFBRSxDQUFDO1FBQ3hELGdCQUFXLEdBQVksS0FBSyxDQUFDO1FBRTdCLGNBQVMsR0FBWSxLQUFLLENBQUM7UUFrQzNCLGtCQUFhLEdBQUcsQ0FBQyxLQUFTLEVBQUUsRUFBRTtZQUNwQyxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztRQUN6QixDQUFDLENBQUE7UUFFTyxpQkFBWSxHQUFHLENBQUMsS0FBUyxFQUFFLEVBQUU7WUFDbkMsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7UUFDeEIsQ0FBQyxDQUFBO1FBa0NPLGtCQUFhLEdBQUcsR0FBRyxFQUFFO1lBQzNCLElBQUcsSUFBSSxDQUFDLFNBQVM7Z0JBQUUsT0FBTztZQUMxQixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztZQUM1QyxNQUFNLFNBQVMsR0FBRyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUN6QyxNQUFNLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxvQkFBb0IsRUFBRSxTQUFT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QixDQUFDLENBQUM7UUFDbEUsTUFBTSxHQUFHLEdBQUcsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7UUFFbkMsSUFBRyxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxFQUFFLGdCQUFnQixDQUFDLEVBQUU7WUFDOUYsT0FBTyxTQUFVLENBQUM7U0FDbkI7UUFFRCxPQUFPLElBQUksRUFBRSxDQUFDO0lBQ2hCLENBQUM7SUFFTyxjQUFjLENBQUMsS0FBYSxFQUFFLEtBQWE7UUFDakQsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQzVELENBQUM7O3FIQWpGVSx3QkFBd0I7eUdBQXhCLHdCQUF3QiwySkFKekIsRUFBRTsyRkFJRCx3QkFBd0I7a0JBTnBDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLGtCQUFrQjtvQkFDNUIsUUFBUSxFQUFFLEVBQUU7b0JBQ1osTUFBTSxFQUFFLEVBQ1A7aUJBQ0Y7NkdBR29CLFFBQVE7c0JBQTFCLEtBQUs7dUJBQUMsVUFBVTtnQkFDTSxLQUFLO3NCQUEzQixLQUFLO3VCQUFDLGNBQWM7Z0JBQ0QsS0FBSztzQkFBeEIsS0FBSzt1QkFBQyxXQUFXIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIElucHV0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEV2ZW50RGlzcGF0Y2hlclNlcnZpY2UgfSBmcm9tIFwiLi9ldmVudC1kaXNwYXRjaGVyLnNlcnZpY2VcIjtcbmltcG9ydCB7IElEaXNwYXRjaGVyRXZlbnQgfSBmcm9tIFwiLi9ldmVudC1kaXNwYXRjaGVyLmludGVyZmFjZXNcIjtcbmltcG9ydCB7IHY0IGFzIHV1aWQgfSBmcm9tIFwidXVpZFwiO1xuaW1wb3J0IHsgdHJhY2UsIGVtcHR5LCBzbGVlcCB9IGZyb20gXCJlbXMtd2ViLWFwcC11dGlsc1wiO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdldmVudC1kaXNwYXRjaGVyJyxcbiAgdGVtcGxhdGU6ICcnLFxuICBzdHlsZXM6IFtcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBFdmVudERpc3BhdGNoZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuXG4gIEBJbnB1dChcImVuZHBvaW50XCIpIGVuZHBvaW50ITogc3RyaW5nO1xuICBASW5wdXQoXCJzZXNzaW9uTGltaXRcIikgbGltaXQ6IG51bWJlciA9IDMwOyAvL21pbnV0ZXNcbiAgQElucHV0KFwiYXV0aHRva2VuXCIpIHRva2VuPzogc3RyaW5nO1xuXG4gIHByaXZhdGUgX3F1ZXVlOiB7ZXZlbnQ6IElEaXNwYXRjaGVyRXZlbnQsIG5hbWU/OiBzdHJpbmd9W10gPSBbXTtcbiAgcHJpdmF0ZSBfcHJvY2Vzc2luZzogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIF9zZXNzaW9uSWQhOiBzdHJpbmc7XG4gIHByaXZhdGUgX2luYWN0aXZlOiBib29sZWFuID0gZmFsc2U7XG4gIFxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHNlcnZpY2U6IEV2ZW50RGlzcGF0Y2hlclNlcnZpY2UpIHt9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5zZXJ2aWNlLmVuZHBvaW50ID0gdGhpcy5lbmRwb2ludDtcbiAgICB0aGlzLnNlcnZpY2Uuand0ID0gdGhpcy50b2tlbjtcbiAgICB0aGlzLl9zZXNzaW9uSWQgPSB0aGlzLmRldGVybWluZVNlc3Npb25JZCgpO1xuICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbShcImVtc19ldF9zZXNzaW9uSWRcIiwgdGhpcy5fc2Vzc2lvbklkKTtcbiAgICB3aW5kb3cub25mb2N1cyA9IChldmVudDphbnkpID0+IHRoaXMub25XaW5kb3dGb2N1cyhldmVudCk7XG4gICAgd2luZG93Lm9uYmx1ciA9ICAoZXZlbnQ6YW55KSA9PiB0aGlzLm9uV2luZG93Qmx1cihldmVudCk7XG4gICAgd2luZG93LnNldEludGVydmFsKHRoaXMudXBkYXRlU2Vzc2lvbiwgMTAwMCk7XG4gIH1cblxuICBwdWJsaWMgZGlzcGF0Y2goZXZlbnQ6IElEaXNwYXRjaGVyRXZlbnQsIG5hbWU/OiBzdHJpbmcpOiBJRGlzcGF0Y2hlckV2ZW50IHtcbiAgICBldmVudC5zZXNzaW9uSWQgPSB0aGlzLl9zZXNzaW9uSWQ7XG4gICAgdGhpcy5fcXVldWUucHVzaCh7IGV2ZW50LCBuYW1lIH0pO1xuICAgIHRoaXMucHJvY2Vzc1F1ZXVlKCk7XG4gICAgcmV0dXJuIGV2ZW50O1xuICB9XG5cbiAgcHVibGljIGRpc3BhdGNoQXN5bmNFdmVudChldmVudDogSURpc3BhdGNoZXJFdmVudCwgbmFtZT86IHN0cmluZyk6IFByb21pc2U8SURpc3BhdGNoZXJFdmVudD4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyhyZXNvbHZlOiAodmFsdWU6IGFueSkgPT4gdm9pZCwgcmVqZWN0OiAodmFsdWU6IGFueSkgPT4gdm9pZCkgPT4ge1xuICAgICAgZXZlbnQuc2Vzc2lvbklkID0gdGhpcy5fc2Vzc2lvbklkO1xuICAgICAgdGhpcy5fcXVldWUucHVzaCh7IGV2ZW50LCBuYW1lIH0pO1xuICAgICAgdGhpcy5wcm9jZXNzUXVldWUoKTtcbiAgICAgXG4gICAgICB3aGlsZSghZXZlbnQucHJvY2Vzc2VkKSB7XG4gICAgICAgIGF3YWl0IHNsZWVwKDI1MCk7XG4gICAgICB9XG4gICAgICByZXNvbHZlKGV2ZW50KTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgb25XaW5kb3dGb2N1cyA9IChldmVudDphbnkpID0+IHtcbiAgICB0aGlzLl9pbmFjdGl2ZSA9IGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSBvbldpbmRvd0JsdXIgPSAoZXZlbnQ6YW55KSA9PiB7XG4gICAgdGhpcy5faW5hY3RpdmUgPSB0cnVlO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBwcm9jZXNzUXVldWUoKSB7XG4gICAgaWYodGhpcy5fcHJvY2Vzc2luZykgcmV0dXJuO1xuICAgIHRoaXMuX3Byb2Nlc3NpbmcgPSB0cnVlO1xuXG4gICAgY29uc3Qgb2JqID0gdGhpcy5fcXVldWUuc2hpZnQoKTtcbiAgICBpZighb2JqKSB7XG4gICAgICB0aGlzLl9wcm9jZXNzaW5nID0gZmFsc2U7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy5zZXJ2aWNlLmRpc3BhdGNoKG9iai5ldmVudCwgb2JqLm5hbWUpO1xuICAgIG9iai5ldmVudC5wcm9jZXNzZWQgPSB0cnVlO1xuICAgIHRoaXMuX3Byb2Nlc3NpbmcgPSBmYWxzZTtcbiAgICB0aGlzLnByb2Nlc3NRdWV1ZSgpOyBcbiAgfVxuXG4gIHByaXZhdGUgZGV0ZXJtaW5lU2Vzc2lvbklkKCkge1xuICAgIGNvbnN0IHNlc3Npb25UaW1lc3RhbXAgPSBwYXJzZUludCh3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJlbXNfZXRfc2Vzc2lvblRpbWVcIikgPz8gXCJcIik7XG4gICAgY29uc3Qgc2Vzc2lvbklkID0gd2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiZW1zX2V0X3Nlc3Npb25JZFwiKTtcbiAgICBjb25zdCBub3cgPSAobmV3IERhdGUoKSkuZ2V0VGltZSgpO1xuXG4gICAgaWYoIWlzTmFOKHNlc3Npb25UaW1lc3RhbXApICYmICFlbXB0eShzZXNzaW9uSWQpICYmIHRoaXMuc3RpbGxJblNlc3Npb24obm93LCBzZXNzaW9uVGltZXN0YW1wKSkge1xuICAgICAgcmV0dXJuIHNlc3Npb25JZCE7XG4gICAgfVxuXG4gICAgcmV0dXJuIHV1aWQoKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RpbGxJblNlc3Npb24odGltZTE6IG51bWJlciwgdGltZTI6IG51bWJlcikge1xuICAgIHJldHVybiBNYXRoLmFicyh0aW1lMSAtIHRpbWUyKSA8ICh0aGlzLmxpbWl0ICogMTAwMCAqIDYwKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlU2Vzc2lvbiA9ICgpID0+IHtcbiAgICBpZih0aGlzLl9pbmFjdGl2ZSkgcmV0dXJuO1xuICAgIGNvbnN0IHNlc3Npb25JZCA9IHRoaXMuZGV0ZXJtaW5lU2Vzc2lvbklkKCk7XG4gICAgY29uc3QgdGltZXN0YW1wID0gKG5ldyBEYXRlKCkpLmdldFRpbWUoKTtcbiAgICB3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oXCJlbXNfZXRfc2Vzc2lvblRpbWVcIiwgdGltZXN0YW1wLnRvU3RyaW5nKCkpO1xuICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbShcImVtc19ldF9zZXNzaW9uSWRcIiwgc2Vzc2lvbklkKTtcbiAgfVxuXG59XG4iXX0=
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnQtZGlzcGF0Y2hlci5pbnRlcmZhY2VzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9ldmVudC1kaXNwYXRjaGVyLmludGVyZmFjZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBpbnRlcmZhY2UgSURpc3BhdGNoZXJFdmVudCB7XG5cdGlkOiBzdHJpbmcsXG5cdHR5cGU6IHN0cmluZyxcblx0bmFtZXNwYWNlPzogc3RyaW5nLFxuXHR1c2VySWQ/OiBzdHJpbmcgfCBudW1iZXIsXG5cdHNlc3Npb25JZD86IHN0cmluZyxcblx0dGltZXN0YW1wPzogc3RyaW5nLFxuXHR0aW1lPzogbnVtYmVyLFxuXHRhZ2VudD86IHN0cmluZyxcblx0cHJvY2Vzc2VkPzogYm9vbGVhbixcblx0cHJvcGVydGllczogUmVjb3JkPHN0cmluZywgYW55PlxufVxuIl19
|
|
@@ -11,13 +11,14 @@ export class EventDispatcherService {
|
|
|
11
11
|
this.http = http;
|
|
12
12
|
}
|
|
13
13
|
dispatch(event, name) {
|
|
14
|
-
const key = `${name ??
|
|
14
|
+
const key = `${name ?? event.id}.json`;
|
|
15
15
|
const namespace = (event.namespace ? `${event.namespace}%2F` : "").replace(/:::/gim, "%2F");
|
|
16
16
|
const request = this.buildRequest(`${namespace}${key}`);
|
|
17
17
|
return this.executePutRequest(request, event);
|
|
18
18
|
}
|
|
19
19
|
getEventTemplate(type) {
|
|
20
20
|
return {
|
|
21
|
+
id: uuid(),
|
|
21
22
|
type,
|
|
22
23
|
agent: window.navigator.userAgent,
|
|
23
24
|
time: (new Date()).getTime(),
|
|
@@ -54,4 +55,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImpor
|
|
|
54
55
|
providedIn: 'root'
|
|
55
56
|
}]
|
|
56
57
|
}], ctorParameters: function () { return [{ type: i1.HttpClient }]; } });
|
|
57
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
58
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnQtZGlzcGF0Y2hlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9ldmVudC1kaXNwYXRjaGVyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQWMsV0FBVyxFQUE0RCxNQUFNLHNCQUFzQixDQUFDO0FBQ3pILE9BQU8sRUFBd0MsVUFBVSxFQUFFLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM1RSxPQUFPLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBYSxNQUFNLGdCQUFnQixDQUFDO0FBRTVELE9BQU8sRUFBRSxFQUFFLElBQUksSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRWxDLE9BQU8sS0FBSyxDQUFDLE1BQU0sWUFBWSxDQUFDOzs7QUFLaEMsTUFBTSxPQUFPLHNCQUFzQjtJQUtqQyxZQUFvQixJQUFnQjtRQUFoQixTQUFJLEdBQUosSUFBSSxDQUFZO0lBQUcsQ0FBQztJQUVqQyxRQUFRLENBQUMsS0FBdUIsRUFBRSxJQUFhO1FBQ3BELE1BQU0sR0FBRyxHQUFHLEdBQUcsSUFBSSxJQUFJLEtBQUssQ0FBQyxFQUFFLE9BQU8sQ0FBQztRQUN2QyxNQUFNLFNBQVMsR0FBRyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLFNBQVMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzNGLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxTQUFTLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUN4RCxPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUVNLGdCQUFnQixDQUFDLElBQVk7UUFDbEMsT0FBTztZQUNILEVBQUUsRUFBRSxJQUFJLEVBQUU7WUFDVixJQUFJO1lBQ0osS0FBSyxFQUFFLE1BQU0sQ0FBQyxTQUFTLENBQUMsU0FBUztZQUNqQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLENBQUMsT0FBTyxFQUFFO1lBQzVCLFNBQVMsRUFBRSxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQyxXQUFXLEVBQUU7WUFDckMsVUFBVSxFQUFFLEVBQUU7U0FDZixDQUFBO0lBQ0wsQ0FBQztJQUVPLGlCQUFpQixDQUFDLE9BQWUsRUFBRSxJQUFTLEVBQUUsU0FBK0IsRUFBRSxjQUF3QixFQUFFLGFBQW1CO1FBQ2xJLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ2xELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsSUFBSSxDQUNuRCxHQUFHLENBQUMsQ0FBQyxNQUFXLEVBQUUsRUFBRSxDQUNsQixTQUFTLENBQUMsQ0FBQyxDQUFFLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUN4QyxFQUNELFVBQVUsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUN4RSxDQUFDLFNBQVMsRUFBRSxDQUFBO0lBQ2YsQ0FBQztJQUVPLFlBQVksQ0FBQyxRQUFnQjtRQUNuQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsSUFBSSxRQUFRLEVBQUUsQ0FBQztJQUN4QyxDQUFDO0lBRU8sV0FBVyxDQUFDLEtBQXdCO1FBQzFDLE9BQU8sVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzNCLENBQUM7SUFFTyxrQkFBa0IsQ0FBQyxLQUF3QjtRQUNqRCxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3JCLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2xCLENBQUM7SUFFTyxPQUFPLENBQUMsU0FBYyxFQUFFO1FBQzlCLE1BQU0sT0FBTyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUM7WUFDbkIsY0FBYyxFQUFFLGtCQUFrQjtTQUNwQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ2QsT0FBTyxJQUFJLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNsQyxDQUFDOzttSEFyRFUsc0JBQXNCO3VIQUF0QixzQkFBc0IsY0FGckIsTUFBTTsyRkFFUCxzQkFBc0I7a0JBSGxDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSHR0cENsaWVudCwgSHR0cEhlYWRlcnMsIEh0dHBSZXNwb25zZSwgSHR0cFJlcXVlc3QsIEh0dHBFcnJvclJlc3BvbnNlLCBIdHRwUGFyYW1zIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3ViamVjdCwgQmVoYXZpb3JTdWJqZWN0LCB0aHJvd0Vycm9yLCBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgbWFwLCB0YXAsIHRha2UgfSBmcm9tIFwicnhqcy9vcGVyYXRvcnNcIjtcbmltcG9ydCB7IElEaXNwYXRjaGVyRXZlbnQgfSBmcm9tIFwiLi9ldmVudC1kaXNwYXRjaGVyLmludGVyZmFjZXNcIjtcbmltcG9ydCB7IHY0IGFzIHV1aWQgfSBmcm9tIFwidXVpZFwiO1xuaW1wb3J0IHsgdHJhY2UsIGVtcHR5IH0gZnJvbSBcImVtcy13ZWItYXBwLXV0aWxzXCI7XG5pbXBvcnQgKiBhcyBfIGZyb20gXCJ1bmRlcnNjb3JlXCI7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIEV2ZW50RGlzcGF0Y2hlclNlcnZpY2Uge1xuICBcbiAgcHVibGljIGp3dD86IHN0cmluZztcbiAgcHVibGljIGVuZHBvaW50ITogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgaHR0cDogSHR0cENsaWVudCkge31cblxuICBwdWJsaWMgZGlzcGF0Y2goZXZlbnQ6IElEaXNwYXRjaGVyRXZlbnQsIG5hbWU/OiBzdHJpbmcpOlByb21pc2U8YW55PiB7XG4gICAgY29uc3Qga2V5ID0gYCR7bmFtZSA/PyBldmVudC5pZH0uanNvbmA7XG4gICAgY29uc3QgbmFtZXNwYWNlID0gKGV2ZW50Lm5hbWVzcGFjZSA/IGAke2V2ZW50Lm5hbWVzcGFjZX0lMkZgIDogXCJcIikucmVwbGFjZSgvOjo6L2dpbSxcIiUyRlwiKTtcbiAgICBjb25zdCByZXF1ZXN0ID0gdGhpcy5idWlsZFJlcXVlc3QoYCR7bmFtZXNwYWNlfSR7a2V5fWApO1xuICAgIHJldHVybiB0aGlzLmV4ZWN1dGVQdXRSZXF1ZXN0KHJlcXVlc3QsIGV2ZW50KTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRFdmVudFRlbXBsYXRlKHR5cGU6IHN0cmluZyk6IElEaXNwYXRjaGVyRXZlbnQge1xuICAgIHJldHVybiB7XG4gICAgICAgIGlkOiB1dWlkKCksXG4gICAgICAgIHR5cGUsXG4gICAgICAgIGFnZW50OiB3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudCxcbiAgICAgICAgdGltZTogKG5ldyBEYXRlKCkpLmdldFRpbWUoKSxcbiAgICAgICAgdGltZXN0YW1wOiAobmV3IERhdGUoKSkudG9JU09TdHJpbmcoKSxcbiAgICAgICAgcHJvcGVydGllczoge31cbiAgICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZXhlY3V0ZVB1dFJlcXVlc3QocmVxdWVzdDogc3RyaW5nLCBkYXRhOiBhbnksIHRyYW5zZm9ybT86IChpbnB1dDogYW55KSA9PiBhbnksIHN1cHByZXNzRXJyb3JzPzogYm9vbGVhbiwgY3VzdG9tSGVhZGVycz86IGFueSApOiBQcm9taXNlPGFueT4ge1xuICAgIGNvbnN0IGhlYWRlcnMgPSB0aGlzLmhlYWRlcnMoY3VzdG9tSGVhZGVycyB8fCB7fSk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQocmVxdWVzdCwgZGF0YSwgeyBoZWFkZXJzIH0pLnBpcGUoXG4gICAgICBtYXAoKHJlc3VsdDogYW55KSA9PiBcbiAgICAgICAgdHJhbnNmb3JtID8gIHRyYW5zZm9ybShyZXN1bHQpIDogcmVzdWx0XG4gICAgICApLFxuICAgICAgY2F0Y2hFcnJvcihzdXBwcmVzc0Vycm9ycyA/IHRoaXMuaGFuZGxlRXJyb3JRdWlldGx5IDogdGhpcy5oYW5kbGVFcnJvcilcbiAgICApLnRvUHJvbWlzZSgpXG4gIH1cblxuICBwcml2YXRlIGJ1aWxkUmVxdWVzdChlbmRwb2ludDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7dGhpcy5lbmRwb2ludH0vJHtlbmRwb2ludH1gO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVFcnJvcihlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpIHtcbiAgICByZXR1cm4gdGhyb3dFcnJvcihlcnJvcik7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUVycm9yUXVpZXRseShlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpIHtcbiAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICByZXR1cm4gb2YobnVsbCk7XG4gIH1cblxuICBwcml2YXRlIGhlYWRlcnMoY3VzdG9tOiBhbnkgPSB7fSk6IEh0dHBIZWFkZXJzIHtcbiAgICBjb25zdCBoZWFkZXJzID0gXy5leHRlbmQoeyBcbiAgICAgICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIlxuICAgICAgIH0sIGN1c3RvbSk7XG4gICAgcmV0dXJuIG5ldyBIdHRwSGVhZGVycyhoZWFkZXJzKTtcbiAgfVxufVxuIl19
|
|
@@ -7,20 +7,21 @@ import { map, catchError } from 'rxjs/operators';
|
|
|
7
7
|
import { v4 } from 'uuid';
|
|
8
8
|
import * as _ from 'underscore';
|
|
9
9
|
import { __awaiter } from 'tslib';
|
|
10
|
-
import {
|
|
10
|
+
import { sleep, empty } from 'ems-web-app-utils';
|
|
11
11
|
|
|
12
12
|
class EventDispatcherService {
|
|
13
13
|
constructor(http) {
|
|
14
14
|
this.http = http;
|
|
15
15
|
}
|
|
16
16
|
dispatch(event, name) {
|
|
17
|
-
const key = `${name !== null && name !== void 0 ? name :
|
|
17
|
+
const key = `${name !== null && name !== void 0 ? name : event.id}.json`;
|
|
18
18
|
const namespace = (event.namespace ? `${event.namespace}%2F` : "").replace(/:::/gim, "%2F");
|
|
19
19
|
const request = this.buildRequest(`${namespace}${key}`);
|
|
20
20
|
return this.executePutRequest(request, event);
|
|
21
21
|
}
|
|
22
22
|
getEventTemplate(type) {
|
|
23
23
|
return {
|
|
24
|
+
id: v4(),
|
|
24
25
|
type,
|
|
25
26
|
agent: window.navigator.userAgent,
|
|
26
27
|
time: (new Date()).getTime(),
|
|
@@ -66,11 +67,9 @@ class EventDispatcherComponent {
|
|
|
66
67
|
this._processing = false;
|
|
67
68
|
this._inactive = false;
|
|
68
69
|
this.onWindowFocus = (event) => {
|
|
69
|
-
trace("window active");
|
|
70
70
|
this._inactive = false;
|
|
71
71
|
};
|
|
72
72
|
this.onWindowBlur = (event) => {
|
|
73
|
-
trace("window inactive");
|
|
74
73
|
this._inactive = true;
|
|
75
74
|
};
|
|
76
75
|
this.updateSession = () => {
|
|
@@ -132,7 +131,6 @@ class EventDispatcherComponent {
|
|
|
132
131
|
if (!isNaN(sessionTimestamp) && !empty(sessionId) && this.stillInSession(now, sessionTimestamp)) {
|
|
133
132
|
return sessionId;
|
|
134
133
|
}
|
|
135
|
-
trace("creating new session id");
|
|
136
134
|
return v4();
|
|
137
135
|
}
|
|
138
136
|
stillInSession(time1, time2) {
|
|
@@ -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, sleep } 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 = 30; //minutes\n @Input(\"authtoken\") token?: string;\n\n private _queue: {event: IDispatcherEvent, name?: string}[] = [];\n private _processing: boolean = false;\n private _sessionId!: string;\n private _inactive: boolean = false;\n \n constructor(private service: EventDispatcherService) {}\n\n ngOnInit(): void {\n this.service.endpoint = this.endpoint;\n this.service.jwt = this.token;\n this._sessionId = this.determineSessionId();\n window.localStorage.setItem(\"ems_et_sessionId\", this._sessionId);\n window.onfocus = (event:any) => this.onWindowFocus(event);\n window.onblur = (event:any) => this.onWindowBlur(event);\n window.setInterval(this.updateSession, 1000);\n }\n\n public dispatch(event: IDispatcherEvent, name?: string): IDispatcherEvent {\n event.sessionId = this._sessionId;\n this._queue.push({ event, name });\n this.processQueue();\n return event;\n }\n\n public dispatchAsyncEvent(event: IDispatcherEvent, name?: string): Promise<IDispatcherEvent> {\n return new Promise(async(resolve: (value: any) => void, reject: (value: any) => void) => {\n event.sessionId = this._sessionId;\n this._queue.push({ event, name });\n this.processQueue();\n \n while(!event.processed) {\n await sleep(250);\n }\n resolve(event);\n });\n }\n\n private onWindowFocus = (event:any) => {\n trace(\"window active\");\n this._inactive = false;\n }\n\n private onWindowBlur = (event:any) => {\n trace(\"window inactive\");\n this._inactive = true;\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 obj.event.processed = true;\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 trace(\"creating new session id\");\n \n return uuid();\n }\n\n private stillInSession(time1: number, time2: number) {\n return Math.abs(time1 - time2) < (this.limit * 1000 * 60);\n }\n\n private updateSession = () => {\n if(this._inactive) return;\n const sessionId = this.determineSessionId();\n const timestamp = (new Date()).getTime();\n window.localStorage.setItem(\"ems_et_sessionTime\", timestamp.toString());\n window.localStorage.setItem(\"ems_et_sessionId\", 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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"}
|
|
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 ?? event.id}.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 id: uuid(),\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, sleep } 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 = 30; //minutes\n @Input(\"authtoken\") token?: string;\n\n private _queue: {event: IDispatcherEvent, name?: string}[] = [];\n private _processing: boolean = false;\n private _sessionId!: string;\n private _inactive: boolean = false;\n \n constructor(private service: EventDispatcherService) {}\n\n ngOnInit(): void {\n this.service.endpoint = this.endpoint;\n this.service.jwt = this.token;\n this._sessionId = this.determineSessionId();\n window.localStorage.setItem(\"ems_et_sessionId\", this._sessionId);\n window.onfocus = (event:any) => this.onWindowFocus(event);\n window.onblur = (event:any) => this.onWindowBlur(event);\n window.setInterval(this.updateSession, 1000);\n }\n\n public dispatch(event: IDispatcherEvent, name?: string): IDispatcherEvent {\n event.sessionId = this._sessionId;\n this._queue.push({ event, name });\n this.processQueue();\n return event;\n }\n\n public dispatchAsyncEvent(event: IDispatcherEvent, name?: string): Promise<IDispatcherEvent> {\n return new Promise(async(resolve: (value: any) => void, reject: (value: any) => void) => {\n event.sessionId = this._sessionId;\n this._queue.push({ event, name });\n this.processQueue();\n \n while(!event.processed) {\n await sleep(250);\n }\n resolve(event);\n });\n }\n\n private onWindowFocus = (event:any) => {\n this._inactive = false;\n }\n\n private onWindowBlur = (event:any) => {\n this._inactive = true;\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 obj.event.processed = true;\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 * 1000 * 60);\n }\n\n private updateSession = () => {\n if(this._inactive) return;\n const sessionId = this.determineSessionId();\n const timestamp = (new Date()).getTime();\n window.localStorage.setItem(\"ems_et_sessionTime\", timestamp.toString());\n window.localStorage.setItem(\"ems_et_sessionId\", 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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"}
|
|
@@ -6,20 +6,21 @@ import { throwError, of } from 'rxjs';
|
|
|
6
6
|
import { map, catchError } from 'rxjs/operators';
|
|
7
7
|
import { v4 } from 'uuid';
|
|
8
8
|
import * as _ from 'underscore';
|
|
9
|
-
import {
|
|
9
|
+
import { sleep, empty } from 'ems-web-app-utils';
|
|
10
10
|
|
|
11
11
|
class EventDispatcherService {
|
|
12
12
|
constructor(http) {
|
|
13
13
|
this.http = http;
|
|
14
14
|
}
|
|
15
15
|
dispatch(event, name) {
|
|
16
|
-
const key = `${name ??
|
|
16
|
+
const key = `${name ?? event.id}.json`;
|
|
17
17
|
const namespace = (event.namespace ? `${event.namespace}%2F` : "").replace(/:::/gim, "%2F");
|
|
18
18
|
const request = this.buildRequest(`${namespace}${key}`);
|
|
19
19
|
return this.executePutRequest(request, event);
|
|
20
20
|
}
|
|
21
21
|
getEventTemplate(type) {
|
|
22
22
|
return {
|
|
23
|
+
id: v4(),
|
|
23
24
|
type,
|
|
24
25
|
agent: window.navigator.userAgent,
|
|
25
26
|
time: (new Date()).getTime(),
|
|
@@ -65,11 +66,9 @@ class EventDispatcherComponent {
|
|
|
65
66
|
this._processing = false;
|
|
66
67
|
this._inactive = false;
|
|
67
68
|
this.onWindowFocus = (event) => {
|
|
68
|
-
trace("window active");
|
|
69
69
|
this._inactive = false;
|
|
70
70
|
};
|
|
71
71
|
this.onWindowBlur = (event) => {
|
|
72
|
-
trace("window inactive");
|
|
73
72
|
this._inactive = true;
|
|
74
73
|
};
|
|
75
74
|
this.updateSession = () => {
|
|
@@ -128,7 +127,6 @@ class EventDispatcherComponent {
|
|
|
128
127
|
if (!isNaN(sessionTimestamp) && !empty(sessionId) && this.stillInSession(now, sessionTimestamp)) {
|
|
129
128
|
return sessionId;
|
|
130
129
|
}
|
|
131
|
-
trace("creating new session id");
|
|
132
130
|
return v4();
|
|
133
131
|
}
|
|
134
132
|
stillInSession(time1, time2) {
|
|
@@ -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, sleep } 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 = 30; //minutes\n @Input(\"authtoken\") token?: string;\n\n private _queue: {event: IDispatcherEvent, name?: string}[] = [];\n private _processing: boolean = false;\n private _sessionId!: string;\n private _inactive: boolean = false;\n \n constructor(private service: EventDispatcherService) {}\n\n ngOnInit(): void {\n this.service.endpoint = this.endpoint;\n this.service.jwt = this.token;\n this._sessionId = this.determineSessionId();\n window.localStorage.setItem(\"ems_et_sessionId\", this._sessionId);\n window.onfocus = (event:any) => this.onWindowFocus(event);\n window.onblur = (event:any) => this.onWindowBlur(event);\n window.setInterval(this.updateSession, 1000);\n }\n\n public dispatch(event: IDispatcherEvent, name?: string): IDispatcherEvent {\n event.sessionId = this._sessionId;\n this._queue.push({ event, name });\n this.processQueue();\n return event;\n }\n\n public dispatchAsyncEvent(event: IDispatcherEvent, name?: string): Promise<IDispatcherEvent> {\n return new Promise(async(resolve: (value: any) => void, reject: (value: any) => void) => {\n event.sessionId = this._sessionId;\n this._queue.push({ event, name });\n this.processQueue();\n \n while(!event.processed) {\n await sleep(250);\n }\n resolve(event);\n });\n }\n\n private onWindowFocus = (event:any) => {\n trace(\"window active\");\n this._inactive = false;\n }\n\n private onWindowBlur = (event:any) => {\n trace(\"window inactive\");\n this._inactive = true;\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 obj.event.processed = true;\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 trace(\"creating new session id\");\n \n return uuid();\n }\n\n private stillInSession(time1: number, time2: number) {\n return Math.abs(time1 - time2) < (this.limit * 1000 * 60);\n }\n\n private updateSession = () => {\n if(this._inactive) return;\n const sessionId = this.determineSessionId();\n const timestamp = (new Date()).getTime();\n window.localStorage.setItem(\"ems_et_sessionTime\", timestamp.toString());\n window.localStorage.setItem(\"ems_et_sessionId\", 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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"}
|
|
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 ?? event.id}.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 id: uuid(),\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, sleep } 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 = 30; //minutes\n @Input(\"authtoken\") token?: string;\n\n private _queue: {event: IDispatcherEvent, name?: string}[] = [];\n private _processing: boolean = false;\n private _sessionId!: string;\n private _inactive: boolean = false;\n \n constructor(private service: EventDispatcherService) {}\n\n ngOnInit(): void {\n this.service.endpoint = this.endpoint;\n this.service.jwt = this.token;\n this._sessionId = this.determineSessionId();\n window.localStorage.setItem(\"ems_et_sessionId\", this._sessionId);\n window.onfocus = (event:any) => this.onWindowFocus(event);\n window.onblur = (event:any) => this.onWindowBlur(event);\n window.setInterval(this.updateSession, 1000);\n }\n\n public dispatch(event: IDispatcherEvent, name?: string): IDispatcherEvent {\n event.sessionId = this._sessionId;\n this._queue.push({ event, name });\n this.processQueue();\n return event;\n }\n\n public dispatchAsyncEvent(event: IDispatcherEvent, name?: string): Promise<IDispatcherEvent> {\n return new Promise(async(resolve: (value: any) => void, reject: (value: any) => void) => {\n event.sessionId = this._sessionId;\n this._queue.push({ event, name });\n this.processQueue();\n \n while(!event.processed) {\n await sleep(250);\n }\n resolve(event);\n });\n }\n\n private onWindowFocus = (event:any) => {\n this._inactive = false;\n }\n\n private onWindowBlur = (event:any) => {\n this._inactive = true;\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 obj.event.processed = true;\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 * 1000 * 60);\n }\n\n private updateSession = () => {\n if(this._inactive) return;\n const sessionId = this.determineSessionId();\n const timestamp = (new Date()).getTime();\n window.localStorage.setItem(\"ems_et_sessionTime\", timestamp.toString());\n window.localStorage.setItem(\"ems_et_sessionId\", 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.28",
|
|
8
8
|
"peerDependencies": {
|
|
9
9
|
"@angular/common": "^13.2.0",
|
|
10
10
|
"@angular/core": "^13.2.0",
|