dexbot 1.1.10

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 (807) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +287 -0
  3. package/claw/README.md +513 -0
  4. package/claw/scripts/memu_runner.py +385 -0
  5. package/claw/skills/bitshares-guide/SKILL.md +14 -0
  6. package/claw/skills/bitshares-guide/references/example-skill-shells.md +18 -0
  7. package/claw/skills/bitshares-guide/references/presentation-patterns.md +19 -0
  8. package/claw/skills/bitshares-guide/references/scope-guardrails.md +9 -0
  9. package/claw/skills/launcher-ops/SKILL.md +18 -0
  10. package/claw/skills/launcher-ops/references/launcher-workflow.md +23 -0
  11. package/claw/skills/margin-trading/SKILL.md +23 -0
  12. package/claw/skills/margin-trading/references/honest-asset-list.md +74 -0
  13. package/claw/skills/margin-trading/references/honest-assets.md +44 -0
  14. package/claw/skills/margin-trading/references/position-management.md +203 -0
  15. package/claw/skills/margin-trading/references/trading-concepts.md +80 -0
  16. package/claw/skills/memu-memory/SKILL.md +218 -0
  17. package/claw/skills/shared/references/js-automation-overview.md +24 -0
  18. package/claw/skills/shared/references/safety-and-staleness.md +11 -0
  19. package/claw/skills/shared/references/skill-boundaries.md +17 -0
  20. package/claw/skills/trend-detection/SKILL.md +33 -0
  21. package/claw/skills/trend-detection/agents/openai.yaml +3 -0
  22. package/claw/skills/trend-detection/references/service.md +45 -0
  23. package/dist/analysis/ama_fitting/analyze_ama_price_changes.d.ts +3 -0
  24. package/dist/analysis/ama_fitting/analyze_ama_price_changes.d.ts.map +1 -0
  25. package/dist/analysis/ama_fitting/analyze_ama_price_changes.js +149 -0
  26. package/dist/analysis/ama_fitting/analyze_ama_price_changes.js.map +1 -0
  27. package/dist/analysis/ama_fitting/analyze_lambda_vs_slow.d.ts +3 -0
  28. package/dist/analysis/ama_fitting/analyze_lambda_vs_slow.d.ts.map +1 -0
  29. package/dist/analysis/ama_fitting/analyze_lambda_vs_slow.js +387 -0
  30. package/dist/analysis/ama_fitting/analyze_lambda_vs_slow.js.map +1 -0
  31. package/dist/analysis/ama_fitting/calibrate_convergence_er.d.ts +3 -0
  32. package/dist/analysis/ama_fitting/calibrate_convergence_er.d.ts.map +1 -0
  33. package/dist/analysis/ama_fitting/calibrate_convergence_er.js +200 -0
  34. package/dist/analysis/ama_fitting/calibrate_convergence_er.js.map +1 -0
  35. package/dist/analysis/ama_fitting/fetch_lp_candles.d.ts +3 -0
  36. package/dist/analysis/ama_fitting/fetch_lp_candles.d.ts.map +1 -0
  37. package/dist/analysis/ama_fitting/fetch_lp_candles.js +212 -0
  38. package/dist/analysis/ama_fitting/fetch_lp_candles.js.map +1 -0
  39. package/dist/analysis/ama_fitting/generate_unified_comparison_chart.d.ts +31 -0
  40. package/dist/analysis/ama_fitting/generate_unified_comparison_chart.d.ts.map +1 -0
  41. package/dist/analysis/ama_fitting/generate_unified_comparison_chart.js +249 -0
  42. package/dist/analysis/ama_fitting/generate_unified_comparison_chart.js.map +1 -0
  43. package/dist/analysis/ama_fitting/optimizer_high_resolution.d.ts +2 -0
  44. package/dist/analysis/ama_fitting/optimizer_high_resolution.d.ts.map +1 -0
  45. package/dist/analysis/ama_fitting/optimizer_high_resolution.js +782 -0
  46. package/dist/analysis/ama_fitting/optimizer_high_resolution.js.map +1 -0
  47. package/dist/analysis/analyze_derivatives.d.ts +95 -0
  48. package/dist/analysis/analyze_derivatives.d.ts.map +1 -0
  49. package/dist/analysis/analyze_derivatives.js +295 -0
  50. package/dist/analysis/analyze_derivatives.js.map +1 -0
  51. package/dist/analysis/analyze_dynamic_weight.d.ts +14 -0
  52. package/dist/analysis/analyze_dynamic_weight.d.ts.map +1 -0
  53. package/dist/analysis/analyze_dynamic_weight.js +208 -0
  54. package/dist/analysis/analyze_dynamic_weight.js.map +1 -0
  55. package/dist/analysis/analyze_kalman.d.ts +13 -0
  56. package/dist/analysis/analyze_kalman.d.ts.map +1 -0
  57. package/dist/analysis/analyze_kalman.js +123 -0
  58. package/dist/analysis/analyze_kalman.js.map +1 -0
  59. package/dist/analysis/analyze_regime.d.ts +20 -0
  60. package/dist/analysis/analyze_regime.d.ts.map +1 -0
  61. package/dist/analysis/analyze_regime.js +139 -0
  62. package/dist/analysis/analyze_regime.js.map +1 -0
  63. package/dist/analysis/analyze_regime_windows.d.ts +19 -0
  64. package/dist/analysis/analyze_regime_windows.d.ts.map +1 -0
  65. package/dist/analysis/analyze_regime_windows.js +413 -0
  66. package/dist/analysis/analyze_regime_windows.js.map +1 -0
  67. package/dist/analysis/analyze_risk_profile.d.ts +3 -0
  68. package/dist/analysis/analyze_risk_profile.d.ts.map +1 -0
  69. package/dist/analysis/analyze_risk_profile.js +159 -0
  70. package/dist/analysis/analyze_risk_profile.js.map +1 -0
  71. package/dist/analysis/analyze_trade_heatmap.d.ts +3 -0
  72. package/dist/analysis/analyze_trade_heatmap.d.ts.map +1 -0
  73. package/dist/analysis/analyze_trade_heatmap.js +367 -0
  74. package/dist/analysis/analyze_trade_heatmap.js.map +1 -0
  75. package/dist/analysis/analyze_volatility.d.ts +22 -0
  76. package/dist/analysis/analyze_volatility.d.ts.map +1 -0
  77. package/dist/analysis/analyze_volatility.js +172 -0
  78. package/dist/analysis/analyze_volatility.js.map +1 -0
  79. package/dist/analysis/bot_fitting/backtest_ama_sweep.d.ts +99 -0
  80. package/dist/analysis/bot_fitting/backtest_ama_sweep.d.ts.map +1 -0
  81. package/dist/analysis/bot_fitting/backtest_ama_sweep.js +804 -0
  82. package/dist/analysis/bot_fitting/backtest_ama_sweep.js.map +1 -0
  83. package/dist/analysis/bot_fitting/backtest_bot_fitting.d.ts +2 -0
  84. package/dist/analysis/bot_fitting/backtest_bot_fitting.d.ts.map +1 -0
  85. package/dist/analysis/bot_fitting/backtest_bot_fitting.js +347 -0
  86. package/dist/analysis/bot_fitting/backtest_bot_fitting.js.map +1 -0
  87. package/dist/analysis/bot_fitting/shared_utils.d.ts +15 -0
  88. package/dist/analysis/bot_fitting/shared_utils.d.ts.map +1 -0
  89. package/dist/analysis/bot_fitting/shared_utils.js +48 -0
  90. package/dist/analysis/bot_fitting/shared_utils.js.map +1 -0
  91. package/dist/analysis/bot_key_utils.d.ts +16 -0
  92. package/dist/analysis/bot_key_utils.d.ts.map +1 -0
  93. package/dist/analysis/bot_key_utils.js +61 -0
  94. package/dist/analysis/bot_key_utils.js.map +1 -0
  95. package/dist/analysis/bot_usage/discover_bot_accounts.d.ts +3 -0
  96. package/dist/analysis/bot_usage/discover_bot_accounts.d.ts.map +1 -0
  97. package/dist/analysis/bot_usage/discover_bot_accounts.js +498 -0
  98. package/dist/analysis/bot_usage/discover_bot_accounts.js.map +1 -0
  99. package/dist/analysis/bot_usage/kibana_bot_queries.d.ts +546 -0
  100. package/dist/analysis/bot_usage/kibana_bot_queries.d.ts.map +1 -0
  101. package/dist/analysis/bot_usage/kibana_bot_queries.js +427 -0
  102. package/dist/analysis/bot_usage/kibana_bot_queries.js.map +1 -0
  103. package/dist/analysis/chart_utils.d.ts +13 -0
  104. package/dist/analysis/chart_utils.d.ts.map +1 -0
  105. package/dist/analysis/chart_utils.js +142 -0
  106. package/dist/analysis/chart_utils.js.map +1 -0
  107. package/dist/analysis/derivative_chart_generator.d.ts +18 -0
  108. package/dist/analysis/derivative_chart_generator.d.ts.map +1 -0
  109. package/dist/analysis/derivative_chart_generator.js +896 -0
  110. package/dist/analysis/derivative_chart_generator.js.map +1 -0
  111. package/dist/analysis/math_utils.d.ts +35 -0
  112. package/dist/analysis/math_utils.d.ts.map +1 -0
  113. package/dist/analysis/math_utils.js +121 -0
  114. package/dist/analysis/math_utils.js.map +1 -0
  115. package/dist/analysis/price_sources.d.ts +34 -0
  116. package/dist/analysis/price_sources.d.ts.map +1 -0
  117. package/dist/analysis/price_sources.js +103 -0
  118. package/dist/analysis/price_sources.js.map +1 -0
  119. package/dist/analysis/trade_profitability.d.ts +115 -0
  120. package/dist/analysis/trade_profitability.d.ts.map +1 -0
  121. package/dist/analysis/trade_profitability.js +1247 -0
  122. package/dist/analysis/trade_profitability.js.map +1 -0
  123. package/dist/analysis/tradingview/analyze_tradingview.d.ts +38 -0
  124. package/dist/analysis/tradingview/analyze_tradingview.d.ts.map +1 -0
  125. package/dist/analysis/tradingview/analyze_tradingview.js +212 -0
  126. package/dist/analysis/tradingview/analyze_tradingview.js.map +1 -0
  127. package/dist/analysis/tradingview/tradingview_uplot_chart_generator.d.ts +9 -0
  128. package/dist/analysis/tradingview/tradingview_uplot_chart_generator.d.ts.map +1 -0
  129. package/dist/analysis/tradingview/tradingview_uplot_chart_generator.js +1717 -0
  130. package/dist/analysis/tradingview/tradingview_uplot_chart_generator.js.map +1 -0
  131. package/dist/analysis/trend_detection/derivative_analyzer.d.ts +250 -0
  132. package/dist/analysis/trend_detection/derivative_analyzer.d.ts.map +1 -0
  133. package/dist/analysis/trend_detection/derivative_analyzer.js +903 -0
  134. package/dist/analysis/trend_detection/derivative_analyzer.js.map +1 -0
  135. package/dist/analysis/trend_detection/dynamic_weight_chart_generator.d.ts +6 -0
  136. package/dist/analysis/trend_detection/dynamic_weight_chart_generator.d.ts.map +1 -0
  137. package/dist/analysis/trend_detection/dynamic_weight_chart_generator.js +1449 -0
  138. package/dist/analysis/trend_detection/dynamic_weight_chart_generator.js.map +1 -0
  139. package/dist/analysis/trend_detection/hurst_analyzer.d.ts +42 -0
  140. package/dist/analysis/trend_detection/hurst_analyzer.d.ts.map +1 -0
  141. package/dist/analysis/trend_detection/hurst_analyzer.js +159 -0
  142. package/dist/analysis/trend_detection/hurst_analyzer.js.map +1 -0
  143. package/dist/analysis/trend_detection/kalman_chart_generator.d.ts +6 -0
  144. package/dist/analysis/trend_detection/kalman_chart_generator.d.ts.map +1 -0
  145. package/dist/analysis/trend_detection/kalman_chart_generator.js +408 -0
  146. package/dist/analysis/trend_detection/kalman_chart_generator.js.map +1 -0
  147. package/dist/analysis/trend_detection/kalman_trend_analyzer.d.ts +103 -0
  148. package/dist/analysis/trend_detection/kalman_trend_analyzer.d.ts.map +1 -0
  149. package/dist/analysis/trend_detection/kalman_trend_analyzer.js +229 -0
  150. package/dist/analysis/trend_detection/kalman_trend_analyzer.js.map +1 -0
  151. package/dist/analysis/trend_detection/kalman_velocity_smoothing.d.ts +34 -0
  152. package/dist/analysis/trend_detection/kalman_velocity_smoothing.d.ts.map +1 -0
  153. package/dist/analysis/trend_detection/kalman_velocity_smoothing.js +89 -0
  154. package/dist/analysis/trend_detection/kalman_velocity_smoothing.js.map +1 -0
  155. package/dist/analysis/trend_detection/permutation_entropy_analyzer.d.ts +39 -0
  156. package/dist/analysis/trend_detection/permutation_entropy_analyzer.d.ts.map +1 -0
  157. package/dist/analysis/trend_detection/permutation_entropy_analyzer.js +132 -0
  158. package/dist/analysis/trend_detection/permutation_entropy_analyzer.js.map +1 -0
  159. package/dist/analysis/trend_detection/regime_chart_generator.d.ts +6 -0
  160. package/dist/analysis/trend_detection/regime_chart_generator.d.ts.map +1 -0
  161. package/dist/analysis/trend_detection/regime_chart_generator.js +345 -0
  162. package/dist/analysis/trend_detection/regime_chart_generator.js.map +1 -0
  163. package/dist/analysis/trend_detection/tests/test_kalman_trend.d.ts +2 -0
  164. package/dist/analysis/trend_detection/tests/test_kalman_trend.d.ts.map +1 -0
  165. package/dist/analysis/trend_detection/tests/test_kalman_trend.js +130 -0
  166. package/dist/analysis/trend_detection/tests/test_kalman_trend.js.map +1 -0
  167. package/dist/analysis/trend_detection/tests/test_kalman_velocity_smoothing.d.ts +2 -0
  168. package/dist/analysis/trend_detection/tests/test_kalman_velocity_smoothing.d.ts.map +1 -0
  169. package/dist/analysis/trend_detection/tests/test_kalman_velocity_smoothing.js +38 -0
  170. package/dist/analysis/trend_detection/tests/test_kalman_velocity_smoothing.js.map +1 -0
  171. package/dist/analysis/trend_detection/volatility_chart_generator.d.ts +6 -0
  172. package/dist/analysis/trend_detection/volatility_chart_generator.d.ts.map +1 -0
  173. package/dist/analysis/trend_detection/volatility_chart_generator.js +732 -0
  174. package/dist/analysis/trend_detection/volatility_chart_generator.js.map +1 -0
  175. package/dist/bot.d.ts +49 -0
  176. package/dist/bot.d.ts.map +1 -0
  177. package/dist/bot.js +221 -0
  178. package/dist/bot.js.map +1 -0
  179. package/dist/credential-daemon.d.ts +64 -0
  180. package/dist/credential-daemon.d.ts.map +1 -0
  181. package/dist/credential-daemon.js +987 -0
  182. package/dist/credential-daemon.js.map +1 -0
  183. package/dist/dexbot.d.ts +87 -0
  184. package/dist/dexbot.d.ts.map +1 -0
  185. package/dist/dexbot.js +1222 -0
  186. package/dist/dexbot.js.map +1 -0
  187. package/dist/market_adapter/ama_signal_runner.d.ts +3 -0
  188. package/dist/market_adapter/ama_signal_runner.d.ts.map +1 -0
  189. package/dist/market_adapter/ama_signal_runner.js +175 -0
  190. package/dist/market_adapter/ama_signal_runner.js.map +1 -0
  191. package/dist/market_adapter/candle_utils.d.ts +57 -0
  192. package/dist/market_adapter/candle_utils.d.ts.map +1 -0
  193. package/dist/market_adapter/candle_utils.js +252 -0
  194. package/dist/market_adapter/candle_utils.js.map +1 -0
  195. package/dist/market_adapter/core/asymmetric_bounds.d.ts +20 -0
  196. package/dist/market_adapter/core/asymmetric_bounds.d.ts.map +1 -0
  197. package/dist/market_adapter/core/asymmetric_bounds.js +88 -0
  198. package/dist/market_adapter/core/asymmetric_bounds.js.map +1 -0
  199. package/dist/market_adapter/core/config_normalizers.d.ts +10 -0
  200. package/dist/market_adapter/core/config_normalizers.d.ts.map +1 -0
  201. package/dist/market_adapter/core/config_normalizers.js +24 -0
  202. package/dist/market_adapter/core/config_normalizers.js.map +1 -0
  203. package/dist/market_adapter/core/kibana_candles.d.ts +74 -0
  204. package/dist/market_adapter/core/kibana_candles.d.ts.map +1 -0
  205. package/dist/market_adapter/core/kibana_candles.js +249 -0
  206. package/dist/market_adapter/core/kibana_candles.js.map +1 -0
  207. package/dist/market_adapter/core/kibana_client.d.ts +27 -0
  208. package/dist/market_adapter/core/kibana_client.d.ts.map +1 -0
  209. package/dist/market_adapter/core/kibana_client.js +120 -0
  210. package/dist/market_adapter/core/kibana_client.js.map +1 -0
  211. package/dist/market_adapter/core/kibana_market_candles.d.ts +143 -0
  212. package/dist/market_adapter/core/kibana_market_candles.d.ts.map +1 -0
  213. package/dist/market_adapter/core/kibana_market_candles.js +170 -0
  214. package/dist/market_adapter/core/kibana_market_candles.js.map +1 -0
  215. package/dist/market_adapter/core/market_adapter_service.d.ts +210 -0
  216. package/dist/market_adapter/core/market_adapter_service.d.ts.map +1 -0
  217. package/dist/market_adapter/core/market_adapter_service.js +2328 -0
  218. package/dist/market_adapter/core/market_adapter_service.js.map +1 -0
  219. package/dist/market_adapter/core/strategies/ama.d.ts +2 -0
  220. package/dist/market_adapter/core/strategies/ama.d.ts.map +1 -0
  221. package/dist/market_adapter/core/strategies/ama.js +138 -0
  222. package/dist/market_adapter/core/strategies/ama.js.map +1 -0
  223. package/dist/market_adapter/core/strategies/ama_slope_model.d.ts +50 -0
  224. package/dist/market_adapter/core/strategies/ama_slope_model.d.ts.map +1 -0
  225. package/dist/market_adapter/core/strategies/ama_slope_model.js +143 -0
  226. package/dist/market_adapter/core/strategies/ama_slope_model.js.map +1 -0
  227. package/dist/market_adapter/core/strategies/atr/calculator.d.ts +12 -0
  228. package/dist/market_adapter/core/strategies/atr/calculator.d.ts.map +1 -0
  229. package/dist/market_adapter/core/strategies/atr/calculator.js +47 -0
  230. package/dist/market_adapter/core/strategies/atr/calculator.js.map +1 -0
  231. package/dist/market_adapter/core/strategies/collateral_manager.d.ts +32 -0
  232. package/dist/market_adapter/core/strategies/collateral_manager.d.ts.map +1 -0
  233. package/dist/market_adapter/core/strategies/collateral_manager.js +68 -0
  234. package/dist/market_adapter/core/strategies/collateral_manager.js.map +1 -0
  235. package/dist/market_adapter/core/strategies/regime_gate.d.ts +66 -0
  236. package/dist/market_adapter/core/strategies/regime_gate.d.ts.map +1 -0
  237. package/dist/market_adapter/core/strategies/regime_gate.js +189 -0
  238. package/dist/market_adapter/core/strategies/regime_gate.js.map +1 -0
  239. package/dist/market_adapter/index.d.ts +10 -0
  240. package/dist/market_adapter/index.d.ts.map +1 -0
  241. package/dist/market_adapter/index.js +71 -0
  242. package/dist/market_adapter/index.js.map +1 -0
  243. package/dist/market_adapter/inputs/fetch_cex_synthetic_data.d.ts +3 -0
  244. package/dist/market_adapter/inputs/fetch_cex_synthetic_data.d.ts.map +1 -0
  245. package/dist/market_adapter/inputs/fetch_cex_synthetic_data.js +1165 -0
  246. package/dist/market_adapter/inputs/fetch_cex_synthetic_data.js.map +1 -0
  247. package/dist/market_adapter/inputs/fetch_lp_data.d.ts +54 -0
  248. package/dist/market_adapter/inputs/fetch_lp_data.d.ts.map +1 -0
  249. package/dist/market_adapter/inputs/fetch_lp_data.js +743 -0
  250. package/dist/market_adapter/inputs/fetch_lp_data.js.map +1 -0
  251. package/dist/market_adapter/inputs/kibana_source.d.ts +68 -0
  252. package/dist/market_adapter/inputs/kibana_source.d.ts.map +1 -0
  253. package/dist/market_adapter/inputs/kibana_source.js +143 -0
  254. package/dist/market_adapter/inputs/kibana_source.js.map +1 -0
  255. package/dist/market_adapter/interval_utils.d.ts +6 -0
  256. package/dist/market_adapter/interval_utils.d.ts.map +1 -0
  257. package/dist/market_adapter/interval_utils.js +14 -0
  258. package/dist/market_adapter/interval_utils.js.map +1 -0
  259. package/dist/market_adapter/log_format.d.ts +16 -0
  260. package/dist/market_adapter/log_format.d.ts.map +1 -0
  261. package/dist/market_adapter/log_format.js +72 -0
  262. package/dist/market_adapter/log_format.js.map +1 -0
  263. package/dist/market_adapter/lp_chart_core.d.ts +6 -0
  264. package/dist/market_adapter/lp_chart_core.d.ts.map +1 -0
  265. package/dist/market_adapter/lp_chart_core.js +874 -0
  266. package/dist/market_adapter/lp_chart_core.js.map +1 -0
  267. package/dist/market_adapter/lp_chart_runner.d.ts +135 -0
  268. package/dist/market_adapter/lp_chart_runner.d.ts.map +1 -0
  269. package/dist/market_adapter/lp_chart_runner.js +337 -0
  270. package/dist/market_adapter/lp_chart_runner.js.map +1 -0
  271. package/dist/market_adapter/lp_chart_strategy_loader.d.ts +23 -0
  272. package/dist/market_adapter/lp_chart_strategy_loader.d.ts.map +1 -0
  273. package/dist/market_adapter/lp_chart_strategy_loader.js +169 -0
  274. package/dist/market_adapter/lp_chart_strategy_loader.js.map +1 -0
  275. package/dist/market_adapter/market_adapter.d.ts +133 -0
  276. package/dist/market_adapter/market_adapter.d.ts.map +1 -0
  277. package/dist/market_adapter/market_adapter.js +1331 -0
  278. package/dist/market_adapter/market_adapter.js.map +1 -0
  279. package/dist/market_adapter/merge_lp_data.d.ts +3 -0
  280. package/dist/market_adapter/merge_lp_data.d.ts.map +1 -0
  281. package/dist/market_adapter/merge_lp_data.js +125 -0
  282. package/dist/market_adapter/merge_lp_data.js.map +1 -0
  283. package/dist/market_adapter/test_helpers.d.ts +14 -0
  284. package/dist/market_adapter/test_helpers.d.ts.map +1 -0
  285. package/dist/market_adapter/test_helpers.js +22 -0
  286. package/dist/market_adapter/test_helpers.js.map +1 -0
  287. package/dist/market_adapter/utils/adapter_client.d.ts +20 -0
  288. package/dist/market_adapter/utils/adapter_client.d.ts.map +1 -0
  289. package/dist/market_adapter/utils/adapter_client.js +88 -0
  290. package/dist/market_adapter/utils/adapter_client.js.map +1 -0
  291. package/dist/market_adapter/utils/atomic_write.d.ts +9 -0
  292. package/dist/market_adapter/utils/atomic_write.d.ts.map +1 -0
  293. package/dist/market_adapter/utils/atomic_write.js +13 -0
  294. package/dist/market_adapter/utils/atomic_write.js.map +1 -0
  295. package/dist/market_adapter/utils/chain.d.ts +50 -0
  296. package/dist/market_adapter/utils/chain.d.ts.map +1 -0
  297. package/dist/market_adapter/utils/chain.js +196 -0
  298. package/dist/market_adapter/utils/chain.js.map +1 -0
  299. package/dist/market_adapter/utils/data_discovery.d.ts +6 -0
  300. package/dist/market_adapter/utils/data_discovery.d.ts.map +1 -0
  301. package/dist/market_adapter/utils/data_discovery.js +35 -0
  302. package/dist/market_adapter/utils/data_discovery.js.map +1 -0
  303. package/dist/market_adapter/utils/dynamic_grid_snapshot.d.ts +15 -0
  304. package/dist/market_adapter/utils/dynamic_grid_snapshot.d.ts.map +1 -0
  305. package/dist/market_adapter/utils/dynamic_grid_snapshot.js +60 -0
  306. package/dist/market_adapter/utils/dynamic_grid_snapshot.js.map +1 -0
  307. package/dist/market_adapter/utils/file_lock.d.ts +19 -0
  308. package/dist/market_adapter/utils/file_lock.d.ts.map +1 -0
  309. package/dist/market_adapter/utils/file_lock.js +191 -0
  310. package/dist/market_adapter/utils/file_lock.js.map +1 -0
  311. package/dist/market_adapter/utils/native_history.d.ts +19 -0
  312. package/dist/market_adapter/utils/native_history.d.ts.map +1 -0
  313. package/dist/market_adapter/utils/native_history.js +172 -0
  314. package/dist/market_adapter/utils/native_history.js.map +1 -0
  315. package/dist/market_adapter/utils/paths.d.ts +5 -0
  316. package/dist/market_adapter/utils/paths.d.ts.map +1 -0
  317. package/dist/market_adapter/utils/paths.js +7 -0
  318. package/dist/market_adapter/utils/paths.js.map +1 -0
  319. package/dist/modules/account_bots.d.ts +112 -0
  320. package/dist/modules/account_bots.d.ts.map +1 -0
  321. package/dist/modules/account_bots.js +1259 -0
  322. package/dist/modules/account_bots.js.map +1 -0
  323. package/dist/modules/account_orders.d.ts +273 -0
  324. package/dist/modules/account_orders.d.ts.map +1 -0
  325. package/dist/modules/account_orders.js +662 -0
  326. package/dist/modules/account_orders.js.map +1 -0
  327. package/dist/modules/authority_resolver.d.ts +2 -0
  328. package/dist/modules/authority_resolver.d.ts.map +1 -0
  329. package/dist/modules/authority_resolver.js +231 -0
  330. package/dist/modules/authority_resolver.js.map +1 -0
  331. package/dist/modules/bitshares-native/chain_client.d.ts +38 -0
  332. package/dist/modules/bitshares-native/chain_client.d.ts.map +1 -0
  333. package/dist/modules/bitshares-native/chain_client.js +322 -0
  334. package/dist/modules/bitshares-native/chain_client.js.map +1 -0
  335. package/dist/modules/bitshares-native/crypto/ecc.browser.d.ts +59 -0
  336. package/dist/modules/bitshares-native/crypto/ecc.browser.d.ts.map +1 -0
  337. package/dist/modules/bitshares-native/crypto/ecc.browser.js +456 -0
  338. package/dist/modules/bitshares-native/crypto/ecc.browser.js.map +1 -0
  339. package/dist/modules/bitshares-native/crypto/ecc.d.ts +66 -0
  340. package/dist/modules/bitshares-native/crypto/ecc.d.ts.map +1 -0
  341. package/dist/modules/bitshares-native/crypto/ecc.js +557 -0
  342. package/dist/modules/bitshares-native/crypto/ecc.js.map +1 -0
  343. package/dist/modules/bitshares-native/crypto/ecc_selector.d.ts +2 -0
  344. package/dist/modules/bitshares-native/crypto/ecc_selector.d.ts.map +1 -0
  345. package/dist/modules/bitshares-native/crypto/ecc_selector.js +20 -0
  346. package/dist/modules/bitshares-native/crypto/ecc_selector.js.map +1 -0
  347. package/dist/modules/bitshares-native/index.d.ts +3 -0
  348. package/dist/modules/bitshares-native/index.d.ts.map +1 -0
  349. package/dist/modules/bitshares-native/index.js +32 -0
  350. package/dist/modules/bitshares-native/index.js.map +1 -0
  351. package/dist/modules/bitshares-native/resolvers.d.ts +40 -0
  352. package/dist/modules/bitshares-native/resolvers.d.ts.map +1 -0
  353. package/dist/modules/bitshares-native/resolvers.js +161 -0
  354. package/dist/modules/bitshares-native/resolvers.js.map +1 -0
  355. package/dist/modules/bitshares-native/serial/chain_constants.d.ts +56 -0
  356. package/dist/modules/bitshares-native/serial/chain_constants.d.ts.map +1 -0
  357. package/dist/modules/bitshares-native/serial/chain_constants.js +92 -0
  358. package/dist/modules/bitshares-native/serial/chain_constants.js.map +1 -0
  359. package/dist/modules/bitshares-native/serial/index.d.ts +10 -0
  360. package/dist/modules/bitshares-native/serial/index.d.ts.map +1 -0
  361. package/dist/modules/bitshares-native/serial/index.js +14 -0
  362. package/dist/modules/bitshares-native/serial/index.js.map +1 -0
  363. package/dist/modules/bitshares-native/serial/operations.d.ts +102 -0
  364. package/dist/modules/bitshares-native/serial/operations.d.ts.map +1 -0
  365. package/dist/modules/bitshares-native/serial/operations.js +615 -0
  366. package/dist/modules/bitshares-native/serial/operations.js.map +1 -0
  367. package/dist/modules/bitshares-native/serial/serializer.d.ts +64 -0
  368. package/dist/modules/bitshares-native/serial/serializer.d.ts.map +1 -0
  369. package/dist/modules/bitshares-native/serial/serializer.js +252 -0
  370. package/dist/modules/bitshares-native/serial/serializer.js.map +1 -0
  371. package/dist/modules/bitshares-native/serial/types.d.ts +120 -0
  372. package/dist/modules/bitshares-native/serial/types.d.ts.map +1 -0
  373. package/dist/modules/bitshares-native/serial/types.js +837 -0
  374. package/dist/modules/bitshares-native/serial/types.js.map +1 -0
  375. package/dist/modules/bitshares-native/signing_client.d.ts +6 -0
  376. package/dist/modules/bitshares-native/signing_client.d.ts.map +1 -0
  377. package/dist/modules/bitshares-native/signing_client.js +141 -0
  378. package/dist/modules/bitshares-native/signing_client.js.map +1 -0
  379. package/dist/modules/bitshares-native/subscriptions.d.ts +6 -0
  380. package/dist/modules/bitshares-native/subscriptions.d.ts.map +1 -0
  381. package/dist/modules/bitshares-native/subscriptions.js +865 -0
  382. package/dist/modules/bitshares-native/subscriptions.js.map +1 -0
  383. package/dist/modules/bitshares-native/transport.d.ts +51 -0
  384. package/dist/modules/bitshares-native/transport.d.ts.map +1 -0
  385. package/dist/modules/bitshares-native/transport.js +447 -0
  386. package/dist/modules/bitshares-native/transport.js.map +1 -0
  387. package/dist/modules/bitshares-native/tx/builder.d.ts +30 -0
  388. package/dist/modules/bitshares-native/tx/builder.d.ts.map +1 -0
  389. package/dist/modules/bitshares-native/tx/builder.js +262 -0
  390. package/dist/modules/bitshares-native/tx/builder.js.map +1 -0
  391. package/dist/modules/bitshares_client.d.ts +129 -0
  392. package/dist/modules/bitshares_client.d.ts.map +1 -0
  393. package/dist/modules/bitshares_client.js +627 -0
  394. package/dist/modules/bitshares_client.js.map +1 -0
  395. package/dist/modules/bot_settings.d.ts +33 -0
  396. package/dist/modules/bot_settings.d.ts.map +1 -0
  397. package/dist/modules/bot_settings.js +328 -0
  398. package/dist/modules/bot_settings.js.map +1 -0
  399. package/dist/modules/bots_file_lock.d.ts +88 -0
  400. package/dist/modules/bots_file_lock.d.ts.map +1 -0
  401. package/dist/modules/bots_file_lock.js +161 -0
  402. package/dist/modules/bots_file_lock.js.map +1 -0
  403. package/dist/modules/chain_keys.d.ts +302 -0
  404. package/dist/modules/chain_keys.d.ts.map +1 -0
  405. package/dist/modules/chain_keys.js +1095 -0
  406. package/dist/modules/chain_keys.js.map +1 -0
  407. package/dist/modules/chain_orders.d.ts +423 -0
  408. package/dist/modules/chain_orders.d.ts.map +1 -0
  409. package/dist/modules/chain_orders.js +1201 -0
  410. package/dist/modules/chain_orders.js.map +1 -0
  411. package/dist/modules/cli_whitelist_args.d.ts +6 -0
  412. package/dist/modules/cli_whitelist_args.d.ts.map +1 -0
  413. package/dist/modules/cli_whitelist_args.js +13 -0
  414. package/dist/modules/cli_whitelist_args.js.map +1 -0
  415. package/dist/modules/config.d.ts +57 -0
  416. package/dist/modules/config.d.ts.map +1 -0
  417. package/dist/modules/config.js +107 -0
  418. package/dist/modules/config.js.map +1 -0
  419. package/dist/modules/constants.d.ts +635 -0
  420. package/dist/modules/constants.d.ts.map +1 -0
  421. package/dist/modules/constants.js +1464 -0
  422. package/dist/modules/constants.js.map +1 -0
  423. package/dist/modules/cr_planner.d.ts +51 -0
  424. package/dist/modules/cr_planner.d.ts.map +1 -0
  425. package/dist/modules/cr_planner.js +299 -0
  426. package/dist/modules/cr_planner.js.map +1 -0
  427. package/dist/modules/credential_policy.d.ts +188 -0
  428. package/dist/modules/credential_policy.d.ts.map +1 -0
  429. package/dist/modules/credential_policy.js +1452 -0
  430. package/dist/modules/credential_policy.js.map +1 -0
  431. package/dist/modules/credential_runtime.d.ts +42 -0
  432. package/dist/modules/credential_runtime.d.ts.map +1 -0
  433. package/dist/modules/credential_runtime.js +148 -0
  434. package/dist/modules/credential_runtime.js.map +1 -0
  435. package/dist/modules/credential_session_cache.d.ts +36 -0
  436. package/dist/modules/credential_session_cache.d.ts.map +1 -0
  437. package/dist/modules/credential_session_cache.js +106 -0
  438. package/dist/modules/credential_session_cache.js.map +1 -0
  439. package/dist/modules/credit_runtime.d.ts +412 -0
  440. package/dist/modules/credit_runtime.d.ts.map +1 -0
  441. package/dist/modules/credit_runtime.js +2866 -0
  442. package/dist/modules/credit_runtime.js.map +1 -0
  443. package/dist/modules/crypto/browser_provider.d.ts +15 -0
  444. package/dist/modules/crypto/browser_provider.d.ts.map +1 -0
  445. package/dist/modules/crypto/browser_provider.js +113 -0
  446. package/dist/modules/crypto/browser_provider.js.map +1 -0
  447. package/dist/modules/crypto/index.d.ts +9 -0
  448. package/dist/modules/crypto/index.d.ts.map +1 -0
  449. package/dist/modules/crypto/index.js +44 -0
  450. package/dist/modules/crypto/index.js.map +1 -0
  451. package/dist/modules/crypto/node_provider.d.ts +15 -0
  452. package/dist/modules/crypto/node_provider.d.ts.map +1 -0
  453. package/dist/modules/crypto/node_provider.js +74 -0
  454. package/dist/modules/crypto/node_provider.js.map +1 -0
  455. package/dist/modules/crypto/provider.d.ts +34 -0
  456. package/dist/modules/crypto/provider.d.ts.map +1 -0
  457. package/dist/modules/crypto/provider.js +3 -0
  458. package/dist/modules/crypto/provider.js.map +1 -0
  459. package/dist/modules/crypto/pure_ripemd160.d.ts +8 -0
  460. package/dist/modules/crypto/pure_ripemd160.d.ts.map +1 -0
  461. package/dist/modules/crypto/pure_ripemd160.js +142 -0
  462. package/dist/modules/crypto/pure_ripemd160.js.map +1 -0
  463. package/dist/modules/crypto/pure_scrypt.d.ts +23 -0
  464. package/dist/modules/crypto/pure_scrypt.d.ts.map +1 -0
  465. package/dist/modules/crypto/pure_scrypt.js +161 -0
  466. package/dist/modules/crypto/pure_scrypt.js.map +1 -0
  467. package/dist/modules/crypto/pure_secp256k1.d.ts +29 -0
  468. package/dist/modules/crypto/pure_secp256k1.d.ts.map +1 -0
  469. package/dist/modules/crypto/pure_secp256k1.js +195 -0
  470. package/dist/modules/crypto/pure_secp256k1.js.map +1 -0
  471. package/dist/modules/crypto/sync.d.ts +13 -0
  472. package/dist/modules/crypto/sync.d.ts.map +1 -0
  473. package/dist/modules/crypto/sync.js +37 -0
  474. package/dist/modules/crypto/sync.js.map +1 -0
  475. package/dist/modules/dexbot_class.d.ts +1074 -0
  476. package/dist/modules/dexbot_class.d.ts.map +1 -0
  477. package/dist/modules/dexbot_class.js +4613 -0
  478. package/dist/modules/dexbot_class.js.map +1 -0
  479. package/dist/modules/dexbot_credential_client.d.ts +71 -0
  480. package/dist/modules/dexbot_credential_client.d.ts.map +1 -0
  481. package/dist/modules/dexbot_credential_client.js +224 -0
  482. package/dist/modules/dexbot_credential_client.js.map +1 -0
  483. package/dist/modules/dexbot_fill_runtime.d.ts +173 -0
  484. package/dist/modules/dexbot_fill_runtime.d.ts.map +1 -0
  485. package/dist/modules/dexbot_fill_runtime.js +217 -0
  486. package/dist/modules/dexbot_fill_runtime.js.map +1 -0
  487. package/dist/modules/dexbot_maintenance_runtime.d.ts +279 -0
  488. package/dist/modules/dexbot_maintenance_runtime.d.ts.map +1 -0
  489. package/dist/modules/dexbot_maintenance_runtime.js +1613 -0
  490. package/dist/modules/dexbot_maintenance_runtime.js.map +1 -0
  491. package/dist/modules/env.d.ts +12 -0
  492. package/dist/modules/env.d.ts.map +1 -0
  493. package/dist/modules/env.js +57 -0
  494. package/dist/modules/env.js.map +1 -0
  495. package/dist/modules/fund_registry.d.ts +96 -0
  496. package/dist/modules/fund_registry.d.ts.map +1 -0
  497. package/dist/modules/fund_registry.js +261 -0
  498. package/dist/modules/fund_registry.js.map +1 -0
  499. package/dist/modules/general_settings.d.ts +36 -0
  500. package/dist/modules/general_settings.d.ts.map +1 -0
  501. package/dist/modules/general_settings.js +63 -0
  502. package/dist/modules/general_settings.js.map +1 -0
  503. package/dist/modules/graceful_shutdown.d.ts +86 -0
  504. package/dist/modules/graceful_shutdown.d.ts.map +1 -0
  505. package/dist/modules/graceful_shutdown.js +164 -0
  506. package/dist/modules/graceful_shutdown.js.map +1 -0
  507. package/dist/modules/key_store.d.ts +60 -0
  508. package/dist/modules/key_store.d.ts.map +1 -0
  509. package/dist/modules/key_store.js +215 -0
  510. package/dist/modules/key_store.js.map +1 -0
  511. package/dist/modules/launcher/bot_supervisor.d.ts +84 -0
  512. package/dist/modules/launcher/bot_supervisor.d.ts.map +1 -0
  513. package/dist/modules/launcher/bot_supervisor.js +1067 -0
  514. package/dist/modules/launcher/bot_supervisor.js.map +1 -0
  515. package/dist/modules/launcher/child_env.d.ts +9 -0
  516. package/dist/modules/launcher/child_env.d.ts.map +1 -0
  517. package/dist/modules/launcher/child_env.js +78 -0
  518. package/dist/modules/launcher/child_env.js.map +1 -0
  519. package/dist/modules/launcher/credential_bootstrap.d.ts +22 -0
  520. package/dist/modules/launcher/credential_bootstrap.d.ts.map +1 -0
  521. package/dist/modules/launcher/credential_bootstrap.js +303 -0
  522. package/dist/modules/launcher/credential_bootstrap.js.map +1 -0
  523. package/dist/modules/launcher/credential_daemon.d.ts +32 -0
  524. package/dist/modules/launcher/credential_daemon.d.ts.map +1 -0
  525. package/dist/modules/launcher/credential_daemon.js +173 -0
  526. package/dist/modules/launcher/credential_daemon.js.map +1 -0
  527. package/dist/modules/launcher/credential_secret.d.ts +6 -0
  528. package/dist/modules/launcher/credential_secret.d.ts.map +1 -0
  529. package/dist/modules/launcher/credential_secret.js +15 -0
  530. package/dist/modules/launcher/credential_secret.js.map +1 -0
  531. package/dist/modules/launcher/foreign_cred_daemon.d.ts +2 -0
  532. package/dist/modules/launcher/foreign_cred_daemon.d.ts.map +1 -0
  533. package/dist/modules/launcher/foreign_cred_daemon.js +166 -0
  534. package/dist/modules/launcher/foreign_cred_daemon.js.map +1 -0
  535. package/dist/modules/launcher/headless_password.d.ts +8 -0
  536. package/dist/modules/launcher/headless_password.d.ts.map +1 -0
  537. package/dist/modules/launcher/headless_password.js +33 -0
  538. package/dist/modules/launcher/headless_password.js.map +1 -0
  539. package/dist/modules/launcher/launch_modes.d.ts +36 -0
  540. package/dist/modules/launcher/launch_modes.d.ts.map +1 -0
  541. package/dist/modules/launcher/launch_modes.js +129 -0
  542. package/dist/modules/launcher/launch_modes.js.map +1 -0
  543. package/dist/modules/launcher/market_adapter_runtime.d.ts +43 -0
  544. package/dist/modules/launcher/market_adapter_runtime.d.ts.map +1 -0
  545. package/dist/modules/launcher/market_adapter_runtime.js +217 -0
  546. package/dist/modules/launcher/market_adapter_runtime.js.map +1 -0
  547. package/dist/modules/launcher/market_adapter_watchdog.d.ts +26 -0
  548. package/dist/modules/launcher/market_adapter_watchdog.d.ts.map +1 -0
  549. package/dist/modules/launcher/market_adapter_watchdog.js +214 -0
  550. package/dist/modules/launcher/market_adapter_watchdog.js.map +1 -0
  551. package/dist/modules/launcher/monolithic_runtime.d.ts +89 -0
  552. package/dist/modules/launcher/monolithic_runtime.d.ts.map +1 -0
  553. package/dist/modules/launcher/monolithic_runtime.js +425 -0
  554. package/dist/modules/launcher/monolithic_runtime.js.map +1 -0
  555. package/dist/modules/launcher/runtime_entry.d.ts +26 -0
  556. package/dist/modules/launcher/runtime_entry.d.ts.map +1 -0
  557. package/dist/modules/launcher/runtime_entry.js +49 -0
  558. package/dist/modules/launcher/runtime_entry.js.map +1 -0
  559. package/dist/modules/launcher/status_reporting.d.ts +48 -0
  560. package/dist/modules/launcher/status_reporting.d.ts.map +1 -0
  561. package/dist/modules/launcher/status_reporting.js +113 -0
  562. package/dist/modules/launcher/status_reporting.js.map +1 -0
  563. package/dist/modules/launcher/supervisor_control.d.ts +6 -0
  564. package/dist/modules/launcher/supervisor_control.d.ts.map +1 -0
  565. package/dist/modules/launcher/supervisor_control.js +59 -0
  566. package/dist/modules/launcher/supervisor_control.js.map +1 -0
  567. package/dist/modules/logger.d.ts +2 -0
  568. package/dist/modules/logger.d.ts.map +1 -0
  569. package/dist/modules/logger.js +71 -0
  570. package/dist/modules/logger.js.map +1 -0
  571. package/dist/modules/market_adapter_whitelist.d.ts +22 -0
  572. package/dist/modules/market_adapter_whitelist.d.ts.map +1 -0
  573. package/dist/modules/market_adapter_whitelist.js +82 -0
  574. package/dist/modules/market_adapter_whitelist.js.map +1 -0
  575. package/dist/modules/node_health_cache.d.ts +55 -0
  576. package/dist/modules/node_health_cache.d.ts.map +1 -0
  577. package/dist/modules/node_health_cache.js +134 -0
  578. package/dist/modules/node_health_cache.js.map +1 -0
  579. package/dist/modules/node_manager.d.ts +215 -0
  580. package/dist/modules/node_manager.d.ts.map +1 -0
  581. package/dist/modules/node_manager.js +628 -0
  582. package/dist/modules/node_manager.js.map +1 -0
  583. package/dist/modules/order/accounting.d.ts +349 -0
  584. package/dist/modules/order/accounting.d.ts.map +1 -0
  585. package/dist/modules/order/accounting.js +1191 -0
  586. package/dist/modules/order/accounting.js.map +1 -0
  587. package/dist/modules/order/async_lock.d.ts +126 -0
  588. package/dist/modules/order/async_lock.d.ts.map +1 -0
  589. package/dist/modules/order/async_lock.js +195 -0
  590. package/dist/modules/order/async_lock.js.map +1 -0
  591. package/dist/modules/order/export.d.ts +129 -0
  592. package/dist/modules/order/export.d.ts.map +1 -0
  593. package/dist/modules/order/export.js +316 -0
  594. package/dist/modules/order/export.js.map +1 -0
  595. package/dist/modules/order/format.d.ts +158 -0
  596. package/dist/modules/order/format.d.ts.map +1 -0
  597. package/dist/modules/order/format.js +232 -0
  598. package/dist/modules/order/format.js.map +1 -0
  599. package/dist/modules/order/grid.d.ts +549 -0
  600. package/dist/modules/order/grid.d.ts.map +1 -0
  601. package/dist/modules/order/grid.js +1746 -0
  602. package/dist/modules/order/grid.js.map +1 -0
  603. package/dist/modules/order/grid_reconcile.d.ts +154 -0
  604. package/dist/modules/order/grid_reconcile.d.ts.map +1 -0
  605. package/dist/modules/order/grid_reconcile.js +1192 -0
  606. package/dist/modules/order/grid_reconcile.js.map +1 -0
  607. package/dist/modules/order/index.d.ts +55 -0
  608. package/dist/modules/order/index.d.ts.map +1 -0
  609. package/dist/modules/order/index.js +79 -0
  610. package/dist/modules/order/index.js.map +1 -0
  611. package/dist/modules/order/logger.d.ts +136 -0
  612. package/dist/modules/order/logger.d.ts.map +1 -0
  613. package/dist/modules/order/logger.js +614 -0
  614. package/dist/modules/order/logger.js.map +1 -0
  615. package/dist/modules/order/logger_state.d.ts +133 -0
  616. package/dist/modules/order/logger_state.d.ts.map +1 -0
  617. package/dist/modules/order/logger_state.js +170 -0
  618. package/dist/modules/order/logger_state.js.map +1 -0
  619. package/dist/modules/order/manager.d.ts +413 -0
  620. package/dist/modules/order/manager.d.ts.map +1 -0
  621. package/dist/modules/order/manager.js +1605 -0
  622. package/dist/modules/order/manager.js.map +1 -0
  623. package/dist/modules/order/processed_fill_store.d.ts +135 -0
  624. package/dist/modules/order/processed_fill_store.d.ts.map +1 -0
  625. package/dist/modules/order/processed_fill_store.js +288 -0
  626. package/dist/modules/order/processed_fill_store.js.map +1 -0
  627. package/dist/modules/order/runner.d.ts +70 -0
  628. package/dist/modules/order/runner.d.ts.map +1 -0
  629. package/dist/modules/order/runner.js +140 -0
  630. package/dist/modules/order/runner.js.map +1 -0
  631. package/dist/modules/order/strategy.d.ts +196 -0
  632. package/dist/modules/order/strategy.d.ts.map +1 -0
  633. package/dist/modules/order/strategy.js +398 -0
  634. package/dist/modules/order/strategy.js.map +1 -0
  635. package/dist/modules/order/sync_engine.d.ts +386 -0
  636. package/dist/modules/order/sync_engine.d.ts.map +1 -0
  637. package/dist/modules/order/sync_engine.js +1459 -0
  638. package/dist/modules/order/sync_engine.js.map +1 -0
  639. package/dist/modules/order/utils/math.d.ts +677 -0
  640. package/dist/modules/order/utils/math.d.ts.map +1 -0
  641. package/dist/modules/order/utils/math.js +1172 -0
  642. package/dist/modules/order/utils/math.js.map +1 -0
  643. package/dist/modules/order/utils/order.d.ts +572 -0
  644. package/dist/modules/order/utils/order.d.ts.map +1 -0
  645. package/dist/modules/order/utils/order.js +1145 -0
  646. package/dist/modules/order/utils/order.js.map +1 -0
  647. package/dist/modules/order/utils/system.d.ts +268 -0
  648. package/dist/modules/order/utils/system.d.ts.map +1 -0
  649. package/dist/modules/order/utils/system.js +1261 -0
  650. package/dist/modules/order/utils/system.js.map +1 -0
  651. package/dist/modules/order/utils/validate.d.ts +280 -0
  652. package/dist/modules/order/utils/validate.d.ts.map +1 -0
  653. package/dist/modules/order/utils/validate.js +918 -0
  654. package/dist/modules/order/utils/validate.js.map +1 -0
  655. package/dist/modules/order/working_grid.d.ts +212 -0
  656. package/dist/modules/order/working_grid.d.ts.map +1 -0
  657. package/dist/modules/order/working_grid.js +279 -0
  658. package/dist/modules/order/working_grid.js.map +1 -0
  659. package/dist/modules/path_api.d.ts +32 -0
  660. package/dist/modules/path_api.d.ts.map +1 -0
  661. package/dist/modules/path_api.js +148 -0
  662. package/dist/modules/path_api.js.map +1 -0
  663. package/dist/modules/paths.d.ts +58 -0
  664. package/dist/modules/paths.d.ts.map +1 -0
  665. package/dist/modules/paths.js +82 -0
  666. package/dist/modules/paths.js.map +1 -0
  667. package/dist/modules/process_discovery.d.ts +58 -0
  668. package/dist/modules/process_discovery.d.ts.map +1 -0
  669. package/dist/modules/process_discovery.js +265 -0
  670. package/dist/modules/process_discovery.js.map +1 -0
  671. package/dist/modules/runtime.d.ts +34 -0
  672. package/dist/modules/runtime.d.ts.map +1 -0
  673. package/dist/modules/runtime.js +98 -0
  674. package/dist/modules/runtime.js.map +1 -0
  675. package/dist/modules/runtime_settings.d.ts +12 -0
  676. package/dist/modules/runtime_settings.d.ts.map +1 -0
  677. package/dist/modules/runtime_settings.js +122 -0
  678. package/dist/modules/runtime_settings.js.map +1 -0
  679. package/dist/modules/settings_merge.d.ts +38 -0
  680. package/dist/modules/settings_merge.d.ts.map +1 -0
  681. package/dist/modules/settings_merge.js +246 -0
  682. package/dist/modules/settings_merge.js.map +1 -0
  683. package/dist/modules/storage/browser_adapter.d.ts +56 -0
  684. package/dist/modules/storage/browser_adapter.d.ts.map +1 -0
  685. package/dist/modules/storage/browser_adapter.js +231 -0
  686. package/dist/modules/storage/browser_adapter.js.map +1 -0
  687. package/dist/modules/storage/index.d.ts +28 -0
  688. package/dist/modules/storage/index.d.ts.map +1 -0
  689. package/dist/modules/storage/index.js +52 -0
  690. package/dist/modules/storage/index.js.map +1 -0
  691. package/dist/modules/storage/node_adapter.d.ts +49 -0
  692. package/dist/modules/storage/node_adapter.d.ts.map +1 -0
  693. package/dist/modules/storage/node_adapter.js +167 -0
  694. package/dist/modules/storage/node_adapter.js.map +1 -0
  695. package/dist/modules/storage/types.d.ts +92 -0
  696. package/dist/modules/storage/types.d.ts.map +1 -0
  697. package/dist/modules/storage/types.js +3 -0
  698. package/dist/modules/storage/types.js.map +1 -0
  699. package/dist/modules/types.d.ts +1382 -0
  700. package/dist/modules/types.d.ts.map +1 -0
  701. package/dist/modules/types.js +11 -0
  702. package/dist/modules/types.js.map +1 -0
  703. package/dist/modules/utils/base58check.d.ts +12 -0
  704. package/dist/modules/utils/base58check.d.ts.map +1 -0
  705. package/dist/modules/utils/base58check.js +112 -0
  706. package/dist/modules/utils/base58check.js.map +1 -0
  707. package/dist/modules/utils/build_dir.d.ts +7 -0
  708. package/dist/modules/utils/build_dir.d.ts.map +1 -0
  709. package/dist/modules/utils/build_dir.js +8 -0
  710. package/dist/modules/utils/build_dir.js.map +1 -0
  711. package/dist/modules/utils/fs_utils.d.ts +25 -0
  712. package/dist/modules/utils/fs_utils.d.ts.map +1 -0
  713. package/dist/modules/utils/fs_utils.js +27 -0
  714. package/dist/modules/utils/fs_utils.js.map +1 -0
  715. package/dist/modules/utils/math_utils.d.ts +10 -0
  716. package/dist/modules/utils/math_utils.d.ts.map +1 -0
  717. package/dist/modules/utils/math_utils.js +17 -0
  718. package/dist/modules/utils/math_utils.js.map +1 -0
  719. package/dist/modules/validate_profiles.d.ts +37 -0
  720. package/dist/modules/validate_profiles.d.ts.map +1 -0
  721. package/dist/modules/validate_profiles.js +369 -0
  722. package/dist/modules/validate_profiles.js.map +1 -0
  723. package/dist/pm2.d.ts +167 -0
  724. package/dist/pm2.d.ts.map +1 -0
  725. package/dist/pm2.js +998 -0
  726. package/dist/pm2.js.map +1 -0
  727. package/dist/scripts/analyze-git.d.ts +11 -0
  728. package/dist/scripts/analyze-git.d.ts.map +1 -0
  729. package/dist/scripts/analyze-git.js +851 -0
  730. package/dist/scripts/analyze-git.js.map +1 -0
  731. package/dist/scripts/analyze-orders.d.ts +17 -0
  732. package/dist/scripts/analyze-orders.d.ts.map +1 -0
  733. package/dist/scripts/analyze-orders.js +1568 -0
  734. package/dist/scripts/analyze-orders.js.map +1 -0
  735. package/dist/scripts/diagnose-kibana-candles.d.ts +3 -0
  736. package/dist/scripts/diagnose-kibana-candles.d.ts.map +1 -0
  737. package/dist/scripts/diagnose-kibana-candles.js +82 -0
  738. package/dist/scripts/diagnose-kibana-candles.js.map +1 -0
  739. package/dist/scripts/diagnose-pool-history.d.ts +3 -0
  740. package/dist/scripts/diagnose-pool-history.d.ts.map +1 -0
  741. package/dist/scripts/diagnose-pool-history.js +296 -0
  742. package/dist/scripts/diagnose-pool-history.js.map +1 -0
  743. package/dist/scripts/divergence-calc.d.ts +26 -0
  744. package/dist/scripts/divergence-calc.d.ts.map +1 -0
  745. package/dist/scripts/divergence-calc.js +119 -0
  746. package/dist/scripts/divergence-calc.js.map +1 -0
  747. package/dist/scripts/generate_lp_chart.d.ts +31 -0
  748. package/dist/scripts/generate_lp_chart.d.ts.map +1 -0
  749. package/dist/scripts/generate_lp_chart.js +92 -0
  750. package/dist/scripts/generate_lp_chart.js.map +1 -0
  751. package/dist/scripts/generate_mainnet_corpus_report.d.ts +24 -0
  752. package/dist/scripts/generate_mainnet_corpus_report.d.ts.map +1 -0
  753. package/dist/scripts/generate_mainnet_corpus_report.js +237 -0
  754. package/dist/scripts/generate_mainnet_corpus_report.js.map +1 -0
  755. package/dist/scripts/generate_market_adapter_whitelist.d.ts +2 -0
  756. package/dist/scripts/generate_market_adapter_whitelist.d.ts.map +1 -0
  757. package/dist/scripts/generate_market_adapter_whitelist.js +111 -0
  758. package/dist/scripts/generate_market_adapter_whitelist.js.map +1 -0
  759. package/dist/scripts/migrate_bot_keys.d.ts +6 -0
  760. package/dist/scripts/migrate_bot_keys.d.ts.map +1 -0
  761. package/dist/scripts/migrate_bot_keys.js +301 -0
  762. package/dist/scripts/migrate_bot_keys.js.map +1 -0
  763. package/dist/scripts/native_release_gates.d.ts +3 -0
  764. package/dist/scripts/native_release_gates.d.ts.map +1 -0
  765. package/dist/scripts/native_release_gates.js +52 -0
  766. package/dist/scripts/native_release_gates.js.map +1 -0
  767. package/dist/scripts/print_grid.d.ts +16 -0
  768. package/dist/scripts/print_grid.d.ts.map +1 -0
  769. package/dist/scripts/print_grid.js +80 -0
  770. package/dist/scripts/print_grid.js.map +1 -0
  771. package/dist/scripts/run-tests.d.ts +2 -0
  772. package/dist/scripts/run-tests.d.ts.map +1 -0
  773. package/dist/scripts/run-tests.js +49 -0
  774. package/dist/scripts/run-tests.js.map +1 -0
  775. package/dist/scripts/sync-version.d.ts +14 -0
  776. package/dist/scripts/sync-version.d.ts.map +1 -0
  777. package/dist/scripts/sync-version.js +158 -0
  778. package/dist/scripts/sync-version.js.map +1 -0
  779. package/dist/scripts/test-credit-renewal.d.ts +2 -0
  780. package/dist/scripts/test-credit-renewal.d.ts.map +1 -0
  781. package/dist/scripts/test-credit-renewal.js +329 -0
  782. package/dist/scripts/test-credit-renewal.js.map +1 -0
  783. package/dist/scripts/update.d.ts +24 -0
  784. package/dist/scripts/update.d.ts.map +1 -0
  785. package/dist/scripts/update.js +650 -0
  786. package/dist/scripts/update.js.map +1 -0
  787. package/dist/scripts/validate_bots.d.ts +16 -0
  788. package/dist/scripts/validate_bots.d.ts.map +1 -0
  789. package/dist/scripts/validate_bots.js +106 -0
  790. package/dist/scripts/validate_bots.js.map +1 -0
  791. package/dist/scripts/verify-browser-bundle.d.ts +22 -0
  792. package/dist/scripts/verify-browser-bundle.d.ts.map +1 -0
  793. package/dist/scripts/verify-browser-bundle.js +339 -0
  794. package/dist/scripts/verify-browser-bundle.js.map +1 -0
  795. package/dist/unlock.d.ts +48 -0
  796. package/dist/unlock.d.ts.map +1 -0
  797. package/dist/unlock.js +925 -0
  798. package/dist/unlock.js.map +1 -0
  799. package/package.json +112 -0
  800. package/scripts/README.md +356 -0
  801. package/scripts/clear-all.sh +195 -0
  802. package/scripts/clear-logs.sh +95 -0
  803. package/scripts/clear-market-adapter.sh +196 -0
  804. package/scripts/clear-orders.sh +113 -0
  805. package/scripts/create-bot-symlinks.sh +51 -0
  806. package/scripts/postinstall.js +9 -0
  807. package/scripts/reset-settings.sh +118 -0
@@ -0,0 +1,1145 @@
1
+ "use strict";
2
+ /**
3
+ * modules/order/utils/order.ts - Order Domain Utilities
4
+ *
5
+ * Business rules for orders, state predicates, filtering, and reconciliation.
6
+ * Includes grid indexing, order comparison, delta building, and strategy calculations.
7
+ *
8
+ * ===============================================================================
9
+ * TABLE OF CONTENTS (37 exported functions)
10
+ * ===============================================================================
11
+ *
12
+ * SECTION 1: CHAIN ORDER MATCHING & RECONCILIATION (5 functions)
13
+ * - parseChainOrder(chainOrder, assets) - Parse blockchain order to grid format
14
+ * - findMatchingGridOrderByOpenOrder(parsedChainOrder, opts) - Find matching grid order
15
+ * - applyChainSizeToGridOrder(manager, gridOrder, chainSize) - Apply chain size to grid
16
+ * - correctOrderPriceOnChain(manager, correctionInfo, ...) - Correct order price on chain
17
+ * - correctAllPriceMismatches(manager, accountName, ...) - Correct all price mismatches
18
+ *
19
+ * SECTION 2: ORDER CONSTRUCTION (3 functions)
20
+ * - buildCreateOrderArgs(order, assetA, assetB) - Build create order arguments
21
+ * - getOrderTypeFromUpdatedFlags(buyUpdated, sellUpdated) - Get type from update flags
22
+ * - resolveConfiguredPriceBound(value, fallback, startPrice, mode) - Resolve price bounds
23
+ * - buildFillKey(fillOrParts) - Build a stable fill dedupe key
24
+ * - buildCreateOpFingerprint(params) - Build fingerprint for create operations
25
+ *
26
+ * SECTION 3: STATE TRANSITIONS (2 functions)
27
+ * - virtualizeOrder(order) - Convert order to VIRTUAL state
28
+ * - convertToSpreadPlaceholder(order) - Convert order to SPREAD placeholder
29
+ *
30
+ * SECTION 4: FILTERING & COUNTING (5 functions)
31
+ * - filterOrdersByType(orders, orderType) - Filter orders by type
32
+
33
+ * - buildOutsideInPairGroups(items, accessors) - Outside->center pair grouping
34
+ * - extractBatchOperationResults(result) - Extract operation_results from chain batch result
35
+ * - formatUnmatchedChainOrder(order) - Format structural drift diagnostics
36
+ *
37
+ * SECTION 5: STATE PREDICATES (7 functions)
38
+ * - isOrderOnChain(order) - Check if order is ACTIVE or PARTIAL
39
+ * - isOrderVirtual(order) - Check if order is VIRTUAL
40
+ * - hasOnChainId(order) - Check if order has blockchain orderId
41
+ * - isOrderPlaced(order) - Check if order is placed on chain
42
+ * - isPhantomOrder(order) - Check if order is phantom (ACTIVE without orderId)
43
+ * - isSlotAvailable(order) - Check if slot is available for placement
44
+ * - isOrderHealthy(order, context) - Comprehensive order health check
45
+ *
46
+ * SECTION 6: SIZE VALIDATION (2 functions)
47
+ * - checkSizeThreshold(size, threshold) - Check if size exceeds threshold
48
+ * - checkSizesBeforeMinimum(sizes, minSize) - Check sizes against minimum
49
+ *
50
+ * SECTION 7: GRID BOUNDARY & ROLES (4 functions)
51
+ * - calculateIdealBoundary(allSlots, startPrice, gapSlots) - Calculate ideal boundary
52
+ * - calculateFundDrivenBoundary(allSlots, availA, availB, startPrice, gapSlots) - Fund-driven boundary
53
+ * - assignGridRoles(allSlots, boundaryIdx, gapSlots, ...) - Assign BUY/SELL roles
54
+ * - shouldFlagOutOfSpread(order, startPrice, configSpread) - Check if order is out of spread
55
+ *
56
+ * SECTION 8: GRID INDEXING (2 functions)
57
+ * - buildIndexes(grid) - Build complete index set from grid
58
+ * - validateIndexes(grid, indexes) - Validate index consistency
59
+ *
60
+ * SECTION 9: ORDER COMPARISON & DELTA (3 functions)
61
+ * - ordersEqual(a, b) - Compare two orders for equality
62
+ * - buildDelta(masterGrid, workingGrid) - Build delta actions between grids
63
+ * - getOrderSize(order) - Extract order size with fallback
64
+ *
65
+ * SECTION 10: STRATEGY CALCULATIONS (3 functions)
66
+ * - deriveTargetBoundary(fills, currentBoundaryIdx, allSlots, config, gapSlots) - Derive boundary from fills
67
+ * - getSideBudget(side, funds, config, totalTarget) - Calculate side budget after fees
68
+ * - calculateBudgetedSizes(slots, side, budget, weightDist, incrementPercent, assets) - Calculate budgeted sizes
69
+ *
70
+ * ===============================================================================
71
+ */
72
+ const { ORDER_TYPES, ORDER_STATES, TIMING, FEE_PARAMETERS, GRID_LIMITS } = require('../../constants');
73
+ const Format = require('../format');
74
+ const { isValidNumber, toFiniteNumber } = Format;
75
+ const MathUtils = require('./math');
76
+ const { blockchainToFloat, floatToBlockchainInt, quantizeFloat } = MathUtils;
77
+ const Logger = require('../../logger');
78
+ const orderLogger = new Logger('Order');
79
+ // ================================================================================
80
+ // SECTION 1: CHAIN ORDER MATCHING & RECONCILIATION
81
+ // ================================================================================
82
+ /**
83
+ * Parse blockchain order into standard grid order format.
84
+ * Extracts price, type (BUY/SELL), and size from blockchain order structure.
85
+ * Handles precision scaling between assets.
86
+ *
87
+ * @param {Object} chainOrder - Order from blockchain with sell_price and for_sale
88
+ * @param {Object} assets - Asset metadata with assetA, assetB, and precisions
89
+ * @returns {Object|null} Parsed order {orderId, price, type, size} or null if invalid
90
+ */
91
+ function parseChainOrder(chainOrder, assets) {
92
+ if (!chainOrder || !chainOrder.sell_price || !assets)
93
+ return null;
94
+ const { base, quote } = chainOrder.sell_price;
95
+ if (!base || !quote || !base.asset_id || !quote.asset_id || base.amount === 0)
96
+ return null;
97
+ let price;
98
+ let type;
99
+ const precisionDelta = assets.assetA.precision - assets.assetB.precision;
100
+ const scaleFactor = precisionDelta >= 0
101
+ ? Math.pow(10, precisionDelta)
102
+ : Math.pow(10, Math.abs(precisionDelta));
103
+ if (base.asset_id === assets.assetA.id && quote.asset_id === assets.assetB.id) {
104
+ price = precisionDelta >= 0
105
+ ? (quote.amount / base.amount) * scaleFactor
106
+ : (quote.amount / base.amount) / scaleFactor;
107
+ type = ORDER_TYPES.SELL;
108
+ }
109
+ else if (base.asset_id === assets.assetB.id && quote.asset_id === assets.assetA.id) {
110
+ price = precisionDelta >= 0
111
+ ? (base.amount / quote.amount) * scaleFactor
112
+ : (base.amount / quote.amount) / scaleFactor;
113
+ type = ORDER_TYPES.BUY;
114
+ }
115
+ else
116
+ return null;
117
+ let size;
118
+ try {
119
+ if (chainOrder.for_sale !== undefined && chainOrder.for_sale !== null) {
120
+ const prec = (type === ORDER_TYPES.SELL) ? assets.assetA.precision : assets.assetB.precision;
121
+ size = blockchainToFloat(toFiniteNumber(chainOrder.for_sale), prec);
122
+ }
123
+ }
124
+ catch (e) {
125
+ orderLogger.warn(`parseChainOrder failed for ${chainOrder?.id}: ${e.message}`);
126
+ return null;
127
+ }
128
+ return { orderId: chainOrder.id, price, type, size };
129
+ }
130
+ /**
131
+ * Find grid order matching a blockchain order.
132
+ * First tries exact orderId match, then falls back to price/size matching within tolerance.
133
+ * Used during synchronization to link blockchain orders to grid slots.
134
+ *
135
+ * @param {Object} parsedChainOrder - Parsed blockchain order {orderId, price, type, size}
136
+ * @param {Object} [opts={}] - Options object
137
+ * @param {Map} [opts.orders] - Grid orders map to search
138
+ * @param {Object} [opts.assets] - Asset metadata for precision
139
+ * @param {Function} [opts.calcToleranceFn] - Function to calculate price tolerance
140
+ * @param {Object} [opts.logger] - Optional logger
141
+ * @param {boolean} [opts.skipSizeMatch=false] - Skip size matching check
142
+ * @param {boolean} [opts.allowSmallerChainSize=false] - Allow chain order to be smaller
143
+ * @param {boolean} [opts.requireAvailableSlot=false] - Skip slots already bound to a different chain order
144
+ * @param {Set<string>} [opts.excludeGridOrderIds] - Skip grid slot ids already assigned in this sync pass
145
+ * @returns {Object|null} Matching grid order or null if no match found
146
+ */
147
+ function findMatchingGridOrderByOpenOrder(parsedChainOrder, opts) {
148
+ const { orders, assets, calcToleranceFn, logger } = opts || {};
149
+ if (!parsedChainOrder || !orders)
150
+ return null;
151
+ if (parsedChainOrder.orderId) {
152
+ for (const gridOrder of orders.values()) {
153
+ if (gridOrder?.orderId === parsedChainOrder.orderId)
154
+ return gridOrder;
155
+ }
156
+ }
157
+ const chainSize = toFiniteNumber(parsedChainOrder.size);
158
+ const chainPrice = toFiniteNumber(parsedChainOrder.price);
159
+ const isSell = parsedChainOrder.type === ORDER_TYPES.SELL;
160
+ const precision = isSell ? assets?.assetA?.precision : assets?.assetB?.precision;
161
+ if (typeof precision !== 'number')
162
+ return null;
163
+ const chainInt = floatToBlockchainInt(chainSize, precision);
164
+ let bestMatch = null;
165
+ let bestPriceDiff = Infinity;
166
+ for (const gridOrder of orders.values()) {
167
+ const typeMatch = gridOrder?.type === parsedChainOrder.type ||
168
+ (opts?.allowSpreadType && gridOrder?.type === ORDER_TYPES.SPREAD);
169
+ if (!gridOrder || !typeMatch)
170
+ continue;
171
+ if (opts?.excludeGridOrderIds?.has?.(gridOrder.id))
172
+ continue;
173
+ if (![ORDER_STATES.ACTIVE, ORDER_STATES.PARTIAL, ORDER_STATES.VIRTUAL].includes(gridOrder.state))
174
+ continue;
175
+ if (opts?.requireAvailableSlot && gridOrder.orderId && gridOrder.orderId !== parsedChainOrder.orderId)
176
+ continue;
177
+ const priceDiff = Math.abs(gridOrder.price - chainPrice);
178
+ // Virtual/spread slots have size=0 — fall back to chain order's size so the
179
+ // precision-based tolerance is meaningful instead of collapsing to 0.
180
+ const effectiveSize = gridOrder.size > 0 ? gridOrder.size : chainSize;
181
+ // When calcToleranceFn returns null (e.g. zero-size virtual slot), fall back to
182
+ // exact matching (tolerance=0). This is intentional — virtual/spread slots should
183
+ // only match chain orders at exactly their grid price.
184
+ const priceTolerance = calcToleranceFn?.(gridOrder.price, effectiveSize, parsedChainOrder.type) || 0;
185
+ if (priceDiff > priceTolerance)
186
+ continue;
187
+ const gridInt = floatToBlockchainInt(gridOrder.size, precision);
188
+ const sizeMismatch = opts?.allowSmallerChainSize ? (chainInt > gridInt + 1) : (Math.abs(gridInt - chainInt) > 1);
189
+ if (!opts?.skipSizeMatch && sizeMismatch)
190
+ continue;
191
+ if (priceDiff < bestPriceDiff) {
192
+ bestPriceDiff = priceDiff;
193
+ bestMatch = gridOrder;
194
+ }
195
+ }
196
+ return bestMatch;
197
+ }
198
+ /**
199
+ * Update grid order size based on blockchain state.
200
+ * Detects partial fills and updates accounting if size changed.
201
+ * Skips dust refills (prevents unnecessary sync when size decreases).
202
+ *
203
+ * Returns the updated order object or null if no update needed.
204
+ *
205
+ * @param {Object} manager - OrderManager instance
206
+ * @param {Object} gridOrder - Grid order to update
207
+ * @param {number} chainSize - Size from blockchain
208
+ * @returns {Promise<Object|null>} Updated order object or null
209
+ * @throws {Error} If chainSize suspicious (possible data corruption)
210
+ */
211
+ async function applyChainSizeToGridOrder(manager, gridOrder, chainSize) {
212
+ if (!manager || !gridOrder)
213
+ return null;
214
+ if (gridOrder.state !== ORDER_STATES.ACTIVE && gridOrder.state !== ORDER_STATES.PARTIAL)
215
+ return null;
216
+ const precision = (gridOrder.type === ORDER_TYPES.SELL) ? manager.assets?.assetA?.precision : manager.assets?.assetB?.precision;
217
+ if (isValidNumber(precision) && isValidNumber(chainSize)) {
218
+ const SUSPICIOUS_SATOSHI_LIMIT = 1e15;
219
+ const suspiciousThreshold = SUSPICIOUS_SATOSHI_LIMIT / Math.pow(10, precision);
220
+ if (Math.abs(toFiniteNumber(chainSize)) > suspiciousThreshold) {
221
+ const msg = `CRITICAL: suspicious chainSize=${chainSize} exceeds limit ${suspiciousThreshold}. Possible blockchain sync error or data corruption.`;
222
+ manager.logger?.log?.(msg, 'error');
223
+ throw new Error(msg);
224
+ }
225
+ }
226
+ const oldSize = toFiniteNumber(gridOrder.size);
227
+ const newSize = isValidNumber(chainSize) ? toFiniteNumber(chainSize) : oldSize;
228
+ if (gridOrder.isDustRefill && newSize < oldSize) {
229
+ const oldInt = floatToBlockchainInt(oldSize, precision);
230
+ const newInt = floatToBlockchainInt(newSize, precision);
231
+ const deltaInt = Math.max(0, oldInt - newInt);
232
+ // Ignore only negligible one-unit quantization noise on dust refill orders.
233
+ // Real decreases must still be synchronized to avoid stuck PARTIAL states.
234
+ if (deltaInt <= 1)
235
+ return null;
236
+ }
237
+ if (floatToBlockchainInt(oldSize, precision) === floatToBlockchainInt(newSize, precision)) {
238
+ return null;
239
+ }
240
+ const updatedOrder = { ...gridOrder, size: newSize };
241
+ const delta = newSize - oldSize;
242
+ if (delta < 0 && manager.logger) {
243
+ if (typeof manager.logger.logFundsStatus === 'function')
244
+ manager.logger.logFundsStatus(manager);
245
+ }
246
+ return updatedOrder;
247
+ }
248
+ /**
249
+ * Build a stable fill dedupe key.
250
+ * Accepts either a fill-history entry or explicit parts.
251
+ * Returns null if required fields are missing — callers should
252
+ * skip dedup rather than operate on a degraded key.
253
+ *
254
+ * @param {Object} fillOrParts - Fill entry ({ op, block_num, id }) or { orderId, blockNum, historyId }
255
+ * @returns {string|null} Stable key in order:block:history form, or null if fields are missing
256
+ */
257
+ function buildFillKey(fillOrParts) {
258
+ const fillOp = fillOrParts?.op?.[1];
259
+ const orderId = fillOp?.order_id ?? fillOrParts?.orderId;
260
+ const blockNum = fillOrParts?.block_num ?? fillOrParts?.blockNum;
261
+ const historyId = fillOrParts?.id ?? fillOrParts?.historyId;
262
+ if (!orderId || blockNum == null || !historyId)
263
+ return null;
264
+ return `${orderId}:${blockNum}:${historyId}`;
265
+ }
266
+ /**
267
+ * Correct a single order's price on blockchain.
268
+ * Cancels surplus orders; updates price for others.
269
+ * Removes from correction queue after processing.
270
+ *
271
+ * @param {Object} manager - OrderManager instance
272
+ * @param {Object} correctionInfo - Correction details {gridOrder, chainOrderId, expectedPrice, size, type, isSurplus}
273
+ * @param {string} accountName - Account name for blockchain transaction
274
+ * @param {string} privateKey - Private key for signing
275
+ * @param {Object} accountOrders - AccountOrders accessor for blockchain ops
276
+ * @returns {Promise<Object>} Result {success, cancelled, skipped, error, orderGone}
277
+ */
278
+ async function correctOrderPriceOnChain(manager, correctionInfo, accountName, privateKey, accountOrders) {
279
+ const { gridOrder, chainOrderId, expectedPrice, size, type, isSurplus } = correctionInfo;
280
+ const stillNeeded = manager.ordersNeedingPriceCorrection?.some(c => c.chainOrderId === chainOrderId);
281
+ if (!stillNeeded)
282
+ return { success: true, skipped: true };
283
+ // Surplus/type-mismatch entries need cancellation, not a price update
284
+ if (isSurplus) {
285
+ try {
286
+ const sideLabel = type === ORDER_TYPES.SELL ? 'SELL' : 'BUY';
287
+ manager.logger?.log?.(`[CORRECTION] Cancelling surplus/mismatched ${sideLabel} order ${chainOrderId} for slot ${gridOrder?.id || 'unknown'}`, 'info');
288
+ await accountOrders.cancelOrder(accountName, privateKey, chainOrderId);
289
+ if (gridOrder && manager._applyOrderUpdate) {
290
+ const spreadOrder = convertToSpreadPlaceholder(gridOrder);
291
+ await manager._applyOrderUpdate(spreadOrder, 'surplus-type-mismatch-cancel', {
292
+ skipAccounting: false,
293
+ fee: 0
294
+ });
295
+ }
296
+ return { success: true, cancelled: true };
297
+ }
298
+ catch (error) {
299
+ return { success: false, error: error.message, orderGone: error.message?.includes('not found') };
300
+ }
301
+ finally {
302
+ manager.ordersNeedingPriceCorrection = manager.ordersNeedingPriceCorrection.filter(c => c.chainOrderId !== chainOrderId);
303
+ }
304
+ }
305
+ let amountToSell, minToReceive;
306
+ if (type === ORDER_TYPES.SELL) {
307
+ amountToSell = size;
308
+ minToReceive = size * expectedPrice;
309
+ }
310
+ else {
311
+ amountToSell = size;
312
+ minToReceive = size / expectedPrice;
313
+ }
314
+ try {
315
+ const updateResult = await accountOrders.updateOrder(accountName, privateKey, chainOrderId, { amountToSell, minToReceive });
316
+ if (updateResult === null) {
317
+ return { success: false, error: 'skipped' };
318
+ }
319
+ return { success: true };
320
+ }
321
+ catch (error) {
322
+ return { success: false, error: error.message, orderGone: error.message?.includes('not found') };
323
+ }
324
+ finally {
325
+ manager.ordersNeedingPriceCorrection = manager.ordersNeedingPriceCorrection.filter(c => c.chainOrderId !== chainOrderId);
326
+ }
327
+ }
328
+ /**
329
+ * Correct all pending price mismatches atomically.
330
+ * Processes corrections sequentially with sync delays between operations.
331
+ *
332
+ * @param {Object} manager - OrderManager instance
333
+ * @param {string} accountName - Account name for blockchain transactions
334
+ * @param {string} privateKey - Private key for signing
335
+ * @param {Object} accountOrders - AccountOrders accessor for blockchain ops
336
+ * @returns {Promise<Object>} Summary {corrected, failed, results}
337
+ */
338
+ async function correctAllPriceMismatches(manager, accountName, privateKey, accountOrders) {
339
+ if (!manager || !manager._gridLock)
340
+ return { corrected: 0, failed: 0, results: [] };
341
+ return await manager._gridLock.acquire(async () => {
342
+ const results = [];
343
+ let corrected = 0;
344
+ let failed = 0;
345
+ const seen = new Set();
346
+ const ordersToCorrect = (manager.ordersNeedingPriceCorrection || []).filter(c => {
347
+ if (!c.chainOrderId || seen.has(c.chainOrderId))
348
+ return false;
349
+ seen.add(c.chainOrderId);
350
+ return true;
351
+ });
352
+ for (const correctionInfo of ordersToCorrect) {
353
+ const result = await correctOrderPriceOnChain(manager, correctionInfo, accountName, privateKey, accountOrders);
354
+ results.push({ ...correctionInfo, result });
355
+ if (result && result.success)
356
+ corrected++;
357
+ else
358
+ failed++;
359
+ const { sleep } = require('./system');
360
+ await sleep(TIMING.SYNC_DELAY_MS);
361
+ }
362
+ // Persist master grid mutations from surplus-type-mismatch cancellations.
363
+ // Without this, corrections that cancel an order and convert its grid slot
364
+ // to a spread placeholder are in-memory only until the next fill-driven or
365
+ // maintenance-driven persist cycle.
366
+ if (corrected > 0 && typeof manager.persistGrid === 'function') {
367
+ await manager.persistGrid();
368
+ }
369
+ return { corrected, failed, results };
370
+ });
371
+ }
372
+ // ================================================================================
373
+ // SECTION 2-3: ORDER CONSTRUCTION & STATE TRANSITIONS
374
+ // ================================================================================
375
+ /**
376
+ * Build blockchain order arguments from grid order.
377
+ * Converts grid order data to blockchain-compatible amounts and asset IDs.
378
+ * Handles both BUY and SELL order types.
379
+ *
380
+ * @param {Object} order - Grid order with type, size, price
381
+ * @param {Object} assetA - Asset metadata with id and precision
382
+ * @param {Object} assetB - Asset metadata with id and precision
383
+ * @returns {Object} Blockchain args {amountToSell, sellAssetId, minToReceive, receiveAssetId}
384
+ * @throws {Error} If asset precision missing
385
+ */
386
+ function buildCreateOrderArgs(order, assetA, assetB) {
387
+ let precision = (order.type === 'sell') ? assetA?.precision : assetB?.precision;
388
+ if (typeof precision !== 'number')
389
+ throw new Error("Asset precision missing");
390
+ // IMPORTANT: create args must always come from target grid size.
391
+ // Never reuse rawOnChain.for_sale here because stale metadata from a prior
392
+ // slot role can inflate create amounts (e.g., SPREAD->BUY activation).
393
+ const quantizedSize = quantizeFloat(order.size, precision);
394
+ if (order.type === 'sell') {
395
+ return { amountToSell: quantizedSize, sellAssetId: assetA.id, minToReceive: quantizedSize * order.price, receiveAssetId: assetB.id };
396
+ }
397
+ else {
398
+ return { amountToSell: quantizedSize, sellAssetId: assetB.id, minToReceive: quantizedSize / order.price, receiveAssetId: assetA.id };
399
+ }
400
+ }
401
+ /**
402
+ * Build a deterministic fingerprint for a planned CREATE order.
403
+ *
404
+ * The fingerprint is used by the COW recovery path to match an
405
+ * order the bot just tried to broadcast to an on-chain order that may or may
406
+ * not have been accepted. Determinism is the key property: if the bot replays
407
+ * the same CREATE op after a credential daemon timeout, the new fingerprint
408
+ * must equal the old one so the chain side can be correlated.
409
+ *
410
+ * The fingerprint uses the (side, assetA, assetB, sellInt, receiveInt, slotId)
411
+ * tuple. sellInt and receiveInt are the raw blockchain integer amounts from
412
+ * buildCreateOrderOp's finalInts (see modules/chain_orders.ts). Using the
413
+ * raw integer pair is more robust than re-deriving a price float because
414
+ * it is invariant to human-side rounding.
415
+ *
416
+ * The slot id is included so two CREATEs with identical price+size on the
417
+ * same side (theoretically possible across non-adjacent grid slots) are
418
+ * still distinguishable.
419
+ *
420
+ * Returns null on any malformed input so callers can skip non-CREATE / non-
421
+ * integer contexts without raising.
422
+ *
423
+ * @param {Object} params
424
+ * @param {string} params.side - 'sell' or 'buy'
425
+ * @param {string} params.assetA - Base asset id (e.g. '1.3.0')
426
+ * @param {string} params.assetB - Quote asset id (e.g. '1.3.121')
427
+ * @param {number|string} params.sellInt - Integer (blockchain-precision) amount-to-sell
428
+ * @param {number|string} params.receiveInt - Integer (blockchain-precision) min-to-receive
429
+ * @param {string} params.slotId - Grid slot id (e.g. 'sell-3', 'buy-7')
430
+ * @returns {string|null} Fingerprint or null on bad input
431
+ */
432
+ function buildCreateOpFingerprint(params) {
433
+ if (!params || typeof params !== 'object')
434
+ return null;
435
+ const { side, assetA, assetB, sellInt, receiveInt, slotId } = params;
436
+ if (side !== 'sell' && side !== 'buy')
437
+ return null;
438
+ if (!assetA || !assetB)
439
+ return null;
440
+ if (!Number.isFinite(Number(sellInt)) || !Number.isFinite(Number(receiveInt)))
441
+ return null;
442
+ if (!slotId)
443
+ return null;
444
+ return `${side}:${assetA}:${assetB}:${Number(sellInt)}:${Number(receiveInt)}:${String(slotId)}`;
445
+ }
446
+ /**
447
+ * Determine which order sides were updated based on update flags.
448
+ *
449
+ * @param {boolean} buyUpdated - Whether buy side was updated
450
+ * @param {boolean} sellUpdated - Whether sell side was updated
451
+ * @returns {string} "buy", "sell", or "both"
452
+ */
453
+ function getOrderTypeFromUpdatedFlags(buyUpdated, sellUpdated) {
454
+ return (buyUpdated && sellUpdated) ? 'both' : (buyUpdated ? 'buy' : 'sell');
455
+ }
456
+ /**
457
+ * Resolve configured price bound (minPrice/maxPrice) to numeric value.
458
+ * Supports relative expressions like "2x" and fallback defaults.
459
+ *
460
+ * @param {*} value - Configured value (number, percentage, relative, or empty)
461
+ * @param {number} fallback - Fallback value if configured value is empty
462
+ * @param {number} startPrice - Reference price for relative calculations
463
+ * @param {string} mode - "min" or "max" for relative calculation mode
464
+ * @returns {number} Resolved numeric price
465
+ * @throws {Error} If value is invalid and cannot be interpreted
466
+ */
467
+ function resolveConfiguredPriceBound(value, fallback, startPrice, mode) {
468
+ const configuredValue = (value === null || value === undefined || value === '') ? fallback : value;
469
+ const relative = MathUtils.resolveRelativePrice(configuredValue, startPrice, mode);
470
+ if (Number.isFinite(relative)) {
471
+ return relative;
472
+ }
473
+ const numeric = Number(configuredValue);
474
+ if (!Number.isFinite(numeric)) {
475
+ const boundName = mode === 'min' ? 'minPrice' : mode === 'max' ? 'maxPrice' : 'price bound';
476
+ throw new Error(`Invalid ${boundName}: ${String(configuredValue)}. Expected a numeric value or multiplier like 3x.`);
477
+ }
478
+ return numeric;
479
+ }
480
+ /**
481
+ * Convert order to virtual state.
482
+ * Clears on-chain ID and raw blockchain data, marks as VIRTUAL.
483
+ *
484
+ * @param {Object} order - Order to virtualize
485
+ * @returns {Object} Virtualized order (VIRTUAL state, no orderId)
486
+ */
487
+ function virtualizeOrder(order) {
488
+ if (!order)
489
+ return order;
490
+ const { btsFeeState, ...rest } = order;
491
+ return { ...rest, state: ORDER_STATES.VIRTUAL, orderId: null, rawOnChain: null };
492
+ }
493
+ /**
494
+ * Convert order to spread placeholder (virtual, zero-sized spread order).
495
+ * Used when clearing order slots during rotations or rebalancing.
496
+ *
497
+ * @param {Object} order - Order to convert
498
+ * @returns {Object} Spread placeholder order (VIRTUAL, SPREAD type, zero size)
499
+ */
500
+ function convertToSpreadPlaceholder(order) {
501
+ return { ...virtualizeOrder(order), type: ORDER_TYPES.SPREAD, size: 0 };
502
+ }
503
+ // ================================================================================
504
+ // SECTION 4-6: FILTERING, PREDICATES & SIZE VALIDATION
505
+ // ================================================================================
506
+ /**
507
+ * Filter orders array by type.
508
+ *
509
+ * @param {Array<Object>} orders - Orders to filter
510
+ * @param {string} orderType - Order type to match (BUY, SELL, SPREAD)
511
+ * @returns {Array<Object>} Filtered orders of specified type
512
+ */
513
+ function filterOrdersByType(orders, orderType) {
514
+ return Array.isArray(orders) ? orders.filter(o => o && o.type === orderType) : [];
515
+ }
516
+ /**
517
+ * Build outside->center paired groups from mixed BUY/SELL items.
518
+ * SELL items are ordered highest->lowest price, BUY items lowest->highest,
519
+ * then zipped into groups: [sell0,buy0], [sell1,buy1], ...
520
+ *
521
+ * @param {Array<*>} items - Source items containing order-like data.
522
+ * @param {Object} accessors - Accessor functions for item shape.
523
+ * @param {(item: any) => boolean} [accessors.isValid=Boolean] - Validity predicate.
524
+ * @param {(item: any) => string} accessors.getType - Returns ORDER_TYPES value.
525
+ * @param {(item: any) => number|string} accessors.getPrice - Returns item price.
526
+ * @returns {Array<Array<*>>} Grouped items in outside->center pair order.
527
+ */
528
+ function buildOutsideInPairGroups(items, { isValid = Boolean, getType, getPrice }) {
529
+ const safeItems = Array.isArray(items) ? items.filter(item => isValid(item)) : [];
530
+ if (safeItems.length === 0)
531
+ return [];
532
+ const sellItems = safeItems
533
+ .filter(item => getType(item) === ORDER_TYPES.SELL)
534
+ .sort((a, b) => Number(getPrice(b) || 0) - Number(getPrice(a) || 0));
535
+ const buyItems = safeItems
536
+ .filter(item => getType(item) === ORDER_TYPES.BUY)
537
+ .sort((a, b) => Number(getPrice(a) || 0) - Number(getPrice(b) || 0));
538
+ const groups = [];
539
+ const maxLen = Math.max(sellItems.length, buyItems.length);
540
+ for (let i = 0; i < maxLen; i++) {
541
+ const group = [];
542
+ if (i < sellItems.length)
543
+ group.push(sellItems[i]);
544
+ if (i < buyItems.length)
545
+ group.push(buyItems[i]);
546
+ if (group.length > 0)
547
+ groups.push(group);
548
+ }
549
+ return groups;
550
+ }
551
+ /**
552
+ * Extract operation_results from a chain batch execution result.
553
+ * Handles the multiple result shapes returned by different chain library versions
554
+ * and wrapped/unwrapped transaction formats.
555
+ *
556
+ * @param {Object|Array} result - Raw chain batch execution result.
557
+ * @returns {Array} Array of operation result tuples, or empty array if unrecognized.
558
+ */
559
+ function extractBatchOperationResults(result) {
560
+ const ops = ((result && Array.isArray(result.operation_results) && result.operation_results) ||
561
+ (result && result.raw && Array.isArray(result.raw.operation_results) && result.raw.operation_results) ||
562
+ (result && result.raw && result.raw.trx && Array.isArray(result.raw.trx.operation_results) && result.raw.trx.operation_results) ||
563
+ (result && Array.isArray(result) && result[0] && result[0].trx && Array.isArray(result[0].trx.operation_results) && result[0].trx.operation_results) ||
564
+ null);
565
+ return (ops && ops.length > 0) ? ops : null;
566
+ }
567
+ /**
568
+ * Format an unmatched chain order/blocker for operator logs.
569
+ *
570
+ * @param {Object} order - Unmatched chain order or structural blocker.
571
+ * @returns {string} Compact human-readable diagnostic.
572
+ */
573
+ function formatUnmatchedChainOrder(order) {
574
+ if (!order)
575
+ return 'unknown unmatched order';
576
+ const parts = [
577
+ `${order.chainOrderId || 'unknown'}:${order.type || 'unknown'}@${Format.formatPrice6(order.price)}`,
578
+ ];
579
+ if (order.size !== undefined)
580
+ parts.push(`size=${Format.formatAmount(order.size)}`);
581
+ if (order.slotId)
582
+ parts.push(`slot=${order.slotId}`);
583
+ if (order.reason)
584
+ parts.push(`reason=${order.reason}`);
585
+ if (order.fingerprint)
586
+ parts.push(`fingerprint=${order.fingerprint}`);
587
+ if (order.candidateDiagnostics)
588
+ parts.push(`candidates=${order.candidateDiagnostics}`);
589
+ return parts.join(' ');
590
+ }
591
+ /**
592
+ * Check if order is on blockchain (ACTIVE or PARTIAL state).
593
+ *
594
+ * @param {Object} order - Order to check
595
+ * @returns {boolean} True if order has on-chain state
596
+ */
597
+ function isOrderOnChain(order) {
598
+ return (order?.state === ORDER_STATES.ACTIVE || order?.state === ORDER_STATES.PARTIAL) && !!order?.orderId;
599
+ }
600
+ /**
601
+ * Check if order is virtual (not on blockchain yet).
602
+ *
603
+ * @param {Object} order - Order to check
604
+ * @returns {boolean} True if order in VIRTUAL state
605
+ */
606
+ function isOrderVirtual(order) { return order?.state === ORDER_STATES.VIRTUAL; }
607
+ /**
608
+ * Check if order has on-chain ID.
609
+ *
610
+ * @param {Object} order - Order to check
611
+ * @returns {boolean} True if order has orderId
612
+ */
613
+ function hasOnChainId(order) { return !!order?.orderId; }
614
+ /**
615
+ * Check if order is placed and confirmed on blockchain.
616
+ * Must be on-chain (ACTIVE/PARTIAL) with orderId.
617
+ *
618
+ * @param {Object} order - Order to check
619
+ * @returns {boolean} True if order is confirmed placed
620
+ */
621
+ function isOrderPlaced(order) { return isOrderOnChain(order) && hasOnChainId(order); }
622
+ /**
623
+ * Check if order is phantom (on-chain but missing orderId).
624
+ * Indicates a sync error or ghost order state.
625
+ *
626
+ * @param {Object} order - Order to check
627
+ * @returns {boolean} True if order appears on-chain but has no ID
628
+ */
629
+ function isPhantomOrder(order) {
630
+ const inOnChainState = order?.state === ORDER_STATES.ACTIVE || order?.state === ORDER_STATES.PARTIAL;
631
+ return inOnChainState && !hasOnChainId(order);
632
+ }
633
+ /**
634
+ * Check if slot is available for new order placement.
635
+ * Slot must be VIRTUAL (not on-chain) and have no orderId.
636
+ *
637
+ * @param {Object} order - Order/slot to check
638
+ * @returns {boolean} True if slot available
639
+ */
640
+ function isSlotAvailable(order) { return isOrderVirtual(order) && !hasOnChainId(order); }
641
+ /**
642
+ * Check if order size meets health thresholds.
643
+ * Must be above absolute minimum and double-dust threshold.
644
+ *
645
+ * @param {number} size - Order size to check
646
+ * @param {string} type - Order type (BUY/SELL)
647
+ * @param {Object} assets - Asset metadata with precisions
648
+ * @param {number} idealSize - Ideal grid size for dust calculation
649
+ * @returns {boolean} True if order is healthy
650
+ */
651
+ function isOrderHealthy(size, type, assets, idealSize) {
652
+ const numericSize = Number(size);
653
+ const numericIdeal = Number(idealSize);
654
+ if (!Number.isFinite(numericSize) || numericSize <= 0)
655
+ return false;
656
+ if (!Number.isFinite(numericIdeal) || numericIdeal <= 0)
657
+ return false;
658
+ return MathUtils.validateOrderSize(numericSize, type, assets, 50, numericIdeal, 5).isValid;
659
+ }
660
+ /**
661
+ * Check if any size in array falls below threshold.
662
+ * Used for validation before order placement.
663
+ *
664
+ * @param {Array<number>} sizes - Sizes to check
665
+ * @param {number} threshold - Minimum threshold value
666
+ * @param {number} precision - Asset precision for quantization check
667
+ * @param {boolean} [includeNonFinite=false] - Treat non-finite values as below threshold
668
+ * @returns {boolean} True if any size is below threshold
669
+ */
670
+ function checkSizeThreshold(sizes, threshold, precision, includeNonFinite = false) {
671
+ if (threshold <= 0 || !Array.isArray(sizes) || sizes.length === 0)
672
+ return false;
673
+ const precisionSlack = isValidNumber(precision)
674
+ ? MathUtils.getPrecisionSlack(precision, 1)
675
+ : Number.EPSILON;
676
+ return sizes.some(sz => {
677
+ if (!Number.isFinite(sz))
678
+ return includeNonFinite;
679
+ if (sz <= 0)
680
+ return false;
681
+ if (isValidNumber(precision))
682
+ return floatToBlockchainInt(sz, precision) < floatToBlockchainInt(threshold, precision);
683
+ return sz < (threshold - precisionSlack);
684
+ });
685
+ }
686
+ /**
687
+ * Check if any sizes are below minimum (including non-finite values).
688
+ * Wrapper for checkSizeThreshold with includeNonFinite=true.
689
+ *
690
+ * @param {Array<number>} sizes - Sizes to check
691
+ * @param {number} minSize - Minimum size threshold
692
+ * @param {number} precision - Asset precision
693
+ * @returns {boolean} True if any size is below minimum
694
+ */
695
+ function checkSizesBeforeMinimum(sizes, minSize, precision) {
696
+ return checkSizeThreshold(sizes, minSize, precision, true);
697
+ }
698
+ /**
699
+ * Calculate ideal grid boundary based on reference price.
700
+ * Places boundary near reference price with gap spacing in mind.
701
+ *
702
+ * @param {Array<Object>} allSlots - All grid slots sorted by price
703
+ * @param {number} referencePrice - Reference/anchor price
704
+ * @param {number} gapSlots - Number of gap slots between buy and sell
705
+ * @returns {number} Ideal boundary index or -1 if slots empty
706
+ */
707
+ function calculateIdealBoundary(allSlots, referencePrice, gapSlots) {
708
+ if (!allSlots || allSlots.length === 0)
709
+ return -1;
710
+ let splitIdx = allSlots.findIndex(s => s.price >= referencePrice);
711
+ if (splitIdx === -1)
712
+ splitIdx = allSlots.length;
713
+ const buySpread = Math.floor(gapSlots / 2);
714
+ return Math.max(0, Math.min(allSlots.length - 1, splitIdx - buySpread - 1));
715
+ }
716
+ /**
717
+ * Calculate grid boundary based on available funds ratio.
718
+ * Distributes buy/sell slots proportional to fund values.
719
+ *
720
+ * @param {Array<Object>} allSlots - All grid slots sorted by price
721
+ * @param {number} availA - Available assetA (sell-side capital)
722
+ * @param {number} availB - Available assetB (buy-side capital)
723
+ * @param {number} price - Current reference price for valuation
724
+ * @param {number} gapSlots - Number of gap slots between buy and sell
725
+ * @returns {number} Fund-driven boundary index
726
+ */
727
+ function calculateFundDrivenBoundary(allSlots, availA, availB, price, gapSlots) {
728
+ const valA = toFiniteNumber(availA) * toFiniteNumber(price);
729
+ const valB = toFiniteNumber(availB);
730
+ const totalVal = valA + valB;
731
+ if (totalVal <= 0)
732
+ return Math.floor((allSlots.length - gapSlots) / 2);
733
+ const targetBuySlots = Math.round((allSlots.length - gapSlots) * (valB / totalVal));
734
+ return Math.max(0, Math.min(allSlots.length - gapSlots - 1, targetBuySlots - 1));
735
+ }
736
+ /**
737
+ * Assign BUY/SELL/SPREAD roles to grid slots based on boundary.
738
+ * Slots below boundary are BUY, above boundary are SELL, between are SPREAD.
739
+ * Can optionally override even on-chain orders.
740
+ *
741
+ * @param {Array<Object>} allSlots - All grid slots to assign
742
+ * @param {number} boundaryIdx - Boundary index
743
+ * @param {number} gapSlots - Number of gap slots between buy and sell
744
+ * @param {Object} ORDER_TYPES - ORDER_TYPES constants
745
+ * @param {Object} ORDER_STATES - ORDER_STATES constants
746
+ * @param {Object} [options={}] - Options
747
+ * @param {boolean} [options.assignOnChain=false] - Override on-chain orders if true
748
+ * @returns {Array<Object>} Slots with updated type assignments
749
+ */
750
+ function assignGridRoles(allSlots, boundaryIdx, gapSlots, ORDER_TYPES, ORDER_STATES, options = {}) {
751
+ const assignOnChain = options.assignOnChain === true;
752
+ const getCurrentSlot = (typeof options.getCurrentSlot === 'function') ? options.getCurrentSlot : null;
753
+ const buyEndIdx = boundaryIdx;
754
+ const sellStartIdx = boundaryIdx + gapSlots + 1;
755
+ return allSlots.map((slot, i) => {
756
+ const liveSlot = getCurrentSlot ? (getCurrentSlot(slot.id) || slot) : slot;
757
+ const canAssign = assignOnChain || !isOrderOnChain(liveSlot);
758
+ if (canAssign) {
759
+ const newType = (i <= buyEndIdx) ? ORDER_TYPES.BUY : (i >= sellStartIdx) ? ORDER_TYPES.SELL : ORDER_TYPES.SPREAD;
760
+ if (slot.type !== newType) {
761
+ return { ...slot, type: newType };
762
+ }
763
+ }
764
+ return slot;
765
+ });
766
+ }
767
+ /**
768
+ * Determine if grid is out of spread and by how many steps.
769
+ * Compares current spread against nominal with tolerance.
770
+ * Returns number of excess steps (0 = in-spread).
771
+ *
772
+ * @param {number} currentSpread - Current bid-ask spread percentage
773
+ * @param {number} nominalSpread - Nominal spread percentage
774
+ * @param {number} toleranceSteps - Tolerance in increment steps
775
+ * @param {number} buyCount - Number of active buy orders
776
+ * @param {number} sellCount - Number of active sell orders
777
+ * @param {number} [incrementPercent=0.5] - Grid increment percentage
778
+ * @returns {number} Excess steps (0 if in-spread, >0 if out-of-spread)
779
+ */
780
+ function shouldFlagOutOfSpread(currentSpread, nominalSpread, toleranceSteps, buyCount, sellCount, incrementPercent = 0.5) {
781
+ if (buyCount === 0 || sellCount === 0)
782
+ return 0;
783
+ const step = 1 + (incrementPercent / 100);
784
+ const currentSteps = Math.log(1 + (currentSpread / 100)) / Math.log(step);
785
+ const limitSteps = (Math.log(1 + (nominalSpread / 100)) / Math.log(step)) + toleranceSteps;
786
+ if (currentSteps <= limitSteps)
787
+ return 0;
788
+ return Math.max(1, Math.ceil(currentSteps - limitSteps));
789
+ }
790
+ // ================================================================================
791
+ // SECTION 8: GRID INDEXING
792
+ // ================================================================================
793
+ /**
794
+ * Build complete index set from grid
795
+ * @param {Map} grid - Order grid
796
+ * @returns {Object} - Index object with state and type indexes
797
+ */
798
+ function buildIndexes(grid) {
799
+ const indexes = {
800
+ [ORDER_STATES.VIRTUAL]: new Set(),
801
+ [ORDER_STATES.ACTIVE]: new Set(),
802
+ [ORDER_STATES.PARTIAL]: new Set(),
803
+ [ORDER_TYPES.BUY]: new Set(),
804
+ [ORDER_TYPES.SELL]: new Set(),
805
+ [ORDER_TYPES.SPREAD]: new Set()
806
+ };
807
+ for (const order of grid.values()) {
808
+ if (indexes[order.state])
809
+ indexes[order.state].add(order.id);
810
+ if (indexes[order.type])
811
+ indexes[order.type].add(order.id);
812
+ }
813
+ return indexes;
814
+ }
815
+ /**
816
+ * Validate index consistency (for testing/debugging)
817
+ * @param {Map} grid - Order grid
818
+ * @param {Object} indexes - Index object
819
+ * @returns {Object} - Validation result
820
+ */
821
+ function validateIndexes(grid, indexes) {
822
+ const errors = [];
823
+ for (const [id, order] of grid.entries()) {
824
+ const stateIndex = indexes[order.state];
825
+ const typeIndex = indexes[order.type];
826
+ if (!stateIndex || !stateIndex.has(id)) {
827
+ errors.push(`Order ${id} missing from state index ${order.state}`);
828
+ }
829
+ if (!typeIndex || !typeIndex.has(id)) {
830
+ errors.push(`Order ${id} missing from type index ${order.type}`);
831
+ }
832
+ }
833
+ for (const [key, indexSet] of Object.entries(indexes)) {
834
+ for (const id of indexSet) {
835
+ if (!grid.has(id)) {
836
+ errors.push(`Orphaned index entry: ${key} has ${id} but not in grid`);
837
+ }
838
+ }
839
+ }
840
+ return {
841
+ valid: errors.length === 0,
842
+ errors
843
+ };
844
+ }
845
+ // ================================================================================
846
+ // SECTION 9: ORDER COMPARISON & DELTA
847
+ // ================================================================================
848
+ function _getRelativeTolerance(configOverride) {
849
+ const raw = configOverride?.gridLimits?.RELATIVE_ORDER_UPDATE_THRESHOLD_PERCENT
850
+ ?? GRID_LIMITS.RELATIVE_ORDER_UPDATE_THRESHOLD_PERCENT;
851
+ return Number(raw) / 100;
852
+ }
853
+ const ORDER_RELATIVE_TOLERANCE = _getRelativeTolerance();
854
+ function getDecimalPlaces(value) {
855
+ const numeric = Number(value);
856
+ if (!Number.isFinite(numeric))
857
+ return 0;
858
+ const text = numeric.toString().toLowerCase();
859
+ if (!text.includes('e')) {
860
+ const parts = text.split('.');
861
+ return parts[1] ? parts[1].length : 0;
862
+ }
863
+ const [mantissa, exponentRaw] = text.split('e');
864
+ const exponent = Number(exponentRaw);
865
+ const dotIndex = mantissa.indexOf('.');
866
+ const mantissaDecimals = dotIndex >= 0 ? (mantissa.length - dotIndex - 1) : 0;
867
+ return Math.max(0, mantissaDecimals - exponent);
868
+ }
869
+ function parseOptionalPrecision(value) {
870
+ if (value === null || value === undefined || value === '')
871
+ return null;
872
+ const numeric = Number(value);
873
+ if (!Number.isFinite(numeric) || numeric < 0)
874
+ return null;
875
+ return numeric;
876
+ }
877
+ function precisionToQuantum(precision) {
878
+ const p = parseOptionalPrecision(precision);
879
+ if (p === null)
880
+ return null;
881
+ const quantum = Math.pow(10, -p);
882
+ return quantum > 0 ? quantum : Number.EPSILON;
883
+ }
884
+ function observedQuantum(a, b) {
885
+ const maxDecimals = Math.max(getDecimalPlaces(a), getDecimalPlaces(b));
886
+ if (maxDecimals <= 0)
887
+ return Number.EPSILON;
888
+ const quantum = Math.pow(10, -maxDecimals);
889
+ return quantum > 0 ? quantum : Number.EPSILON;
890
+ }
891
+ function resolveOrderSizePrecision(orderType, precisions = {}) {
892
+ if (!precisions || typeof precisions !== 'object')
893
+ return null;
894
+ if (orderType === ORDER_TYPES.BUY)
895
+ return parseOptionalPrecision(precisions.buyPrecision);
896
+ if (orderType === ORDER_TYPES.SELL)
897
+ return parseOptionalPrecision(precisions.sellPrecision);
898
+ return parseOptionalPrecision(precisions.defaultPrecision);
899
+ }
900
+ function resolvePriceTolerance(precisions = {}, order, referenceOrder) {
901
+ const leftPrice = Number(order?.price);
902
+ const rightPrice = Number(referenceOrder?.price);
903
+ const relativeToleranceRatio = Number(precisions.priceRelativeTolerance);
904
+ if (!Number.isFinite(relativeToleranceRatio) || relativeToleranceRatio < 0)
905
+ return 0;
906
+ const scale = Math.max(Math.abs(leftPrice || 0), Math.abs(rightPrice || 0));
907
+ return scale * relativeToleranceRatio;
908
+ }
909
+ function nearlyEqualAbsolute(a, b, tolerance) {
910
+ const left = Number(a);
911
+ const right = Number(b);
912
+ if (!Number.isFinite(left) || !Number.isFinite(right)) {
913
+ return left === right;
914
+ }
915
+ if (left === right)
916
+ return true;
917
+ const tol = Number.isFinite(Number(tolerance)) && Number(tolerance) > 0
918
+ ? Number(tolerance)
919
+ : Number.EPSILON;
920
+ return Math.abs(left - right) <= tol;
921
+ }
922
+ function nearlyEqualRelative(a, b, options = {}) {
923
+ const left = Number(a);
924
+ const right = Number(b);
925
+ if (!Number.isFinite(left) || !Number.isFinite(right)) {
926
+ return left === right;
927
+ }
928
+ if (left === right)
929
+ return true;
930
+ const diff = Math.abs(left - right);
931
+ const scale = Math.max(Math.abs(left), Math.abs(right));
932
+ const configuredPrecisionQuantum = precisionToQuantum(options.precision);
933
+ const minimumTolerance = configuredPrecisionQuantum || observedQuantum(left, right);
934
+ const tolerance = Math.max(scale * ORDER_RELATIVE_TOLERANCE, minimumTolerance);
935
+ return diff <= tolerance;
936
+ }
937
+ /**
938
+ * Extract order size with fallback
939
+ * @param {Object} order - Order object
940
+ * @returns {number|null} - Size or null if not found
941
+ */
942
+ function getOrderSize(order) {
943
+ const size = toFiniteNumber(order?.size, null);
944
+ if (size !== null)
945
+ return size;
946
+ return toFiniteNumber(order?.amount);
947
+ }
948
+ /**
949
+ * Compare two orders for equality
950
+ * @param {Object} a - First order
951
+ * @param {Object} b - Second order
952
+ * @param {Object} [options={}] - Comparison options
953
+ * @param {Object} [options.precisions] - Optional precision hints {buyPrecision, sellPrecision, defaultPrecision, priceRelativeTolerance}
954
+ * @returns {boolean} - True if orders are equivalent
955
+ */
956
+ function ordersEqual(a, b, options = {}) {
957
+ if (!a || !b)
958
+ return false;
959
+ if (a === b)
960
+ return true;
961
+ const precisionHints = options.precisions || options.comparePrecisions || {};
962
+ const sizePrecision = resolveOrderSizePrecision(a.type, precisionHints);
963
+ const priceTolerance = resolvePriceTolerance(precisionHints, a, b);
964
+ return a.id === b.id &&
965
+ a.type === b.type &&
966
+ a.state === b.state &&
967
+ nearlyEqualAbsolute(a.price, b.price, priceTolerance) &&
968
+ nearlyEqualRelative(getOrderSize(a), getOrderSize(b), { precision: sizePrecision }) &&
969
+ a.orderId === b.orderId &&
970
+ a.gridIndex === b.gridIndex;
971
+ }
972
+ /**
973
+ * Build delta actions between master and working grid
974
+ * @param {Map} masterGrid - Source of truth grid
975
+ * @param {Map} workingGrid - Modified working copy
976
+ * @param {Object} [options={}] - Delta options forwarded to ordersEqual
977
+ * @returns {Array} - Array of action objects
978
+ */
979
+ function buildDelta(masterGrid, workingGrid, options = {}) {
980
+ const actions = [];
981
+ for (const [id, workingOrder] of workingGrid.entries()) {
982
+ const masterOrder = masterGrid.get(id);
983
+ if (!masterOrder) {
984
+ actions.push({
985
+ type: 'create',
986
+ id,
987
+ order: workingOrder
988
+ });
989
+ }
990
+ else if (!ordersEqual(workingOrder, masterOrder, options)) {
991
+ actions.push({
992
+ type: 'update',
993
+ id,
994
+ order: workingOrder,
995
+ prevOrder: masterOrder,
996
+ orderId: masterOrder.orderId
997
+ });
998
+ }
999
+ }
1000
+ for (const [id, masterOrder] of masterGrid.entries()) {
1001
+ if (!workingGrid.has(id)) {
1002
+ actions.push({
1003
+ type: 'cancel',
1004
+ id,
1005
+ orderId: masterOrder.orderId
1006
+ });
1007
+ }
1008
+ }
1009
+ return actions;
1010
+ }
1011
+ // ================================================================================
1012
+ // SECTION 10: STRATEGY CALCULATIONS
1013
+ // ================================================================================
1014
+ /**
1015
+ * Determine new boundary based on fills and current state.
1016
+ *
1017
+ * @param {Array} fills - Recent fill events
1018
+ * @param {number|null} currentBoundaryIdx - Current boundary index
1019
+ * @param {Array} allSlots - All grid slots sorted by price
1020
+ * @param {Object} config - Bot configuration
1021
+ * @param {number} gapSlots - Number of spread gap slots
1022
+ * @returns {number} New boundary index
1023
+ */
1024
+ function deriveTargetBoundary(fills, currentBoundaryIdx, allSlots, config, gapSlots) {
1025
+ let newBoundaryIdx = currentBoundaryIdx;
1026
+ // Initial recovery if boundary is undefined
1027
+ if (newBoundaryIdx === undefined || newBoundaryIdx === null) {
1028
+ const referencePrice = config.startPrice;
1029
+ newBoundaryIdx = calculateIdealBoundary(allSlots, referencePrice, gapSlots);
1030
+ }
1031
+ // Apply shift from fills
1032
+ for (const fill of fills) {
1033
+ const isShiftEligible = fill?.isPartial !== true ||
1034
+ fill?.isDelayedRotationTrigger === true;
1035
+ if (!isShiftEligible)
1036
+ continue;
1037
+ if (fill.type === ORDER_TYPES.SELL)
1038
+ newBoundaryIdx++;
1039
+ else if (fill.type === ORDER_TYPES.BUY)
1040
+ newBoundaryIdx--;
1041
+ }
1042
+ // Clamp boundary
1043
+ return Math.max(0, Math.min(allSlots.length - 1, newBoundaryIdx));
1044
+ }
1045
+ /**
1046
+ * Calculate side budget after BTS fee deduction.
1047
+ *
1048
+ * @param {string} side - 'buy' or 'sell'
1049
+ * @param {Object} funds - Snapshot of allocated funds
1050
+ * @param {Object} config - Bot configuration
1051
+ * @param {number} totalTarget - Total target order count (used for BTS fee calculation on both sides)
1052
+ * @returns {number} Available budget for the side
1053
+ */
1054
+ function getSideBudget(side, funds, config, totalTarget) {
1055
+ const isBuy = side === 'buy';
1056
+ const allocated = isBuy ? (funds.allocatedBuy || 0) : (funds.allocatedSell || 0);
1057
+ const btsReservationMultiplier = config?.feeParams?.BTS_RESERVATION_MULTIPLIER ?? FEE_PARAMETERS.BTS_RESERVATION_MULTIPLIER;
1058
+ const isBtsSide = (isBuy && config.assetB === 'BTS') || (!isBuy && config.assetA === 'BTS');
1059
+ if (isBtsSide && allocated > 0) {
1060
+ const btsFees = MathUtils.calculateOrderCreationFees(config.assetA, config.assetB, totalTarget, btsReservationMultiplier);
1061
+ return Math.max(0, allocated - btsFees);
1062
+ }
1063
+ // Non-BTS pair: reserve proportional share for BTS fee budget
1064
+ if (!isBtsSide && allocated > 0 && funds.btsBalance) {
1065
+ const formulaBudget = MathUtils.calculateOrderCreationFees(config.assetA, config.assetB, totalTarget, btsReservationMultiplier);
1066
+ const configMin = config.min_BTS_value;
1067
+ const effectiveMin = (configMin > 0) ? configMin : formulaBudget;
1068
+ const btsFree = funds.btsBalance.free || 0;
1069
+ const btsDeficit = Math.max(0, effectiveMin - btsFree);
1070
+ if (btsDeficit > 0) {
1071
+ const sideFree = isBuy ? (funds.chainFreeBuy || 0) : (funds.chainFreeSell || 0);
1072
+ const totalFree = (funds.chainFreeBuy || 0) + (funds.chainFreeSell || 0);
1073
+ const share = totalFree > 0 ? sideFree / totalFree : 0.5;
1074
+ return Math.max(0, Math.min(allocated, sideFree - btsDeficit * share));
1075
+ }
1076
+ }
1077
+ return allocated;
1078
+ }
1079
+ /**
1080
+ * Calculate sizes for all slots on a side using weighted distribution.
1081
+ *
1082
+ * @param {Array} slots - Array of slots for the side
1083
+ * @param {string} side - 'buy' or 'sell'
1084
+ * @param {number} budget - Total budget for the side
1085
+ * @param {number} weightDist - Weight distribution factor
1086
+ * @param {number} incrementPercent - Grid increment percentage
1087
+ * @param {Object} assets - Asset metadata for precision
1088
+ * @returns {Array} Array of calculated sizes
1089
+ */
1090
+ function calculateBudgetedSizes(slots, side, budget, weightDist, incrementPercent, assets) {
1091
+ const isBuy = side === 'buy';
1092
+ let precision;
1093
+ if (assets?.assetA && assets?.assetB) {
1094
+ try {
1095
+ const { A: precA, B: precB } = MathUtils.getPrecisionsForManager(assets);
1096
+ precision = isBuy ? precB : precA;
1097
+ }
1098
+ catch (e) {
1099
+ // Precision not available — floatToBlockchainInt will throw
1100
+ }
1101
+ }
1102
+ const incrementFactor = incrementPercent / 100;
1103
+ return MathUtils.allocateFundsByWeights(budget, slots.length, weightDist, incrementFactor, isBuy, // Reverse for BUY (Market-Close is last in array)
1104
+ 0, precision);
1105
+ }
1106
+ module.exports = {
1107
+ parseChainOrder,
1108
+ findMatchingGridOrderByOpenOrder,
1109
+ applyChainSizeToGridOrder,
1110
+ buildFillKey,
1111
+ correctOrderPriceOnChain,
1112
+ correctAllPriceMismatches,
1113
+ buildCreateOrderArgs,
1114
+ getOrderTypeFromUpdatedFlags,
1115
+ resolveConfiguredPriceBound,
1116
+ virtualizeOrder,
1117
+ convertToSpreadPlaceholder,
1118
+ filterOrdersByType,
1119
+ buildOutsideInPairGroups,
1120
+ extractBatchOperationResults,
1121
+ formatUnmatchedChainOrder,
1122
+ isOrderOnChain,
1123
+ isOrderVirtual,
1124
+ hasOnChainId,
1125
+ isOrderPlaced,
1126
+ isPhantomOrder,
1127
+ isSlotAvailable,
1128
+ isOrderHealthy,
1129
+ checkSizeThreshold,
1130
+ checkSizesBeforeMinimum,
1131
+ calculateIdealBoundary,
1132
+ calculateFundDrivenBoundary,
1133
+ assignGridRoles,
1134
+ shouldFlagOutOfSpread,
1135
+ buildIndexes,
1136
+ validateIndexes,
1137
+ ordersEqual,
1138
+ buildDelta,
1139
+ getOrderSize,
1140
+ deriveTargetBoundary,
1141
+ getSideBudget,
1142
+ calculateBudgetedSizes,
1143
+ buildCreateOpFingerprint
1144
+ };
1145
+ //# sourceMappingURL=order.js.map