postchain-client 2.0.4 → 2.1.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 (109) hide show
  1. package/README.md +9 -7
  2. package/built/cjs/index.js +235 -118
  3. package/built/cjs/index.js.map +1 -1
  4. package/built/esm/index.js +19045 -17598
  5. package/built/esm/index.js.map +1 -1
  6. package/built/mocks/handlers.d.ts +8 -8
  7. package/built/mocks/handlers.js +4 -2
  8. package/built/mocks/handlers.js.map +1 -1
  9. package/built/mocks/servers.d.ts +1 -1
  10. package/built/resources/testData.d.ts +1 -2
  11. package/built/src/ICCF/IccfProofTxMaterialBuilder.d.ts +0 -1
  12. package/built/src/ICCF/IccfProofTxMaterialBuilder.js +3 -2
  13. package/built/src/ICCF/IccfProofTxMaterialBuilder.js.map +1 -1
  14. package/built/src/ICCF/error.d.ts +0 -1
  15. package/built/src/ICCF/interfaces.d.ts +0 -1
  16. package/built/src/ICCF/types.d.ts +0 -1
  17. package/built/src/ICCF/utils.d.ts +0 -1
  18. package/built/src/ICCF/utils.js +3 -1
  19. package/built/src/ICCF/utils.js.map +1 -1
  20. package/built/src/blockchainClient/blockchainClient.js +10 -10
  21. package/built/src/blockchainClient/blockchainClient.js.map +1 -1
  22. package/built/src/blockchainClient/errors.d.ts +0 -1
  23. package/built/src/blockchainClient/failoverStrategies.d.ts +5 -4
  24. package/built/src/blockchainClient/failoverStrategies.js +93 -55
  25. package/built/src/blockchainClient/failoverStrategies.js.map +1 -1
  26. package/built/src/blockchainClient/httpUtil.d.ts +0 -1
  27. package/built/src/blockchainClient/httpUtil.js +7 -2
  28. package/built/src/blockchainClient/httpUtil.js.map +1 -1
  29. package/built/src/blockchainClient/interface.d.ts +0 -1
  30. package/built/src/blockchainClient/nodeManager.d.ts +10 -7
  31. package/built/src/blockchainClient/nodeManager.js +47 -20
  32. package/built/src/blockchainClient/nodeManager.js.map +1 -1
  33. package/built/src/blockchainClient/requestWithFailoverStrategy.d.ts +0 -1
  34. package/built/src/blockchainClient/requestWithFailoverStrategy.js +2 -2
  35. package/built/src/blockchainClient/requestWithFailoverStrategy.js.map +1 -1
  36. package/built/src/blockchainClient/types.d.ts +2 -1
  37. package/built/src/blockchainClient/utils.d.ts +1 -2
  38. package/built/src/blockchainClient/utils.js +20 -15
  39. package/built/src/blockchainClient/utils.js.map +1 -1
  40. package/built/src/blockchainClient/validation/anchoringTransaction.d.ts +6 -7
  41. package/built/src/blockchainClient/validation/blockIdentifier.d.ts +2 -2
  42. package/built/src/blockchainClient/validation/blockIdentifier.js +4 -4
  43. package/built/src/blockchainClient/validation/blockIdentifier.js.map +1 -1
  44. package/built/src/blockchainClient/validation/bufferSchema.d.ts +1 -2
  45. package/built/src/blockchainClient/validation/networkSettings.d.ts +2 -2
  46. package/built/src/blockchainClient/validation/networkSettings.js +2 -2
  47. package/built/src/blockchainClient/validation/networkSettings.js.map +1 -1
  48. package/built/src/blockchainClient/validation/signMethod.d.ts +12 -13
  49. package/built/src/blockchainClient/validation/txRid.d.ts +1 -2
  50. package/built/src/encryption/encryption.d.ts +0 -1
  51. package/built/src/encryption/errors.d.ts +0 -1
  52. package/built/src/encryption/types.d.ts +0 -1
  53. package/built/src/formatter.d.ts +1 -2
  54. package/built/src/formatter.js +3 -4
  55. package/built/src/formatter.js.map +1 -1
  56. package/built/src/gtv/index.d.ts +1 -2
  57. package/built/src/gtv/types.d.ts +0 -1
  58. package/built/src/gtx/gtx.d.ts +0 -1
  59. package/built/src/gtx/gtx.js +2 -1
  60. package/built/src/gtx/gtx.js.map +1 -1
  61. package/built/src/gtx/serialization.d.ts +0 -1
  62. package/built/src/gtx/types.d.ts +0 -1
  63. package/built/src/utils/bufferUtils.d.ts +6 -0
  64. package/built/src/utils/bufferUtils.js +9 -0
  65. package/built/src/utils/bufferUtils.js.map +1 -0
  66. package/built/src/utils/calculateTransactionRid.d.ts +0 -1
  67. package/built/src/utils/decodeTransactionToGtx.d.ts +0 -1
  68. package/built/src/utils/encodeTransaction.d.ts +0 -1
  69. package/built/src/utils/http-utils.d.ts +19 -0
  70. package/built/src/utils/http-utils.js +36 -0
  71. package/built/src/utils/http-utils.js.map +1 -0
  72. package/built/test/common/mocks.d.ts +23 -24
  73. package/built/test/common/setups.d.ts +3 -4
  74. package/built/test/common/signatures.d.ts +9 -10
  75. package/built/test/common/validationMocks.d.ts +2 -3
  76. package/built/test/integration/clientQuery.test.js.map +1 -1
  77. package/built/test/integration/clientSendTransaction.test.js +1 -1
  78. package/built/test/integration/clientSendTransaction.test.js.map +1 -1
  79. package/built/test/integration/createClientIntegration.test.js +5 -21
  80. package/built/test/integration/createClientIntegration.test.js.map +1 -1
  81. package/built/test/integration/failoverStrategiesWithSmartTimeouts.test.d.ts +1 -0
  82. package/built/test/integration/failoverStrategiesWithSmartTimeouts.test.js +140 -0
  83. package/built/test/integration/failoverStrategiesWithSmartTimeouts.test.js.map +1 -0
  84. package/built/test/manual/iccfManually.test.js +2 -2
  85. package/built/test/manual/iccfManually.test.js.map +1 -1
  86. package/built/test/pcctf/helpers.js +2 -2
  87. package/built/test/pcctf/helpers.js.map +1 -1
  88. package/built/test/unit/ICCF/iccf.test.js +7 -4
  89. package/built/test/unit/ICCF/iccf.test.js.map +1 -1
  90. package/built/test/unit/ICCF/iccfProofMaterialBuilder.test.js +2 -2
  91. package/built/test/unit/failoverStrategies.test.js +36 -15
  92. package/built/test/unit/failoverStrategies.test.js.map +1 -1
  93. package/built/test/unit/networkErrorDetection.test.d.ts +1 -0
  94. package/built/test/unit/networkErrorDetection.test.js +433 -0
  95. package/built/test/unit/networkErrorDetection.test.js.map +1 -0
  96. package/built/test/unit/nodeMananger.test.js +3 -2
  97. package/built/test/unit/nodeMananger.test.js.map +1 -1
  98. package/built/test/unit/smartTimeouts.test.d.ts +1 -0
  99. package/built/test/unit/smartTimeouts.test.js +296 -0
  100. package/built/test/unit/smartTimeouts.test.js.map +1 -0
  101. package/built/test/unit/stickyNode.test.js +13 -13
  102. package/built/test/unit/stickyNode.test.js.map +1 -1
  103. package/built/test/unit/universalNodeRecovery.test.d.ts +1 -0
  104. package/built/test/unit/universalNodeRecovery.test.js +283 -0
  105. package/built/test/unit/universalNodeRecovery.test.js.map +1 -0
  106. package/built/umd/index.js +19070 -17625
  107. package/built/umd/index.js.map +1 -1
  108. package/changelog.md +31 -1
  109. package/package.json +11 -8
@@ -0,0 +1,433 @@
1
+ import { createNodeManager } from "../../src/blockchainClient/nodeManager";
2
+ import { isNetworkError, isHttpStatusError } from "../../src/utils/http-utils";
3
+ // Helper function to simulate smart timeout calculation
4
+ // This mimics the getUnreachableDuration function from failoverStrategies.ts
5
+ function getSmartTimeout(statusCode, error) {
6
+ if (isNetworkError(error)) {
7
+ const { code } = error;
8
+ if (code === "ENOTFOUND")
9
+ return 5 * 60 * 1000; // 5 minutes
10
+ if (code === "ECONNREFUSED")
11
+ return 5 * 60 * 1000; // 5 minutes
12
+ if (code === "ECONNRESET" || code === "ECONNABORTED")
13
+ return 30 * 1000; // 30 seconds
14
+ if (code === "EHOSTUNREACH" || code === "ENETUNREACH")
15
+ return 2 * 60 * 1000; // 2 minutes
16
+ if (code === "ETIMEDOUT")
17
+ return 60 * 1000; // 1 minute
18
+ return 30 * 1000; // Default for unknown network errors
19
+ }
20
+ if (statusCode) {
21
+ switch (statusCode) {
22
+ case 500:
23
+ return 10 * 1000; // 10 seconds
24
+ case 502:
25
+ return 30 * 1000; // 30 seconds
26
+ case 503:
27
+ return 2 * 1000; // 2 seconds
28
+ case 504:
29
+ return 60 * 1000; // 60 seconds
30
+ default:
31
+ return 5 * 1000; // 5 seconds default
32
+ }
33
+ }
34
+ return 5 * 1000; // Fallback
35
+ }
36
+ describe("Network Error Detection & Smart Timeouts", () => {
37
+ beforeEach(() => {
38
+ jest.clearAllMocks();
39
+ jest.useFakeTimers();
40
+ });
41
+ afterEach(() => {
42
+ jest.useRealTimers();
43
+ });
44
+ describe("Network Error Detection", () => {
45
+ describe("isNetworkError", () => {
46
+ it("should detect ENOTFOUND network errors", () => {
47
+ const dnsError = { code: "ENOTFOUND", message: "getaddrinfo ENOTFOUND example.com" };
48
+ expect(isNetworkError(dnsError)).toBe(true);
49
+ });
50
+ it("should detect ECONNREFUSED network errors", () => {
51
+ const connError = { code: "ECONNREFUSED", message: "connect ECONNREFUSED 127.0.0.1:8080" };
52
+ expect(isNetworkError(connError)).toBe(true);
53
+ });
54
+ it("should detect ETIMEDOUT network errors", () => {
55
+ const timeoutError = { code: "ETIMEDOUT", message: "connect ETIMEDOUT" };
56
+ expect(isNetworkError(timeoutError)).toBe(true);
57
+ });
58
+ it("should detect other network error codes", () => {
59
+ const errors = [
60
+ { code: "ECONNRESET" },
61
+ { code: "ECONNABORTED" },
62
+ { code: "EHOSTUNREACH" },
63
+ { code: "ENETUNREACH" },
64
+ { code: "EPIPE" },
65
+ ];
66
+ errors.forEach(error => {
67
+ expect(isNetworkError(error)).toBe(true);
68
+ });
69
+ });
70
+ it("should not detect regular errors as network errors", () => {
71
+ const regularError = new Error("Regular error");
72
+ expect(isNetworkError(regularError)).toBe(false);
73
+ });
74
+ it("should not detect HTTP errors as network errors", () => {
75
+ const httpError = { status: 500, message: "Internal Server Error" };
76
+ expect(isNetworkError(httpError)).toBe(false);
77
+ });
78
+ it("should handle null and undefined gracefully", () => {
79
+ expect(isNetworkError(null)).toBe(false);
80
+ expect(isNetworkError(undefined)).toBe(false);
81
+ expect(isNetworkError({})).toBe(false);
82
+ expect(isNetworkError("string")).toBe(false);
83
+ expect(isNetworkError(123)).toBe(false);
84
+ });
85
+ });
86
+ describe("isHttpStatusError", () => {
87
+ it("should detect HTTP status errors", () => {
88
+ const httpError = { status: 500 };
89
+ expect(isHttpStatusError(httpError)).toBe(true);
90
+ });
91
+ it("should detect various HTTP status codes", () => {
92
+ const statusCodes = [400, 401, 403, 404, 500, 502, 503, 504];
93
+ statusCodes.forEach(status => {
94
+ expect(isHttpStatusError({ status })).toBe(true);
95
+ });
96
+ });
97
+ it("should not detect network errors as HTTP errors", () => {
98
+ const networkError = { code: "ENOTFOUND" };
99
+ expect(isHttpStatusError(networkError)).toBe(false);
100
+ });
101
+ it("should handle invalid inputs gracefully", () => {
102
+ expect(isHttpStatusError(null)).toBe(false);
103
+ expect(isHttpStatusError(undefined)).toBe(false);
104
+ expect(isHttpStatusError({})).toBe(false);
105
+ expect(isHttpStatusError({ status: "500" })).toBe(false); // String instead of number
106
+ });
107
+ });
108
+ });
109
+ describe("Smart Timeout Function Tests", () => {
110
+ describe("getSmartTimeout direct tests", () => {
111
+ it("should return correct timeouts for network errors", () => {
112
+ expect(getSmartTimeout(undefined, { code: "ENOTFOUND" })).toBe(5 * 60 * 1000); // 5 minutes
113
+ expect(getSmartTimeout(undefined, { code: "ECONNREFUSED" })).toBe(5 * 60 * 1000); // 5 minutes
114
+ expect(getSmartTimeout(undefined, { code: "ETIMEDOUT" })).toBe(60 * 1000); // 1 minute
115
+ expect(getSmartTimeout(undefined, { code: "ECONNRESET" })).toBe(30 * 1000); // 30 seconds
116
+ expect(getSmartTimeout(undefined, { code: "ECONNABORTED" })).toBe(30 * 1000); // 30 seconds
117
+ expect(getSmartTimeout(undefined, { code: "EHOSTUNREACH" })).toBe(2 * 60 * 1000); // 2 minutes
118
+ expect(getSmartTimeout(undefined, { code: "ENETUNREACH" })).toBe(2 * 60 * 1000); // 2 minutes
119
+ });
120
+ it("should return correct timeouts for HTTP status codes", () => {
121
+ expect(getSmartTimeout(500)).toBe(10 * 1000); // 10 seconds
122
+ expect(getSmartTimeout(502)).toBe(30 * 1000); // 30 seconds
123
+ expect(getSmartTimeout(503)).toBe(2 * 1000); // 2 seconds
124
+ expect(getSmartTimeout(504)).toBe(60 * 1000); // 60 seconds
125
+ expect(getSmartTimeout(599)).toBe(5 * 1000); // Unknown status - default
126
+ });
127
+ it("should prioritize network errors over status codes", () => {
128
+ // When both are provided, network error should take precedence
129
+ expect(getSmartTimeout(500, { code: "ENOTFOUND" })).toBe(5 * 60 * 1000); // Network error timeout, not status code
130
+ expect(getSmartTimeout(503, { code: "ECONNREFUSED" })).toBe(5 * 60 * 1000); // Network error timeout, not status code
131
+ });
132
+ it("should return default timeout for unknown inputs", () => {
133
+ expect(getSmartTimeout()).toBe(5 * 1000); // No params
134
+ expect(getSmartTimeout(undefined, undefined)).toBe(5 * 1000); // Both undefined
135
+ expect(getSmartTimeout(undefined, { notACode: "invalid" })).toBe(5 * 1000); // Malformed error
136
+ expect(getSmartTimeout(0)).toBe(5 * 1000); // Invalid status code
137
+ });
138
+ });
139
+ });
140
+ describe("Smart Timeout Integration Tests", () => {
141
+ describe("Network Error Timeouts", () => {
142
+ it("should apply 5 minute timeout for DNS resolution errors (ENOTFOUND)", () => {
143
+ const nodeManager = createNodeManager({
144
+ nodeUrls: ["http://node1.example.com", "http://node2.example.com"],
145
+ unavailableDuration: 5000,
146
+ });
147
+ const dnsError = { code: "ENOTFOUND", message: "getaddrinfo ENOTFOUND node1.example.com" };
148
+ // Calculate smart timeout and apply it
149
+ const smartTimeout = getSmartTimeout(undefined, dnsError);
150
+ nodeManager.makeNodeUnavailable("http://node1.example.com", smartTimeout);
151
+ expect(nodeManager.nodes[0].isAvailable()).toBe(false);
152
+ // Fast forward 4 minutes 59 seconds - should still be unavailable
153
+ jest.advanceTimersByTime(4 * 60 * 1000 + 59 * 1000);
154
+ expect(nodeManager.nodes[0].isAvailable()).toBe(false);
155
+ // Fast forward 1 more second - should now be available
156
+ jest.advanceTimersByTime(1000);
157
+ expect(nodeManager.nodes[0].isAvailable()).toBe(true);
158
+ });
159
+ it("should apply 5 minute timeout for connection refused errors (ECONNREFUSED)", () => {
160
+ const nodeManager = createNodeManager({
161
+ nodeUrls: ["http://node1.example.com"],
162
+ unavailableDuration: 5000,
163
+ });
164
+ const connError = { code: "ECONNREFUSED", message: "connect ECONNREFUSED 127.0.0.1:8080" };
165
+ const smartTimeout = getSmartTimeout(undefined, connError);
166
+ nodeManager.makeNodeUnavailable("http://node1.example.com", smartTimeout);
167
+ expect(nodeManager.nodes[0].isAvailable()).toBe(false);
168
+ // Should be unavailable for 5 minutes
169
+ jest.advanceTimersByTime(5 * 60 * 1000 - 1000);
170
+ expect(nodeManager.nodes[0].isAvailable()).toBe(false);
171
+ jest.advanceTimersByTime(1000);
172
+ expect(nodeManager.nodes[0].isAvailable()).toBe(true);
173
+ });
174
+ it("should apply shorter timeout for other network errors", () => {
175
+ const nodeManager = createNodeManager({
176
+ nodeUrls: ["http://node1.example.com"],
177
+ unavailableDuration: 5000,
178
+ });
179
+ const resetError = { code: "ECONNRESET", message: "socket hang up" };
180
+ const smartTimeout = getSmartTimeout(undefined, resetError);
181
+ nodeManager.makeNodeUnavailable("http://node1.example.com", smartTimeout);
182
+ expect(nodeManager.nodes[0].isAvailable()).toBe(false);
183
+ // Should be available after 30 seconds (for ECONNRESET)
184
+ jest.advanceTimersByTime(30 * 1000);
185
+ expect(nodeManager.nodes[0].isAvailable()).toBe(true);
186
+ });
187
+ });
188
+ describe("HTTP Status Code Timeouts", () => {
189
+ it("should apply 10 second timeout for 500 Internal Server Error", () => {
190
+ const nodeManager = createNodeManager({
191
+ nodeUrls: ["http://node1.example.com"],
192
+ unavailableDuration: 5000,
193
+ });
194
+ const smartTimeout = getSmartTimeout(500);
195
+ nodeManager.makeNodeUnavailable("http://node1.example.com", smartTimeout);
196
+ expect(nodeManager.nodes[0].isAvailable()).toBe(false);
197
+ // Should be unavailable for 10 seconds
198
+ jest.advanceTimersByTime(9 * 1000);
199
+ expect(nodeManager.nodes[0].isAvailable()).toBe(false);
200
+ jest.advanceTimersByTime(1000);
201
+ expect(nodeManager.nodes[0].isAvailable()).toBe(true);
202
+ });
203
+ it("should apply 30 second timeout for 502 Bad Gateway", () => {
204
+ const nodeManager = createNodeManager({
205
+ nodeUrls: ["http://node1.example.com"],
206
+ unavailableDuration: 5000,
207
+ });
208
+ const smartTimeout = getSmartTimeout(502);
209
+ nodeManager.makeNodeUnavailable("http://node1.example.com", smartTimeout);
210
+ expect(nodeManager.nodes[0].isAvailable()).toBe(false);
211
+ jest.advanceTimersByTime(30 * 1000);
212
+ expect(nodeManager.nodes[0].isAvailable()).toBe(true);
213
+ });
214
+ it("should apply 2 second timeout for 503 Service Unavailable", () => {
215
+ const nodeManager = createNodeManager({
216
+ nodeUrls: ["http://node1.example.com"],
217
+ unavailableDuration: 5000,
218
+ });
219
+ const smartTimeout = getSmartTimeout(503);
220
+ nodeManager.makeNodeUnavailable("http://node1.example.com", smartTimeout);
221
+ expect(nodeManager.nodes[0].isAvailable()).toBe(false);
222
+ // Should be available quickly (2 seconds) for load balancer issues
223
+ jest.advanceTimersByTime(2 * 1000);
224
+ expect(nodeManager.nodes[0].isAvailable()).toBe(true);
225
+ });
226
+ it("should apply 60 second timeout for 504 Gateway Timeout", () => {
227
+ const nodeManager = createNodeManager({
228
+ nodeUrls: ["http://node1.example.com"],
229
+ unavailableDuration: 5000,
230
+ });
231
+ const smartTimeout = getSmartTimeout(504);
232
+ nodeManager.makeNodeUnavailable("http://node1.example.com", smartTimeout);
233
+ expect(nodeManager.nodes[0].isAvailable()).toBe(false);
234
+ // Should be unavailable for 60 seconds
235
+ jest.advanceTimersByTime(59 * 1000);
236
+ expect(nodeManager.nodes[0].isAvailable()).toBe(false);
237
+ jest.advanceTimersByTime(1000);
238
+ expect(nodeManager.nodes[0].isAvailable()).toBe(true);
239
+ });
240
+ it("should apply default timeout for unknown status codes", () => {
241
+ const nodeManager = createNodeManager({
242
+ nodeUrls: ["http://node1.example.com"],
243
+ unavailableDuration: 5000,
244
+ });
245
+ const smartTimeout = getSmartTimeout(599); // Unknown status
246
+ nodeManager.makeNodeUnavailable("http://node1.example.com", smartTimeout);
247
+ expect(nodeManager.nodes[0].isAvailable()).toBe(false);
248
+ // Should use default 5 second timeout
249
+ jest.advanceTimersByTime(5 * 1000);
250
+ expect(nodeManager.nodes[0].isAvailable()).toBe(true);
251
+ });
252
+ });
253
+ });
254
+ describe("Mixed Error Scenarios", () => {
255
+ it("should handle multiple nodes with different error types (without triggering universal recovery)", () => {
256
+ const nodeManager = createNodeManager({
257
+ nodeUrls: [
258
+ "http://dns-fail.example.com",
259
+ "http://conn-refused.example.com",
260
+ "http://server-error.example.com",
261
+ "http://gateway-error.example.com",
262
+ "http://healthy1.example.com",
263
+ "http://healthy2.example.com",
264
+ ],
265
+ unavailableDuration: 5000,
266
+ });
267
+ // With 6 nodes, recovery threshold = 6 - Math.floor(2 * (6-1) / 3) = 6 - 3 = 3
268
+ // Make only 3 nodes unavailable with different error types, keep 3 available (at threshold)
269
+ nodeManager.makeNodeUnavailable("http://server-error.example.com", getSmartTimeout(500)); // 10 sec
270
+ nodeManager.makeNodeUnavailable("http://gateway-error.example.com", getSmartTimeout(502)); // 30 sec
271
+ nodeManager.makeNodeUnavailable("http://conn-refused.example.com", getSmartTimeout(undefined, { code: "ECONNREFUSED" })); // 5 min
272
+ // Initially should have 3 nodes available (no universal recovery)
273
+ expect(nodeManager.getAvailableNodes()).toHaveLength(3);
274
+ const initialAvailable = nodeManager
275
+ .getAvailableNodes()
276
+ .map(n => n.url)
277
+ .sort();
278
+ expect(initialAvailable).toEqual([
279
+ "http://dns-fail.example.com",
280
+ "http://healthy1.example.com",
281
+ "http://healthy2.example.com",
282
+ ]);
283
+ // After 10 seconds, server error node should recover (total: 4 available)
284
+ jest.advanceTimersByTime(10 * 1000);
285
+ expect(nodeManager.getAvailableNodes()).toHaveLength(4);
286
+ const availableAfter10s = nodeManager
287
+ .getAvailableNodes()
288
+ .map(n => n.url)
289
+ .sort();
290
+ expect(availableAfter10s).toContain("http://server-error.example.com");
291
+ // After 30 seconds total, gateway error should also recover (total: 5 available)
292
+ jest.advanceTimersByTime(20 * 1000);
293
+ expect(nodeManager.getAvailableNodes()).toHaveLength(5);
294
+ const availableAfter30s = nodeManager
295
+ .getAvailableNodes()
296
+ .map(n => n.url)
297
+ .sort();
298
+ expect(availableAfter30s).toContain("http://gateway-error.example.com");
299
+ expect(availableAfter30s).toContain("http://server-error.example.com");
300
+ // Connection refused should still be unavailable (5 minute timeout)
301
+ expect(availableAfter30s).not.toContain("http://conn-refused.example.com");
302
+ // After 5 minutes total, all nodes should be available
303
+ jest.advanceTimersByTime(4 * 60 * 1000 + 30 * 1000); // 4:30 more minutes
304
+ expect(nodeManager.getAvailableNodes()).toHaveLength(6);
305
+ });
306
+ it("should trigger universal recovery when all nodes have different error types", () => {
307
+ const nodeManager = createNodeManager({
308
+ nodeUrls: [
309
+ "http://dns-fail.example.com",
310
+ "http://conn-refused.example.com",
311
+ "http://server-error.example.com",
312
+ "http://gateway-error.example.com",
313
+ ],
314
+ unavailableDuration: 5000,
315
+ });
316
+ // With 4 nodes, recovery threshold = 4 - Math.floor(2 * (4-1) / 3) = 4 - 2 = 2
317
+ // Make all 4 nodes unavailable - this will trigger universal recovery (0 < 2)
318
+ nodeManager.makeNodeUnavailable("http://dns-fail.example.com", getSmartTimeout(undefined, { code: "ENOTFOUND" })); // 5 min
319
+ nodeManager.makeNodeUnavailable("http://conn-refused.example.com", getSmartTimeout(undefined, { code: "ECONNREFUSED" })); // 5 min
320
+ nodeManager.makeNodeUnavailable("http://server-error.example.com", getSmartTimeout(500)); // 10 sec
321
+ nodeManager.makeNodeUnavailable("http://gateway-error.example.com", getSmartTimeout(502)); // 30 sec
322
+ // Universal recovery should override individual timeouts - all nodes available immediately
323
+ expect(nodeManager.getAvailableNodes()).toHaveLength(4);
324
+ // Even after individual timeout periods, all should remain available
325
+ jest.advanceTimersByTime(10 * 1000);
326
+ expect(nodeManager.getAvailableNodes()).toHaveLength(4);
327
+ jest.advanceTimersByTime(30 * 1000);
328
+ expect(nodeManager.getAvailableNodes()).toHaveLength(4);
329
+ });
330
+ it("should prioritize network errors over status codes when both present", () => {
331
+ const nodeManager = createNodeManager({
332
+ nodeUrls: ["http://node1.example.com"],
333
+ unavailableDuration: 5000,
334
+ });
335
+ // Pass both status code and network error - network error should take precedence
336
+ const networkError = { code: "ENOTFOUND" };
337
+ const smartTimeout = getSmartTimeout(500, networkError);
338
+ nodeManager.makeNodeUnavailable("http://node1.example.com", smartTimeout);
339
+ expect(nodeManager.nodes[0].isAvailable()).toBe(false);
340
+ // Should use network error timeout (5 min), not status code timeout (10 sec)
341
+ jest.advanceTimersByTime(10 * 1000);
342
+ expect(nodeManager.nodes[0].isAvailable()).toBe(false);
343
+ // Should become available after network error timeout
344
+ jest.advanceTimersByTime(5 * 60 * 1000 - 10 * 1000);
345
+ expect(nodeManager.nodes[0].isAvailable()).toBe(true);
346
+ });
347
+ });
348
+ describe("Error Handling Edge Cases", () => {
349
+ it("should handle malformed error objects gracefully", () => {
350
+ const nodeManager = createNodeManager({
351
+ nodeUrls: ["http://node1.example.com"],
352
+ unavailableDuration: 5000,
353
+ });
354
+ // Pass malformed error object
355
+ const malformedError = { notACode: "INVALID", someOtherProp: 123 };
356
+ const smartTimeout = getSmartTimeout(undefined, malformedError);
357
+ nodeManager.makeNodeUnavailable("http://node1.example.com", smartTimeout);
358
+ expect(nodeManager.nodes[0].isAvailable()).toBe(false);
359
+ // Should use default timeout (5 seconds) for unknown error format
360
+ jest.advanceTimersByTime(5 * 1000);
361
+ expect(nodeManager.nodes[0].isAvailable()).toBe(true);
362
+ });
363
+ it("should handle null/undefined error objects", () => {
364
+ const nodeManager = createNodeManager({
365
+ nodeUrls: ["http://node1.example.com"],
366
+ unavailableDuration: 5000,
367
+ });
368
+ const smartTimeout = getSmartTimeout(undefined, null);
369
+ nodeManager.makeNodeUnavailable("http://node1.example.com", smartTimeout);
370
+ expect(nodeManager.nodes[0].isAvailable()).toBe(false);
371
+ // Should use default timeout
372
+ jest.advanceTimersByTime(5 * 1000);
373
+ expect(nodeManager.nodes[0].isAvailable()).toBe(true);
374
+ });
375
+ it("should handle zero and negative status codes", () => {
376
+ const nodeManager = createNodeManager({
377
+ nodeUrls: ["http://node1.example.com"],
378
+ unavailableDuration: 5000,
379
+ });
380
+ const smartTimeout = getSmartTimeout(0);
381
+ nodeManager.makeNodeUnavailable("http://node1.example.com", smartTimeout);
382
+ expect(nodeManager.nodes[0].isAvailable()).toBe(false);
383
+ // Should use default timeout for invalid status code
384
+ jest.advanceTimersByTime(5 * 1000);
385
+ expect(nodeManager.nodes[0].isAvailable()).toBe(true);
386
+ });
387
+ });
388
+ describe("Recovery Behavior", () => {
389
+ it("should not interfere with universal recovery logic", () => {
390
+ const nodeManager = createNodeManager({
391
+ nodeUrls: [
392
+ "http://node1.example.com",
393
+ "http://node2.example.com",
394
+ "http://node3.example.com",
395
+ ],
396
+ unavailableDuration: 5000,
397
+ });
398
+ // Make all nodes unavailable with long network error timeouts
399
+ const dnsError = { code: "ENOTFOUND" };
400
+ nodeManager.makeNodeUnavailable("http://node1.example.com", getSmartTimeout(undefined, dnsError)); // 5 min
401
+ nodeManager.makeNodeUnavailable("http://node2.example.com", getSmartTimeout(undefined, dnsError)); // 5 min
402
+ // With 3 nodes, recovery threshold = 3 - Math.floor(2 * (3-1) / 3) = 3 - 1 = 2
403
+ // When only 1 available < 2 threshold, universal recovery should trigger
404
+ const availableNodes = nodeManager.getAvailableNodes();
405
+ expect(availableNodes).toHaveLength(3); // Universal recovery overrides individual timeouts
406
+ });
407
+ it("should work correctly when nodes naturally recover before universal recovery", () => {
408
+ const nodeManager = createNodeManager({
409
+ nodeUrls: [
410
+ "http://node1.example.com",
411
+ "http://node2.example.com",
412
+ "http://node3.example.com",
413
+ "http://node4.example.com",
414
+ "http://node5.example.com",
415
+ ],
416
+ unavailableDuration: 5000,
417
+ });
418
+ // With 5 nodes, recovery threshold = 5 - Math.floor(2 * (5-1) / 3) = 5 - 2 = 3
419
+ // Make 2 nodes unavailable with short timeouts, keeping 3 available (at threshold)
420
+ nodeManager.makeNodeUnavailable("http://node1.example.com", getSmartTimeout(503)); // 2 seconds
421
+ nodeManager.makeNodeUnavailable("http://node2.example.com", getSmartTimeout(500)); // 10 seconds
422
+ // Should have 3 nodes available (no universal recovery triggered)
423
+ expect(nodeManager.getAvailableNodes()).toHaveLength(3);
424
+ // After 2 seconds, node1 should recover naturally
425
+ jest.advanceTimersByTime(2 * 1000);
426
+ expect(nodeManager.getAvailableNodes()).toHaveLength(4);
427
+ // After 10 seconds total, node2 should also recover
428
+ jest.advanceTimersByTime(8 * 1000);
429
+ expect(nodeManager.getAvailableNodes()).toHaveLength(5);
430
+ });
431
+ });
432
+ });
433
+ //# sourceMappingURL=networkErrorDetection.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"networkErrorDetection.test.js","sourceRoot":"","sources":["../../../test/unit/networkErrorDetection.test.ts"],"names":[],"mappings":"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"}
@@ -47,8 +47,8 @@ describe("NodeManager", () => {
47
47
  const availableNodes = nodeManager.getAvailableNodes();
48
48
  expect(availableNodes).toHaveLength(2);
49
49
  expect(availableNodes.sort((a, b) => a.url.localeCompare(b.url))).toEqual([
50
- { url: nodeUrls[0], whenAvailable: 0, isAvailable: true },
51
- { url: nodeUrls[1], whenAvailable: 0, isAvailable: true },
50
+ { url: nodeUrls[0], availabilityDate: 0 },
51
+ { url: nodeUrls[1], availabilityDate: 0 },
52
52
  ]);
53
53
  });
54
54
  it("should return nodes in a shuffled order if sticky node is disabled", () => {
@@ -70,6 +70,7 @@ describe("NodeManager", () => {
70
70
  useStickyNode: true,
71
71
  unavailableDuration: 5000,
72
72
  });
73
+ nodeManager.makeNodeUnavailable;
73
74
  const availableNodesSet = [
74
75
  nodeManager.getAvailableNodes(),
75
76
  nodeManager.getAvailableNodes(),
@@ -1 +1 @@
1
- {"version":3,"file":"nodeMananger.test.js","sourceRoot":"","sources":["../../../test/unit/nodeMananger.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"nodeMananger.test.js","sourceRoot":"","sources":["../../../test/unit/nodeMananger.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};