lemon-model 1.5.1 → 5.0.0
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/README.md +23 -0
- package/dist/esm/fields/index.js +108 -0
- package/dist/esm/fields/index.js.map +1 -0
- package/dist/esm/index.js +2 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/types/core-storage.js +87 -17
- package/dist/esm/types/core-storage.js.map +1 -1
- package/dist/fields/index.d.ts +55 -0
- package/dist/fields/index.js +114 -0
- package/dist/fields/index.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/types/core-storage.d.ts +12 -13
- package/dist/types/core-storage.js +90 -19
- package/dist/types/core-storage.js.map +1 -1
- package/package.json +1 -1
- package/dist/esm/sync/network.js +0 -273
- package/dist/esm/sync/network.js.map +0 -1
- package/dist/socket/client/index.d.ts +0 -9
- package/dist/socket/client/index.js +0 -26
- package/dist/socket/client/index.js.map +0 -1
- package/dist/socket/client/keep-alive-controller.d.ts +0 -35
- package/dist/socket/client/keep-alive-controller.js +0 -101
- package/dist/socket/client/keep-alive-controller.js.map +0 -1
- package/dist/socket/client/message-router.d.ts +0 -15
- package/dist/socket/client/message-router.js +0 -52
- package/dist/socket/client/message-router.js.map +0 -1
- package/dist/socket/client/pending-request-store.d.ts +0 -24
- package/dist/socket/client/pending-request-store.js +0 -78
- package/dist/socket/client/pending-request-store.js.map +0 -1
- package/dist/socket/client/reconnect-controller.d.ts +0 -56
- package/dist/socket/client/reconnect-controller.js +0 -177
- package/dist/socket/client/reconnect-controller.js.map +0 -1
- package/dist/socket/client/rotation-controller.d.ts +0 -32
- package/dist/socket/client/rotation-controller.js +0 -76
- package/dist/socket/client/rotation-controller.js.map +0 -1
- package/dist/socket/client/shared-timer-scheduler.d.ts +0 -17
- package/dist/socket/client/shared-timer-scheduler.js +0 -77
- package/dist/socket/client/shared-timer-scheduler.js.map +0 -1
- package/dist/socket/client/socket-client.d.ts +0 -2
- package/dist/socket/client/socket-client.js +0 -219
- package/dist/socket/client/socket-client.js.map +0 -1
- package/dist/socket/client/types.d.ts +0 -101
- package/dist/socket/client/types.js +0 -3
- package/dist/socket/client/types.js.map +0 -1
- package/dist/socket/client/websocket-client-transport.d.ts +0 -23
- package/dist/socket/client/websocket-client-transport.js +0 -152
- package/dist/socket/client/websocket-client-transport.js.map +0 -1
- package/dist/sync/network.d.ts +0 -38
- package/dist/sync/network.js +0 -278
- package/dist/sync/network.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"core-storage.js","sourceRoot":"","sources":["../../src/types/core-storage.ts"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"core-storage.js","sourceRoot":"","sources":["../../src/types/core-storage.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA;;;;;;;;;;;;GAYG;AACH,8CAA8C;AAC9C,sCAA4C;AAwD5C;;;;;;GAMG;AACH,MAAa,SAAS;CAuFrB;AAhFG;IADC,IAAA,cAAK,EAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;;oCACE;AAO1B;IADC,IAAA,cAAK,GAAE;;qCACI;AAKZ;IADC,IAAA,cAAK,GAAE;;uCACS;AAKjB;IADC,IAAA,cAAK,GAAE;;yCACQ;AAKhB;IADC,IAAA,cAAK,GAAE;;sCACK;AAKb;IADC,IAAA,cAAK,GAAE;;sCACK;AAKb;IADC,IAAA,cAAK,GAAE;;sCACK;AAKb;IADC,IAAA,cAAK,GAAE;;uCACM;AAKd;IADC,IAAA,cAAK,GAAE;;uCACM;AAKd;IADC,IAAA,cAAK,GAAE;;uCACY;AAKpB;IADC,IAAA,cAAK,GAAE;;4CACW;AAKnB;IADC,IAAA,cAAK,GAAE;;4CACW;AAKnB;IADC,IAAA,cAAK,GAAE;;4CACW;AAKnB;IADC,IAAA,cAAK,GAAE;;wCACO;AAOf;IADC,IAAA,cAAK,EAAC,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;;qCAChB;AAKZ;IADC,IAAA,cAAK,EAAC,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;;sCACf;AAtFjB,8BAuFC;AAED,+FAA+F;AAClF,QAAA,WAAW,GAAa,IAAA,iBAAQ,EAAC,SAAS,EAAE,EAAE,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC"}
|
package/package.json
CHANGED
package/dist/esm/sync/network.js
DELETED
|
@@ -1,273 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* `sync/network.ts`
|
|
3
|
-
* - L1 network decorators: reconnect-on-death wrapper and raw wire translator.
|
|
4
|
-
* - additive to `src/socket`; free to compose with `createFilteredNetwork` (translated -> filtered -> L3).
|
|
5
|
-
*
|
|
6
|
-
* @copyright (C) 2026 LemonCloud Co Ltd. - All Rights Reserved.
|
|
7
|
-
*/
|
|
8
|
-
import { WEBSOCKET_NETWORK_SCOPE, } from '../socket/index.js';
|
|
9
|
-
/**
|
|
10
|
-
* default watchdog cadence for readyState-based death detection.
|
|
11
|
-
* needed because an in-memory `Network.close()` notifies no one (see `socket/socket.ts`); only a
|
|
12
|
-
* real `OwnedWebSocketNetwork`/`BrowserWebSocketNetwork` close notifies via `onError` (see below),
|
|
13
|
-
* so the watchdog is a fallback and can stay slow — 1s keeps idle browser cost negligible.
|
|
14
|
-
*/
|
|
15
|
-
const DEFAULT_WATCHDOG_MS = 1000;
|
|
16
|
-
/** create the L1 reconnect decorator: swaps the internal network on death, keeping instance identity for L3 */
|
|
17
|
-
export const createReconnectingNetwork = (factory, options) => new ReconnectingNetwork(factory, options);
|
|
18
|
-
/** `NetworkSupportable` decorator that transparently swaps its internal network on death */
|
|
19
|
-
class ReconnectingNetwork {
|
|
20
|
-
constructor(factory, options) {
|
|
21
|
-
var _a, _b, _c, _d;
|
|
22
|
-
this.factory = factory;
|
|
23
|
-
this._generation = 0;
|
|
24
|
-
/** connected: 정상 감시 | connecting: 후보 open 대기 | backoff: 재시도 대기 | closed: 영구 종료 */
|
|
25
|
-
this.phase = 'connected';
|
|
26
|
-
this.retryCount = 0;
|
|
27
|
-
this.lastMessageAt = Date.now();
|
|
28
|
-
this.messageHandlers = new Set();
|
|
29
|
-
this.errorHandlers = new Set();
|
|
30
|
-
this.reconnectHandlers = new Set();
|
|
31
|
-
this.baseMs = (_a = options === null || options === void 0 ? void 0 : options.baseMs) !== null && _a !== void 0 ? _a : 1000;
|
|
32
|
-
this.factor = (_b = options === null || options === void 0 ? void 0 : options.factor) !== null && _b !== void 0 ? _b : 2;
|
|
33
|
-
this.maxMs = (_c = options === null || options === void 0 ? void 0 : options.maxMs) !== null && _c !== void 0 ? _c : 30000;
|
|
34
|
-
this.maxRetries = options === null || options === void 0 ? void 0 : options.maxRetries;
|
|
35
|
-
this.idleTimeoutMs = options === null || options === void 0 ? void 0 : options.idleTimeoutMs;
|
|
36
|
-
this.delayMs = this.baseMs;
|
|
37
|
-
this.current = factory();
|
|
38
|
-
this.attach(this.current);
|
|
39
|
-
this.watchdogTimer = setInterval(() => this.watch(), (_d = options === null || options === void 0 ? void 0 : options.watchdogMs) !== null && _d !== void 0 ? _d : DEFAULT_WATCHDOG_MS);
|
|
40
|
-
}
|
|
41
|
-
/** internal network generation (0 initially, +1 per reconnect) */
|
|
42
|
-
get generation() {
|
|
43
|
-
return this._generation;
|
|
44
|
-
}
|
|
45
|
-
get readyState() {
|
|
46
|
-
return this.phase === 'closed' ? 'closed' : this.current.readyState;
|
|
47
|
-
}
|
|
48
|
-
ready() {
|
|
49
|
-
var _a, _b, _c;
|
|
50
|
-
return (_c = (_b = (_a = this.current).ready) === null || _b === void 0 ? void 0 : _b.call(_a)) !== null && _c !== void 0 ? _c : Promise.resolve();
|
|
51
|
-
}
|
|
52
|
-
onOpen(handler) {
|
|
53
|
-
var _a, _b, _c;
|
|
54
|
-
return (_c = (_b = (_a = this.current).onOpen) === null || _b === void 0 ? void 0 : _b.call(_a, handler)) !== null && _c !== void 0 ? _c : (() => undefined);
|
|
55
|
-
}
|
|
56
|
-
/** while disconnected (mid-reconnect or permanently closed) this throws synchronously; no send queuing */
|
|
57
|
-
send(data) {
|
|
58
|
-
if (this.phase === 'closed')
|
|
59
|
-
throw new Error(`@network is closed - reconnectingNetwork.send`);
|
|
60
|
-
if (this.current.readyState !== 'open') {
|
|
61
|
-
throw new Error(`@network is not connected - reconnectingNetwork.send`);
|
|
62
|
-
}
|
|
63
|
-
this.current.send(data);
|
|
64
|
-
}
|
|
65
|
-
onMessage(handler) {
|
|
66
|
-
this.messageHandlers.add(handler);
|
|
67
|
-
return () => this.messageHandlers.delete(handler);
|
|
68
|
-
}
|
|
69
|
-
onError(handler) {
|
|
70
|
-
this.errorHandlers.add(handler);
|
|
71
|
-
return () => this.errorHandlers.delete(handler);
|
|
72
|
-
}
|
|
73
|
-
onReconnect(handler) {
|
|
74
|
-
this.reconnectHandlers.add(handler);
|
|
75
|
-
return () => this.reconnectHandlers.delete(handler);
|
|
76
|
-
}
|
|
77
|
-
/** options are remembered and re-applied to every reconnected generation */
|
|
78
|
-
configure(options) {
|
|
79
|
-
var _a, _b;
|
|
80
|
-
this.configured = Object.assign(Object.assign({}, this.configured), options);
|
|
81
|
-
(_b = (_a = this.current).configure) === null || _b === void 0 ? void 0 : _b.call(_a, this.configured);
|
|
82
|
-
}
|
|
83
|
-
/** stop reconnecting and close the internal network for good */
|
|
84
|
-
close(code, reason) {
|
|
85
|
-
if (this.phase === 'closed')
|
|
86
|
-
return;
|
|
87
|
-
this.phase = 'closed';
|
|
88
|
-
clearInterval(this.watchdogTimer);
|
|
89
|
-
if (this.reconnectTimer)
|
|
90
|
-
clearTimeout(this.reconnectTimer);
|
|
91
|
-
this.detach();
|
|
92
|
-
this.current.close(code, reason);
|
|
93
|
-
this.messageHandlers.clear();
|
|
94
|
-
this.errorHandlers.clear();
|
|
95
|
-
this.reconnectHandlers.clear();
|
|
96
|
-
}
|
|
97
|
-
attach(network) {
|
|
98
|
-
this.unsubscribeMessage = network.onMessage(raw => {
|
|
99
|
-
this.lastMessageAt = Date.now();
|
|
100
|
-
for (const handler of [...this.messageHandlers])
|
|
101
|
-
handler(raw);
|
|
102
|
-
});
|
|
103
|
-
this.unsubscribeError = network.onError((error, context) => {
|
|
104
|
-
for (const handler of [...this.errorHandlers])
|
|
105
|
-
handler(error, Object.assign(Object.assign({}, context), { network: this }));
|
|
106
|
-
//! `OwnedWebSocketNetwork`/`BrowserWebSocketNetwork` notify a close via onError with this scope
|
|
107
|
-
//! (see `WEBSOCKET_NETWORK_SCOPE` in `socket/websocket.ts`). other onError calls (e.g. delivery
|
|
108
|
-
//! errors) are forwarded above but do not by themselves mean the network died.
|
|
109
|
-
if (context.scope === WEBSOCKET_NETWORK_SCOPE.ownedClose ||
|
|
110
|
-
context.scope === WEBSOCKET_NETWORK_SCOPE.browserClose) {
|
|
111
|
-
this.onInnerDeath();
|
|
112
|
-
}
|
|
113
|
-
});
|
|
114
|
-
}
|
|
115
|
-
detach() {
|
|
116
|
-
var _a, _b, _c;
|
|
117
|
-
(_a = this.unsubscribeMessage) === null || _a === void 0 ? void 0 : _a.call(this);
|
|
118
|
-
(_b = this.unsubscribeError) === null || _b === void 0 ? void 0 : _b.call(this);
|
|
119
|
-
(_c = this.unsubscribeCandidateOpen) === null || _c === void 0 ? void 0 : _c.call(this);
|
|
120
|
-
}
|
|
121
|
-
onInnerDeath() {
|
|
122
|
-
if (this.phase === 'connected')
|
|
123
|
-
this.beginBackoff();
|
|
124
|
-
else if (this.phase === 'connecting')
|
|
125
|
-
this.failAttempt(new Error(`@candidate network died before open - reconnectingNetwork`), 'reconnectingNetwork.connect');
|
|
126
|
-
}
|
|
127
|
-
/** watchdog fallback for networks that close without notifying (e.g. in-memory `Network.close()`) */
|
|
128
|
-
watch() {
|
|
129
|
-
const state = this.current.readyState;
|
|
130
|
-
if (this.phase === 'connected') {
|
|
131
|
-
if (state === 'closing' || state === 'closed')
|
|
132
|
-
return this.beginBackoff();
|
|
133
|
-
if (this.idleTimeoutMs && Date.now() - this.lastMessageAt > this.idleTimeoutMs)
|
|
134
|
-
this.beginBackoff();
|
|
135
|
-
return;
|
|
136
|
-
}
|
|
137
|
-
if (this.phase === 'connecting') {
|
|
138
|
-
if (state === 'open')
|
|
139
|
-
return this.settleReconnected(); // onOpen 없는 network용 fallback
|
|
140
|
-
if (state === 'closing' || state === 'closed')
|
|
141
|
-
this.onInnerDeath();
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
beginBackoff() {
|
|
145
|
-
this.detach();
|
|
146
|
-
this.phase = 'backoff';
|
|
147
|
-
this.reconnectTimer = setTimeout(() => this.attemptReconnect(), this.delayMs);
|
|
148
|
-
}
|
|
149
|
-
attemptReconnect() {
|
|
150
|
-
var _a, _b;
|
|
151
|
-
if (this.phase === 'closed')
|
|
152
|
-
return;
|
|
153
|
-
if (this.maxRetries != null && this.retryCount >= this.maxRetries) {
|
|
154
|
-
this.phase = 'closed';
|
|
155
|
-
clearInterval(this.watchdogTimer);
|
|
156
|
-
const error = new Error(`@network exceeded maxRetries[${this.maxRetries}] - reconnectingNetwork`);
|
|
157
|
-
for (const handler of [...this.errorHandlers])
|
|
158
|
-
handler(error, { scope: 'reconnectingNetwork.maxRetries', network: this });
|
|
159
|
-
this.messageHandlers.clear();
|
|
160
|
-
this.errorHandlers.clear();
|
|
161
|
-
this.reconnectHandlers.clear();
|
|
162
|
-
return;
|
|
163
|
-
}
|
|
164
|
-
let next;
|
|
165
|
-
try {
|
|
166
|
-
next = this.factory();
|
|
167
|
-
}
|
|
168
|
-
catch (e) {
|
|
169
|
-
this.failAttempt(e, 'reconnectingNetwork.factory');
|
|
170
|
-
return;
|
|
171
|
-
}
|
|
172
|
-
this.current = next;
|
|
173
|
-
this.attach(next);
|
|
174
|
-
if (this.configured)
|
|
175
|
-
(_a = next.configure) === null || _a === void 0 ? void 0 : _a.call(next, this.configured);
|
|
176
|
-
this.phase = 'connecting';
|
|
177
|
-
//! success is declared only once the candidate actually OPENS. a factory return alone is not a
|
|
178
|
-
//! connection (a real WebSocket constructs fine while the server is down), so resetting backoff
|
|
179
|
-
//! here would degrade to a constant-rate reconnect storm with an onReconnect/tick per attempt.
|
|
180
|
-
const state = next.readyState;
|
|
181
|
-
if (state === 'open')
|
|
182
|
-
return this.settleReconnected();
|
|
183
|
-
if (state === 'closing' || state === 'closed')
|
|
184
|
-
return this.onInnerDeath();
|
|
185
|
-
this.unsubscribeCandidateOpen = (_b = next.onOpen) === null || _b === void 0 ? void 0 : _b.call(next, () => {
|
|
186
|
-
if (this.phase === 'connecting' && this.current === next)
|
|
187
|
-
this.settleReconnected();
|
|
188
|
-
});
|
|
189
|
-
//! a candidate stuck in 'connecting' is bounded by the inner network's own connect timeout
|
|
190
|
-
//! (e.g. `OwnedWebSocketNetwork.connectTimeoutMs`), which actual-closes and lands in onInnerDeath.
|
|
191
|
-
}
|
|
192
|
-
/** a reconnect attempt failed (factory throw, or candidate died before open): keep growing the backoff */
|
|
193
|
-
failAttempt(error, scope) {
|
|
194
|
-
this.detach();
|
|
195
|
-
this.retryCount++;
|
|
196
|
-
this.delayMs = Math.min(this.delayMs * this.factor, this.maxMs);
|
|
197
|
-
for (const handler of [...this.errorHandlers])
|
|
198
|
-
handler(error, { scope, network: this });
|
|
199
|
-
this.phase = 'backoff';
|
|
200
|
-
this.reconnectTimer = setTimeout(() => this.attemptReconnect(), this.delayMs);
|
|
201
|
-
}
|
|
202
|
-
/** the candidate opened: only now reset the backoff/retry budget and notify onReconnect */
|
|
203
|
-
settleReconnected() {
|
|
204
|
-
var _a;
|
|
205
|
-
(_a = this.unsubscribeCandidateOpen) === null || _a === void 0 ? void 0 : _a.call(this);
|
|
206
|
-
this.unsubscribeCandidateOpen = undefined;
|
|
207
|
-
this.phase = 'connected';
|
|
208
|
-
this._generation++;
|
|
209
|
-
this.retryCount = 0;
|
|
210
|
-
this.delayMs = this.baseMs;
|
|
211
|
-
this.lastMessageAt = Date.now();
|
|
212
|
-
for (const handler of [...this.reconnectHandlers])
|
|
213
|
-
handler();
|
|
214
|
-
}
|
|
215
|
-
}
|
|
216
|
-
/** create the L1 wire translator decorator over a raw string, same slot as `createFilteredNetwork` */
|
|
217
|
-
export const createTranslatedNetwork = (source, translator) => new TranslatedNetwork(source, translator);
|
|
218
|
-
/** `NetworkSupportable` decorator that translates raw strings at the wire boundary */
|
|
219
|
-
class TranslatedNetwork {
|
|
220
|
-
constructor(source, translator) {
|
|
221
|
-
this.source = source;
|
|
222
|
-
this.translator = translator;
|
|
223
|
-
this.errorHandlers = new Set();
|
|
224
|
-
this.unsubscribeSourceError = source.onError((error, context) => this.emitError(error, context));
|
|
225
|
-
}
|
|
226
|
-
get readyState() {
|
|
227
|
-
return this.source.readyState;
|
|
228
|
-
}
|
|
229
|
-
ready() {
|
|
230
|
-
var _a, _b, _c;
|
|
231
|
-
return (_c = (_b = (_a = this.source).ready) === null || _b === void 0 ? void 0 : _b.call(_a)) !== null && _c !== void 0 ? _c : Promise.resolve();
|
|
232
|
-
}
|
|
233
|
-
onOpen(handler) {
|
|
234
|
-
var _a, _b, _c;
|
|
235
|
-
return (_c = (_b = (_a = this.source).onOpen) === null || _b === void 0 ? void 0 : _b.call(_a, handler)) !== null && _c !== void 0 ? _c : (() => undefined);
|
|
236
|
-
}
|
|
237
|
-
send(data) {
|
|
238
|
-
this.source.send(this.translator.outbound ? this.translator.outbound(data) : data);
|
|
239
|
-
}
|
|
240
|
-
onMessage(handler) {
|
|
241
|
-
return this.source.onMessage(raw => {
|
|
242
|
-
let translated;
|
|
243
|
-
try {
|
|
244
|
-
translated = this.translator.inbound ? this.translator.inbound(raw) : raw;
|
|
245
|
-
}
|
|
246
|
-
catch (e) {
|
|
247
|
-
this.emitError(e, { scope: 'translatedNetwork.inbound' });
|
|
248
|
-
return;
|
|
249
|
-
}
|
|
250
|
-
if (translated === undefined)
|
|
251
|
-
return; // dropped by translator
|
|
252
|
-
handler(translated);
|
|
253
|
-
});
|
|
254
|
-
}
|
|
255
|
-
configure(options) {
|
|
256
|
-
var _a, _b;
|
|
257
|
-
(_b = (_a = this.source).configure) === null || _b === void 0 ? void 0 : _b.call(_a, options);
|
|
258
|
-
}
|
|
259
|
-
onError(handler) {
|
|
260
|
-
this.errorHandlers.add(handler);
|
|
261
|
-
return () => this.errorHandlers.delete(handler);
|
|
262
|
-
}
|
|
263
|
-
close(code, reason) {
|
|
264
|
-
this.unsubscribeSourceError();
|
|
265
|
-
this.errorHandlers.clear();
|
|
266
|
-
this.source.close(code, reason);
|
|
267
|
-
}
|
|
268
|
-
emitError(error, context) {
|
|
269
|
-
for (const handler of [...this.errorHandlers])
|
|
270
|
-
handler(error, Object.assign(Object.assign({}, context), { network: this }));
|
|
271
|
-
}
|
|
272
|
-
}
|
|
273
|
-
//# sourceMappingURL=network.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"network.js","sourceRoot":"","sources":["../../../src/sync/network.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAQH,uBAAuB,GAC1B,MAAM,WAAW,CAAC;AAwBnB;;;;;GAKG;AACH,MAAM,mBAAmB,GAAG,IAAK,CAAC;AAElC,+GAA+G;AAC/G,MAAM,CAAC,MAAM,yBAAyB,GAAG,CACrC,OAAiC,EACjC,OAA0B,EACI,EAAE,CAAC,IAAI,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;AAE/E,4FAA4F;AAC5F,MAAM,mBAAmB;IA0BrB,YACqB,OAAiC,EAClD,OAA0B;;QADT,YAAO,GAAP,OAAO,CAA0B;QAnB9C,gBAAW,GAAG,CAAC,CAAC;QACxB,kFAAkF;QAC1E,UAAK,GAAsD,WAAW,CAAC;QACvE,eAAU,GAAG,CAAC,CAAC;QAEf,kBAAa,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QASlB,oBAAe,GAAG,IAAI,GAAG,EAAyB,CAAC;QACnD,kBAAa,GAAG,IAAI,GAAG,EAAsB,CAAC;QAC9C,sBAAiB,GAAG,IAAI,GAAG,EAAc,CAAC;QAMvD,IAAI,CAAC,MAAM,GAAG,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,MAAM,mCAAI,IAAK,CAAC;QACvC,IAAI,CAAC,MAAM,GAAG,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,MAAM,mCAAI,CAAC,CAAC;QACnC,IAAI,CAAC,KAAK,GAAG,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,KAAK,mCAAI,KAAM,CAAC;QACtC,IAAI,CAAC,UAAU,GAAG,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,UAAU,CAAC;QACtC,IAAI,CAAC,aAAa,GAAG,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,aAAa,CAAC;QAC5C,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC;QAC3B,IAAI,CAAC,OAAO,GAAG,OAAO,EAAE,CAAC;QACzB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC1B,IAAI,CAAC,aAAa,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,UAAU,mCAAI,mBAAmB,CAAC,CAAC;IACrG,CAAC;IAED,kEAAkE;IAClE,IAAW,UAAU;QACjB,OAAO,IAAI,CAAC,WAAW,CAAC;IAC5B,CAAC;IAED,IAAW,UAAU;QACjB,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC;IACxE,CAAC;IAEM,KAAK;;QACR,OAAO,MAAA,MAAA,MAAA,IAAI,CAAC,OAAO,EAAC,KAAK,kDAAI,mCAAI,OAAO,CAAC,OAAO,EAAE,CAAC;IACvD,CAAC;IAEM,MAAM,CAAC,OAAmB;;QAC7B,OAAO,MAAA,MAAA,MAAA,IAAI,CAAC,OAAO,EAAC,MAAM,mDAAG,OAAO,CAAC,mCAAI,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;IAC/D,CAAC;IAED,0GAA0G;IACnG,IAAI,CAAC,IAAY;QACpB,IAAI,IAAI,CAAC,KAAK,KAAK,QAAQ;YAAE,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;QAC9F,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,KAAK,MAAM,EAAE;YACpC,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;SAC3E;QACD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC;IAEM,SAAS,CAAC,OAA8B;QAC3C,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAClC,OAAO,GAAG,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACtD,CAAC;IAEM,OAAO,CAAC,OAA2B;QACtC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAChC,OAAO,GAAG,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACpD,CAAC;IAEM,WAAW,CAAC,OAAmB;QAClC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACpC,OAAO,GAAG,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACxD,CAAC;IAED,4EAA4E;IACrE,SAAS,CAAC,OAA6B;;QAC1C,IAAI,CAAC,UAAU,mCAAQ,IAAI,CAAC,UAAU,GAAK,OAAO,CAAE,CAAC;QACrD,MAAA,MAAA,IAAI,CAAC,OAAO,EAAC,SAAS,mDAAG,IAAI,CAAC,UAAU,CAAC,CAAC;IAC9C,CAAC;IAED,gEAAgE;IACzD,KAAK,CAAC,IAAa,EAAE,MAAe;QACvC,IAAI,IAAI,CAAC,KAAK,KAAK,QAAQ;YAAE,OAAO;QACpC,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC;QACtB,aAAa,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAClC,IAAI,IAAI,CAAC,cAAc;YAAE,YAAY,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAC3D,IAAI,CAAC,MAAM,EAAE,CAAC;QACd,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACjC,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;QAC7B,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;QAC3B,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,CAAC;IACnC,CAAC;IAEO,MAAM,CAAC,OAA2B;QACtC,IAAI,CAAC,kBAAkB,GAAG,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE;YAC9C,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAChC,KAAK,MAAM,OAAO,IAAI,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC;gBAAE,OAAO,CAAC,GAAG,CAAC,CAAC;QAClE,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;YACvD,KAAK,MAAM,OAAO,IAAI,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC;gBAAE,OAAO,CAAC,KAAK,kCAAO,OAAO,KAAE,OAAO,EAAE,IAAI,IAAG,CAAC;YAC7F,gGAAgG;YAChG,gGAAgG;YAChG,+EAA+E;YAC/E,IACI,OAAO,CAAC,KAAK,KAAK,uBAAuB,CAAC,UAAU;gBACpD,OAAO,CAAC,KAAK,KAAK,uBAAuB,CAAC,YAAY,EACxD;gBACE,IAAI,CAAC,YAAY,EAAE,CAAC;aACvB;QACL,CAAC,CAAC,CAAC;IACP,CAAC;IAEO,MAAM;;QACV,MAAA,IAAI,CAAC,kBAAkB,oDAAI,CAAC;QAC5B,MAAA,IAAI,CAAC,gBAAgB,oDAAI,CAAC;QAC1B,MAAA,IAAI,CAAC,wBAAwB,oDAAI,CAAC;IACtC,CAAC;IAEO,YAAY;QAChB,IAAI,IAAI,CAAC,KAAK,KAAK,WAAW;YAAE,IAAI,CAAC,YAAY,EAAE,CAAC;aAC/C,IAAI,IAAI,CAAC,KAAK,KAAK,YAAY;YAChC,IAAI,CAAC,WAAW,CACZ,IAAI,KAAK,CAAC,2DAA2D,CAAC,EACtE,6BAA6B,CAChC,CAAC;IACV,CAAC;IAED,qGAAqG;IAC7F,KAAK;QACT,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC;QACtC,IAAI,IAAI,CAAC,KAAK,KAAK,WAAW,EAAE;YAC5B,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,QAAQ;gBAAE,OAAO,IAAI,CAAC,YAAY,EAAE,CAAC;YAC1E,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa;gBAAE,IAAI,CAAC,YAAY,EAAE,CAAC;YACpG,OAAO;SACV;QACD,IAAI,IAAI,CAAC,KAAK,KAAK,YAAY,EAAE;YAC7B,IAAI,KAAK,KAAK,MAAM;gBAAE,OAAO,IAAI,CAAC,iBAAiB,EAAE,CAAC,CAAC,8BAA8B;YACrF,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,QAAQ;gBAAE,IAAI,CAAC,YAAY,EAAE,CAAC;SACtE;IACL,CAAC;IAEO,YAAY;QAChB,IAAI,CAAC,MAAM,EAAE,CAAC;QACd,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC;QACvB,IAAI,CAAC,cAAc,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IAClF,CAAC;IAEO,gBAAgB;;QACpB,IAAI,IAAI,CAAC,KAAK,KAAK,QAAQ;YAAE,OAAO;QACpC,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,EAAE;YAC/D,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC;YACtB,aAAa,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YAClC,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,gCAAgC,IAAI,CAAC,UAAU,yBAAyB,CAAC,CAAC;YAClG,KAAK,MAAM,OAAO,IAAI,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC;gBACzC,OAAO,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,gCAAgC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;YAC/E,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;YAC7B,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;YAC3B,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,CAAC;YAC/B,OAAO;SACV;QAED,IAAI,IAAwB,CAAC;QAC7B,IAAI;YACA,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;SACzB;QAAC,OAAO,CAAC,EAAE;YACR,IAAI,CAAC,WAAW,CAAC,CAAC,EAAE,6BAA6B,CAAC,CAAC;YACnD,OAAO;SACV;QAED,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACpB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAClB,IAAI,IAAI,CAAC,UAAU;YAAE,MAAA,IAAI,CAAC,SAAS,qDAAG,IAAI,CAAC,UAAU,CAAC,CAAC;QACvD,IAAI,CAAC,KAAK,GAAG,YAAY,CAAC;QAE1B,+FAA+F;QAC/F,gGAAgG;QAChG,+FAA+F;QAC/F,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC;QAC9B,IAAI,KAAK,KAAK,MAAM;YAAE,OAAO,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACtD,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAC,YAAY,EAAE,CAAC;QAC1E,IAAI,CAAC,wBAAwB,GAAG,MAAA,IAAI,CAAC,MAAM,qDAAG,GAAG,EAAE;YAC/C,IAAI,IAAI,CAAC,KAAK,KAAK,YAAY,IAAI,IAAI,CAAC,OAAO,KAAK,IAAI;gBAAE,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACvF,CAAC,CAAC,CAAC;QACH,2FAA2F;QAC3F,mGAAmG;IACvG,CAAC;IAED,0GAA0G;IAClG,WAAW,CAAC,KAAU,EAAE,KAAa;QACzC,IAAI,CAAC,MAAM,EAAE,CAAC;QACd,IAAI,CAAC,UAAU,EAAE,CAAC;QAClB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QAChE,KAAK,MAAM,OAAO,IAAI,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC;YAAE,OAAO,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QACxF,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC;QACvB,IAAI,CAAC,cAAc,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IAClF,CAAC;IAED,2FAA2F;IACnF,iBAAiB;;QACrB,MAAA,IAAI,CAAC,wBAAwB,oDAAI,CAAC;QAClC,IAAI,CAAC,wBAAwB,GAAG,SAAS,CAAC;QAC1C,IAAI,CAAC,KAAK,GAAG,WAAW,CAAC;QACzB,IAAI,CAAC,WAAW,EAAE,CAAC;QACnB,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;QACpB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC;QAC3B,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAChC,KAAK,MAAM,OAAO,IAAI,CAAC,GAAG,IAAI,CAAC,iBAAiB,CAAC;YAAE,OAAO,EAAE,CAAC;IACjE,CAAC;CACJ;AASD,sGAAsG;AACtG,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,MAA0B,EAAE,UAA0B,EAAsB,EAAE,CAClH,IAAI,iBAAiB,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;AAE9C,sFAAsF;AACtF,MAAM,iBAAiB;IAInB,YACqB,MAA0B,EAC1B,UAA0B;QAD1B,WAAM,GAAN,MAAM,CAAoB;QAC1B,eAAU,GAAV,UAAU,CAAgB;QAL9B,kBAAa,GAAG,IAAI,GAAG,EAAsB,CAAC;QAO3D,IAAI,CAAC,sBAAsB,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC;IACrG,CAAC;IAED,IAAW,UAAU;QACjB,OAAO,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC;IAClC,CAAC;IAEM,KAAK;;QACR,OAAO,MAAA,MAAA,MAAA,IAAI,CAAC,MAAM,EAAC,KAAK,kDAAI,mCAAI,OAAO,CAAC,OAAO,EAAE,CAAC;IACtD,CAAC;IAEM,MAAM,CAAC,OAAmB;;QAC7B,OAAO,MAAA,MAAA,MAAA,IAAI,CAAC,MAAM,EAAC,MAAM,mDAAG,OAAO,CAAC,mCAAI,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;IAC9D,CAAC;IAEM,IAAI,CAAC,IAAY;QACpB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACvF,CAAC;IAEM,SAAS,CAAC,OAA8B;QAC3C,OAAO,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE;YAC/B,IAAI,UAA8B,CAAC;YACnC,IAAI;gBACA,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;aAC7E;YAAC,OAAO,CAAC,EAAE;gBACR,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,2BAA2B,EAAE,CAAC,CAAC;gBAC1D,OAAO;aACV;YACD,IAAI,UAAU,KAAK,SAAS;gBAAE,OAAO,CAAC,wBAAwB;YAC9D,OAAO,CAAC,UAAU,CAAC,CAAC;QACxB,CAAC,CAAC,CAAC;IACP,CAAC;IAEM,SAAS,CAAC,OAA6B;;QAC1C,MAAA,MAAA,IAAI,CAAC,MAAM,EAAC,SAAS,mDAAG,OAAO,CAAC,CAAC;IACrC,CAAC;IAEM,OAAO,CAAC,OAA2B;QACtC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAChC,OAAO,GAAG,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACpD,CAAC;IAEM,KAAK,CAAC,IAAa,EAAE,MAAe;QACvC,IAAI,CAAC,sBAAsB,EAAE,CAAC;QAC9B,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;QAC3B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACpC,CAAC;IAEO,SAAS,CAAC,KAAU,EAAE,OAA4C;QACtE,KAAK,MAAM,OAAO,IAAI,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC;YAAE,OAAO,CAAC,KAAK,kCAAO,OAAO,KAAE,OAAO,EAAE,IAAI,IAAG,CAAC;IACjG,CAAC;CACJ"}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
export * from './types';
|
|
2
|
-
export * from './shared-timer-scheduler';
|
|
3
|
-
export * from './message-router';
|
|
4
|
-
export * from './pending-request-store';
|
|
5
|
-
export * from './socket-client';
|
|
6
|
-
export * from './websocket-client-transport';
|
|
7
|
-
export * from './keep-alive-controller';
|
|
8
|
-
export * from './reconnect-controller';
|
|
9
|
-
export * from './rotation-controller';
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
-
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
-
};
|
|
16
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
__exportStar(require("./types"), exports);
|
|
18
|
-
__exportStar(require("./shared-timer-scheduler"), exports);
|
|
19
|
-
__exportStar(require("./message-router"), exports);
|
|
20
|
-
__exportStar(require("./pending-request-store"), exports);
|
|
21
|
-
__exportStar(require("./socket-client"), exports);
|
|
22
|
-
__exportStar(require("./websocket-client-transport"), exports);
|
|
23
|
-
__exportStar(require("./keep-alive-controller"), exports);
|
|
24
|
-
__exportStar(require("./reconnect-controller"), exports);
|
|
25
|
-
__exportStar(require("./rotation-controller"), exports);
|
|
26
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/socket/client/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,0CAAwB;AACxB,2DAAyC;AACzC,mDAAiC;AACjC,0DAAwC;AACxC,kDAAgC;AAChC,+DAA6C;AAC7C,0DAAwC;AACxC,yDAAuC;AACvC,wDAAsC"}
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
import type { SharedTimerScheduler, SocketRuntimePort } from './types';
|
|
2
|
-
export interface KeepAliveControllerOptions<TMessage> {
|
|
3
|
-
client: SocketRuntimePort<TMessage>;
|
|
4
|
-
buildMessage: () => TMessage;
|
|
5
|
-
intervalMs?: number;
|
|
6
|
-
timeoutMs?: number;
|
|
7
|
-
maxMissedPongs?: number;
|
|
8
|
-
mode?: 'send' | 'request';
|
|
9
|
-
timerScheduler?: SharedTimerScheduler;
|
|
10
|
-
timerKey?: string;
|
|
11
|
-
onPongTimeout?: () => unknown | Promise<unknown>;
|
|
12
|
-
}
|
|
13
|
-
export declare class KeepAliveController<TMessage> {
|
|
14
|
-
private readonly client;
|
|
15
|
-
private readonly buildMessage;
|
|
16
|
-
private readonly intervalMs;
|
|
17
|
-
private readonly timeoutMs;
|
|
18
|
-
private readonly maxMissedPongs;
|
|
19
|
-
private readonly mode;
|
|
20
|
-
private readonly timerScheduler;
|
|
21
|
-
private readonly timerKey;
|
|
22
|
-
private readonly onPongTimeout;
|
|
23
|
-
private readonly unsubs;
|
|
24
|
-
private running;
|
|
25
|
-
private inFlight;
|
|
26
|
-
private missedPongs;
|
|
27
|
-
constructor(options: KeepAliveControllerOptions<TMessage>);
|
|
28
|
-
start(): void;
|
|
29
|
-
stop(): void;
|
|
30
|
-
destroy(): void;
|
|
31
|
-
private scheduleNow;
|
|
32
|
-
private scheduleNext;
|
|
33
|
-
private clearTimer;
|
|
34
|
-
private tick;
|
|
35
|
-
}
|
|
@@ -1,101 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
-
});
|
|
10
|
-
};
|
|
11
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
-
exports.KeepAliveController = void 0;
|
|
13
|
-
const shared_timer_scheduler_1 = require("./shared-timer-scheduler");
|
|
14
|
-
class KeepAliveController {
|
|
15
|
-
constructor(options) {
|
|
16
|
-
var _a, _b, _c, _d, _e, _f;
|
|
17
|
-
this.unsubs = [];
|
|
18
|
-
this.running = false;
|
|
19
|
-
this.inFlight = false;
|
|
20
|
-
this.missedPongs = 0;
|
|
21
|
-
this.client = options.client;
|
|
22
|
-
this.buildMessage = options.buildMessage;
|
|
23
|
-
this.intervalMs = (_a = options.intervalMs) !== null && _a !== void 0 ? _a : 30000;
|
|
24
|
-
this.timeoutMs = (_b = options.timeoutMs) !== null && _b !== void 0 ? _b : 10000;
|
|
25
|
-
this.maxMissedPongs = Math.max(1, (_c = options.maxMissedPongs) !== null && _c !== void 0 ? _c : 2);
|
|
26
|
-
this.mode = (_d = options.mode) !== null && _d !== void 0 ? _d : 'request';
|
|
27
|
-
this.timerScheduler = (_e = options.timerScheduler) !== null && _e !== void 0 ? _e : new shared_timer_scheduler_1.InMemorySharedTimerScheduler();
|
|
28
|
-
this.timerKey = (_f = options.timerKey) !== null && _f !== void 0 ? _f : 'keepalive';
|
|
29
|
-
this.onPongTimeout = options.onPongTimeout;
|
|
30
|
-
this.unsubs.push(options.client.onState(event => {
|
|
31
|
-
if (event.next === 'connected' && this.running) {
|
|
32
|
-
this.missedPongs = 0;
|
|
33
|
-
this.scheduleNow();
|
|
34
|
-
}
|
|
35
|
-
if (event.next === 'closing' || event.next === 'closed') {
|
|
36
|
-
this.missedPongs = 0;
|
|
37
|
-
this.clearTimer();
|
|
38
|
-
}
|
|
39
|
-
}));
|
|
40
|
-
}
|
|
41
|
-
start() {
|
|
42
|
-
this.running = true;
|
|
43
|
-
if (this.client.state === 'connected')
|
|
44
|
-
this.scheduleNow();
|
|
45
|
-
}
|
|
46
|
-
stop() {
|
|
47
|
-
this.running = false;
|
|
48
|
-
this.clearTimer();
|
|
49
|
-
}
|
|
50
|
-
destroy() {
|
|
51
|
-
this.stop();
|
|
52
|
-
this.unsubs.splice(0).forEach(unsub => unsub());
|
|
53
|
-
}
|
|
54
|
-
scheduleNow() {
|
|
55
|
-
this.clearTimer();
|
|
56
|
-
this.timerScheduler.schedule(this.timerKey, 0, () => this.tick());
|
|
57
|
-
}
|
|
58
|
-
scheduleNext() {
|
|
59
|
-
this.clearTimer();
|
|
60
|
-
if (!this.running || this.client.state !== 'connected')
|
|
61
|
-
return;
|
|
62
|
-
this.timerScheduler.schedule(this.timerKey, this.intervalMs, () => this.tick());
|
|
63
|
-
}
|
|
64
|
-
clearTimer() {
|
|
65
|
-
this.timerScheduler.cancel(this.timerKey);
|
|
66
|
-
}
|
|
67
|
-
tick() {
|
|
68
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
69
|
-
if (!this.running || this.client.state !== 'connected' || this.inFlight)
|
|
70
|
-
return;
|
|
71
|
-
this.inFlight = true;
|
|
72
|
-
try {
|
|
73
|
-
const message = this.buildMessage();
|
|
74
|
-
if (this.mode === 'send') {
|
|
75
|
-
this.client.send(message);
|
|
76
|
-
return;
|
|
77
|
-
}
|
|
78
|
-
yield this.client.request(message, { timeoutMs: this.timeoutMs });
|
|
79
|
-
this.missedPongs = 0;
|
|
80
|
-
}
|
|
81
|
-
catch (_a) {
|
|
82
|
-
if (this.mode === 'request') {
|
|
83
|
-
this.missedPongs += 1;
|
|
84
|
-
if (this.missedPongs >= this.maxMissedPongs) {
|
|
85
|
-
this.missedPongs = 0;
|
|
86
|
-
if (this.onPongTimeout)
|
|
87
|
-
yield Promise.resolve(this.onPongTimeout()).catch(() => undefined);
|
|
88
|
-
else
|
|
89
|
-
yield this.client.disconnect(1001, 'pong-timeout').catch(() => undefined);
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
finally {
|
|
94
|
-
this.inFlight = false;
|
|
95
|
-
this.scheduleNext();
|
|
96
|
-
}
|
|
97
|
-
});
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
exports.KeepAliveController = KeepAliveController;
|
|
101
|
-
//# sourceMappingURL=keep-alive-controller.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"keep-alive-controller.js","sourceRoot":"","sources":["../../../src/socket/client/keep-alive-controller.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import type { SocketUnsubscribe } from '../types';
|
|
2
|
-
export declare type MessageListener<TMessage = unknown> = (message: TMessage) => void;
|
|
3
|
-
export interface MessageRouterOptions<TMessage> {
|
|
4
|
-
getMessageType?: (message: TMessage) => string | undefined;
|
|
5
|
-
}
|
|
6
|
-
export declare class MessageRouter<TMessage = any> {
|
|
7
|
-
private readonly anyListeners;
|
|
8
|
-
private readonly typeListeners;
|
|
9
|
-
private readonly getMessageType;
|
|
10
|
-
constructor(options?: MessageRouterOptions<TMessage>);
|
|
11
|
-
onAny(listener: MessageListener<TMessage>): SocketUnsubscribe;
|
|
12
|
-
onType(type: string, listener: MessageListener<TMessage>): SocketUnsubscribe;
|
|
13
|
-
clear(): void;
|
|
14
|
-
route(message: TMessage): number;
|
|
15
|
-
}
|
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.MessageRouter = void 0;
|
|
4
|
-
class MessageRouter {
|
|
5
|
-
constructor(options = {}) {
|
|
6
|
-
var _a;
|
|
7
|
-
this.anyListeners = new Set();
|
|
8
|
-
this.typeListeners = new Map();
|
|
9
|
-
this.getMessageType = (_a = options.getMessageType) !== null && _a !== void 0 ? _a : (message => { var _a; return `${(_a = message === null || message === void 0 ? void 0 : message.type) !== null && _a !== void 0 ? _a : ''}`; });
|
|
10
|
-
}
|
|
11
|
-
onAny(listener) {
|
|
12
|
-
this.anyListeners.add(listener);
|
|
13
|
-
return () => this.anyListeners.delete(listener);
|
|
14
|
-
}
|
|
15
|
-
onType(type, listener) {
|
|
16
|
-
var _a;
|
|
17
|
-
const key = `${type !== null && type !== void 0 ? type : ''}`.trim();
|
|
18
|
-
if (!key)
|
|
19
|
-
throw new Error(`@type (string) is required - MessageRouter.onType()`);
|
|
20
|
-
const bucket = (_a = this.typeListeners.get(key)) !== null && _a !== void 0 ? _a : new Set();
|
|
21
|
-
bucket.add(listener);
|
|
22
|
-
this.typeListeners.set(key, bucket);
|
|
23
|
-
return () => {
|
|
24
|
-
bucket.delete(listener);
|
|
25
|
-
if (!bucket.size)
|
|
26
|
-
this.typeListeners.delete(key);
|
|
27
|
-
};
|
|
28
|
-
}
|
|
29
|
-
clear() {
|
|
30
|
-
this.anyListeners.clear();
|
|
31
|
-
this.typeListeners.clear();
|
|
32
|
-
}
|
|
33
|
-
route(message) {
|
|
34
|
-
var _a;
|
|
35
|
-
const key = `${(_a = this.getMessageType(message)) !== null && _a !== void 0 ? _a : ''}`.trim();
|
|
36
|
-
let count = 0;
|
|
37
|
-
this.anyListeners.forEach(listener => {
|
|
38
|
-
listener(message);
|
|
39
|
-
count += 1;
|
|
40
|
-
});
|
|
41
|
-
if (!key)
|
|
42
|
-
return count;
|
|
43
|
-
const bucket = this.typeListeners.get(key);
|
|
44
|
-
bucket === null || bucket === void 0 ? void 0 : bucket.forEach(listener => {
|
|
45
|
-
listener(message);
|
|
46
|
-
count += 1;
|
|
47
|
-
});
|
|
48
|
-
return count;
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
exports.MessageRouter = MessageRouter;
|
|
52
|
-
//# sourceMappingURL=message-router.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"message-router.js","sourceRoot":"","sources":["../../../src/socket/client/message-router.ts"],"names":[],"mappings":";;;AAQA,MAAa,aAAa;IAKtB,YAAmB,UAA0C,EAAE;;QAJ9C,iBAAY,GAAG,IAAI,GAAG,EAA6B,CAAC;QACpD,kBAAa,GAAG,IAAI,GAAG,EAA0C,CAAC;QAI/E,IAAI,CAAC,cAAc,GAAG,MAAA,OAAO,CAAC,cAAc,mCAAI,CAAC,OAAO,CAAC,EAAE,WAAC,OAAA,GAAG,MAAC,OAAe,aAAf,OAAO,uBAAP,OAAO,CAAU,IAAI,mCAAI,EAAE,EAAE,CAAA,EAAA,CAAC,CAAC;IACnG,CAAC;IAEM,KAAK,CAAC,QAAmC;QAC5C,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAChC,OAAO,GAAG,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IACpD,CAAC;IAEM,MAAM,CAAC,IAAY,EAAE,QAAmC;;QAC3D,MAAM,GAAG,GAAG,GAAG,IAAI,aAAJ,IAAI,cAAJ,IAAI,GAAI,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC;QACnC,IAAI,CAAC,GAAG;YAAE,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;QACjF,MAAM,MAAM,GAAG,MAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,mCAAI,IAAI,GAAG,EAA6B,CAAC;QACnF,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACrB,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QACpC,OAAO,GAAG,EAAE;YACR,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YACxB,IAAI,CAAC,MAAM,CAAC,IAAI;gBAAE,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACrD,CAAC,CAAC;IACN,CAAC;IAEM,KAAK;QACR,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;QAC1B,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;IAC/B,CAAC;IAEM,KAAK,CAAC,OAAiB;;QAC1B,MAAM,GAAG,GAAG,GAAG,MAAA,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,mCAAI,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC;QAC3D,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;YACjC,QAAQ,CAAC,OAAO,CAAC,CAAC;YAClB,KAAK,IAAI,CAAC,CAAC;QACf,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,GAAG;YAAE,OAAO,KAAK,CAAC;QACvB,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC3C,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,OAAO,CAAC,QAAQ,CAAC,EAAE;YACvB,QAAQ,CAAC,OAAO,CAAC,CAAC;YAClB,KAAK,IAAI,CAAC,CAAC;QACf,CAAC,CAAC,CAAC;QACH,OAAO,KAAK,CAAC;IACjB,CAAC;CACJ;AA9CD,sCA8CC"}
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import type { SharedTimerScheduler } from './types';
|
|
2
|
-
export interface PendingRequestStoreOptions {
|
|
3
|
-
timerScheduler?: SharedTimerScheduler;
|
|
4
|
-
timerPrefix?: string;
|
|
5
|
-
}
|
|
6
|
-
export interface PendingRequestCreateOptions {
|
|
7
|
-
timeoutMs?: number;
|
|
8
|
-
onTimeout?: (mid: string) => Error;
|
|
9
|
-
}
|
|
10
|
-
export declare class PendingRequestStore {
|
|
11
|
-
private readonly items;
|
|
12
|
-
private readonly timerScheduler;
|
|
13
|
-
private readonly timerPrefix;
|
|
14
|
-
constructor(options?: PendingRequestStoreOptions);
|
|
15
|
-
size(): number;
|
|
16
|
-
has(mid: string): boolean;
|
|
17
|
-
create<T = unknown>(mid: string, options?: PendingRequestCreateOptions): Promise<T>;
|
|
18
|
-
resolve<T = unknown>(mid: string, value: T): boolean;
|
|
19
|
-
reject(mid: string, error: unknown): boolean;
|
|
20
|
-
clear(reason?: unknown): number;
|
|
21
|
-
private timeout;
|
|
22
|
-
private remove;
|
|
23
|
-
private toTimerKey;
|
|
24
|
-
}
|