Risk Level
MEDIUM
Location
core/src/feeds/chainlink/chainlink-feed.ts:312–318
Code
private scheduleReconnect(): void {
if (this.reconnectTimer) return;
this.reconnectTimer = setTimeout(() => {
this.reconnectTimer = null;
if (!this.isTerminated) this.connect(); // <-- Promise<void> silently discarded
}, this.reconnectIntervalMs);
}
What Happens on Failure
Identical to the companion issue in BinanceFeed (core/src/feeds/binance/binance-feed.ts:214). this.connect() is async and can reject; the setTimeout callback discards the returned Promise with no .catch(). A failed reconnect attempt vanishes silently. All registered watchTicker subscriptions on the Chainlink feed stop receiving oracle price updates and there is no log entry to indicate the loop has stalled.
Suggested Fix
this.reconnectTimer = setTimeout(() => {
this.reconnectTimer = null;
if (!this.isTerminated) {
this.connect().catch((err: unknown) => {
console.error('[ChainlinkFeed] reconnect failed:', err instanceof Error ? err.message : String(err));
});
}
}, this.reconnectIntervalMs);
Found by automated unhandled async audit
Risk Level
MEDIUM
Location
core/src/feeds/chainlink/chainlink-feed.ts:312–318Code
What Happens on Failure
Identical to the companion issue in
BinanceFeed(core/src/feeds/binance/binance-feed.ts:214).this.connect()isasyncand can reject; thesetTimeoutcallback discards the returned Promise with no.catch(). A failed reconnect attempt vanishes silently. All registeredwatchTickersubscriptions on the Chainlink feed stop receiving oracle price updates and there is no log entry to indicate the loop has stalled.Suggested Fix
Found by automated unhandled async audit