@elderbyte/ngx-starter 17.7.1 → 17.7.3

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,7 +1,7 @@
1
1
  import { EventStreamContentType, fetchEventSource } from '@microsoft/fetch-event-source';
2
2
  import { LoggerFactory } from '@elderbyte/ts-logger';
3
3
  import { BehaviorSubject, Subject } from 'rxjs';
4
- import { map } from 'rxjs/operators';
4
+ import { filter } from 'rxjs/operators';
5
5
  export var ReactiveEventSourceState;
6
6
  (function (ReactiveEventSourceState) {
7
7
  ReactiveEventSourceState["IDLE"] = "IDLE";
@@ -11,12 +11,18 @@ export var ReactiveEventSourceState;
11
11
  ReactiveEventSourceState["ERROR"] = "ERROR";
12
12
  })(ReactiveEventSourceState || (ReactiveEventSourceState = {}));
13
13
  export class ReactiveSSeMessage {
14
- constructor(id, event, data, retry) {
14
+ constructor(id, event, dataRaw, retry) {
15
15
  this.id = id;
16
16
  this.event = event;
17
- this.data = data;
17
+ this.dataRaw = dataRaw;
18
18
  this.retry = retry;
19
19
  }
20
+ json() {
21
+ return JSON.parse(this.dataRaw);
22
+ }
23
+ jsonAs() {
24
+ return this.json();
25
+ }
20
26
  }
21
27
  export class ReactiveFetchEventSource {
22
28
  /***************************************************************************
@@ -45,10 +51,12 @@ export class ReactiveFetchEventSource {
45
51
  * Fields *
46
52
  * *
47
53
  **************************************************************************/
54
+ this.EVENT_TYPE_DEFAULT = 'message';
55
+ this.RECONNECT_DELAY_MS = 3000;
48
56
  this.log = LoggerFactory.getLogger(this.constructor.name);
49
- this.abortController = new AbortController();
57
+ this.abortController = null;
50
58
  this.state$ = new BehaviorSubject(ReactiveEventSourceState.IDLE);
51
- this.eventTopics = new Map();
59
+ this.eventRelay = new Subject();
52
60
  if (!requestInitProvider) {
53
61
  throw new Error('You must provide a event source url provider!');
54
62
  }
@@ -82,22 +90,15 @@ export class ReactiveFetchEventSource {
82
90
  * Get an event stream for the given event type.
83
91
  * @param eventTypeRaw The event type. Defaults to 'message'.
84
92
  */
85
- events(eventTypeRaw) {
93
+ streamEventsOfType(eventTypeRaw) {
86
94
  const eventType = this.eventTypeOrDefault(eventTypeRaw);
87
- if (!this.eventTopics.has(eventType)) {
88
- this.eventTopics.set(eventType, new Subject());
89
- }
90
- const eventSubj = this.eventTopics.get(eventType);
91
- return eventSubj.asObservable();
95
+ return this.streamEvents().pipe(filter(e => e.event == eventType));
92
96
  }
93
97
  /**
94
- * Get an event stream of messages parsed from json.
95
- * (event.data must be in json format)
96
- *
97
- * @param eventType The event type. Defaults to 'message'.
98
+ * Get an event stream for all events no matter their type.
98
99
  */
99
- eventsJson(eventType) {
100
- return this.events(eventType).pipe(map(event => JSON.parse(event.data)));
100
+ streamEvents() {
101
+ return this.eventRelay.asObservable();
101
102
  }
102
103
  /**
103
104
  * Close this event source. It won't reconnect.
@@ -133,7 +134,10 @@ export class ReactiveFetchEventSource {
133
134
  */
134
135
  closeCurrent(reason) {
135
136
  this.log.debug('Closing the event-source, reason: ' + reason);
136
- this.abortController.abort(reason);
137
+ const crt = this.abortController;
138
+ if (crt) {
139
+ crt.abort(reason);
140
+ }
137
141
  }
138
142
  /**
139
143
  * Reconnects this event source, unless closed is true;
@@ -148,9 +152,10 @@ export class ReactiveFetchEventSource {
148
152
  }
149
153
  openEventSource() {
150
154
  const requestInit = this.requestInitProvider();
155
+ const crt = this.abortController = new AbortController();
151
156
  fetchEventSource(requestInit.request, {
152
157
  method: requestInit.method,
153
- signal: this.abortController.signal,
158
+ signal: crt.signal,
154
159
  headers: requestInit.headers,
155
160
  keepalive: true,
156
161
  openWhenHidden: false,
@@ -176,7 +181,7 @@ export class ReactiveFetchEventSource {
176
181
  else {
177
182
  this.log.error('Failed to open Event Source due to Error ' + response.status, response);
178
183
  this.updateState(ReactiveEventSourceState.ERROR);
179
- this.tryReconnect(); // TODO Necessary if keep alive = true?
184
+ this.tryReconnect();
180
185
  }
181
186
  }
182
187
  handleOnError(err) {
@@ -185,7 +190,7 @@ export class ReactiveFetchEventSource {
185
190
  if (!this.closed) {
186
191
  // There was an error - try reconnecting
187
192
  this.log.debug('Attempting to reconnect event-source ...');
188
- this.tryReconnect(); // TODO Necessary if keep alive = true?
193
+ this.tryReconnect();
189
194
  }
190
195
  else {
191
196
  this.log.debug('There was an error in the sse connection (closed).', err);
@@ -193,15 +198,12 @@ export class ReactiveFetchEventSource {
193
198
  }
194
199
  tryReconnect() {
195
200
  if (!this._closed) {
196
- setTimeout(() => this.reconnect(), 3000); // Delay the reconnect
201
+ setTimeout(() => this.reconnect(), this.RECONNECT_DELAY_MS); // Delay the reconnect
197
202
  }
198
203
  }
199
204
  handleOnMessage(msg) {
200
205
  const eventType = this.eventTypeOrDefault(msg.event);
201
- const topic = this.eventTopics.get(eventType);
202
- if (topic) {
203
- topic.next(new ReactiveSSeMessage(msg.id, eventType, msg.data, msg.retry));
204
- }
206
+ this.eventRelay.next(new ReactiveSSeMessage(msg.id, eventType, msg.data, msg.retry));
205
207
  }
206
208
  handleOnClose() {
207
209
  this.log.debug('EventSource has closed.');
@@ -211,7 +213,7 @@ export class ReactiveFetchEventSource {
211
213
  this.state$.next(state);
212
214
  }
213
215
  eventTypeOrDefault(type) {
214
- return type ?? 'message';
216
+ return type ?? this.EVENT_TYPE_DEFAULT;
215
217
  }
216
218
  }
217
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVhY3RpdmUtZmV0Y2gtZXZlbnQtc291cmNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZWxkZXJieXRlL25neC1zdGFydGVyL3NyYy9saWIvZmVhdHVyZXMvZXZlbnQtc291cmNlL2ZldGNoL3JlYWN0aXZlLWZldGNoLWV2ZW50LXNvdXJjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQXFCLHNCQUFzQixFQUFFLGdCQUFnQixFQUFDLE1BQU0sK0JBQStCLENBQUM7QUFDM0csT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQ25ELE9BQU8sRUFBQyxlQUFlLEVBQWMsT0FBTyxFQUFlLE1BQU0sTUFBTSxDQUFDO0FBQ3hFLE9BQU8sRUFBQyxHQUFHLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUVuQyxNQUFNLENBQU4sSUFBWSx3QkFNWDtBQU5ELFdBQVksd0JBQXdCO0lBQ2xDLHlDQUFhLENBQUE7SUFDYixxREFBeUIsQ0FBQTtJQUN6Qix5Q0FBYSxDQUFBO0lBQ2IsNkNBQWlCLENBQUE7SUFDakIsMkNBQWUsQ0FBQTtBQUNqQixDQUFDLEVBTlcsd0JBQXdCLEtBQXhCLHdCQUF3QixRQU1uQztBQUVELE1BQU0sT0FBTyxrQkFBa0I7SUFDN0IsWUFDa0IsRUFBVSxFQUNWLEtBQWEsRUFDYixJQUFPLEVBQ1AsS0FBYztRQUhkLE9BQUUsR0FBRixFQUFFLENBQVE7UUFDVixVQUFLLEdBQUwsS0FBSyxDQUFRO1FBQ2IsU0FBSSxHQUFKLElBQUksQ0FBRztRQUNQLFVBQUssR0FBTCxLQUFLLENBQVM7SUFDNUIsQ0FBQztDQUNOO0FBUUQsTUFBTSxPQUFPLHdCQUF3QjtJQWtCbkM7Ozs7Z0ZBSTRFO0lBRXJFLE1BQU0sQ0FBQyxhQUFhLENBQ3pCLFdBQW1DO1FBRW5DLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDaEIsTUFBTSxJQUFJLEtBQUssQ0FB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LENBQUM7SUFDMUIsQ0FBQztJQUVPLGtCQUFrQixDQUFDLElBQWE7UUFDdEMsT0FBTyxJQUFJLElBQUksU0FBUyxDQUFDO0lBQzNCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7RXZlbnRTb3VyY2VNZXNzYWdlLCBFdmVudFN0cmVhbUNvbnRlbnRUeXBlLCBmZXRjaEV2ZW50U291cmNlfSBmcm9tICdAbWljcm9zb2Z0L2ZldGNoLWV2ZW50LXNvdXJjZSc7XG5pbXBvcnQge0xvZ2dlckZhY3Rvcnl9IGZyb20gJ0BlbGRlcmJ5dGUvdHMtbG9nZ2VyJztcbmltcG9ydCB7QmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBTdWJqZWN0LCBTdWJzY3JpcHRpb259IGZyb20gJ3J4anMnO1xuaW1wb3J0IHttYXB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuZXhwb3J0IGVudW0gUmVhY3RpdmVFdmVudFNvdXJjZVN0YXRlIHtcbiAgSURMRSA9ICdJRExFJyxcbiAgQ09OTkVDVElORyA9ICdDT05ORUNUSU5HJyxcbiAgT1BFTiA9ICdPUEVOJyxcbiAgQ0xPU0VEID0gJ0NMT1NFRCcsXG4gIEVSUk9SID0gJ0VSUk9SJyxcbn1cblxuZXhwb3J0IGNsYXNzIFJlYWN0aXZlU1NlTWVzc2FnZTxUID0gc3RyaW5nPiB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyByZWFkb25seSBpZDogc3RyaW5nLFxuICAgIHB1YmxpYyByZWFkb25seSBldmVudDogc3RyaW5nLFxuICAgIHB1YmxpYyByZWFkb25seSBkYXRhOiBULFxuICAgIHB1YmxpYyByZWFkb25seSByZXRyeT86IG51bWJlcixcbiAgKSB7IH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBFdmVudFNvdXJjZVJlcXVlc3RJbml0IHtcbiAgcmVxdWVzdDogUmVxdWVzdEluZm8sXG4gIG1ldGhvZD86IHN0cmluZyxcbiAgaGVhZGVycz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz5cbn1cblxuZXhwb3J0IGNsYXNzIFJlYWN0aXZlRmV0Y2hFdmVudFNvdXJjZTxUID0gYW55PiB7XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIEZpZWxkcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgcHJpdmF0ZSByZWFkb25seSBsb2cgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcih0aGlzLmNvbnN0cnVjdG9yLm5hbWUpO1xuICBwcml2YXRlIF9jbG9zZWQ6IGJvb2xlYW47XG4gIHByaXZhdGUgcmVhZG9ubHkgYWJvcnRDb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgc3RhdGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxSZWFjdGl2ZUV2ZW50U291cmNlU3RhdGU+KFJlYWN0aXZlRXZlbnRTb3VyY2VTdGF0ZS5JRExFKTtcbiAgcHJpdmF0ZSBfdW5zdWJzY3JpYmVTdWI6IFN1YnNjcmlwdGlvbjtcblxuICBwcml2YXRlIHJlYWRvbmx5IGV2ZW50VG9waWNzID0gbmV3IE1hcDxzdHJpbmcsIFN1YmplY3Q8UmVhY3RpdmVTU2VNZXNzYWdlPj4oKTtcblxuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBTdGF0aWMgQnVpbGRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIHB1YmxpYyBzdGF0aWMgc3RhdGljUmVxdWVzdDxUPihcbiAgICByZXF1ZXN0SW5pdDogRXZlbnRTb3VyY2VSZXF1ZXN0SW5pdCxcbiAgKTogUmVhY3RpdmVGZXRjaEV2ZW50U291cmNlPFQ+IHtcbiAgICBpZiAoIXJlcXVlc3RJbml0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1lvdSBtdXN0IHByb3ZpZGUgYSBldmVudCBzb3VyY2UgdXJsIScpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IFJlYWN0aXZlRmV0Y2hFdmVudFNvdXJjZSgoKSA9PiByZXF1ZXN0SW5pdCk7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGR5bmFtaWNSZXF1ZXN0PFQ+KFxuICAgIHJlcXVlc3RJbml0UHJvdmlkZXI6ICgpID0+IEV2ZW50U291cmNlUmVxdWVzdEluaXRcbiAgKTogUmVhY3RpdmVGZXRjaEV2ZW50U291cmNlPFQ+IHtcbiAgICByZXR1cm4gbmV3IFJlYWN0aXZlRmV0Y2hFdmVudFNvdXJjZShyZXF1ZXN0SW5pdFByb3ZpZGVyKTtcbiAgfVxuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBDb25zdHJ1Y3RvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSByZXF1ZXN0SW5pdFByb3ZpZGVyOiAoKSA9PiBFdmVudFNvdXJjZVJlcXVlc3RJbml0LFxuICApIHtcbiAgICBpZiAoIXJlcXVlc3RJbml0UHJvdmlkZXIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignWW91IG11c3QgcHJvdmlkZSBhIGV2ZW50IHNvdXJjZSB1cmwgcHJvdmlkZXIhJyk7XG4gICAgfVxuICAgIHRoaXMub3BlbigpO1xuICB9XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIFByb3BlcnRpZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgcHVibGljIGdldCBjbG9zZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2Nsb3NlZDtcbiAgfVxuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBQdWJsaWMgQVBJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIC8qKlxuICAgKiBPcGVuIHRoZSBldmVudCBzb3VyY2UuXG4gICAqXG4gICAqIE5vdGU6IFRoZSBjb25uZWN0aW9uIGlzIG9wZW5lZCBhdXRvbWF0aWNhbGx5IHVwb24gb2JqZWN0IGNyZWF0aW9uLlxuICAgKiBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSB1c2VkIGlmIHRoaXMgcmVhY3RpdmUtZXZlbnQtc291cmNlIGhhc1xuICAgKiBiZWVuIGNsb3NlZCBleHBsaWNpdGx5LlxuICAgKi9cbiAgcHVibGljIG9wZW4oKTogdm9pZCB7XG4gICAgdGhpcy5fY2xvc2VkID0gZmFsc2U7XG4gICAgdGhpcy5yZWNvbm5lY3QoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYW4gZXZlbnQgc3RyZWFtIGZvciB0aGUgZ2l2ZW4gZXZlbnQgdHlwZS5cbiAgICogQHBhcmFtIGV2ZW50VHlwZVJhdyBUaGUgZXZlbnQgdHlwZS4gRGVmYXVsdHMgdG8gJ21lc3NhZ2UnLlxuICAgKi9cbiAgcHVibGljIGV2ZW50cyhldmVudFR5cGVSYXc/OiBzdHJpbmcpOiBPYnNlcnZhYmxlPFJlYWN0aXZlU1NlTWVzc2FnZT4ge1xuICAgIGNvbnN0IGV2ZW50VHlwZSA9IHRoaXMuZXZlbnRUeXBlT3JEZWZhdWx0KGV2ZW50VHlwZVJhdyk7XG4gICAgaWYgKCF0aGlzLmV2ZW50VG9waWNzLmhhcyhldmVudFR5cGUpKSB7XG4gICAgICB0aGlzLmV2ZW50VG9waWNzLnNldChldmVudFR5cGUsIG5ldyBTdWJqZWN0PFJlYWN0aXZlU1NlTWVzc2FnZT4oKSk7XG4gICAgfVxuICAgIGNvbnN0IGV2ZW50U3ViaiA9IHRoaXMuZXZlbnRUb3BpY3MuZ2V0KGV2ZW50VHlwZSk7XG4gICAgcmV0dXJuIGV2ZW50U3Viai5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYW4gZXZlbnQgc3RyZWFtIG9mIG1lc3NhZ2VzIHBhcnNlZCBmcm9tIGpzb24uXG4gICAqIChldmVudC5kYXRhIG11c3QgYmUgaW4ganNvbiBmb3JtYXQpXG4gICAqXG4gICAqIEBwYXJhbSBldmVudFR5cGUgVGhlIGV2ZW50IHR5cGUuIERlZmF1bHRzIHRvICdtZXNzYWdlJy5cbiAgICovXG4gIHB1YmxpYyBldmVudHNKc29uKGV2ZW50VHlwZT86IHN0cmluZyk6IE9ic2VydmFibGU8VD4ge1xuICAgIHJldHVybiB0aGlzLmV2ZW50cyhldmVudFR5cGUpLnBpcGUoXG4gICAgICBtYXAoZXZlbnQgPT4gSlNPTi5wYXJzZShldmVudC5kYXRhKSlcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIENsb3NlIHRoaXMgZXZlbnQgc291cmNlLiBJdCB3b24ndCByZWNvbm5lY3QuXG4gICAqL1xuICBwdWJsaWMgY2xvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5fY2xvc2VkID0gdHJ1ZTtcbiAgICB0aGlzLmNsb3NlQ3VycmVudCgpO1xuICAgIHRoaXMubG9nLmRlYnVnKCdDbG9zaW5nIHRoZSBldmVudC1zb3VyY2UuJyk7XG4gIH1cblxuICAvKipcbiAgICogS2VlcHMgdGhpcyByZWFjdGl2ZSBldmVudCBzb3VyY2Ugb3BlbiB1bnRpbCB0aGUgZ2l2ZW4gb2JzZXJ2YWJsZSBlbWl0cyBhbiBldmVudC5cbiAgICogQHBhcmFtIHVuc3Vic2NyaWJlXG4gICAqL1xuICBwdWJsaWMgb3BlblVudGlsKHVuc3Vic2NyaWJlOiBPYnNlcnZhYmxlPGFueT4pOiB0aGlzIHtcbiAgICB0aGlzLmNsZWFuVXBPcGVuVW50aWwoKTtcbiAgICB0aGlzLl91bnN1YnNjcmliZVN1YiA9IHVuc3Vic2NyaWJlXG4gICAgICAuc3Vic2NyaWJlKFxuICAgICAgICAoKSA9PiB0aGlzLmNsb3NlKClcbiAgICAgICk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogUHJpdmF0ZSBtZXRob2RzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICBwcml2YXRlIGNsZWFuVXBPcGVuVW50aWwoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX3Vuc3Vic2NyaWJlU3ViKSB7XG4gICAgICB0aGlzLl91bnN1YnNjcmliZVN1Yi51bnN1YnNjcmliZSgpO1xuICAgICAgdGhpcy5fdW5zdWJzY3JpYmVTdWIgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDbG9zZSB0aGUgY3VycmVudCBldmVudCBzb3VyY2VcbiAgICovXG4gIHByaXZhdGUgY2xvc2VDdXJyZW50KHJlYXNvbj86IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMubG9nLmRlYnVnKCdDbG9zaW5nIHRoZSBldmVudC1zb3VyY2UsIHJlYXNvbjogJyArIHJlYXNvbik7XG4gICAgdGhpcy5hYm9ydENvbnRyb2xsZXIuYWJvcnQocmVhc29uKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWNvbm5lY3RzIHRoaXMgZXZlbnQgc291cmNlLCB1bmxlc3MgY2xvc2VkIGlzIHRydWU7XG4gICAqL1xuICBwcml2YXRlIHJlY29ubmVjdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fY2xvc2VkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMudXBkYXRlU3RhdGUoUmVhY3RpdmVFdmVudFNvdXJjZVN0YXRlLkNPTk5FQ1RJTkcpO1xuICAgIHRoaXMuY2xvc2VDdXJyZW50KCdSZWNvbm5lY3QnKTtcbiAgICB0aGlzLm9wZW5FdmVudFNvdXJjZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBvcGVuRXZlbnRTb3VyY2UoKTogdm9pZCB7XG4gICAgY29uc3QgcmVxdWVzdEluaXQgPSB0aGlzLnJlcXVlc3RJbml0UHJvdmlkZXIoKTtcbiAgICBmZXRjaEV2ZW50U291cmNlKHJlcXVlc3RJbml0LnJlcXVlc3QsIHtcbiAgICAgIG1ldGhvZDogcmVxdWVzdEluaXQubWV0aG9kLFxuICAgICAgc2lnbmFsOiB0aGlzLmFib3J0Q29udHJvbGxlci5zaWduYWwsXG4gICAgICBoZWFkZXJzOiByZXF1ZXN0SW5pdC5oZWFkZXJzLFxuICAgICAga2VlcGFsaXZlOiB0cnVlLFxuICAgICAgb3BlbldoZW5IaWRkZW46IGZhbHNlLFxuICAgICAgb25vcGVuOiByZXNwb25zZSA9PiB0aGlzLmhhbmRsZU9uT3BlbihyZXNwb25zZSksXG4gICAgICBvbm1lc3NhZ2U6IG1zZyA9PiB0aGlzLmhhbmRsZU9uTWVzc2FnZShtc2cpLFxuICAgICAgb25lcnJvcjogZXJyID0+IHRoaXMuaGFuZGxlT25FcnJvcihlcnIpLFxuICAgICAgb25jbG9zZTogKCkgPT4gdGhpcy5oYW5kbGVPbkNsb3NlKClcbiAgICB9KS50aGVuKHIgPT4ge1xuXG4gICAgfSlcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlT25PcGVuKHJlc3BvbnNlOiBSZXNwb25zZSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmIChyZXNwb25zZS5vayAmJiByZXNwb25zZS5oZWFkZXJzLmdldCgnY29udGVudC10eXBlJykgPT09IEV2ZW50U3RyZWFtQ29udGVudFR5cGUpIHtcbiAgICAgIHRoaXMubG9nLmRlYnVnKCdFdmVudFNvdXJjZSBjb25uZWN0aW9uIHN1Y2Vzc2Z1bGx5IG9wZW5lZCB0bzogJyArIHJlc3BvbnNlLnVybCArXG4gICAgICAgICcsIHN0YXRlOiAnICsgcmVzcG9uc2Uuc3RhdHVzLCByZXNwb25zZSk7XG4gICAgICB0aGlzLnVwZGF0ZVN0YXRlKFJlYWN0aXZlRXZlbnRTb3VyY2VTdGF0ZS5PUEVOKTtcbiAgICAgIHJldHVybjsgLy8gZXZlcnl0aGluZydzIGdvb2RcbiAgICB9IGVsc2UgaWYgKHJlc3BvbnNlLnN0YXR1cyA+PSA0MDAgJiYgcmVzcG9uc2Uuc3RhdHVzIDwgNTAwICYmIHJlc3BvbnNlLnN0YXR1cyAhPT0gNDI5KSB7XG4gICAgICAvLyBjbGllbnQtc2lkZSBlcnJvcnMgYXJlIHVzdWFsbHkgbm9uLXJldHJpYWJsZTpcbiAgICAgIHRoaXMudXBkYXRlU3RhdGUoUmVhY3RpdmVFdmVudFNvdXJjZVN0YXRlLkVSUk9SKTtcbiAgICAgIHRoaXMubG9nLmVycm9yKCdGYWlsZWQgdG8gb3BlbiBFdmVudCBTb3VyY2UgZHVlIHRvIENsaWVudCBFcnJvciAnICsgcmVzcG9uc2Uuc3RhdHVzLCByZXNwb25zZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubG9nLmVycm9yKCdGYWlsZWQgdG8gb3BlbiBFdmVudCBTb3VyY2UgZHVlIHRvIEVycm9yICcgKyByZXNwb25zZS5zdGF0dXMsIHJlc3BvbnNlKTtcbiAgICAgIHRoaXMudXBkYXRlU3RhdGUoUmVhY3RpdmVFdmVudFNvdXJjZVN0YXRlLkVSUk9SKTtcbiAgICAgIHRoaXMudHJ5UmVjb25uZWN0KCk7IC8vIFRPRE8gTmVjZXNzYXJ5IGlmIGtlZXAgYWxpdmUgPSB0cnVlP1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlT25FcnJvcihlcnI6IGFueSk6IHZvaWQge1xuICAgIHRoaXMudXBkYXRlU3RhdGUoUmVhY3RpdmVFdmVudFNvdXJjZVN0YXRlLkVSUk9SKTtcbiAgICB0aGlzLmxvZy50cmFjZSgnVGhlcmUgd2FzIGFuIFNTRSBlcnJvci4nLCBlcnIpO1xuICAgIGlmICghdGhpcy5jbG9zZWQpIHtcbiAgICAgIC8vIFRoZXJlIHdhcyBhbiBlcnJvciAtIHRyeSByZWNvbm5lY3RpbmdcbiAgICAgIHRoaXMubG9nLmRlYnVnKCdBdHRlbXB0aW5nIHRvIHJlY29ubmVjdCBldmVudC1zb3VyY2UgLi4uJyk7XG4gICAgICB0aGlzLnRyeVJlY29ubmVjdCgpOyAvLyBUT0RPIE5lY2Vzc2FyeSBpZiBrZWVwIGFsaXZlID0gdHJ1ZT9cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5sb2cuZGVidWcoJ1RoZXJlIHdhcyBhbiBlcnJvciBpbiB0aGUgc3NlIGNvbm5lY3Rpb24gKGNsb3NlZCkuJywgZXJyKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHRyeVJlY29ubmVjdCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX2Nsb3NlZCkge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLnJlY29ubmVjdCgpLCAzMDAwKTsgLy8gRGVsYXkgdGhlIHJlY29ubmVjdFxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlT25NZXNzYWdlKG1zZzogRXZlbnRTb3VyY2VNZXNzYWdlKTogdm9pZCB7XG4gICAgY29uc3QgZXZlbnRUeXBlID0gdGhpcy5ldmVudFR5cGVPckRlZmF1bHQobXNnLmV2ZW50KTtcbiAgICBjb25zdCB0b3BpYyA9IHRoaXMuZXZlbnRUb3BpY3MuZ2V0KGV2ZW50VHlwZSk7XG4gICAgaWYgKHRvcGljKSB7XG4gICAgICB0b3BpYy5uZXh0KG5ldyBSZWFjdGl2ZVNTZU1lc3NhZ2UoXG4gICAgICAgIG1zZy5pZCxcbiAgICAgICAgZXZlbnRUeXBlLFxuICAgICAgICBtc2cuZGF0YSxcbiAgICAgICAgbXNnLnJldHJ5XG4gICAgICApKVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlT25DbG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLmxvZy5kZWJ1ZygnRXZlbnRTb3VyY2UgaGFzIGNsb3NlZC4nKVxuICAgIHRoaXMudXBkYXRlU3RhdGUoUmVhY3RpdmVFdmVudFNvdXJjZVN0YXRlLkNMT1NFRCk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVN0YXRlKHN0YXRlOiBSZWFjdGl2ZUV2ZW50U291cmNlU3RhdGUpIHtcbiAgICB0aGlzLnN0YXRlJC5uZXh0KHN0YXRlKTtcbiAgfVxuXG4gIHByaXZhdGUgZXZlbnRUeXBlT3JEZWZhdWx0KHR5cGU/OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB0eXBlID8/ICdtZXNzYWdlJztcbiAgfVxufVxuIl19
219
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVhY3RpdmUtZmV0Y2gtZXZlbnQtc291cmNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZWxkZXJieXRlL25neC1zdGFydGVyL3NyYy9saWIvZmVhdHVyZXMvZXZlbnQtc291cmNlL2ZldGNoL3JlYWN0aXZlLWZldGNoLWV2ZW50LXNvdXJjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQXFCLHNCQUFzQixFQUFFLGdCQUFnQixFQUFDLE1BQU0sK0JBQStCLENBQUM7QUFDM0csT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQ25ELE9BQU8sRUFBQyxlQUFlLEVBQWMsT0FBTyxFQUFlLE1BQU0sTUFBTSxDQUFDO0FBQ3hFLE9BQU8sRUFBQyxNQUFNLEVBQU0sTUFBTSxnQkFBZ0IsQ0FBQztBQUUzQyxNQUFNLENBQU4sSUFBWSx3QkFNWDtBQU5ELFdBQVksd0JBQXdCO0lBQ2xDLHlDQUFhLENBQUE7SUFDYixxREFBeUIsQ0FBQTtJQUN6Qix5Q0FBYSxDQUFBO0lBQ2IsNkNBQWlCLENBQUE7SUFDakIsMkNBQWUsQ0FBQTtBQUNqQixDQUFDLEVBTlcsd0JBQXdCLEtBQXhCLHdCQUF3QixRQU1uQztBQUVELE1BQU0sT0FBTyxrQkFBa0I7SUFDN0IsWUFDa0IsRUFBVSxFQUNWLEtBQWEsRUFDYixPQUFlLEVBQ2YsS0FBYztRQUhkLE9BQUUsR0FBRixFQUFFLENBQVE7UUFDVixVQUFLLEdBQUwsS0FBSyxDQUFRO1FBQ2IsWUFBTyxHQUFQLE9BQU8sQ0FBUTtRQUNmLFVBQUssR0FBTCxLQUFLLENBQVM7SUFFaEMsQ0FBQztJQUVNLElBQUk7UUFDVCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFTSxNQUFNO1FBQ1gsT0FBTyxJQUFJLENBQUMsSUFBSSxFQUF3QixDQUFDO0lBQzND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YTtRQUN0QyxPQUFPLElBQUksSUFBSSxJQUFJLENBQUMsa0JBQWtCLENBQUM7SUFDekMsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtFdmVudFNvdXJjZU1lc3NhZ2UsIEV2ZW50U3RyZWFtQ29udGVudFR5cGUsIGZldGNoRXZlbnRTb3VyY2V9IGZyb20gJ0BtaWNyb3NvZnQvZmV0Y2gtZXZlbnQtc291cmNlJztcbmltcG9ydCB7TG9nZ2VyRmFjdG9yeX0gZnJvbSAnQGVsZGVyYnl0ZS90cy1sb2dnZXInO1xuaW1wb3J0IHtCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIFN1YmplY3QsIFN1YnNjcmlwdGlvbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge2ZpbHRlciwgbWFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmV4cG9ydCBlbnVtIFJlYWN0aXZlRXZlbnRTb3VyY2VTdGF0ZSB7XG4gIElETEUgPSAnSURMRScsXG4gIENPTk5FQ1RJTkcgPSAnQ09OTkVDVElORycsXG4gIE9QRU4gPSAnT1BFTicsXG4gIENMT1NFRCA9ICdDTE9TRUQnLFxuICBFUlJPUiA9ICdFUlJPUicsXG59XG5cbmV4cG9ydCBjbGFzcyBSZWFjdGl2ZVNTZU1lc3NhZ2U8VCA9IGFueT4ge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgcmVhZG9ubHkgaWQ6IHN0cmluZyxcbiAgICBwdWJsaWMgcmVhZG9ubHkgZXZlbnQ6IHN0cmluZyxcbiAgICBwdWJsaWMgcmVhZG9ubHkgZGF0YVJhdzogc3RyaW5nLFxuICAgIHB1YmxpYyByZWFkb25seSByZXRyeT86IG51bWJlcixcbiAgKSB7XG4gIH1cblxuICBwdWJsaWMganNvbigpOiBUIHtcbiAgICByZXR1cm4gSlNPTi5wYXJzZSh0aGlzLmRhdGFSYXcpO1xuICB9XG5cbiAgcHVibGljIGpzb25BczxUQ3VzdG9tPigpOiBUQ3VzdG9tIHtcbiAgICByZXR1cm4gdGhpcy5qc29uKCkgYXMgdW5rbm93biBhcyBUQ3VzdG9tO1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRXZlbnRTb3VyY2VSZXF1ZXN0SW5pdCB7XG4gIHJlcXVlc3Q6IFJlcXVlc3RJbmZvLFxuICBtZXRob2Q/OiBzdHJpbmcsXG4gIGhlYWRlcnM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+XG59XG5cbmV4cG9ydCBjbGFzcyBSZWFjdGl2ZUZldGNoRXZlbnRTb3VyY2U8VCA9IGFueT4ge1xuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBGaWVsZHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgRVZFTlRfVFlQRV9ERUZBVUxUID0gJ21lc3NhZ2UnO1xuICBwcml2YXRlIHJlYWRvbmx5IFJFQ09OTkVDVF9ERUxBWV9NUyA9IDMwMDA7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBsb2cgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcih0aGlzLmNvbnN0cnVjdG9yLm5hbWUpO1xuICBwcml2YXRlIF9jbG9zZWQ6IGJvb2xlYW47XG4gIHByaXZhdGUgYWJvcnRDb250cm9sbGVyOiBBYm9ydENvbnRyb2xsZXIgPSBudWxsO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgc3RhdGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxSZWFjdGl2ZUV2ZW50U291cmNlU3RhdGU+KFJlYWN0aXZlRXZlbnRTb3VyY2VTdGF0ZS5JRExFKTtcbiAgcHJpdmF0ZSBfdW5zdWJzY3JpYmVTdWI6IFN1YnNjcmlwdGlvbjtcblxuICBwcml2YXRlIHJlYWRvbmx5IGV2ZW50UmVsYXkgPSBuZXcgU3ViamVjdDxSZWFjdGl2ZVNTZU1lc3NhZ2U8VD4+KCk7XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIFN0YXRpYyBCdWlsZGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgcHVibGljIHN0YXRpYyBzdGF0aWNSZXF1ZXN0PFQ+KFxuICAgIHJlcXVlc3RJbml0OiBFdmVudFNvdXJjZVJlcXVlc3RJbml0LFxuICApOiBSZWFjdGl2ZUZldGNoRXZlbnRTb3VyY2U8VD4ge1xuICAgIGlmICghcmVxdWVzdEluaXQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignWW91IG11c3QgcHJvdmlkZSBhIGV2ZW50IHNvdXJjZSB1cmwhJyk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgUmVhY3RpdmVGZXRjaEV2ZW50U291cmNlKCgpID0+IHJlcXVlc3RJbml0KTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgZHluYW1pY1JlcXVlc3Q8VD4oXG4gICAgcmVxdWVzdEluaXRQcm92aWRlcjogKCkgPT4gRXZlbnRTb3VyY2VSZXF1ZXN0SW5pdFxuICApOiBSZWFjdGl2ZUZldGNoRXZlbnRTb3VyY2U8VD4ge1xuICAgIHJldHVybiBuZXcgUmVhY3RpdmVGZXRjaEV2ZW50U291cmNlKHJlcXVlc3RJbml0UHJvdmlkZXIpO1xuICB9XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIENvbnN0cnVjdG9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJlcXVlc3RJbml0UHJvdmlkZXI6ICgpID0+IEV2ZW50U291cmNlUmVxdWVzdEluaXQsXG4gICkge1xuICAgIGlmICghcmVxdWVzdEluaXRQcm92aWRlcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdZb3UgbXVzdCBwcm92aWRlIGEgZXZlbnQgc291cmNlIHVybCBwcm92aWRlciEnKTtcbiAgICB9XG4gICAgdGhpcy5vcGVuKCk7XG4gIH1cblxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogUHJvcGVydGllcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICBwdWJsaWMgZ2V0IGNsb3NlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fY2xvc2VkO1xuICB9XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIFB1YmxpYyBBUEkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgLyoqXG4gICAqIE9wZW4gdGhlIGV2ZW50IHNvdXJjZS5cbiAgICpcbiAgICogTm90ZTogVGhlIGNvbm5lY3Rpb24gaXMgb3BlbmVkIGF1dG9tYXRpY2FsbHkgdXBvbiBvYmplY3QgY3JlYXRpb24uXG4gICAqIFRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIHVzZWQgaWYgdGhpcyByZWFjdGl2ZS1ldmVudC1zb3VyY2UgaGFzXG4gICAqIGJlZW4gY2xvc2VkIGV4cGxpY2l0bHkuXG4gICAqL1xuICBwdWJsaWMgb3BlbigpOiB2b2lkIHtcbiAgICB0aGlzLl9jbG9zZWQgPSBmYWxzZTtcbiAgICB0aGlzLnJlY29ubmVjdCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhbiBldmVudCBzdHJlYW0gZm9yIHRoZSBnaXZlbiBldmVudCB0eXBlLlxuICAgKiBAcGFyYW0gZXZlbnRUeXBlUmF3IFRoZSBldmVudCB0eXBlLiBEZWZhdWx0cyB0byAnbWVzc2FnZScuXG4gICAqL1xuICBwdWJsaWMgc3RyZWFtRXZlbnRzT2ZUeXBlKGV2ZW50VHlwZVJhdz86IHN0cmluZyk6IE9ic2VydmFibGU8UmVhY3RpdmVTU2VNZXNzYWdlPFQ+PiB7XG4gICAgY29uc3QgZXZlbnRUeXBlID0gdGhpcy5ldmVudFR5cGVPckRlZmF1bHQoZXZlbnRUeXBlUmF3KTtcbiAgICByZXR1cm4gdGhpcy5zdHJlYW1FdmVudHMoKS5waXBlKFxuICAgICAgZmlsdGVyKGUgPT4gZS5ldmVudCA9PSBldmVudFR5cGUpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYW4gZXZlbnQgc3RyZWFtIGZvciBhbGwgZXZlbnRzIG5vIG1hdHRlciB0aGVpciB0eXBlLlxuICAgKi9cbiAgcHVibGljIHN0cmVhbUV2ZW50cygpOiBPYnNlcnZhYmxlPFJlYWN0aXZlU1NlTWVzc2FnZTxUPj4ge1xuICAgIHJldHVybiB0aGlzLmV2ZW50UmVsYXkuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICAvKipcbiAgICogQ2xvc2UgdGhpcyBldmVudCBzb3VyY2UuIEl0IHdvbid0IHJlY29ubmVjdC5cbiAgICovXG4gIHB1YmxpYyBjbG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9jbG9zZWQgPSB0cnVlO1xuICAgIHRoaXMuY2xvc2VDdXJyZW50KCk7XG4gICAgdGhpcy5sb2cuZGVidWcoJ0Nsb3NpbmcgdGhlIGV2ZW50LXNvdXJjZS4nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBLZWVwcyB0aGlzIHJlYWN0aXZlIGV2ZW50IHNvdXJjZSBvcGVuIHVudGlsIHRoZSBnaXZlbiBvYnNlcnZhYmxlIGVtaXRzIGFuIGV2ZW50LlxuICAgKiBAcGFyYW0gdW5zdWJzY3JpYmVcbiAgICovXG4gIHB1YmxpYyBvcGVuVW50aWwodW5zdWJzY3JpYmU6IE9ic2VydmFibGU8YW55Pik6IHRoaXMge1xuICAgIHRoaXMuY2xlYW5VcE9wZW5VbnRpbCgpO1xuICAgIHRoaXMuX3Vuc3Vic2NyaWJlU3ViID0gdW5zdWJzY3JpYmVcbiAgICAgIC5zdWJzY3JpYmUoXG4gICAgICAgICgpID0+IHRoaXMuY2xvc2UoKVxuICAgICAgKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBQcml2YXRlIG1ldGhvZHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIHByaXZhdGUgY2xlYW5VcE9wZW5VbnRpbCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fdW5zdWJzY3JpYmVTdWIpIHtcbiAgICAgIHRoaXMuX3Vuc3Vic2NyaWJlU3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgICB0aGlzLl91bnN1YnNjcmliZVN1YiA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENsb3NlIHRoZSBjdXJyZW50IGV2ZW50IHNvdXJjZVxuICAgKi9cbiAgcHJpdmF0ZSBjbG9zZUN1cnJlbnQocmVhc29uPzogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5sb2cuZGVidWcoJ0Nsb3NpbmcgdGhlIGV2ZW50LXNvdXJjZSwgcmVhc29uOiAnICsgcmVhc29uKTtcbiAgICBjb25zdCBjcnQgPSB0aGlzLmFib3J0Q29udHJvbGxlcjtcbiAgICBpZiAoY3J0KSB7XG4gICAgICBjcnQuYWJvcnQocmVhc29uKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVjb25uZWN0cyB0aGlzIGV2ZW50IHNvdXJjZSwgdW5sZXNzIGNsb3NlZCBpcyB0cnVlO1xuICAgKi9cbiAgcHJpdmF0ZSByZWNvbm5lY3QoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2Nsb3NlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnVwZGF0ZVN0YXRlKFJlYWN0aXZlRXZlbnRTb3VyY2VTdGF0ZS5DT05ORUNUSU5HKTtcbiAgICB0aGlzLmNsb3NlQ3VycmVudCgnUmVjb25uZWN0Jyk7XG4gICAgdGhpcy5vcGVuRXZlbnRTb3VyY2UoKTtcbiAgfVxuXG4gIHByaXZhdGUgb3BlbkV2ZW50U291cmNlKCk6IHZvaWQge1xuICAgIGNvbnN0IHJlcXVlc3RJbml0ID0gdGhpcy5yZXF1ZXN0SW5pdFByb3ZpZGVyKCk7XG4gICAgY29uc3QgY3J0ID0gdGhpcy5hYm9ydENvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gICAgZmV0Y2hFdmVudFNvdXJjZShyZXF1ZXN0SW5pdC5yZXF1ZXN0LCB7XG4gICAgICBtZXRob2Q6IHJlcXVlc3RJbml0Lm1ldGhvZCxcbiAgICAgIHNpZ25hbDogY3J0LnNpZ25hbCxcbiAgICAgIGhlYWRlcnM6IHJlcXVlc3RJbml0LmhlYWRlcnMsXG4gICAgICBrZWVwYWxpdmU6IHRydWUsXG4gICAgICBvcGVuV2hlbkhpZGRlbjogZmFsc2UsXG4gICAgICBvbm9wZW46IHJlc3BvbnNlID0+IHRoaXMuaGFuZGxlT25PcGVuKHJlc3BvbnNlKSxcbiAgICAgIG9ubWVzc2FnZTogbXNnID0+IHRoaXMuaGFuZGxlT25NZXNzYWdlKG1zZyksXG4gICAgICBvbmVycm9yOiBlcnIgPT4gdGhpcy5oYW5kbGVPbkVycm9yKGVyciksXG4gICAgICBvbmNsb3NlOiAoKSA9PiB0aGlzLmhhbmRsZU9uQ2xvc2UoKVxuICAgIH0pLnRoZW4ociA9PiB7XG5cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlT25PcGVuKHJlc3BvbnNlOiBSZXNwb25zZSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmIChyZXNwb25zZS5vayAmJiByZXNwb25zZS5oZWFkZXJzLmdldCgnY29udGVudC10eXBlJykgPT09IEV2ZW50U3RyZWFtQ29udGVudFR5cGUpIHtcbiAgICAgIHRoaXMubG9nLmRlYnVnKCdFdmVudFNvdXJjZSBjb25uZWN0aW9uIHN1Y2Vzc2Z1bGx5IG9wZW5lZCB0bzogJyArIHJlc3BvbnNlLnVybCArXG4gICAgICAgICcsIHN0YXRlOiAnICsgcmVzcG9uc2Uuc3RhdHVzLCByZXNwb25zZSk7XG4gICAgICB0aGlzLnVwZGF0ZVN0YXRlKFJlYWN0aXZlRXZlbnRTb3VyY2VTdGF0ZS5PUEVOKTtcbiAgICAgIHJldHVybjsgLy8gZXZlcnl0aGluZydzIGdvb2RcbiAgICB9IGVsc2UgaWYgKHJlc3BvbnNlLnN0YXR1cyA+PSA0MDAgJiYgcmVzcG9uc2Uuc3RhdHVzIDwgNTAwICYmIHJlc3BvbnNlLnN0YXR1cyAhPT0gNDI5KSB7XG4gICAgICAvLyBjbGllbnQtc2lkZSBlcnJvcnMgYXJlIHVzdWFsbHkgbm9uLXJldHJpYWJsZTpcbiAgICAgIHRoaXMudXBkYXRlU3RhdGUoUmVhY3RpdmVFdmVudFNvdXJjZVN0YXRlLkVSUk9SKTtcbiAgICAgIHRoaXMubG9nLmVycm9yKCdGYWlsZWQgdG8gb3BlbiBFdmVudCBTb3VyY2UgZHVlIHRvIENsaWVudCBFcnJvciAnICsgcmVzcG9uc2Uuc3RhdHVzLCByZXNwb25zZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubG9nLmVycm9yKCdGYWlsZWQgdG8gb3BlbiBFdmVudCBTb3VyY2UgZHVlIHRvIEVycm9yICcgKyByZXNwb25zZS5zdGF0dXMsIHJlc3BvbnNlKTtcbiAgICAgIHRoaXMudXBkYXRlU3RhdGUoUmVhY3RpdmVFdmVudFNvdXJjZVN0YXRlLkVSUk9SKTtcbiAgICAgIHRoaXMudHJ5UmVjb25uZWN0KCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVPbkVycm9yKGVycjogYW55KTogdm9pZCB7XG4gICAgdGhpcy51cGRhdGVTdGF0ZShSZWFjdGl2ZUV2ZW50U291cmNlU3RhdGUuRVJST1IpO1xuICAgIHRoaXMubG9nLnRyYWNlKCdUaGVyZSB3YXMgYW4gU1NFIGVycm9yLicsIGVycik7XG4gICAgaWYgKCF0aGlzLmNsb3NlZCkge1xuICAgICAgLy8gVGhlcmUgd2FzIGFuIGVycm9yIC0gdHJ5IHJlY29ubmVjdGluZ1xuICAgICAgdGhpcy5sb2cuZGVidWcoJ0F0dGVtcHRpbmcgdG8gcmVjb25uZWN0IGV2ZW50LXNvdXJjZSAuLi4nKTtcbiAgICAgIHRoaXMudHJ5UmVjb25uZWN0KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubG9nLmRlYnVnKCdUaGVyZSB3YXMgYW4gZXJyb3IgaW4gdGhlIHNzZSBjb25uZWN0aW9uIChjbG9zZWQpLicsIGVycik7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB0cnlSZWNvbm5lY3QoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl9jbG9zZWQpIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5yZWNvbm5lY3QoKSwgdGhpcy5SRUNPTk5FQ1RfREVMQVlfTVMpOyAvLyBEZWxheSB0aGUgcmVjb25uZWN0XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVPbk1lc3NhZ2UobXNnOiBFdmVudFNvdXJjZU1lc3NhZ2UpOiB2b2lkIHtcbiAgICBjb25zdCBldmVudFR5cGUgPSB0aGlzLmV2ZW50VHlwZU9yRGVmYXVsdChtc2cuZXZlbnQpO1xuICAgIHRoaXMuZXZlbnRSZWxheS5uZXh0KFxuICAgICAgbmV3IFJlYWN0aXZlU1NlTWVzc2FnZTxUPihcbiAgICAgICAgbXNnLmlkLFxuICAgICAgICBldmVudFR5cGUsXG4gICAgICAgIG1zZy5kYXRhLFxuICAgICAgICBtc2cucmV0cnlcbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVPbkNsb3NlKCk6IHZvaWQge1xuICAgIHRoaXMubG9nLmRlYnVnKCdFdmVudFNvdXJjZSBoYXMgY2xvc2VkLicpO1xuICAgIHRoaXMudXBkYXRlU3RhdGUoUmVhY3RpdmVFdmVudFNvdXJjZVN0YXRlLkNMT1NFRCk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVN0YXRlKHN0YXRlOiBSZWFjdGl2ZUV2ZW50U291cmNlU3RhdGUpIHtcbiAgICB0aGlzLnN0YXRlJC5uZXh0KHN0YXRlKTtcbiAgfVxuXG4gIHByaXZhdGUgZXZlbnRUeXBlT3JEZWZhdWx0KHR5cGU/OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB0eXBlID8/IHRoaXMuRVZFTlRfVFlQRV9ERUZBVUxUO1xuICB9XG59XG4iXX0=
@@ -31552,12 +31552,18 @@ var ReactiveEventSourceState;
31552
31552
  ReactiveEventSourceState["ERROR"] = "ERROR";
31553
31553
  })(ReactiveEventSourceState || (ReactiveEventSourceState = {}));
31554
31554
  class ReactiveSSeMessage {
31555
- constructor(id, event, data, retry) {
31555
+ constructor(id, event, dataRaw, retry) {
31556
31556
  this.id = id;
31557
31557
  this.event = event;
31558
- this.data = data;
31558
+ this.dataRaw = dataRaw;
31559
31559
  this.retry = retry;
31560
31560
  }
31561
+ json() {
31562
+ return JSON.parse(this.dataRaw);
31563
+ }
31564
+ jsonAs() {
31565
+ return this.json();
31566
+ }
31561
31567
  }
31562
31568
  class ReactiveFetchEventSource {
31563
31569
  /***************************************************************************
@@ -31586,10 +31592,12 @@ class ReactiveFetchEventSource {
31586
31592
  * Fields *
31587
31593
  * *
31588
31594
  **************************************************************************/
31595
+ this.EVENT_TYPE_DEFAULT = 'message';
31596
+ this.RECONNECT_DELAY_MS = 3000;
31589
31597
  this.log = LoggerFactory.getLogger(this.constructor.name);
31590
- this.abortController = new AbortController();
31598
+ this.abortController = null;
31591
31599
  this.state$ = new BehaviorSubject(ReactiveEventSourceState.IDLE);
31592
- this.eventTopics = new Map();
31600
+ this.eventRelay = new Subject();
31593
31601
  if (!requestInitProvider) {
31594
31602
  throw new Error('You must provide a event source url provider!');
31595
31603
  }
@@ -31623,22 +31631,15 @@ class ReactiveFetchEventSource {
31623
31631
  * Get an event stream for the given event type.
31624
31632
  * @param eventTypeRaw The event type. Defaults to 'message'.
31625
31633
  */
31626
- events(eventTypeRaw) {
31634
+ streamEventsOfType(eventTypeRaw) {
31627
31635
  const eventType = this.eventTypeOrDefault(eventTypeRaw);
31628
- if (!this.eventTopics.has(eventType)) {
31629
- this.eventTopics.set(eventType, new Subject());
31630
- }
31631
- const eventSubj = this.eventTopics.get(eventType);
31632
- return eventSubj.asObservable();
31636
+ return this.streamEvents().pipe(filter(e => e.event == eventType));
31633
31637
  }
31634
31638
  /**
31635
- * Get an event stream of messages parsed from json.
31636
- * (event.data must be in json format)
31637
- *
31638
- * @param eventType The event type. Defaults to 'message'.
31639
+ * Get an event stream for all events no matter their type.
31639
31640
  */
31640
- eventsJson(eventType) {
31641
- return this.events(eventType).pipe(map(event => JSON.parse(event.data)));
31641
+ streamEvents() {
31642
+ return this.eventRelay.asObservable();
31642
31643
  }
31643
31644
  /**
31644
31645
  * Close this event source. It won't reconnect.
@@ -31674,7 +31675,10 @@ class ReactiveFetchEventSource {
31674
31675
  */
31675
31676
  closeCurrent(reason) {
31676
31677
  this.log.debug('Closing the event-source, reason: ' + reason);
31677
- this.abortController.abort(reason);
31678
+ const crt = this.abortController;
31679
+ if (crt) {
31680
+ crt.abort(reason);
31681
+ }
31678
31682
  }
31679
31683
  /**
31680
31684
  * Reconnects this event source, unless closed is true;
@@ -31689,9 +31693,10 @@ class ReactiveFetchEventSource {
31689
31693
  }
31690
31694
  openEventSource() {
31691
31695
  const requestInit = this.requestInitProvider();
31696
+ const crt = this.abortController = new AbortController();
31692
31697
  fetchEventSource(requestInit.request, {
31693
31698
  method: requestInit.method,
31694
- signal: this.abortController.signal,
31699
+ signal: crt.signal,
31695
31700
  headers: requestInit.headers,
31696
31701
  keepalive: true,
31697
31702
  openWhenHidden: false,
@@ -31717,7 +31722,7 @@ class ReactiveFetchEventSource {
31717
31722
  else {
31718
31723
  this.log.error('Failed to open Event Source due to Error ' + response.status, response);
31719
31724
  this.updateState(ReactiveEventSourceState.ERROR);
31720
- this.tryReconnect(); // TODO Necessary if keep alive = true?
31725
+ this.tryReconnect();
31721
31726
  }
31722
31727
  }
31723
31728
  handleOnError(err) {
@@ -31726,7 +31731,7 @@ class ReactiveFetchEventSource {
31726
31731
  if (!this.closed) {
31727
31732
  // There was an error - try reconnecting
31728
31733
  this.log.debug('Attempting to reconnect event-source ...');
31729
- this.tryReconnect(); // TODO Necessary if keep alive = true?
31734
+ this.tryReconnect();
31730
31735
  }
31731
31736
  else {
31732
31737
  this.log.debug('There was an error in the sse connection (closed).', err);
@@ -31734,15 +31739,12 @@ class ReactiveFetchEventSource {
31734
31739
  }
31735
31740
  tryReconnect() {
31736
31741
  if (!this._closed) {
31737
- setTimeout(() => this.reconnect(), 3000); // Delay the reconnect
31742
+ setTimeout(() => this.reconnect(), this.RECONNECT_DELAY_MS); // Delay the reconnect
31738
31743
  }
31739
31744
  }
31740
31745
  handleOnMessage(msg) {
31741
31746
  const eventType = this.eventTypeOrDefault(msg.event);
31742
- const topic = this.eventTopics.get(eventType);
31743
- if (topic) {
31744
- topic.next(new ReactiveSSeMessage(msg.id, eventType, msg.data, msg.retry));
31745
- }
31747
+ this.eventRelay.next(new ReactiveSSeMessage(msg.id, eventType, msg.data, msg.retry));
31746
31748
  }
31747
31749
  handleOnClose() {
31748
31750
  this.log.debug('EventSource has closed.');
@@ -31752,7 +31754,7 @@ class ReactiveFetchEventSource {
31752
31754
  this.state$.next(state);
31753
31755
  }
31754
31756
  eventTypeOrDefault(type) {
31755
- return type ?? 'message';
31757
+ return type ?? this.EVENT_TYPE_DEFAULT;
31756
31758
  }
31757
31759
  }
31758
31760