@outfoxx/sunday 1.1.0-beta.21 → 1.1.0-beta.23
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/esm/fetch-event-source.d.ts +7 -2
- package/build/esm/fetch-event-source.js +37 -23
- package/build/esm/fetch-event-source.js.map +1 -1
- package/build/esm/logger.d.ts +9 -0
- package/build/esm/logger.js +22 -1
- package/build/esm/logger.js.map +1 -1
- package/build/esnext/fetch-event-source.d.ts +7 -2
- package/build/esnext/fetch-event-source.js +37 -23
- package/build/esnext/fetch-event-source.js.map +1 -1
- package/build/esnext/logger.d.ts +9 -0
- package/build/esnext/logger.js +22 -1
- package/build/esnext/logger.js.map +1 -1
- package/build/main/fetch-event-source.d.ts +7 -2
- package/build/main/fetch-event-source.js +37 -23
- package/build/main/fetch-event-source.js.map +1 -1
- package/build/main/logger.d.ts +9 -0
- package/build/main/logger.js +24 -0
- package/build/main/logger.js.map +1 -1
- package/package.json +1 -1
- package/src/fetch-event-source.ts +61 -30
- package/src/logger.ts +26 -0
|
@@ -7,9 +7,10 @@ export interface FetchEventSource {
|
|
|
7
7
|
}
|
|
8
8
|
export declare class FetchEventSource extends EventTarget implements ExtEventSource {
|
|
9
9
|
private static LAST_EVENT_ID_HEADER;
|
|
10
|
-
private static
|
|
10
|
+
private static MAX_RETRY_TIME_MULTIPLIER;
|
|
11
|
+
private static RETRY_EXPONENT;
|
|
11
12
|
private static EVENT_TIMEOUT_DEFAULT;
|
|
12
|
-
private static
|
|
13
|
+
private static EVENT_TIMEOUT_CHECK_INTERVAL_DEFAULT;
|
|
13
14
|
CONNECTING: number;
|
|
14
15
|
OPEN: number;
|
|
15
16
|
CLOSED: number;
|
|
@@ -30,18 +31,21 @@ export declare class FetchEventSource extends EventTarget implements ExtEventSou
|
|
|
30
31
|
private lastEventId?;
|
|
31
32
|
private logger?;
|
|
32
33
|
private readonly eventTimeout?;
|
|
34
|
+
private readonly eventTimeoutCheckInterval;
|
|
33
35
|
private eventTimeoutCheckHandle?;
|
|
34
36
|
private lastEventReceivedTime;
|
|
35
37
|
private eventParser;
|
|
36
38
|
constructor(url: string, eventSourceInit?: EventSourceInit & {
|
|
37
39
|
adapter?: (url: string, requestInit: RequestInit) => Observable<Request>;
|
|
38
40
|
eventTimeout?: number;
|
|
41
|
+
eventTimeoutCheckInterval?: number;
|
|
39
42
|
logger?: Logger;
|
|
40
43
|
});
|
|
41
44
|
connect(): void;
|
|
42
45
|
private internalConnect;
|
|
43
46
|
close(): void;
|
|
44
47
|
private internalClose;
|
|
48
|
+
private updateLastEventReceived;
|
|
45
49
|
private startEventTimeoutCheck;
|
|
46
50
|
private stopEventTimeoutCheck;
|
|
47
51
|
private checkEventTimeout;
|
|
@@ -50,6 +54,7 @@ export declare class FetchEventSource extends EventTarget implements ExtEventSou
|
|
|
50
54
|
private receivedError;
|
|
51
55
|
private receivedComplete;
|
|
52
56
|
private scheduleReconnect;
|
|
57
|
+
private static calculateRetryTime;
|
|
53
58
|
private clearReconnect;
|
|
54
59
|
private dispatchParsedEvent;
|
|
55
60
|
fireErrorEvent(error: unknown): void;
|
|
@@ -15,6 +15,7 @@ import { EMPTY, map, of, Subscription, switchMap } from 'rxjs';
|
|
|
15
15
|
import { fromReadableStreamLike } from 'rxjs/internal/observable/innerFrom';
|
|
16
16
|
import { EventParser } from './event-parser';
|
|
17
17
|
import { validate } from './fetch';
|
|
18
|
+
import { levelLogger, LogLevel } from './logger';
|
|
18
19
|
import { MediaType } from './media-type';
|
|
19
20
|
import { unknownGet, unknownSet } from './util/any';
|
|
20
21
|
export class FetchEventSource extends EventTarget {
|
|
@@ -30,14 +31,13 @@ export class FetchEventSource extends EventTarget {
|
|
|
30
31
|
this.onopen = null;
|
|
31
32
|
this.internalRetryTime = 100;
|
|
32
33
|
this.retryAttempt = 0;
|
|
33
|
-
this.connectionAttemptTime = 0;
|
|
34
34
|
this.lastEventReceivedTime = 0;
|
|
35
35
|
this.eventParser = new EventParser();
|
|
36
36
|
//
|
|
37
37
|
// Event Dispatch
|
|
38
38
|
//
|
|
39
39
|
this.dispatchParsedEvent = (eventInfo) => {
|
|
40
|
-
this.
|
|
40
|
+
this.updateLastEventReceived();
|
|
41
41
|
if (eventInfo.retry) {
|
|
42
42
|
const retryTime = Number.parseInt(eventInfo.retry, 10);
|
|
43
43
|
if (Number.isSafeInteger(retryTime)) {
|
|
@@ -45,7 +45,7 @@ export class FetchEventSource extends EventTarget {
|
|
|
45
45
|
this.internalRetryTime = retryTime;
|
|
46
46
|
}
|
|
47
47
|
else {
|
|
48
|
-
this.logger?.
|
|
48
|
+
this.logger?.warn?.('ignoring invalid retry timeout event', {
|
|
49
49
|
eventInfo,
|
|
50
50
|
});
|
|
51
51
|
}
|
|
@@ -55,6 +55,7 @@ export class FetchEventSource extends EventTarget {
|
|
|
55
55
|
eventInfo.event == null &&
|
|
56
56
|
eventInfo.data == null) {
|
|
57
57
|
// skip empty event
|
|
58
|
+
this.logger?.trace?.('skipping empty event');
|
|
58
59
|
return;
|
|
59
60
|
}
|
|
60
61
|
// Save last-event-id if the new id is valid
|
|
@@ -64,7 +65,7 @@ export class FetchEventSource extends EventTarget {
|
|
|
64
65
|
this.lastEventId = eventInfo.id;
|
|
65
66
|
}
|
|
66
67
|
else {
|
|
67
|
-
this.logger?.
|
|
68
|
+
this.logger?.warn?.('event id contains NULL byte, unable to use for last-event-id');
|
|
68
69
|
}
|
|
69
70
|
}
|
|
70
71
|
// Dispatch event
|
|
@@ -81,9 +82,11 @@ export class FetchEventSource extends EventTarget {
|
|
|
81
82
|
eventSourceInit?.adapter ??
|
|
82
83
|
((_url, requestInit) => of(new Request(_url, requestInit)));
|
|
83
84
|
this.eventTimeout =
|
|
84
|
-
eventSourceInit?.eventTimeout ??
|
|
85
|
-
|
|
86
|
-
|
|
85
|
+
eventSourceInit?.eventTimeout ?? FetchEventSource.EVENT_TIMEOUT_DEFAULT;
|
|
86
|
+
this.eventTimeoutCheckInterval =
|
|
87
|
+
eventSourceInit?.eventTimeoutCheckInterval ??
|
|
88
|
+
FetchEventSource.EVENT_TIMEOUT_CHECK_INTERVAL_DEFAULT;
|
|
89
|
+
this.logger = levelLogger(LogLevel.Info, eventSourceInit?.logger);
|
|
87
90
|
}
|
|
88
91
|
get retryTime() {
|
|
89
92
|
return this.internalRetryTime;
|
|
@@ -159,7 +162,7 @@ export class FetchEventSource extends EventTarget {
|
|
|
159
162
|
if (this.readyState === this.CLOSED) {
|
|
160
163
|
return;
|
|
161
164
|
}
|
|
162
|
-
this.logger?.debug?.('
|
|
165
|
+
this.logger?.debug?.('closing');
|
|
163
166
|
this.readyState = this.CLOSED;
|
|
164
167
|
this.internalClose();
|
|
165
168
|
}
|
|
@@ -172,14 +175,17 @@ export class FetchEventSource extends EventTarget {
|
|
|
172
175
|
//
|
|
173
176
|
// Event Timeout
|
|
174
177
|
//
|
|
178
|
+
updateLastEventReceived(time = Date.now()) {
|
|
179
|
+
this.lastEventReceivedTime = time;
|
|
180
|
+
}
|
|
175
181
|
startEventTimeoutCheck(lastEventReceivedTime) {
|
|
176
182
|
this.stopEventTimeoutCheck();
|
|
177
183
|
if (!this.eventTimeout) {
|
|
178
184
|
return;
|
|
179
185
|
}
|
|
180
|
-
this.lastEventReceivedTime
|
|
186
|
+
this.updateLastEventReceived(lastEventReceivedTime);
|
|
181
187
|
this.logger?.trace?.('starting event timeout checks');
|
|
182
|
-
this.eventTimeoutCheckHandle = window.setInterval(() => this.checkEventTimeout(),
|
|
188
|
+
this.eventTimeoutCheckHandle = window.setInterval(() => this.checkEventTimeout(), this.eventTimeoutCheckInterval);
|
|
183
189
|
}
|
|
184
190
|
stopEventTimeoutCheck() {
|
|
185
191
|
if (this.eventTimeoutCheckHandle) {
|
|
@@ -216,7 +222,7 @@ export class FetchEventSource extends EventTarget {
|
|
|
216
222
|
this.scheduleReconnect();
|
|
217
223
|
return;
|
|
218
224
|
}
|
|
219
|
-
this.logger?.
|
|
225
|
+
this.logger?.info?.('opened');
|
|
220
226
|
this.connectionOrigin = response.url;
|
|
221
227
|
this.retryAttempt = 0;
|
|
222
228
|
this.readyState = this.OPEN;
|
|
@@ -261,21 +267,28 @@ export class FetchEventSource extends EventTarget {
|
|
|
261
267
|
//
|
|
262
268
|
scheduleReconnect() {
|
|
263
269
|
this.internalClose();
|
|
270
|
+
const lastConnectionTime = this.connectionAttemptTime
|
|
271
|
+
? Date.now() - this.connectionAttemptTime
|
|
272
|
+
: 0;
|
|
273
|
+
const retryDelay = FetchEventSource.calculateRetryTime(this.retryAttempt, this.retryTime, lastConnectionTime);
|
|
274
|
+
this.retryAttempt++;
|
|
275
|
+
this.readyState = this.CONNECTING;
|
|
276
|
+
this.logger?.debug?.('scheduling reconnect', { retryDelay });
|
|
277
|
+
this.reconnectTimeoutHandle = window.setTimeout(() => this.internalConnect(), retryDelay);
|
|
278
|
+
}
|
|
279
|
+
static calculateRetryTime(retryAttempt, retryTime, lastConnectTime) {
|
|
280
|
+
const retryMultiplier = Math.min(retryAttempt, this.MAX_RETRY_TIME_MULTIPLIER);
|
|
264
281
|
// calculate total delay
|
|
265
|
-
|
|
266
|
-
let retryDelay = Math.min(this.retryTime + backOffDelay, this.retryTime * FetchEventSource.MAX_RETRY_TIME_MULTIPLE);
|
|
282
|
+
let retryDelay = Math.pow(retryMultiplier, this.RETRY_EXPONENT) * retryTime;
|
|
267
283
|
// Adjust delay by amount of time last connect
|
|
268
284
|
// cycle took, except on the first attempt
|
|
269
|
-
if (
|
|
270
|
-
|
|
285
|
+
if (retryAttempt > 0) {
|
|
286
|
+
retryDelay -= lastConnectTime;
|
|
271
287
|
// Ensure delay is at least as large as
|
|
272
288
|
// minimum retry time interval
|
|
273
|
-
retryDelay = Math.max(retryDelay
|
|
289
|
+
retryDelay = Math.max(retryDelay, retryTime);
|
|
274
290
|
}
|
|
275
|
-
|
|
276
|
-
this.readyState = this.CONNECTING;
|
|
277
|
-
this.logger?.debug?.('scheduling reconnect', { retryDelay });
|
|
278
|
-
this.reconnectTimeoutHandle = window.setTimeout(() => this.internalConnect(), retryDelay);
|
|
291
|
+
return retryDelay;
|
|
279
292
|
}
|
|
280
293
|
clearReconnect() {
|
|
281
294
|
if (this.reconnectTimeoutHandle) {
|
|
@@ -290,7 +303,8 @@ export class FetchEventSource extends EventTarget {
|
|
|
290
303
|
}
|
|
291
304
|
}
|
|
292
305
|
FetchEventSource.LAST_EVENT_ID_HEADER = 'Last-Event-ID';
|
|
293
|
-
FetchEventSource.
|
|
294
|
-
FetchEventSource.
|
|
295
|
-
FetchEventSource.
|
|
306
|
+
FetchEventSource.MAX_RETRY_TIME_MULTIPLIER = 12;
|
|
307
|
+
FetchEventSource.RETRY_EXPONENT = 2.6;
|
|
308
|
+
FetchEventSource.EVENT_TIMEOUT_DEFAULT = 120 * 1000;
|
|
309
|
+
FetchEventSource.EVENT_TIMEOUT_CHECK_INTERVAL_DEFAULT = 2 * 1000;
|
|
296
310
|
//# sourceMappingURL=fetch-event-source.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetch-event-source.js","sourceRoot":"","sources":["../../src/fetch-event-source.ts"],"names":[],"mappings":"AAAA,8BAA8B;AAC9B,EAAE;AACF,kEAAkE;AAClE,mEAAmE;AACnE,0CAA0C;AAC1C,EAAE;AACF,gDAAgD;AAChD,EAAE;AACF,sEAAsE;AACtE,oEAAoE;AACpE,2EAA2E;AAC3E,sEAAsE;AACtE,iCAAiC;AAEjC,OAAO,EAAE,KAAK,EAAE,GAAG,EAAc,EAAE,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AAC3E,OAAO,EAAE,sBAAsB,EAAE,MAAM,oCAAoC,CAAC;AAC5E,OAAO,EAAa,WAAW,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"fetch-event-source.js","sourceRoot":"","sources":["../../src/fetch-event-source.ts"],"names":[],"mappings":"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"}
|
package/build/esm/logger.d.ts
CHANGED
|
@@ -6,3 +6,12 @@ export interface Logger {
|
|
|
6
6
|
warn?(...data: unknown[]): void;
|
|
7
7
|
error?(...data: unknown[]): void;
|
|
8
8
|
}
|
|
9
|
+
export declare enum LogLevel {
|
|
10
|
+
Trace = 4,
|
|
11
|
+
Debug = 3,
|
|
12
|
+
Info = 2,
|
|
13
|
+
Warn = 1,
|
|
14
|
+
Error = 0,
|
|
15
|
+
None = -1
|
|
16
|
+
}
|
|
17
|
+
export declare function levelLogger(level: LogLevel, logger?: Logger): Logger | undefined;
|
package/build/esm/logger.js
CHANGED
|
@@ -11,5 +11,26 @@
|
|
|
11
11
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
12
|
// See the License for the specific language governing permissions and
|
|
13
13
|
// limitations under the License.
|
|
14
|
-
export
|
|
14
|
+
export var LogLevel;
|
|
15
|
+
(function (LogLevel) {
|
|
16
|
+
LogLevel[LogLevel["Trace"] = 4] = "Trace";
|
|
17
|
+
LogLevel[LogLevel["Debug"] = 3] = "Debug";
|
|
18
|
+
LogLevel[LogLevel["Info"] = 2] = "Info";
|
|
19
|
+
LogLevel[LogLevel["Warn"] = 1] = "Warn";
|
|
20
|
+
LogLevel[LogLevel["Error"] = 0] = "Error";
|
|
21
|
+
LogLevel[LogLevel["None"] = -1] = "None";
|
|
22
|
+
})(LogLevel || (LogLevel = {}));
|
|
23
|
+
export function levelLogger(level, logger) {
|
|
24
|
+
if (!logger) {
|
|
25
|
+
return undefined;
|
|
26
|
+
}
|
|
27
|
+
return {
|
|
28
|
+
log: logger?.log?.bind(logger),
|
|
29
|
+
trace: level >= LogLevel.Trace ? logger?.trace?.bind(logger) : undefined,
|
|
30
|
+
debug: level >= LogLevel.Debug ? logger?.debug?.bind(logger) : undefined,
|
|
31
|
+
info: level >= LogLevel.Info ? logger?.info?.bind(logger) : undefined,
|
|
32
|
+
warn: level >= LogLevel.Warn ? logger?.warn?.bind(logger) : undefined,
|
|
33
|
+
error: level >= LogLevel.Error ? logger?.error?.bind(logger) : undefined,
|
|
34
|
+
};
|
|
35
|
+
}
|
|
15
36
|
//# sourceMappingURL=logger.js.map
|
package/build/esm/logger.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/logger.ts"],"names":[],"mappings":"AAAA,8BAA8B;AAC9B,EAAE;AACF,kEAAkE;AAClE,mEAAmE;AACnE,0CAA0C;AAC1C,EAAE;AACF,gDAAgD;AAChD,EAAE;AACF,sEAAsE;AACtE,oEAAoE;AACpE,2EAA2E;AAC3E,sEAAsE;AACtE,iCAAiC"}
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/logger.ts"],"names":[],"mappings":"AAAA,8BAA8B;AAC9B,EAAE;AACF,kEAAkE;AAClE,mEAAmE;AACnE,0CAA0C;AAC1C,EAAE;AACF,gDAAgD;AAChD,EAAE;AACF,sEAAsE;AACtE,oEAAoE;AACpE,2EAA2E;AAC3E,sEAAsE;AACtE,iCAAiC;AAWjC,MAAM,CAAN,IAAY,QAOX;AAPD,WAAY,QAAQ;IAClB,yCAAS,CAAA;IACT,yCAAS,CAAA;IACT,uCAAQ,CAAA;IACR,uCAAQ,CAAA;IACR,yCAAS,CAAA;IACT,wCAAS,CAAA;AACX,CAAC,EAPW,QAAQ,KAAR,QAAQ,QAOnB;AAED,MAAM,UAAU,WAAW,CACzB,KAAe,EACf,MAAe;IAEf,IAAI,CAAC,MAAM,EAAE;QACX,OAAO,SAAS,CAAC;KAClB;IACD,OAAO;QACL,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC;QAC9B,KAAK,EAAE,KAAK,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS;QACxE,KAAK,EAAE,KAAK,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS;QACxE,IAAI,EAAE,KAAK,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS;QACrE,IAAI,EAAE,KAAK,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS;QACrE,KAAK,EAAE,KAAK,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS;KACzE,CAAC;AACJ,CAAC"}
|
|
@@ -7,9 +7,10 @@ export interface FetchEventSource {
|
|
|
7
7
|
}
|
|
8
8
|
export declare class FetchEventSource extends EventTarget implements ExtEventSource {
|
|
9
9
|
private static LAST_EVENT_ID_HEADER;
|
|
10
|
-
private static
|
|
10
|
+
private static MAX_RETRY_TIME_MULTIPLIER;
|
|
11
|
+
private static RETRY_EXPONENT;
|
|
11
12
|
private static EVENT_TIMEOUT_DEFAULT;
|
|
12
|
-
private static
|
|
13
|
+
private static EVENT_TIMEOUT_CHECK_INTERVAL_DEFAULT;
|
|
13
14
|
CONNECTING: number;
|
|
14
15
|
OPEN: number;
|
|
15
16
|
CLOSED: number;
|
|
@@ -30,18 +31,21 @@ export declare class FetchEventSource extends EventTarget implements ExtEventSou
|
|
|
30
31
|
private lastEventId?;
|
|
31
32
|
private logger?;
|
|
32
33
|
private readonly eventTimeout?;
|
|
34
|
+
private readonly eventTimeoutCheckInterval;
|
|
33
35
|
private eventTimeoutCheckHandle?;
|
|
34
36
|
private lastEventReceivedTime;
|
|
35
37
|
private eventParser;
|
|
36
38
|
constructor(url: string, eventSourceInit?: EventSourceInit & {
|
|
37
39
|
adapter?: (url: string, requestInit: RequestInit) => Observable<Request>;
|
|
38
40
|
eventTimeout?: number;
|
|
41
|
+
eventTimeoutCheckInterval?: number;
|
|
39
42
|
logger?: Logger;
|
|
40
43
|
});
|
|
41
44
|
connect(): void;
|
|
42
45
|
private internalConnect;
|
|
43
46
|
close(): void;
|
|
44
47
|
private internalClose;
|
|
48
|
+
private updateLastEventReceived;
|
|
45
49
|
private startEventTimeoutCheck;
|
|
46
50
|
private stopEventTimeoutCheck;
|
|
47
51
|
private checkEventTimeout;
|
|
@@ -50,6 +54,7 @@ export declare class FetchEventSource extends EventTarget implements ExtEventSou
|
|
|
50
54
|
private receivedError;
|
|
51
55
|
private receivedComplete;
|
|
52
56
|
private scheduleReconnect;
|
|
57
|
+
private static calculateRetryTime;
|
|
53
58
|
private clearReconnect;
|
|
54
59
|
private dispatchParsedEvent;
|
|
55
60
|
fireErrorEvent(error: unknown): void;
|
|
@@ -15,6 +15,7 @@ import { EMPTY, map, of, Subscription, switchMap } from 'rxjs';
|
|
|
15
15
|
import { fromReadableStreamLike } from 'rxjs/internal/observable/innerFrom';
|
|
16
16
|
import { EventParser } from './event-parser';
|
|
17
17
|
import { validate } from './fetch';
|
|
18
|
+
import { levelLogger, LogLevel } from './logger';
|
|
18
19
|
import { MediaType } from './media-type';
|
|
19
20
|
import { unknownGet, unknownSet } from './util/any';
|
|
20
21
|
export class FetchEventSource extends EventTarget {
|
|
@@ -30,14 +31,13 @@ export class FetchEventSource extends EventTarget {
|
|
|
30
31
|
this.onopen = null;
|
|
31
32
|
this.internalRetryTime = 100;
|
|
32
33
|
this.retryAttempt = 0;
|
|
33
|
-
this.connectionAttemptTime = 0;
|
|
34
34
|
this.lastEventReceivedTime = 0;
|
|
35
35
|
this.eventParser = new EventParser();
|
|
36
36
|
//
|
|
37
37
|
// Event Dispatch
|
|
38
38
|
//
|
|
39
39
|
this.dispatchParsedEvent = (eventInfo) => {
|
|
40
|
-
this.
|
|
40
|
+
this.updateLastEventReceived();
|
|
41
41
|
if (eventInfo.retry) {
|
|
42
42
|
const retryTime = Number.parseInt(eventInfo.retry, 10);
|
|
43
43
|
if (Number.isSafeInteger(retryTime)) {
|
|
@@ -45,7 +45,7 @@ export class FetchEventSource extends EventTarget {
|
|
|
45
45
|
this.internalRetryTime = retryTime;
|
|
46
46
|
}
|
|
47
47
|
else {
|
|
48
|
-
this.logger?.
|
|
48
|
+
this.logger?.warn?.('ignoring invalid retry timeout event', {
|
|
49
49
|
eventInfo,
|
|
50
50
|
});
|
|
51
51
|
}
|
|
@@ -55,6 +55,7 @@ export class FetchEventSource extends EventTarget {
|
|
|
55
55
|
eventInfo.event == null &&
|
|
56
56
|
eventInfo.data == null) {
|
|
57
57
|
// skip empty event
|
|
58
|
+
this.logger?.trace?.('skipping empty event');
|
|
58
59
|
return;
|
|
59
60
|
}
|
|
60
61
|
// Save last-event-id if the new id is valid
|
|
@@ -64,7 +65,7 @@ export class FetchEventSource extends EventTarget {
|
|
|
64
65
|
this.lastEventId = eventInfo.id;
|
|
65
66
|
}
|
|
66
67
|
else {
|
|
67
|
-
this.logger?.
|
|
68
|
+
this.logger?.warn?.('event id contains NULL byte, unable to use for last-event-id');
|
|
68
69
|
}
|
|
69
70
|
}
|
|
70
71
|
// Dispatch event
|
|
@@ -81,9 +82,11 @@ export class FetchEventSource extends EventTarget {
|
|
|
81
82
|
eventSourceInit?.adapter ??
|
|
82
83
|
((_url, requestInit) => of(new Request(_url, requestInit)));
|
|
83
84
|
this.eventTimeout =
|
|
84
|
-
eventSourceInit?.eventTimeout ??
|
|
85
|
-
|
|
86
|
-
|
|
85
|
+
eventSourceInit?.eventTimeout ?? FetchEventSource.EVENT_TIMEOUT_DEFAULT;
|
|
86
|
+
this.eventTimeoutCheckInterval =
|
|
87
|
+
eventSourceInit?.eventTimeoutCheckInterval ??
|
|
88
|
+
FetchEventSource.EVENT_TIMEOUT_CHECK_INTERVAL_DEFAULT;
|
|
89
|
+
this.logger = levelLogger(LogLevel.Info, eventSourceInit?.logger);
|
|
87
90
|
}
|
|
88
91
|
get retryTime() {
|
|
89
92
|
return this.internalRetryTime;
|
|
@@ -159,7 +162,7 @@ export class FetchEventSource extends EventTarget {
|
|
|
159
162
|
if (this.readyState === this.CLOSED) {
|
|
160
163
|
return;
|
|
161
164
|
}
|
|
162
|
-
this.logger?.debug?.('
|
|
165
|
+
this.logger?.debug?.('closing');
|
|
163
166
|
this.readyState = this.CLOSED;
|
|
164
167
|
this.internalClose();
|
|
165
168
|
}
|
|
@@ -172,14 +175,17 @@ export class FetchEventSource extends EventTarget {
|
|
|
172
175
|
//
|
|
173
176
|
// Event Timeout
|
|
174
177
|
//
|
|
178
|
+
updateLastEventReceived(time = Date.now()) {
|
|
179
|
+
this.lastEventReceivedTime = time;
|
|
180
|
+
}
|
|
175
181
|
startEventTimeoutCheck(lastEventReceivedTime) {
|
|
176
182
|
this.stopEventTimeoutCheck();
|
|
177
183
|
if (!this.eventTimeout) {
|
|
178
184
|
return;
|
|
179
185
|
}
|
|
180
|
-
this.lastEventReceivedTime
|
|
186
|
+
this.updateLastEventReceived(lastEventReceivedTime);
|
|
181
187
|
this.logger?.trace?.('starting event timeout checks');
|
|
182
|
-
this.eventTimeoutCheckHandle = window.setInterval(() => this.checkEventTimeout(),
|
|
188
|
+
this.eventTimeoutCheckHandle = window.setInterval(() => this.checkEventTimeout(), this.eventTimeoutCheckInterval);
|
|
183
189
|
}
|
|
184
190
|
stopEventTimeoutCheck() {
|
|
185
191
|
if (this.eventTimeoutCheckHandle) {
|
|
@@ -216,7 +222,7 @@ export class FetchEventSource extends EventTarget {
|
|
|
216
222
|
this.scheduleReconnect();
|
|
217
223
|
return;
|
|
218
224
|
}
|
|
219
|
-
this.logger?.
|
|
225
|
+
this.logger?.info?.('opened');
|
|
220
226
|
this.connectionOrigin = response.url;
|
|
221
227
|
this.retryAttempt = 0;
|
|
222
228
|
this.readyState = this.OPEN;
|
|
@@ -261,21 +267,28 @@ export class FetchEventSource extends EventTarget {
|
|
|
261
267
|
//
|
|
262
268
|
scheduleReconnect() {
|
|
263
269
|
this.internalClose();
|
|
270
|
+
const lastConnectionTime = this.connectionAttemptTime
|
|
271
|
+
? Date.now() - this.connectionAttemptTime
|
|
272
|
+
: 0;
|
|
273
|
+
const retryDelay = FetchEventSource.calculateRetryTime(this.retryAttempt, this.retryTime, lastConnectionTime);
|
|
274
|
+
this.retryAttempt++;
|
|
275
|
+
this.readyState = this.CONNECTING;
|
|
276
|
+
this.logger?.debug?.('scheduling reconnect', { retryDelay });
|
|
277
|
+
this.reconnectTimeoutHandle = window.setTimeout(() => this.internalConnect(), retryDelay);
|
|
278
|
+
}
|
|
279
|
+
static calculateRetryTime(retryAttempt, retryTime, lastConnectTime) {
|
|
280
|
+
const retryMultiplier = Math.min(retryAttempt, this.MAX_RETRY_TIME_MULTIPLIER);
|
|
264
281
|
// calculate total delay
|
|
265
|
-
|
|
266
|
-
let retryDelay = Math.min(this.retryTime + backOffDelay, this.retryTime * FetchEventSource.MAX_RETRY_TIME_MULTIPLE);
|
|
282
|
+
let retryDelay = Math.pow(retryMultiplier, this.RETRY_EXPONENT) * retryTime;
|
|
267
283
|
// Adjust delay by amount of time last connect
|
|
268
284
|
// cycle took, except on the first attempt
|
|
269
|
-
if (
|
|
270
|
-
|
|
285
|
+
if (retryAttempt > 0) {
|
|
286
|
+
retryDelay -= lastConnectTime;
|
|
271
287
|
// Ensure delay is at least as large as
|
|
272
288
|
// minimum retry time interval
|
|
273
|
-
retryDelay = Math.max(retryDelay
|
|
289
|
+
retryDelay = Math.max(retryDelay, retryTime);
|
|
274
290
|
}
|
|
275
|
-
|
|
276
|
-
this.readyState = this.CONNECTING;
|
|
277
|
-
this.logger?.debug?.('scheduling reconnect', { retryDelay });
|
|
278
|
-
this.reconnectTimeoutHandle = window.setTimeout(() => this.internalConnect(), retryDelay);
|
|
291
|
+
return retryDelay;
|
|
279
292
|
}
|
|
280
293
|
clearReconnect() {
|
|
281
294
|
if (this.reconnectTimeoutHandle) {
|
|
@@ -290,7 +303,8 @@ export class FetchEventSource extends EventTarget {
|
|
|
290
303
|
}
|
|
291
304
|
}
|
|
292
305
|
FetchEventSource.LAST_EVENT_ID_HEADER = 'Last-Event-ID';
|
|
293
|
-
FetchEventSource.
|
|
294
|
-
FetchEventSource.
|
|
295
|
-
FetchEventSource.
|
|
306
|
+
FetchEventSource.MAX_RETRY_TIME_MULTIPLIER = 12;
|
|
307
|
+
FetchEventSource.RETRY_EXPONENT = 2.6;
|
|
308
|
+
FetchEventSource.EVENT_TIMEOUT_DEFAULT = 120 * 1000;
|
|
309
|
+
FetchEventSource.EVENT_TIMEOUT_CHECK_INTERVAL_DEFAULT = 2 * 1000;
|
|
296
310
|
//# sourceMappingURL=fetch-event-source.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetch-event-source.js","sourceRoot":"","sources":["../../src/fetch-event-source.ts"],"names":[],"mappings":"AAAA,8BAA8B;AAC9B,EAAE;AACF,kEAAkE;AAClE,mEAAmE;AACnE,0CAA0C;AAC1C,EAAE;AACF,gDAAgD;AAChD,EAAE;AACF,sEAAsE;AACtE,oEAAoE;AACpE,2EAA2E;AAC3E,sEAAsE;AACtE,iCAAiC;AAEjC,OAAO,EAAE,KAAK,EAAE,GAAG,EAAc,EAAE,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AAC3E,OAAO,EAAE,sBAAsB,EAAE,MAAM,oCAAoC,CAAC;AAC5E,OAAO,EAAa,WAAW,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"fetch-event-source.js","sourceRoot":"","sources":["../../src/fetch-event-source.ts"],"names":[],"mappings":"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"}
|
package/build/esnext/logger.d.ts
CHANGED
|
@@ -6,3 +6,12 @@ export interface Logger {
|
|
|
6
6
|
warn?(...data: unknown[]): void;
|
|
7
7
|
error?(...data: unknown[]): void;
|
|
8
8
|
}
|
|
9
|
+
export declare enum LogLevel {
|
|
10
|
+
Trace = 4,
|
|
11
|
+
Debug = 3,
|
|
12
|
+
Info = 2,
|
|
13
|
+
Warn = 1,
|
|
14
|
+
Error = 0,
|
|
15
|
+
None = -1
|
|
16
|
+
}
|
|
17
|
+
export declare function levelLogger(level: LogLevel, logger?: Logger): Logger | undefined;
|
package/build/esnext/logger.js
CHANGED
|
@@ -11,5 +11,26 @@
|
|
|
11
11
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
12
|
// See the License for the specific language governing permissions and
|
|
13
13
|
// limitations under the License.
|
|
14
|
-
export
|
|
14
|
+
export var LogLevel;
|
|
15
|
+
(function (LogLevel) {
|
|
16
|
+
LogLevel[LogLevel["Trace"] = 4] = "Trace";
|
|
17
|
+
LogLevel[LogLevel["Debug"] = 3] = "Debug";
|
|
18
|
+
LogLevel[LogLevel["Info"] = 2] = "Info";
|
|
19
|
+
LogLevel[LogLevel["Warn"] = 1] = "Warn";
|
|
20
|
+
LogLevel[LogLevel["Error"] = 0] = "Error";
|
|
21
|
+
LogLevel[LogLevel["None"] = -1] = "None";
|
|
22
|
+
})(LogLevel || (LogLevel = {}));
|
|
23
|
+
export function levelLogger(level, logger) {
|
|
24
|
+
if (!logger) {
|
|
25
|
+
return undefined;
|
|
26
|
+
}
|
|
27
|
+
return {
|
|
28
|
+
log: logger?.log?.bind(logger),
|
|
29
|
+
trace: level >= LogLevel.Trace ? logger?.trace?.bind(logger) : undefined,
|
|
30
|
+
debug: level >= LogLevel.Debug ? logger?.debug?.bind(logger) : undefined,
|
|
31
|
+
info: level >= LogLevel.Info ? logger?.info?.bind(logger) : undefined,
|
|
32
|
+
warn: level >= LogLevel.Warn ? logger?.warn?.bind(logger) : undefined,
|
|
33
|
+
error: level >= LogLevel.Error ? logger?.error?.bind(logger) : undefined,
|
|
34
|
+
};
|
|
35
|
+
}
|
|
15
36
|
//# sourceMappingURL=logger.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/logger.ts"],"names":[],"mappings":"AAAA,8BAA8B;AAC9B,EAAE;AACF,kEAAkE;AAClE,mEAAmE;AACnE,0CAA0C;AAC1C,EAAE;AACF,gDAAgD;AAChD,EAAE;AACF,sEAAsE;AACtE,oEAAoE;AACpE,2EAA2E;AAC3E,sEAAsE;AACtE,iCAAiC"}
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/logger.ts"],"names":[],"mappings":"AAAA,8BAA8B;AAC9B,EAAE;AACF,kEAAkE;AAClE,mEAAmE;AACnE,0CAA0C;AAC1C,EAAE;AACF,gDAAgD;AAChD,EAAE;AACF,sEAAsE;AACtE,oEAAoE;AACpE,2EAA2E;AAC3E,sEAAsE;AACtE,iCAAiC;AAWjC,MAAM,CAAN,IAAY,QAOX;AAPD,WAAY,QAAQ;IAClB,yCAAS,CAAA;IACT,yCAAS,CAAA;IACT,uCAAQ,CAAA;IACR,uCAAQ,CAAA;IACR,yCAAS,CAAA;IACT,wCAAS,CAAA;AACX,CAAC,EAPW,QAAQ,KAAR,QAAQ,QAOnB;AAED,MAAM,UAAU,WAAW,CACzB,KAAe,EACf,MAAe;IAEf,IAAI,CAAC,MAAM,EAAE;QACX,OAAO,SAAS,CAAC;KAClB;IACD,OAAO;QACL,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC;QAC9B,KAAK,EAAE,KAAK,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS;QACxE,KAAK,EAAE,KAAK,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS;QACxE,IAAI,EAAE,KAAK,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS;QACrE,IAAI,EAAE,KAAK,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS;QACrE,KAAK,EAAE,KAAK,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS;KACzE,CAAC;AACJ,CAAC"}
|
|
@@ -7,9 +7,10 @@ export interface FetchEventSource {
|
|
|
7
7
|
}
|
|
8
8
|
export declare class FetchEventSource extends EventTarget implements ExtEventSource {
|
|
9
9
|
private static LAST_EVENT_ID_HEADER;
|
|
10
|
-
private static
|
|
10
|
+
private static MAX_RETRY_TIME_MULTIPLIER;
|
|
11
|
+
private static RETRY_EXPONENT;
|
|
11
12
|
private static EVENT_TIMEOUT_DEFAULT;
|
|
12
|
-
private static
|
|
13
|
+
private static EVENT_TIMEOUT_CHECK_INTERVAL_DEFAULT;
|
|
13
14
|
CONNECTING: number;
|
|
14
15
|
OPEN: number;
|
|
15
16
|
CLOSED: number;
|
|
@@ -30,18 +31,21 @@ export declare class FetchEventSource extends EventTarget implements ExtEventSou
|
|
|
30
31
|
private lastEventId?;
|
|
31
32
|
private logger?;
|
|
32
33
|
private readonly eventTimeout?;
|
|
34
|
+
private readonly eventTimeoutCheckInterval;
|
|
33
35
|
private eventTimeoutCheckHandle?;
|
|
34
36
|
private lastEventReceivedTime;
|
|
35
37
|
private eventParser;
|
|
36
38
|
constructor(url: string, eventSourceInit?: EventSourceInit & {
|
|
37
39
|
adapter?: (url: string, requestInit: RequestInit) => Observable<Request>;
|
|
38
40
|
eventTimeout?: number;
|
|
41
|
+
eventTimeoutCheckInterval?: number;
|
|
39
42
|
logger?: Logger;
|
|
40
43
|
});
|
|
41
44
|
connect(): void;
|
|
42
45
|
private internalConnect;
|
|
43
46
|
close(): void;
|
|
44
47
|
private internalClose;
|
|
48
|
+
private updateLastEventReceived;
|
|
45
49
|
private startEventTimeoutCheck;
|
|
46
50
|
private stopEventTimeoutCheck;
|
|
47
51
|
private checkEventTimeout;
|
|
@@ -50,6 +54,7 @@ export declare class FetchEventSource extends EventTarget implements ExtEventSou
|
|
|
50
54
|
private receivedError;
|
|
51
55
|
private receivedComplete;
|
|
52
56
|
private scheduleReconnect;
|
|
57
|
+
private static calculateRetryTime;
|
|
53
58
|
private clearReconnect;
|
|
54
59
|
private dispatchParsedEvent;
|
|
55
60
|
fireErrorEvent(error: unknown): void;
|
|
@@ -18,6 +18,7 @@ const rxjs_1 = require("rxjs");
|
|
|
18
18
|
const innerFrom_1 = require("rxjs/internal/observable/innerFrom");
|
|
19
19
|
const event_parser_1 = require("./event-parser");
|
|
20
20
|
const fetch_1 = require("./fetch");
|
|
21
|
+
const logger_1 = require("./logger");
|
|
21
22
|
const media_type_1 = require("./media-type");
|
|
22
23
|
const any_1 = require("./util/any");
|
|
23
24
|
class FetchEventSource extends EventTarget {
|
|
@@ -33,14 +34,13 @@ class FetchEventSource extends EventTarget {
|
|
|
33
34
|
this.onopen = null;
|
|
34
35
|
this.internalRetryTime = 100;
|
|
35
36
|
this.retryAttempt = 0;
|
|
36
|
-
this.connectionAttemptTime = 0;
|
|
37
37
|
this.lastEventReceivedTime = 0;
|
|
38
38
|
this.eventParser = new event_parser_1.EventParser();
|
|
39
39
|
//
|
|
40
40
|
// Event Dispatch
|
|
41
41
|
//
|
|
42
42
|
this.dispatchParsedEvent = (eventInfo) => {
|
|
43
|
-
this.
|
|
43
|
+
this.updateLastEventReceived();
|
|
44
44
|
if (eventInfo.retry) {
|
|
45
45
|
const retryTime = Number.parseInt(eventInfo.retry, 10);
|
|
46
46
|
if (Number.isSafeInteger(retryTime)) {
|
|
@@ -48,7 +48,7 @@ class FetchEventSource extends EventTarget {
|
|
|
48
48
|
this.internalRetryTime = retryTime;
|
|
49
49
|
}
|
|
50
50
|
else {
|
|
51
|
-
this.logger?.
|
|
51
|
+
this.logger?.warn?.('ignoring invalid retry timeout event', {
|
|
52
52
|
eventInfo,
|
|
53
53
|
});
|
|
54
54
|
}
|
|
@@ -58,6 +58,7 @@ class FetchEventSource extends EventTarget {
|
|
|
58
58
|
eventInfo.event == null &&
|
|
59
59
|
eventInfo.data == null) {
|
|
60
60
|
// skip empty event
|
|
61
|
+
this.logger?.trace?.('skipping empty event');
|
|
61
62
|
return;
|
|
62
63
|
}
|
|
63
64
|
// Save last-event-id if the new id is valid
|
|
@@ -67,7 +68,7 @@ class FetchEventSource extends EventTarget {
|
|
|
67
68
|
this.lastEventId = eventInfo.id;
|
|
68
69
|
}
|
|
69
70
|
else {
|
|
70
|
-
this.logger?.
|
|
71
|
+
this.logger?.warn?.('event id contains NULL byte, unable to use for last-event-id');
|
|
71
72
|
}
|
|
72
73
|
}
|
|
73
74
|
// Dispatch event
|
|
@@ -84,9 +85,11 @@ class FetchEventSource extends EventTarget {
|
|
|
84
85
|
eventSourceInit?.adapter ??
|
|
85
86
|
((_url, requestInit) => (0, rxjs_1.of)(new Request(_url, requestInit)));
|
|
86
87
|
this.eventTimeout =
|
|
87
|
-
eventSourceInit?.eventTimeout ??
|
|
88
|
-
|
|
89
|
-
|
|
88
|
+
eventSourceInit?.eventTimeout ?? FetchEventSource.EVENT_TIMEOUT_DEFAULT;
|
|
89
|
+
this.eventTimeoutCheckInterval =
|
|
90
|
+
eventSourceInit?.eventTimeoutCheckInterval ??
|
|
91
|
+
FetchEventSource.EVENT_TIMEOUT_CHECK_INTERVAL_DEFAULT;
|
|
92
|
+
this.logger = (0, logger_1.levelLogger)(logger_1.LogLevel.Info, eventSourceInit?.logger);
|
|
90
93
|
}
|
|
91
94
|
get retryTime() {
|
|
92
95
|
return this.internalRetryTime;
|
|
@@ -162,7 +165,7 @@ class FetchEventSource extends EventTarget {
|
|
|
162
165
|
if (this.readyState === this.CLOSED) {
|
|
163
166
|
return;
|
|
164
167
|
}
|
|
165
|
-
this.logger?.debug?.('
|
|
168
|
+
this.logger?.debug?.('closing');
|
|
166
169
|
this.readyState = this.CLOSED;
|
|
167
170
|
this.internalClose();
|
|
168
171
|
}
|
|
@@ -175,14 +178,17 @@ class FetchEventSource extends EventTarget {
|
|
|
175
178
|
//
|
|
176
179
|
// Event Timeout
|
|
177
180
|
//
|
|
181
|
+
updateLastEventReceived(time = Date.now()) {
|
|
182
|
+
this.lastEventReceivedTime = time;
|
|
183
|
+
}
|
|
178
184
|
startEventTimeoutCheck(lastEventReceivedTime) {
|
|
179
185
|
this.stopEventTimeoutCheck();
|
|
180
186
|
if (!this.eventTimeout) {
|
|
181
187
|
return;
|
|
182
188
|
}
|
|
183
|
-
this.lastEventReceivedTime
|
|
189
|
+
this.updateLastEventReceived(lastEventReceivedTime);
|
|
184
190
|
this.logger?.trace?.('starting event timeout checks');
|
|
185
|
-
this.eventTimeoutCheckHandle = window.setInterval(() => this.checkEventTimeout(),
|
|
191
|
+
this.eventTimeoutCheckHandle = window.setInterval(() => this.checkEventTimeout(), this.eventTimeoutCheckInterval);
|
|
186
192
|
}
|
|
187
193
|
stopEventTimeoutCheck() {
|
|
188
194
|
if (this.eventTimeoutCheckHandle) {
|
|
@@ -219,7 +225,7 @@ class FetchEventSource extends EventTarget {
|
|
|
219
225
|
this.scheduleReconnect();
|
|
220
226
|
return;
|
|
221
227
|
}
|
|
222
|
-
this.logger?.
|
|
228
|
+
this.logger?.info?.('opened');
|
|
223
229
|
this.connectionOrigin = response.url;
|
|
224
230
|
this.retryAttempt = 0;
|
|
225
231
|
this.readyState = this.OPEN;
|
|
@@ -264,21 +270,28 @@ class FetchEventSource extends EventTarget {
|
|
|
264
270
|
//
|
|
265
271
|
scheduleReconnect() {
|
|
266
272
|
this.internalClose();
|
|
273
|
+
const lastConnectionTime = this.connectionAttemptTime
|
|
274
|
+
? Date.now() - this.connectionAttemptTime
|
|
275
|
+
: 0;
|
|
276
|
+
const retryDelay = FetchEventSource.calculateRetryTime(this.retryAttempt, this.retryTime, lastConnectionTime);
|
|
277
|
+
this.retryAttempt++;
|
|
278
|
+
this.readyState = this.CONNECTING;
|
|
279
|
+
this.logger?.debug?.('scheduling reconnect', { retryDelay });
|
|
280
|
+
this.reconnectTimeoutHandle = window.setTimeout(() => this.internalConnect(), retryDelay);
|
|
281
|
+
}
|
|
282
|
+
static calculateRetryTime(retryAttempt, retryTime, lastConnectTime) {
|
|
283
|
+
const retryMultiplier = Math.min(retryAttempt, this.MAX_RETRY_TIME_MULTIPLIER);
|
|
267
284
|
// calculate total delay
|
|
268
|
-
|
|
269
|
-
let retryDelay = Math.min(this.retryTime + backOffDelay, this.retryTime * FetchEventSource.MAX_RETRY_TIME_MULTIPLE);
|
|
285
|
+
let retryDelay = Math.pow(retryMultiplier, this.RETRY_EXPONENT) * retryTime;
|
|
270
286
|
// Adjust delay by amount of time last connect
|
|
271
287
|
// cycle took, except on the first attempt
|
|
272
|
-
if (
|
|
273
|
-
|
|
288
|
+
if (retryAttempt > 0) {
|
|
289
|
+
retryDelay -= lastConnectTime;
|
|
274
290
|
// Ensure delay is at least as large as
|
|
275
291
|
// minimum retry time interval
|
|
276
|
-
retryDelay = Math.max(retryDelay
|
|
292
|
+
retryDelay = Math.max(retryDelay, retryTime);
|
|
277
293
|
}
|
|
278
|
-
|
|
279
|
-
this.readyState = this.CONNECTING;
|
|
280
|
-
this.logger?.debug?.('scheduling reconnect', { retryDelay });
|
|
281
|
-
this.reconnectTimeoutHandle = window.setTimeout(() => this.internalConnect(), retryDelay);
|
|
294
|
+
return retryDelay;
|
|
282
295
|
}
|
|
283
296
|
clearReconnect() {
|
|
284
297
|
if (this.reconnectTimeoutHandle) {
|
|
@@ -294,7 +307,8 @@ class FetchEventSource extends EventTarget {
|
|
|
294
307
|
}
|
|
295
308
|
exports.FetchEventSource = FetchEventSource;
|
|
296
309
|
FetchEventSource.LAST_EVENT_ID_HEADER = 'Last-Event-ID';
|
|
297
|
-
FetchEventSource.
|
|
298
|
-
FetchEventSource.
|
|
299
|
-
FetchEventSource.
|
|
310
|
+
FetchEventSource.MAX_RETRY_TIME_MULTIPLIER = 12;
|
|
311
|
+
FetchEventSource.RETRY_EXPONENT = 2.6;
|
|
312
|
+
FetchEventSource.EVENT_TIMEOUT_DEFAULT = 120 * 1000;
|
|
313
|
+
FetchEventSource.EVENT_TIMEOUT_CHECK_INTERVAL_DEFAULT = 2 * 1000;
|
|
300
314
|
//# sourceMappingURL=fetch-event-source.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetch-event-source.js","sourceRoot":"","sources":["../../src/fetch-event-source.ts"],"names":[],"mappings":";AAAA,8BAA8B;AAC9B,EAAE;AACF,kEAAkE;AAClE,mEAAmE;AACnE,0CAA0C;AAC1C,EAAE;AACF,gDAAgD;AAChD,EAAE;AACF,sEAAsE;AACtE,oEAAoE;AACpE,2EAA2E;AAC3E,sEAAsE;AACtE,iCAAiC;;;AAEjC,+BAA2E;AAC3E,kEAA4E;AAC5E,iDAAwD;AACxD,mCAAmC;
|
|
1
|
+
{"version":3,"file":"fetch-event-source.js","sourceRoot":"","sources":["../../src/fetch-event-source.ts"],"names":[],"mappings":"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"}
|
package/build/main/logger.d.ts
CHANGED
|
@@ -6,3 +6,12 @@ export interface Logger {
|
|
|
6
6
|
warn?(...data: unknown[]): void;
|
|
7
7
|
error?(...data: unknown[]): void;
|
|
8
8
|
}
|
|
9
|
+
export declare enum LogLevel {
|
|
10
|
+
Trace = 4,
|
|
11
|
+
Debug = 3,
|
|
12
|
+
Info = 2,
|
|
13
|
+
Warn = 1,
|
|
14
|
+
Error = 0,
|
|
15
|
+
None = -1
|
|
16
|
+
}
|
|
17
|
+
export declare function levelLogger(level: LogLevel, logger?: Logger): Logger | undefined;
|
package/build/main/logger.js
CHANGED
|
@@ -13,4 +13,28 @@
|
|
|
13
13
|
// See the License for the specific language governing permissions and
|
|
14
14
|
// limitations under the License.
|
|
15
15
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
16
|
+
exports.levelLogger = exports.LogLevel = void 0;
|
|
17
|
+
var LogLevel;
|
|
18
|
+
(function (LogLevel) {
|
|
19
|
+
LogLevel[LogLevel["Trace"] = 4] = "Trace";
|
|
20
|
+
LogLevel[LogLevel["Debug"] = 3] = "Debug";
|
|
21
|
+
LogLevel[LogLevel["Info"] = 2] = "Info";
|
|
22
|
+
LogLevel[LogLevel["Warn"] = 1] = "Warn";
|
|
23
|
+
LogLevel[LogLevel["Error"] = 0] = "Error";
|
|
24
|
+
LogLevel[LogLevel["None"] = -1] = "None";
|
|
25
|
+
})(LogLevel = exports.LogLevel || (exports.LogLevel = {}));
|
|
26
|
+
function levelLogger(level, logger) {
|
|
27
|
+
if (!logger) {
|
|
28
|
+
return undefined;
|
|
29
|
+
}
|
|
30
|
+
return {
|
|
31
|
+
log: logger?.log?.bind(logger),
|
|
32
|
+
trace: level >= LogLevel.Trace ? logger?.trace?.bind(logger) : undefined,
|
|
33
|
+
debug: level >= LogLevel.Debug ? logger?.debug?.bind(logger) : undefined,
|
|
34
|
+
info: level >= LogLevel.Info ? logger?.info?.bind(logger) : undefined,
|
|
35
|
+
warn: level >= LogLevel.Warn ? logger?.warn?.bind(logger) : undefined,
|
|
36
|
+
error: level >= LogLevel.Error ? logger?.error?.bind(logger) : undefined,
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
exports.levelLogger = levelLogger;
|
|
16
40
|
//# sourceMappingURL=logger.js.map
|
package/build/main/logger.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/logger.ts"],"names":[],"mappings":";AAAA,8BAA8B;AAC9B,EAAE;AACF,kEAAkE;AAClE,mEAAmE;AACnE,0CAA0C;AAC1C,EAAE;AACF,gDAAgD;AAChD,EAAE;AACF,sEAAsE;AACtE,oEAAoE;AACpE,2EAA2E;AAC3E,sEAAsE;AACtE,iCAAiC"}
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/logger.ts"],"names":[],"mappings":";AAAA,8BAA8B;AAC9B,EAAE;AACF,kEAAkE;AAClE,mEAAmE;AACnE,0CAA0C;AAC1C,EAAE;AACF,gDAAgD;AAChD,EAAE;AACF,sEAAsE;AACtE,oEAAoE;AACpE,2EAA2E;AAC3E,sEAAsE;AACtE,iCAAiC;;;AAWjC,IAAY,QAOX;AAPD,WAAY,QAAQ;IAClB,yCAAS,CAAA;IACT,yCAAS,CAAA;IACT,uCAAQ,CAAA;IACR,uCAAQ,CAAA;IACR,yCAAS,CAAA;IACT,wCAAS,CAAA;AACX,CAAC,EAPW,QAAQ,GAAR,gBAAQ,KAAR,gBAAQ,QAOnB;AAED,SAAgB,WAAW,CACzB,KAAe,EACf,MAAe;IAEf,IAAI,CAAC,MAAM,EAAE;QACX,OAAO,SAAS,CAAC;KAClB;IACD,OAAO;QACL,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC;QAC9B,KAAK,EAAE,KAAK,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS;QACxE,KAAK,EAAE,KAAK,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS;QACxE,IAAI,EAAE,KAAK,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS;QACrE,IAAI,EAAE,KAAK,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS;QACrE,KAAK,EAAE,KAAK,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS;KACzE,CAAC;AACJ,CAAC;AAfD,kCAeC"}
|
package/package.json
CHANGED
|
@@ -16,7 +16,7 @@ import { EMPTY, map, Observable, of, Subscription, switchMap } from 'rxjs';
|
|
|
16
16
|
import { fromReadableStreamLike } from 'rxjs/internal/observable/innerFrom';
|
|
17
17
|
import { EventInfo, EventParser } from './event-parser';
|
|
18
18
|
import { validate } from './fetch';
|
|
19
|
-
import { Logger } from './logger';
|
|
19
|
+
import { levelLogger, Logger, LogLevel } from './logger';
|
|
20
20
|
import { MediaType } from './media-type';
|
|
21
21
|
import { ExtEventSource } from './request-factory';
|
|
22
22
|
import { unknownGet, unknownSet } from './util/any';
|
|
@@ -28,6 +28,7 @@ export interface FetchEventSource {
|
|
|
28
28
|
listener: (this: EventSource, ev: EventSourceEventMap[K]) => any,
|
|
29
29
|
options?: boolean | AddEventListenerOptions,
|
|
30
30
|
): void;
|
|
31
|
+
|
|
31
32
|
removeEventListener<K extends keyof EventSourceEventMap>(
|
|
32
33
|
type: K,
|
|
33
34
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
@@ -38,9 +39,10 @@ export interface FetchEventSource {
|
|
|
38
39
|
|
|
39
40
|
export class FetchEventSource extends EventTarget implements ExtEventSource {
|
|
40
41
|
private static LAST_EVENT_ID_HEADER = 'Last-Event-ID';
|
|
41
|
-
private static
|
|
42
|
-
private static
|
|
43
|
-
private static
|
|
42
|
+
private static MAX_RETRY_TIME_MULTIPLIER = 12;
|
|
43
|
+
private static RETRY_EXPONENT = 2.6;
|
|
44
|
+
private static EVENT_TIMEOUT_DEFAULT = 120 * 1000;
|
|
45
|
+
private static EVENT_TIMEOUT_CHECK_INTERVAL_DEFAULT = 2 * 1000;
|
|
44
46
|
|
|
45
47
|
CONNECTING = 0;
|
|
46
48
|
OPEN = 1;
|
|
@@ -64,12 +66,13 @@ export class FetchEventSource extends EventTarget implements ExtEventSource {
|
|
|
64
66
|
private connectionSubscription?: Subscription;
|
|
65
67
|
private internalRetryTime = 100;
|
|
66
68
|
private retryAttempt = 0;
|
|
67
|
-
private connectionAttemptTime
|
|
69
|
+
private connectionAttemptTime: number | undefined;
|
|
68
70
|
private connectionOrigin?: string;
|
|
69
71
|
private reconnectTimeoutHandle?: number;
|
|
70
72
|
private lastEventId?: string;
|
|
71
73
|
private logger?: Logger;
|
|
72
74
|
private readonly eventTimeout?: number;
|
|
75
|
+
private readonly eventTimeoutCheckInterval: number;
|
|
73
76
|
private eventTimeoutCheckHandle?: number;
|
|
74
77
|
private lastEventReceivedTime = 0;
|
|
75
78
|
private eventParser = new EventParser();
|
|
@@ -79,6 +82,7 @@ export class FetchEventSource extends EventTarget implements ExtEventSource {
|
|
|
79
82
|
eventSourceInit?: EventSourceInit & {
|
|
80
83
|
adapter?: (url: string, requestInit: RequestInit) => Observable<Request>;
|
|
81
84
|
eventTimeout?: number;
|
|
85
|
+
eventTimeoutCheckInterval?: number;
|
|
82
86
|
logger?: Logger;
|
|
83
87
|
},
|
|
84
88
|
) {
|
|
@@ -88,9 +92,11 @@ export class FetchEventSource extends EventTarget implements ExtEventSource {
|
|
|
88
92
|
eventSourceInit?.adapter ??
|
|
89
93
|
((_url, requestInit) => of(new Request(_url, requestInit)));
|
|
90
94
|
this.eventTimeout =
|
|
91
|
-
eventSourceInit?.eventTimeout ??
|
|
92
|
-
|
|
93
|
-
|
|
95
|
+
eventSourceInit?.eventTimeout ?? FetchEventSource.EVENT_TIMEOUT_DEFAULT;
|
|
96
|
+
this.eventTimeoutCheckInterval =
|
|
97
|
+
eventSourceInit?.eventTimeoutCheckInterval ??
|
|
98
|
+
FetchEventSource.EVENT_TIMEOUT_CHECK_INTERVAL_DEFAULT;
|
|
99
|
+
this.logger = levelLogger(LogLevel.Info, eventSourceInit?.logger);
|
|
94
100
|
}
|
|
95
101
|
|
|
96
102
|
//
|
|
@@ -191,7 +197,7 @@ export class FetchEventSource extends EventTarget implements ExtEventSource {
|
|
|
191
197
|
return;
|
|
192
198
|
}
|
|
193
199
|
|
|
194
|
-
this.logger?.debug?.('
|
|
200
|
+
this.logger?.debug?.('closing');
|
|
195
201
|
|
|
196
202
|
this.readyState = this.CLOSED;
|
|
197
203
|
|
|
@@ -211,6 +217,10 @@ export class FetchEventSource extends EventTarget implements ExtEventSource {
|
|
|
211
217
|
// Event Timeout
|
|
212
218
|
//
|
|
213
219
|
|
|
220
|
+
private updateLastEventReceived(time: number = Date.now()) {
|
|
221
|
+
this.lastEventReceivedTime = time;
|
|
222
|
+
}
|
|
223
|
+
|
|
214
224
|
private startEventTimeoutCheck(lastEventReceivedTime: number) {
|
|
215
225
|
this.stopEventTimeoutCheck();
|
|
216
226
|
|
|
@@ -218,13 +228,13 @@ export class FetchEventSource extends EventTarget implements ExtEventSource {
|
|
|
218
228
|
return;
|
|
219
229
|
}
|
|
220
230
|
|
|
221
|
-
this.lastEventReceivedTime
|
|
231
|
+
this.updateLastEventReceived(lastEventReceivedTime);
|
|
222
232
|
|
|
223
233
|
this.logger?.trace?.('starting event timeout checks');
|
|
224
234
|
|
|
225
235
|
this.eventTimeoutCheckHandle = window.setInterval(
|
|
226
236
|
() => this.checkEventTimeout(),
|
|
227
|
-
|
|
237
|
+
this.eventTimeoutCheckInterval,
|
|
228
238
|
);
|
|
229
239
|
}
|
|
230
240
|
|
|
@@ -274,7 +284,7 @@ export class FetchEventSource extends EventTarget implements ExtEventSource {
|
|
|
274
284
|
return;
|
|
275
285
|
}
|
|
276
286
|
|
|
277
|
-
this.logger?.
|
|
287
|
+
this.logger?.info?.('opened');
|
|
278
288
|
|
|
279
289
|
this.connectionOrigin = response.url;
|
|
280
290
|
this.retryAttempt = 0;
|
|
@@ -336,21 +346,15 @@ export class FetchEventSource extends EventTarget implements ExtEventSource {
|
|
|
336
346
|
private scheduleReconnect() {
|
|
337
347
|
this.internalClose();
|
|
338
348
|
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
this.retryTime + backOffDelay,
|
|
343
|
-
this.retryTime * FetchEventSource.MAX_RETRY_TIME_MULTIPLE,
|
|
344
|
-
);
|
|
349
|
+
const lastConnectionTime = this.connectionAttemptTime
|
|
350
|
+
? Date.now() - this.connectionAttemptTime
|
|
351
|
+
: 0;
|
|
345
352
|
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
// minimum retry time interval
|
|
352
|
-
retryDelay = Math.max(retryDelay - connectionTime, this.retryTime);
|
|
353
|
-
}
|
|
353
|
+
const retryDelay = FetchEventSource.calculateRetryTime(
|
|
354
|
+
this.retryAttempt,
|
|
355
|
+
this.retryTime,
|
|
356
|
+
lastConnectionTime,
|
|
357
|
+
);
|
|
354
358
|
|
|
355
359
|
this.retryAttempt++;
|
|
356
360
|
this.readyState = this.CONNECTING;
|
|
@@ -363,6 +367,32 @@ export class FetchEventSource extends EventTarget implements ExtEventSource {
|
|
|
363
367
|
);
|
|
364
368
|
}
|
|
365
369
|
|
|
370
|
+
private static calculateRetryTime(
|
|
371
|
+
retryAttempt: number,
|
|
372
|
+
retryTime: number,
|
|
373
|
+
lastConnectTime: number,
|
|
374
|
+
): number {
|
|
375
|
+
const retryMultiplier = Math.min(
|
|
376
|
+
retryAttempt,
|
|
377
|
+
this.MAX_RETRY_TIME_MULTIPLIER,
|
|
378
|
+
);
|
|
379
|
+
|
|
380
|
+
// calculate total delay
|
|
381
|
+
let retryDelay = Math.pow(retryMultiplier, this.RETRY_EXPONENT) * retryTime;
|
|
382
|
+
|
|
383
|
+
// Adjust delay by amount of time last connect
|
|
384
|
+
// cycle took, except on the first attempt
|
|
385
|
+
if (retryAttempt > 0) {
|
|
386
|
+
retryDelay -= lastConnectTime;
|
|
387
|
+
|
|
388
|
+
// Ensure delay is at least as large as
|
|
389
|
+
// minimum retry time interval
|
|
390
|
+
retryDelay = Math.max(retryDelay, retryTime);
|
|
391
|
+
}
|
|
392
|
+
|
|
393
|
+
return retryDelay;
|
|
394
|
+
}
|
|
395
|
+
|
|
366
396
|
private clearReconnect() {
|
|
367
397
|
if (this.reconnectTimeoutHandle) {
|
|
368
398
|
clearTimeout(this.reconnectTimeoutHandle);
|
|
@@ -375,7 +405,7 @@ export class FetchEventSource extends EventTarget implements ExtEventSource {
|
|
|
375
405
|
//
|
|
376
406
|
|
|
377
407
|
private dispatchParsedEvent = (eventInfo: EventInfo) => {
|
|
378
|
-
this.
|
|
408
|
+
this.updateLastEventReceived();
|
|
379
409
|
|
|
380
410
|
if (eventInfo.retry) {
|
|
381
411
|
const retryTime = Number.parseInt(eventInfo.retry, 10);
|
|
@@ -385,7 +415,7 @@ export class FetchEventSource extends EventTarget implements ExtEventSource {
|
|
|
385
415
|
|
|
386
416
|
this.internalRetryTime = retryTime;
|
|
387
417
|
} else {
|
|
388
|
-
this.logger?.
|
|
418
|
+
this.logger?.warn?.('ignoring invalid retry timeout event', {
|
|
389
419
|
eventInfo,
|
|
390
420
|
});
|
|
391
421
|
}
|
|
@@ -398,6 +428,7 @@ export class FetchEventSource extends EventTarget implements ExtEventSource {
|
|
|
398
428
|
eventInfo.data == null
|
|
399
429
|
) {
|
|
400
430
|
// skip empty event
|
|
431
|
+
this.logger?.trace?.('skipping empty event');
|
|
401
432
|
return;
|
|
402
433
|
}
|
|
403
434
|
|
|
@@ -407,8 +438,8 @@ export class FetchEventSource extends EventTarget implements ExtEventSource {
|
|
|
407
438
|
if (eventInfo.id.indexOf('\0') == -1) {
|
|
408
439
|
this.lastEventId = eventInfo.id;
|
|
409
440
|
} else {
|
|
410
|
-
this.logger?.
|
|
411
|
-
'event id contains
|
|
441
|
+
this.logger?.warn?.(
|
|
442
|
+
'event id contains NULL byte, unable to use for last-event-id',
|
|
412
443
|
);
|
|
413
444
|
}
|
|
414
445
|
}
|
package/src/logger.ts
CHANGED
|
@@ -20,3 +20,29 @@ export interface Logger {
|
|
|
20
20
|
warn?(...data: unknown[]): void;
|
|
21
21
|
error?(...data: unknown[]): void;
|
|
22
22
|
}
|
|
23
|
+
|
|
24
|
+
export enum LogLevel {
|
|
25
|
+
Trace = 4,
|
|
26
|
+
Debug = 3,
|
|
27
|
+
Info = 2,
|
|
28
|
+
Warn = 1,
|
|
29
|
+
Error = 0,
|
|
30
|
+
None = -1,
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
export function levelLogger(
|
|
34
|
+
level: LogLevel,
|
|
35
|
+
logger?: Logger,
|
|
36
|
+
): Logger | undefined {
|
|
37
|
+
if (!logger) {
|
|
38
|
+
return undefined;
|
|
39
|
+
}
|
|
40
|
+
return {
|
|
41
|
+
log: logger?.log?.bind(logger),
|
|
42
|
+
trace: level >= LogLevel.Trace ? logger?.trace?.bind(logger) : undefined,
|
|
43
|
+
debug: level >= LogLevel.Debug ? logger?.debug?.bind(logger) : undefined,
|
|
44
|
+
info: level >= LogLevel.Info ? logger?.info?.bind(logger) : undefined,
|
|
45
|
+
warn: level >= LogLevel.Warn ? logger?.warn?.bind(logger) : undefined,
|
|
46
|
+
error: level >= LogLevel.Error ? logger?.error?.bind(logger) : undefined,
|
|
47
|
+
};
|
|
48
|
+
}
|