roomzin-js 1.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.
Files changed (171) hide show
  1. package/LICENSE +68 -0
  2. package/README.md +467 -0
  3. package/dist/api/client.d.ts +86 -0
  4. package/dist/api/client.d.ts.map +1 -0
  5. package/dist/api/client.js +3 -0
  6. package/dist/api/client.js.map +1 -0
  7. package/dist/cluster/api.d.ts +34 -0
  8. package/dist/cluster/api.d.ts.map +1 -0
  9. package/dist/cluster/api.js +250 -0
  10. package/dist/cluster/api.js.map +1 -0
  11. package/dist/cluster/config.d.ts +30 -0
  12. package/dist/cluster/config.d.ts.map +1 -0
  13. package/dist/cluster/config.js +86 -0
  14. package/dist/cluster/config.js.map +1 -0
  15. package/dist/cluster/index.d.ts +3 -0
  16. package/dist/cluster/index.d.ts.map +1 -0
  17. package/dist/cluster/index.js +21 -0
  18. package/dist/cluster/index.js.map +1 -0
  19. package/dist/index.d.ts +5 -0
  20. package/dist/index.d.ts.map +1 -0
  21. package/dist/index.js +21 -0
  22. package/dist/index.js.map +1 -0
  23. package/dist/internal/cluster/handler.d.ts +60 -0
  24. package/dist/internal/cluster/handler.d.ts.map +1 -0
  25. package/dist/internal/cluster/handler.js +589 -0
  26. package/dist/internal/cluster/handler.js.map +1 -0
  27. package/dist/internal/cluster/httputil.d.ts +25 -0
  28. package/dist/internal/cluster/httputil.d.ts.map +1 -0
  29. package/dist/internal/cluster/httputil.js +193 -0
  30. package/dist/internal/cluster/httputil.js.map +1 -0
  31. package/dist/internal/command/dec_room_avl.d.ts +5 -0
  32. package/dist/internal/command/dec_room_avl.d.ts.map +1 -0
  33. package/dist/internal/command/dec_room_avl.js +49 -0
  34. package/dist/internal/command/dec_room_avl.js.map +1 -0
  35. package/dist/internal/command/del_prop.d.ts +4 -0
  36. package/dist/internal/command/del_prop.d.ts.map +1 -0
  37. package/dist/internal/command/del_prop.js +43 -0
  38. package/dist/internal/command/del_prop.js.map +1 -0
  39. package/dist/internal/command/del_prop_day.d.ts +5 -0
  40. package/dist/internal/command/del_prop_day.d.ts.map +1 -0
  41. package/dist/internal/command/del_prop_day.js +47 -0
  42. package/dist/internal/command/del_prop_day.js.map +1 -0
  43. package/dist/internal/command/del_prop_room.d.ts +5 -0
  44. package/dist/internal/command/del_prop_room.d.ts.map +1 -0
  45. package/dist/internal/command/del_prop_room.js +46 -0
  46. package/dist/internal/command/del_prop_room.js.map +1 -0
  47. package/dist/internal/command/del_room_day.d.ts +5 -0
  48. package/dist/internal/command/del_room_day.d.ts.map +1 -0
  49. package/dist/internal/command/del_room_day.js +47 -0
  50. package/dist/internal/command/del_room_day.js.map +1 -0
  51. package/dist/internal/command/del_segment.d.ts +4 -0
  52. package/dist/internal/command/del_segment.d.ts.map +1 -0
  53. package/dist/internal/command/del_segment.js +43 -0
  54. package/dist/internal/command/del_segment.js.map +1 -0
  55. package/dist/internal/command/get_codecs.d.ts +5 -0
  56. package/dist/internal/command/get_codecs.d.ts.map +1 -0
  57. package/dist/internal/command/get_codecs.js +38 -0
  58. package/dist/internal/command/get_codecs.js.map +1 -0
  59. package/dist/internal/command/get_prop_room_day.d.ts +7 -0
  60. package/dist/internal/command/get_prop_room_day.d.ts.map +1 -0
  61. package/dist/internal/command/get_prop_room_day.js +59 -0
  62. package/dist/internal/command/get_prop_room_day.js.map +1 -0
  63. package/dist/internal/command/get_segments.d.ts +5 -0
  64. package/dist/internal/command/get_segments.d.ts.map +1 -0
  65. package/dist/internal/command/get_segments.js +47 -0
  66. package/dist/internal/command/get_segments.js.map +1 -0
  67. package/dist/internal/command/inc_room_avl.d.ts +5 -0
  68. package/dist/internal/command/inc_room_avl.d.ts.map +1 -0
  69. package/dist/internal/command/inc_room_avl.js +46 -0
  70. package/dist/internal/command/inc_room_avl.js.map +1 -0
  71. package/dist/internal/command/index.d.ts +20 -0
  72. package/dist/internal/command/index.d.ts.map +1 -0
  73. package/dist/internal/command/index.js +61 -0
  74. package/dist/internal/command/index.js.map +1 -0
  75. package/dist/internal/command/prop_exist.d.ts +4 -0
  76. package/dist/internal/command/prop_exist.d.ts.map +1 -0
  77. package/dist/internal/command/prop_exist.js +43 -0
  78. package/dist/internal/command/prop_exist.js.map +1 -0
  79. package/dist/internal/command/prop_room_date_list.d.ts +5 -0
  80. package/dist/internal/command/prop_room_date_list.d.ts.map +1 -0
  81. package/dist/internal/command/prop_room_date_list.js +50 -0
  82. package/dist/internal/command/prop_room_date_list.js.map +1 -0
  83. package/dist/internal/command/prop_room_exist.d.ts +5 -0
  84. package/dist/internal/command/prop_room_exist.d.ts.map +1 -0
  85. package/dist/internal/command/prop_room_exist.js +44 -0
  86. package/dist/internal/command/prop_room_exist.js.map +1 -0
  87. package/dist/internal/command/prop_room_list.d.ts +4 -0
  88. package/dist/internal/command/prop_room_list.d.ts.map +1 -0
  89. package/dist/internal/command/prop_room_list.js +45 -0
  90. package/dist/internal/command/prop_room_list.js.map +1 -0
  91. package/dist/internal/command/search_avail.d.ts +7 -0
  92. package/dist/internal/command/search_avail.d.ts.map +1 -0
  93. package/dist/internal/command/search_avail.js +129 -0
  94. package/dist/internal/command/search_avail.js.map +1 -0
  95. package/dist/internal/command/search_prop.d.ts +5 -0
  96. package/dist/internal/command/search_prop.d.ts.map +1 -0
  97. package/dist/internal/command/search_prop.js +73 -0
  98. package/dist/internal/command/search_prop.js.map +1 -0
  99. package/dist/internal/command/set_prop.d.ts +5 -0
  100. package/dist/internal/command/set_prop.d.ts.map +1 -0
  101. package/dist/internal/command/set_prop.js +47 -0
  102. package/dist/internal/command/set_prop.js.map +1 -0
  103. package/dist/internal/command/set_room_avl.d.ts +5 -0
  104. package/dist/internal/command/set_room_avl.d.ts.map +1 -0
  105. package/dist/internal/command/set_room_avl.js +46 -0
  106. package/dist/internal/command/set_room_avl.js.map +1 -0
  107. package/dist/internal/command/set_room_pkg.d.ts +5 -0
  108. package/dist/internal/command/set_room_pkg.d.ts.map +1 -0
  109. package/dist/internal/command/set_room_pkg.js +76 -0
  110. package/dist/internal/command/set_room_pkg.js.map +1 -0
  111. package/dist/internal/err.d.ts +16 -0
  112. package/dist/internal/err.d.ts.map +1 -0
  113. package/dist/internal/err.js +39 -0
  114. package/dist/internal/err.js.map +1 -0
  115. package/dist/internal/protocol/frame.d.ts +6 -0
  116. package/dist/internal/protocol/frame.d.ts.map +1 -0
  117. package/dist/internal/protocol/frame.js +118 -0
  118. package/dist/internal/protocol/frame.js.map +1 -0
  119. package/dist/internal/protocol/helpers.d.ts +8 -0
  120. package/dist/internal/protocol/helpers.d.ts.map +1 -0
  121. package/dist/internal/protocol/helpers.js +101 -0
  122. package/dist/internal/protocol/helpers.js.map +1 -0
  123. package/dist/internal/protocol/login.d.ts +2 -0
  124. package/dist/internal/protocol/login.d.ts.map +1 -0
  125. package/dist/internal/protocol/login.js +30 -0
  126. package/dist/internal/protocol/login.js.map +1 -0
  127. package/dist/internal/protocol/types.d.ts +19 -0
  128. package/dist/internal/protocol/types.d.ts.map +1 -0
  129. package/dist/internal/protocol/types.js +8 -0
  130. package/dist/internal/protocol/types.js.map +1 -0
  131. package/dist/internal/single/handler.d.ts +30 -0
  132. package/dist/internal/single/handler.d.ts.map +1 -0
  133. package/dist/internal/single/handler.js +197 -0
  134. package/dist/internal/single/handler.js.map +1 -0
  135. package/dist/single/api.d.ts +38 -0
  136. package/dist/single/api.d.ts.map +1 -0
  137. package/dist/single/api.js +240 -0
  138. package/dist/single/api.js.map +1 -0
  139. package/dist/single/config.d.ts +21 -0
  140. package/dist/single/config.d.ts.map +1 -0
  141. package/dist/single/config.js +64 -0
  142. package/dist/single/config.js.map +1 -0
  143. package/dist/single/index.d.ts +3 -0
  144. package/dist/single/index.d.ts.map +1 -0
  145. package/dist/single/index.js +21 -0
  146. package/dist/single/index.js.map +1 -0
  147. package/dist/types/codecs.d.ts +5 -0
  148. package/dist/types/codecs.d.ts.map +1 -0
  149. package/dist/types/codecs.js +16 -0
  150. package/dist/types/codecs.js.map +1 -0
  151. package/dist/types/discovery.d.ts +7 -0
  152. package/dist/types/discovery.d.ts.map +1 -0
  153. package/dist/types/discovery.js +3 -0
  154. package/dist/types/discovery.js.map +1 -0
  155. package/dist/types/err.d.ts +20 -0
  156. package/dist/types/err.d.ts.map +1 -0
  157. package/dist/types/err.js +38 -0
  158. package/dist/types/err.js.map +1 -0
  159. package/dist/types/index.d.ts +5 -0
  160. package/dist/types/index.d.ts.map +1 -0
  161. package/dist/types/index.js +21 -0
  162. package/dist/types/index.js.map +1 -0
  163. package/dist/types/request.d.ts +94 -0
  164. package/dist/types/request.d.ts.map +1 -0
  165. package/dist/types/request.js +207 -0
  166. package/dist/types/request.js.map +1 -0
  167. package/dist/types/response.d.ts +22 -0
  168. package/dist/types/response.d.ts.map +1 -0
  169. package/dist/types/response.js +3 -0
  170. package/dist/types/response.js.map +1 -0
  171. package/package.json +34 -0
@@ -0,0 +1,589 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.Handler = exports.DiscoveryMap = void 0;
7
+ const net_1 = __importDefault(require("net"));
8
+ const events_1 = require("events");
9
+ const frame_1 = require("../protocol/frame");
10
+ const login_1 = require("../protocol/login");
11
+ const httputil_1 = require("./httputil");
12
+ const frame_2 = require("../protocol/frame");
13
+ const err_1 = require("../err");
14
+ const MAGIC = 0xFF;
15
+ const HEADER_SIZE = 9;
16
+ const MAX_BUFFER = 2 * 1024 * 1024;
17
+ const QUEUE_CAPACITY = 1024;
18
+ // ========================================================
19
+ // DiscoveryMap - thread-safe map for node ID -> address
20
+ // ========================================================
21
+ class DiscoveryMap {
22
+ constructor() {
23
+ this.data = new Map();
24
+ }
25
+ resolve(nodeId) {
26
+ const entry = this.data.get(nodeId);
27
+ if (!entry)
28
+ return null;
29
+ return { ...entry };
30
+ }
31
+ update(nodes, defaultTcpPort, defaultApiPort) {
32
+ const newData = new Map();
33
+ for (const n of nodes) {
34
+ const tcpPort = n.tcp_port ?? defaultTcpPort;
35
+ const apiPort = n.api_port ?? defaultApiPort;
36
+ newData.set(n.node_id, {
37
+ host: n.addr,
38
+ tcpPort,
39
+ apiPort,
40
+ });
41
+ }
42
+ this.data = newData;
43
+ }
44
+ setStatic(nodes, defaultTcpPort, defaultApiPort) {
45
+ const data = new Map();
46
+ for (const n of nodes) {
47
+ const tcpPort = n.tcp_port ?? defaultTcpPort;
48
+ const apiPort = n.api_port ?? defaultApiPort;
49
+ data.set(n.node_id, {
50
+ host: n.addr,
51
+ tcpPort,
52
+ apiPort,
53
+ });
54
+ }
55
+ this.data = data;
56
+ }
57
+ }
58
+ exports.DiscoveryMap = DiscoveryMap;
59
+ // ========================================================
60
+ // buildDiscoveryMap - creates map based on config
61
+ // ========================================================
62
+ function buildDiscoveryMap(cfg) {
63
+ const dm = new DiscoveryMap();
64
+ if (cfg.DiscoveryAddr) {
65
+ // HTTP mode: start empty, populated later by background task
66
+ return dm;
67
+ }
68
+ // Static mode
69
+ if (!cfg.StaticDiscovery || cfg.StaticDiscovery.length === 0) {
70
+ throw (0, err_1.RzError)('static discovery enabled but StaticDiscovery is empty');
71
+ }
72
+ dm.setStatic(cfg.StaticDiscovery, cfg.TCPPort, cfg.APIPort);
73
+ return dm;
74
+ }
75
+ // ========================================================
76
+ // Channel (unchanged)
77
+ // ========================================================
78
+ class Channel extends events_1.EventEmitter {
79
+ constructor(capacity = Infinity) {
80
+ super();
81
+ this.capacity = capacity;
82
+ this.buffer = [];
83
+ this.resolvers = [];
84
+ this.closed = false;
85
+ }
86
+ async send(value) {
87
+ if (this.closed)
88
+ throw (0, err_1.RzError)('channel closed');
89
+ if (this.resolvers.length > 0) {
90
+ this.resolvers.shift()(value);
91
+ return;
92
+ }
93
+ if (this.buffer.length < this.capacity) {
94
+ this.buffer.push(value);
95
+ return;
96
+ }
97
+ await new Promise(resolve => this.resolvers.push(resolve));
98
+ this.buffer.push(value);
99
+ }
100
+ async receive() {
101
+ if (this.buffer.length > 0)
102
+ return this.buffer.shift();
103
+ if (this.closed)
104
+ throw (0, err_1.RzError)('channel closed');
105
+ return new Promise(resolve => {
106
+ this.resolvers.push(resolve);
107
+ });
108
+ }
109
+ close() {
110
+ this.closed = true;
111
+ this.resolvers.forEach(r => r(undefined));
112
+ this.resolvers = [];
113
+ }
114
+ [Symbol.asyncIterator]() {
115
+ return {
116
+ next: () => this.receive().then(value => ({ value, done: false })),
117
+ };
118
+ }
119
+ }
120
+ class DemuxMap {
121
+ constructor(maxAgeMs) {
122
+ this.map = new Map();
123
+ this.maxAgeMs = maxAgeMs;
124
+ this.timer = setInterval(() => this.cleanup(), maxAgeMs / 2).unref();
125
+ }
126
+ store(id, p) {
127
+ this.map.set(id, p);
128
+ }
129
+ loadRemove(id) {
130
+ const p = this.map.get(id);
131
+ if (p) {
132
+ this.map.delete(id);
133
+ }
134
+ return [p, !!p];
135
+ }
136
+ cleanup() {
137
+ const threshold = Date.now() - this.maxAgeMs;
138
+ for (const [id, p] of this.map) {
139
+ if (!p.resolved && p.sentAt < threshold) {
140
+ clearTimeout(p.timer);
141
+ p.reject(new Error('request timeout'));
142
+ p.resolved = true;
143
+ this.map.delete(id);
144
+ }
145
+ }
146
+ }
147
+ destroy() {
148
+ clearInterval(this.timer);
149
+ for (const p of this.map.values()) {
150
+ if (!p.resolved) {
151
+ clearTimeout(p.timer);
152
+ p.reject(new Error('handler closed'));
153
+ p.resolved = true;
154
+ }
155
+ }
156
+ this.map.clear();
157
+ }
158
+ }
159
+ // ========================================================
160
+ // Connection
161
+ // ========================================================
162
+ class Connection extends events_1.EventEmitter {
163
+ constructor(socket, demux, cfg, owner, address) {
164
+ super();
165
+ this.demux = demux;
166
+ this.closed = false;
167
+ this.pendingHeader = null;
168
+ this.socket = socket;
169
+ this.owner = owner;
170
+ this.address = address;
171
+ socket.setNoDelay(true);
172
+ socket.setKeepAlive(true, cfg.KeepAlive);
173
+ this.startReading();
174
+ socket.on('close', () => this.close());
175
+ socket.on('error', err => {
176
+ console.error('[cluster] socket error:', err.message);
177
+ this.close();
178
+ });
179
+ }
180
+ async startReading() {
181
+ try {
182
+ for await (const _ of this.readFrames()) {
183
+ // no-op
184
+ }
185
+ }
186
+ catch (err) {
187
+ console.error('[cluster] frame read error:', err);
188
+ this.close();
189
+ }
190
+ }
191
+ async *readFrames() {
192
+ while (!this.closed) {
193
+ if (!this.pendingHeader) {
194
+ this.pendingHeader = Buffer.alloc(9);
195
+ await (0, frame_2.readFull)(this.socket, this.pendingHeader);
196
+ }
197
+ if (this.pendingHeader[0] !== 0xFF) {
198
+ throw (0, err_1.RzError)(`bad magic: 0x${this.pendingHeader[0].toString(16)}`);
199
+ }
200
+ const clrID = this.pendingHeader.readUInt32LE(1);
201
+ const payloadLen = this.pendingHeader.readUInt32LE(5);
202
+ const payload = Buffer.alloc(payloadLen);
203
+ await (0, frame_2.readFull)(this.socket, payload);
204
+ this.pendingHeader = null;
205
+ this.handleFrame(clrID, payload);
206
+ yield;
207
+ }
208
+ }
209
+ handleFrame(clrID, payload) {
210
+ if (payload.length < 1) {
211
+ this.close();
212
+ return;
213
+ }
214
+ const statusLen = payload[0];
215
+ if (payload.length < 1 + statusLen + 2) {
216
+ this.close();
217
+ return;
218
+ }
219
+ const status = payload.toString('utf8', 1, 1 + statusLen);
220
+ const fieldCnt = payload.readUInt16LE(1 + statusLen);
221
+ const fieldsData = payload.subarray(1 + statusLen + 2);
222
+ let fields = [];
223
+ try {
224
+ fields = (0, frame_1.parseFields)(fieldsData, fieldCnt);
225
+ }
226
+ catch (err) {
227
+ console.error('[cluster] field parse error:', err);
228
+ this.close();
229
+ return;
230
+ }
231
+ const [pending, found] = this.demux.loadRemove(clrID);
232
+ if (!found || !pending || pending.resolved)
233
+ return;
234
+ clearTimeout(pending.timer);
235
+ pending.resolved = true;
236
+ if (status === 'ERROR' && fields.length > 0) {
237
+ const code = fields[0].data.toString();
238
+ if (['308', '405', '503'].includes(code))
239
+ this.close();
240
+ }
241
+ pending.resolve({ status, fields });
242
+ }
243
+ write(frame) {
244
+ if (this.closed)
245
+ return;
246
+ this.socket.write(frame, err => {
247
+ if (err) {
248
+ console.error('[cluster] write error:', err.message);
249
+ this.close();
250
+ }
251
+ });
252
+ }
253
+ close() {
254
+ if (this.closed)
255
+ return;
256
+ this.closed = true;
257
+ this.socket.destroy();
258
+ this.pendingHeader = null;
259
+ if (this.owner && this.address) {
260
+ this.owner['removeFollower'](this.address);
261
+ }
262
+ this.emit('close');
263
+ }
264
+ }
265
+ // ========================================================
266
+ // Handler
267
+ // ========================================================
268
+ class Handler {
269
+ constructor(cfg) {
270
+ this.followerConns = [];
271
+ this.followerRRIndex = 0;
272
+ this.leaderClrID = 0;
273
+ this.followerClrID = 0;
274
+ this.reqChan = new Channel(QUEUE_CAPACITY);
275
+ this.closed = false;
276
+ this.cfg = cfg;
277
+ // Build discovery map (static or empty for HTTP mode)
278
+ this.discovery = buildDiscoveryMap(cfg);
279
+ this.leaderDemux = new DemuxMap(cfg.Timeout * 2);
280
+ this.followerDemux = new DemuxMap(cfg.Timeout * 2);
281
+ this.drainRequests();
282
+ this.startLeaderWorker();
283
+ this.startFollowerWorker();
284
+ // Start discovery task if in HTTP mode
285
+ if (cfg.DiscoveryAddr) {
286
+ this.startDiscoveryTask();
287
+ }
288
+ }
289
+ setOnReconnectCallback(cb) {
290
+ this.onReconnect = cb;
291
+ }
292
+ removeFollower(addr) {
293
+ const index = this.followerConns.findIndex(c => c.address === addr);
294
+ if (index !== -1) {
295
+ this.followerConns.splice(index, 1);
296
+ if (this.followerRRIndex >= this.followerConns.length) {
297
+ this.followerRRIndex = 0;
298
+ }
299
+ }
300
+ }
301
+ // ========================================================
302
+ // updateDiscoveryMap - replaces map content (HTTP mode)
303
+ // ========================================================
304
+ updateDiscoveryMap(nodes) {
305
+ this.discovery.update(nodes, this.cfg.TCPPort, this.cfg.APIPort);
306
+ }
307
+ // ========================================================
308
+ // fetchExternalDiscovery - calls external discovery service
309
+ // ========================================================
310
+ async fetchExternalDiscovery() {
311
+ if (!this.cfg.DiscoveryAddr) {
312
+ throw new Error('discovery address not configured');
313
+ }
314
+ const controller = new AbortController();
315
+ const timeoutId = setTimeout(() => controller.abort(), 10000);
316
+ try {
317
+ const response = await fetch(this.cfg.DiscoveryAddr, {
318
+ method: 'GET',
319
+ signal: controller.signal,
320
+ });
321
+ clearTimeout(timeoutId);
322
+ if (!response.ok) {
323
+ throw new Error(`discovery service returned status: ${response.status}`);
324
+ }
325
+ const data = await response.json();
326
+ if (!data.nodes || data.nodes.length === 0) {
327
+ throw new Error('discovery service returned empty node list');
328
+ }
329
+ return data.nodes;
330
+ }
331
+ catch (error) {
332
+ clearTimeout(timeoutId);
333
+ throw error;
334
+ }
335
+ }
336
+ // ========================================================
337
+ // startDiscoveryTask - background task for HTTP mode
338
+ // ========================================================
339
+ startDiscoveryTask() {
340
+ const interval = this.cfg.NodeProbeInterval || 2000;
341
+ // Initial fetch on startup
342
+ this.fetchExternalDiscovery()
343
+ .then(nodes => {
344
+ if (nodes.length > 0) {
345
+ this.updateDiscoveryMap(nodes);
346
+ }
347
+ })
348
+ .catch(() => {
349
+ // silent fail - keep using empty map
350
+ });
351
+ // Periodic fetch
352
+ this.discoveryTimer = setInterval(() => {
353
+ this.fetchExternalDiscovery()
354
+ .then(nodes => {
355
+ if (nodes.length > 0) {
356
+ this.updateDiscoveryMap(nodes);
357
+ }
358
+ })
359
+ .catch(() => {
360
+ // silent fail - keep using existing map
361
+ });
362
+ }, interval).unref();
363
+ }
364
+ async connect(host) {
365
+ return new Promise((resolve, reject) => {
366
+ const socket = net_1.default.createConnection({
367
+ host,
368
+ port: this.cfg.TCPPort,
369
+ keepAlive: true,
370
+ keepAliveInitialDelay: this.cfg.KeepAlive,
371
+ });
372
+ const timer = setTimeout(() => {
373
+ socket.destroy();
374
+ reject(new Error('connect timeout'));
375
+ }, this.cfg.Timeout);
376
+ const cleanup = () => {
377
+ clearTimeout(timer);
378
+ socket.removeAllListeners();
379
+ };
380
+ socket.once('connect', () => {
381
+ socket.write((0, frame_1.prependHeader)(0, (0, login_1.buildLoginPayload)(this.cfg.AuthToken)));
382
+ });
383
+ socket.once('data', data => {
384
+ if (data.toString().includes('LOGIN OK')) {
385
+ cleanup();
386
+ resolve(socket);
387
+ }
388
+ });
389
+ socket.once('error', err => {
390
+ cleanup();
391
+ reject(err);
392
+ });
393
+ });
394
+ }
395
+ async reconnectLeader() {
396
+ try {
397
+ const { leader } = await (0, httputil_1.getClusterInfo)(this.cfg.SeedNodeIds, this.cfg.AuthToken, this.cfg.APIPort, this.cfg.HttpTimeout, this.discovery);
398
+ const socket = await this.connect(leader.addr);
399
+ const conn = new Connection(socket, this.leaderDemux, this.cfg);
400
+ this.leaderConn?.close();
401
+ this.leaderConn = conn;
402
+ this.onReconnect?.();
403
+ }
404
+ catch {
405
+ // silent fail
406
+ }
407
+ }
408
+ async syncFollowers() {
409
+ try {
410
+ const { followers } = await (0, httputil_1.getClusterInfo)(this.cfg.SeedNodeIds, this.cfg.AuthToken, this.cfg.APIPort, this.cfg.HttpTimeout, this.discovery);
411
+ const wanted = new Set(followers.map(f => f.addr));
412
+ // Update existing connections
413
+ for (let i = this.followerConns.length - 1; i >= 0; i--) {
414
+ const conn = this.followerConns[i];
415
+ if (!conn.address || !wanted.has(conn.address)) {
416
+ conn.close();
417
+ this.followerConns.splice(i, 1);
418
+ if (this.followerRRIndex >= this.followerConns.length) {
419
+ this.followerRRIndex = 0;
420
+ }
421
+ }
422
+ }
423
+ // Add new connections
424
+ for (const follower of followers) {
425
+ const exists = this.followerConns.some(c => c.address === follower.addr);
426
+ if (exists)
427
+ continue;
428
+ try {
429
+ const socket = await this.connect(follower.addr);
430
+ const conn = new Connection(socket, this.followerDemux, this.cfg, this, follower.addr);
431
+ this.followerConns.push(conn);
432
+ }
433
+ catch {
434
+ // ignore connection errors
435
+ }
436
+ }
437
+ }
438
+ catch {
439
+ // ignore sync errors
440
+ }
441
+ }
442
+ startLeaderWorker() {
443
+ (async () => {
444
+ let backoff = 100;
445
+ while (!this.closed) {
446
+ if (!this.leaderConn || this.leaderConn.closed) {
447
+ await this.reconnectLeader();
448
+ }
449
+ await new Promise(r => setTimeout(r, backoff + Math.random() * 50));
450
+ backoff = Math.min(backoff * 2, 2000);
451
+ }
452
+ })().catch(() => { });
453
+ }
454
+ startFollowerWorker() {
455
+ this.followerProbeTimer = setInterval(() => {
456
+ this.syncFollowers().catch(() => { });
457
+ }, this.cfg.NodeProbeInterval).unref();
458
+ this.followerFastCheckTimer = setInterval(() => {
459
+ const allClosed = [...this.followerConns.values()].every(c => c.closed);
460
+ if (allClosed && this.followerConns.length > 0) {
461
+ this.syncFollowers().catch(() => { });
462
+ }
463
+ }, 100).unref();
464
+ }
465
+ async drainRequests() {
466
+ try {
467
+ for await (const req of this.reqChan) {
468
+ if (this.closed)
469
+ break;
470
+ const deadline = Date.now() + this.cfg.Timeout * 3;
471
+ let backoff = 10;
472
+ let conn;
473
+ while (Date.now() < deadline) {
474
+ conn = req.isWrite ? this.leaderConn : this.nextFollowerConnection();
475
+ if (conn && !conn.closed)
476
+ break;
477
+ await new Promise(r => setTimeout(r, backoff));
478
+ backoff = Math.min(backoff * 2, 1000);
479
+ if (!req.isWrite)
480
+ await this.syncFollowers();
481
+ }
482
+ if (!conn || conn.closed) {
483
+ req.reject(new httputil_1.ClusterError('no healthy node'));
484
+ continue;
485
+ }
486
+ const clrID = req.isWrite
487
+ ? (this.leaderClrID = (this.leaderClrID + 1) >>> 0)
488
+ : (this.followerClrID = (this.followerClrID + 1) >>> 0);
489
+ const frame = (0, frame_1.prependHeader)(clrID, req.payload);
490
+ const demux = req.isWrite ? this.leaderDemux : this.followerDemux;
491
+ const pending = {
492
+ resolve: req.resolve,
493
+ reject: req.reject,
494
+ sentAt: Date.now(),
495
+ timer: setTimeout(() => {
496
+ const [p] = demux.loadRemove(clrID);
497
+ if (p && !p.resolved) {
498
+ p.reject(new Error('request timeout'));
499
+ p.resolved = true;
500
+ }
501
+ }, this.cfg.Timeout * 2).unref(),
502
+ };
503
+ demux.store(clrID, pending);
504
+ conn.write(frame);
505
+ pending.sentAt = Date.now();
506
+ }
507
+ }
508
+ catch (err) {
509
+ console.error('FATAL: request drain loop died:', err);
510
+ process.exit(1);
511
+ }
512
+ }
513
+ nextFollowerConnection() {
514
+ if (this.followerConns.length === 0)
515
+ return undefined;
516
+ const startIndex = this.followerRRIndex;
517
+ let attempts = 0;
518
+ while (attempts < this.followerConns.length) {
519
+ const index = (startIndex + attempts) % this.followerConns.length;
520
+ const conn = this.followerConns[index];
521
+ if (!conn.closed) {
522
+ this.followerRRIndex = (index + 1) % this.followerConns.length;
523
+ return conn;
524
+ }
525
+ attempts++;
526
+ }
527
+ return undefined;
528
+ }
529
+ async execute(isWrite, payload) {
530
+ if (payload.length === 0)
531
+ throw (0, err_1.RzError)('empty payload');
532
+ if (isWrite && !this.leaderConn) {
533
+ throw (0, err_1.RzError)("cluster has no leader");
534
+ }
535
+ const result = await new Promise((resolve, reject) => {
536
+ this.reqChan.send({ payload, resolve, reject, isWrite })
537
+ .catch(reject);
538
+ });
539
+ if (result.status === 'SUCCESS')
540
+ return result;
541
+ const code = result.fields[0]?.data.toString() || result.status;
542
+ const maxRetries = 5;
543
+ let attempts = 1;
544
+ while (attempts++ < maxRetries) {
545
+ if (code === '503' || code === '429') {
546
+ await new Promise(r => setTimeout(r, attempts * 100));
547
+ }
548
+ const retryResult = await new Promise((resolve, reject) => {
549
+ try {
550
+ this.reqChan.send({ payload, resolve, reject, isWrite });
551
+ }
552
+ catch (err) {
553
+ reject(err);
554
+ }
555
+ });
556
+ if (retryResult.status === 'SUCCESS')
557
+ return retryResult;
558
+ }
559
+ throw (0, err_1.RzError)(`${code}`);
560
+ }
561
+ async close() {
562
+ this.closed = true;
563
+ this.reqChan.close();
564
+ if (this.followerProbeTimer !== undefined) {
565
+ clearInterval(this.followerProbeTimer);
566
+ this.followerProbeTimer = undefined;
567
+ }
568
+ if (this.followerFastCheckTimer !== undefined) {
569
+ clearInterval(this.followerFastCheckTimer);
570
+ this.followerFastCheckTimer = undefined;
571
+ }
572
+ if (this.discoveryTimer !== undefined) {
573
+ clearInterval(this.discoveryTimer);
574
+ this.discoveryTimer = undefined;
575
+ }
576
+ this.leaderDemux.destroy();
577
+ this.followerDemux.destroy();
578
+ this.leaderConn?.close();
579
+ for (const c of this.followerConns.values())
580
+ c.close();
581
+ this.followerConns = [];
582
+ }
583
+ isReady() {
584
+ // Check if we have a leader connection (for writes) or any followers (for reads)
585
+ return this.leaderConn !== undefined && !this.leaderConn.closed;
586
+ }
587
+ }
588
+ exports.Handler = Handler;
589
+ //# sourceMappingURL=handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handler.js","sourceRoot":"","sources":["../../../src/internal/cluster/handler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ import { NodeAddr } from "../../types/discovery";
2
+ export interface DiscoveryMap {
3
+ resolve(nodeId: string): {
4
+ host: string;
5
+ tcpPort: number;
6
+ apiPort: number;
7
+ } | null;
8
+ }
9
+ export interface NodeInfo {
10
+ node_id: string;
11
+ zone_id: string;
12
+ shard_id: string;
13
+ leader_id: string;
14
+ }
15
+ export declare class ClusterError extends Error {
16
+ constructor(message: string);
17
+ }
18
+ export declare const ErrNoLeaderAvailable: ClusterError;
19
+ export declare function getNodeInfo(host: string, port: number, authToken: string, timeoutMs: number): Promise<NodeInfo>;
20
+ export declare function healthCheck(host: string, port: number, authToken: string, timeoutMs: number): Promise<string>;
21
+ export declare function getClusterInfo(seedNodeIds: string, authToken: string, apiPort: number, httpTimeout: number, dmap: DiscoveryMap): Promise<{
22
+ leader: NodeAddr;
23
+ followers: NodeAddr[];
24
+ }>;
25
+ //# sourceMappingURL=httputil.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"httputil.d.ts","sourceRoot":"","sources":["../../../src/internal/cluster/httputil.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAEjD,MAAM,WAAW,YAAY;IACzB,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;CACtF;AAED,MAAM,WAAW,QAAQ;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACrB;AAED,qBAAa,YAAa,SAAQ,KAAK;gBACvB,OAAO,EAAE,MAAM;CAI9B;AAED,eAAO,MAAM,oBAAoB,cAAiD,CAAC;AA0CnF,wBAAsB,WAAW,CAC7B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,GAClB,OAAO,CAAC,QAAQ,CAAC,CAEnB;AAED,wBAAsB,WAAW,CAC7B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,GAClB,OAAO,CAAC,MAAM,CAAC,CA0BjB;AAwBD,wBAAsB,cAAc,CAChC,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,YAAY,GACnB,OAAO,CAAC;IAAE,MAAM,EAAE,QAAQ,CAAC;IAAC,SAAS,EAAE,QAAQ,EAAE,CAAA;CAAE,CAAC,CA8HtD"}