@metamask/eth-block-tracker
Advanced tools
Comparing version 11.0.2 to 11.0.3
@@ -14,2 +14,3 @@ import type { SafeEventEmitterProvider } from '@metamask/eth-json-rpc-provider'; | ||
export declare class PollingBlockTracker extends SafeEventEmitter implements BlockTracker { | ||
#private; | ||
private _isRunning; | ||
@@ -16,0 +17,0 @@ private readonly _blockResetDuration; |
"use strict"; | ||
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) { | ||
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); | ||
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); | ||
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); | ||
}; | ||
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { | ||
if (kind === "m") throw new TypeError("Private method is not writable"); | ||
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); | ||
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); | ||
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; | ||
}; | ||
var __importDefault = (this && this.__importDefault) || function (mod) { | ||
return (mod && mod.__esModule) ? mod : { "default": mod }; | ||
}; | ||
var _PollingBlockTracker_instances, _PollingBlockTracker_internalEventListeners, _PollingBlockTracker_pendingLatestBlock, _PollingBlockTracker_addInternalListener, _PollingBlockTracker_removeInternalListener, _PollingBlockTracker_rejectPendingLatestBlock; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
@@ -14,3 +26,2 @@ exports.PollingBlockTracker = void 0; | ||
const sec = 1000; | ||
const calculateSum = (accumulator, currentValue) => accumulator + currentValue; | ||
const blockTrackerEvents = ['sync', 'latest']; | ||
@@ -24,2 +35,5 @@ class PollingBlockTracker extends safe_event_emitter_1.default { | ||
super(); | ||
_PollingBlockTracker_instances.add(this); | ||
_PollingBlockTracker_internalEventListeners.set(this, []); | ||
_PollingBlockTracker_pendingLatestBlock.set(this, void 0); | ||
// config | ||
@@ -49,2 +63,3 @@ this._blockResetDuration = opts.blockResetDuration || 20 * sec; | ||
super.removeAllListeners(); | ||
__classPrivateFieldGet(this, _PollingBlockTracker_instances, "m", _PollingBlockTracker_rejectPendingLatestBlock).call(this, new Error('Block tracker destroyed')); | ||
} | ||
@@ -62,6 +77,18 @@ isRunning() { | ||
} | ||
else if (__classPrivateFieldGet(this, _PollingBlockTracker_pendingLatestBlock, "f")) { | ||
return await __classPrivateFieldGet(this, _PollingBlockTracker_pendingLatestBlock, "f").promise; | ||
} | ||
const { promise, resolve, reject } = (0, utils_1.createDeferredPromise)({ | ||
suppressUnhandledRejection: true, | ||
}); | ||
__classPrivateFieldSet(this, _PollingBlockTracker_pendingLatestBlock, { reject, promise }, "f"); | ||
// wait for a new latest block | ||
const latestBlock = await new Promise((resolve) => this.once('latest', resolve)); | ||
// return newly set current block | ||
return latestBlock; | ||
const onLatestBlock = (value) => { | ||
__classPrivateFieldGet(this, _PollingBlockTracker_instances, "m", _PollingBlockTracker_removeInternalListener).call(this, onLatestBlock); | ||
resolve(value); | ||
__classPrivateFieldSet(this, _PollingBlockTracker_pendingLatestBlock, undefined, "f"); | ||
}; | ||
__classPrivateFieldGet(this, _PollingBlockTracker_instances, "m", _PollingBlockTracker_addInternalListener).call(this, onLatestBlock); | ||
this.once('latest', onLatestBlock); | ||
return await promise; | ||
} | ||
@@ -125,5 +152,7 @@ // dont allow module consumer to remove our internal event listeners | ||
_getBlockTrackerEventCount() { | ||
return blockTrackerEvents | ||
.map((eventName) => this.listenerCount(eventName)) | ||
.reduce(calculateSum); | ||
return (blockTrackerEvents | ||
.map((eventName) => this.listeners(eventName)) | ||
.flat() | ||
// internal listeners are not included in the count | ||
.filter((listener) => __classPrivateFieldGet(this, _PollingBlockTracker_internalEventListeners, "f").every((internalListener) => !Object.is(internalListener, listener))).length); | ||
} | ||
@@ -252,2 +281,11 @@ _shouldUseNewBlock(newBlock) { | ||
exports.PollingBlockTracker = PollingBlockTracker; | ||
_PollingBlockTracker_internalEventListeners = new WeakMap(), _PollingBlockTracker_pendingLatestBlock = new WeakMap(), _PollingBlockTracker_instances = new WeakSet(), _PollingBlockTracker_addInternalListener = function _PollingBlockTracker_addInternalListener(listener) { | ||
__classPrivateFieldGet(this, _PollingBlockTracker_internalEventListeners, "f").push(listener); | ||
}, _PollingBlockTracker_removeInternalListener = function _PollingBlockTracker_removeInternalListener(listener) { | ||
__classPrivateFieldGet(this, _PollingBlockTracker_internalEventListeners, "f").splice(__classPrivateFieldGet(this, _PollingBlockTracker_internalEventListeners, "f").indexOf(listener), 1); | ||
}, _PollingBlockTracker_rejectPendingLatestBlock = function _PollingBlockTracker_rejectPendingLatestBlock(error) { | ||
var _a; | ||
(_a = __classPrivateFieldGet(this, _PollingBlockTracker_pendingLatestBlock, "f")) === null || _a === void 0 ? void 0 : _a.reject(error); | ||
__classPrivateFieldSet(this, _PollingBlockTracker_pendingLatestBlock, undefined, "f"); | ||
}; | ||
/** | ||
@@ -254,0 +292,0 @@ * Converts a number represented as a string in hexadecimal format into a native |
@@ -10,2 +10,3 @@ import type { SafeEventEmitterProvider } from '@metamask/eth-json-rpc-provider'; | ||
export declare class SubscribeBlockTracker extends SafeEventEmitter implements BlockTracker { | ||
#private; | ||
private _isRunning; | ||
@@ -12,0 +13,0 @@ private readonly _blockResetDuration; |
"use strict"; | ||
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) { | ||
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); | ||
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); | ||
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); | ||
}; | ||
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { | ||
if (kind === "m") throw new TypeError("Private method is not writable"); | ||
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); | ||
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); | ||
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; | ||
}; | ||
var __importDefault = (this && this.__importDefault) || function (mod) { | ||
return (mod && mod.__esModule) ? mod : { "default": mod }; | ||
}; | ||
var _SubscribeBlockTracker_instances, _SubscribeBlockTracker_internalEventListeners, _SubscribeBlockTracker_pendingLatestBlock, _SubscribeBlockTracker_addInternalListener, _SubscribeBlockTracker_removeInternalListener, _SubscribeBlockTracker_rejectPendingLatestBlock; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.SubscribeBlockTracker = void 0; | ||
const safe_event_emitter_1 = __importDefault(require("@metamask/safe-event-emitter")); | ||
const utils_1 = require("@metamask/utils"); | ||
const json_rpc_random_id_1 = __importDefault(require("json-rpc-random-id")); | ||
const createRandomId = (0, json_rpc_random_id_1.default)(); | ||
const sec = 1000; | ||
const calculateSum = (accumulator, currentValue) => accumulator + currentValue; | ||
const blockTrackerEvents = ['sync', 'latest']; | ||
@@ -20,2 +32,5 @@ class SubscribeBlockTracker extends safe_event_emitter_1.default { | ||
super(); | ||
_SubscribeBlockTracker_instances.add(this); | ||
_SubscribeBlockTracker_internalEventListeners.set(this, []); | ||
_SubscribeBlockTracker_pendingLatestBlock.set(this, void 0); | ||
// config | ||
@@ -41,2 +56,3 @@ this._blockResetDuration = opts.blockResetDuration || 20 * sec; | ||
super.removeAllListeners(); | ||
__classPrivateFieldGet(this, _SubscribeBlockTracker_instances, "m", _SubscribeBlockTracker_rejectPendingLatestBlock).call(this, new Error('Block tracker destroyed')); | ||
} | ||
@@ -54,6 +70,18 @@ isRunning() { | ||
} | ||
else if (__classPrivateFieldGet(this, _SubscribeBlockTracker_pendingLatestBlock, "f")) { | ||
return await __classPrivateFieldGet(this, _SubscribeBlockTracker_pendingLatestBlock, "f").promise; | ||
} | ||
const { resolve, reject, promise } = (0, utils_1.createDeferredPromise)({ | ||
suppressUnhandledRejection: true, | ||
}); | ||
__classPrivateFieldSet(this, _SubscribeBlockTracker_pendingLatestBlock, { reject, promise }, "f"); | ||
// wait for a new latest block | ||
const latestBlock = await new Promise((resolve) => this.once('latest', resolve)); | ||
// return newly set current block | ||
return latestBlock; | ||
const onLatestBlock = (value) => { | ||
__classPrivateFieldGet(this, _SubscribeBlockTracker_instances, "m", _SubscribeBlockTracker_removeInternalListener).call(this, onLatestBlock); | ||
resolve(value); | ||
__classPrivateFieldSet(this, _SubscribeBlockTracker_pendingLatestBlock, undefined, "f"); | ||
}; | ||
__classPrivateFieldGet(this, _SubscribeBlockTracker_instances, "m", _SubscribeBlockTracker_addInternalListener).call(this, onLatestBlock); | ||
this.once('latest', onLatestBlock); | ||
return await promise; | ||
} | ||
@@ -117,5 +145,7 @@ // dont allow module consumer to remove our internal event listeners | ||
_getBlockTrackerEventCount() { | ||
return blockTrackerEvents | ||
.map((eventName) => this.listenerCount(eventName)) | ||
.reduce(calculateSum); | ||
return (blockTrackerEvents | ||
.map((eventName) => this.listeners(eventName)) | ||
.flat() | ||
// internal listeners are not included in the count | ||
.filter((listener) => __classPrivateFieldGet(this, _SubscribeBlockTracker_internalEventListeners, "f").every((internalListener) => !Object.is(internalListener, listener))).length); | ||
} | ||
@@ -175,2 +205,3 @@ _shouldUseNewBlock(newBlock) { | ||
this.emit('error', e); | ||
__classPrivateFieldGet(this, _SubscribeBlockTracker_instances, "m", _SubscribeBlockTracker_rejectPendingLatestBlock).call(this, e); | ||
} | ||
@@ -187,2 +218,3 @@ } | ||
this.emit('error', e); | ||
__classPrivateFieldGet(this, _SubscribeBlockTracker_instances, "m", _SubscribeBlockTracker_rejectPendingLatestBlock).call(this, e); | ||
} | ||
@@ -208,2 +240,11 @@ } | ||
exports.SubscribeBlockTracker = SubscribeBlockTracker; | ||
_SubscribeBlockTracker_internalEventListeners = new WeakMap(), _SubscribeBlockTracker_pendingLatestBlock = new WeakMap(), _SubscribeBlockTracker_instances = new WeakSet(), _SubscribeBlockTracker_addInternalListener = function _SubscribeBlockTracker_addInternalListener(listener) { | ||
__classPrivateFieldGet(this, _SubscribeBlockTracker_internalEventListeners, "f").push(listener); | ||
}, _SubscribeBlockTracker_removeInternalListener = function _SubscribeBlockTracker_removeInternalListener(listener) { | ||
__classPrivateFieldGet(this, _SubscribeBlockTracker_internalEventListeners, "f").splice(__classPrivateFieldGet(this, _SubscribeBlockTracker_internalEventListeners, "f").indexOf(listener), 1); | ||
}, _SubscribeBlockTracker_rejectPendingLatestBlock = function _SubscribeBlockTracker_rejectPendingLatestBlock(error) { | ||
var _a; | ||
(_a = __classPrivateFieldGet(this, _SubscribeBlockTracker_pendingLatestBlock, "f")) === null || _a === void 0 ? void 0 : _a.reject(error); | ||
__classPrivateFieldSet(this, _SubscribeBlockTracker_pendingLatestBlock, undefined, "f"); | ||
}; | ||
/** | ||
@@ -210,0 +251,0 @@ * Converts a number represented as a string in hexadecimal format into a native |
{ | ||
"name": "@metamask/eth-block-tracker", | ||
"version": "11.0.2", | ||
"version": "11.0.3", | ||
"description": "A block tracker for the Ethereum blockchain. Keeps track of the latest block.", | ||
@@ -65,2 +65,3 @@ "repository": { | ||
}, | ||
"packageManager": "yarn@1.22.22+sha512.a6b2f7906b721bba3d67d4aff083df04dad64c399707841b7acf00f6b133b7ac24255f2652fa22ae3534329dc6180534e98d17432037ff6fd140556e2bb3137e", | ||
"engines": { | ||
@@ -67,0 +68,0 @@ "node": "^18.16 || ^20 || >=22" |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
76424
686