dexbot 1.5.3 → 1.6.1

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 (242) hide show
  1. package/CHANGELOG.md +75 -0
  2. package/README.md +9 -7
  3. package/analysis/README.md +1 -2
  4. package/analysis/ama_fitting/fetch_lp_candles.ts +1 -9
  5. package/analysis/ama_fitting/package.json +1 -1
  6. package/analysis/analyze_derivatives.ts +1 -1
  7. package/analysis/bot_usage/discover_bot_accounts.ts +12 -6
  8. package/analysis/resolve_source.ts +9 -2
  9. package/analysis/tradingview/README.md +29 -11
  10. package/analysis/tradingview/analyze_tradingview.ts +92 -3
  11. package/analysis/tradingview/tradingview_uplot_chart_generator.ts +1120 -182
  12. package/analysis/trend_detection/package.json +1 -1
  13. package/claw/docs/DEXBOT2_TUNING_CHEAT_SHEET.md +1 -1
  14. package/claw/modules/dexbot_profiles.ts +22 -2
  15. package/claw/package.json +1 -1
  16. package/claw/runtimes/openclaw-plugin/openclaw.plugin.json +1 -1
  17. package/claw/runtimes/openclaw-plugin/package.json +1 -1
  18. package/claw/skills/launcher-ops/references/launcher-workflow.md +1 -1
  19. package/claw/tests/test_claw_mcp_transport.ts +2 -2
  20. package/claw/tests/test_dexbot_profiles.ts +65 -0
  21. package/dist/analysis/ama_fitting/fetch_lp_candles.js +1 -9
  22. package/dist/analysis/ama_fitting/fetch_lp_candles.js.map +1 -1
  23. package/dist/analysis/analyze_derivatives.js +1 -1
  24. package/dist/analysis/bot_usage/discover_bot_accounts.js +11 -6
  25. package/dist/analysis/bot_usage/discover_bot_accounts.js.map +1 -1
  26. package/dist/analysis/bot_usage/kibana_bot_queries.d.ts +2 -0
  27. package/dist/analysis/bot_usage/kibana_bot_queries.d.ts.map +1 -1
  28. package/dist/analysis/resolve_source.d.ts +1 -0
  29. package/dist/analysis/resolve_source.d.ts.map +1 -1
  30. package/dist/analysis/resolve_source.js +6 -2
  31. package/dist/analysis/resolve_source.js.map +1 -1
  32. package/dist/analysis/tradingview/analyze_tradingview.d.ts +5 -0
  33. package/dist/analysis/tradingview/analyze_tradingview.d.ts.map +1 -1
  34. package/dist/analysis/tradingview/analyze_tradingview.js +112 -3
  35. package/dist/analysis/tradingview/analyze_tradingview.js.map +1 -1
  36. package/dist/analysis/tradingview/tradingview_uplot_chart_generator.d.ts +5 -1
  37. package/dist/analysis/tradingview/tradingview_uplot_chart_generator.d.ts.map +1 -1
  38. package/dist/analysis/tradingview/tradingview_uplot_chart_generator.js +1118 -182
  39. package/dist/analysis/tradingview/tradingview_uplot_chart_generator.js.map +1 -1
  40. package/dist/bot.js +1 -1
  41. package/dist/bot.js.map +1 -1
  42. package/dist/dexbot.js +4 -4
  43. package/dist/dexbot.js.map +1 -1
  44. package/dist/market_adapter/ama_signal_runner.js +2 -2
  45. package/dist/market_adapter/candle_utils.d.ts +6 -0
  46. package/dist/market_adapter/candle_utils.d.ts.map +1 -1
  47. package/dist/market_adapter/candle_utils.js +6 -0
  48. package/dist/market_adapter/candle_utils.js.map +1 -1
  49. package/dist/market_adapter/core/kibana_candles.d.ts +17 -1
  50. package/dist/market_adapter/core/kibana_candles.d.ts.map +1 -1
  51. package/dist/market_adapter/core/kibana_candles.js +101 -19
  52. package/dist/market_adapter/core/kibana_candles.js.map +1 -1
  53. package/dist/market_adapter/core/kibana_client.d.ts +2 -0
  54. package/dist/market_adapter/core/kibana_client.d.ts.map +1 -1
  55. package/dist/market_adapter/core/kibana_client.js +31 -4
  56. package/dist/market_adapter/core/kibana_client.js.map +1 -1
  57. package/dist/market_adapter/core/market_adapter_service.d.ts.map +1 -1
  58. package/dist/market_adapter/core/market_adapter_service.js +0 -6
  59. package/dist/market_adapter/core/market_adapter_service.js.map +1 -1
  60. package/dist/market_adapter/inputs/fetch_book_data.d.ts +14 -0
  61. package/dist/market_adapter/inputs/fetch_book_data.d.ts.map +1 -0
  62. package/dist/market_adapter/inputs/fetch_book_data.js +138 -0
  63. package/dist/market_adapter/inputs/fetch_book_data.js.map +1 -0
  64. package/dist/market_adapter/inputs/fetch_cex_synthetic_data.js +1 -1
  65. package/dist/market_adapter/inputs/fetch_lp_data.d.ts +16 -2
  66. package/dist/market_adapter/inputs/fetch_lp_data.d.ts.map +1 -1
  67. package/dist/market_adapter/inputs/fetch_lp_data.js +109 -281
  68. package/dist/market_adapter/inputs/fetch_lp_data.js.map +1 -1
  69. package/dist/market_adapter/inputs/kibana_feed_source.d.ts +87 -0
  70. package/dist/market_adapter/inputs/kibana_feed_source.d.ts.map +1 -0
  71. package/dist/market_adapter/inputs/kibana_feed_source.js +570 -0
  72. package/dist/market_adapter/inputs/kibana_feed_source.js.map +1 -0
  73. package/dist/market_adapter/inputs/kibana_source.d.ts.map +1 -1
  74. package/dist/market_adapter/inputs/kibana_source.js +10 -5
  75. package/dist/market_adapter/inputs/kibana_source.js.map +1 -1
  76. package/dist/market_adapter/inputs/window_cache.d.ts +166 -0
  77. package/dist/market_adapter/inputs/window_cache.d.ts.map +1 -0
  78. package/dist/market_adapter/inputs/window_cache.js +500 -0
  79. package/dist/market_adapter/inputs/window_cache.js.map +1 -0
  80. package/dist/market_adapter/interval_utils.d.ts +8 -1
  81. package/dist/market_adapter/interval_utils.d.ts.map +1 -1
  82. package/dist/market_adapter/interval_utils.js +14 -1
  83. package/dist/market_adapter/interval_utils.js.map +1 -1
  84. package/dist/modules/account_bots.d.ts +1 -0
  85. package/dist/modules/account_bots.d.ts.map +1 -1
  86. package/dist/modules/account_bots.js +21 -5
  87. package/dist/modules/account_bots.js.map +1 -1
  88. package/dist/modules/account_orders.d.ts +25 -4
  89. package/dist/modules/account_orders.d.ts.map +1 -1
  90. package/dist/modules/account_orders.js +67 -4
  91. package/dist/modules/account_orders.js.map +1 -1
  92. package/dist/modules/bitshares-native/chain_client.d.ts +2 -0
  93. package/dist/modules/bitshares-native/chain_client.d.ts.map +1 -1
  94. package/dist/modules/bitshares-native/chain_client.js +3 -1
  95. package/dist/modules/bitshares-native/chain_client.js.map +1 -1
  96. package/dist/modules/bitshares-native/subscriptions.d.ts.map +1 -1
  97. package/dist/modules/bitshares-native/subscriptions.js +13 -3
  98. package/dist/modules/bitshares-native/subscriptions.js.map +1 -1
  99. package/dist/modules/bitshares-native/transport.d.ts +2 -0
  100. package/dist/modules/bitshares-native/transport.d.ts.map +1 -1
  101. package/dist/modules/bitshares-native/transport.js +122 -28
  102. package/dist/modules/bitshares-native/transport.js.map +1 -1
  103. package/dist/modules/bitshares_client.d.ts.map +1 -1
  104. package/dist/modules/bitshares_client.js +59 -8
  105. package/dist/modules/bitshares_client.js.map +1 -1
  106. package/dist/modules/bot_settings.d.ts.map +1 -1
  107. package/dist/modules/bot_settings.js +11 -0
  108. package/dist/modules/bot_settings.js.map +1 -1
  109. package/dist/modules/constants.d.ts +18 -0
  110. package/dist/modules/constants.d.ts.map +1 -1
  111. package/dist/modules/constants.js +90 -4
  112. package/dist/modules/constants.js.map +1 -1
  113. package/dist/modules/dexbot_class.d.ts +11 -0
  114. package/dist/modules/dexbot_class.d.ts.map +1 -1
  115. package/dist/modules/dexbot_class.js +92 -4
  116. package/dist/modules/dexbot_class.js.map +1 -1
  117. package/dist/modules/dexbot_cow_runtime.d.ts +26 -1
  118. package/dist/modules/dexbot_cow_runtime.d.ts.map +1 -1
  119. package/dist/modules/dexbot_cow_runtime.js +157 -28
  120. package/dist/modules/dexbot_cow_runtime.js.map +1 -1
  121. package/dist/modules/dexbot_fill_runtime.d.ts +66 -1
  122. package/dist/modules/dexbot_fill_runtime.d.ts.map +1 -1
  123. package/dist/modules/dexbot_fill_runtime.js +295 -10
  124. package/dist/modules/dexbot_fill_runtime.js.map +1 -1
  125. package/dist/modules/dexbot_maintenance_runtime.d.ts +102 -12
  126. package/dist/modules/dexbot_maintenance_runtime.d.ts.map +1 -1
  127. package/dist/modules/dexbot_maintenance_runtime.js +644 -48
  128. package/dist/modules/dexbot_maintenance_runtime.js.map +1 -1
  129. package/dist/modules/dexbot_startup_runtime.d.ts.map +1 -1
  130. package/dist/modules/dexbot_startup_runtime.js +13 -0
  131. package/dist/modules/dexbot_startup_runtime.js.map +1 -1
  132. package/dist/modules/dexbot_state_recovery.d.ts +15 -1
  133. package/dist/modules/dexbot_state_recovery.d.ts.map +1 -1
  134. package/dist/modules/dexbot_state_recovery.js +52 -8
  135. package/dist/modules/dexbot_state_recovery.js.map +1 -1
  136. package/dist/modules/fund_registry.d.ts +1 -1
  137. package/dist/modules/fund_registry.js +1 -1
  138. package/dist/modules/market_adapter_whitelist.js +1 -1
  139. package/dist/modules/market_adapter_whitelist.js.map +1 -1
  140. package/dist/modules/node_connect_policy.d.ts +52 -0
  141. package/dist/modules/node_connect_policy.d.ts.map +1 -0
  142. package/dist/modules/node_connect_policy.js +35 -0
  143. package/dist/modules/node_connect_policy.js.map +1 -0
  144. package/dist/modules/node_manager.d.ts +32 -0
  145. package/dist/modules/node_manager.d.ts.map +1 -1
  146. package/dist/modules/node_manager.js +76 -9
  147. package/dist/modules/node_manager.js.map +1 -1
  148. package/dist/modules/order/accounting.d.ts +30 -0
  149. package/dist/modules/order/accounting.d.ts.map +1 -1
  150. package/dist/modules/order/accounting.js +176 -3
  151. package/dist/modules/order/accounting.js.map +1 -1
  152. package/dist/modules/order/export.d.ts.map +1 -1
  153. package/dist/modules/order/export.js +1 -0
  154. package/dist/modules/order/export.js.map +1 -1
  155. package/dist/modules/order/grid.d.ts.map +1 -1
  156. package/dist/modules/order/grid.js +189 -25
  157. package/dist/modules/order/grid.js.map +1 -1
  158. package/dist/modules/order/grid_reconcile.d.ts.map +1 -1
  159. package/dist/modules/order/grid_reconcile.js +5 -3
  160. package/dist/modules/order/grid_reconcile.js.map +1 -1
  161. package/dist/modules/order/grid_reconcile_internal.d.ts.map +1 -1
  162. package/dist/modules/order/grid_reconcile_internal.js +216 -9
  163. package/dist/modules/order/grid_reconcile_internal.js.map +1 -1
  164. package/dist/modules/order/logger.js +1 -1
  165. package/dist/modules/order/logger.js.map +1 -1
  166. package/dist/modules/order/manager.d.ts +77 -2
  167. package/dist/modules/order/manager.d.ts.map +1 -1
  168. package/dist/modules/order/manager.js +283 -14
  169. package/dist/modules/order/manager.js.map +1 -1
  170. package/dist/modules/order/strategy.d.ts +3 -0
  171. package/dist/modules/order/strategy.d.ts.map +1 -1
  172. package/dist/modules/order/strategy.js +79 -7
  173. package/dist/modules/order/strategy.js.map +1 -1
  174. package/dist/modules/order/sync_engine.d.ts.map +1 -1
  175. package/dist/modules/order/sync_engine.js +16 -1
  176. package/dist/modules/order/sync_engine.js.map +1 -1
  177. package/dist/modules/order/utils/math.d.ts +16 -2
  178. package/dist/modules/order/utils/math.d.ts.map +1 -1
  179. package/dist/modules/order/utils/math.js +30 -3
  180. package/dist/modules/order/utils/math.js.map +1 -1
  181. package/dist/modules/order/utils/order.d.ts +258 -13
  182. package/dist/modules/order/utils/order.d.ts.map +1 -1
  183. package/dist/modules/order/utils/order.js +666 -13
  184. package/dist/modules/order/utils/order.js.map +1 -1
  185. package/dist/modules/order/utils/system.d.ts +36 -0
  186. package/dist/modules/order/utils/system.d.ts.map +1 -1
  187. package/dist/modules/order/utils/system.js +102 -6
  188. package/dist/modules/order/utils/system.js.map +1 -1
  189. package/dist/modules/order/utils/validate.d.ts.map +1 -1
  190. package/dist/modules/order/utils/validate.js +6 -2
  191. package/dist/modules/order/utils/validate.js.map +1 -1
  192. package/dist/modules/paths.d.ts +2 -0
  193. package/dist/modules/paths.d.ts.map +1 -1
  194. package/dist/modules/paths.js +1 -0
  195. package/dist/modules/paths.js.map +1 -1
  196. package/dist/modules/runtime_settings.d.ts +13 -0
  197. package/dist/modules/runtime_settings.d.ts.map +1 -1
  198. package/dist/modules/runtime_settings.js +20 -0
  199. package/dist/modules/runtime_settings.js.map +1 -1
  200. package/dist/modules/utils/errors.d.ts +16 -0
  201. package/dist/modules/utils/errors.d.ts.map +1 -1
  202. package/dist/modules/utils/errors.js +31 -0
  203. package/dist/modules/utils/errors.js.map +1 -1
  204. package/dist/pm2.js +7 -7
  205. package/dist/scripts/analyze-credit.d.ts.map +1 -1
  206. package/dist/scripts/analyze-credit.js +13 -3
  207. package/dist/scripts/analyze-credit.js.map +1 -1
  208. package/dist/scripts/analyze-orders.js +2 -2
  209. package/dist/scripts/analyze-orders.js.map +1 -1
  210. package/dist/scripts/diagnose-kibana-candles.d.ts.map +1 -1
  211. package/dist/scripts/diagnose-kibana-candles.js +0 -1
  212. package/dist/scripts/diagnose-kibana-candles.js.map +1 -1
  213. package/dist/scripts/generate_market_adapter_whitelist.d.ts.map +1 -1
  214. package/dist/scripts/generate_market_adapter_whitelist.js +3 -2
  215. package/dist/scripts/generate_market_adapter_whitelist.js.map +1 -1
  216. package/dist/scripts/test-credit-renewal.js +1 -1
  217. package/dist/scripts/test-credit-renewal.js.map +1 -1
  218. package/dist/scripts/tv.d.ts +24 -2
  219. package/dist/scripts/tv.d.ts.map +1 -1
  220. package/dist/scripts/tv.js +190 -65
  221. package/dist/scripts/tv.js.map +1 -1
  222. package/docs/BITSHARES_ONBOARDING.md +19 -4
  223. package/docs/COW_INVARIANTS.md +18 -1
  224. package/docs/DEXBOT_COMPARISON.md +3 -3
  225. package/docs/EVOLUTION.md +9 -7
  226. package/docs/FUND_MOVEMENT_AND_ACCOUNTING.md +21 -9
  227. package/docs/GRID_RECALCULATION.md +13 -13
  228. package/docs/GRID_RECONCILE.md +12 -2
  229. package/docs/MPA_CREDIT_USAGE.md +2 -2
  230. package/docs/README.md +5 -6
  231. package/docs/architecture.md +0 -58
  232. package/docs/developer_guide.md +2 -1
  233. package/docs/docker.md +1 -1
  234. package/market_adapter/README.md +17 -10
  235. package/modules/README.md +1 -1
  236. package/package.json +1 -1
  237. package/scripts/README.md +9 -7
  238. package/tests/README.md +2 -2
  239. package/analysis/results/ama_sweep_results_lp_pool_133_1h.json +0 -2455
  240. package/analysis/results/bot_fitting_results_lp_pool_133_1h.json +0 -218
  241. package/analysis/tradingview/h-bts_tradingview.html +0 -1570
  242. package/analysis/tradingview/t-bts_tradingview.html +0 -1570
@@ -97,6 +97,20 @@ declare function recoverFromPersistedGrid(bot: any): Promise<{
97
97
  success: boolean;
98
98
  reason?: undefined;
99
99
  }>;
100
+ /**
101
+ * Schedule a best-effort target-grid rebalance after a recovery sync.
102
+ *
103
+ * The sync is often called from a batch-abort catch (handleBatchHardAbort /
104
+ * recoverBatchSizeDrift) where a COW batch is still mid-teardown, or from flows
105
+ * holding the fill lock — broadcasting a fresh batch there would race the batch's
106
+ * own finally cleanup. Defer via a zero-delay timer and re-defer until both
107
+ * `_batchInFlight` and `_recoverySyncInFlight` settle, so the rebalance always
108
+ * runs in a clean context. At most one deferred rebalance is scheduled at a time.
109
+ *
110
+ * @param {import('./dexbot_class.js').DEXBot} bot
111
+ * @param {string} context - Label for logging
112
+ */
113
+ declare function _schedulePostRecoveryRebalance(bot: any, context: any): void;
100
114
  /**
101
115
  * Reject a corrupted grid snapshot when catastrophic fund drift is detected.
102
116
  * @param {import('./dexbot_class.js').DEXBot} bot
@@ -111,5 +125,5 @@ declare function rejectCorruptedGridSnapshot(bot: any, context: any): Promise<bo
111
125
  * @returns {Promise<boolean>}
112
126
  */
113
127
  declare function targetedOrderRepair(bot: any, orderIds: any): Promise<boolean>;
114
- export { persistAndRecoverIfNeeded, getRecentFillKeysSnapshot, triggerStateRecoverySync, abortFlowIfIllegalState, handleBatchHardAbort, applyRecoverableGridUpdates, recoverExplicitStaleOrders, recoverBatchSizeDrift, extractSizeDriftOrderIds, recoverFromPersistedGrid, rejectCorruptedGridSnapshot, targetedOrderRepair };
128
+ export { persistAndRecoverIfNeeded, getRecentFillKeysSnapshot, triggerStateRecoverySync, abortFlowIfIllegalState, handleBatchHardAbort, applyRecoverableGridUpdates, recoverExplicitStaleOrders, recoverBatchSizeDrift, extractSizeDriftOrderIds, recoverFromPersistedGrid, rejectCorruptedGridSnapshot, targetedOrderRepair, _schedulePostRecoveryRebalance as schedulePostRecoveryRebalance };
115
129
  //# sourceMappingURL=dexbot_state_recovery.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"dexbot_state_recovery.d.ts","sourceRoot":"","sources":["../../modules/dexbot_state_recovery.ts"],"names":[],"mappings":"AAAA,kFAAkF;AAgBlF;;;GAGG;AACH,iBAAe,yBAAyB,CAAC,GAAG,EAAE,GAAG,iBAchD;AAED;;;;GAIG;AACH,iBAAS,yBAAyB,CAAC,GAAG,EAAE,GAAG,0BAgB1C;AAED;;;;GAIG;AACH,iBAAe,wBAAwB,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,GAAE,GAA2B,iBAuCpF;AAED;;;;;GAKG;AACH,iBAAe,uBAAuB,CAAC,GAAG,EAAE,GAAG,EAAE,WAAW,EAAE,GAAG,oBAahE;AAED;;;;;;;GAOG;AACH,iBAAe,oBAAoB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,GAAE,GAAwB,EAAE,QAAQ,GAAE,GAAO;;;;;;;;UAsBzG;AAED;;;;;;GAMG;AACH,iBAAe,2BAA2B,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,GAAE,GAA+B,mBAuB1G;AAED;;;;;;GAMG;AACH,iBAAe,0BAA0B,CAAC,GAAG,EAAE,GAAG,EAAE,aAAa,EAAE,GAAG,EAAE,MAAM,GAAE,GAA2B;;;;;;;;;;GAyC1G;AAED;;;;;;GAMG;AACH,iBAAe,qBAAqB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,UAAU,GAAE,GAAQ;;;;;GA0C5E;AAED;;;;GAIG;AACH,iBAAS,wBAAwB,CAAC,UAAU,EAAE,GAAG,aAWhD;AAED;;;;GAIG;AACH,iBAAe,wBAAwB,CAAC,GAAG,EAAE,GAAG;;;;;;GAmL/C;AAyFD;;;;;GAKG;AACH,iBAAe,2BAA2B,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,oBA4BhE;AAED;;;;;GAKG;AACH,iBAAe,mBAAmB,CAAC,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,oBA+CzD;AAED,OAAO,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,wBAAwB,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,2BAA2B,EAAE,0BAA0B,EAAE,qBAAqB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,2BAA2B,EAAE,mBAAmB,EAAE,CAAA"}
1
+ {"version":3,"file":"dexbot_state_recovery.d.ts","sourceRoot":"","sources":["../../modules/dexbot_state_recovery.ts"],"names":[],"mappings":"AAAA,kFAAkF;AAgBlF;;;GAGG;AACH,iBAAe,yBAAyB,CAAC,GAAG,EAAE,GAAG,iBAchD;AAED;;;;GAIG;AACH,iBAAS,yBAAyB,CAAC,GAAG,EAAE,GAAG,0BAgB1C;AAED;;;;GAIG;AACH,iBAAe,wBAAwB,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,GAAE,GAA2B,iBAuCpF;AAED;;;;;GAKG;AACH,iBAAe,uBAAuB,CAAC,GAAG,EAAE,GAAG,EAAE,WAAW,EAAE,GAAG,oBAahE;AAED;;;;;;;GAOG;AACH,iBAAe,oBAAoB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,GAAE,GAAwB,EAAE,QAAQ,GAAE,GAAO;;;;;;;;UAsBzG;AAED;;;;;;GAMG;AACH,iBAAe,2BAA2B,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,GAAE,GAA+B,mBAuB1G;AAED;;;;;;GAMG;AACH,iBAAe,0BAA0B,CAAC,GAAG,EAAE,GAAG,EAAE,aAAa,EAAE,GAAG,EAAE,MAAM,GAAE,GAA2B;;;;;;;;;;GAyC1G;AAED;;;;;;GAMG;AACH,iBAAe,qBAAqB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,UAAU,GAAE,GAAQ;;;;;GA0C5E;AAED;;;;GAIG;AACH,iBAAS,wBAAwB,CAAC,UAAU,EAAE,GAAG,aAWhD;AAED;;;;GAIG;AACH,iBAAe,wBAAwB,CAAC,GAAG,EAAE,GAAG;;;;;;GAgN/C;AA8DD;;;;;;;;;;;;GAYG;AACH,iBAAS,8BAA8B,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,QA8B7D;AAED;;;;;GAKG;AACH,iBAAe,2BAA2B,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,oBAkChE;AAED;;;;;GAKG;AACH,iBAAe,mBAAmB,CAAC,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,oBA+CzD;AAED,OAAO,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,wBAAwB,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,2BAA2B,EAAE,0BAA0B,EAAE,qBAAqB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,2BAA2B,EAAE,mBAAmB,EAAE,8BAA8B,IAAI,6BAA6B,EAAE,CAAA"}
@@ -6,8 +6,8 @@ import { readOpenOrdersGuarded } from './chain_orders.js';
6
6
  import { ORDER_TYPES, TIMING } from './constants.js';
7
7
  import * as Format from './order/format.js';
8
8
  import * as grid from './order/grid.js';
9
- import { convertToSpreadPlaceholder, parseChainOrder } from './order/utils/order.js';
10
- import { restoreGapEvacStreaks } from './order/utils/system.js';
9
+ import { convertToSpreadPlaceholder, parseChainOrder, isNonBlockingUnmatchedOrder } from './order/utils/order.js';
10
+ import { restoreGapEvacStreaks, applyPersistedPendingCrawls } from './order/utils/system.js';
11
11
  import { blockchainToFloat, calculateGapSlots, validatePersistedBoundary } from './order/utils/math.js';
12
12
  import { hasExecutableActions } from './order/utils/validate.js';
13
13
  import { getErrorMessage } from './utils/errors.js';
@@ -317,6 +317,21 @@ async function recoverFromPersistedGrid(bot) {
317
317
  if (restoredStreaks > 0) {
318
318
  bot.manager.logger.log(`[GAP-EVAC] Restored ${restoredStreaks} persisted in-band streak(s) during recovery reload`, 'info');
319
319
  }
320
+ // Same contract as the startup resume path: fills recorded but never
321
+ // committed owe their crawl to the restored boundary, so apply the
322
+ // stored records BEFORE sync/reconcile — and before the persistGrid
323
+ // below, which would otherwise write the empty in-memory array and
324
+ // erase the owed crawls from disk without ever applying them. Shared
325
+ // helper, so startup and recovery cannot drift.
326
+ try {
327
+ await applyPersistedPendingCrawls(bot, {
328
+ forceReload: true,
329
+ log: (message, level) => bot.manager.logger.log(message, level)
330
+ });
331
+ }
332
+ catch (pendingErr) {
333
+ bot.manager.logger.log(`[BOUNDARY] Pending-crawl application failed during recovery reload (${getErrorMessage(pendingErr)}); continuing with the restored boundary`, 'warn');
334
+ }
320
335
  if (await bot._rejectCorruptedGridSnapshot('recovery')) {
321
336
  // P4: rejected snapshot's boundary must not survive for rebuild.
322
337
  // clearGrid() already wiped persisted boundaryIdx; also clear the
@@ -392,13 +407,21 @@ async function recoverFromPersistedGrid(bot) {
392
407
  const remainingUnmatched = Array.isArray(bot.manager?._lastUnmatchedChainOrders)
393
408
  ? bot.manager._lastUnmatchedChainOrders
394
409
  : [];
395
- if (remainingUnmatched.length > 0) {
396
- const sample = remainingUnmatched.slice(0, 3)
410
+ // Out-of-grid holds are permanent by design (live orders held outside
411
+ // the frozen rail): they survive every reload, so they must not fail
412
+ // snapshot recovery — otherwise each restart forces a full grid reset
413
+ // while a hold exists. Only adoptable/cancellable orphans reject.
414
+ const blockingUnmatched = remainingUnmatched.filter((u) => !isNonBlockingUnmatchedOrder(u));
415
+ if (blockingUnmatched.length > 0) {
416
+ const sample = blockingUnmatched.slice(0, 3)
397
417
  .map((o) => bot._formatUnmatchedChainOrderForLog(o))
398
418
  .join(' | ');
399
- bot.manager.logger.log(`[RECOVERY] Persisted grid reloaded but ${remainingUnmatched.length} unmatched chain order(s) ` +
419
+ bot.manager.logger.log(`[RECOVERY] Persisted grid reloaded but ${blockingUnmatched.length} unmatched chain order(s) ` +
400
420
  `remain${sample ? ` (${sample})` : ''}. Rejecting — full grid reset required.`, 'warn');
401
- return { success: false, reason: `grid inconsistent after reload: ${remainingUnmatched.length} unmatched remain` };
421
+ return { success: false, reason: `grid inconsistent after reload: ${blockingUnmatched.length} unmatched remain` };
422
+ }
423
+ if (remainingUnmatched.length > 0) {
424
+ bot.manager.logger.log(`[RECOVERY] Persisted grid reloaded with ${remainingUnmatched.length} out-of-grid hold(s) kept (no reset required).`, 'info');
402
425
  }
403
426
  const ordersArr = Array.from(bot.manager.orders.values());
404
427
  const bloatPostRecovery = isGridBloated(bot.manager, ordersArr);
@@ -444,8 +467,13 @@ async function _rebalanceAfterRecovery(bot, context) {
444
467
  try {
445
468
  const rebalanceResult = await bot.manager.performSafeRebalance([], new Set());
446
469
  if (!rebalanceResult || rebalanceResult.aborted) {
470
+ // A deferred abort means owed work is still outstanding (broadcast
471
+ // held the plan, or the identical-held-plan suppression is waiting
472
+ // for a fresh fill). That wait can be indefinite on a stale grid
473
+ // with no fills, so surface it — the spread-correction path and
474
+ // the out-of-spread watchdog are the heal paths, not this scheduler.
447
475
  bot.manager.logger?.log?.(`[RECOVERY] Target-grid rebalance skipped after ${context} ` +
448
- `(${rebalanceResult?.reason || 'aborted'})`, 'debug');
476
+ `(${rebalanceResult?.reason || 'aborted'})`, rebalanceResult?.deferred ? 'warn' : 'debug');
449
477
  return;
450
478
  }
451
479
  if (!hasExecutableActions(rebalanceResult)) {
@@ -491,9 +519,19 @@ function _schedulePostRecoveryRebalance(bot, context) {
491
519
  if (bot._shuttingDown)
492
520
  return;
493
521
  if (bot._batchInFlight > 0 || bot._recoverySyncInFlight > 0) {
522
+ // Throttled visibility: a pipeline that never clears would
523
+ // otherwise re-defer silently forever (the hang class of the
524
+ // 2026-09-12 incident). First wait at debug, then a warn every
525
+ // ~30s (120 x LOCK_REFRESH_MIN_MS) while still blocked.
526
+ bot._postRecoveryRebalanceDefers = (bot._postRecoveryRebalanceDefers || 0) + 1;
527
+ if (bot._postRecoveryRebalanceDefers === 1 || bot._postRecoveryRebalanceDefers % 120 === 0) {
528
+ bot.manager?.logger?.log?.(`[RECOVERY] Post-recovery rebalance (${context}) waiting for pipeline to clear ` +
529
+ `(batchInFlight=${bot._batchInFlight || 0}, recoverySyncInFlight=${bot._recoverySyncInFlight || 0}, waits=${bot._postRecoveryRebalanceDefers})`, bot._postRecoveryRebalanceDefers === 1 ? 'debug' : 'warn');
530
+ }
494
531
  bot._postRecoveryRebalanceTimer = setTimeout(run, TIMING.LOCK_REFRESH_MIN_MS);
495
532
  return;
496
533
  }
534
+ bot._postRecoveryRebalanceDefers = 0;
497
535
  _rebalanceAfterRecovery(bot, context);
498
536
  };
499
537
  bot._postRecoveryRebalanceTimer = setTimeout(run, 0);
@@ -532,6 +570,12 @@ async function rejectCorruptedGridSnapshot(bot, context) {
532
570
  }
533
571
  catch { }
534
572
  bot.manager.boundaryIdx = null;
573
+ // Owed crawls belonged to the rejected generation: the rebuild re-anchors
574
+ // the boundary absolutely, so applying their relative deltas would
575
+ // double-count the movement the new anchor already contains. clearGrid()
576
+ // wiped the persisted copy; drop the in-memory record (marks the grid
577
+ // dirty so the wipe reaches disk on the next flush too).
578
+ bot.manager._clearPendingFillCrawls?.('grid snapshot rejected');
535
579
  return true;
536
580
  }
537
581
  /**
@@ -583,5 +627,5 @@ async function targetedOrderRepair(bot, orderIds) {
583
627
  return false;
584
628
  }
585
629
  }
586
- export { persistAndRecoverIfNeeded, getRecentFillKeysSnapshot, triggerStateRecoverySync, abortFlowIfIllegalState, handleBatchHardAbort, applyRecoverableGridUpdates, recoverExplicitStaleOrders, recoverBatchSizeDrift, extractSizeDriftOrderIds, recoverFromPersistedGrid, rejectCorruptedGridSnapshot, targetedOrderRepair };
630
+ export { persistAndRecoverIfNeeded, getRecentFillKeysSnapshot, triggerStateRecoverySync, abortFlowIfIllegalState, handleBatchHardAbort, applyRecoverableGridUpdates, recoverExplicitStaleOrders, recoverBatchSizeDrift, extractSizeDriftOrderIds, recoverFromPersistedGrid, rejectCorruptedGridSnapshot, targetedOrderRepair, _schedulePostRecoveryRebalance as schedulePostRecoveryRebalance };
587
631
  //# sourceMappingURL=dexbot_state_recovery.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"dexbot_state_recovery.js","sourceRoot":"","sources":["../../modules/dexbot_state_recovery.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"dexbot_state_recovery.js","sourceRoot":"","sources":["../../modules/dexbot_state_recovery.ts"],"names":[],"mappings":"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"}
@@ -2,7 +2,7 @@
2
2
  * Register a bot's allocation on an account for a given side.
3
3
  * Called during bot startup.
4
4
  * @param {string} account - Blockchain account name (e.g., '1.2.x')
5
- * @param {string} botName - Bot identifier (e.g., 'AAA-BBB' or botKey)
5
+ * @param {string} botName - Bot identifier (e.g., '<bot>' or botKey)
6
6
  * @param {'buy'|'sell'} side - Trade side
7
7
  * @param {number|string} percentage - Percentage value (e.g., 1.0 or '100%')
8
8
  */
@@ -76,7 +76,7 @@ function _ensureAccount(registry, account) {
76
76
  * Register a bot's allocation on an account for a given side.
77
77
  * Called during bot startup.
78
78
  * @param {string} account - Blockchain account name (e.g., '1.2.x')
79
- * @param {string} botName - Bot identifier (e.g., 'AAA-BBB' or botKey)
79
+ * @param {string} botName - Bot identifier (e.g., '<bot>' or botKey)
80
80
  * @param {'buy'|'sell'} side - Trade side
81
81
  * @param {number|string} percentage - Percentage value (e.g., 1.0 or '100%')
82
82
  */
@@ -41,7 +41,7 @@ function loadMarketAdapterWhitelist() {
41
41
  const map = new Map();
42
42
  if (Array.isArray(raw)) {
43
43
  for (const botKey of raw) {
44
- map.set(String(botKey), { ama: true, dynamicWeight: true, asymmetricBounds: true });
44
+ map.set(String(botKey), { ama: true, dynamicWeight: false, asymmetricBounds: false });
45
45
  }
46
46
  }
47
47
  else if (raw && typeof raw === 'object') {
@@ -1 +1 @@
1
- {"version":3,"file":"market_adapter_whitelist.js","sourceRoot":"","sources":["../../modules/market_adapter_whitelist.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"market_adapter_whitelist.js","sourceRoot":"","sources":["../../modules/market_adapter_whitelist.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;AAC7B,MAAM,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC;AAE7B,mEAAmE;AACnE,wEAAwE;AACxE,mCAAmC;AACnC,SAAS,aAAa;IAClB,OAAO,MAAM,CAAC,yCAAyC,IAAI,KAAK,CAAC,QAAQ,CAAC,6BAA6B,EAAE,CAAC;AAC9G,CAAC;AAQD,IAAI,eAAe,GAA+C,IAAI,CAAC;AAEvE,SAAS,gCAAgC;IACrC,eAAe,GAAG,IAAI,CAAC;AAC3B,CAAC;AAED,SAAS,cAAc,CAAC,KAAU;IAC9B,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACjB,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,CAAC;IACtE,CAAC;IACD,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACtC,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,gBAAgB,EAAE,KAAK,EAAE,CAAC;IACzE,CAAC;IACD,OAAO;QACH,GAAG,EAAE,KAAK,CAAC,GAAG,KAAK,IAAI;QACvB,aAAa,EAAE,KAAK,CAAC,aAAa,KAAK,IAAI;QAC3C,gBAAgB,EAAE,KAAK,CAAC,gBAAgB,KAAK,IAAI;KACpD,CAAC;AACN,CAAC;AAED,SAAS,0BAA0B;IAC/B,IAAI,eAAe,KAAK,IAAI;QAAE,OAAO,eAAe,CAAC;IACrD,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC,EAAE,CAAC;QACnC,eAAe,GAAG,KAAK,CAAC;QACxB,OAAO,eAAe,CAAC;IAC3B,CAAC;IAED,IAAI,CAAC;QACD,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,EAAE,CAAC,CAAC;QACvC,MAAM,GAAG,GAAG,IAAI,EAAE,SAAS,CAAC;QAC5B,MAAM,GAAG,GAAG,IAAI,GAAG,EAA0B,CAAC;QAE9C,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YACrB,KAAK,MAAM,MAAM,IAAI,GAAG,EAAE,CAAC;gBACvB,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,gBAAgB,EAAE,KAAK,EAAE,CAAC,CAAC;YAC1F,CAAC;QACL,CAAC;aAAM,IAAI,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;YACxC,KAAK,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;gBAChD,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC;YACnD,CAAC;QACL,CAAC;QAED,eAAe,GAAG,GAAG,CAAC;QACtB,OAAO,eAAe,CAAC;IAC3B,CAAC;IAAC,OAAO,CAAM,EAAE,CAAC;QACd,OAAO,CAAC,IAAI,CAAC,0BAA0B,aAAa,EAAE,KAAK,eAAe,CAAC,CAAC,CAAC,oCAAoC,CAAC,CAAC;QACnH,eAAe,GAAG,KAAK,CAAC;QACxB,OAAO,eAAe,CAAC;IAC3B,CAAC;AACL,CAAC;AAED,SAAS,iBAAiB,CAAC,MAAc;IACrC,MAAM,SAAS,GAAG,0BAA0B,EAAE,CAAC;IAC/C,IAAI,SAAS,KAAK,KAAK,IAAI,CAAC,MAAM,EAAE,CAAC;QACjC,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,gBAAgB,EAAE,KAAK,EAAE,CAAC;IACzE,CAAC;IACD,OAAO,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,gBAAgB,EAAE,KAAK,EAAE,CAAC;AAC1G,CAAC;AAED,SAAS,gBAAgB,CAAC,MAAc;IACpC,OAAO,iBAAiB,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC;AAClD,CAAC;AAED,SAAS,6BAA6B,CAAC,MAAc;IACjD,OAAO,iBAAiB,CAAC,MAAM,CAAC,CAAC,aAAa,KAAK,IAAI,CAAC;AAC5D,CAAC;AAED,SAAS,gCAAgC,CAAC,MAAc;IACpD,OAAO,iBAAiB,CAAC,MAAM,CAAC,CAAC,gBAAgB,KAAK,IAAI,CAAC;AAC/D,CAAC;AAED,OAAO,EAAE,aAAa,EAAE,gCAAgC,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,6BAA6B,EAAE,gCAAgC,EAAE,CAAA"}
@@ -0,0 +1,52 @@
1
+ /**
2
+ * modules/node_connect_policy.ts - Pure post-connect node-quality policy
3
+ *
4
+ * The BitShares client's `handleConnectionStatus('connected')` has two
5
+ * node-quality concerns after the transport reports a connection:
6
+ * 1. an autonomous reconnect may have re-landed on a blacklisted node, so the
7
+ * client must switch to a healthy one (and never tear down a socket from
8
+ * inside the transport's own status callback — the caller defers), and
9
+ * 2. otherwise the transport's candidate list should be aligned with the
10
+ * current healthy set so future reconnects avoid known-bad nodes.
11
+ *
12
+ * The decision is extracted here with no imports and no I/O so it can be
13
+ * unit-tested without constructing the whole native client or a live
14
+ * NodeManager. Callers own the side effects.
15
+ */
16
+ export interface ConnectedNodePolicyInput {
17
+ /** `nodeConfig.healthCheck.enabled !== false`. */
18
+ healthCheckEnabled: boolean;
19
+ /** A restart/failover is already in progress; do not start another. */
20
+ reconnectInProgress: boolean;
21
+ /** Transport's currently active node (null/undefined when unknown). */
22
+ activeNode: string | null | undefined;
23
+ /** `nodeManager.isBlacklisted`. */
24
+ isBlacklisted: (nodeUrl: string) => boolean;
25
+ /** `nodeManager.getHealthyNodes`. */
26
+ getHealthyNodes: () => string[];
27
+ }
28
+ export type ConnectedNodePolicyAction = {
29
+ action: 'switch';
30
+ nodes: string[];
31
+ reason: 'connected-on-blacklisted-node';
32
+ } | {
33
+ action: 'align';
34
+ nodes: string[];
35
+ } | {
36
+ action: 'none';
37
+ };
38
+ /**
39
+ * Decide what the client should do after the transport connects.
40
+ *
41
+ * - `switch`: active node is blacklisted and healthy alternatives exist;
42
+ * reconnect to the healthy set (deferred by the caller).
43
+ * - `align`: active node is fine; keep the transport candidate list aligned
44
+ * with the healthy set.
45
+ * - `none`: nothing to do (health checks disabled, a reconnect is already in
46
+ * progress, or there is no usable healthy set).
47
+ *
48
+ * @param {ConnectedNodePolicyInput} input
49
+ * @returns {ConnectedNodePolicyAction}
50
+ */
51
+ export declare function resolveConnectedNodeAction(input: ConnectedNodePolicyInput): ConnectedNodePolicyAction;
52
+ //# sourceMappingURL=node_connect_policy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node_connect_policy.d.ts","sourceRoot":"","sources":["../../modules/node_connect_policy.ts"],"names":[],"mappings":"AACA;;;;;;;;;;;;;;GAcG;AAEH,MAAM,WAAW,wBAAwB;IACrC,kDAAkD;IAClD,kBAAkB,EAAE,OAAO,CAAC;IAC5B,uEAAuE;IACvE,mBAAmB,EAAE,OAAO,CAAC;IAC7B,uEAAuE;IACvE,UAAU,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACtC,mCAAmC;IACnC,aAAa,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC;IAC5C,qCAAqC;IACrC,eAAe,EAAE,MAAM,MAAM,EAAE,CAAC;CACnC;AAED,MAAM,MAAM,yBAAyB,GAC/B;IAAE,MAAM,EAAE,QAAQ,CAAC;IAAC,KAAK,EAAE,MAAM,EAAE,CAAC;IAAC,MAAM,EAAE,+BAA+B,CAAA;CAAE,GAC9E;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,MAAM,EAAE,CAAA;CAAE,GACpC;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAEzB;;;;;;;;;;;;GAYG;AACH,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,wBAAwB,GAAG,yBAAyB,CAqBrG"}
@@ -0,0 +1,35 @@
1
+ 'use strict';
2
+ /**
3
+ * Decide what the client should do after the transport connects.
4
+ *
5
+ * - `switch`: active node is blacklisted and healthy alternatives exist;
6
+ * reconnect to the healthy set (deferred by the caller).
7
+ * - `align`: active node is fine; keep the transport candidate list aligned
8
+ * with the healthy set.
9
+ * - `none`: nothing to do (health checks disabled, a reconnect is already in
10
+ * progress, or there is no usable healthy set).
11
+ *
12
+ * @param {ConnectedNodePolicyInput} input
13
+ * @returns {ConnectedNodePolicyAction}
14
+ */
15
+ export function resolveConnectedNodeAction(input) {
16
+ if (!input.healthCheckEnabled || input.reconnectInProgress) {
17
+ return { action: 'none' };
18
+ }
19
+ const activeNode = input.activeNode || null;
20
+ if (activeNode && input.isBlacklisted(activeNode)) {
21
+ const healthy = input.getHealthyNodes();
22
+ if (healthy.length > 0) {
23
+ return { action: 'switch', nodes: healthy, reason: 'connected-on-blacklisted-node' };
24
+ }
25
+ // Blacklisted but no alternative: stay put rather than disconnect from
26
+ // the only node we can currently reach.
27
+ return { action: 'none' };
28
+ }
29
+ const healthy = input.getHealthyNodes();
30
+ if (healthy.length > 0) {
31
+ return { action: 'align', nodes: healthy };
32
+ }
33
+ return { action: 'none' };
34
+ }
35
+ //# sourceMappingURL=node_connect_policy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node_connect_policy.js","sourceRoot":"","sources":["../../modules/node_connect_policy.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAmCb;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,0BAA0B,CAAC,KAA+B;IACtE,IAAI,CAAC,KAAK,CAAC,kBAAkB,IAAI,KAAK,CAAC,mBAAmB,EAAE,CAAC;QACzD,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;IAC9B,CAAC;IAED,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,IAAI,IAAI,CAAC;IAC5C,IAAI,UAAU,IAAI,KAAK,CAAC,aAAa,CAAC,UAAU,CAAC,EAAE,CAAC;QAChD,MAAM,OAAO,GAAG,KAAK,CAAC,eAAe,EAAE,CAAC;QACxC,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACrB,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,+BAA+B,EAAE,CAAC;QACzF,CAAC;QACD,uEAAuE;QACvE,wCAAwC;QACxC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;IAC9B,CAAC;IAED,MAAM,OAAO,GAAG,KAAK,CAAC,eAAe,EAAE,CAAC;IACxC,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrB,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;IAC/C,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;AAC9B,CAAC"}
@@ -48,6 +48,7 @@ interface NodeManagerConfig {
48
48
  timeoutMs?: number;
49
49
  maxPingMs?: number;
50
50
  blacklistThreshold?: number;
51
+ liveFailureSuccessStreak?: number;
51
52
  enabled?: boolean;
52
53
  };
53
54
  selection?: {
@@ -138,6 +139,23 @@ declare class NodeManager {
138
139
  latency: number | null;
139
140
  error: string | null;
140
141
  }>;
142
+ /**
143
+ * Record a successful health-probe result: set status/latency and decide
144
+ * whether to clear the failure ledger.
145
+ *
146
+ * A single successful probe must not erase strikes that came from the live
147
+ * transport. Require `liveFailureSuccessStreak` consecutive successes before
148
+ * clearing those, so a genuinely flapping node keeps accumulating toward
149
+ * BLACKLIST_THRESHOLD while a recovered node is still re-admitted (status is
150
+ * set either way). Strikes whose last source was a health check clear on the
151
+ * first success, preserving normal probe recovery.
152
+ *
153
+ * @returns {{ recovered: boolean, failureCount: number }}
154
+ */
155
+ _recordHealthCheckSuccess(nodeUrl: string, status: string, latencyMs: number | null, chainId: string | null): {
156
+ recovered: boolean;
157
+ failureCount: number;
158
+ };
141
159
  _shouldLogBlacklistWarning(nodeUrl: string, errorMessage: string, nowMs?: number): boolean;
142
160
  _clearBlacklistWarningCooldown(nodeUrl?: string | null): void;
143
161
  /**
@@ -176,6 +194,20 @@ declare class NodeManager {
176
194
  * @returns {string|null} Best node URL or null if none available
177
195
  */
178
196
  getBestNode(): string | null;
197
+ /**
198
+ * Whether a node is currently blacklisted.
199
+ * @param {string} nodeUrl - Node URL
200
+ * @returns {boolean}
201
+ */
202
+ isBlacklisted(nodeUrl: string): boolean;
203
+ /**
204
+ * Whether a node should be avoided for selection/reconnect right now
205
+ * (currently failed or blacklisted). Healthy, slow, and not-yet-checked
206
+ * nodes are treated as usable.
207
+ * @param {string} nodeUrl - Node URL
208
+ * @returns {boolean}
209
+ */
210
+ shouldAvoidNode(nodeUrl: string): boolean;
179
211
  /**
180
212
  * Report a node failure (from health check or broadcast).
181
213
  * Increments failureCount and auto-blacklists when the threshold is reached.
@@ -1 +1 @@
1
- {"version":3,"file":"node_manager.d.ts","sourceRoot":"","sources":["../../modules/node_manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"node_manager.d.ts","sourceRoot":"","sources":["../../modules/node_manager.ts"],"names":[],"mappings":"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"}
@@ -98,6 +98,9 @@ class NodeManager {
98
98
  timeoutMs: config.healthCheck?.timeoutMs ?? NODE_MANAGEMENT.HEALTH_CHECK_TIMEOUT_MS,
99
99
  maxPingMs: config.healthCheck?.maxPingMs ?? NODE_MANAGEMENT.MAX_PING_MS,
100
100
  blacklistThreshold: config.healthCheck?.blacklistThreshold ?? NODE_MANAGEMENT.BLACKLIST_THRESHOLD,
101
+ liveFailureSuccessStreak: Number(config.healthCheck?.liveFailureSuccessStreak) > 0
102
+ ? Number(config.healthCheck?.liveFailureSuccessStreak)
103
+ : NODE_MANAGEMENT.LIVE_FAILURE_HEALTH_SUCCESS_STREAK,
101
104
  enabled: config.healthCheck?.enabled ?? true
102
105
  },
103
106
  selection: {
@@ -151,7 +154,11 @@ class NodeManager {
151
154
  lastCheckTime: null,
152
155
  lastErrorMessage: null,
153
156
  chainId: null,
154
- blacklistedAt: null
157
+ blacklistedAt: null,
158
+ // Recovery confirmation: how many consecutive successful
159
+ // probes since the last live-transport failure.
160
+ healthCheckSuccessStreak: 0,
161
+ lastFailureSource: null
155
162
  });
156
163
  }
157
164
  }
@@ -349,14 +356,7 @@ class NodeManager {
349
356
  }
350
357
  // Classify health
351
358
  const status = latencyMs > this.config.healthCheck.maxPingMs ? 'slow' : 'healthy';
352
- // Update stats
353
- stats.status = status;
354
- stats.latencyMs = latencyMs;
355
- stats.failureCount = 0;
356
- this.failureLedger.reset(nodeUrl);
357
- stats.lastCheckTime = nowIso();
358
- stats.lastErrorMessage = null;
359
- stats.chainId = result;
359
+ this._recordHealthCheckSuccess(nodeUrl, status, latencyMs, result);
360
360
  if (status === 'healthy') {
361
361
  this.logger.debug(`✓ ${nodeUrl.substring(0, 40)}... (${latencyMs}ms)`);
362
362
  }
@@ -374,6 +374,45 @@ class NodeManager {
374
374
  return { status: stats.status, latency: null, error: getErrorMessage(err) };
375
375
  }
376
376
  }
377
+ /**
378
+ * Record a successful health-probe result: set status/latency and decide
379
+ * whether to clear the failure ledger.
380
+ *
381
+ * A single successful probe must not erase strikes that came from the live
382
+ * transport. Require `liveFailureSuccessStreak` consecutive successes before
383
+ * clearing those, so a genuinely flapping node keeps accumulating toward
384
+ * BLACKLIST_THRESHOLD while a recovered node is still re-admitted (status is
385
+ * set either way). Strikes whose last source was a health check clear on the
386
+ * first success, preserving normal probe recovery.
387
+ *
388
+ * @returns {{ recovered: boolean, failureCount: number }}
389
+ */
390
+ _recordHealthCheckSuccess(nodeUrl, status, latencyMs, chainId) {
391
+ const stats = this.nodeStats.get(nodeUrl);
392
+ if (!stats)
393
+ return { recovered: false, failureCount: 0 };
394
+ const priorSource = stats.lastFailureSource;
395
+ const liveFailure = !!priorSource && priorSource !== 'health-check';
396
+ stats.healthCheckSuccessStreak = (stats.healthCheckSuccessStreak || 0) + 1;
397
+ const successStreak = this.config.healthCheck.liveFailureSuccessStreak;
398
+ const recovered = !liveFailure || stats.healthCheckSuccessStreak >= successStreak;
399
+ stats.status = status;
400
+ stats.latencyMs = latencyMs;
401
+ stats.lastCheckTime = nowIso();
402
+ stats.lastErrorMessage = null;
403
+ stats.chainId = chainId;
404
+ if (recovered) {
405
+ stats.failureCount = 0;
406
+ stats.lastFailureSource = null;
407
+ stats.healthCheckSuccessStreak = 0;
408
+ this.failureLedger.reset(nodeUrl);
409
+ }
410
+ else {
411
+ this.logger.debug(`${nodeUrl.substring(0, 40)}... ${status} but retaining ${stats.failureCount} live-transport strike(s) ` +
412
+ `(success streak ${stats.healthCheckSuccessStreak}/${successStreak})`);
413
+ }
414
+ return { recovered, failureCount: stats.failureCount };
415
+ }
377
416
  _shouldLogBlacklistWarning(nodeUrl, errorMessage, nowMs = Date.now()) {
378
417
  const errorKey = (errorMessage || '').slice(0, 160);
379
418
  const warnKey = `${nodeUrl}\0${errorKey}`;
@@ -554,6 +593,25 @@ class NodeManager {
554
593
  const healthy = this.getHealthyNodes();
555
594
  return healthy.length > 0 ? healthy[0] : null;
556
595
  }
596
+ /**
597
+ * Whether a node is currently blacklisted.
598
+ * @param {string} nodeUrl - Node URL
599
+ * @returns {boolean}
600
+ */
601
+ isBlacklisted(nodeUrl) {
602
+ return this.nodeStats.get(nodeUrl)?.status === 'blacklisted';
603
+ }
604
+ /**
605
+ * Whether a node should be avoided for selection/reconnect right now
606
+ * (currently failed or blacklisted). Healthy, slow, and not-yet-checked
607
+ * nodes are treated as usable.
608
+ * @param {string} nodeUrl - Node URL
609
+ * @returns {boolean}
610
+ */
611
+ shouldAvoidNode(nodeUrl) {
612
+ const status = this.nodeStats.get(nodeUrl)?.status;
613
+ return status === 'failed' || status === 'blacklisted';
614
+ }
557
615
  /**
558
616
  * Report a node failure (from health check or broadcast).
559
617
  * Increments failureCount and auto-blacklists when the threshold is reached.
@@ -576,6 +634,11 @@ class NodeManager {
576
634
  stats.lastCheckTime = nowIso();
577
635
  if (errorMessage)
578
636
  stats.lastErrorMessage = errorMessage;
637
+ // Remember the source so a later health-check success knows whether the
638
+ // strike came from the live transport (retain) or a probe (clearable).
639
+ // Recorded even when the ledger rate-limits this report.
640
+ stats.lastFailureSource = source || 'unknown';
641
+ stats.healthCheckSuccessStreak = 0;
579
642
  if (result.outcome === 'rate-limited' || result.outcome === 'skipped-blacklisted') {
580
643
  return;
581
644
  }
@@ -625,6 +688,8 @@ class NodeManager {
625
688
  stats.latencyMs = null;
626
689
  stats.lastErrorMessage = null;
627
690
  stats.blacklistedAt = null;
691
+ stats.lastFailureSource = null;
692
+ stats.healthCheckSuccessStreak = 0;
628
693
  this.failureLedger.reset(nodeUrl);
629
694
  this._clearBlacklistWarningCooldown(nodeUrl);
630
695
  this.saveBlacklistState();
@@ -643,6 +708,8 @@ class NodeManager {
643
708
  stats.lastErrorMessage = null;
644
709
  stats.chainId = null;
645
710
  stats.blacklistedAt = null;
711
+ stats.lastFailureSource = null;
712
+ stats.healthCheckSuccessStreak = 0;
646
713
  }
647
714
  this.failureLedger.clear();
648
715
  this._clearBlacklistWarningCooldown();