From 9a5073dd2082153d7dc8fb1765f50655febd0c41 Mon Sep 17 00:00:00 2001 From: direkturcrypto Date: Thu, 2 Apr 2026 00:04:22 +0700 Subject: [PATCH] fix: avoid JSON.stringify on circular response object in placeLimitBuy When the CLOB client returns a failure response that contains a circular reference (e.g. axios/fetch internals), JSON.stringify throws "Maximum call stack size exceeded" which is caught and swallows the real error. Log only safe primitive fields (errorMsg, error, status) instead. Co-Authored-By: Claude Sonnet 4.6 --- src/services/makerRebateExecutor.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/services/makerRebateExecutor.js b/src/services/makerRebateExecutor.js index 7d8fbd0..5070d20 100644 --- a/src/services/makerRebateExecutor.js +++ b/src/services/makerRebateExecutor.js @@ -241,7 +241,11 @@ async function placeLimitBuy(tokenId, shares, price, tickSize, negRisk) { OrderType.GTC, ); if (!res?.success) { - logger.error(`MakerMM: limit buy failed — response: ${JSON.stringify(res)}`); + // JSON.stringify can throw "Maximum call stack size exceeded" if res + // contains a circular reference (e.g. axios/fetch response object). + // Log only safe primitive fields instead. + const errDetail = res?.errorMsg || res?.error || res?.message || 'unknown'; + logger.error(`MakerMM: limit buy failed — response: {"error":"${errDetail}","status":${res?.status ?? 'n/a'}}`); return { success: false }; } return { success: true, orderId: res.orderID };