@dignetwork/dig-sdk 0.0.1-alpha.147 → 0.0.1-alpha.148
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.
|
@@ -85,7 +85,8 @@ export declare class FullNodePeer {
|
|
|
85
85
|
* Connects to the best available peer based on weighted selection and reliability.
|
|
86
86
|
* @returns {Promise<Peer>} The connected Peer instance.
|
|
87
87
|
*/
|
|
88
|
-
private
|
|
88
|
+
private getBestPeer;
|
|
89
|
+
private createPeerProxy;
|
|
89
90
|
/**
|
|
90
91
|
* Handles peer disconnection by marking it in cooldown and updating internal states.
|
|
91
92
|
* @param {string} peerIP - The IP address of the disconnected peer.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FullNodePeer.d.ts","sourceRoot":"","sources":["../../src/blockchain/FullNodePeer.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,IAAI,EAAO,MAAM,8BAA8B,CAAC;AAmCzD;;GAEG;AACH,qBAAa,YAAY;IA0BH,OAAO,CAAC,IAAI;IAxBhC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAA6B;IAGpD,OAAO,CAAC,MAAM,CAAC,UAAU,CAAkD;IAG3E,OAAO,CAAC,MAAM,CAAC,aAAa,CAAuD;IAGnF,OAAO,CAAC,MAAM,CAAC,WAAW,CAAkC;IAG5D,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAAgB;IAG/C,OAAO,CAAC,MAAM,CAAC,SAAS,CAAoC;IAG5D,OAAO,CAAC,MAAM,CAAC,WAAW,CAAoD;IAG9E,OAAO,CAAC,MAAM,CAAC,YAAY,CAAsC;IAGjE,OAAO;IAEP;;;OAGG;WACW,WAAW,IAAI,YAAY;IAOzC;;OAEG;IACU,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAaxC;;;;OAIG;WACiB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAM5C;;;;;;OAMG;IACH,OAAO,CAAC,MAAM,CAAC,eAAe;IAuB9B;;;;OAIG;IACH,OAAO,CAAC,MAAM,CAAC,gBAAgB;IAM/B;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,kBAAkB;IASjC;;;;OAIG;mBACkB,eAAe;IAoFpC;;;;OAIG;IACH,OAAO,CAAC,MAAM,CAAC,YAAY;IAS3B;;;;OAIG;IACH,OAAO,CAAC,MAAM,CAAC,qBAAqB;IAgBpC;;;;OAIG;IACH,OAAO,CAAC,MAAM,CAAC,kBAAkB;IAwBjC;;;OAGG;mBACkB,UAAU;IAK/B;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,UAAU;IAIzB;;;OAGG;
|
|
1
|
+
{"version":3,"file":"FullNodePeer.d.ts","sourceRoot":"","sources":["../../src/blockchain/FullNodePeer.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,IAAI,EAAO,MAAM,8BAA8B,CAAC;AAmCzD;;GAEG;AACH,qBAAa,YAAY;IA0BH,OAAO,CAAC,IAAI;IAxBhC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAA6B;IAGpD,OAAO,CAAC,MAAM,CAAC,UAAU,CAAkD;IAG3E,OAAO,CAAC,MAAM,CAAC,aAAa,CAAuD;IAGnF,OAAO,CAAC,MAAM,CAAC,WAAW,CAAkC;IAG5D,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAAgB;IAG/C,OAAO,CAAC,MAAM,CAAC,SAAS,CAAoC;IAG5D,OAAO,CAAC,MAAM,CAAC,WAAW,CAAoD;IAG9E,OAAO,CAAC,MAAM,CAAC,YAAY,CAAsC;IAGjE,OAAO;IAEP;;;OAGG;WACW,WAAW,IAAI,YAAY;IAOzC;;OAEG;IACU,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAaxC;;;;OAIG;WACiB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAM5C;;;;;;OAMG;IACH,OAAO,CAAC,MAAM,CAAC,eAAe;IAuB9B;;;;OAIG;IACH,OAAO,CAAC,MAAM,CAAC,gBAAgB;IAM/B;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,kBAAkB;IASjC;;;;OAIG;mBACkB,eAAe;IAoFpC;;;;OAIG;IACH,OAAO,CAAC,MAAM,CAAC,YAAY;IAS3B;;;;OAIG;IACH,OAAO,CAAC,MAAM,CAAC,qBAAqB;IAgBpC;;;;OAIG;IACH,OAAO,CAAC,MAAM,CAAC,kBAAkB;IAwBjC;;;OAGG;mBACkB,UAAU;IAK/B;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,UAAU;IAIzB;;;OAGG;YACW,WAAW;IAgFzB,OAAO,CAAC,eAAe;IA0DvB;;;OAGG;IACI,uBAAuB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAqBpD;;;;OAIG;IACH,OAAO,CAAC,MAAM,CAAC,aAAa;IAS5B;;;;OAIG;WACiB,mBAAmB,CACrC,cAAc,EAAE,MAAM,GACrB,OAAO,CAAC,OAAO,CAAC;CAkDpB"}
|
|
@@ -57,7 +57,7 @@ class FullNodePeer {
|
|
|
57
57
|
if (this.peer)
|
|
58
58
|
return; // Already initialized
|
|
59
59
|
try {
|
|
60
|
-
const bestPeer = await
|
|
60
|
+
const bestPeer = await this.getBestPeer();
|
|
61
61
|
this.peer = bestPeer;
|
|
62
62
|
FullNodePeer.instance = this; // Assign the initialized instance
|
|
63
63
|
}
|
|
@@ -266,7 +266,7 @@ class FullNodePeer {
|
|
|
266
266
|
* Connects to the best available peer based on weighted selection and reliability.
|
|
267
267
|
* @returns {Promise<Peer>} The connected Peer instance.
|
|
268
268
|
*/
|
|
269
|
-
|
|
269
|
+
async getBestPeer() {
|
|
270
270
|
const now = Date.now();
|
|
271
271
|
// Refresh cachedPeer if expired
|
|
272
272
|
if (FullNodePeer.cachedPeer &&
|
|
@@ -324,10 +324,57 @@ class FullNodePeer {
|
|
|
324
324
|
});
|
|
325
325
|
// Initialize rate limiter for this peer
|
|
326
326
|
FullNodePeer.peerLimiters.set(selectedPeerIP, limiter);
|
|
327
|
+
const proxiedPeer = this.createPeerProxy(peer, selectedPeerIP);
|
|
327
328
|
// Cache the peer
|
|
328
329
|
FullNodePeer.cachedPeer = { peer: peer, timestamp: now };
|
|
329
330
|
console.log(`Using Fullnode Peer: ${selectedPeerIP}`);
|
|
330
|
-
return
|
|
331
|
+
return proxiedPeer;
|
|
332
|
+
}
|
|
333
|
+
createPeerProxy(peer, peerIP) {
|
|
334
|
+
return new Proxy(peer, {
|
|
335
|
+
get: (target, prop) => {
|
|
336
|
+
const originalMethod = target[prop];
|
|
337
|
+
if (typeof originalMethod === "function") {
|
|
338
|
+
return async (...args) => {
|
|
339
|
+
let timeoutId;
|
|
340
|
+
// Start the timeout to forget the peer after 1 minute
|
|
341
|
+
const timeoutPromise = new Promise((_, reject) => {
|
|
342
|
+
timeoutId = setTimeout(() => {
|
|
343
|
+
FullNodePeer.cachedPeer = null;
|
|
344
|
+
reject(new Error("Operation timed out. Reconnecting to a new peer."));
|
|
345
|
+
}, 60000); // 1 minute
|
|
346
|
+
});
|
|
347
|
+
try {
|
|
348
|
+
// Run the original method and race it against the timeout
|
|
349
|
+
const result = await Promise.race([
|
|
350
|
+
originalMethod.apply(target, args),
|
|
351
|
+
timeoutPromise,
|
|
352
|
+
]);
|
|
353
|
+
// Clear the timeout if the operation succeeded
|
|
354
|
+
if (timeoutId) {
|
|
355
|
+
clearTimeout(timeoutId);
|
|
356
|
+
}
|
|
357
|
+
return result;
|
|
358
|
+
}
|
|
359
|
+
catch (error) {
|
|
360
|
+
// If the error is WebSocket-related or timeout, reset the peer
|
|
361
|
+
if (error.message.includes("WebSocket") ||
|
|
362
|
+
error.message.includes("Operation timed out")) {
|
|
363
|
+
FullNodePeer.cachedPeer = null;
|
|
364
|
+
// @ts-ignore
|
|
365
|
+
FullNodePeer.memoizedFetchNewPeerIPs.cache.clear();
|
|
366
|
+
console.info(`Fullnode Peer error, reconnecting to a new peer...`);
|
|
367
|
+
this.handlePeerDisconnection(peerIP);
|
|
368
|
+
const newPeer = await this.getBestPeer();
|
|
369
|
+
return newPeer[prop](...args);
|
|
370
|
+
}
|
|
371
|
+
throw error;
|
|
372
|
+
}
|
|
373
|
+
};
|
|
374
|
+
}
|
|
375
|
+
return originalMethod;
|
|
376
|
+
},
|
|
377
|
+
});
|
|
331
378
|
}
|
|
332
379
|
/**
|
|
333
380
|
* Handles peer disconnection by marking it in cooldown and updating internal states.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PeerRanker.d.ts","sourceRoot":"","sources":["../../src/utils/PeerRanker.ts"],"names":[],"mappings":"AAMA
|
|
1
|
+
{"version":3,"file":"PeerRanker.d.ts","sourceRoot":"","sources":["../../src/utils/PeerRanker.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,WAAW,CAAW;IAC9B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAS;IAChC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAS;IAC/B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,cAAc,CAAS;IAG/B,OAAO,CAAC,WAAW,CAAqB;IACxC,OAAO,CAAC,YAAY,CAAa;IAEjC;;;OAGG;gBACS,WAAW,EAAE,MAAM,EAAE,EAAE,OAAO,GAAE,MAAa,EAAE,cAAc,GAAE,MAAoB;IAW/F;;;;;OAKG;YACW,cAAc;IA2C5B;;;;OAIG;YACW,gBAAgB;IAmC9B;;;;;OAKG;IACU,SAAS,CAAC,QAAQ,GAAE,MAAY,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAmCtE;;;;OAIG;IACI,eAAe,IAAI,WAAW,GAAG,IAAI;IAW5C;;OAEG;IACI,aAAa,IAAI,IAAI;CAG7B"}
|