lemon-model 1.2.2 → 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 +3 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/logtrace/index.js +11 -0
- package/dist/esm/logtrace/index.js.map +1 -0
- package/dist/esm/logtrace/logtrace.js +251 -0
- package/dist/esm/logtrace/logtrace.js.map +1 -0
- package/dist/esm/logtrace/testing.js +77 -0
- package/dist/esm/logtrace/testing.js.map +1 -0
- package/dist/esm/progress/index.js +9 -0
- package/dist/esm/progress/index.js.map +1 -0
- package/dist/esm/progress/progress.js +256 -0
- package/dist/esm/progress/progress.js.map +1 -0
- package/dist/esm/progress/testing.js +98 -0
- package/dist/esm/progress/testing.js.map +1 -0
- 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/socket/websocket.js +18 -4
- package/dist/esm/socket/websocket.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 +3 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/logtrace/index.d.ts +7 -0
- package/dist/logtrace/index.js +27 -0
- package/dist/logtrace/index.js.map +1 -0
- package/dist/logtrace/logtrace.d.ts +99 -0
- package/dist/logtrace/logtrace.js +256 -0
- package/dist/logtrace/logtrace.js.map +1 -0
- package/dist/logtrace/testing.d.ts +40 -0
- package/dist/logtrace/testing.js +81 -0
- package/dist/logtrace/testing.js.map +1 -0
- package/dist/progress/index.d.ts +8 -0
- package/dist/{proxy → progress}/index.js +5 -9
- package/dist/progress/index.js.map +1 -0
- package/dist/progress/progress.d.ts +112 -0
- package/dist/progress/progress.js +263 -0
- package/dist/progress/progress.js.map +1 -0
- package/dist/progress/testing.d.ts +33 -0
- package/dist/progress/testing.js +102 -0
- package/dist/progress/testing.js.map +1 -0
- package/dist/socket/client/index.d.ts +9 -0
- package/dist/socket/client/index.js +26 -0
- 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/socket/websocket.d.ts +14 -0
- package/dist/socket/websocket.js +19 -5
- package/dist/socket/websocket.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 +13 -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
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"progress.js","sourceRoot":"","sources":["../../../src/progress/progress.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
var __rest = (this && this.__rest) || function (s, e) {
|
|
11
|
+
var t = {};
|
|
12
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
13
|
+
t[p] = s[p];
|
|
14
|
+
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
|
15
|
+
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
16
|
+
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
|
17
|
+
t[p[i]] = s[p[i]];
|
|
18
|
+
}
|
|
19
|
+
return t;
|
|
20
|
+
};
|
|
21
|
+
/**
|
|
22
|
+
* `progress/testing.ts`
|
|
23
|
+
* - isolated entry for the progress end-to-end loop harness.
|
|
24
|
+
* - kept OUT of the package root barrel so production bundles do not include the in-memory socket simulator.
|
|
25
|
+
*
|
|
26
|
+
* Usage (tests / dev only):
|
|
27
|
+
* import { runProgressLoop } from 'lemon-model/progress/testing';
|
|
28
|
+
*
|
|
29
|
+
* @copyright (C) 2026 LemonCloud Co Ltd. - All Rights Reserved.
|
|
30
|
+
*/
|
|
31
|
+
import { createNetwork } from '../socket/socket.js';
|
|
32
|
+
import { createProgressConsumer, createProgressReporter, } from './progress.js';
|
|
33
|
+
/**
|
|
34
|
+
* Run an end-to-end loop: script -> ProgressReporter -> NetworkSupportable -> ProgressConsumer,
|
|
35
|
+
* and return numeric metrics for assertion (same pattern as `buffer/testing.runGenAIStreamNetworkLoop`).
|
|
36
|
+
*/
|
|
37
|
+
export const runProgressLoop = (options) => __awaiter(void 0, void 0, void 0, function* () {
|
|
38
|
+
var _a, _b;
|
|
39
|
+
const startedAt = Date.now();
|
|
40
|
+
const network = createNetwork(Object.assign({}, options.networkOptions));
|
|
41
|
+
const typePrefix = (_b = (_a = options.consumerOptions) === null || _a === void 0 ? void 0 : _a.typePrefix) !== null && _b !== void 0 ? _b : 'progress:';
|
|
42
|
+
// Keep wire packets so specs can compare emitted, applied, and stale counts.
|
|
43
|
+
const rawPackets = [];
|
|
44
|
+
const unsubscribeRaw = network.onMessage(raw => rawPackets.push(raw));
|
|
45
|
+
const consumer = createProgressConsumer(network, options.consumerOptions);
|
|
46
|
+
let applied = 0;
|
|
47
|
+
const unsubscribeChange = consumer.onChange(() => (applied += 1));
|
|
48
|
+
let emitted = 0;
|
|
49
|
+
const reporter = createProgressReporter(message => {
|
|
50
|
+
emitted += 1;
|
|
51
|
+
network.send(JSON.stringify(message));
|
|
52
|
+
}, options.reporterOptions);
|
|
53
|
+
try {
|
|
54
|
+
const tasks = new Map();
|
|
55
|
+
// Reuse task handles by id so each script patch models a real task update.
|
|
56
|
+
const taskOf = (id) => {
|
|
57
|
+
const existing = tasks.get(id);
|
|
58
|
+
if (existing)
|
|
59
|
+
return existing;
|
|
60
|
+
const started = reporter.start(id);
|
|
61
|
+
tasks.set(id, started);
|
|
62
|
+
return started;
|
|
63
|
+
};
|
|
64
|
+
for (const patch of options.script) {
|
|
65
|
+
const { id, ts: _ts, seq: _seq, status, error } = patch, rest = __rest(patch, ["id", "ts", "seq", "status", "error"]);
|
|
66
|
+
const task = taskOf(id !== null && id !== void 0 ? id : 'task');
|
|
67
|
+
if (status === 'done')
|
|
68
|
+
task.done(rest);
|
|
69
|
+
else if (status === 'error')
|
|
70
|
+
task.error(error !== null && error !== void 0 ? error : 'error', rest);
|
|
71
|
+
else
|
|
72
|
+
task.update(Object.assign(Object.assign({}, rest), { error, status }));
|
|
73
|
+
}
|
|
74
|
+
reporter.close();
|
|
75
|
+
yield new Promise(resolve => { var _a; return setTimeout(resolve, (_a = options.settleMs) !== null && _a !== void 0 ? _a : 50); });
|
|
76
|
+
// Only matching progress envelopes can become stale drops on a shared network.
|
|
77
|
+
const arrived = rawPackets.filter(raw => raw.includes(`"type":"${typePrefix}`)).length;
|
|
78
|
+
return {
|
|
79
|
+
elapsedMs: Date.now() - startedAt,
|
|
80
|
+
packets: rawPackets.length,
|
|
81
|
+
packetBytes: rawPackets.reduce((sum, raw) => sum + byteLength(raw), 0),
|
|
82
|
+
maxPacketBytes: rawPackets.reduce((max, raw) => Math.max(max, byteLength(raw)), 0),
|
|
83
|
+
emitted,
|
|
84
|
+
applied,
|
|
85
|
+
staleDropped: arrived - applied,
|
|
86
|
+
finalStates: consumer.list(),
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
finally {
|
|
90
|
+
unsubscribeRaw();
|
|
91
|
+
unsubscribeChange();
|
|
92
|
+
consumer.close();
|
|
93
|
+
network.close();
|
|
94
|
+
}
|
|
95
|
+
});
|
|
96
|
+
const textEncoder = new TextEncoder();
|
|
97
|
+
const byteLength = (value) => textEncoder.encode(value).length;
|
|
98
|
+
//# sourceMappingURL=testing.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"testing.js","sourceRoot":"","sources":["../../../src/progress/testing.ts"],"names":[],"mappings":"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"}
|
|
@@ -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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"}
|