ems-web-app-event-tracker 0.0.10 → 0.0.13
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 +3 -3
- package/esm2020/lib/event-dispatcher.interfaces.mjs +2 -0
- package/esm2020/lib/event-dispatcher.service.mjs +12 -2
- package/esm2020/public-api.mjs +2 -1
- package/fesm2015/ems-web-app-event-tracker.mjs +13 -3
- package/fesm2015/ems-web-app-event-tracker.mjs.map +1 -1
- package/fesm2020/ems-web-app-event-tracker.mjs +13 -3
- package/fesm2020/ems-web-app-event-tracker.mjs.map +1 -1
- package/lib/event-dispatcher.component.d.ts +2 -1
- package/lib/event-dispatcher.interfaces.d.ts +10 -0
- package/lib/event-dispatcher.service.d.ts +3 -1
- package/package.json +1 -1
- package/public-api.d.ts +1 -0
|
@@ -55,12 +55,12 @@ export class EventDispatcherComponent {
|
|
|
55
55
|
}
|
|
56
56
|
}
|
|
57
57
|
EventDispatcherComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: EventDispatcherComponent, deps: [{ token: i1.EventDispatcherService }], target: i0.ɵɵFactoryTarget.Component });
|
|
58
|
-
EventDispatcherComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.7", type: EventDispatcherComponent, selector: "event-dispatcher", inputs: { endpoint: "endpoint", session: "session", token: "token", limit: ["sessionLimit", "limit"] }, ngImport: i0, template: '
|
|
58
|
+
EventDispatcherComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.7", type: EventDispatcherComponent, selector: "event-dispatcher", inputs: { endpoint: "endpoint", session: "session", token: "token", limit: ["sessionLimit", "limit"] }, ngImport: i0, template: '', isInline: true });
|
|
59
59
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: EventDispatcherComponent, decorators: [{
|
|
60
60
|
type: Component,
|
|
61
61
|
args: [{
|
|
62
62
|
selector: 'event-dispatcher',
|
|
63
|
-
template: '
|
|
63
|
+
template: '',
|
|
64
64
|
styles: []
|
|
65
65
|
}]
|
|
66
66
|
}], ctorParameters: function () { return [{ type: i1.EventDispatcherService }]; }, propDecorators: { endpoint: [{
|
|
@@ -76,4 +76,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImpor
|
|
|
76
76
|
type: Input,
|
|
77
77
|
args: ["sessionLimit"]
|
|
78
78
|
}] } });
|
|
79
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
79
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnQtZGlzcGF0Y2hlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL2V2ZW50LWRpc3BhdGNoZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsS0FBSyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBR2pFLE9BQU8sRUFBRSxFQUFFLElBQUksSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2xDLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7OztBQVFqRCxNQUFNLE9BQU8sd0JBQXdCO0lBWW5DLFlBQW9CLE9BQStCO1FBQS9CLFlBQU8sR0FBUCxPQUFPLENBQXdCO1FBUDVCLFVBQUssR0FBVyxPQUFPLENBQUMsQ0FBQyxLQUFLO1FBRTdDLFdBQU0sR0FBK0MsRUFBRSxDQUFDO1FBQ3hELGdCQUFXLEdBQVksS0FBSyxDQUFDO1FBdUQ3QixrQkFBYSxHQUFHLEdBQUcsRUFBRTtZQUMzQixNQUFNLFNBQVMsR0FBRyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUN6QyxNQUFNLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLFNBQVMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQ25FLENBQUMsQ0FBQTtJQXBERCxDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDO1FBQ2hFLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7UUFDdEMsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQTtRQUNyQyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQztRQUNoRSxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQzVDLE1BQU0sQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLGtCQUFrQixFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNqRSxNQUFNLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVNLFFBQVEsQ0FBQyxLQUF1QixFQUFFLElBQWE7UUFDcEQsS0FBSyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO1FBQ2xDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFDbEMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3BCLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVPLEtBQUssQ0FBQyxZQUFZO1FBQ3hCLElBQUcsSUFBSSxDQUFDLFdBQVc7WUFBRSxPQUFPO1FBQzVCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1FBRXhCLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDaEMsSUFBRyxDQUFDLEdBQUcsRUFBRTtZQUNQLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO1lBQ3pCLE9BQU87U0FDUjtRQUVELE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDakQsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3RCLENBQUM7SUFFTyxrQkFBa0I7UUFDeEIsTUFBTSxnQkFBZ0IsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ3BGLE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDbEUsTUFBTSxHQUFHLEdBQUcsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7UUFFbkMsSUFBRyxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxFQUFFLGdCQUFnQixDQUFDLEVBQUU7WUFDOUYsT0FBTyxTQUFVLENBQUM7U0FDbkI7UUFFRCxPQUFPLElBQUksRUFBRSxDQUFDO0lBQ2hCLENBQUM7SUFFTyxjQUFjLENBQUMsS0FBYSxFQUFFLEtBQWE7UUFDakQsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQzlDLENBQUM7O3FIQTdEVSx3QkFBd0I7eUdBQXhCLHdCQUF3QixnS0FKekIsRUFBRTsyRkFJRCx3QkFBd0I7a0JBTnBDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLGtCQUFrQjtvQkFDNUIsUUFBUSxFQUFFLEVBQUU7b0JBQ1osTUFBTSxFQUFFLEVBQ1A7aUJBQ0Y7NkdBR29CLFFBQVE7c0JBQTFCLEtBQUs7dUJBQUMsVUFBVTtnQkFDQyxPQUFPO3NCQUF4QixLQUFLO3VCQUFDLFNBQVM7Z0JBQ0EsS0FBSztzQkFBcEIsS0FBSzt1QkFBQyxPQUFPO2dCQUNTLEtBQUs7c0JBQTNCLEtBQUs7dUJBQUMsY0FBYyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBJbnB1dCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBFdmVudERpc3BhdGNoZXJTZXJ2aWNlIH0gZnJvbSBcIi4vZXZlbnQtZGlzcGF0Y2hlci5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBJRGlzcGF0Y2hlckV2ZW50IH0gZnJvbSBcIi4vZXZlbnQtZGlzcGF0Y2hlci5pbnRlcmZhY2VzXCI7XG5pbXBvcnQgeyB2NCBhcyB1dWlkIH0gZnJvbSBcInV1aWRcIjtcbmltcG9ydCB7IHRyYWNlLCBlbXB0eSB9IGZyb20gXCJlbXMtd2ViLWFwcC11dGlsc1wiO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdldmVudC1kaXNwYXRjaGVyJyxcbiAgdGVtcGxhdGU6ICcnLFxuICBzdHlsZXM6IFtcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBFdmVudERpc3BhdGNoZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuXG4gIEBJbnB1dChcImVuZHBvaW50XCIpIGVuZHBvaW50ITogc3RyaW5nO1xuICBASW5wdXQoXCJzZXNzaW9uXCIpIHNlc3Npb24/OiBhbnk7XG4gIEBJbnB1dChcInRva2VuXCIpIHRva2VuPzogc3RyaW5nO1xuICBASW5wdXQoXCJzZXNzaW9uTGltaXRcIikgbGltaXQ6IG51bWJlciA9IDE4MDAwMDA7IC8vMzBtXG5cbiAgcHJpdmF0ZSBfcXVldWU6IHtldmVudDogSURpc3BhdGNoZXJFdmVudCwgbmFtZT86IHN0cmluZ31bXSA9IFtdO1xuICBwcml2YXRlIF9wcm9jZXNzaW5nOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgX3Rva2VuSWQhOiBzdHJpbmc7XG4gIHByaXZhdGUgX3Nlc3Npb25JZCE6IHN0cmluZztcbiAgXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgc2VydmljZTogRXZlbnREaXNwYXRjaGVyU2VydmljZSkge1xuICAgXG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnNlcnZpY2Uuand0ID0gdGhpcy5zZXNzaW9uPy5pZFRva2VuLmp3dFRva2VuID8/IHRoaXMudG9rZW47XG4gICAgdGhpcy5zZXJ2aWNlLmVuZHBvaW50ID0gdGhpcy5lbmRwb2ludDtcbiAgICB0cmFjZSh0aGlzLnNlcnZpY2Uuand0LCB0aGlzLnNlc3Npb24pXG4gICAgdGhpcy5fdG9rZW5JZCA9IHRoaXMuc2Vzc2lvbj8uaWRUb2tlbi5wYXlsb2FkLmp0aSA/PyB0aGlzLnRva2VuO1xuICAgIHRoaXMuX3Nlc3Npb25JZCA9IHRoaXMuZGV0ZXJtaW5lU2Vzc2lvbklkKCk7XG4gICAgd2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKFwiZW1zX2V0X3Nlc3Npb25JZFwiLCB0aGlzLl9zZXNzaW9uSWQpO1xuICAgIHdpbmRvdy5zZXRJbnRlcnZhbCh0aGlzLnVwZGF0ZVNlc3Npb24sIDEwMDApO1xuICB9XG5cbiAgcHVibGljIGRpc3BhdGNoKGV2ZW50OiBJRGlzcGF0Y2hlckV2ZW50LCBuYW1lPzogc3RyaW5nKTogYW55IHtcbiAgICBldmVudC5zZXNzaW9uSWQgPSB0aGlzLl9zZXNzaW9uSWQ7XG4gICAgdGhpcy5fcXVldWUucHVzaCh7IGV2ZW50LCBuYW1lIH0pO1xuICAgIHRoaXMucHJvY2Vzc1F1ZXVlKCk7XG4gICAgcmV0dXJuIGV2ZW50O1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBwcm9jZXNzUXVldWUoKSB7XG4gICAgaWYodGhpcy5fcHJvY2Vzc2luZykgcmV0dXJuO1xuICAgIHRoaXMuX3Byb2Nlc3NpbmcgPSB0cnVlO1xuXG4gICAgY29uc3Qgb2JqID0gdGhpcy5fcXVldWUuc2hpZnQoKTtcbiAgICBpZighb2JqKSB7XG4gICAgICB0aGlzLl9wcm9jZXNzaW5nID0gZmFsc2U7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy5zZXJ2aWNlLmRpc3BhdGNoKG9iai5ldmVudCwgb2JqLm5hbWUpO1xuICAgIHRoaXMucHJvY2Vzc1F1ZXVlKCk7IFxuICB9XG5cbiAgcHJpdmF0ZSBkZXRlcm1pbmVTZXNzaW9uSWQoKSB7XG4gICAgY29uc3Qgc2Vzc2lvblRpbWVzdGFtcCA9IHBhcnNlSW50KHdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLl90b2tlbklkKSA/PyBcIlwiKTtcbiAgICBjb25zdCBzZXNzaW9uSWQgPSB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJlbXNfZXRfc2Vzc2lvbklkXCIpO1xuICAgIGNvbnN0IG5vdyA9IChuZXcgRGF0ZSgpKS5nZXRUaW1lKCk7XG5cbiAgICBpZighaXNOYU4oc2Vzc2lvblRpbWVzdGFtcCkgJiYgIWVtcHR5KHNlc3Npb25JZCkgJiYgdGhpcy5zdGlsbEluU2Vzc2lvbihub3csIHNlc3Npb25UaW1lc3RhbXApKSB7XG4gICAgICByZXR1cm4gc2Vzc2lvbklkITtcbiAgICB9XG4gICAgXG4gICAgcmV0dXJuIHV1aWQoKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RpbGxJblNlc3Npb24odGltZTE6IG51bWJlciwgdGltZTI6IG51bWJlcikge1xuICAgIHJldHVybiBNYXRoLmFicyh0aW1lMSAtIHRpbWUyKSA8IHRoaXMubGltaXQ7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVNlc3Npb24gPSAoKSA9PiB7XG4gICAgY29uc3QgdGltZXN0YW1wID0gKG5ldyBEYXRlKCkpLmdldFRpbWUoKTtcbiAgICB3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0odGhpcy5fdG9rZW5JZCwgdGltZXN0YW1wLnRvU3RyaW5nKCkpO1xuICB9XG5cbn1cbiJdfQ==
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnQtZGlzcGF0Y2hlci5pbnRlcmZhY2VzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9ldmVudC1kaXNwYXRjaGVyLmludGVyZmFjZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBpbnRlcmZhY2UgSURpc3BhdGNoZXJFdmVudCB7XG5cdHR5cGU6IHN0cmluZyxcblx0bmFtZXNwYWNlPzogc3RyaW5nLFxuXHR1c2VySWQ/OiBzdHJpbmcgfCBudW1iZXIsXG5cdHNlc3Npb25JZD86IHN0cmluZyxcblx0dGltZXN0YW1wPzogc3RyaW5nLFxuXHR0aW1lPzogbnVtYmVyLFxuXHRhZ2VudD86IHN0cmluZyxcblx0cHJvcGVydGllcz86IFJlY29yZDxzdHJpbmcsIGFueT5cbn1cbiJdfQ==
|
|
@@ -12,9 +12,19 @@ export class EventDispatcherService {
|
|
|
12
12
|
}
|
|
13
13
|
dispatch(event, name) {
|
|
14
14
|
const key = `${name ?? uuid()}.json`;
|
|
15
|
-
const
|
|
15
|
+
const namespace = event.namespace ? `${event.namespace}/` : "";
|
|
16
|
+
const request = this.buildRequest(`${namespace}${key}.json`);
|
|
16
17
|
return this.executePutRequest(request, event);
|
|
17
18
|
}
|
|
19
|
+
getEventTemplate(type) {
|
|
20
|
+
return {
|
|
21
|
+
type,
|
|
22
|
+
agent: window.navigator.userAgent,
|
|
23
|
+
time: (new Date()).getTime(),
|
|
24
|
+
timestamp: (new Date()).toISOString(),
|
|
25
|
+
properties: {}
|
|
26
|
+
};
|
|
27
|
+
}
|
|
18
28
|
executePutRequest(request, data, transform, suppressErrors, customHeaders) {
|
|
19
29
|
const headers = this.headers(customHeaders || {});
|
|
20
30
|
return this.http.put(request, data, { headers }).pipe(map((result) => transform ? transform(result) : result), catchError(suppressErrors ? this.handleErrorQuietly : this.handleError)).toPromise();
|
|
@@ -44,4 +54,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImpor
|
|
|
44
54
|
providedIn: 'root'
|
|
45
55
|
}]
|
|
46
56
|
}], ctorParameters: function () { return [{ type: i1.HttpClient }]; } });
|
|
47
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
57
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnQtZGlzcGF0Y2hlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9ldmVudC1kaXNwYXRjaGVyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQWMsV0FBVyxFQUE0RCxNQUFNLHNCQUFzQixDQUFDO0FBQ3pILE9BQU8sRUFBd0MsVUFBVSxFQUFFLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM1RSxPQUFPLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBYSxNQUFNLGdCQUFnQixDQUFDO0FBRTVELE9BQU8sRUFBRSxFQUFFLElBQUksSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRWxDLE9BQU8sS0FBSyxDQUFDLE1BQU0sWUFBWSxDQUFDOzs7QUFLaEMsTUFBTSxPQUFPLHNCQUFzQjtJQUtqQyxZQUFvQixJQUFnQjtRQUFoQixTQUFJLEdBQUosSUFBSSxDQUFZO0lBQUcsQ0FBQztJQUVqQyxRQUFRLENBQUMsS0FBdUIsRUFBRSxJQUFhO1FBQ3BELE1BQU0sR0FBRyxHQUFHLEdBQUcsSUFBSSxJQUFJLElBQUksRUFBRSxPQUFPLENBQUM7UUFDckMsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUMvRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsU0FBUyxHQUFHLEdBQUcsT0FBTyxDQUFDLENBQUM7UUFDN0QsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFFTSxnQkFBZ0IsQ0FBQyxJQUFZO1FBQ2xDLE9BQU87WUFDSCxJQUFJO1lBQ0osS0FBSyxFQUFFLE1BQU0sQ0FBQyxTQUFTLENBQUMsU0FBUztZQUNqQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLENBQUMsT0FBTyxFQUFFO1lBQzVCLFNBQVMsRUFBRSxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQyxXQUFXLEVBQUU7WUFDckMsVUFBVSxFQUFFLEVBQUU7U0FDZixDQUFBO0lBQ0wsQ0FBQztJQUVPLGlCQUFpQixDQUFDLE9BQWUsRUFBRSxJQUFTLEVBQUUsU0FBK0IsRUFBRSxjQUF3QixFQUFFLGFBQW1CO1FBQ2xJLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ2xELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsSUFBSSxDQUNuRCxHQUFHLENBQUMsQ0FBQyxNQUFXLEVBQUUsRUFBRSxDQUNsQixTQUFTLENBQUMsQ0FBQyxDQUFFLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUN4QyxFQUNELFVBQVUsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUN4RSxDQUFDLFNBQVMsRUFBRSxDQUFBO0lBQ2YsQ0FBQztJQUVPLFlBQVksQ0FBQyxRQUFnQjtRQUNuQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsSUFBSSxRQUFRLEVBQUUsQ0FBQztJQUN4QyxDQUFDO0lBRU8sV0FBVyxDQUFDLEtBQXdCO1FBQzFDLE9BQU8sVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzNCLENBQUM7SUFFTyxrQkFBa0IsQ0FBQyxLQUF3QjtRQUNqRCxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3JCLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2xCLENBQUM7SUFFTyxPQUFPLENBQUMsU0FBYyxFQUFFO1FBQzlCLE1BQU0sT0FBTyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUM7WUFDbkIsY0FBYyxFQUFFLGtCQUFrQjtTQUNwQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ2QsT0FBTyxJQUFJLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNsQyxDQUFDOzttSEFwRFUsc0JBQXNCO3VIQUF0QixzQkFBc0IsY0FGckIsTUFBTTsyRkFFUCxzQkFBc0I7a0JBSGxDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSHR0cENsaWVudCwgSHR0cEhlYWRlcnMsIEh0dHBSZXNwb25zZSwgSHR0cFJlcXVlc3QsIEh0dHBFcnJvclJlc3BvbnNlLCBIdHRwUGFyYW1zIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3ViamVjdCwgQmVoYXZpb3JTdWJqZWN0LCB0aHJvd0Vycm9yLCBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgbWFwLCB0YXAsIHRha2UgfSBmcm9tIFwicnhqcy9vcGVyYXRvcnNcIjtcbmltcG9ydCB7IElEaXNwYXRjaGVyRXZlbnQgfSBmcm9tIFwiLi9ldmVudC1kaXNwYXRjaGVyLmludGVyZmFjZXNcIjtcbmltcG9ydCB7IHY0IGFzIHV1aWQgfSBmcm9tIFwidXVpZFwiO1xuaW1wb3J0IHsgdHJhY2UsIGVtcHR5IH0gZnJvbSBcImVtcy13ZWItYXBwLXV0aWxzXCI7XG5pbXBvcnQgKiBhcyBfIGZyb20gXCJ1bmRlcnNjb3JlXCI7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIEV2ZW50RGlzcGF0Y2hlclNlcnZpY2Uge1xuICBcbiAgcHVibGljIGp3dD86IHN0cmluZztcbiAgcHVibGljIGVuZHBvaW50ITogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgaHR0cDogSHR0cENsaWVudCkge31cblxuICBwdWJsaWMgZGlzcGF0Y2goZXZlbnQ6IElEaXNwYXRjaGVyRXZlbnQsIG5hbWU/OiBzdHJpbmcpOlByb21pc2U8YW55PiB7XG4gICAgY29uc3Qga2V5ID0gYCR7bmFtZSA/PyB1dWlkKCl9Lmpzb25gO1xuICAgIGNvbnN0IG5hbWVzcGFjZSA9IGV2ZW50Lm5hbWVzcGFjZSA/IGAke2V2ZW50Lm5hbWVzcGFjZX0vYCA6IFwiXCI7XG4gICAgY29uc3QgcmVxdWVzdCA9IHRoaXMuYnVpbGRSZXF1ZXN0KGAke25hbWVzcGFjZX0ke2tleX0uanNvbmApO1xuICAgIHJldHVybiB0aGlzLmV4ZWN1dGVQdXRSZXF1ZXN0KHJlcXVlc3QsIGV2ZW50KTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRFdmVudFRlbXBsYXRlKHR5cGU6IHN0cmluZyk6IElEaXNwYXRjaGVyRXZlbnQge1xuICAgIHJldHVybiB7XG4gICAgICAgIHR5cGUsXG4gICAgICAgIGFnZW50OiB3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudCxcbiAgICAgICAgdGltZTogKG5ldyBEYXRlKCkpLmdldFRpbWUoKSxcbiAgICAgICAgdGltZXN0YW1wOiAobmV3IERhdGUoKSkudG9JU09TdHJpbmcoKSxcbiAgICAgICAgcHJvcGVydGllczoge31cbiAgICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZXhlY3V0ZVB1dFJlcXVlc3QocmVxdWVzdDogc3RyaW5nLCBkYXRhOiBhbnksIHRyYW5zZm9ybT86IChpbnB1dDogYW55KSA9PiBhbnksIHN1cHByZXNzRXJyb3JzPzogYm9vbGVhbiwgY3VzdG9tSGVhZGVycz86IGFueSApOiBQcm9taXNlPGFueT4ge1xuICAgIGNvbnN0IGhlYWRlcnMgPSB0aGlzLmhlYWRlcnMoY3VzdG9tSGVhZGVycyB8fCB7fSk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQocmVxdWVzdCwgZGF0YSwgeyBoZWFkZXJzIH0pLnBpcGUoXG4gICAgICBtYXAoKHJlc3VsdDogYW55KSA9PiBcbiAgICAgICAgdHJhbnNmb3JtID8gIHRyYW5zZm9ybShyZXN1bHQpIDogcmVzdWx0XG4gICAgICApLFxuICAgICAgY2F0Y2hFcnJvcihzdXBwcmVzc0Vycm9ycyA/IHRoaXMuaGFuZGxlRXJyb3JRdWlldGx5IDogdGhpcy5oYW5kbGVFcnJvcilcbiAgICApLnRvUHJvbWlzZSgpXG4gIH1cblxuICBwcml2YXRlIGJ1aWxkUmVxdWVzdChlbmRwb2ludDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7dGhpcy5lbmRwb2ludH0vJHtlbmRwb2ludH1gO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVFcnJvcihlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpIHtcbiAgICByZXR1cm4gdGhyb3dFcnJvcihlcnJvcik7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUVycm9yUXVpZXRseShlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpIHtcbiAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICByZXR1cm4gb2YobnVsbCk7XG4gIH1cblxuICBwcml2YXRlIGhlYWRlcnMoY3VzdG9tOiBhbnkgPSB7fSk6IEh0dHBIZWFkZXJzIHtcbiAgICBjb25zdCBoZWFkZXJzID0gXy5leHRlbmQoeyBcbiAgICAgICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIlxuICAgICAgIH0sIGN1c3RvbSk7XG4gICAgcmV0dXJuIG5ldyBIdHRwSGVhZGVycyhoZWFkZXJzKTtcbiAgfVxufVxuIl19
|
package/esm2020/public-api.mjs
CHANGED
|
@@ -4,4 +4,5 @@
|
|
|
4
4
|
export * from './lib/event-dispatcher.service';
|
|
5
5
|
export * from './lib/event-dispatcher.component';
|
|
6
6
|
export * from './lib/event-dispatcher.module';
|
|
7
|
-
|
|
7
|
+
export * from './lib/event-dispatcher.interfaces';
|
|
8
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxnQ0FBZ0MsQ0FBQztBQUMvQyxjQUFjLGtDQUFrQyxDQUFDO0FBQ2pELGNBQWMsK0JBQStCLENBQUM7QUFDOUMsY0FBYyxtQ0FBbUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBQdWJsaWMgQVBJIFN1cmZhY2Ugb2YgZXZlbnQtZGlzcGF0Y2hlclxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vbGliL2V2ZW50LWRpc3BhdGNoZXIuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9ldmVudC1kaXNwYXRjaGVyLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9ldmVudC1kaXNwYXRjaGVyLm1vZHVsZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9ldmVudC1kaXNwYXRjaGVyLmludGVyZmFjZXMnO1xuIl19
|
|
@@ -15,9 +15,19 @@ class EventDispatcherService {
|
|
|
15
15
|
}
|
|
16
16
|
dispatch(event, name) {
|
|
17
17
|
const key = `${name !== null && name !== void 0 ? name : v4()}.json`;
|
|
18
|
-
const
|
|
18
|
+
const namespace = event.namespace ? `${event.namespace}/` : "";
|
|
19
|
+
const request = this.buildRequest(`${namespace}${key}.json`);
|
|
19
20
|
return this.executePutRequest(request, event);
|
|
20
21
|
}
|
|
22
|
+
getEventTemplate(type) {
|
|
23
|
+
return {
|
|
24
|
+
type,
|
|
25
|
+
agent: window.navigator.userAgent,
|
|
26
|
+
time: (new Date()).getTime(),
|
|
27
|
+
timestamp: (new Date()).toISOString(),
|
|
28
|
+
properties: {}
|
|
29
|
+
};
|
|
30
|
+
}
|
|
21
31
|
executePutRequest(request, data, transform, suppressErrors, customHeaders) {
|
|
22
32
|
const headers = this.headers(customHeaders || {});
|
|
23
33
|
return this.http.put(request, data, { headers }).pipe(map((result) => transform ? transform(result) : result), catchError(suppressErrors ? this.handleErrorQuietly : this.handleError)).toPromise();
|
|
@@ -104,12 +114,12 @@ class EventDispatcherComponent {
|
|
|
104
114
|
}
|
|
105
115
|
}
|
|
106
116
|
EventDispatcherComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: EventDispatcherComponent, deps: [{ token: EventDispatcherService }], target: i0.ɵɵFactoryTarget.Component });
|
|
107
|
-
EventDispatcherComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.7", type: EventDispatcherComponent, selector: "event-dispatcher", inputs: { endpoint: "endpoint", session: "session", token: "token", limit: ["sessionLimit", "limit"] }, ngImport: i0, template: '
|
|
117
|
+
EventDispatcherComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.7", type: EventDispatcherComponent, selector: "event-dispatcher", inputs: { endpoint: "endpoint", session: "session", token: "token", limit: ["sessionLimit", "limit"] }, ngImport: i0, template: '', isInline: true });
|
|
108
118
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: EventDispatcherComponent, decorators: [{
|
|
109
119
|
type: Component,
|
|
110
120
|
args: [{
|
|
111
121
|
selector: 'event-dispatcher',
|
|
112
|
-
template: '
|
|
122
|
+
template: '',
|
|
113
123
|
styles: []
|
|
114
124
|
}]
|
|
115
125
|
}], ctorParameters: function () { return [{ type: EventDispatcherService }]; }, propDecorators: { endpoint: [{
|
|
@@ -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 { 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: any, name?: string):Promise<any> {\n const key = `${name ?? uuid()}.json`;\n const request = this.buildRequest(key);\n return this.executePutRequest(request, event);\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 { v4 as uuid } from \"uuid\";\nimport { trace, empty } from \"ems-web-app-utils\";\n\n@Component({\n selector: 'event-dispatcher',\n template: '<div id=\"event-dispatcher\"></div>',\n styles: [\n ]\n})\nexport class EventDispatcherComponent implements OnInit {\n\n @Input(\"endpoint\") endpoint!: string;\n @Input(\"session\") session?: any;\n @Input(\"token\") token?: string;\n @Input(\"sessionLimit\") limit: number = 1800000; //30m\n\n private _queue: any[] = [];\n private _processing: boolean = false;\n private _tokenId!: string;\n private _sessionId!: string;\n \n constructor(private service: EventDispatcherService) {\n \n }\n\n ngOnInit(): void {\n this.service.jwt = this.session?.idToken.jwtToken ?? this.token;\n this.service.endpoint = this.endpoint;\n trace(this.service.jwt, this.session)\n this._tokenId = this.session?.idToken.payload.jti ?? this.token;\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: any, 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.processQueue(); \n }\n\n private determineSessionId() {\n const sessionTimestamp = parseInt(window.localStorage.getItem(this._tokenId) ?? \"\");\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(this._tokenId, 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';\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}/` : \"\";\n const request = this.buildRequest(`${namespace}${key}.json`);\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(\"session\") session?: any;\n @Input(\"token\") token?: string;\n @Input(\"sessionLimit\") limit: number = 1800000; //30m\n\n private _queue: {event: IDispatcherEvent, name?: string}[] = [];\n private _processing: boolean = false;\n private _tokenId!: string;\n private _sessionId!: string;\n \n constructor(private service: EventDispatcherService) {\n \n }\n\n ngOnInit(): void {\n this.service.jwt = this.session?.idToken.jwtToken ?? this.token;\n this.service.endpoint = this.endpoint;\n trace(this.service.jwt, this.session)\n this._tokenId = this.session?.idToken.payload.jti ?? this.token;\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.processQueue(); \n }\n\n private determineSessionId() {\n const sessionTimestamp = parseInt(window.localStorage.getItem(this._tokenId) ?? \"\");\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(this._tokenId, 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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"}
|
|
@@ -14,9 +14,19 @@ class EventDispatcherService {
|
|
|
14
14
|
}
|
|
15
15
|
dispatch(event, name) {
|
|
16
16
|
const key = `${name ?? v4()}.json`;
|
|
17
|
-
const
|
|
17
|
+
const namespace = event.namespace ? `${event.namespace}/` : "";
|
|
18
|
+
const request = this.buildRequest(`${namespace}${key}.json`);
|
|
18
19
|
return this.executePutRequest(request, event);
|
|
19
20
|
}
|
|
21
|
+
getEventTemplate(type) {
|
|
22
|
+
return {
|
|
23
|
+
type,
|
|
24
|
+
agent: window.navigator.userAgent,
|
|
25
|
+
time: (new Date()).getTime(),
|
|
26
|
+
timestamp: (new Date()).toISOString(),
|
|
27
|
+
properties: {}
|
|
28
|
+
};
|
|
29
|
+
}
|
|
20
30
|
executePutRequest(request, data, transform, suppressErrors, customHeaders) {
|
|
21
31
|
const headers = this.headers(customHeaders || {});
|
|
22
32
|
return this.http.put(request, data, { headers }).pipe(map((result) => transform ? transform(result) : result), catchError(suppressErrors ? this.handleErrorQuietly : this.handleError)).toPromise();
|
|
@@ -99,12 +109,12 @@ class EventDispatcherComponent {
|
|
|
99
109
|
}
|
|
100
110
|
}
|
|
101
111
|
EventDispatcherComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: EventDispatcherComponent, deps: [{ token: EventDispatcherService }], target: i0.ɵɵFactoryTarget.Component });
|
|
102
|
-
EventDispatcherComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.7", type: EventDispatcherComponent, selector: "event-dispatcher", inputs: { endpoint: "endpoint", session: "session", token: "token", limit: ["sessionLimit", "limit"] }, ngImport: i0, template: '
|
|
112
|
+
EventDispatcherComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.7", type: EventDispatcherComponent, selector: "event-dispatcher", inputs: { endpoint: "endpoint", session: "session", token: "token", limit: ["sessionLimit", "limit"] }, ngImport: i0, template: '', isInline: true });
|
|
103
113
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: EventDispatcherComponent, decorators: [{
|
|
104
114
|
type: Component,
|
|
105
115
|
args: [{
|
|
106
116
|
selector: 'event-dispatcher',
|
|
107
|
-
template: '
|
|
117
|
+
template: '',
|
|
108
118
|
styles: []
|
|
109
119
|
}]
|
|
110
120
|
}], ctorParameters: function () { return [{ type: EventDispatcherService }]; }, propDecorators: { endpoint: [{
|
|
@@ -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 { 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: any, name?: string):Promise<any> {\n const key = `${name ?? uuid()}.json`;\n const request = this.buildRequest(key);\n return this.executePutRequest(request, event);\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 { v4 as uuid } from \"uuid\";\nimport { trace, empty } from \"ems-web-app-utils\";\n\n@Component({\n selector: 'event-dispatcher',\n template: '<div id=\"event-dispatcher\"></div>',\n styles: [\n ]\n})\nexport class EventDispatcherComponent implements OnInit {\n\n @Input(\"endpoint\") endpoint!: string;\n @Input(\"session\") session?: any;\n @Input(\"token\") token?: string;\n @Input(\"sessionLimit\") limit: number = 1800000; //30m\n\n private _queue: any[] = [];\n private _processing: boolean = false;\n private _tokenId!: string;\n private _sessionId!: string;\n \n constructor(private service: EventDispatcherService) {\n \n }\n\n ngOnInit(): void {\n this.service.jwt = this.session?.idToken.jwtToken ?? this.token;\n this.service.endpoint = this.endpoint;\n trace(this.service.jwt, this.session)\n this._tokenId = this.session?.idToken.payload.jti ?? this.token;\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: any, 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.processQueue(); \n }\n\n private determineSessionId() {\n const sessionTimestamp = parseInt(window.localStorage.getItem(this._tokenId) ?? \"\");\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(this._tokenId, 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';\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}/` : \"\";\n const request = this.buildRequest(`${namespace}${key}.json`);\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(\"session\") session?: any;\n @Input(\"token\") token?: string;\n @Input(\"sessionLimit\") limit: number = 1800000; //30m\n\n private _queue: {event: IDispatcherEvent, name?: string}[] = [];\n private _processing: boolean = false;\n private _tokenId!: string;\n private _sessionId!: string;\n \n constructor(private service: EventDispatcherService) {\n \n }\n\n ngOnInit(): void {\n this.service.jwt = this.session?.idToken.jwtToken ?? this.token;\n this.service.endpoint = this.endpoint;\n trace(this.service.jwt, this.session)\n this._tokenId = this.session?.idToken.payload.jti ?? this.token;\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.processQueue(); \n }\n\n private determineSessionId() {\n const sessionTimestamp = parseInt(window.localStorage.getItem(this._tokenId) ?? \"\");\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(this._tokenId, 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;QAAhB,IAAI,CAAA,IAAA,GAAJ,IAAI,CAAY;KAAI;IAEjC,QAAQ,CAAC,KAAuB,EAAE,IAAa,EAAA;QACpD,MAAM,GAAG,GAAG,CAAG,EAAA,IAAI,IAAIA,EAAI,EAAE,OAAO,CAAC;AACrC,QAAA,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,GAAG,CAAG,EAAA,KAAK,CAAC,SAAS,CAAA,CAAA,CAAG,GAAG,EAAE,CAAC;AAC/D,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,CAAG,EAAA,SAAS,CAAG,EAAA,GAAG,CAAO,KAAA,CAAA,CAAC,CAAC;QAC7D,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;AACnB,iBAAA,CAAA;;;MCCY,wBAAwB,CAAA;AAYnC,IAAA,WAAA,CAAoB,OAA+B,EAAA;QAA/B,IAAO,CAAA,OAAA,GAAP,OAAO,CAAwB;AAP5B,QAAA,IAAA,CAAA,KAAK,GAAW,OAAO,CAAC;QAEvC,IAAM,CAAA,MAAA,GAA+C,EAAE,CAAC;QACxD,IAAW,CAAA,WAAA,GAAY,KAAK,CAAC;QAuD7B,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,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC;AACnE,SAAC,CAAA;KApDA;IAED,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,QAAQ,IAAI,IAAI,CAAC,KAAK,CAAC;QAChE,IAAI,CAAC,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QACtC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,CAAA;AACrC,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC;AAChE,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;AAEO,IAAA,MAAM,YAAY,GAAA;QACxB,IAAG,IAAI,CAAC,WAAW;YAAE,OAAO;AAC5B,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QAExB,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QAChC,IAAG,CAAC,GAAG,EAAE;AACP,YAAA,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;YACzB,OAAO;AACR,SAAA;AAED,QAAA,MAAM,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;QACjD,IAAI,CAAC,YAAY,EAAE,CAAC;KACrB;IAEO,kBAAkB,GAAA;AACxB,QAAA,MAAM,gBAAgB,GAAG,QAAQ,CAAC,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;QACpF,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;;qHA7DU,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,gKAJzB,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;AACF,iBAAA,CAAA;0GAGoB,QAAQ,EAAA,CAAA;sBAA1B,KAAK;uBAAC,UAAU,CAAA;gBACC,OAAO,EAAA,CAAA;sBAAxB,KAAK;uBAAC,SAAS,CAAA;gBACA,KAAK,EAAA,CAAA;sBAApB,KAAK;uBAAC,OAAO,CAAA;gBACS,KAAK,EAAA,CAAA;sBAA3B,KAAK;uBAAC,cAAc,CAAA;;;MCFV,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;AACF,iBAAA,CAAA;;;ACdD;;AAEG;;ACFH;;AAEG;;;;"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { OnInit } from '@angular/core';
|
|
2
2
|
import { EventDispatcherService } from "./event-dispatcher.service";
|
|
3
|
+
import { IDispatcherEvent } from "./event-dispatcher.interfaces";
|
|
3
4
|
import * as i0 from "@angular/core";
|
|
4
5
|
export declare class EventDispatcherComponent implements OnInit {
|
|
5
6
|
private service;
|
|
@@ -13,7 +14,7 @@ export declare class EventDispatcherComponent implements OnInit {
|
|
|
13
14
|
private _sessionId;
|
|
14
15
|
constructor(service: EventDispatcherService);
|
|
15
16
|
ngOnInit(): void;
|
|
16
|
-
dispatch(event:
|
|
17
|
+
dispatch(event: IDispatcherEvent, name?: string): any;
|
|
17
18
|
private processQueue;
|
|
18
19
|
private determineSessionId;
|
|
19
20
|
private stillInSession;
|
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
import { HttpClient } from '@angular/common/http';
|
|
2
|
+
import { IDispatcherEvent } from "./event-dispatcher.interfaces";
|
|
2
3
|
import * as i0 from "@angular/core";
|
|
3
4
|
export declare class EventDispatcherService {
|
|
4
5
|
private http;
|
|
5
6
|
jwt?: string;
|
|
6
7
|
endpoint: string;
|
|
7
8
|
constructor(http: HttpClient);
|
|
8
|
-
dispatch(event:
|
|
9
|
+
dispatch(event: IDispatcherEvent, name?: string): Promise<any>;
|
|
10
|
+
getEventTemplate(type: string): IDispatcherEvent;
|
|
9
11
|
private executePutRequest;
|
|
10
12
|
private buildRequest;
|
|
11
13
|
private handleError;
|
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.13",
|
|
8
8
|
"peerDependencies": {
|
|
9
9
|
"@angular/common": "^13.2.0",
|
|
10
10
|
"@angular/core": "^13.2.0",
|
package/public-api.d.ts
CHANGED