ems-web-app-event-tracker 0.0.18 → 0.0.20

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.
@@ -1,6 +1,6 @@
1
1
  import { Component, Input } from '@angular/core';
2
2
  import { v4 as uuid } from "uuid";
3
- import { trace, empty } from "ems-web-app-utils";
3
+ import { empty } 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,15 +11,13 @@ export class EventDispatcherComponent {
11
11
  this._processing = false;
12
12
  this.updateSession = () => {
13
13
  const timestamp = (new Date()).getTime();
14
- window.localStorage.setItem(this._tokenId, timestamp.toString());
14
+ window.localStorage.setItem("ems_et_sessionTime", timestamp.toString());
15
15
  };
16
16
  }
17
17
  ngOnInit() {
18
- this.service.jwt = this.session?.idToken.jwtToken ?? this.token;
19
18
  this.service.endpoint = this.endpoint;
20
- trace(this.service.jwt, this.session);
21
- this._tokenId = this.session?.idToken.payload.jti ?? this.token;
22
19
  this._sessionId = this.determineSessionId();
20
+ console.log("setting session id", this._sessionId);
23
21
  window.localStorage.setItem("ems_et_sessionId", this._sessionId);
24
22
  window.setInterval(this.updateSession, 1000);
25
23
  }
@@ -43,7 +41,7 @@ export class EventDispatcherComponent {
43
41
  this.processQueue();
44
42
  }
45
43
  determineSessionId() {
46
- const sessionTimestamp = parseInt(window.localStorage.getItem(this._tokenId) ?? "");
44
+ const sessionTimestamp = parseInt(window.localStorage.getItem("ems_et_sessionTime") ?? "");
47
45
  const sessionId = window.localStorage.getItem("ems_et_sessionId");
48
46
  const now = (new Date()).getTime();
49
47
  if (!isNaN(sessionTimestamp) && !empty(sessionId) && this.stillInSession(now, sessionTimestamp)) {
@@ -56,7 +54,7 @@ export class EventDispatcherComponent {
56
54
  }
57
55
  }
58
56
  EventDispatcherComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: EventDispatcherComponent, deps: [{ token: i1.EventDispatcherService }], target: i0.ɵɵFactoryTarget.Component });
59
- 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 });
57
+ EventDispatcherComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.7", type: EventDispatcherComponent, selector: "event-dispatcher", inputs: { endpoint: "endpoint", limit: ["sessionLimit", "limit"] }, ngImport: i0, template: '', isInline: true });
60
58
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: EventDispatcherComponent, decorators: [{
61
59
  type: Component,
62
60
  args: [{
@@ -67,14 +65,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImpor
67
65
  }], ctorParameters: function () { return [{ type: i1.EventDispatcherService }]; }, propDecorators: { endpoint: [{
68
66
  type: Input,
69
67
  args: ["endpoint"]
70
- }], session: [{
71
- type: Input,
72
- args: ["session"]
73
- }], token: [{
74
- type: Input,
75
- args: ["token"]
76
68
  }], limit: [{
77
69
  type: Input,
78
70
  args: ["sessionLimit"]
79
71
  }] } });
80
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnQtZGlzcGF0Y2hlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL2V2ZW50LWRpc3BhdGNoZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsS0FBSyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBR2pFLE9BQU8sRUFBRSxFQUFFLElBQUksSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2xDLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7OztBQVFqRCxNQUFNLE9BQU8sd0JBQXdCO0lBWW5DLFlBQW9CLE9BQStCO1FBQS9CLFlBQU8sR0FBUCxPQUFPLENBQXdCO1FBUDVCLFVBQUssR0FBVyxPQUFPLENBQUMsQ0FBQyxLQUFLO1FBRTdDLFdBQU0sR0FBK0MsRUFBRSxDQUFDO1FBQ3hELGdCQUFXLEdBQVksS0FBSyxDQUFDO1FBd0Q3QixrQkFBYSxHQUFHLEdBQUcsRUFBRTtZQUMzQixNQUFNLFNBQVMsR0FBRyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUN6QyxNQUFNLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLFNBQVMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQ25FLENBQUMsQ0FBQTtJQXJERCxDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDO1FBQ2hFLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7UUFDdEMsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMs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Z3VsYXIvY29yZSc7XG5pbXBvcnQgeyBFdmVudERpc3BhdGNoZXJTZXJ2aWNlIH0gZnJvbSBcIi4vZXZlbnQtZGlzcGF0Y2hlci5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBJRGlzcGF0Y2hlckV2ZW50IH0gZnJvbSBcIi4vZXZlbnQtZGlzcGF0Y2hlci5pbnRlcmZhY2VzXCI7XG5pbXBvcnQgeyB2NCBhcyB1dWlkIH0gZnJvbSBcInV1aWRcIjtcbmltcG9ydCB7IHRyYWNlLCBlbXB0eSB9IGZyb20gXCJlbXMtd2ViLWFwcC11dGlsc1wiO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdldmVudC1kaXNwYXRjaGVyJyxcbiAgdGVtcGxhdGU6ICcnLFxuICBzdHlsZXM6IFtcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBFdmVudERpc3BhdGNoZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuXG4gIEBJbnB1dChcImVuZHBvaW50XCIpIGVuZHBvaW50ITogc3RyaW5nO1xuICBASW5wdXQoXCJzZXNzaW9uXCIpIHNlc3Npb24/OiBhbnk7XG4gIEBJbnB1dChcInRva2VuXCIpIHRva2VuPzogc3RyaW5nO1xuICBASW5wdXQoXCJzZXNzaW9uTGltaXRcIikgbGltaXQ6IG51bWJlciA9IDE4MDAwMDA7IC8vMzBtXG5cbiAgcHJpdmF0ZSBfcXVldWU6IHtldmVudDogSURpc3BhdGNoZXJFdmVudCwgbmFtZT86IHN0cmluZ31bXSA9IFtdO1xuICBwcml2YXRlIF9wcm9jZXNzaW5nOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgX3Rva2VuSWQhOiBzdHJpbmc7XG4gIHByaXZhdGUgX3Nlc3Npb25JZCE6IHN0cmluZztcbiAgXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgc2VydmljZTogRXZlbnREaXNwYXRjaGVyU2VydmljZSkge1xuICAgXG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnNlcnZpY2Uuand0ID0gdGhpcy5zZXNzaW9uPy5pZFRva2VuLmp3dFRva2VuID8/IHRoaXMudG9rZW47XG4gICAgdGhpcy5zZXJ2aWNlLmVuZHBvaW50ID0gdGhpcy5lbmRwb2ludDtcbiAgICB0cmFjZSh0aGlzLnNlcnZpY2Uuand0LCB0aGlzLnNlc3Npb24pXG4gICAgdGhpcy5fdG9rZW5JZCA9IHRoaXMuc2Vzc2lvbj8uaWRUb2tlbi5wYXlsb2FkLmp0aSA/PyB0aGlzLnRva2VuO1xuICAgIHRoaXMuX3Nlc3Npb25JZCA9IHRoaXMuZGV0ZXJtaW5lU2Vzc2lvbklkKCk7XG4gICAgd2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKFwiZW1zX2V0X3Nlc3Npb25JZFwiLCB0aGlzLl9zZXNzaW9uSWQpO1xuICAgIHdpbmRvdy5zZXRJbnRlcnZhbCh0aGlzLnVwZGF0ZVNlc3Npb24sIDEwMDApO1xuICB9XG5cbiAgcHVibGljIGRpc3BhdGNoKGV2ZW50OiBJRGlzcGF0Y2hlckV2ZW50LCBuYW1lPzogc3RyaW5nKTogYW55IHtcbiAgICBldmVudC5zZXNzaW9uSWQgPSB0aGlzLl9zZXNzaW9uSWQ7XG4gICAgdGhpcy5fcXVldWUucHVzaCh7IGV2ZW50LCBuYW1lIH0pO1xuICAgIHRoaXMucHJvY2Vzc1F1ZXVlKCk7XG4gICAgcmV0dXJuIGV2ZW50O1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBwcm9jZXNzUXVldWUoKSB7XG4gICAgaWYodGhpcy5fcHJvY2Vzc2luZykgcmV0dXJuO1xuICAgIHRoaXMuX3Byb2Nlc3NpbmcgPSB0cnVlO1xuXG4gICAgY29uc3Qgb2JqID0gdGhpcy5fcXVldWUuc2hpZnQoKTtcbiAgICBpZighb2JqKSB7XG4gICAgICB0aGlzLl9wcm9jZXNzaW5nID0gZmFsc2U7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy5zZXJ2aWNlLmRpc3BhdGNoKG9iai5ldmVudCwgb2JqLm5hbWUpO1xuICAgIHRoaXMuX3Byb2Nlc3NpbmcgPSBmYWxzZTtcbiAgICB0aGlzLnByb2Nlc3NRdWV1ZSgpOyBcbiAgfVxuXG4gIHByaXZhdGUgZGV0ZXJtaW5lU2Vzc2lvbklkKCkge1xuICAgIGNvbnN0IHNlc3Npb25UaW1lc3RhbXAgPSBwYXJzZUludCh3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5fdG9rZW5JZCkgPz8gXCJcIik7XG4gICAgY29uc3Qgc2Vzc2lvbklkID0gd2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiZW1zX2V0X3Nlc3Npb25JZFwiKTtcbiAgICBjb25zdCBub3cgPSAobmV3IERhdGUoKSkuZ2V0VGltZSgpO1xuXG4gICAgaWYoIWlzTmFOKHNlc3Npb25UaW1lc3RhbXApICYmICFlbXB0eShzZXNzaW9uSWQpICYmIHRoaXMuc3RpbGxJblNlc3Npb24obm93LCBzZXNzaW9uVGltZXN0YW1wKSkge1xuICAgICAgcmV0dXJuIHNlc3Npb25JZCE7XG4gICAgfVxuICAgIFxuICAgIHJldHVybiB1dWlkKCk7XG4gIH1cblxuICBwcml2YXRlIHN0aWxsSW5TZXNzaW9uKHRpbWUxOiBudW1iZXIsIHRpbWUyOiBudW1iZXIpIHtcbiAgICByZXR1cm4gTWF0aC5hYnModGltZTEgLSB0aW1lMikgPCB0aGlzLmxpbWl0O1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVTZXNzaW9uID0gKCkgPT4ge1xuICAgIGNvbnN0IHRpbWVzdGFtcCA9IChuZXcgRGF0ZSgpKS5nZXRUaW1lKCk7XG4gICAgd2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKHRoaXMuX3Rva2VuSWQsIHRpbWVzdGFtcC50b1N0cmluZygpKTtcbiAgfVxuXG59XG4iXX0=
72
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnQtZGlzcGF0Y2hlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL2V2ZW50LWRpc3BhdGNoZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsS0FBSyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBR2pFLE9BQU8sRUFBRSxFQUFFLElBQUksSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2xDLE9BQU8sRUFBUyxLQUFLLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQzs7O0FBUWpELE1BQU0sT0FBTyx3QkFBd0I7SUFTbkMsWUFBb0IsT0FBK0I7UUFBL0IsWUFBTyxHQUFQLE9BQU8sQ0FBd0I7UUFONUIsVUFBSyxHQUFXLE9BQU8sQ0FBQyxDQUFDLEtBQUs7UUFFN0MsV0FBTSxHQUErQyxFQUFFLENBQUM7UUFDeEQsZ0JBQVcsR0FBWSxLQUFLLENBQUM7UUFtRDdCLGtCQUFhLEdBQUcsR0FBRyxFQUFFO1lBQzNCLE1BQU0sU0FBUyxHQUFHLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ3pDLE1BQU0sQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLG9CQUFvQixFQUFFLFNBQVMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQzFFLENBQUMsQ0FBQTtJQW5EcUQsQ0FBQztJQUV2RCxRQUFRO1FBQ04sSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUN0QyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQzVDLE9BQU8sQ0FBQyxHQUFHLENBQUMsb0JBQW9CLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ25ELE1BQU0sQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLGtCQUFrQixFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNqRSxNQUFNLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVNLFFBQVEsQ0FBQyxLQUF1QixFQUFFLElBQWE7UUFDcEQsS0FBSyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO1FBQ2xDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFDbEMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3BCLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVPLEtBQUssQ0FBQyxZQUFZO1FBQ3hCLElBQUcsSUFBSSxDQUFDLFdBQVc7WUFBRSxPQUFPO1FBQzVCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1FBRXhCLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDaEMsSUFBRyxDQUFDLEdBQUcsRUFBRTtZQUNQLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO1lBQ3pCLE9BQU87U0FDUjtRQUVELE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDakQsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7UUFDekIsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3RCLENBQUM7SUFFTyxrQkFBa0I7UUFDeEIsTUFBTSxnQkFBZ0IsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsb0JBQW9CLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUMzRixNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQ2xFLE1BQU0sR0FBRyxHQUFHLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBRW5DLElBQUcsQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsRUFBRSxnQkFBZ0IsQ0FBQyxFQUFFO1lBQzlGLE9BQU8sU0FBVSxDQUFDO1NBQ25CO1FBRUQsT0FBTyxJQUFJLEVBQUUsQ0FBQztJQUNoQixDQUFDO0lBRU8sY0FBYyxDQUFDLEtBQWEsRUFBRSxLQUFhO1FBQ2pELE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztJQUM5QyxDQUFDOztxSEF2RFUsd0JBQXdCO3lHQUF4Qix3QkFBd0IsNEhBSnpCLEVBQUU7MkZBSUQsd0JBQXdCO2tCQU5wQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxrQkFBa0I7b0JBQzVCLFFBQVEsRUFBRSxFQUFFO29CQUNaLE1BQU0sRUFBRSxFQUNQO2lCQUNGOzZHQUdvQixRQUFRO3NCQUExQixLQUFLO3VCQUFDLFVBQVU7Z0JBQ00sS0FBSztzQkFBM0IsS0FBSzt1QkFBQyxjQUFjIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIElucHV0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEV2ZW50RGlzcGF0Y2hlclNlcnZpY2UgfSBmcm9tIFwiLi9ldmVudC1kaXNwYXRjaGVyLnNlcnZpY2VcIjtcbmltcG9ydCB7IElEaXNwYXRjaGVyRXZlbnQgfSBmcm9tIFwiLi9ldmVudC1kaXNwYXRjaGVyLmludGVyZmFjZXNcIjtcbmltcG9ydCB7IHY0IGFzIHV1aWQgfSBmcm9tIFwidXVpZFwiO1xuaW1wb3J0IHsgdHJhY2UsIGVtcHR5IH0gZnJvbSBcImVtcy13ZWItYXBwLXV0aWxzXCI7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2V2ZW50LWRpc3BhdGNoZXInLFxuICB0ZW1wbGF0ZTogJycsXG4gIHN0eWxlczogW1xuICBdXG59KVxuZXhwb3J0IGNsYXNzIEV2ZW50RGlzcGF0Y2hlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cbiAgQElucHV0KFwiZW5kcG9pbnRcIikgZW5kcG9pbnQhOiBzdHJpbmc7XG4gIEBJbnB1dChcInNlc3Npb25MaW1pdFwiKSBsaW1pdDogbnVtYmVyID0gMTgwMDAwMDsgLy8zMG1cblxuICBwcml2YXRlIF9xdWV1ZToge2V2ZW50OiBJRGlzcGF0Y2hlckV2ZW50LCBuYW1lPzogc3RyaW5nfVtdID0gW107XG4gIHByaXZhdGUgX3Byb2Nlc3Npbmc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBfc2Vzc2lvbklkITogc3RyaW5nO1xuICBcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBzZXJ2aWNlOiBFdmVudERpc3BhdGNoZXJTZXJ2aWNlKSB7fVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuc2VydmljZS5lbmRwb2ludCA9IHRoaXMuZW5kcG9pbnQ7XG4gICAgdGhpcy5fc2Vzc2lvbklkID0gdGhpcy5kZXRlcm1pbmVTZXNzaW9uSWQoKTtcbiAgICBjb25zb2xlLmxvZyhcInNldHRpbmcgc2Vzc2lvbiBpZFwiLCB0aGlzLl9zZXNzaW9uSWQpO1xuICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbShcImVtc19ldF9zZXNzaW9uSWRcIiwgdGhpcy5fc2Vzc2lvbklkKTtcbiAgICB3aW5kb3cuc2V0SW50ZXJ2YWwodGhpcy51cGRhdGVTZXNzaW9uLCAxMDAwKTtcbiAgfVxuXG4gIHB1YmxpYyBkaXNwYXRjaChldmVudDogSURpc3BhdGNoZXJFdmVudCwgbmFtZT86IHN0cmluZyk6IGFueSB7XG4gICAgZXZlbnQuc2Vzc2lvbklkID0gdGhpcy5fc2Vzc2lvbklkO1xuICAgIHRoaXMuX3F1ZXVlLnB1c2goeyBldmVudCwgbmFtZSB9KTtcbiAgICB0aGlzLnByb2Nlc3NRdWV1ZSgpO1xuICAgIHJldHVybiBldmVudDtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcHJvY2Vzc1F1ZXVlKCkge1xuICAgIGlmKHRoaXMuX3Byb2Nlc3NpbmcpIHJldHVybjtcbiAgICB0aGlzLl9wcm9jZXNzaW5nID0gdHJ1ZTtcblxuICAgIGNvbnN0IG9iaiA9IHRoaXMuX3F1ZXVlLnNoaWZ0KCk7XG4gICAgaWYoIW9iaikge1xuICAgICAgdGhpcy5fcHJvY2Vzc2luZyA9IGZhbHNlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGF3YWl0IHRoaXMuc2VydmljZS5kaXNwYXRjaChvYmouZXZlbnQsIG9iai5uYW1lKTtcbiAgICB0aGlzLl9wcm9jZXNzaW5nID0gZmFsc2U7XG4gICAgdGhpcy5wcm9jZXNzUXVldWUoKTsgXG4gIH1cblxuICBwcml2YXRlIGRldGVybWluZVNlc3Npb25JZCgpIHtcbiAgICBjb25zdCBzZXNzaW9uVGltZXN0YW1wID0gcGFyc2VJbnQod2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiZW1zX2V0X3Nlc3Npb25UaW1lXCIpID8/IFwiXCIpO1xuICAgIGNvbnN0IHNlc3Npb25JZCA9IHdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbShcImVtc19ldF9zZXNzaW9uSWRcIik7XG4gICAgY29uc3Qgbm93ID0gKG5ldyBEYXRlKCkpLmdldFRpbWUoKTtcblxuICAgIGlmKCFpc05hTihzZXNzaW9uVGltZXN0YW1wKSAmJiAhZW1wdHkoc2Vzc2lvbklkKSAmJiB0aGlzLnN0aWxsSW5TZXNzaW9uKG5vdywgc2Vzc2lvblRpbWVzdGFtcCkpIHtcbiAgICAgIHJldHVybiBzZXNzaW9uSWQhO1xuICAgIH1cbiAgICBcbiAgICByZXR1cm4gdXVpZCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGlsbEluU2Vzc2lvbih0aW1lMTogbnVtYmVyLCB0aW1lMjogbnVtYmVyKSB7XG4gICAgcmV0dXJuIE1hdGguYWJzKHRpbWUxIC0gdGltZTIpIDwgdGhpcy5saW1pdDtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlU2Vzc2lvbiA9ICgpID0+IHtcbiAgICBjb25zdCB0aW1lc3RhbXAgPSAobmV3IERhdGUoKSkuZ2V0VGltZSgpO1xuICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbShcImVtc19ldF9zZXNzaW9uVGltZVwiLCB0aW1lc3RhbXAudG9TdHJpbmcoKSk7XG4gIH1cblxufVxuIl19
@@ -7,7 +7,7 @@ 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 { trace, empty } from 'ems-web-app-utils';
10
+ import { empty } from 'ems-web-app-utils';
11
11
 
12
12
  class EventDispatcherService {
13
13
  constructor(http) {
@@ -66,16 +66,13 @@ class EventDispatcherComponent {
66
66
  this._processing = false;
67
67
  this.updateSession = () => {
68
68
  const timestamp = (new Date()).getTime();
69
- window.localStorage.setItem(this._tokenId, timestamp.toString());
69
+ window.localStorage.setItem("ems_et_sessionTime", timestamp.toString());
70
70
  };
71
71
  }
72
72
  ngOnInit() {
73
- var _a, _b, _c, _d;
74
- this.service.jwt = (_b = (_a = this.session) === null || _a === void 0 ? void 0 : _a.idToken.jwtToken) !== null && _b !== void 0 ? _b : this.token;
75
73
  this.service.endpoint = this.endpoint;
76
- trace(this.service.jwt, this.session);
77
- this._tokenId = (_d = (_c = this.session) === null || _c === void 0 ? void 0 : _c.idToken.payload.jti) !== null && _d !== void 0 ? _d : this.token;
78
74
  this._sessionId = this.determineSessionId();
75
+ console.log("setting session id", this._sessionId);
79
76
  window.localStorage.setItem("ems_et_sessionId", this._sessionId);
80
77
  window.setInterval(this.updateSession, 1000);
81
78
  }
@@ -102,7 +99,7 @@ class EventDispatcherComponent {
102
99
  }
103
100
  determineSessionId() {
104
101
  var _a;
105
- const sessionTimestamp = parseInt((_a = window.localStorage.getItem(this._tokenId)) !== null && _a !== void 0 ? _a : "");
102
+ const sessionTimestamp = parseInt((_a = window.localStorage.getItem("ems_et_sessionTime")) !== null && _a !== void 0 ? _a : "");
106
103
  const sessionId = window.localStorage.getItem("ems_et_sessionId");
107
104
  const now = (new Date()).getTime();
108
105
  if (!isNaN(sessionTimestamp) && !empty(sessionId) && this.stillInSession(now, sessionTimestamp)) {
@@ -115,7 +112,7 @@ class EventDispatcherComponent {
115
112
  }
116
113
  }
117
114
  EventDispatcherComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: EventDispatcherComponent, deps: [{ token: EventDispatcherService }], target: i0.ɵɵFactoryTarget.Component });
118
- 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 });
115
+ EventDispatcherComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.7", type: EventDispatcherComponent, selector: "event-dispatcher", inputs: { endpoint: "endpoint", limit: ["sessionLimit", "limit"] }, ngImport: i0, template: '', isInline: true });
119
116
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: EventDispatcherComponent, decorators: [{
120
117
  type: Component,
121
118
  args: [{
@@ -126,12 +123,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImpor
126
123
  }], ctorParameters: function () { return [{ type: EventDispatcherService }]; }, propDecorators: { endpoint: [{
127
124
  type: Input,
128
125
  args: ["endpoint"]
129
- }], session: [{
130
- type: Input,
131
- args: ["session"]
132
- }], token: [{
133
- type: Input,
134
- args: ["token"]
135
126
  }], limit: [{
136
127
  type: Input,
137
128
  args: ["sessionLimit"]
@@ -1 +1 @@
1
- {"version":3,"file":"ems-web-app-event-tracker.mjs","sources":["../../src/lib/event-dispatcher.service.ts","../../src/lib/event-dispatcher.component.ts","../../src/lib/event-dispatcher.module.ts","../../src/public-api.ts","../../src/ems-web-app-event-tracker.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport { HttpClient, HttpHeaders, HttpResponse, HttpRequest, HttpErrorResponse, HttpParams } from '@angular/common/http';\nimport { Observable, Subject, BehaviorSubject, throwError, of } from 'rxjs';\nimport { catchError, map, tap, take } from \"rxjs/operators\";\nimport { IDispatcherEvent } from \"./event-dispatcher.interfaces\";\nimport { v4 as uuid } from \"uuid\";\nimport { trace, empty } from \"ems-web-app-utils\";\nimport * as _ from \"underscore\";\n\n@Injectable({\n providedIn: 'root'\n})\nexport class EventDispatcherService {\n \n public jwt?: string;\n public endpoint!: string;\n\n constructor(private http: HttpClient) {}\n\n public dispatch(event: IDispatcherEvent, name?: string):Promise<any> {\n const key = `${name ?? uuid()}.json`;\n const namespace = (event.namespace ? `${event.namespace}%2F` : \"\").replace(/:::/gim,\"%2F\");\n const request = this.buildRequest(`${namespace}${key}`);\n return this.executePutRequest(request, event);\n }\n\n public getEventTemplate(type: string): IDispatcherEvent {\n return {\n type,\n agent: window.navigator.userAgent,\n time: (new Date()).getTime(),\n timestamp: (new Date()).toISOString(),\n properties: {}\n }\n }\n\n private executePutRequest(request: string, data: any, transform?: (input: any) => any, suppressErrors?: boolean, customHeaders?: any ): Promise<any> {\n const headers = this.headers(customHeaders || {});\n return this.http.put(request, data, { headers }).pipe(\n map((result: any) => \n transform ? transform(result) : result\n ),\n catchError(suppressErrors ? this.handleErrorQuietly : this.handleError)\n ).toPromise()\n }\n\n private buildRequest(endpoint: string): string {\n return `${this.endpoint}/${endpoint}`;\n }\n\n private handleError(error: HttpErrorResponse) {\n return throwError(error);\n }\n\n private handleErrorQuietly(error: HttpErrorResponse) {\n console.error(error);\n return of(null);\n }\n\n private headers(custom: any = {}): HttpHeaders {\n const headers = _.extend({ \n \"Content-Type\": \"application/json\"\n }, custom);\n return new HttpHeaders(headers);\n }\n}\n","import { Component, OnInit, Input, Output } from '@angular/core';\nimport { EventDispatcherService } from \"./event-dispatcher.service\";\nimport { IDispatcherEvent } from \"./event-dispatcher.interfaces\";\nimport { v4 as uuid } from \"uuid\";\nimport { trace, empty } from \"ems-web-app-utils\";\n\n@Component({\n selector: 'event-dispatcher',\n template: '',\n styles: [\n ]\n})\nexport class EventDispatcherComponent implements OnInit {\n\n @Input(\"endpoint\") endpoint!: string;\n @Input(\"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._processing = false;\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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"}
1
+ {"version":3,"file":"ems-web-app-event-tracker.mjs","sources":["../../src/lib/event-dispatcher.service.ts","../../src/lib/event-dispatcher.component.ts","../../src/lib/event-dispatcher.module.ts","../../src/public-api.ts","../../src/ems-web-app-event-tracker.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport { HttpClient, HttpHeaders, HttpResponse, HttpRequest, HttpErrorResponse, HttpParams } from '@angular/common/http';\nimport { Observable, Subject, BehaviorSubject, throwError, of } from 'rxjs';\nimport { catchError, map, tap, take } from \"rxjs/operators\";\nimport { IDispatcherEvent } from \"./event-dispatcher.interfaces\";\nimport { v4 as uuid } from \"uuid\";\nimport { trace, empty } from \"ems-web-app-utils\";\nimport * as _ from \"underscore\";\n\n@Injectable({\n providedIn: 'root'\n})\nexport class EventDispatcherService {\n \n public jwt?: string;\n public endpoint!: string;\n\n constructor(private http: HttpClient) {}\n\n public dispatch(event: IDispatcherEvent, name?: string):Promise<any> {\n const key = `${name ?? uuid()}.json`;\n const namespace = (event.namespace ? `${event.namespace}%2F` : \"\").replace(/:::/gim,\"%2F\");\n const request = this.buildRequest(`${namespace}${key}`);\n return this.executePutRequest(request, event);\n }\n\n public getEventTemplate(type: string): IDispatcherEvent {\n return {\n type,\n agent: window.navigator.userAgent,\n time: (new Date()).getTime(),\n timestamp: (new Date()).toISOString(),\n properties: {}\n }\n }\n\n private executePutRequest(request: string, data: any, transform?: (input: any) => any, suppressErrors?: boolean, customHeaders?: any ): Promise<any> {\n const headers = this.headers(customHeaders || {});\n return this.http.put(request, data, { headers }).pipe(\n map((result: any) => \n transform ? transform(result) : result\n ),\n catchError(suppressErrors ? this.handleErrorQuietly : this.handleError)\n ).toPromise()\n }\n\n private buildRequest(endpoint: string): string {\n return `${this.endpoint}/${endpoint}`;\n }\n\n private handleError(error: HttpErrorResponse) {\n return throwError(error);\n }\n\n private handleErrorQuietly(error: HttpErrorResponse) {\n console.error(error);\n return of(null);\n }\n\n private headers(custom: any = {}): HttpHeaders {\n const headers = _.extend({ \n \"Content-Type\": \"application/json\"\n }, custom);\n return new HttpHeaders(headers);\n }\n}\n","import { Component, OnInit, Input, Output } from '@angular/core';\nimport { EventDispatcherService } from \"./event-dispatcher.service\";\nimport { IDispatcherEvent } from \"./event-dispatcher.interfaces\";\nimport { v4 as uuid } from \"uuid\";\nimport { trace, empty } from \"ems-web-app-utils\";\n\n@Component({\n selector: 'event-dispatcher',\n template: '',\n styles: [\n ]\n})\nexport class EventDispatcherComponent implements OnInit {\n\n @Input(\"endpoint\") endpoint!: string;\n @Input(\"sessionLimit\") limit: number = 1800000; //30m\n\n private _queue: {event: IDispatcherEvent, name?: string}[] = [];\n private _processing: boolean = false;\n private _sessionId!: string;\n \n constructor(private service: EventDispatcherService) {}\n\n ngOnInit(): void {\n this.service.endpoint = this.endpoint;\n this._sessionId = this.determineSessionId();\n console.log(\"setting session id\", this._sessionId);\n window.localStorage.setItem(\"ems_et_sessionId\", this._sessionId);\n window.setInterval(this.updateSession, 1000);\n }\n\n public dispatch(event: IDispatcherEvent, name?: string): any {\n event.sessionId = this._sessionId;\n this._queue.push({ event, name });\n this.processQueue();\n return event;\n }\n\n private async processQueue() {\n if(this._processing) return;\n this._processing = true;\n\n const obj = this._queue.shift();\n if(!obj) {\n this._processing = false;\n return;\n }\n\n await this.service.dispatch(obj.event, obj.name);\n this._processing = false;\n this.processQueue(); \n }\n\n private determineSessionId() {\n const sessionTimestamp = parseInt(window.localStorage.getItem(\"ems_et_sessionTime\") ?? \"\");\n const sessionId = window.localStorage.getItem(\"ems_et_sessionId\");\n const now = (new Date()).getTime();\n\n if(!isNaN(sessionTimestamp) && !empty(sessionId) && this.stillInSession(now, sessionTimestamp)) {\n return sessionId!;\n }\n \n return uuid();\n }\n\n private stillInSession(time1: number, time2: number) {\n return Math.abs(time1 - time2) < this.limit;\n }\n\n private updateSession = () => {\n const timestamp = (new Date()).getTime();\n window.localStorage.setItem(\"ems_et_sessionTime\", timestamp.toString());\n }\n\n}\n","import { NgModule } from '@angular/core';\nimport { EventDispatcherComponent } from './event-dispatcher.component';\n\n\n\n@NgModule({\n declarations: [\n EventDispatcherComponent\n ],\n imports: [\n ],\n exports: [\n EventDispatcherComponent\n ]\n})\nexport class EventDispatcherModule { }\n","/*\n * Public API Surface of event-dispatcher\n */\n\nexport * from './lib/event-dispatcher.service';\nexport * from './lib/event-dispatcher.component';\nexport * from './lib/event-dispatcher.module';\nexport * from './lib/event-dispatcher.interfaces';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["uuid","i1.EventDispatcherService"],"mappings":"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"}
@@ -6,7 +6,7 @@ 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 { trace, empty } from 'ems-web-app-utils';
9
+ import { empty } from 'ems-web-app-utils';
10
10
 
11
11
  class EventDispatcherService {
12
12
  constructor(http) {
@@ -65,15 +65,13 @@ class EventDispatcherComponent {
65
65
  this._processing = false;
66
66
  this.updateSession = () => {
67
67
  const timestamp = (new Date()).getTime();
68
- window.localStorage.setItem(this._tokenId, timestamp.toString());
68
+ window.localStorage.setItem("ems_et_sessionTime", timestamp.toString());
69
69
  };
70
70
  }
71
71
  ngOnInit() {
72
- this.service.jwt = this.session?.idToken.jwtToken ?? this.token;
73
72
  this.service.endpoint = this.endpoint;
74
- trace(this.service.jwt, this.session);
75
- this._tokenId = this.session?.idToken.payload.jti ?? this.token;
76
73
  this._sessionId = this.determineSessionId();
74
+ console.log("setting session id", this._sessionId);
77
75
  window.localStorage.setItem("ems_et_sessionId", this._sessionId);
78
76
  window.setInterval(this.updateSession, 1000);
79
77
  }
@@ -97,7 +95,7 @@ class EventDispatcherComponent {
97
95
  this.processQueue();
98
96
  }
99
97
  determineSessionId() {
100
- const sessionTimestamp = parseInt(window.localStorage.getItem(this._tokenId) ?? "");
98
+ const sessionTimestamp = parseInt(window.localStorage.getItem("ems_et_sessionTime") ?? "");
101
99
  const sessionId = window.localStorage.getItem("ems_et_sessionId");
102
100
  const now = (new Date()).getTime();
103
101
  if (!isNaN(sessionTimestamp) && !empty(sessionId) && this.stillInSession(now, sessionTimestamp)) {
@@ -110,7 +108,7 @@ class EventDispatcherComponent {
110
108
  }
111
109
  }
112
110
  EventDispatcherComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: EventDispatcherComponent, deps: [{ token: EventDispatcherService }], target: i0.ɵɵFactoryTarget.Component });
113
- 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 });
111
+ EventDispatcherComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.7", type: EventDispatcherComponent, selector: "event-dispatcher", inputs: { endpoint: "endpoint", limit: ["sessionLimit", "limit"] }, ngImport: i0, template: '', isInline: true });
114
112
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: EventDispatcherComponent, decorators: [{
115
113
  type: Component,
116
114
  args: [{
@@ -121,12 +119,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImpor
121
119
  }], ctorParameters: function () { return [{ type: EventDispatcherService }]; }, propDecorators: { endpoint: [{
122
120
  type: Input,
123
121
  args: ["endpoint"]
124
- }], session: [{
125
- type: Input,
126
- args: ["session"]
127
- }], token: [{
128
- type: Input,
129
- args: ["token"]
130
122
  }], limit: [{
131
123
  type: Input,
132
124
  args: ["sessionLimit"]
@@ -1 +1 @@
1
- {"version":3,"file":"ems-web-app-event-tracker.mjs","sources":["../../src/lib/event-dispatcher.service.ts","../../src/lib/event-dispatcher.component.ts","../../src/lib/event-dispatcher.module.ts","../../src/public-api.ts","../../src/ems-web-app-event-tracker.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport { HttpClient, HttpHeaders, HttpResponse, HttpRequest, HttpErrorResponse, HttpParams } from '@angular/common/http';\nimport { Observable, Subject, BehaviorSubject, throwError, of } from 'rxjs';\nimport { catchError, map, tap, take } from \"rxjs/operators\";\nimport { IDispatcherEvent } from \"./event-dispatcher.interfaces\";\nimport { v4 as uuid } from \"uuid\";\nimport { trace, empty } from \"ems-web-app-utils\";\nimport * as _ from \"underscore\";\n\n@Injectable({\n providedIn: 'root'\n})\nexport class EventDispatcherService {\n \n public jwt?: string;\n public endpoint!: string;\n\n constructor(private http: HttpClient) {}\n\n public dispatch(event: IDispatcherEvent, name?: string):Promise<any> {\n const key = `${name ?? uuid()}.json`;\n const namespace = (event.namespace ? `${event.namespace}%2F` : \"\").replace(/:::/gim,\"%2F\");\n const request = this.buildRequest(`${namespace}${key}`);\n return this.executePutRequest(request, event);\n }\n\n public getEventTemplate(type: string): IDispatcherEvent {\n return {\n type,\n agent: window.navigator.userAgent,\n time: (new Date()).getTime(),\n timestamp: (new Date()).toISOString(),\n properties: {}\n }\n }\n\n private executePutRequest(request: string, data: any, transform?: (input: any) => any, suppressErrors?: boolean, customHeaders?: any ): Promise<any> {\n const headers = this.headers(customHeaders || {});\n return this.http.put(request, data, { headers }).pipe(\n map((result: any) => \n transform ? transform(result) : result\n ),\n catchError(suppressErrors ? this.handleErrorQuietly : this.handleError)\n ).toPromise()\n }\n\n private buildRequest(endpoint: string): string {\n return `${this.endpoint}/${endpoint}`;\n }\n\n private handleError(error: HttpErrorResponse) {\n return throwError(error);\n }\n\n private handleErrorQuietly(error: HttpErrorResponse) {\n console.error(error);\n return of(null);\n }\n\n private headers(custom: any = {}): HttpHeaders {\n const headers = _.extend({ \n \"Content-Type\": \"application/json\"\n }, custom);\n return new HttpHeaders(headers);\n }\n}\n","import { Component, OnInit, Input, Output } from '@angular/core';\nimport { EventDispatcherService } from \"./event-dispatcher.service\";\nimport { IDispatcherEvent } from \"./event-dispatcher.interfaces\";\nimport { v4 as uuid } from \"uuid\";\nimport { trace, empty } from \"ems-web-app-utils\";\n\n@Component({\n selector: 'event-dispatcher',\n template: '',\n styles: [\n ]\n})\nexport class EventDispatcherComponent implements OnInit {\n\n @Input(\"endpoint\") endpoint!: string;\n @Input(\"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._processing = false;\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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"}
1
+ {"version":3,"file":"ems-web-app-event-tracker.mjs","sources":["../../src/lib/event-dispatcher.service.ts","../../src/lib/event-dispatcher.component.ts","../../src/lib/event-dispatcher.module.ts","../../src/public-api.ts","../../src/ems-web-app-event-tracker.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport { HttpClient, HttpHeaders, HttpResponse, HttpRequest, HttpErrorResponse, HttpParams } from '@angular/common/http';\nimport { Observable, Subject, BehaviorSubject, throwError, of } from 'rxjs';\nimport { catchError, map, tap, take } from \"rxjs/operators\";\nimport { IDispatcherEvent } from \"./event-dispatcher.interfaces\";\nimport { v4 as uuid } from \"uuid\";\nimport { trace, empty } from \"ems-web-app-utils\";\nimport * as _ from \"underscore\";\n\n@Injectable({\n providedIn: 'root'\n})\nexport class EventDispatcherService {\n \n public jwt?: string;\n public endpoint!: string;\n\n constructor(private http: HttpClient) {}\n\n public dispatch(event: IDispatcherEvent, name?: string):Promise<any> {\n const key = `${name ?? uuid()}.json`;\n const namespace = (event.namespace ? `${event.namespace}%2F` : \"\").replace(/:::/gim,\"%2F\");\n const request = this.buildRequest(`${namespace}${key}`);\n return this.executePutRequest(request, event);\n }\n\n public getEventTemplate(type: string): IDispatcherEvent {\n return {\n type,\n agent: window.navigator.userAgent,\n time: (new Date()).getTime(),\n timestamp: (new Date()).toISOString(),\n properties: {}\n }\n }\n\n private executePutRequest(request: string, data: any, transform?: (input: any) => any, suppressErrors?: boolean, customHeaders?: any ): Promise<any> {\n const headers = this.headers(customHeaders || {});\n return this.http.put(request, data, { headers }).pipe(\n map((result: any) => \n transform ? transform(result) : result\n ),\n catchError(suppressErrors ? this.handleErrorQuietly : this.handleError)\n ).toPromise()\n }\n\n private buildRequest(endpoint: string): string {\n return `${this.endpoint}/${endpoint}`;\n }\n\n private handleError(error: HttpErrorResponse) {\n return throwError(error);\n }\n\n private handleErrorQuietly(error: HttpErrorResponse) {\n console.error(error);\n return of(null);\n }\n\n private headers(custom: any = {}): HttpHeaders {\n const headers = _.extend({ \n \"Content-Type\": \"application/json\"\n }, custom);\n return new HttpHeaders(headers);\n }\n}\n","import { Component, OnInit, Input, Output } from '@angular/core';\nimport { EventDispatcherService } from \"./event-dispatcher.service\";\nimport { IDispatcherEvent } from \"./event-dispatcher.interfaces\";\nimport { v4 as uuid } from \"uuid\";\nimport { trace, empty } from \"ems-web-app-utils\";\n\n@Component({\n selector: 'event-dispatcher',\n template: '',\n styles: [\n ]\n})\nexport class EventDispatcherComponent implements OnInit {\n\n @Input(\"endpoint\") endpoint!: string;\n @Input(\"sessionLimit\") limit: number = 1800000; //30m\n\n private _queue: {event: IDispatcherEvent, name?: string}[] = [];\n private _processing: boolean = false;\n private _sessionId!: string;\n \n constructor(private service: EventDispatcherService) {}\n\n ngOnInit(): void {\n this.service.endpoint = this.endpoint;\n this._sessionId = this.determineSessionId();\n console.log(\"setting session id\", this._sessionId);\n window.localStorage.setItem(\"ems_et_sessionId\", this._sessionId);\n window.setInterval(this.updateSession, 1000);\n }\n\n public dispatch(event: IDispatcherEvent, name?: string): any {\n event.sessionId = this._sessionId;\n this._queue.push({ event, name });\n this.processQueue();\n return event;\n }\n\n private async processQueue() {\n if(this._processing) return;\n this._processing = true;\n\n const obj = this._queue.shift();\n if(!obj) {\n this._processing = false;\n return;\n }\n\n await this.service.dispatch(obj.event, obj.name);\n this._processing = false;\n this.processQueue(); \n }\n\n private determineSessionId() {\n const sessionTimestamp = parseInt(window.localStorage.getItem(\"ems_et_sessionTime\") ?? \"\");\n const sessionId = window.localStorage.getItem(\"ems_et_sessionId\");\n const now = (new Date()).getTime();\n\n if(!isNaN(sessionTimestamp) && !empty(sessionId) && this.stillInSession(now, sessionTimestamp)) {\n return sessionId!;\n }\n \n return uuid();\n }\n\n private stillInSession(time1: number, time2: number) {\n return Math.abs(time1 - time2) < this.limit;\n }\n\n private updateSession = () => {\n const timestamp = (new Date()).getTime();\n window.localStorage.setItem(\"ems_et_sessionTime\", timestamp.toString());\n }\n\n}\n","import { NgModule } from '@angular/core';\nimport { EventDispatcherComponent } from './event-dispatcher.component';\n\n\n\n@NgModule({\n declarations: [\n EventDispatcherComponent\n ],\n imports: [\n ],\n exports: [\n EventDispatcherComponent\n ]\n})\nexport class EventDispatcherModule { }\n","/*\n * Public API Surface of event-dispatcher\n */\n\nexport * from './lib/event-dispatcher.service';\nexport * from './lib/event-dispatcher.component';\nexport * from './lib/event-dispatcher.module';\nexport * from './lib/event-dispatcher.interfaces';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["uuid","i1.EventDispatcherService"],"mappings":"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"}
@@ -5,12 +5,9 @@ import * as i0 from "@angular/core";
5
5
  export declare class EventDispatcherComponent implements OnInit {
6
6
  private service;
7
7
  endpoint: string;
8
- session?: any;
9
- token?: string;
10
8
  limit: number;
11
9
  private _queue;
12
10
  private _processing;
13
- private _tokenId;
14
11
  private _sessionId;
15
12
  constructor(service: EventDispatcherService);
16
13
  ngOnInit(): void;
@@ -20,5 +17,5 @@ export declare class EventDispatcherComponent implements OnInit {
20
17
  private stillInSession;
21
18
  private updateSession;
22
19
  static ɵfac: i0.ɵɵFactoryDeclaration<EventDispatcherComponent, never>;
23
- static ɵcmp: i0.ɵɵComponentDeclaration<EventDispatcherComponent, "event-dispatcher", never, { "endpoint": "endpoint"; "session": "session"; "token": "token"; "limit": "sessionLimit"; }, {}, never, never>;
20
+ static ɵcmp: i0.ɵɵComponentDeclaration<EventDispatcherComponent, "event-dispatcher", never, { "endpoint": "endpoint"; "limit": "sessionLimit"; }, {}, never, never>;
24
21
  }
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.18",
7
+ "version": "0.0.20",
8
8
  "peerDependencies": {
9
9
  "@angular/common": "^13.2.0",
10
10
  "@angular/core": "^13.2.0",