ems-web-app-event-tracker 0.0.24 → 0.0.26

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 { trace, empty, sleep } from "ems-web-app-utils";
4
4
  import * as i0 from "@angular/core";
5
5
  import * as i1 from "./event-dispatcher.service";
6
6
  export class EventDispatcherComponent {
@@ -42,6 +42,17 @@ export class EventDispatcherComponent {
42
42
  this.processQueue();
43
43
  return event;
44
44
  }
45
+ dispatchAsyncEvent(event, name) {
46
+ return new Promise(async (resolve, reject) => {
47
+ event.sessionId = this._sessionId;
48
+ this._queue.push({ event, name });
49
+ this.processQueue();
50
+ while (!event.processed) {
51
+ await sleep(250);
52
+ }
53
+ resolve(event);
54
+ });
55
+ }
45
56
  async processQueue() {
46
57
  if (this._processing)
47
58
  return;
@@ -52,6 +63,7 @@ export class EventDispatcherComponent {
52
63
  return;
53
64
  }
54
65
  await this.service.dispatch(obj.event, obj.name);
66
+ obj.event.processed = true;
55
67
  this._processing = false;
56
68
  this.processQueue();
57
69
  }
@@ -88,4 +100,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImpor
88
100
  type: Input,
89
101
  args: ["authtoken"]
90
102
  }] } });
91
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnQtZGlzcGF0Y2hlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL2V2ZW50LWRpc3BhdGNoZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsS0FBSyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBR2pFLE9BQU8sRUFBRSxFQUFFLElBQUksSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2xDLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7OztBQVFqRCxNQUFNLE9BQU8sd0JBQXdCO0lBV25DLFlBQW9CLE9BQStCO1FBQS9CLFlBQU8sR0FBUCxPQUFPLENBQXdCO1FBUjVCLFVBQUssR0FBVyxFQUFFLENBQUMsQ0FBQyxTQUFTO1FBRzVDLFdBQU0sR0FBK0MsRUFBRSxDQUFDO1FBQ3hELGdCQUFXLEdBQVksS0FBSyxDQUFDO1FBRTdCLGNBQVMsR0FBWSxLQUFLLENBQUM7UUFxQjNCLGtCQUFhLEdBQUcsQ0FBQyxLQUFTLEVBQUUsRUFBRTtZQUNwQyxLQUFLLENBQUMsZUFBZSxDQUFDLENBQUM7WUFDdkIsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7UUFDekIsQ0FBQyxDQUFBO1FBRU8saUJBQVksR0FBRyxDQUFDLEtBQVMsRUFBRSxFQUFFO1lBQ25DLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1lBQ3pCLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1FBQ3hCLENBQUMsQ0FBQTtRQW1DTyxrQkFBYSxHQUFHLEdBQUcsRUFBRTtZQUMzQixJQUFHLElBQUksQ0FBQyxTQUFTO2dCQUFFLE9BQU87WUFDMUIsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7WUFDNUMsTUFBTSxTQUFTLEdBQUcsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLENBQUMsT0FB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QUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQzVELENBQUM7O3FIQXZFVSx3QkFBd0I7eUdBQXhCLHdCQUF3QiwySkFKekIsRUFBRTsyRkFJRCx3QkFBd0I7a0JBTnBDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLGtCQUFrQjtvQkFDNUIsUUFBUSxFQUFFLEVBQUU7b0JBQ1osTUFBTSxFQUFFLEVBQ1A7aUJBQ0Y7NkdBR29CLFFBQVE7c0JBQTFCLEtBQUs7dUJBQUMsVUFBVTtnQkFDTSxLQUFLO3NCQUEzQixLQUFLO3VCQUFDLGNBQWM7Z0JBQ0QsS0FBSztzQkFBeEIsS0FBSzt1QkFBQyxXQUFXIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIElucHV0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEV2ZW50RGlzcGF0Y2hlclNlcnZpY2UgfSBmcm9tIFwiLi9ldmVudC1kaXNwYXRjaGVyLnNlcnZpY2VcIjtcbmltcG9ydCB7IElEaXNwYXRjaGVyRXZlbnQgfSBmcm9tIFwiLi9ldmVudC1kaXNwYXRjaGVyLmludGVyZmFjZXNcIjtcbmltcG9ydCB7IHY0IGFzIHV1aWQgfSBmcm9tIFwidXVpZFwiO1xuaW1wb3J0IHsgdHJhY2UsIGVtcHR5IH0gZnJvbSBcImVtcy13ZWItYXBwLXV0aWxzXCI7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2V2ZW50LWRpc3BhdGNoZXInLFxuICB0ZW1wbGF0ZTogJycsXG4gIHN0eWxlczogW1xuICBdXG59KVxuZXhwb3J0IGNsYXNzIEV2ZW50RGlzcGF0Y2hlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cbiAgQElucHV0KFwiZW5kcG9pbnRcIikgZW5kcG9pbnQhOiBzdHJpbmc7XG4gIEBJbnB1dChcInNlc3Npb25MaW1pdFwiKSBsaW1pdDogbnVtYmVyID0gMzA7IC8vbWludXRlc1xuICBASW5wdXQoXCJhdXRodG9rZW5cIikgdG9rZW4/OiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSBfcXVldWU6IHtldmVudDogSURpc3BhdGNoZXJFdmVudCwgbmFtZT86IHN0cmluZ31bXSA9IFtdO1xuICBwcml2YXRlIF9wcm9jZXNzaW5nOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgX3Nlc3Npb25JZCE6IHN0cmluZztcbiAgcHJpdmF0ZSBfaW5hY3RpdmU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgc2VydmljZTogRXZlbnREaXNwYXRjaGVyU2VydmljZSkge31cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnNlcnZpY2UuZW5kcG9pbnQgPSB0aGlzLmVuZHBvaW50O1xuICAgIHRoaXMuc2VydmljZS5qd3QgPSB0aGlzLnRva2VuO1xuICAgIHRoaXMuX3Nlc3Npb25JZCA9IHRoaXMuZGV0ZXJtaW5lU2Vzc2lvbklkKCk7XG4gICAgd2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKFwiZW1zX2V0X3Nlc3Npb25JZFwiLCB0aGlzLl9zZXNzaW9uSWQpO1xuICAgIHdpbmRvdy5vbmZvY3VzID0gKGV2ZW50OmFueSkgPT4gdGhpcy5vbldpbmRvd0ZvY3VzKGV2ZW50KTtcbiAgICB3aW5kb3cub25ibHVyID0gIChldmVudDphbnkpID0+IHRoaXMub25XaW5kb3dCbHVyKGV2ZW50KTtcbiAgICB3aW5kb3cuc2V0SW50ZXJ2YWwodGhpcy51cGRhdGVTZXNzaW9uLCAxMDAwKTtcbiAgfVxuXG4gIHB1YmxpYyBkaXNwYXRjaChldmVudDogSURpc3BhdGNoZXJFdmVudCwgbmFtZT86IHN0cmluZyk6IGFueSB7XG4gICAgZXZlbnQuc2Vzc2lvbklkID0gdGhpcy5fc2Vzc2lvbklkO1xuICAgIHRoaXMuX3F1ZXVlLnB1c2goeyBldmVudCwgbmFtZSB9KTtcbiAgICB0aGlzLnByb2Nlc3NRdWV1ZSgpO1xuICAgIHJldHVybiBldmVudDtcbiAgfVxuXG4gIHByaXZhdGUgb25XaW5kb3dGb2N1cyA9IChldmVudDphbnkpID0+IHtcbiAgICB0cmFjZShcIndpbmRvdyBhY3RpdmVcIik7XG4gICAgdGhpcy5faW5hY3RpdmUgPSBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgb25XaW5kb3dCbHVyID0gKGV2ZW50OmFueSkgPT4ge1xuICAgIHRyYWNlKFwid2luZG93IGluYWN0aXZlXCIpO1xuICAgIHRoaXMuX2luYWN0aXZlID0gdHJ1ZTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcHJvY2Vzc1F1ZXVlKCkge1xuICAgIGlmKHRoaXMuX3Byb2Nlc3NpbmcpIHJldHVybjtcbiAgICB0aGlzLl9wcm9jZXNzaW5nID0gdHJ1ZTtcblxuICAgIGNvbnN0IG9iaiA9IHRoaXMuX3F1ZXVlLnNoaWZ0KCk7XG4gICAgaWYoIW9iaikge1xuICAgICAgdGhpcy5fcHJvY2Vzc2luZyA9IGZhbHNlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGF3YWl0IHRoaXMuc2VydmljZS5kaXNwYXRjaChvYmouZXZlbnQsIG9iai5uYW1lKTtcbiAgICB0aGlzLl9wcm9jZXNzaW5nID0gZmFsc2U7XG4gICAgdGhpcy5wcm9jZXNzUXVldWUoKTsgXG4gIH1cblxuICBwcml2YXRlIGRldGVybWluZVNlc3Npb25JZCgpIHtcbiAgICBjb25zdCBzZXNzaW9uVGltZXN0YW1wID0gcGFyc2VJbnQod2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiZW1zX2V0X3Nlc3Npb25UaW1lXCIpID8/IFwiXCIpO1xuICAgIGNvbnN0IHNlc3Npb25JZCA9IHdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbShcImVtc19ldF9zZXNzaW9uSWRcIik7XG4gICAgY29uc3Qgbm93ID0gKG5ldyBEYXRlKCkpLmdldFRpbWUoKTtcblxuICAgIGlmKCFpc05hTihzZXNzaW9uVGltZXN0YW1wKSAmJiAhZW1wdHkoc2Vzc2lvbklkKSAmJiB0aGlzLnN0aWxsSW5TZXNzaW9uKG5vdywgc2Vzc2lvblRpbWVzdGFtcCkpIHtcbiAgICAgIHJldHVybiBzZXNzaW9uSWQhO1xuICAgIH1cblxuICAgIHRyYWNlKFwiY3JlYXRpbmcgbmV3IHNlc3Npb24gaWRcIik7XG4gICAgXG4gICAgcmV0dXJuIHV1aWQoKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RpbGxJblNlc3Npb24odGltZTE6IG51bWJlciwgdGltZTI6IG51bWJlcikge1xuICAgIHJldHVybiBNYXRoLmFicyh0aW1lMSAtIHRpbWUyKSA8ICh0aGlzLmxpbWl0ICogMTAwMCAqIDYwKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlU2Vzc2lvbiA9ICgpID0+IHtcbiAgICBpZih0aGlzLl9pbmFjdGl2ZSkgcmV0dXJuO1xuICAgIGNvbnN0IHNlc3Npb25JZCA9IHRoaXMuZGV0ZXJtaW5lU2Vzc2lvbklkKCk7XG4gICAgY29uc3QgdGltZXN0YW1wID0gKG5ldyBEYXRlKCkpLmdldFRpbWUoKTtcbiAgICB3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oXCJlbXNfZXRfc2Vzc2lvblRpbWVcIiwgdGltZXN0YW1wLnRvU3RyaW5nKCkpO1xuICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbShcImVtc19ldF9zZXNzaW9uSWRcIiwgc2Vzc2lvbklkKTtcbiAgfVxuXG59XG4iXX0=
103
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnQtZGlzcGF0Y2hlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL2V2ZW50LWRpc3BhdGNoZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsS0FBSyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBR2pFLE9BQU8sRUFBRSxFQUFFLElBQUksSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2xDLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLG1CQUFtQixDQUFDOzs7QUFReEQsTUFBTSxPQUFPLHdCQUF3QjtJQVduQyxZQUFvQixPQUErQjtRQUEvQixZQUFPLEdBQVAsT0FBTyxDQUF3QjtRQVI1QixVQUFLLEdBQVcsRUFBRSxDQUFDLENBQUMsU0FBUztRQUc1QyxXQUFNLEdBQStDLEVBQUUsQ0FBQztRQUN4RCxnQkFBVyxHQUFZLEtBQUssQ0FBQztRQUU3QixjQUFTLEdBQVksS0FBSyxDQUFDO1FBa0MzQixrQkFBYSxHQUFHLENBQUMsS0FBUyxFQUFFLEVBQUU7WUFDcEMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ3pCLENBQUMsQ0FBQTtRQUVPLGlCQUFZLEdBQUcsQ0FBQyxLQUFTLEVBQUUsRUFBRTtZQUNuQyxLQUFLLENBQUMsaUJBQWlCLENBQUMsQ0FBQztZQUN6QixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztRQUN4QixDQUFDLENBQUE7UUFvQ08sa0JBQWEsR0FBRyxHQUFHLEVBQUU7WUFDM0IsSUFBRyxJQUFJLENBQUMsU0FBUztnQkFBRSxPQUFPO1lBQzFCLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1lBQzVDLE1BQU0sU0FBUyxHQUFHLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FB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QUksRUFBRSxDQUFDLENBQUM7UUFDM0YsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUNsRSxNQUFNLEdBQUcsR0FBRyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUVuQyxJQUFHLENBQUMsS0FBSyxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLEVBQUUsZ0JBQWdCLENBQUMsRUFBRTtZQUM5RixPQUFPLFNBQVUsQ0FBQztTQUNuQjtRQUVELEtBQUssQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO1FBRWpDLE9BQU8sSUFBSSxFQUFFLENBQUM7SUFDaEIsQ0FBQztJQUVPLGNBQWMsQ0FBQyxLQUFhLEVBQUUsS0FBYTtRQUNqRCxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDNUQsQ0FBQzs7cUhBckZVLHdCQUF3Qjt5R0FBeEIsd0JBQXdCLDJKQUp6QixFQUFFOzJGQUlELHdCQUF3QjtrQkFOcEMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsa0JBQWtCO29CQUM1QixRQUFRLEVBQUUsRUFBRTtvQkFDWixNQUFNLEVBQUUsRUFDUDtpQkFDRjs2R0FHb0IsUUFBUTtzQkFBMUIsS0FBSzt1QkFBQyxVQUFVO2dCQUNNLEtBQUs7c0JBQTNCLEtBQUs7dUJBQUMsY0FBYztnQkFDRCxLQUFLO3NCQUF4QixLQUFLO3VCQUFDLFdBQVciLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgSW5wdXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRXZlbnREaXNwYXRjaGVyU2VydmljZSB9IGZyb20gXCIuL2V2ZW50LWRpc3BhdGNoZXIuc2VydmljZVwiO1xuaW1wb3J0IHsgSURpc3BhdGNoZXJFdmVudCB9IGZyb20gXCIuL2V2ZW50LWRpc3BhdGNoZXIuaW50ZXJmYWNlc1wiO1xuaW1wb3J0IHsgdjQgYXMgdXVpZCB9IGZyb20gXCJ1dWlkXCI7XG5pbXBvcnQgeyB0cmFjZSwgZW1wdHksIHNsZWVwIH0gZnJvbSBcImVtcy13ZWItYXBwLXV0aWxzXCI7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2V2ZW50LWRpc3BhdGNoZXInLFxuICB0ZW1wbGF0ZTogJycsXG4gIHN0eWxlczogW1xuICBdXG59KVxuZXhwb3J0IGNsYXNzIEV2ZW50RGlzcGF0Y2hlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cbiAgQElucHV0KFwiZW5kcG9pbnRcIikgZW5kcG9pbnQhOiBzdHJpbmc7XG4gIEBJbnB1dChcInNlc3Npb25MaW1pdFwiKSBsaW1pdDogbnVtYmVyID0gMzA7IC8vbWludXRlc1xuICBASW5wdXQoXCJhdXRodG9rZW5cIikgdG9rZW4/OiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSBfcXVldWU6IHtldmVudDogSURpc3BhdGNoZXJFdmVudCwgbmFtZT86IHN0cmluZ31bXSA9IFtdO1xuICBwcml2YXRlIF9wcm9jZXNzaW5nOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgX3Nlc3Npb25JZCE6IHN0cmluZztcbiAgcHJpdmF0ZSBfaW5hY3RpdmU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgc2VydmljZTogRXZlbnREaXNwYXRjaGVyU2VydmljZSkge31cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnNlcnZpY2UuZW5kcG9pbnQgPSB0aGlzLmVuZHBvaW50O1xuICAgIHRoaXMuc2VydmljZS5qd3QgPSB0aGlzLnRva2VuO1xuICAgIHRoaXMuX3Nlc3Npb25JZCA9IHRoaXMuZGV0ZXJtaW5lU2Vzc2lvbklkKCk7XG4gICAgd2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKFwiZW1zX2V0X3Nlc3Npb25JZFwiLCB0aGlzLl9zZXNzaW9uSWQpO1xuICAgIHdpbmRvdy5vbmZvY3VzID0gKGV2ZW50OmFueSkgPT4gdGhpcy5vbldpbmRvd0ZvY3VzKGV2ZW50KTtcbiAgICB3aW5kb3cub25ibHVyID0gIChldmVudDphbnkpID0+IHRoaXMub25XaW5kb3dCbHVyKGV2ZW50KTtcbiAgICB3aW5kb3cuc2V0SW50ZXJ2YWwodGhpcy51cGRhdGVTZXNzaW9uLCAxMDAwKTtcbiAgfVxuXG4gIHB1YmxpYyBkaXNwYXRjaChldmVudDogSURpc3BhdGNoZXJFdmVudCwgbmFtZT86IHN0cmluZyk6IElEaXNwYXRjaGVyRXZlbnQge1xuICAgIGV2ZW50LnNlc3Npb25JZCA9IHRoaXMuX3Nlc3Npb25JZDtcbiAgICB0aGlzLl9xdWV1ZS5wdXNoKHsgZXZlbnQsIG5hbWUgfSk7XG4gICAgdGhpcy5wcm9jZXNzUXVldWUoKTtcbiAgICByZXR1cm4gZXZlbnQ7XG4gIH1cblxuICBwdWJsaWMgZGlzcGF0Y2hBc3luY0V2ZW50KGV2ZW50OiBJRGlzcGF0Y2hlckV2ZW50LCBuYW1lPzogc3RyaW5nKTogUHJvbWlzZTxJRGlzcGF0Y2hlckV2ZW50PiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jKHJlc29sdmU6ICh2YWx1ZTogYW55KSA9PiB2b2lkLCByZWplY3Q6ICh2YWx1ZTogYW55KSA9PiB2b2lkKSA9PiB7XG4gICAgICBldmVudC5zZXNzaW9uSWQgPSB0aGlzLl9zZXNzaW9uSWQ7XG4gICAgICB0aGlzLl9xdWV1ZS5wdXNoKHsgZXZlbnQsIG5hbWUgfSk7XG4gICAgICB0aGlzLnByb2Nlc3NRdWV1ZSgpO1xuICAgICBcbiAgICAgIHdoaWxlKCFldmVudC5wcm9jZXNzZWQpIHtcbiAgICAgICAgYXdhaXQgc2xlZXAoMjUwKTtcbiAgICAgIH1cbiAgICAgIHJlc29sdmUoZXZlbnQpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBvbldpbmRvd0ZvY3VzID0gKGV2ZW50OmFueSkgPT4ge1xuICAgIHRyYWNlKFwid2luZG93IGFjdGl2ZVwiKTtcbiAgICB0aGlzLl9pbmFjdGl2ZSA9IGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSBvbldpbmRvd0JsdXIgPSAoZXZlbnQ6YW55KSA9PiB7XG4gICAgdHJhY2UoXCJ3aW5kb3cgaW5hY3RpdmVcIik7XG4gICAgdGhpcy5faW5hY3RpdmUgPSB0cnVlO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBwcm9jZXNzUXVldWUoKSB7XG4gICAgaWYodGhpcy5fcHJvY2Vzc2luZykgcmV0dXJuO1xuICAgIHRoaXMuX3Byb2Nlc3NpbmcgPSB0cnVlO1xuXG4gICAgY29uc3Qgb2JqID0gdGhpcy5fcXVldWUuc2hpZnQoKTtcbiAgICBpZighb2JqKSB7XG4gICAgICB0aGlzLl9wcm9jZXNzaW5nID0gZmFsc2U7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy5zZXJ2aWNlLmRpc3BhdGNoKG9iai5ldmVudCwgb2JqLm5hbWUpO1xuICAgIG9iai5ldmVudC5wcm9jZXNzZWQgPSB0cnVlO1xuICAgIHRoaXMuX3Byb2Nlc3NpbmcgPSBmYWxzZTtcbiAgICB0aGlzLnByb2Nlc3NRdWV1ZSgpOyBcbiAgfVxuXG4gIHByaXZhdGUgZGV0ZXJtaW5lU2Vzc2lvbklkKCkge1xuICAgIGNvbnN0IHNlc3Npb25UaW1lc3RhbXAgPSBwYXJzZUludCh3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJlbXNfZXRfc2Vzc2lvblRpbWVcIikgPz8gXCJcIik7XG4gICAgY29uc3Qgc2Vzc2lvbklkID0gd2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiZW1zX2V0X3Nlc3Npb25JZFwiKTtcbiAgICBjb25zdCBub3cgPSAobmV3IERhdGUoKSkuZ2V0VGltZSgpO1xuXG4gICAgaWYoIWlzTmFOKHNlc3Npb25UaW1lc3RhbXApICYmICFlbXB0eShzZXNzaW9uSWQpICYmIHRoaXMuc3RpbGxJblNlc3Npb24obm93LCBzZXNzaW9uVGltZXN0YW1wKSkge1xuICAgICAgcmV0dXJuIHNlc3Npb25JZCE7XG4gICAgfVxuXG4gICAgdHJhY2UoXCJjcmVhdGluZyBuZXcgc2Vzc2lvbiBpZFwiKTtcbiAgICBcbiAgICByZXR1cm4gdXVpZCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGlsbEluU2Vzc2lvbih0aW1lMTogbnVtYmVyLCB0aW1lMjogbnVtYmVyKSB7XG4gICAgcmV0dXJuIE1hdGguYWJzKHRpbWUxIC0gdGltZTIpIDwgKHRoaXMubGltaXQgKiAxMDAwICogNjApO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVTZXNzaW9uID0gKCkgPT4ge1xuICAgIGlmKHRoaXMuX2luYWN0aXZlKSByZXR1cm47XG4gICAgY29uc3Qgc2Vzc2lvbklkID0gdGhpcy5kZXRlcm1pbmVTZXNzaW9uSWQoKTtcbiAgICBjb25zdCB0aW1lc3RhbXAgPSAobmV3IERhdGUoKSkuZ2V0VGltZSgpO1xuICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbShcImVtc19ldF9zZXNzaW9uVGltZVwiLCB0aW1lc3RhbXAudG9TdHJpbmcoKSk7XG4gICAgd2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKFwiZW1zX2V0X3Nlc3Npb25JZFwiLCBzZXNzaW9uSWQpO1xuICB9XG5cbn1cbiJdfQ==
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnQtZGlzcGF0Y2hlci5pbnRlcmZhY2VzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9ldmVudC1kaXNwYXRjaGVyLmludGVyZmFjZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBpbnRlcmZhY2UgSURpc3BhdGNoZXJFdmVudCB7XG5cdHR5cGU6IHN0cmluZyxcblx0bmFtZXNwYWNlPzogc3RyaW5nLFxuXHR1c2VySWQ/OiBzdHJpbmcgfCBudW1iZXIsXG5cdHNlc3Npb25JZD86IHN0cmluZyxcblx0dGltZXN0YW1wPzogc3RyaW5nLFxuXHR0aW1lPzogbnVtYmVyLFxuXHRhZ2VudD86IHN0cmluZyxcblx0cHJvcGVydGllczogUmVjb3JkPHN0cmluZywgYW55PlxufVxuIl19
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnQtZGlzcGF0Y2hlci5pbnRlcmZhY2VzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9ldmVudC1kaXNwYXRjaGVyLmludGVyZmFjZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBpbnRlcmZhY2UgSURpc3BhdGNoZXJFdmVudCB7XG5cdHR5cGU6IHN0cmluZyxcblx0bmFtZXNwYWNlPzogc3RyaW5nLFxuXHR1c2VySWQ/OiBzdHJpbmcgfCBudW1iZXIsXG5cdHNlc3Npb25JZD86IHN0cmluZyxcblx0dGltZXN0YW1wPzogc3RyaW5nLFxuXHR0aW1lPzogbnVtYmVyLFxuXHRhZ2VudD86IHN0cmluZyxcblx0cHJvY2Vzc2VkPzogYm9vbGVhbixcblx0cHJvcGVydGllczogUmVjb3JkPHN0cmluZywgYW55PlxufVxuIl19
@@ -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 { trace, sleep, empty } from 'ems-web-app-utils';
11
11
 
12
12
  class EventDispatcherService {
13
13
  constructor(http) {
@@ -97,6 +97,17 @@ class EventDispatcherComponent {
97
97
  this.processQueue();
98
98
  return event;
99
99
  }
100
+ dispatchAsyncEvent(event, name) {
101
+ return new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () {
102
+ event.sessionId = this._sessionId;
103
+ this._queue.push({ event, name });
104
+ this.processQueue();
105
+ while (!event.processed) {
106
+ yield sleep(250);
107
+ }
108
+ resolve(event);
109
+ }));
110
+ }
100
111
  processQueue() {
101
112
  return __awaiter(this, void 0, void 0, function* () {
102
113
  if (this._processing)
@@ -108,6 +119,7 @@ class EventDispatcherComponent {
108
119
  return;
109
120
  }
110
121
  yield this.service.dispatch(obj.event, obj.name);
122
+ obj.event.processed = true;
111
123
  this._processing = false;
112
124
  this.processQueue();
113
125
  });
@@ -1 +1 @@
1
- {"version":3,"file":"ems-web-app-event-tracker.mjs","sources":["../../src/lib/event-dispatcher.service.ts","../../src/lib/event-dispatcher.component.ts","../../src/lib/event-dispatcher.module.ts","../../src/public-api.ts","../../src/ems-web-app-event-tracker.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport { HttpClient, HttpHeaders, HttpResponse, HttpRequest, HttpErrorResponse, HttpParams } from '@angular/common/http';\nimport { Observable, Subject, BehaviorSubject, throwError, of } from 'rxjs';\nimport { catchError, map, tap, take } from \"rxjs/operators\";\nimport { IDispatcherEvent } from \"./event-dispatcher.interfaces\";\nimport { v4 as uuid } from \"uuid\";\nimport { trace, empty } from \"ems-web-app-utils\";\nimport * as _ from \"underscore\";\n\n@Injectable({\n providedIn: 'root'\n})\nexport class EventDispatcherService {\n \n public jwt?: string;\n public endpoint!: string;\n\n constructor(private http: HttpClient) {}\n\n public dispatch(event: IDispatcherEvent, name?: string):Promise<any> {\n const key = `${name ?? uuid()}.json`;\n const namespace = (event.namespace ? `${event.namespace}%2F` : \"\").replace(/:::/gim,\"%2F\");\n const request = this.buildRequest(`${namespace}${key}`);\n return this.executePutRequest(request, event);\n }\n\n public getEventTemplate(type: string): IDispatcherEvent {\n return {\n type,\n agent: window.navigator.userAgent,\n time: (new Date()).getTime(),\n timestamp: (new Date()).toISOString(),\n properties: {}\n }\n }\n\n private executePutRequest(request: string, data: any, transform?: (input: any) => any, suppressErrors?: boolean, customHeaders?: any ): Promise<any> {\n const headers = this.headers(customHeaders || {});\n return this.http.put(request, data, { headers }).pipe(\n map((result: any) => \n transform ? transform(result) : result\n ),\n catchError(suppressErrors ? this.handleErrorQuietly : this.handleError)\n ).toPromise()\n }\n\n private buildRequest(endpoint: string): string {\n return `${this.endpoint}/${endpoint}`;\n }\n\n private handleError(error: HttpErrorResponse) {\n return throwError(error);\n }\n\n private handleErrorQuietly(error: HttpErrorResponse) {\n console.error(error);\n return of(null);\n }\n\n private headers(custom: any = {}): HttpHeaders {\n const headers = _.extend({ \n \"Content-Type\": \"application/json\"\n }, custom);\n return new HttpHeaders(headers);\n }\n}\n","import { Component, OnInit, Input, Output } from '@angular/core';\nimport { EventDispatcherService } from \"./event-dispatcher.service\";\nimport { IDispatcherEvent } from \"./event-dispatcher.interfaces\";\nimport { v4 as uuid } from \"uuid\";\nimport { trace, empty } from \"ems-web-app-utils\";\n\n@Component({\n selector: 'event-dispatcher',\n template: '',\n styles: [\n ]\n})\nexport class EventDispatcherComponent implements OnInit {\n\n @Input(\"endpoint\") endpoint!: string;\n @Input(\"sessionLimit\") limit: number = 30; //minutes\n @Input(\"authtoken\") token?: string;\n\n private _queue: {event: IDispatcherEvent, name?: string}[] = [];\n private _processing: boolean = false;\n private _sessionId!: string;\n private _inactive: boolean = false;\n \n constructor(private service: EventDispatcherService) {}\n\n ngOnInit(): void {\n this.service.endpoint = this.endpoint;\n this.service.jwt = this.token;\n this._sessionId = this.determineSessionId();\n window.localStorage.setItem(\"ems_et_sessionId\", this._sessionId);\n window.onfocus = (event:any) => this.onWindowFocus(event);\n window.onblur = (event:any) => this.onWindowBlur(event);\n window.setInterval(this.updateSession, 1000);\n }\n\n public dispatch(event: IDispatcherEvent, name?: string): any {\n event.sessionId = this._sessionId;\n this._queue.push({ event, name });\n this.processQueue();\n return event;\n }\n\n private onWindowFocus = (event:any) => {\n trace(\"window active\");\n this._inactive = false;\n }\n\n private onWindowBlur = (event:any) => {\n trace(\"window inactive\");\n this._inactive = true;\n }\n\n private async processQueue() {\n if(this._processing) return;\n this._processing = true;\n\n const obj = this._queue.shift();\n if(!obj) {\n this._processing = false;\n return;\n }\n\n await this.service.dispatch(obj.event, obj.name);\n this._processing = false;\n this.processQueue(); \n }\n\n private determineSessionId() {\n const sessionTimestamp = parseInt(window.localStorage.getItem(\"ems_et_sessionTime\") ?? \"\");\n const sessionId = window.localStorage.getItem(\"ems_et_sessionId\");\n const now = (new Date()).getTime();\n\n if(!isNaN(sessionTimestamp) && !empty(sessionId) && this.stillInSession(now, sessionTimestamp)) {\n return sessionId!;\n }\n\n trace(\"creating new session id\");\n \n return uuid();\n }\n\n private stillInSession(time1: number, time2: number) {\n return Math.abs(time1 - time2) < (this.limit * 1000 * 60);\n }\n\n private updateSession = () => {\n if(this._inactive) return;\n const sessionId = this.determineSessionId();\n const timestamp = (new Date()).getTime();\n window.localStorage.setItem(\"ems_et_sessionTime\", timestamp.toString());\n window.localStorage.setItem(\"ems_et_sessionId\", sessionId);\n }\n\n}\n","import { NgModule } from '@angular/core';\nimport { EventDispatcherComponent } from './event-dispatcher.component';\n\n\n\n@NgModule({\n declarations: [\n EventDispatcherComponent\n ],\n imports: [\n ],\n exports: [\n EventDispatcherComponent\n ]\n})\nexport class EventDispatcherModule { }\n","/*\n * Public API Surface of event-dispatcher\n */\n\nexport * from './lib/event-dispatcher.service';\nexport * from './lib/event-dispatcher.component';\nexport * from './lib/event-dispatcher.module';\nexport * from './lib/event-dispatcher.interfaces';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["uuid","i1.EventDispatcherService"],"mappings":"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"}
1
+ {"version":3,"file":"ems-web-app-event-tracker.mjs","sources":["../../src/lib/event-dispatcher.service.ts","../../src/lib/event-dispatcher.component.ts","../../src/lib/event-dispatcher.module.ts","../../src/public-api.ts","../../src/ems-web-app-event-tracker.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport { HttpClient, HttpHeaders, HttpResponse, HttpRequest, HttpErrorResponse, HttpParams } from '@angular/common/http';\nimport { Observable, Subject, BehaviorSubject, throwError, of } from 'rxjs';\nimport { catchError, map, tap, take } from \"rxjs/operators\";\nimport { IDispatcherEvent } from \"./event-dispatcher.interfaces\";\nimport { v4 as uuid } from \"uuid\";\nimport { trace, empty } from \"ems-web-app-utils\";\nimport * as _ from \"underscore\";\n\n@Injectable({\n providedIn: 'root'\n})\nexport class EventDispatcherService {\n \n public jwt?: string;\n public endpoint!: string;\n\n constructor(private http: HttpClient) {}\n\n public dispatch(event: IDispatcherEvent, name?: string):Promise<any> {\n const key = `${name ?? uuid()}.json`;\n const namespace = (event.namespace ? `${event.namespace}%2F` : \"\").replace(/:::/gim,\"%2F\");\n const request = this.buildRequest(`${namespace}${key}`);\n return this.executePutRequest(request, event);\n }\n\n public getEventTemplate(type: string): IDispatcherEvent {\n return {\n type,\n agent: window.navigator.userAgent,\n time: (new Date()).getTime(),\n timestamp: (new Date()).toISOString(),\n properties: {}\n }\n }\n\n private executePutRequest(request: string, data: any, transform?: (input: any) => any, suppressErrors?: boolean, customHeaders?: any ): Promise<any> {\n const headers = this.headers(customHeaders || {});\n return this.http.put(request, data, { headers }).pipe(\n map((result: any) => \n transform ? transform(result) : result\n ),\n catchError(suppressErrors ? this.handleErrorQuietly : this.handleError)\n ).toPromise()\n }\n\n private buildRequest(endpoint: string): string {\n return `${this.endpoint}/${endpoint}`;\n }\n\n private handleError(error: HttpErrorResponse) {\n return throwError(error);\n }\n\n private handleErrorQuietly(error: HttpErrorResponse) {\n console.error(error);\n return of(null);\n }\n\n private headers(custom: any = {}): HttpHeaders {\n const headers = _.extend({ \n \"Content-Type\": \"application/json\"\n }, custom);\n return new HttpHeaders(headers);\n }\n}\n","import { Component, OnInit, Input, Output } from '@angular/core';\nimport { EventDispatcherService } from \"./event-dispatcher.service\";\nimport { IDispatcherEvent } from \"./event-dispatcher.interfaces\";\nimport { v4 as uuid } from \"uuid\";\nimport { trace, empty, sleep } from \"ems-web-app-utils\";\n\n@Component({\n selector: 'event-dispatcher',\n template: '',\n styles: [\n ]\n})\nexport class EventDispatcherComponent implements OnInit {\n\n @Input(\"endpoint\") endpoint!: string;\n @Input(\"sessionLimit\") limit: number = 30; //minutes\n @Input(\"authtoken\") token?: string;\n\n private _queue: {event: IDispatcherEvent, name?: string}[] = [];\n private _processing: boolean = false;\n private _sessionId!: string;\n private _inactive: boolean = false;\n \n constructor(private service: EventDispatcherService) {}\n\n ngOnInit(): void {\n this.service.endpoint = this.endpoint;\n this.service.jwt = this.token;\n this._sessionId = this.determineSessionId();\n window.localStorage.setItem(\"ems_et_sessionId\", this._sessionId);\n window.onfocus = (event:any) => this.onWindowFocus(event);\n window.onblur = (event:any) => this.onWindowBlur(event);\n window.setInterval(this.updateSession, 1000);\n }\n\n public dispatch(event: IDispatcherEvent, name?: string): IDispatcherEvent {\n event.sessionId = this._sessionId;\n this._queue.push({ event, name });\n this.processQueue();\n return event;\n }\n\n public dispatchAsyncEvent(event: IDispatcherEvent, name?: string): Promise<IDispatcherEvent> {\n return new Promise(async(resolve: (value: any) => void, reject: (value: any) => void) => {\n event.sessionId = this._sessionId;\n this._queue.push({ event, name });\n this.processQueue();\n \n while(!event.processed) {\n await sleep(250);\n }\n resolve(event);\n });\n }\n\n private onWindowFocus = (event:any) => {\n trace(\"window active\");\n this._inactive = false;\n }\n\n private onWindowBlur = (event:any) => {\n trace(\"window inactive\");\n this._inactive = true;\n }\n\n private async processQueue() {\n if(this._processing) return;\n this._processing = true;\n\n const obj = this._queue.shift();\n if(!obj) {\n this._processing = false;\n return;\n }\n\n await this.service.dispatch(obj.event, obj.name);\n obj.event.processed = true;\n this._processing = false;\n this.processQueue(); \n }\n\n private determineSessionId() {\n const sessionTimestamp = parseInt(window.localStorage.getItem(\"ems_et_sessionTime\") ?? \"\");\n const sessionId = window.localStorage.getItem(\"ems_et_sessionId\");\n const now = (new Date()).getTime();\n\n if(!isNaN(sessionTimestamp) && !empty(sessionId) && this.stillInSession(now, sessionTimestamp)) {\n return sessionId!;\n }\n\n trace(\"creating new session id\");\n \n return uuid();\n }\n\n private stillInSession(time1: number, time2: number) {\n return Math.abs(time1 - time2) < (this.limit * 1000 * 60);\n }\n\n private updateSession = () => {\n if(this._inactive) return;\n const sessionId = this.determineSessionId();\n const timestamp = (new Date()).getTime();\n window.localStorage.setItem(\"ems_et_sessionTime\", timestamp.toString());\n window.localStorage.setItem(\"ems_et_sessionId\", sessionId);\n }\n\n}\n","import { NgModule } from '@angular/core';\nimport { EventDispatcherComponent } from './event-dispatcher.component';\n\n\n\n@NgModule({\n declarations: [\n EventDispatcherComponent\n ],\n imports: [\n ],\n exports: [\n EventDispatcherComponent\n ]\n})\nexport class EventDispatcherModule { }\n","/*\n * Public API Surface of event-dispatcher\n */\n\nexport * from './lib/event-dispatcher.service';\nexport * from './lib/event-dispatcher.component';\nexport * from './lib/event-dispatcher.module';\nexport * from './lib/event-dispatcher.interfaces';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["uuid","i1.EventDispatcherService"],"mappings":"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"}
@@ -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 { trace, sleep, empty } from 'ems-web-app-utils';
10
10
 
11
11
  class EventDispatcherService {
12
12
  constructor(http) {
@@ -96,6 +96,17 @@ class EventDispatcherComponent {
96
96
  this.processQueue();
97
97
  return event;
98
98
  }
99
+ dispatchAsyncEvent(event, name) {
100
+ return new Promise(async (resolve, reject) => {
101
+ event.sessionId = this._sessionId;
102
+ this._queue.push({ event, name });
103
+ this.processQueue();
104
+ while (!event.processed) {
105
+ await sleep(250);
106
+ }
107
+ resolve(event);
108
+ });
109
+ }
99
110
  async processQueue() {
100
111
  if (this._processing)
101
112
  return;
@@ -106,6 +117,7 @@ class EventDispatcherComponent {
106
117
  return;
107
118
  }
108
119
  await this.service.dispatch(obj.event, obj.name);
120
+ obj.event.processed = true;
109
121
  this._processing = false;
110
122
  this.processQueue();
111
123
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ems-web-app-event-tracker.mjs","sources":["../../src/lib/event-dispatcher.service.ts","../../src/lib/event-dispatcher.component.ts","../../src/lib/event-dispatcher.module.ts","../../src/public-api.ts","../../src/ems-web-app-event-tracker.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport { HttpClient, HttpHeaders, HttpResponse, HttpRequest, HttpErrorResponse, HttpParams } from '@angular/common/http';\nimport { Observable, Subject, BehaviorSubject, throwError, of } from 'rxjs';\nimport { catchError, map, tap, take } from \"rxjs/operators\";\nimport { IDispatcherEvent } from \"./event-dispatcher.interfaces\";\nimport { v4 as uuid } from \"uuid\";\nimport { trace, empty } from \"ems-web-app-utils\";\nimport * as _ from \"underscore\";\n\n@Injectable({\n providedIn: 'root'\n})\nexport class EventDispatcherService {\n \n public jwt?: string;\n public endpoint!: string;\n\n constructor(private http: HttpClient) {}\n\n public dispatch(event: IDispatcherEvent, name?: string):Promise<any> {\n const key = `${name ?? uuid()}.json`;\n const namespace = (event.namespace ? `${event.namespace}%2F` : \"\").replace(/:::/gim,\"%2F\");\n const request = this.buildRequest(`${namespace}${key}`);\n return this.executePutRequest(request, event);\n }\n\n public getEventTemplate(type: string): IDispatcherEvent {\n return {\n type,\n agent: window.navigator.userAgent,\n time: (new Date()).getTime(),\n timestamp: (new Date()).toISOString(),\n properties: {}\n }\n }\n\n private executePutRequest(request: string, data: any, transform?: (input: any) => any, suppressErrors?: boolean, customHeaders?: any ): Promise<any> {\n const headers = this.headers(customHeaders || {});\n return this.http.put(request, data, { headers }).pipe(\n map((result: any) => \n transform ? transform(result) : result\n ),\n catchError(suppressErrors ? this.handleErrorQuietly : this.handleError)\n ).toPromise()\n }\n\n private buildRequest(endpoint: string): string {\n return `${this.endpoint}/${endpoint}`;\n }\n\n private handleError(error: HttpErrorResponse) {\n return throwError(error);\n }\n\n private handleErrorQuietly(error: HttpErrorResponse) {\n console.error(error);\n return of(null);\n }\n\n private headers(custom: any = {}): HttpHeaders {\n const headers = _.extend({ \n \"Content-Type\": \"application/json\"\n }, custom);\n return new HttpHeaders(headers);\n }\n}\n","import { Component, OnInit, Input, Output } from '@angular/core';\nimport { EventDispatcherService } from \"./event-dispatcher.service\";\nimport { IDispatcherEvent } from \"./event-dispatcher.interfaces\";\nimport { v4 as uuid } from \"uuid\";\nimport { trace, empty } from \"ems-web-app-utils\";\n\n@Component({\n selector: 'event-dispatcher',\n template: '',\n styles: [\n ]\n})\nexport class EventDispatcherComponent implements OnInit {\n\n @Input(\"endpoint\") endpoint!: string;\n @Input(\"sessionLimit\") limit: number = 30; //minutes\n @Input(\"authtoken\") token?: string;\n\n private _queue: {event: IDispatcherEvent, name?: string}[] = [];\n private _processing: boolean = false;\n private _sessionId!: string;\n private _inactive: boolean = false;\n \n constructor(private service: EventDispatcherService) {}\n\n ngOnInit(): void {\n this.service.endpoint = this.endpoint;\n this.service.jwt = this.token;\n this._sessionId = this.determineSessionId();\n window.localStorage.setItem(\"ems_et_sessionId\", this._sessionId);\n window.onfocus = (event:any) => this.onWindowFocus(event);\n window.onblur = (event:any) => this.onWindowBlur(event);\n window.setInterval(this.updateSession, 1000);\n }\n\n public dispatch(event: IDispatcherEvent, name?: string): any {\n event.sessionId = this._sessionId;\n this._queue.push({ event, name });\n this.processQueue();\n return event;\n }\n\n private onWindowFocus = (event:any) => {\n trace(\"window active\");\n this._inactive = false;\n }\n\n private onWindowBlur = (event:any) => {\n trace(\"window inactive\");\n this._inactive = true;\n }\n\n private async processQueue() {\n if(this._processing) return;\n this._processing = true;\n\n const obj = this._queue.shift();\n if(!obj) {\n this._processing = false;\n return;\n }\n\n await this.service.dispatch(obj.event, obj.name);\n this._processing = false;\n this.processQueue(); \n }\n\n private determineSessionId() {\n const sessionTimestamp = parseInt(window.localStorage.getItem(\"ems_et_sessionTime\") ?? \"\");\n const sessionId = window.localStorage.getItem(\"ems_et_sessionId\");\n const now = (new Date()).getTime();\n\n if(!isNaN(sessionTimestamp) && !empty(sessionId) && this.stillInSession(now, sessionTimestamp)) {\n return sessionId!;\n }\n\n trace(\"creating new session id\");\n \n return uuid();\n }\n\n private stillInSession(time1: number, time2: number) {\n return Math.abs(time1 - time2) < (this.limit * 1000 * 60);\n }\n\n private updateSession = () => {\n if(this._inactive) return;\n const sessionId = this.determineSessionId();\n const timestamp = (new Date()).getTime();\n window.localStorage.setItem(\"ems_et_sessionTime\", timestamp.toString());\n window.localStorage.setItem(\"ems_et_sessionId\", sessionId);\n }\n\n}\n","import { NgModule } from '@angular/core';\nimport { EventDispatcherComponent } from './event-dispatcher.component';\n\n\n\n@NgModule({\n declarations: [\n EventDispatcherComponent\n ],\n imports: [\n ],\n exports: [\n EventDispatcherComponent\n ]\n})\nexport class EventDispatcherModule { }\n","/*\n * Public API Surface of event-dispatcher\n */\n\nexport * from './lib/event-dispatcher.service';\nexport * from './lib/event-dispatcher.component';\nexport * from './lib/event-dispatcher.module';\nexport * from './lib/event-dispatcher.interfaces';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["uuid","i1.EventDispatcherService"],"mappings":"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"}
1
+ {"version":3,"file":"ems-web-app-event-tracker.mjs","sources":["../../src/lib/event-dispatcher.service.ts","../../src/lib/event-dispatcher.component.ts","../../src/lib/event-dispatcher.module.ts","../../src/public-api.ts","../../src/ems-web-app-event-tracker.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport { HttpClient, HttpHeaders, HttpResponse, HttpRequest, HttpErrorResponse, HttpParams } from '@angular/common/http';\nimport { Observable, Subject, BehaviorSubject, throwError, of } from 'rxjs';\nimport { catchError, map, tap, take } from \"rxjs/operators\";\nimport { IDispatcherEvent } from \"./event-dispatcher.interfaces\";\nimport { v4 as uuid } from \"uuid\";\nimport { trace, empty } from \"ems-web-app-utils\";\nimport * as _ from \"underscore\";\n\n@Injectable({\n providedIn: 'root'\n})\nexport class EventDispatcherService {\n \n public jwt?: string;\n public endpoint!: string;\n\n constructor(private http: HttpClient) {}\n\n public dispatch(event: IDispatcherEvent, name?: string):Promise<any> {\n const key = `${name ?? uuid()}.json`;\n const namespace = (event.namespace ? `${event.namespace}%2F` : \"\").replace(/:::/gim,\"%2F\");\n const request = this.buildRequest(`${namespace}${key}`);\n return this.executePutRequest(request, event);\n }\n\n public getEventTemplate(type: string): IDispatcherEvent {\n return {\n type,\n agent: window.navigator.userAgent,\n time: (new Date()).getTime(),\n timestamp: (new Date()).toISOString(),\n properties: {}\n }\n }\n\n private executePutRequest(request: string, data: any, transform?: (input: any) => any, suppressErrors?: boolean, customHeaders?: any ): Promise<any> {\n const headers = this.headers(customHeaders || {});\n return this.http.put(request, data, { headers }).pipe(\n map((result: any) => \n transform ? transform(result) : result\n ),\n catchError(suppressErrors ? this.handleErrorQuietly : this.handleError)\n ).toPromise()\n }\n\n private buildRequest(endpoint: string): string {\n return `${this.endpoint}/${endpoint}`;\n }\n\n private handleError(error: HttpErrorResponse) {\n return throwError(error);\n }\n\n private handleErrorQuietly(error: HttpErrorResponse) {\n console.error(error);\n return of(null);\n }\n\n private headers(custom: any = {}): HttpHeaders {\n const headers = _.extend({ \n \"Content-Type\": \"application/json\"\n }, custom);\n return new HttpHeaders(headers);\n }\n}\n","import { Component, OnInit, Input, Output } from '@angular/core';\nimport { EventDispatcherService } from \"./event-dispatcher.service\";\nimport { IDispatcherEvent } from \"./event-dispatcher.interfaces\";\nimport { v4 as uuid } from \"uuid\";\nimport { trace, empty, sleep } from \"ems-web-app-utils\";\n\n@Component({\n selector: 'event-dispatcher',\n template: '',\n styles: [\n ]\n})\nexport class EventDispatcherComponent implements OnInit {\n\n @Input(\"endpoint\") endpoint!: string;\n @Input(\"sessionLimit\") limit: number = 30; //minutes\n @Input(\"authtoken\") token?: string;\n\n private _queue: {event: IDispatcherEvent, name?: string}[] = [];\n private _processing: boolean = false;\n private _sessionId!: string;\n private _inactive: boolean = false;\n \n constructor(private service: EventDispatcherService) {}\n\n ngOnInit(): void {\n this.service.endpoint = this.endpoint;\n this.service.jwt = this.token;\n this._sessionId = this.determineSessionId();\n window.localStorage.setItem(\"ems_et_sessionId\", this._sessionId);\n window.onfocus = (event:any) => this.onWindowFocus(event);\n window.onblur = (event:any) => this.onWindowBlur(event);\n window.setInterval(this.updateSession, 1000);\n }\n\n public dispatch(event: IDispatcherEvent, name?: string): IDispatcherEvent {\n event.sessionId = this._sessionId;\n this._queue.push({ event, name });\n this.processQueue();\n return event;\n }\n\n public dispatchAsyncEvent(event: IDispatcherEvent, name?: string): Promise<IDispatcherEvent> {\n return new Promise(async(resolve: (value: any) => void, reject: (value: any) => void) => {\n event.sessionId = this._sessionId;\n this._queue.push({ event, name });\n this.processQueue();\n \n while(!event.processed) {\n await sleep(250);\n }\n resolve(event);\n });\n }\n\n private onWindowFocus = (event:any) => {\n trace(\"window active\");\n this._inactive = false;\n }\n\n private onWindowBlur = (event:any) => {\n trace(\"window inactive\");\n this._inactive = true;\n }\n\n private async processQueue() {\n if(this._processing) return;\n this._processing = true;\n\n const obj = this._queue.shift();\n if(!obj) {\n this._processing = false;\n return;\n }\n\n await this.service.dispatch(obj.event, obj.name);\n obj.event.processed = true;\n this._processing = false;\n this.processQueue(); \n }\n\n private determineSessionId() {\n const sessionTimestamp = parseInt(window.localStorage.getItem(\"ems_et_sessionTime\") ?? \"\");\n const sessionId = window.localStorage.getItem(\"ems_et_sessionId\");\n const now = (new Date()).getTime();\n\n if(!isNaN(sessionTimestamp) && !empty(sessionId) && this.stillInSession(now, sessionTimestamp)) {\n return sessionId!;\n }\n\n trace(\"creating new session id\");\n \n return uuid();\n }\n\n private stillInSession(time1: number, time2: number) {\n return Math.abs(time1 - time2) < (this.limit * 1000 * 60);\n }\n\n private updateSession = () => {\n if(this._inactive) return;\n const sessionId = this.determineSessionId();\n const timestamp = (new Date()).getTime();\n window.localStorage.setItem(\"ems_et_sessionTime\", timestamp.toString());\n window.localStorage.setItem(\"ems_et_sessionId\", sessionId);\n }\n\n}\n","import { NgModule } from '@angular/core';\nimport { EventDispatcherComponent } from './event-dispatcher.component';\n\n\n\n@NgModule({\n declarations: [\n EventDispatcherComponent\n ],\n imports: [\n ],\n exports: [\n EventDispatcherComponent\n ]\n})\nexport class EventDispatcherModule { }\n","/*\n * Public API Surface of event-dispatcher\n */\n\nexport * from './lib/event-dispatcher.service';\nexport * from './lib/event-dispatcher.component';\nexport * from './lib/event-dispatcher.module';\nexport * from './lib/event-dispatcher.interfaces';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["uuid","i1.EventDispatcherService"],"mappings":"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"}
@@ -13,7 +13,8 @@ export declare class EventDispatcherComponent implements OnInit {
13
13
  private _inactive;
14
14
  constructor(service: EventDispatcherService);
15
15
  ngOnInit(): void;
16
- dispatch(event: IDispatcherEvent, name?: string): any;
16
+ dispatch(event: IDispatcherEvent, name?: string): IDispatcherEvent;
17
+ dispatchAsyncEvent(event: IDispatcherEvent, name?: string): Promise<IDispatcherEvent>;
17
18
  private onWindowFocus;
18
19
  private onWindowBlur;
19
20
  private processQueue;
@@ -6,5 +6,6 @@ export interface IDispatcherEvent {
6
6
  timestamp?: string;
7
7
  time?: number;
8
8
  agent?: string;
9
+ processed?: boolean;
9
10
  properties: Record<string, any>;
10
11
  }
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.24",
7
+ "version": "0.0.26",
8
8
  "peerDependencies": {
9
9
  "@angular/common": "^13.2.0",
10
10
  "@angular/core": "^13.2.0",