lemon-model 1.2.3 → 1.2.4
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/dist/esm/index.js +1 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/socket/decorators.js +266 -0
- package/dist/esm/socket/decorators.js.map +1 -0
- package/dist/esm/socket/index.js +2 -0
- package/dist/esm/socket/index.js.map +1 -1
- package/dist/esm/socket/multi.js +94 -0
- package/dist/esm/socket/multi.js.map +1 -0
- package/dist/esm/socket/socket.js +82 -22
- package/dist/esm/socket/socket.js.map +1 -1
- package/dist/esm/socket/transport.js +385 -3
- package/dist/esm/socket/transport.js.map +1 -1
- package/dist/esm/sync/client.js +166 -0
- package/dist/esm/sync/client.js.map +1 -0
- package/dist/esm/sync/index.js +14 -0
- package/dist/esm/sync/index.js.map +1 -0
- package/dist/esm/sync/machine.js +181 -0
- package/dist/esm/sync/machine.js.map +1 -0
- package/dist/esm/sync/network.js +273 -0
- package/dist/esm/sync/network.js.map +1 -0
- package/dist/esm/sync/testing.js +44 -0
- package/dist/esm/sync/testing.js.map +1 -0
- package/dist/esm/sync/ticker.js +53 -0
- package/dist/esm/sync/ticker.js.map +1 -0
- package/dist/esm/sync/types.js +2 -0
- package/dist/{proxy → esm/sync}/types.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/socket/client/index.d.ts +9 -0
- package/dist/{proxy → socket/client}/index.js +8 -11
- package/dist/socket/client/index.js.map +1 -0
- package/dist/socket/client/keep-alive-controller.d.ts +35 -0
- package/dist/socket/client/keep-alive-controller.js +101 -0
- package/dist/socket/client/keep-alive-controller.js.map +1 -0
- package/dist/socket/client/message-router.d.ts +15 -0
- package/dist/socket/client/message-router.js +52 -0
- package/dist/socket/client/message-router.js.map +1 -0
- package/dist/socket/client/pending-request-store.d.ts +24 -0
- package/dist/socket/client/pending-request-store.js +78 -0
- package/dist/socket/client/pending-request-store.js.map +1 -0
- package/dist/socket/client/reconnect-controller.d.ts +56 -0
- package/dist/socket/client/reconnect-controller.js +177 -0
- package/dist/socket/client/reconnect-controller.js.map +1 -0
- package/dist/socket/client/rotation-controller.d.ts +32 -0
- package/dist/socket/client/rotation-controller.js +76 -0
- package/dist/socket/client/rotation-controller.js.map +1 -0
- package/dist/socket/client/shared-timer-scheduler.d.ts +17 -0
- package/dist/socket/client/shared-timer-scheduler.js +77 -0
- package/dist/socket/client/shared-timer-scheduler.js.map +1 -0
- package/dist/socket/client/socket-client.d.ts +2 -0
- package/dist/socket/client/socket-client.js +219 -0
- package/dist/socket/client/socket-client.js.map +1 -0
- package/dist/socket/client/types.d.ts +101 -0
- package/dist/socket/client/types.js +3 -0
- package/dist/socket/client/types.js.map +1 -0
- package/dist/socket/client/websocket-client-transport.d.ts +23 -0
- package/dist/socket/client/websocket-client-transport.js +152 -0
- package/dist/socket/client/websocket-client-transport.js.map +1 -0
- package/dist/socket/decorators.d.ts +38 -0
- package/dist/socket/decorators.js +271 -0
- package/dist/socket/decorators.js.map +1 -0
- package/dist/socket/index.d.ts +2 -0
- package/dist/socket/index.js +2 -0
- package/dist/socket/index.js.map +1 -1
- package/dist/socket/multi.d.ts +33 -0
- package/dist/socket/multi.js +98 -0
- package/dist/socket/multi.js.map +1 -0
- package/dist/socket/socket.d.ts +22 -4
- package/dist/socket/socket.js +82 -22
- package/dist/socket/socket.js.map +1 -1
- package/dist/socket/transport.d.ts +124 -6
- package/dist/socket/transport.js +389 -4
- package/dist/socket/transport.js.map +1 -1
- package/dist/sync/client.d.ts +16 -0
- package/dist/sync/client.js +171 -0
- package/dist/sync/client.js.map +1 -0
- package/dist/sync/index.d.ts +10 -0
- package/dist/sync/index.js +30 -0
- package/dist/sync/index.js.map +1 -0
- package/dist/sync/machine.d.ts +3 -0
- package/dist/sync/machine.js +185 -0
- package/dist/sync/machine.js.map +1 -0
- package/dist/sync/network.d.ts +38 -0
- package/dist/sync/network.js +278 -0
- package/dist/sync/network.js.map +1 -0
- package/dist/sync/testing.d.ts +38 -0
- package/dist/sync/testing.js +48 -0
- package/dist/sync/testing.js.map +1 -0
- package/dist/sync/ticker.d.ts +21 -0
- package/dist/sync/ticker.js +57 -0
- package/dist/sync/ticker.js.map +1 -0
- package/dist/sync/types.d.ts +115 -0
- package/dist/sync/types.js +3 -0
- package/dist/sync/types.js.map +1 -0
- package/package.json +1 -1
- package/dist/proxy/index.d.ts +0 -12
- package/dist/proxy/index.js.map +0 -1
- package/dist/proxy/proxy.d.ts +0 -75
- package/dist/proxy/proxy.js +0 -198
- package/dist/proxy/proxy.js.map +0 -1
- package/dist/proxy/transport.d.ts +0 -123
- package/dist/proxy/transport.js +0 -401
- package/dist/proxy/transport.js.map +0 -1
- package/dist/proxy/types.d.ts +0 -89
- package/dist/proxy/types.js +0 -12
package/dist/esm/index.js
CHANGED
|
@@ -13,6 +13,7 @@ export * from './cores/index.js';
|
|
|
13
13
|
export * from './socket/index.js';
|
|
14
14
|
export * from './genai/index.js';
|
|
15
15
|
export * from './buffer/index.js';
|
|
16
|
+
export * from './sync/index.js';
|
|
16
17
|
export * from './progress/index.js';
|
|
17
18
|
export * from './logtrace/index.js';
|
|
18
19
|
//# sourceMappingURL=index.js.map
|
package/dist/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AACzB,cAAc,QAAQ,CAAC;AACvB,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC"}
|
|
@@ -0,0 +1,266 @@
|
|
|
1
|
+
import { WEBSOCKET_NETWORK_SCOPE } from './websocket.js';
|
|
2
|
+
/**
|
|
3
|
+
* default watchdog cadence for readyState-based death detection.
|
|
4
|
+
* needed because an in-memory `Network.close()` notifies no one (see `socket/socket.ts`); only a
|
|
5
|
+
* real `OwnedWebSocketNetwork`/`BrowserWebSocketNetwork` close notifies via `onError` (see below),
|
|
6
|
+
* so the watchdog is a fallback and can stay slow — 1s keeps idle browser cost negligible.
|
|
7
|
+
*/
|
|
8
|
+
const DEFAULT_WATCHDOG_MS = 1000;
|
|
9
|
+
/** create the L1 reconnect decorator: swaps the internal network on death, keeping instance identity for L3 */
|
|
10
|
+
export const createReconnectingNetwork = (factory, options) => new ReconnectingNetwork(factory, options);
|
|
11
|
+
/** `NetworkSupportable` decorator that transparently swaps its internal network on death */
|
|
12
|
+
class ReconnectingNetwork {
|
|
13
|
+
constructor(factory, options) {
|
|
14
|
+
var _a, _b, _c, _d;
|
|
15
|
+
this.factory = factory;
|
|
16
|
+
this._generation = 0;
|
|
17
|
+
/** connected: 정상 감시 | connecting: 후보 open 대기 | backoff: 재시도 대기 | closed: 영구 종료 */
|
|
18
|
+
this.phase = 'connected';
|
|
19
|
+
this.retryCount = 0;
|
|
20
|
+
this.lastMessageAt = Date.now();
|
|
21
|
+
this.messageHandlers = new Set();
|
|
22
|
+
this.errorHandlers = new Set();
|
|
23
|
+
this.reconnectHandlers = new Set();
|
|
24
|
+
this.baseMs = (_a = options === null || options === void 0 ? void 0 : options.baseMs) !== null && _a !== void 0 ? _a : 1000;
|
|
25
|
+
this.factor = (_b = options === null || options === void 0 ? void 0 : options.factor) !== null && _b !== void 0 ? _b : 2;
|
|
26
|
+
this.maxMs = (_c = options === null || options === void 0 ? void 0 : options.maxMs) !== null && _c !== void 0 ? _c : 30000;
|
|
27
|
+
this.maxRetries = options === null || options === void 0 ? void 0 : options.maxRetries;
|
|
28
|
+
this.idleTimeoutMs = options === null || options === void 0 ? void 0 : options.idleTimeoutMs;
|
|
29
|
+
this.delayMs = this.baseMs;
|
|
30
|
+
this.current = factory();
|
|
31
|
+
this.attach(this.current);
|
|
32
|
+
this.watchdogTimer = setInterval(() => this.watch(), (_d = options === null || options === void 0 ? void 0 : options.watchdogMs) !== null && _d !== void 0 ? _d : DEFAULT_WATCHDOG_MS);
|
|
33
|
+
}
|
|
34
|
+
/** internal network generation (0 initially, +1 per reconnect) */
|
|
35
|
+
get generation() {
|
|
36
|
+
return this._generation;
|
|
37
|
+
}
|
|
38
|
+
get readyState() {
|
|
39
|
+
return this.phase === 'closed' ? 'closed' : this.current.readyState;
|
|
40
|
+
}
|
|
41
|
+
ready() {
|
|
42
|
+
var _a, _b, _c;
|
|
43
|
+
return (_c = (_b = (_a = this.current).ready) === null || _b === void 0 ? void 0 : _b.call(_a)) !== null && _c !== void 0 ? _c : Promise.resolve();
|
|
44
|
+
}
|
|
45
|
+
onOpen(handler) {
|
|
46
|
+
var _a, _b, _c;
|
|
47
|
+
return (_c = (_b = (_a = this.current).onOpen) === null || _b === void 0 ? void 0 : _b.call(_a, handler)) !== null && _c !== void 0 ? _c : (() => undefined);
|
|
48
|
+
}
|
|
49
|
+
/** while disconnected (mid-reconnect or permanently closed) this throws synchronously; no send queuing */
|
|
50
|
+
send(data) {
|
|
51
|
+
if (this.phase === 'closed')
|
|
52
|
+
throw new Error(`@network is closed - reconnectingNetwork.send`);
|
|
53
|
+
if (this.current.readyState !== 'open') {
|
|
54
|
+
throw new Error(`@network is not connected - reconnectingNetwork.send`);
|
|
55
|
+
}
|
|
56
|
+
this.current.send(data);
|
|
57
|
+
}
|
|
58
|
+
onMessage(handler) {
|
|
59
|
+
this.messageHandlers.add(handler);
|
|
60
|
+
return () => this.messageHandlers.delete(handler);
|
|
61
|
+
}
|
|
62
|
+
onError(handler) {
|
|
63
|
+
this.errorHandlers.add(handler);
|
|
64
|
+
return () => this.errorHandlers.delete(handler);
|
|
65
|
+
}
|
|
66
|
+
onReconnect(handler) {
|
|
67
|
+
this.reconnectHandlers.add(handler);
|
|
68
|
+
return () => this.reconnectHandlers.delete(handler);
|
|
69
|
+
}
|
|
70
|
+
/** options are remembered and re-applied to every reconnected generation */
|
|
71
|
+
configure(options) {
|
|
72
|
+
var _a, _b;
|
|
73
|
+
this.configured = Object.assign(Object.assign({}, this.configured), options);
|
|
74
|
+
(_b = (_a = this.current).configure) === null || _b === void 0 ? void 0 : _b.call(_a, this.configured);
|
|
75
|
+
}
|
|
76
|
+
/** stop reconnecting and close the internal network for good */
|
|
77
|
+
close(code, reason) {
|
|
78
|
+
if (this.phase === 'closed')
|
|
79
|
+
return;
|
|
80
|
+
this.phase = 'closed';
|
|
81
|
+
clearInterval(this.watchdogTimer);
|
|
82
|
+
if (this.reconnectTimer)
|
|
83
|
+
clearTimeout(this.reconnectTimer);
|
|
84
|
+
this.detach();
|
|
85
|
+
this.current.close(code, reason);
|
|
86
|
+
this.messageHandlers.clear();
|
|
87
|
+
this.errorHandlers.clear();
|
|
88
|
+
this.reconnectHandlers.clear();
|
|
89
|
+
}
|
|
90
|
+
attach(network) {
|
|
91
|
+
this.unsubscribeMessage = network.onMessage(raw => {
|
|
92
|
+
this.lastMessageAt = Date.now();
|
|
93
|
+
for (const handler of [...this.messageHandlers])
|
|
94
|
+
handler(raw);
|
|
95
|
+
});
|
|
96
|
+
this.unsubscribeError = network.onError((error, context) => {
|
|
97
|
+
for (const handler of [...this.errorHandlers])
|
|
98
|
+
handler(error, Object.assign(Object.assign({}, context), { network: this }));
|
|
99
|
+
//! `OwnedWebSocketNetwork`/`BrowserWebSocketNetwork` notify a close via onError with this scope
|
|
100
|
+
//! (see `WEBSOCKET_NETWORK_SCOPE` in `socket/websocket.ts`). other onError calls (e.g. delivery
|
|
101
|
+
//! errors) are forwarded above but do not by themselves mean the network died.
|
|
102
|
+
if (context.scope === WEBSOCKET_NETWORK_SCOPE.ownedClose ||
|
|
103
|
+
context.scope === WEBSOCKET_NETWORK_SCOPE.browserClose) {
|
|
104
|
+
this.onInnerDeath();
|
|
105
|
+
}
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
detach() {
|
|
109
|
+
var _a, _b, _c;
|
|
110
|
+
(_a = this.unsubscribeMessage) === null || _a === void 0 ? void 0 : _a.call(this);
|
|
111
|
+
(_b = this.unsubscribeError) === null || _b === void 0 ? void 0 : _b.call(this);
|
|
112
|
+
(_c = this.unsubscribeCandidateOpen) === null || _c === void 0 ? void 0 : _c.call(this);
|
|
113
|
+
}
|
|
114
|
+
onInnerDeath() {
|
|
115
|
+
if (this.phase === 'connected')
|
|
116
|
+
this.beginBackoff();
|
|
117
|
+
else if (this.phase === 'connecting')
|
|
118
|
+
this.failAttempt(new Error(`@candidate network died before open - reconnectingNetwork`), 'reconnectingNetwork.connect');
|
|
119
|
+
}
|
|
120
|
+
/** watchdog fallback for networks that close without notifying (e.g. in-memory `Network.close()`) */
|
|
121
|
+
watch() {
|
|
122
|
+
const state = this.current.readyState;
|
|
123
|
+
if (this.phase === 'connected') {
|
|
124
|
+
if (state === 'closing' || state === 'closed')
|
|
125
|
+
return this.beginBackoff();
|
|
126
|
+
if (this.idleTimeoutMs && Date.now() - this.lastMessageAt > this.idleTimeoutMs)
|
|
127
|
+
this.beginBackoff();
|
|
128
|
+
return;
|
|
129
|
+
}
|
|
130
|
+
if (this.phase === 'connecting') {
|
|
131
|
+
if (state === 'open')
|
|
132
|
+
return this.settleReconnected(); // onOpen 없는 network용 fallback
|
|
133
|
+
if (state === 'closing' || state === 'closed')
|
|
134
|
+
this.onInnerDeath();
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
beginBackoff() {
|
|
138
|
+
this.detach();
|
|
139
|
+
this.phase = 'backoff';
|
|
140
|
+
this.reconnectTimer = setTimeout(() => this.attemptReconnect(), this.delayMs);
|
|
141
|
+
}
|
|
142
|
+
attemptReconnect() {
|
|
143
|
+
var _a, _b;
|
|
144
|
+
if (this.phase === 'closed')
|
|
145
|
+
return;
|
|
146
|
+
if (this.maxRetries != null && this.retryCount >= this.maxRetries) {
|
|
147
|
+
this.phase = 'closed';
|
|
148
|
+
clearInterval(this.watchdogTimer);
|
|
149
|
+
const error = new Error(`@network exceeded maxRetries[${this.maxRetries}] - reconnectingNetwork`);
|
|
150
|
+
for (const handler of [...this.errorHandlers])
|
|
151
|
+
handler(error, { scope: 'reconnectingNetwork.maxRetries', network: this });
|
|
152
|
+
this.messageHandlers.clear();
|
|
153
|
+
this.errorHandlers.clear();
|
|
154
|
+
this.reconnectHandlers.clear();
|
|
155
|
+
return;
|
|
156
|
+
}
|
|
157
|
+
let next;
|
|
158
|
+
try {
|
|
159
|
+
next = this.factory();
|
|
160
|
+
}
|
|
161
|
+
catch (e) {
|
|
162
|
+
this.failAttempt(e, 'reconnectingNetwork.factory');
|
|
163
|
+
return;
|
|
164
|
+
}
|
|
165
|
+
this.current = next;
|
|
166
|
+
this.attach(next);
|
|
167
|
+
if (this.configured)
|
|
168
|
+
(_a = next.configure) === null || _a === void 0 ? void 0 : _a.call(next, this.configured);
|
|
169
|
+
this.phase = 'connecting';
|
|
170
|
+
//! success is declared only once the candidate actually OPENS. a factory return alone is not a
|
|
171
|
+
//! connection (a real WebSocket constructs fine while the server is down), so resetting backoff
|
|
172
|
+
//! here would degrade to a constant-rate reconnect storm with an onReconnect/tick per attempt.
|
|
173
|
+
const state = next.readyState;
|
|
174
|
+
if (state === 'open')
|
|
175
|
+
return this.settleReconnected();
|
|
176
|
+
if (state === 'closing' || state === 'closed')
|
|
177
|
+
return this.onInnerDeath();
|
|
178
|
+
this.unsubscribeCandidateOpen = (_b = next.onOpen) === null || _b === void 0 ? void 0 : _b.call(next, () => {
|
|
179
|
+
if (this.phase === 'connecting' && this.current === next)
|
|
180
|
+
this.settleReconnected();
|
|
181
|
+
});
|
|
182
|
+
//! a candidate stuck in 'connecting' is bounded by the inner network's own connect timeout
|
|
183
|
+
//! (e.g. `OwnedWebSocketNetwork.connectTimeoutMs`), which actual-closes and lands in onInnerDeath.
|
|
184
|
+
}
|
|
185
|
+
/** a reconnect attempt failed (factory throw, or candidate died before open): keep growing the backoff */
|
|
186
|
+
failAttempt(error, scope) {
|
|
187
|
+
this.detach();
|
|
188
|
+
this.retryCount++;
|
|
189
|
+
this.delayMs = Math.min(this.delayMs * this.factor, this.maxMs);
|
|
190
|
+
for (const handler of [...this.errorHandlers])
|
|
191
|
+
handler(error, { scope, network: this });
|
|
192
|
+
this.phase = 'backoff';
|
|
193
|
+
this.reconnectTimer = setTimeout(() => this.attemptReconnect(), this.delayMs);
|
|
194
|
+
}
|
|
195
|
+
/** the candidate opened: only now reset the backoff/retry budget and notify onReconnect */
|
|
196
|
+
settleReconnected() {
|
|
197
|
+
var _a;
|
|
198
|
+
(_a = this.unsubscribeCandidateOpen) === null || _a === void 0 ? void 0 : _a.call(this);
|
|
199
|
+
this.unsubscribeCandidateOpen = undefined;
|
|
200
|
+
this.phase = 'connected';
|
|
201
|
+
this._generation++;
|
|
202
|
+
this.retryCount = 0;
|
|
203
|
+
this.delayMs = this.baseMs;
|
|
204
|
+
this.lastMessageAt = Date.now();
|
|
205
|
+
for (const handler of [...this.reconnectHandlers])
|
|
206
|
+
handler();
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
/** create the L1 wire translator decorator over a raw string, same slot as `createFilteredNetwork` */
|
|
210
|
+
export const createTranslatedNetwork = (source, translator) => new TranslatedNetwork(source, translator);
|
|
211
|
+
/** `NetworkSupportable` decorator that translates raw strings at the wire boundary */
|
|
212
|
+
class TranslatedNetwork {
|
|
213
|
+
constructor(source, translator) {
|
|
214
|
+
this.source = source;
|
|
215
|
+
this.translator = translator;
|
|
216
|
+
this.errorHandlers = new Set();
|
|
217
|
+
this.unsubscribeSourceError = source.onError((error, context) => this.emitError(error, context));
|
|
218
|
+
}
|
|
219
|
+
get readyState() {
|
|
220
|
+
return this.source.readyState;
|
|
221
|
+
}
|
|
222
|
+
ready() {
|
|
223
|
+
var _a, _b, _c;
|
|
224
|
+
return (_c = (_b = (_a = this.source).ready) === null || _b === void 0 ? void 0 : _b.call(_a)) !== null && _c !== void 0 ? _c : Promise.resolve();
|
|
225
|
+
}
|
|
226
|
+
onOpen(handler) {
|
|
227
|
+
var _a, _b, _c;
|
|
228
|
+
return (_c = (_b = (_a = this.source).onOpen) === null || _b === void 0 ? void 0 : _b.call(_a, handler)) !== null && _c !== void 0 ? _c : (() => undefined);
|
|
229
|
+
}
|
|
230
|
+
send(data) {
|
|
231
|
+
this.source.send(this.translator.outbound ? this.translator.outbound(data) : data);
|
|
232
|
+
}
|
|
233
|
+
onMessage(handler) {
|
|
234
|
+
return this.source.onMessage(raw => {
|
|
235
|
+
let translated;
|
|
236
|
+
try {
|
|
237
|
+
translated = this.translator.inbound ? this.translator.inbound(raw) : raw;
|
|
238
|
+
}
|
|
239
|
+
catch (e) {
|
|
240
|
+
this.emitError(e, { scope: 'translatedNetwork.inbound' });
|
|
241
|
+
return;
|
|
242
|
+
}
|
|
243
|
+
if (translated === undefined)
|
|
244
|
+
return; // dropped by translator
|
|
245
|
+
handler(translated);
|
|
246
|
+
});
|
|
247
|
+
}
|
|
248
|
+
configure(options) {
|
|
249
|
+
var _a, _b;
|
|
250
|
+
(_b = (_a = this.source).configure) === null || _b === void 0 ? void 0 : _b.call(_a, options);
|
|
251
|
+
}
|
|
252
|
+
onError(handler) {
|
|
253
|
+
this.errorHandlers.add(handler);
|
|
254
|
+
return () => this.errorHandlers.delete(handler);
|
|
255
|
+
}
|
|
256
|
+
close(code, reason) {
|
|
257
|
+
this.unsubscribeSourceError();
|
|
258
|
+
this.errorHandlers.clear();
|
|
259
|
+
this.source.close(code, reason);
|
|
260
|
+
}
|
|
261
|
+
emitError(error, context) {
|
|
262
|
+
for (const handler of [...this.errorHandlers])
|
|
263
|
+
handler(error, Object.assign(Object.assign({}, context), { network: this }));
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
//# sourceMappingURL=decorators.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"decorators.js","sourceRoot":"","sources":["../../../src/socket/decorators.ts"],"names":[],"mappings":"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"}
|
package/dist/esm/socket/index.js
CHANGED
|
@@ -7,6 +7,8 @@
|
|
|
7
7
|
export * from './types.js';
|
|
8
8
|
export * from './transport.js';
|
|
9
9
|
export * from './websocket.js';
|
|
10
|
+
export * from './decorators.js';
|
|
11
|
+
export * from './multi.js';
|
|
10
12
|
//! NOTE: the in-memory peer simulator (`./socket`) is intentionally NOT re-exported here.
|
|
11
13
|
//! It is a test/dev utility — import it via the isolated `lemon-model/socket/testing` entry
|
|
12
14
|
//! so production (esp. frontend) bundles do not pull in the simulator runtime.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/socket/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,cAAc,SAAS,CAAC;AACxB,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/socket/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,cAAc,SAAS,CAAC;AACxB,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,SAAS,CAAC;AAExB,0FAA0F;AAC1F,4FAA4F;AAC5F,+EAA+E"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
/** `scope` values `MultiSocketNetwork` puts on `SocketErrorContext` */
|
|
2
|
+
export const MULTI_NETWORK_SCOPE = {
|
|
3
|
+
send: 'network.multi.send',
|
|
4
|
+
};
|
|
5
|
+
/**
|
|
6
|
+
* `NetworkSupportable` composite over N (>=2) sockets.
|
|
7
|
+
*
|
|
8
|
+
* `send`/`readyState`/`ready`/`onOpen` delegate to the main socket (index 0) only (01 no-breakage).
|
|
9
|
+
* `sendAll` is the only member that touches every socket; failures never throw and are only
|
|
10
|
+
* observable via `onError`.
|
|
11
|
+
*/
|
|
12
|
+
class MultiSocketNetwork {
|
|
13
|
+
constructor(networks) {
|
|
14
|
+
this.networks = networks;
|
|
15
|
+
/** array (not Set) so a handler subscribed twice fires twice, matching the underlying delegation path */
|
|
16
|
+
this.errorHandlers = [];
|
|
17
|
+
}
|
|
18
|
+
get readyState() {
|
|
19
|
+
return this.networks[0].readyState;
|
|
20
|
+
}
|
|
21
|
+
ready() {
|
|
22
|
+
var _a, _b, _c;
|
|
23
|
+
return (_c = (_b = (_a = this.networks[0]).ready) === null || _b === void 0 ? void 0 : _b.call(_a)) !== null && _c !== void 0 ? _c : Promise.resolve();
|
|
24
|
+
}
|
|
25
|
+
onOpen(handler) {
|
|
26
|
+
var _a, _b, _c;
|
|
27
|
+
return (_c = (_b = (_a = this.networks[0]).onOpen) === null || _b === void 0 ? void 0 : _b.call(_a, handler)) !== null && _c !== void 0 ? _c : (() => undefined);
|
|
28
|
+
}
|
|
29
|
+
send(data) {
|
|
30
|
+
this.networks[0].send(data);
|
|
31
|
+
}
|
|
32
|
+
/** send to every socket independently; each failure is caught and re-emitted with index, never thrown */
|
|
33
|
+
sendAll(data) {
|
|
34
|
+
this.networks.forEach((network, index) => this.trySend(network, data, index));
|
|
35
|
+
}
|
|
36
|
+
onMessage(handler) {
|
|
37
|
+
const unsubscribes = this.networks.map(network => network.onMessage(handler));
|
|
38
|
+
return () => unsubscribes.forEach(unsubscribe => unsubscribe());
|
|
39
|
+
}
|
|
40
|
+
onError(handler) {
|
|
41
|
+
const unsubscribes = this.networks.map((network, index) => network.onError((error, context) => {
|
|
42
|
+
const tagged = Object.assign(Object.assign({}, context), { network: this, index });
|
|
43
|
+
handler(error, tagged);
|
|
44
|
+
}));
|
|
45
|
+
this.errorHandlers.push(handler);
|
|
46
|
+
return () => {
|
|
47
|
+
unsubscribes.forEach(unsubscribe => unsubscribe());
|
|
48
|
+
const index = this.errorHandlers.indexOf(handler);
|
|
49
|
+
if (index >= 0)
|
|
50
|
+
this.errorHandlers.splice(index, 1);
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
configure(options) {
|
|
54
|
+
this.networks.forEach(network => { var _a; return (_a = network.configure) === null || _a === void 0 ? void 0 : _a.call(network, options); });
|
|
55
|
+
}
|
|
56
|
+
/** close every socket independently (idempotent); onError subscriptions stay alive so post-close sendAll failures are still observable */
|
|
57
|
+
close(code, reason) {
|
|
58
|
+
this.networks.forEach(network => {
|
|
59
|
+
try {
|
|
60
|
+
network.close(code, reason);
|
|
61
|
+
}
|
|
62
|
+
catch (_a) {
|
|
63
|
+
// ignore; the other sockets must still be closed
|
|
64
|
+
}
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
trySend(network, data, index) {
|
|
68
|
+
try {
|
|
69
|
+
network.send(data);
|
|
70
|
+
}
|
|
71
|
+
catch (e) {
|
|
72
|
+
const context = { scope: MULTI_NETWORK_SCOPE.send, network: this, index };
|
|
73
|
+
for (const handler of [...this.errorHandlers]) {
|
|
74
|
+
try {
|
|
75
|
+
handler(e, context);
|
|
76
|
+
}
|
|
77
|
+
catch (_a) {
|
|
78
|
+
// sendAll() must never throw; a throwing consumer handler cannot break the other sockets' send
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
export function createMultiSocketNetwork(input) {
|
|
85
|
+
const count = Array.isArray(input) ? input.length : input.count;
|
|
86
|
+
if (count < 2) {
|
|
87
|
+
throw new Error(`@networks (2+) is required - createMultiSocketNetwork(${count})`);
|
|
88
|
+
}
|
|
89
|
+
const networks = Array.isArray(input)
|
|
90
|
+
? input
|
|
91
|
+
: Array.from({ length: count }, (_, index) => input.networkFactory(index));
|
|
92
|
+
return new MultiSocketNetwork(networks);
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=multi.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"multi.js","sourceRoot":"","sources":["../../../src/socket/multi.ts"],"names":[],"mappings":"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"}
|
|
@@ -186,7 +186,9 @@ export class Peer {
|
|
|
186
186
|
this.logger = (_c = options === null || options === void 0 ? void 0 : options.logger) !== null && _c !== void 0 ? _c : noopSocketLogger;
|
|
187
187
|
this.id = (_d = options === null || options === void 0 ? void 0 : options.id) !== null && _d !== void 0 ? _d : this.identityProvider.nextPeerId();
|
|
188
188
|
this.networkOptions = asNetworkOptions(options);
|
|
189
|
-
this.jsonTransportOptions = asJSONTransportOptions(options === null || options === void 0 ? void 0 : options.jsonTransport, this.
|
|
189
|
+
this.jsonTransportOptions = asJSONTransportOptions(mergeReliableShortcut(options === null || options === void 0 ? void 0 : options.jsonTransport, options === null || options === void 0 ? void 0 : options.reliable, (top, nested) => this.log('warn', 'jsonTransport.reliable overrides top-level reliable shortcut', 'peer.constructor', {
|
|
190
|
+
data: { reliable: top, jsonTransportReliable: nested },
|
|
191
|
+
})), this.networkOptions.maxPacketBytes);
|
|
190
192
|
this.log('debug', 'peer created', 'peer.constructor');
|
|
191
193
|
}
|
|
192
194
|
/** assigned client id when this peer is connected to another peer */
|
|
@@ -254,14 +256,23 @@ export class Peer {
|
|
|
254
256
|
const serverTransportOptions = server.jsonTransportOptions;
|
|
255
257
|
const clientTransportOptions = this.jsonTransportOptions;
|
|
256
258
|
const clientId = server.accept(this, downlink, serverTransportOptions);
|
|
257
|
-
|
|
258
|
-
|
|
259
|
+
/**
|
|
260
|
+
* connect() wiring — docs/specs/reliable-chunk-transport/02-design.md "Peer 통합" 배선표 그대로:
|
|
261
|
+
* | instance | readNetwork | writeNetwork | receiver | sender | clientId | localTransportOptions | remoteTransportOptions |
|
|
262
|
+
* |----------|-------------|--------------|----------|--------------|-----------|------------------------|-------------------------|
|
|
263
|
+
* | server | uplink | downlink | server | this(client) | clientId | serverTransportOptions | clientTransportOptions |
|
|
264
|
+
* | client | downlink | uplink | this | server | undefined | clientTransportOptions | serverTransportOptions |
|
|
265
|
+
* flipping any column here reproduces an error-free hang, not a thrown error.
|
|
266
|
+
*/
|
|
267
|
+
server.attachClientTransport(clientId, Peer.attachTransport(uplink, downlink, server, this, clientId, serverTransportOptions, clientTransportOptions));
|
|
268
|
+
const clientTransport = Peer.attachTransport(downlink, uplink, this, server, undefined, clientTransportOptions, serverTransportOptions);
|
|
259
269
|
this.server = {
|
|
260
270
|
peer: server,
|
|
261
271
|
clientId,
|
|
262
272
|
network: uplink,
|
|
263
273
|
transportOptions: clientTransportOptions,
|
|
264
|
-
receiverTransport:
|
|
274
|
+
receiverTransport: clientTransport,
|
|
275
|
+
senderTransport: (clientTransportOptions === null || clientTransportOptions === void 0 ? void 0 : clientTransportOptions.reliable) ? clientTransport : undefined,
|
|
265
276
|
};
|
|
266
277
|
this.assignedClientId = clientId;
|
|
267
278
|
this.log('info', 'peer connected', 'peer.connect', {
|
|
@@ -390,10 +401,13 @@ export class Peer {
|
|
|
390
401
|
this.clients.set(clientId, { peer: client, network, transportOptions });
|
|
391
402
|
return clientId;
|
|
392
403
|
}
|
|
393
|
-
|
|
404
|
+
attachClientTransport(clientId, transport) {
|
|
405
|
+
var _a;
|
|
394
406
|
const link = this.clients.get(clientId);
|
|
395
|
-
if (link)
|
|
396
|
-
|
|
407
|
+
if (!link)
|
|
408
|
+
return;
|
|
409
|
+
link.receiverTransport = transport;
|
|
410
|
+
link.senderTransport = ((_a = link.transportOptions) === null || _a === void 0 ? void 0 : _a.reliable) ? transport : undefined;
|
|
397
411
|
}
|
|
398
412
|
detachClient(clientId) {
|
|
399
413
|
if (!clientId)
|
|
@@ -410,7 +424,7 @@ export class Peer {
|
|
|
410
424
|
this.clients.delete(clientId);
|
|
411
425
|
}
|
|
412
426
|
closeLink(link) {
|
|
413
|
-
var _a, _b;
|
|
427
|
+
var _a, _b, _c, _d;
|
|
414
428
|
this.log('debug', 'closing peer link', 'peer.closeLink', {
|
|
415
429
|
remotePeerId: link.peer.id,
|
|
416
430
|
clientId: link.clientId,
|
|
@@ -418,6 +432,8 @@ export class Peer {
|
|
|
418
432
|
});
|
|
419
433
|
(_b = (_a = link.receiverTransport) === null || _a === void 0 ? void 0 : _a.detach) === null || _b === void 0 ? void 0 : _b.call(_a);
|
|
420
434
|
link.receiverTransport = undefined;
|
|
435
|
+
(_d = (_c = link.senderTransport) === null || _c === void 0 ? void 0 : _c.detach) === null || _d === void 0 ? void 0 : _d.call(_c); //! idempotent — reliable links share receiverTransport's instance
|
|
436
|
+
link.senderTransport = undefined;
|
|
421
437
|
link.network.close();
|
|
422
438
|
}
|
|
423
439
|
static reconnectPair(client, server, clientId) {
|
|
@@ -431,12 +447,16 @@ export class Peer {
|
|
|
431
447
|
const { uplink, downlink } = Peer.createNetworkPair(client, server, 'peer.reconnect');
|
|
432
448
|
client.closeLink(clientLink);
|
|
433
449
|
server.closeLink(serverLink);
|
|
450
|
+
const clientTransportOptions = client.jsonTransportOptions;
|
|
451
|
+
const serverTransportOptions = server.jsonTransportOptions;
|
|
434
452
|
clientLink.network = uplink;
|
|
435
|
-
clientLink.transportOptions =
|
|
436
|
-
clientLink.receiverTransport = Peer.
|
|
453
|
+
clientLink.transportOptions = clientTransportOptions;
|
|
454
|
+
clientLink.receiverTransport = Peer.attachTransport(downlink, uplink, client, server, undefined, clientTransportOptions, serverTransportOptions);
|
|
455
|
+
clientLink.senderTransport = (clientTransportOptions === null || clientTransportOptions === void 0 ? void 0 : clientTransportOptions.reliable) ? clientLink.receiverTransport : undefined;
|
|
437
456
|
serverLink.network = downlink;
|
|
438
|
-
serverLink.transportOptions =
|
|
439
|
-
serverLink.receiverTransport = Peer.
|
|
457
|
+
serverLink.transportOptions = serverTransportOptions;
|
|
458
|
+
serverLink.receiverTransport = Peer.attachTransport(uplink, downlink, server, client, clientId, serverTransportOptions, clientTransportOptions);
|
|
459
|
+
serverLink.senderTransport = (serverTransportOptions === null || serverTransportOptions === void 0 ? void 0 : serverTransportOptions.reliable) ? serverLink.receiverTransport : undefined;
|
|
440
460
|
client.assignedClientId = clientId;
|
|
441
461
|
client.log('info', 'peer link networks replaced', 'peer.reconnectPair', {
|
|
442
462
|
remotePeerId: server.id,
|
|
@@ -449,16 +469,22 @@ export class Peer {
|
|
|
449
469
|
networkId: getNetworkId(downlink),
|
|
450
470
|
});
|
|
451
471
|
}
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
472
|
+
/**
|
|
473
|
+
* reliable-on locals merge write+read networks into one instance (Peer 통합 절):
|
|
474
|
+
* writeNetwork carries send()+ack/nack/error, receiveNetwork(=readNetwork) carries the onMessage subscription.
|
|
475
|
+
* off (remoteTransportOptions only, or neither) keeps the existing receiver-only/raw paths untouched.
|
|
476
|
+
*/
|
|
477
|
+
static attachTransport(readNetwork, writeNetwork, receiver, sender, clientId, localTransportOptions, remoteTransportOptions, logger) {
|
|
478
|
+
var _a, _b, _c;
|
|
479
|
+
if (localTransportOptions === null || localTransportOptions === void 0 ? void 0 : localTransportOptions.reliable) {
|
|
480
|
+
const reliable = localTransportOptions.reliable === true ? {} : localTransportOptions.reliable;
|
|
481
|
+
const transport = createJSONTransport(writeNetwork, Object.assign(Object.assign({}, localTransportOptions), { reliable: Object.assign(Object.assign({}, reliable), { receiveNetwork: readNetwork }), logger: (_b = (_a = localTransportOptions.logger) !== null && _a !== void 0 ? _a : logger) !== null && _b !== void 0 ? _b : receiver.logger }));
|
|
456
482
|
transport.onMessage(message => receiver.dispatch(message, sender, clientId).catch(e => receiver.rejectPending(message === null || message === void 0 ? void 0 : message.mid, e)));
|
|
457
483
|
transport.onError((error, context) => {
|
|
458
484
|
receiver.log('error', 'peer transport error', 'peer.transport', {
|
|
459
485
|
remotePeerId: sender.id,
|
|
460
486
|
clientId,
|
|
461
|
-
networkId: getNetworkId(
|
|
487
|
+
networkId: getNetworkId(writeNetwork),
|
|
462
488
|
error,
|
|
463
489
|
data: { scope: context.scope },
|
|
464
490
|
});
|
|
@@ -466,7 +492,22 @@ export class Peer {
|
|
|
466
492
|
});
|
|
467
493
|
return transport;
|
|
468
494
|
}
|
|
469
|
-
|
|
495
|
+
if (remoteTransportOptions) {
|
|
496
|
+
const transport = createJSONTransport(readNetwork, Object.assign(Object.assign({}, remoteTransportOptions), { logger: (_c = remoteTransportOptions.logger) !== null && _c !== void 0 ? _c : receiver.logger }));
|
|
497
|
+
transport.onMessage(message => receiver.dispatch(message, sender, clientId).catch(e => receiver.rejectPending(message === null || message === void 0 ? void 0 : message.mid, e)));
|
|
498
|
+
transport.onError((error, context) => {
|
|
499
|
+
receiver.log('error', 'peer transport error', 'peer.transport', {
|
|
500
|
+
remotePeerId: sender.id,
|
|
501
|
+
clientId,
|
|
502
|
+
networkId: getNetworkId(readNetwork),
|
|
503
|
+
error,
|
|
504
|
+
data: { scope: context.scope },
|
|
505
|
+
});
|
|
506
|
+
receiver.emitError(error, Object.assign(Object.assign({}, context), { scope: `peer.transport.${context.scope}`, peer: receiver }));
|
|
507
|
+
});
|
|
508
|
+
return transport;
|
|
509
|
+
}
|
|
510
|
+
readNetwork.onMessage(data => receiver.receiveNetworkData(data, sender, clientId));
|
|
470
511
|
return undefined;
|
|
471
512
|
}
|
|
472
513
|
createPeerNetwork(toPeer) {
|
|
@@ -536,7 +577,7 @@ export class Peer {
|
|
|
536
577
|
});
|
|
537
578
|
const _deliver = () => __awaiter(this, void 0, void 0, function* () {
|
|
538
579
|
try {
|
|
539
|
-
this.sendToLink(target, message);
|
|
580
|
+
yield this.sendToLink(target, message);
|
|
540
581
|
}
|
|
541
582
|
catch (e) {
|
|
542
583
|
this.log('error', 'peer publish failed', 'peer.publish', {
|
|
@@ -677,7 +718,7 @@ export class Peer {
|
|
|
677
718
|
type,
|
|
678
719
|
networkId: getNetworkId(link.network),
|
|
679
720
|
});
|
|
680
|
-
this.sendToLink(link, { type, data, mid });
|
|
721
|
+
yield this.sendToLink(link, { type, data, mid });
|
|
681
722
|
}
|
|
682
723
|
}
|
|
683
724
|
catch (e) {
|
|
@@ -693,6 +734,8 @@ export class Peer {
|
|
|
693
734
|
_deliver();
|
|
694
735
|
}
|
|
695
736
|
sendToLink(link, message) {
|
|
737
|
+
if (link.senderTransport)
|
|
738
|
+
return link.senderTransport.send(message);
|
|
696
739
|
if (link.transportOptions) {
|
|
697
740
|
splitJSON(message, link.transportOptions).send(link.network);
|
|
698
741
|
}
|
|
@@ -760,7 +803,7 @@ export class SocketFactory {
|
|
|
760
803
|
}
|
|
761
804
|
/** create and register a peer */
|
|
762
805
|
peer(options) {
|
|
763
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s;
|
|
806
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u;
|
|
764
807
|
const peer = createPeer({
|
|
765
808
|
latencyMs: (_a = options === null || options === void 0 ? void 0 : options.latencyMs) !== null && _a !== void 0 ? _a : (_b = this.options) === null || _b === void 0 ? void 0 : _b.latencyMs,
|
|
766
809
|
jitterMs: (_c = options === null || options === void 0 ? void 0 : options.jitterMs) !== null && _c !== void 0 ? _c : (_d = this.options) === null || _d === void 0 ? void 0 : _d.jitterMs,
|
|
@@ -770,7 +813,8 @@ export class SocketFactory {
|
|
|
770
813
|
networkFactory: (_l = options === null || options === void 0 ? void 0 : options.networkFactory) !== null && _l !== void 0 ? _l : (_m = this.options) === null || _m === void 0 ? void 0 : _m.networkFactory,
|
|
771
814
|
logger: (_o = options === null || options === void 0 ? void 0 : options.logger) !== null && _o !== void 0 ? _o : (_p = this.options) === null || _p === void 0 ? void 0 : _p.logger,
|
|
772
815
|
jsonTransport: (_q = options === null || options === void 0 ? void 0 : options.jsonTransport) !== null && _q !== void 0 ? _q : (_r = this.options) === null || _r === void 0 ? void 0 : _r.jsonTransport,
|
|
773
|
-
|
|
816
|
+
reliable: (_s = options === null || options === void 0 ? void 0 : options.reliable) !== null && _s !== void 0 ? _s : (_t = this.options) === null || _t === void 0 ? void 0 : _t.reliable,
|
|
817
|
+
id: (_u = options === null || options === void 0 ? void 0 : options.id) !== null && _u !== void 0 ? _u : this.nextFactoryPeerId(options),
|
|
774
818
|
});
|
|
775
819
|
this.peers.set(peer.id, peer);
|
|
776
820
|
return peer;
|
|
@@ -805,6 +849,22 @@ const asNetworkOptions = (options) => {
|
|
|
805
849
|
maxPacketBytes: (_d = options === null || options === void 0 ? void 0 : options.maxPacketBytes) !== null && _d !== void 0 ? _d : DEFAULT_MAX_PACKET_BYTES,
|
|
806
850
|
});
|
|
807
851
|
};
|
|
852
|
+
/**
|
|
853
|
+
* merges the `PeerOptions.reliable` shortcut into `jsonTransport` before resolution.
|
|
854
|
+
* off (`reliable` falsy) returns `jsonTransport` untouched — the shortcut path is inert unless used.
|
|
855
|
+
* an explicit `jsonTransport.reliable` wins over the shortcut when both are set; `onMismatch` fires
|
|
856
|
+
* when both are set to different values, so the caller can warn without duplicating this check.
|
|
857
|
+
*/
|
|
858
|
+
const mergeReliableShortcut = (jsonTransport, reliable, onMismatch) => {
|
|
859
|
+
var _a;
|
|
860
|
+
if (!reliable)
|
|
861
|
+
return jsonTransport;
|
|
862
|
+
const transportOptions = jsonTransport && jsonTransport !== true ? jsonTransport : {};
|
|
863
|
+
if (transportOptions.reliable !== undefined && transportOptions.reliable !== reliable) {
|
|
864
|
+
onMismatch === null || onMismatch === void 0 ? void 0 : onMismatch(reliable, transportOptions.reliable);
|
|
865
|
+
}
|
|
866
|
+
return Object.assign(Object.assign({}, transportOptions), { reliable: (_a = transportOptions.reliable) !== null && _a !== void 0 ? _a : reliable });
|
|
867
|
+
};
|
|
808
868
|
const asJSONTransportOptions = (options, peerMaxPacketBytes) => {
|
|
809
869
|
if (!options)
|
|
810
870
|
return undefined;
|