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,250 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Client = void 0;
4
+ // src/cluster/client.ts
5
+ const handler_1 = require("../internal/cluster/handler");
6
+ const index_1 = require("../internal/command/index");
7
+ const request_1 = require("../types/request");
8
+ const err_1 = require("../internal/err");
9
+ const types_1 = require("../types");
10
+ class Client {
11
+ constructor(handler) {
12
+ this.codecs = null;
13
+ this.handler = handler;
14
+ // Invalidate codecs on any reconnect (leader or follower change)
15
+ handler.setOnReconnectCallback?.(() => {
16
+ this.codecs = null;
17
+ });
18
+ }
19
+ static async create(cfg) {
20
+ if (!cfg)
21
+ throw (0, err_1.RzError)('cfg must not be null', types_1.ErrorKind.Client);
22
+ const handler = new handler_1.Handler({
23
+ SeedNodeIds: cfg.seedNodeIds,
24
+ APIPort: cfg.apiPort,
25
+ TCPPort: cfg.tcpPort,
26
+ AuthToken: cfg.authToken || '',
27
+ Timeout: cfg.timeout || 5000,
28
+ HttpTimeout: cfg.httpTimeout || 3000,
29
+ KeepAlive: cfg.keepAlive || 30000,
30
+ MaxActiveConns: cfg.maxActiveConns || 100,
31
+ NodeProbeInterval: 2000, // 2 seconds
32
+ DiscoveryAddr: cfg.discoveryAddr || '',
33
+ StaticDiscovery: cfg.staticDiscovery || [],
34
+ });
35
+ const client = new Client(handler);
36
+ // Wait for handler to be ready
37
+ const start = Date.now();
38
+ const timeout = cfg.timeout || 5000;
39
+ while (Date.now() - start < timeout * 3) {
40
+ if (handler.isReady()) {
41
+ break;
42
+ }
43
+ await new Promise(r => setTimeout(r, 50));
44
+ }
45
+ client.codecs = await client.fetchCodecs();
46
+ return client;
47
+ }
48
+ async getCodecsInternal() {
49
+ if (this.codecs != null) {
50
+ return this.codecs;
51
+ }
52
+ this.codecs = await this.fetchCodecs();
53
+ return this.codecs;
54
+ }
55
+ async fetchCodecs() {
56
+ const payload = (0, index_1.buildGetCodecsPayload)();
57
+ const resp = await this.handler.execute(false, payload);
58
+ if (resp.status === 'ERROR' && resp.fields.length > 0) {
59
+ throw (0, err_1.RzError)(resp.fields[0].data.toString('utf8'));
60
+ }
61
+ const codecs = (0, index_1.parseGetCodecsResp)(resp.status, resp.fields);
62
+ if (!codecs)
63
+ throw (0, err_1.RzError)('failed to parse codecs from server');
64
+ return codecs;
65
+ }
66
+ assertOk(resp, context) {
67
+ if (resp.status === 'ERROR') {
68
+ const msg = resp.fields.length > 0 ? resp.fields[0].data.toString('utf8') : 'unknown error';
69
+ throw (0, err_1.RzError)(`${context}: ${msg}`);
70
+ }
71
+ if (resp.status !== 'SUCCESS') {
72
+ throw (0, err_1.RzError)(`${context}: unexpected status "${resp.status}"`);
73
+ }
74
+ }
75
+ // ———————————————————————— PUBLIC API ————————————————————————
76
+ async getCodecs() {
77
+ if (this.codecs)
78
+ return this.codecs;
79
+ this.codecs = await this.fetchCodecs();
80
+ return this.codecs;
81
+ }
82
+ async setProp(p) {
83
+ const codecs = await this.getCodecsInternal();
84
+ const [valid, errMsg] = (0, request_1.verifySetPropPayload)(p, codecs);
85
+ if (!valid)
86
+ throw (0, err_1.RzError)(errMsg);
87
+ const payload = (0, index_1.buildSetPropPayload)(p);
88
+ const resp = await this.handler.execute(true, payload);
89
+ this.assertOk(resp, 'setProp');
90
+ return (0, index_1.parseSetPropResp)(resp.status, resp.fields);
91
+ }
92
+ async setRoomPkg(p) {
93
+ const codecs = await this.getCodecsInternal();
94
+ const [valid, errMsg] = (0, request_1.verifySetRoomPkgPayload)(p, codecs);
95
+ if (!valid)
96
+ throw (0, err_1.RzError)(errMsg);
97
+ const payload = (0, index_1.buildSetRoomPkgPayload)(p);
98
+ const resp = await this.handler.execute(true, payload);
99
+ this.assertOk(resp, 'setRoomPkg');
100
+ return (0, index_1.parseSetRoomPkgResp)(resp.status, resp.fields);
101
+ }
102
+ async setRoomAvl(p) {
103
+ const [valid, errMsg] = (0, request_1.verifyUpdRoomAvlPayload)(p);
104
+ if (!valid)
105
+ throw (0, err_1.RzError)(errMsg);
106
+ const payload = (0, index_1.buildSetRoomAvlPayload)(p);
107
+ const resp = await this.handler.execute(true, payload);
108
+ this.assertOk(resp, 'setRoomAvl');
109
+ return (0, index_1.parseSetRoomAvlResp)(resp.status, resp.fields);
110
+ }
111
+ async incRoomAvl(p) {
112
+ const [valid, errMsg] = (0, request_1.verifyUpdRoomAvlPayload)(p);
113
+ if (!valid)
114
+ throw (0, err_1.RzError)(errMsg);
115
+ const payload = (0, index_1.buildIncRoomAvlPayload)(p);
116
+ const resp = await this.handler.execute(true, payload);
117
+ this.assertOk(resp, 'incRoomAvl');
118
+ return (0, index_1.parseIncRoomAvlResp)(resp.status, resp.fields);
119
+ }
120
+ async decRoomAvl(p) {
121
+ const [valid, errMsg] = (0, request_1.verifyUpdRoomAvlPayload)(p);
122
+ if (!valid)
123
+ throw (0, err_1.RzError)(errMsg);
124
+ const payload = (0, index_1.buildDecRoomAvlPayload)(p);
125
+ const resp = await this.handler.execute(true, payload);
126
+ this.assertOk(resp, 'decRoomAvl');
127
+ return (0, index_1.parseDecRoomAvlResp)(resp.status, resp.fields);
128
+ }
129
+ async searchProp(p) {
130
+ const codecs = await this.getCodecsInternal();
131
+ const [valid, errMsg] = (0, request_1.verifySearchPropPayload)(p, codecs);
132
+ if (!valid)
133
+ throw (0, err_1.RzError)(errMsg);
134
+ const payload = (0, index_1.buildSearchPropPayload)(p);
135
+ const resp = await this.handler.execute(false, payload);
136
+ this.assertOk(resp, 'searchProp');
137
+ return (0, index_1.parseSearchPropResp)(resp.status, resp.fields);
138
+ }
139
+ async searchAvail(p) {
140
+ const codecs = await this.getCodecsInternal();
141
+ const [valid, errMsg] = (0, request_1.verifySearchAvailPayload)(p, codecs);
142
+ if (!valid)
143
+ throw (0, err_1.RzError)(errMsg);
144
+ const payload = (0, index_1.buildSearchAvailPayload)(p);
145
+ const resp = await this.handler.execute(false, payload);
146
+ this.assertOk(resp, 'searchAvail');
147
+ return (0, index_1.parseSearchAvailResp)(codecs, resp.status, resp.fields);
148
+ }
149
+ async propExist(propertyID) {
150
+ if (!propertyID?.trim())
151
+ throw (0, err_1.RzError)('propertyID is required');
152
+ const payload = (0, index_1.buildPropExistPayload)(propertyID.trim());
153
+ const resp = await this.handler.execute(false, payload);
154
+ this.assertOk(resp, 'propExist');
155
+ return (0, index_1.parsePropExistResp)(resp.status, resp.fields);
156
+ }
157
+ async propRoomExist(p) {
158
+ if (!p.propertyID?.trim())
159
+ throw (0, err_1.RzError)('propertyID is required');
160
+ if (!p.roomType?.trim())
161
+ throw (0, err_1.RzError)('roomType is required');
162
+ const payload = (0, index_1.buildPropRoomExistPayload)(p);
163
+ const resp = await this.handler.execute(false, payload);
164
+ this.assertOk(resp, 'propRoomExist');
165
+ return (0, index_1.parsePropRoomExistResp)(resp.status, resp.fields);
166
+ }
167
+ async propRoomList(propertyID) {
168
+ if (!propertyID?.trim())
169
+ throw (0, err_1.RzError)('propertyID is required');
170
+ const payload = (0, index_1.buildPropRoomListPayload)(propertyID.trim());
171
+ const resp = await this.handler.execute(false, payload);
172
+ this.assertOk(resp, 'propRoomList');
173
+ return (0, index_1.parsePropRoomListResp)(resp.status, resp.fields);
174
+ }
175
+ async propRoomDateList(p) {
176
+ if (!p.propertyID?.trim())
177
+ throw (0, err_1.RzError)('propertyID is required');
178
+ if (!p.roomType?.trim())
179
+ throw (0, err_1.RzError)('roomType is required');
180
+ const payload = (0, index_1.buildPropRoomDateListPayload)(p);
181
+ const resp = await this.handler.execute(false, payload);
182
+ this.assertOk(resp, 'propRoomDateList');
183
+ return (0, index_1.parsePropRoomDateListResp)(resp.status, resp.fields);
184
+ }
185
+ async delProp(propertyID) {
186
+ if (!propertyID?.trim())
187
+ throw (0, err_1.RzError)('propertyID is required');
188
+ const payload = (0, index_1.buildDelPropPayload)(propertyID.trim());
189
+ const resp = await this.handler.execute(true, payload);
190
+ this.assertOk(resp, 'delProp');
191
+ return (0, index_1.parseDelPropResp)(resp.status, resp.fields);
192
+ }
193
+ async delSegment(segment) {
194
+ if (!segment?.trim())
195
+ throw (0, err_1.RzError)('segment is required');
196
+ const payload = (0, index_1.buildDelSegmentPayload)(segment.trim());
197
+ const resp = await this.handler.execute(true, payload);
198
+ this.assertOk(resp, 'delSegment');
199
+ return (0, index_1.parseDelSegmentResp)(resp.status, resp.fields);
200
+ }
201
+ async delPropDay(p) {
202
+ const [valid, errMsg] = (0, request_1.verifyDelPropDayRequest)(p);
203
+ if (!valid)
204
+ throw (0, err_1.RzError)(errMsg);
205
+ const payload = (0, index_1.buildDelPropDayPayload)(p);
206
+ const resp = await this.handler.execute(true, payload);
207
+ this.assertOk(resp, 'delPropDay');
208
+ return (0, index_1.parseDelPropDayResp)(resp.status, resp.fields);
209
+ }
210
+ async delPropRoom(p) {
211
+ if (!p.propertyID?.trim())
212
+ throw (0, err_1.RzError)('propertyID is required');
213
+ if (!p.roomType?.trim())
214
+ throw (0, err_1.RzError)('roomType is required');
215
+ const payload = (0, index_1.buildDelPropRoomPayload)(p);
216
+ const resp = await this.handler.execute(true, payload);
217
+ this.assertOk(resp, 'delPropRoom');
218
+ return (0, index_1.parseDelPropRoomResp)(resp.status, resp.fields);
219
+ }
220
+ async delRoomDay(p) {
221
+ const [valid, errMsg] = (0, request_1.verifyDelRoomDayRequest)(p);
222
+ if (!valid)
223
+ throw (0, err_1.RzError)(errMsg);
224
+ const payload = (0, index_1.buildDelRoomDayPayload)(p);
225
+ const resp = await this.handler.execute(true, payload);
226
+ this.assertOk(resp, 'delRoomDay');
227
+ return (0, index_1.parseDelRoomDayResp)(resp.status, resp.fields);
228
+ }
229
+ async getPropRoomDay(p) {
230
+ const [valid, errMsg] = (0, request_1.verifyGetRoomDayRequest)(p);
231
+ if (!valid)
232
+ throw (0, err_1.RzError)(errMsg);
233
+ const payload = (0, index_1.buildGetPropRoomDayPayload)(p);
234
+ const resp = await this.handler.execute(false, payload);
235
+ this.assertOk(resp, 'getPropRoomDay');
236
+ const codecs = await this.getCodecsInternal();
237
+ return (0, index_1.parseGetPropRoomDayResp)(codecs, resp.status, resp.fields);
238
+ }
239
+ async getSegments() {
240
+ const payload = (0, index_1.buildGetSegmentsPayload)();
241
+ const resp = await this.handler.execute(false, payload);
242
+ this.assertOk(resp, 'getSegments');
243
+ return (0, index_1.parseGetSegmentsResp)(resp.status, resp.fields);
244
+ }
245
+ async close() {
246
+ await this.handler.close();
247
+ }
248
+ }
249
+ exports.Client = Client;
250
+ //# sourceMappingURL=api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/cluster/api.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ import { NodeAddr } from "../types/discovery";
2
+ export declare class ClusterConfig {
3
+ seedNodeIds: string;
4
+ apiPort: number;
5
+ tcpPort: number;
6
+ authToken: string;
7
+ timeout: number;
8
+ httpTimeout: number;
9
+ keepAlive: number;
10
+ maxActiveConns: number;
11
+ discoveryAddr: string;
12
+ staticDiscovery: NodeAddr[];
13
+ }
14
+ export declare class ClusterConfigBuilder {
15
+ private config;
16
+ private constructor();
17
+ static new(): ClusterConfigBuilder;
18
+ withSeedNodeIds(seeds: string): this;
19
+ withDiscoveryAddr(discoveryAddr: string): this;
20
+ withStaticDiscovery(staticDiscovery: NodeAddr[]): this;
21
+ withAPIPort(port: number): this;
22
+ withTCPPort(port: number): this;
23
+ withToken(token: string): this;
24
+ withTimeout(ms: number): this;
25
+ withHttpTimeout(ms: number): this;
26
+ withKeepAlive(ms: number): this;
27
+ withMaxActiveConns(n: number): this;
28
+ build(): ClusterConfig;
29
+ }
30
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/cluster/config.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAE9C,qBAAa,aAAa;IACtB,WAAW,SAAM;IACjB,OAAO,SAAK;IACZ,OAAO,SAAK;IACZ,SAAS,SAAM;IACf,OAAO,SAAS;IAChB,WAAW,SAAS;IACpB,SAAS,SAAU;IACnB,cAAc,SAAO;IAErB,aAAa,SAAM;IACnB,eAAe,EAAE,QAAQ,EAAE,CAAM;CACpC;AAED,qBAAa,oBAAoB;IAC7B,OAAO,CAAC,MAAM,CAAuB;IAErC,OAAO;IAEP,MAAM,CAAC,GAAG,IAAI,oBAAoB;IAIlC,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAKpC,iBAAiB,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI;IAK9C,mBAAmB,CAAC,eAAe,EAAE,QAAQ,EAAE,GAAG,IAAI;IAKtD,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAK/B,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAK/B,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAK9B,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAK7B,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAKjC,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAK/B,kBAAkB,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI;IAKnC,KAAK,IAAI,aAAa;CAezB"}
@@ -0,0 +1,86 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ClusterConfigBuilder = exports.ClusterConfig = void 0;
4
+ const err_1 = require("../internal/err");
5
+ const types_1 = require("../types");
6
+ class ClusterConfig {
7
+ constructor() {
8
+ this.seedNodeIds = '';
9
+ this.apiPort = 0;
10
+ this.tcpPort = 0;
11
+ this.authToken = '';
12
+ this.timeout = 2000; // ms
13
+ this.httpTimeout = 5000; // ms
14
+ this.keepAlive = 30000; // ms
15
+ this.maxActiveConns = 100;
16
+ this.discoveryAddr = ''; // if set → HTTP discovery mode
17
+ this.staticDiscovery = []; // used only when discoveryAddr is empty
18
+ }
19
+ }
20
+ exports.ClusterConfig = ClusterConfig;
21
+ class ClusterConfigBuilder {
22
+ constructor() {
23
+ this.config = new ClusterConfig();
24
+ }
25
+ static new() {
26
+ return new ClusterConfigBuilder();
27
+ }
28
+ withSeedNodeIds(seeds) {
29
+ this.config.seedNodeIds = seeds.trim();
30
+ return this;
31
+ }
32
+ withDiscoveryAddr(discoveryAddr) {
33
+ this.config.discoveryAddr = discoveryAddr;
34
+ return this;
35
+ }
36
+ withStaticDiscovery(staticDiscovery) {
37
+ this.config.staticDiscovery = staticDiscovery;
38
+ return this;
39
+ }
40
+ withAPIPort(port) {
41
+ this.config.apiPort = port;
42
+ return this;
43
+ }
44
+ withTCPPort(port) {
45
+ this.config.tcpPort = port;
46
+ return this;
47
+ }
48
+ withToken(token) {
49
+ this.config.authToken = token;
50
+ return this;
51
+ }
52
+ withTimeout(ms) {
53
+ this.config.timeout = ms;
54
+ return this;
55
+ }
56
+ withHttpTimeout(ms) {
57
+ this.config.httpTimeout = ms;
58
+ return this;
59
+ }
60
+ withKeepAlive(ms) {
61
+ this.config.keepAlive = ms;
62
+ return this;
63
+ }
64
+ withMaxActiveConns(n) {
65
+ this.config.maxActiveConns = n > 0 ? n : 100;
66
+ return this;
67
+ }
68
+ build() {
69
+ const errors = [];
70
+ if (!this.config.seedNodeIds)
71
+ errors.push('at least one seed address is required');
72
+ if (this.config.tcpPort === 0)
73
+ errors.push('TCP port is required');
74
+ if (this.config.apiPort === 0)
75
+ errors.push('API port is required in clustered mode');
76
+ if (!this.config.authToken)
77
+ errors.push('authentication requires a token');
78
+ if (errors.length > 0) {
79
+ throw (0, err_1.RzError)(`ClusterConfig validation failed:\n • ${errors.join('\n • ')}`, types_1.ErrorKind.Client);
80
+ }
81
+ // Return a shallow clone + freeze for immutability
82
+ return Object.freeze({ ...this.config });
83
+ }
84
+ }
85
+ exports.ClusterConfigBuilder = ClusterConfigBuilder;
86
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/cluster/config.ts"],"names":[],"mappings":";;;AAAA,yCAA0C;AAC1C,oCAAqC;AAGrC,MAAa,aAAa;IAA1B;QACI,gBAAW,GAAG,EAAE,CAAC;QACjB,YAAO,GAAG,CAAC,CAAC;QACZ,YAAO,GAAG,CAAC,CAAC;QACZ,cAAS,GAAG,EAAE,CAAC;QACf,YAAO,GAAG,IAAK,CAAC,CAAQ,KAAK;QAC7B,gBAAW,GAAG,IAAK,CAAC,CAAK,KAAK;QAC9B,cAAS,GAAG,KAAM,CAAC,CAAM,KAAK;QAC9B,mBAAc,GAAG,GAAG,CAAC;QAErB,kBAAa,GAAG,EAAE,CAAC,CAAM,+BAA+B;QACxD,oBAAe,GAAe,EAAE,CAAC,CAAC,wCAAwC;IAC9E,CAAC;CAAA;AAZD,sCAYC;AAED,MAAa,oBAAoB;IAG7B;QAFQ,WAAM,GAAG,IAAI,aAAa,EAAE,CAAC;IAEb,CAAC;IAEzB,MAAM,CAAC,GAAG;QACN,OAAO,IAAI,oBAAoB,EAAE,CAAC;IACtC,CAAC;IAED,eAAe,CAAC,KAAa;QACzB,IAAI,CAAC,MAAM,CAAC,WAAW,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;QACvC,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,iBAAiB,CAAC,aAAqB;QACnC,IAAI,CAAC,MAAM,CAAC,aAAa,GAAG,aAAa,CAAC;QAC1C,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,mBAAmB,CAAC,eAA2B;QAC3C,IAAI,CAAC,MAAM,CAAC,eAAe,GAAG,eAAe,CAAC;QAC9C,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,WAAW,CAAC,IAAY;QACpB,IAAI,CAAC,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;QAC3B,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,WAAW,CAAC,IAAY;QACpB,IAAI,CAAC,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;QAC3B,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,SAAS,CAAC,KAAa;QACnB,IAAI,CAAC,MAAM,CAAC,SAAS,GAAG,KAAK,CAAC;QAC9B,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,WAAW,CAAC,EAAU;QAClB,IAAI,CAAC,MAAM,CAAC,OAAO,GAAG,EAAE,CAAC;QACzB,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,eAAe,CAAC,EAAU;QACtB,IAAI,CAAC,MAAM,CAAC,WAAW,GAAG,EAAE,CAAC;QAC7B,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,aAAa,CAAC,EAAU;QACpB,IAAI,CAAC,MAAM,CAAC,SAAS,GAAG,EAAE,CAAC;QAC3B,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,kBAAkB,CAAC,CAAS;QACxB,IAAI,CAAC,MAAM,CAAC,cAAc,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;QAC7C,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,KAAK;QACD,MAAM,MAAM,GAAa,EAAE,CAAC;QAE5B,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW;YAAE,MAAM,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC;QACnF,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,KAAK,CAAC;YAAE,MAAM,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;QACnE,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,KAAK,CAAC;YAAE,MAAM,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC;QACrF,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS;YAAE,MAAM,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;QAE3E,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpB,MAAM,IAAA,aAAO,EAAC,yCAAyC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,iBAAS,CAAC,MAAM,CAAC,CAAC;QACtG,CAAC;QAED,mDAAmD;QACnD,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;IAC7C,CAAC;CACJ;AA1ED,oDA0EC"}
@@ -0,0 +1,3 @@
1
+ export { Client as ClusterClient } from './api';
2
+ export * from './config';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cluster/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,aAAa,EAAE,MAAM,OAAO,CAAC;AAChD,cAAc,UAAU,CAAA"}
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.ClusterClient = void 0;
18
+ var api_1 = require("./api");
19
+ Object.defineProperty(exports, "ClusterClient", { enumerable: true, get: function () { return api_1.Client; } });
20
+ __exportStar(require("./config"), exports);
21
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cluster/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,6BAAgD;AAAvC,oGAAA,MAAM,OAAiB;AAChC,2CAAwB"}
@@ -0,0 +1,5 @@
1
+ export * from './api/client';
2
+ export * from './single';
3
+ export * from './cluster';
4
+ export * from './types';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,SAAS,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./api/client"), exports);
18
+ __exportStar(require("./single"), exports);
19
+ __exportStar(require("./cluster"), exports);
20
+ __exportStar(require("./types"), exports);
21
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,+CAA6B;AAC7B,2CAAyB;AACzB,4CAA0B;AAC1B,0CAAwB"}
@@ -0,0 +1,60 @@
1
+ import { RawResult } from '../protocol/types';
2
+ import { DiscoveryMap as IDiscoveryMap } from './httputil';
3
+ import { NodeAddr } from '../../types/discovery';
4
+ export declare class DiscoveryMap implements IDiscoveryMap {
5
+ private data;
6
+ resolve(nodeId: string): {
7
+ host: string;
8
+ tcpPort: number;
9
+ apiPort: number;
10
+ } | null;
11
+ update(nodes: NodeAddr[], defaultTcpPort: number, defaultApiPort: number): void;
12
+ setStatic(nodes: NodeAddr[], defaultTcpPort: number, defaultApiPort: number): void;
13
+ }
14
+ export interface HandlerConfig {
15
+ SeedNodeIds: string;
16
+ APIPort: number;
17
+ TCPPort: number;
18
+ AuthToken: string;
19
+ Timeout: number;
20
+ HttpTimeout: number;
21
+ KeepAlive: number;
22
+ MaxActiveConns: number;
23
+ NodeProbeInterval: number;
24
+ DiscoveryAddr: string;
25
+ StaticDiscovery: NodeAddr[];
26
+ }
27
+ export declare class Handler {
28
+ private cfg;
29
+ private discovery;
30
+ private leaderDemux;
31
+ private followerDemux;
32
+ private leaderConn?;
33
+ private followerConns;
34
+ private followerRRIndex;
35
+ private leaderClrID;
36
+ private followerClrID;
37
+ private reqChan;
38
+ private closed;
39
+ private onReconnect?;
40
+ private followerProbeTimer?;
41
+ private followerFastCheckTimer?;
42
+ private discoveryTimer?;
43
+ constructor(cfg: HandlerConfig);
44
+ setOnReconnectCallback(cb: () => void): void;
45
+ private removeFollower;
46
+ private updateDiscoveryMap;
47
+ private fetchExternalDiscovery;
48
+ private startDiscoveryTask;
49
+ private connect;
50
+ private reconnectLeader;
51
+ private syncFollowers;
52
+ private startLeaderWorker;
53
+ private startFollowerWorker;
54
+ private drainRequests;
55
+ private nextFollowerConnection;
56
+ execute(isWrite: boolean, payload: Buffer): Promise<RawResult>;
57
+ close(): Promise<void>;
58
+ isReady(): boolean;
59
+ }
60
+ //# sourceMappingURL=handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../../../src/internal/cluster/handler.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAS,MAAM,mBAAmB,CAAC;AAGrD,OAAO,EAAgC,YAAY,IAAI,aAAa,EAAE,MAAM,YAAY,CAAC;AAGzF,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAUjD,qBAAa,YAAa,YAAW,aAAa;IAC9C,OAAO,CAAC,IAAI,CAA8E;IAE1F,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAMlF,MAAM,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE,cAAc,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,IAAI;IAc/E,SAAS,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE,cAAc,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,IAAI;CAarF;AAmRD,MAAM,WAAW,aAAa;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,QAAQ,EAAE,CAAC;CAC/B;AAKD,qBAAa,OAAO;IAChB,OAAO,CAAC,GAAG,CAAgB;IAC3B,OAAO,CAAC,SAAS,CAAe;IAChC,OAAO,CAAC,WAAW,CAAW;IAC9B,OAAO,CAAC,aAAa,CAAW;IAChC,OAAO,CAAC,UAAU,CAAC,CAAa;IAChC,OAAO,CAAC,aAAa,CAAoB;IACzC,OAAO,CAAC,eAAe,CAAK;IAC5B,OAAO,CAAC,WAAW,CAAK;IACxB,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,OAAO,CAAwC;IACvD,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,WAAW,CAAC,CAAa;IAEjC,OAAO,CAAC,kBAAkB,CAAC,CAAiB;IAC5C,OAAO,CAAC,sBAAsB,CAAC,CAAiB;IAChD,OAAO,CAAC,cAAc,CAAC,CAAiB;gBAE5B,GAAG,EAAE,aAAa;IAoB9B,sBAAsB,CAAC,EAAE,EAAE,MAAM,IAAI;IAIrC,OAAO,CAAC,cAAc;IAatB,OAAO,CAAC,kBAAkB;YAOZ,sBAAsB;IAoCpC,OAAO,CAAC,kBAAkB;YA4BZ,OAAO;YAqCP,eAAe;YAoBf,aAAa;IA0C3B,OAAO,CAAC,iBAAiB;IAazB,OAAO,CAAC,mBAAmB;YAab,aAAa;IAoD3B,OAAO,CAAC,sBAAsB;IAqBxB,OAAO,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;IAmC9D,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAwB5B,OAAO,IAAI,OAAO;CAIrB"}