@continuumdao/continuum-node-sdk 1.3.38 → 1.3.39

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 (376) hide show
  1. package/dist/agent-host-catalog.json +2 -0
  2. package/dist/core/chart/analysis/analysis-agent-view.d.ts.map +1 -1
  3. package/dist/core/chart/analysis/analysis-agent-view.js +38 -10
  4. package/dist/core/chart/analysis/analysis-agent-view.js.map +1 -1
  5. package/dist/core/chart/analysis/analysis-catalog.d.ts.map +1 -1
  6. package/dist/core/chart/analysis/analysis-catalog.js +12 -0
  7. package/dist/core/chart/analysis/analysis-catalog.js.map +1 -1
  8. package/dist/core/chart/analysis/analyze-tools.d.ts +61 -0
  9. package/dist/core/chart/analysis/analyze-tools.d.ts.map +1 -1
  10. package/dist/core/chart/analysis/analyze-tools.js +4 -0
  11. package/dist/core/chart/analysis/analyze-tools.js.map +1 -1
  12. package/dist/core/chart/analysis/bollinger-analyze-tools.d.ts +5 -0
  13. package/dist/core/chart/analysis/bollinger-analyze-tools.d.ts.map +1 -1
  14. package/dist/core/chart/analysis/bollinger-analyze-tools.js +9 -0
  15. package/dist/core/chart/analysis/bollinger-analyze-tools.js.map +1 -1
  16. package/dist/core/chart/analysis/chart-patterns-drawings-tools.d.ts +121 -0
  17. package/dist/core/chart/analysis/chart-patterns-drawings-tools.d.ts.map +1 -1
  18. package/dist/core/chart/analysis/chart-patterns-drawings-tools.js +69 -5
  19. package/dist/core/chart/analysis/chart-patterns-drawings-tools.js.map +1 -1
  20. package/dist/core/chart/analysis/chart-patterns-tools.d.ts +114 -0
  21. package/dist/core/chart/analysis/chart-patterns-tools.d.ts.map +1 -1
  22. package/dist/core/chart/analysis/chart-patterns-tools.js +10 -1
  23. package/dist/core/chart/analysis/chart-patterns-tools.js.map +1 -1
  24. package/dist/core/chart/analysis/divergence-analyze-tools.d.ts +19 -0
  25. package/dist/core/chart/analysis/divergence-analyze-tools.d.ts.map +1 -1
  26. package/dist/core/chart/analysis/divergence-analyze-tools.js +52 -19
  27. package/dist/core/chart/analysis/divergence-analyze-tools.js.map +1 -1
  28. package/dist/core/chart/analysis/divergence-drawings-tools.d.ts +2 -0
  29. package/dist/core/chart/analysis/divergence-drawings-tools.d.ts.map +1 -1
  30. package/dist/core/chart/analysis/divergence-drawings-tools.js +18 -6
  31. package/dist/core/chart/analysis/divergence-drawings-tools.js.map +1 -1
  32. package/dist/core/chart/analysis/donchian-analyze-tools.d.ts +4 -0
  33. package/dist/core/chart/analysis/donchian-analyze-tools.d.ts.map +1 -1
  34. package/dist/core/chart/analysis/donchian-analyze-tools.js +2 -0
  35. package/dist/core/chart/analysis/donchian-analyze-tools.js.map +1 -1
  36. package/dist/core/chart/analysis/elliott-wave-drawings-tools.d.ts +2 -0
  37. package/dist/core/chart/analysis/elliott-wave-drawings-tools.d.ts.map +1 -1
  38. package/dist/core/chart/analysis/elliott-wave-drawings-tools.js +12 -2
  39. package/dist/core/chart/analysis/elliott-wave-drawings-tools.js.map +1 -1
  40. package/dist/core/chart/analysis/elliott-waves-analyze-tools.d.ts +12 -0
  41. package/dist/core/chart/analysis/elliott-waves-analyze-tools.d.ts.map +1 -1
  42. package/dist/core/chart/analysis/elliott-waves-analyze-tools.js +4 -1
  43. package/dist/core/chart/analysis/elliott-waves-analyze-tools.js.map +1 -1
  44. package/dist/core/chart/analysis/ichimoku-analyze-tools.d.ts +4 -0
  45. package/dist/core/chart/analysis/ichimoku-analyze-tools.d.ts.map +1 -1
  46. package/dist/core/chart/analysis/ichimoku-analyze-tools.js +2 -0
  47. package/dist/core/chart/analysis/ichimoku-analyze-tools.js.map +1 -1
  48. package/dist/core/chart/analysis/key-fib-drawings-tools.d.ts +18 -0
  49. package/dist/core/chart/analysis/key-fib-drawings-tools.d.ts.map +1 -1
  50. package/dist/core/chart/analysis/key-fib-drawings-tools.js +42 -3
  51. package/dist/core/chart/analysis/key-fib-drawings-tools.js.map +1 -1
  52. package/dist/core/chart/analysis/key-level-drawings-shared.d.ts +5 -0
  53. package/dist/core/chart/analysis/key-level-drawings-shared.d.ts.map +1 -1
  54. package/dist/core/chart/analysis/key-level-drawings-shared.js +9 -1
  55. package/dist/core/chart/analysis/key-level-drawings-shared.js.map +1 -1
  56. package/dist/core/chart/analysis/key-level-drawings-tools.d.ts +23 -0
  57. package/dist/core/chart/analysis/key-level-drawings-tools.d.ts.map +1 -1
  58. package/dist/core/chart/analysis/key-level-drawings-tools.js +53 -6
  59. package/dist/core/chart/analysis/key-level-drawings-tools.js.map +1 -1
  60. package/dist/core/chart/analysis/liquidity-depth-analyze-tools.d.ts +124 -0
  61. package/dist/core/chart/analysis/liquidity-depth-analyze-tools.d.ts.map +1 -0
  62. package/dist/core/chart/analysis/liquidity-depth-analyze-tools.js +185 -0
  63. package/dist/core/chart/analysis/liquidity-depth-analyze-tools.js.map +1 -0
  64. package/dist/core/chart/analysis/liquidity-depth-drawings-tools.d.ts +1447 -0
  65. package/dist/core/chart/analysis/liquidity-depth-drawings-tools.d.ts.map +1 -0
  66. package/dist/core/chart/analysis/liquidity-depth-drawings-tools.js +161 -0
  67. package/dist/core/chart/analysis/liquidity-depth-drawings-tools.js.map +1 -0
  68. package/dist/core/chart/analysis/moving-averages-analyze-tools.d.ts +4 -0
  69. package/dist/core/chart/analysis/moving-averages-analyze-tools.d.ts.map +1 -1
  70. package/dist/core/chart/analysis/moving-averages-analyze-tools.js +3 -0
  71. package/dist/core/chart/analysis/moving-averages-analyze-tools.js.map +1 -1
  72. package/dist/core/chart/analysis/supertrend-analyze-tools.d.ts +4 -0
  73. package/dist/core/chart/analysis/supertrend-analyze-tools.d.ts.map +1 -1
  74. package/dist/core/chart/analysis/supertrend-analyze-tools.js +2 -0
  75. package/dist/core/chart/analysis/supertrend-analyze-tools.js.map +1 -1
  76. package/dist/core/chart/analysis/trade-setups/bollinger-trade-setup.d.ts +8 -1
  77. package/dist/core/chart/analysis/trade-setups/bollinger-trade-setup.d.ts.map +1 -1
  78. package/dist/core/chart/analysis/trade-setups/bollinger-trade-setup.js +13 -2
  79. package/dist/core/chart/analysis/trade-setups/bollinger-trade-setup.js.map +1 -1
  80. package/dist/core/chart/analysis/trade-setups/build-trade.d.ts +3 -4
  81. package/dist/core/chart/analysis/trade-setups/build-trade.d.ts.map +1 -1
  82. package/dist/core/chart/analysis/trade-setups/build-trade.js +32 -71
  83. package/dist/core/chart/analysis/trade-setups/build-trade.js.map +1 -1
  84. package/dist/core/chart/analysis/trade-setups/chart-data-purpose.d.ts.map +1 -1
  85. package/dist/core/chart/analysis/trade-setups/chart-data-purpose.js +18 -1
  86. package/dist/core/chart/analysis/trade-setups/chart-data-purpose.js.map +1 -1
  87. package/dist/core/chart/analysis/trade-setups/chart-pattern-trade-setup.d.ts +9 -0
  88. package/dist/core/chart/analysis/trade-setups/chart-pattern-trade-setup.d.ts.map +1 -1
  89. package/dist/core/chart/analysis/trade-setups/chart-pattern-trade-setup.js +71 -9
  90. package/dist/core/chart/analysis/trade-setups/chart-pattern-trade-setup.js.map +1 -1
  91. package/dist/core/chart/analysis/trade-setups/divergence-trade-setup.d.ts +6 -0
  92. package/dist/core/chart/analysis/trade-setups/divergence-trade-setup.d.ts.map +1 -1
  93. package/dist/core/chart/analysis/trade-setups/divergence-trade-setup.js +16 -6
  94. package/dist/core/chart/analysis/trade-setups/divergence-trade-setup.js.map +1 -1
  95. package/dist/core/chart/analysis/trade-setups/donchian-trade-setup.d.ts +5 -1
  96. package/dist/core/chart/analysis/trade-setups/donchian-trade-setup.d.ts.map +1 -1
  97. package/dist/core/chart/analysis/trade-setups/donchian-trade-setup.js +20 -3
  98. package/dist/core/chart/analysis/trade-setups/donchian-trade-setup.js.map +1 -1
  99. package/dist/core/chart/analysis/trade-setups/elliott-waves-trade-setup.d.ts +5 -1
  100. package/dist/core/chart/analysis/trade-setups/elliott-waves-trade-setup.d.ts.map +1 -1
  101. package/dist/core/chart/analysis/trade-setups/elliott-waves-trade-setup.js +9 -1
  102. package/dist/core/chart/analysis/trade-setups/elliott-waves-trade-setup.js.map +1 -1
  103. package/dist/core/chart/analysis/trade-setups/ichimoku-trade-setup.d.ts +6 -1
  104. package/dist/core/chart/analysis/trade-setups/ichimoku-trade-setup.d.ts.map +1 -1
  105. package/dist/core/chart/analysis/trade-setups/ichimoku-trade-setup.js +12 -1
  106. package/dist/core/chart/analysis/trade-setups/ichimoku-trade-setup.js.map +1 -1
  107. package/dist/core/chart/analysis/trade-setups/index.d.ts +4 -0
  108. package/dist/core/chart/analysis/trade-setups/index.d.ts.map +1 -1
  109. package/dist/core/chart/analysis/trade-setups/index.js +4 -0
  110. package/dist/core/chart/analysis/trade-setups/index.js.map +1 -1
  111. package/dist/core/chart/analysis/trade-setups/key-level-fib-retrace-trade-setup.d.ts +2 -0
  112. package/dist/core/chart/analysis/trade-setups/key-level-fib-retrace-trade-setup.d.ts.map +1 -1
  113. package/dist/core/chart/analysis/trade-setups/key-level-fib-retrace-trade-setup.js +3 -3
  114. package/dist/core/chart/analysis/trade-setups/key-level-fib-retrace-trade-setup.js.map +1 -1
  115. package/dist/core/chart/analysis/trade-setups/key-levels-trade-setup.d.ts +2 -0
  116. package/dist/core/chart/analysis/trade-setups/key-levels-trade-setup.d.ts.map +1 -1
  117. package/dist/core/chart/analysis/trade-setups/key-levels-trade-setup.js +3 -3
  118. package/dist/core/chart/analysis/trade-setups/key-levels-trade-setup.js.map +1 -1
  119. package/dist/core/chart/analysis/trade-setups/moving-averages-trade-setup.d.ts +3 -0
  120. package/dist/core/chart/analysis/trade-setups/moving-averages-trade-setup.d.ts.map +1 -1
  121. package/dist/core/chart/analysis/trade-setups/moving-averages-trade-setup.js +10 -4
  122. package/dist/core/chart/analysis/trade-setups/moving-averages-trade-setup.js.map +1 -1
  123. package/dist/core/chart/analysis/trade-setups/pattern-limit-entry.d.ts.map +1 -1
  124. package/dist/core/chart/analysis/trade-setups/pattern-limit-entry.js +8 -4
  125. package/dist/core/chart/analysis/trade-setups/pattern-limit-entry.js.map +1 -1
  126. package/dist/core/chart/analysis/trade-setups/shared.d.ts +12 -0
  127. package/dist/core/chart/analysis/trade-setups/shared.d.ts.map +1 -1
  128. package/dist/core/chart/analysis/trade-setups/shared.js +29 -0
  129. package/dist/core/chart/analysis/trade-setups/shared.js.map +1 -1
  130. package/dist/core/chart/analysis/trade-setups/supertrend-trade-setup.d.ts +6 -1
  131. package/dist/core/chart/analysis/trade-setups/supertrend-trade-setup.d.ts.map +1 -1
  132. package/dist/core/chart/analysis/trade-setups/supertrend-trade-setup.js +12 -1
  133. package/dist/core/chart/analysis/trade-setups/supertrend-trade-setup.js.map +1 -1
  134. package/dist/core/chart/analysis/trade-setups/trade-desk-defaults.d.ts +18 -1
  135. package/dist/core/chart/analysis/trade-setups/trade-desk-defaults.d.ts.map +1 -1
  136. package/dist/core/chart/analysis/trade-setups/trade-desk-defaults.js +28 -2
  137. package/dist/core/chart/analysis/trade-setups/trade-desk-defaults.js.map +1 -1
  138. package/dist/core/chart/analysis/trade-setups/trade-desk-universal-input.d.ts +12 -0
  139. package/dist/core/chart/analysis/trade-setups/trade-desk-universal-input.d.ts.map +1 -1
  140. package/dist/core/chart/analysis/trade-setups/trade-desk-universal-input.js +12 -0
  141. package/dist/core/chart/analysis/trade-setups/trade-desk-universal-input.js.map +1 -1
  142. package/dist/core/chart/analysis/trade-setups/trade-idea-list.d.ts +17 -0
  143. package/dist/core/chart/analysis/trade-setups/trade-idea-list.d.ts.map +1 -1
  144. package/dist/core/chart/analysis/trade-setups/trade-idea-list.js +133 -0
  145. package/dist/core/chart/analysis/trade-setups/trade-idea-list.js.map +1 -1
  146. package/dist/core/chart/analysis/trade-setups/trade-idea.d.ts +7 -0
  147. package/dist/core/chart/analysis/trade-setups/trade-idea.d.ts.map +1 -1
  148. package/dist/core/chart/analysis/trade-setups/trade-idea.js +127 -10
  149. package/dist/core/chart/analysis/trade-setups/trade-idea.js.map +1 -1
  150. package/dist/core/chart/analysis/trade-setups/trade-position-overlay.d.ts +37 -0
  151. package/dist/core/chart/analysis/trade-setups/trade-position-overlay.d.ts.map +1 -0
  152. package/dist/core/chart/analysis/trade-setups/trade-position-overlay.js +113 -0
  153. package/dist/core/chart/analysis/trade-setups/trade-position-overlay.js.map +1 -0
  154. package/dist/core/chart/analysis/trade-setups/trade-price-offsets.d.ts +42 -0
  155. package/dist/core/chart/analysis/trade-setups/trade-price-offsets.d.ts.map +1 -0
  156. package/dist/core/chart/analysis/trade-setups/trade-price-offsets.js +116 -0
  157. package/dist/core/chart/analysis/trade-setups/trade-price-offsets.js.map +1 -0
  158. package/dist/core/chart/analysis/trade-setups/trade-ratio.d.ts +54 -0
  159. package/dist/core/chart/analysis/trade-setups/trade-ratio.d.ts.map +1 -0
  160. package/dist/core/chart/analysis/trade-setups/trade-ratio.js +126 -0
  161. package/dist/core/chart/analysis/trade-setups/trade-ratio.js.map +1 -0
  162. package/dist/core/chart/analysis/trade-setups/trend-structure-trade-setup.d.ts +45 -0
  163. package/dist/core/chart/analysis/trade-setups/trend-structure-trade-setup.d.ts.map +1 -1
  164. package/dist/core/chart/analysis/trade-setups/trend-structure-trade-setup.js +121 -12
  165. package/dist/core/chart/analysis/trade-setups/trend-structure-trade-setup.js.map +1 -1
  166. package/dist/core/chart/analysis/trade-setups/z-score-trade-setup.d.ts +4 -1
  167. package/dist/core/chart/analysis/trade-setups/z-score-trade-setup.d.ts.map +1 -1
  168. package/dist/core/chart/analysis/trade-setups/z-score-trade-setup.js +7 -1
  169. package/dist/core/chart/analysis/trade-setups/z-score-trade-setup.js.map +1 -1
  170. package/dist/core/chart/analysis/trend-line-drawings-tools.d.ts +14 -0
  171. package/dist/core/chart/analysis/trend-line-drawings-tools.d.ts.map +1 -1
  172. package/dist/core/chart/analysis/trend-line-drawings-tools.js +87 -16
  173. package/dist/core/chart/analysis/trend-line-drawings-tools.js.map +1 -1
  174. package/dist/core/chart/analysis/trend-line-menu-summary.d.ts +5 -0
  175. package/dist/core/chart/analysis/trend-line-menu-summary.d.ts.map +1 -1
  176. package/dist/core/chart/analysis/trend-line-menu-summary.js +8 -0
  177. package/dist/core/chart/analysis/trend-line-menu-summary.js.map +1 -1
  178. package/dist/core/chart/analysis/z-score-analyze-tools.d.ts +4 -0
  179. package/dist/core/chart/analysis/z-score-analyze-tools.d.ts.map +1 -1
  180. package/dist/core/chart/analysis/z-score-analyze-tools.js +2 -0
  181. package/dist/core/chart/analysis/z-score-analyze-tools.js.map +1 -1
  182. package/dist/core/chart/apply-chart-drawings.d.ts +4 -0
  183. package/dist/core/chart/apply-chart-drawings.d.ts.map +1 -1
  184. package/dist/core/chart/apply-chart-drawings.js +10 -2
  185. package/dist/core/chart/apply-chart-drawings.js.map +1 -1
  186. package/dist/core/chart/chart-pattern-session-store.d.ts.map +1 -1
  187. package/dist/core/chart/chart-pattern-session-store.js +1 -0
  188. package/dist/core/chart/chart-pattern-session-store.js.map +1 -1
  189. package/dist/core/chart/customization-catalog.d.ts +1 -0
  190. package/dist/core/chart/customization-catalog.d.ts.map +1 -1
  191. package/dist/core/chart/customization-catalog.js +71 -6
  192. package/dist/core/chart/customization-catalog.js.map +1 -1
  193. package/dist/core/chart/depth/average.d.ts +24 -0
  194. package/dist/core/chart/depth/average.d.ts.map +1 -0
  195. package/dist/core/chart/depth/average.js +104 -0
  196. package/dist/core/chart/depth/average.js.map +1 -0
  197. package/dist/core/chart/depth/binance-fetch.d.ts +7 -0
  198. package/dist/core/chart/depth/binance-fetch.d.ts.map +1 -0
  199. package/dist/core/chart/depth/binance-fetch.js +35 -0
  200. package/dist/core/chart/depth/binance-fetch.js.map +1 -0
  201. package/dist/core/chart/depth/coinbase-fetch.d.ts +7 -0
  202. package/dist/core/chart/depth/coinbase-fetch.d.ts.map +1 -0
  203. package/dist/core/chart/depth/coinbase-fetch.js +39 -0
  204. package/dist/core/chart/depth/coinbase-fetch.js.map +1 -0
  205. package/dist/core/chart/depth/index.d.ts +9 -0
  206. package/dist/core/chart/depth/index.d.ts.map +1 -0
  207. package/dist/core/chart/depth/index.js +9 -0
  208. package/dist/core/chart/depth/index.js.map +1 -0
  209. package/dist/core/chart/depth/levels.d.ts +23 -0
  210. package/dist/core/chart/depth/levels.d.ts.map +1 -0
  211. package/dist/core/chart/depth/levels.js +68 -0
  212. package/dist/core/chart/depth/levels.js.map +1 -0
  213. package/dist/core/chart/depth/normalize.d.ts +22 -0
  214. package/dist/core/chart/depth/normalize.d.ts.map +1 -0
  215. package/dist/core/chart/depth/normalize.js +130 -0
  216. package/dist/core/chart/depth/normalize.js.map +1 -0
  217. package/dist/core/chart/depth/sampler.d.ts +19 -0
  218. package/dist/core/chart/depth/sampler.d.ts.map +1 -0
  219. package/dist/core/chart/depth/sampler.js +146 -0
  220. package/dist/core/chart/depth/sampler.js.map +1 -0
  221. package/dist/core/chart/depth/schemas.d.ts +71 -0
  222. package/dist/core/chart/depth/schemas.d.ts.map +1 -0
  223. package/dist/core/chart/depth/schemas.js +52 -0
  224. package/dist/core/chart/depth/schemas.js.map +1 -0
  225. package/dist/core/chart/depth/symbol-from-fetch.d.ts +12 -0
  226. package/dist/core/chart/depth/symbol-from-fetch.d.ts.map +1 -0
  227. package/dist/core/chart/depth/symbol-from-fetch.js +125 -0
  228. package/dist/core/chart/depth/symbol-from-fetch.js.map +1 -0
  229. package/dist/core/chart/fetch-agent-view.d.ts.map +1 -1
  230. package/dist/core/chart/fetch-agent-view.js +6 -1
  231. package/dist/core/chart/fetch-agent-view.js.map +1 -1
  232. package/dist/core/chart/fetch-metadata.d.ts +2 -1
  233. package/dist/core/chart/fetch-metadata.d.ts.map +1 -1
  234. package/dist/core/chart/fetch-metadata.js +29 -3
  235. package/dist/core/chart/fetch-metadata.js.map +1 -1
  236. package/dist/core/chart/index.d.ts +1 -1
  237. package/dist/core/chart/index.d.ts.map +1 -1
  238. package/dist/core/chart/index.js +1 -1
  239. package/dist/core/chart/index.js.map +1 -1
  240. package/dist/core/chart/liquidity-depth-profile-replay.d.ts +7 -0
  241. package/dist/core/chart/liquidity-depth-profile-replay.d.ts.map +1 -0
  242. package/dist/core/chart/liquidity-depth-profile-replay.js +28 -0
  243. package/dist/core/chart/liquidity-depth-profile-replay.js.map +1 -0
  244. package/dist/core/chart/live/binding-extract.d.ts.map +1 -1
  245. package/dist/core/chart/live/binding-extract.js +66 -1
  246. package/dist/core/chart/live/binding-extract.js.map +1 -1
  247. package/dist/core/chart/live/fetch-tick.d.ts.map +1 -1
  248. package/dist/core/chart/live/fetch-tick.js +45 -1
  249. package/dist/core/chart/live/fetch-tick.js.map +1 -1
  250. package/dist/core/chart/live/index.d.ts +1 -1
  251. package/dist/core/chart/live/index.d.ts.map +1 -1
  252. package/dist/core/chart/live/index.js +1 -1
  253. package/dist/core/chart/live/index.js.map +1 -1
  254. package/dist/core/chart/live/schemas.d.ts +2 -0
  255. package/dist/core/chart/live/schemas.d.ts.map +1 -1
  256. package/dist/core/chart/live/schemas.js +2 -0
  257. package/dist/core/chart/live/schemas.js.map +1 -1
  258. package/dist/core/chart/overlay-schemas.d.ts +264 -0
  259. package/dist/core/chart/overlay-schemas.d.ts.map +1 -1
  260. package/dist/core/chart/overlay-schemas.js +74 -0
  261. package/dist/core/chart/overlay-schemas.js.map +1 -1
  262. package/dist/core/chart/overlays.d.ts +3 -2
  263. package/dist/core/chart/overlays.d.ts.map +1 -1
  264. package/dist/core/chart/overlays.js +168 -25
  265. package/dist/core/chart/overlays.js.map +1 -1
  266. package/dist/core/chart/point-normalize.d.ts.map +1 -1
  267. package/dist/core/chart/point-normalize.js +1 -0
  268. package/dist/core/chart/point-normalize.js.map +1 -1
  269. package/dist/core/chart/prepare-from-rows.d.ts +1370 -0
  270. package/dist/core/chart/prepare-from-rows.d.ts.map +1 -1
  271. package/dist/core/chart/prepare-from-rows.js +17 -2
  272. package/dist/core/chart/prepare-from-rows.js.map +1 -1
  273. package/dist/core/chart/prepare.d.ts.map +1 -1
  274. package/dist/core/chart/prepare.js +10 -2
  275. package/dist/core/chart/prepare.js.map +1 -1
  276. package/dist/core/chart/schemas.d.ts +324 -2
  277. package/dist/core/chart/schemas.d.ts.map +1 -1
  278. package/dist/core/chart/schemas.js +6 -2
  279. package/dist/core/chart/schemas.js.map +1 -1
  280. package/dist/core/chart/trade-position-replay.d.ts +19 -0
  281. package/dist/core/chart/trade-position-replay.d.ts.map +1 -0
  282. package/dist/core/chart/trade-position-replay.js +48 -0
  283. package/dist/core/chart/trade-position-replay.js.map +1 -0
  284. package/dist/core/chart-patterns/drawing-spec.d.ts.map +1 -1
  285. package/dist/core/chart-patterns/drawing-spec.js +7 -0
  286. package/dist/core/chart-patterns/drawing-spec.js.map +1 -1
  287. package/dist/core/chart-patterns/measured-move.d.ts.map +1 -1
  288. package/dist/core/chart-patterns/measured-move.js +35 -3
  289. package/dist/core/chart-patterns/measured-move.js.map +1 -1
  290. package/dist/core/chart-patterns/patterns/flag-pennant-shared.d.ts +62 -0
  291. package/dist/core/chart-patterns/patterns/flag-pennant-shared.d.ts.map +1 -0
  292. package/dist/core/chart-patterns/patterns/flag-pennant-shared.js +141 -0
  293. package/dist/core/chart-patterns/patterns/flag-pennant-shared.js.map +1 -0
  294. package/dist/core/chart-patterns/patterns/flag.d.ts.map +1 -1
  295. package/dist/core/chart-patterns/patterns/flag.js +77 -51
  296. package/dist/core/chart-patterns/patterns/flag.js.map +1 -1
  297. package/dist/core/chart-patterns/patterns/pennant.d.ts.map +1 -1
  298. package/dist/core/chart-patterns/patterns/pennant.js +74 -53
  299. package/dist/core/chart-patterns/patterns/pennant.js.map +1 -1
  300. package/dist/core/chart-patterns/recommendation.d.ts +7 -0
  301. package/dist/core/chart-patterns/recommendation.d.ts.map +1 -1
  302. package/dist/core/chart-patterns/recommendation.js +17 -0
  303. package/dist/core/chart-patterns/recommendation.js.map +1 -1
  304. package/dist/core/chart-patterns/scan.d.ts.map +1 -1
  305. package/dist/core/chart-patterns/scan.js +8 -3
  306. package/dist/core/chart-patterns/scan.js.map +1 -1
  307. package/dist/core/chart-patterns/types.d.ts +13 -0
  308. package/dist/core/chart-patterns/types.d.ts.map +1 -1
  309. package/dist/core/coinbase/candles.d.ts +7 -0
  310. package/dist/core/coinbase/candles.d.ts.map +1 -0
  311. package/dist/core/coinbase/candles.js +52 -0
  312. package/dist/core/coinbase/candles.js.map +1 -0
  313. package/dist/core/coinbase/client.d.ts +24 -0
  314. package/dist/core/coinbase/client.d.ts.map +1 -0
  315. package/dist/core/coinbase/client.js +86 -0
  316. package/dist/core/coinbase/client.js.map +1 -0
  317. package/dist/core/coinbase/credentials.d.ts +11 -0
  318. package/dist/core/coinbase/credentials.d.ts.map +1 -0
  319. package/dist/core/coinbase/credentials.js +47 -0
  320. package/dist/core/coinbase/credentials.js.map +1 -0
  321. package/dist/core/coinbase/granularity.d.ts +20 -0
  322. package/dist/core/coinbase/granularity.d.ts.map +1 -0
  323. package/dist/core/coinbase/granularity.js +69 -0
  324. package/dist/core/coinbase/granularity.js.map +1 -0
  325. package/dist/core/coinbase/index.d.ts +8 -0
  326. package/dist/core/coinbase/index.d.ts.map +1 -0
  327. package/dist/core/coinbase/index.js +8 -0
  328. package/dist/core/coinbase/index.js.map +1 -0
  329. package/dist/core/coinbase/jwt.d.ts +13 -0
  330. package/dist/core/coinbase/jwt.d.ts.map +1 -0
  331. package/dist/core/coinbase/jwt.js +41 -0
  332. package/dist/core/coinbase/jwt.js.map +1 -0
  333. package/dist/core/coinbase/public-api.d.ts +38 -0
  334. package/dist/core/coinbase/public-api.d.ts.map +1 -0
  335. package/dist/core/coinbase/public-api.js +203 -0
  336. package/dist/core/coinbase/public-api.js.map +1 -0
  337. package/dist/core/coinbase/schemas.d.ts +133 -0
  338. package/dist/core/coinbase/schemas.d.ts.map +1 -0
  339. package/dist/core/coinbase/schemas.js +105 -0
  340. package/dist/core/coinbase/schemas.js.map +1 -0
  341. package/dist/core/coinmarketcap/schemas.d.ts +3 -3
  342. package/dist/core/ta/calculate.d.ts.map +1 -1
  343. package/dist/core/ta/calculate.js +39 -0
  344. package/dist/core/ta/calculate.js.map +1 -1
  345. package/dist/core/ta/catalog.d.ts.map +1 -1
  346. package/dist/core/ta/catalog.js +2 -1
  347. package/dist/core/ta/catalog.js.map +1 -1
  348. package/dist/mcp/chart.d.ts.map +1 -1
  349. package/dist/mcp/chart.js +36 -7
  350. package/dist/mcp/chart.js.map +1 -1
  351. package/dist/mcp/coinbase-public/register.d.ts +6 -0
  352. package/dist/mcp/coinbase-public/register.d.ts.map +1 -0
  353. package/dist/mcp/coinbase-public/register.js +57 -0
  354. package/dist/mcp/coinbase-public/register.js.map +1 -0
  355. package/dist/mcp/coinmarketcap-public/register.d.ts.map +1 -1
  356. package/dist/mcp/coinmarketcap-public/register.js +8 -3
  357. package/dist/mcp/coinmarketcap-public/register.js.map +1 -1
  358. package/dist/mcp/deferred/optional-endpoint-groups.d.ts +1 -1
  359. package/dist/mcp/deferred/optional-endpoint-groups.d.ts.map +1 -1
  360. package/dist/mcp/deferred/optional-endpoint-groups.js +8 -0
  361. package/dist/mcp/deferred/optional-endpoint-groups.js.map +1 -1
  362. package/dist/mcp/deferred/tool-group-map.d.ts.map +1 -1
  363. package/dist/mcp/deferred/tool-group-map.js +2 -0
  364. package/dist/mcp/deferred/tool-group-map.js.map +1 -1
  365. package/dist/mcp/ohlcv-session-wrapper.d.ts.map +1 -1
  366. package/dist/mcp/ohlcv-session-wrapper.js +14 -1
  367. package/dist/mcp/ohlcv-session-wrapper.js.map +1 -1
  368. package/dist/mcp/resources/chart-analysis.md +2 -0
  369. package/dist/mcp/resources/chart.md +16 -9
  370. package/dist/mcp/resources/coinbase-public.md +31 -0
  371. package/dist/mcp/server/index.js +3 -0
  372. package/dist/mcp/server/index.js.map +1 -1
  373. package/dist/mcp/trade-tools.d.ts.map +1 -1
  374. package/dist/mcp/trade-tools.js +4 -1
  375. package/dist/mcp/trade-tools.js.map +1 -1
  376. package/package.json +2 -2
@@ -0,0 +1,7 @@
1
+ import type { NormalizedDepthSnapshot } from './schemas.js';
2
+ export declare function resolveCoinbaseDepthLimit(limit: number | undefined): number;
3
+ export declare function fetchCoinbaseDepthSnapshot(options: {
4
+ productId: string;
5
+ limit?: number;
6
+ }): Promise<NormalizedDepthSnapshot | null>;
7
+ //# sourceMappingURL=coinbase-fetch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coinbase-fetch.d.ts","sourceRoot":"","sources":["../../../../src/core/chart/depth/coinbase-fetch.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,uBAAuB,EAAC,MAAM,cAAc,CAAC;AAO1D,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAK3E;AAED,wBAAsB,0BAA0B,CAAC,OAAO,EAAE;IACzD,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CACf,GAAG,OAAO,CAAC,uBAAuB,GAAG,IAAI,CAAC,CA0B1C"}
@@ -0,0 +1,39 @@
1
+ import { normalizeCoinbaseProductBook } from './normalize.js';
2
+ const COINBASE_PRODUCT_BOOK_URL = 'https://api.coinbase.com/api/v3/brokerage/market/product_book';
3
+ const FETCH_TIMEOUT_MS = 10_000;
4
+ const DEFAULT_COINBASE_DEPTH_LIMIT = 500;
5
+ export function resolveCoinbaseDepthLimit(limit) {
6
+ if (limit == null || !Number.isFinite(limit)) {
7
+ return DEFAULT_COINBASE_DEPTH_LIMIT;
8
+ }
9
+ return Math.min(Math.max(1, Math.floor(limit)), 5000);
10
+ }
11
+ export async function fetchCoinbaseDepthSnapshot(options) {
12
+ const productId = options.productId.trim().toUpperCase();
13
+ if (!productId) {
14
+ return null;
15
+ }
16
+ const limit = resolveCoinbaseDepthLimit(options.limit);
17
+ const url = `${COINBASE_PRODUCT_BOOK_URL}?product_id=${encodeURIComponent(productId)}` +
18
+ `&limit=${limit}`;
19
+ const controller = new AbortController();
20
+ const timer = setTimeout(() => controller.abort(), FETCH_TIMEOUT_MS);
21
+ try {
22
+ const resp = await fetch(url, {
23
+ signal: controller.signal,
24
+ headers: { Accept: 'application/json', 'Cache-Control': 'no-cache' },
25
+ });
26
+ if (!resp.ok) {
27
+ return null;
28
+ }
29
+ const raw = (await resp.json());
30
+ return normalizeCoinbaseProductBook(raw, { symbol: productId, asOfMs: Date.now() });
31
+ }
32
+ catch {
33
+ return null;
34
+ }
35
+ finally {
36
+ clearTimeout(timer);
37
+ }
38
+ }
39
+ //# sourceMappingURL=coinbase-fetch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coinbase-fetch.js","sourceRoot":"","sources":["../../../../src/core/chart/depth/coinbase-fetch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,4BAA4B,EAAC,MAAM,gBAAgB,CAAC;AAG5D,MAAM,yBAAyB,GAC9B,+DAA+D,CAAC;AACjE,MAAM,gBAAgB,GAAG,MAAM,CAAC;AAChC,MAAM,4BAA4B,GAAG,GAAG,CAAC;AAEzC,MAAM,UAAU,yBAAyB,CAAC,KAAyB;IAClE,IAAI,KAAK,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAC9C,OAAO,4BAA4B,CAAC;IACrC,CAAC;IACD,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;AACvD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAAC,OAGhD;IACA,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACzD,IAAI,CAAC,SAAS,EAAE,CAAC;QAChB,OAAO,IAAI,CAAC;IACb,CAAC;IACD,MAAM,KAAK,GAAG,yBAAyB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACvD,MAAM,GAAG,GACR,GAAG,yBAAyB,eAAe,kBAAkB,CAAC,SAAS,CAAC,EAAE;QAC1E,UAAU,KAAK,EAAE,CAAC;IACnB,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IACzC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,gBAAgB,CAAC,CAAC;IACrE,IAAI,CAAC;QACJ,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;YAC7B,MAAM,EAAE,UAAU,CAAC,MAAM;YACzB,OAAO,EAAE,EAAC,MAAM,EAAE,kBAAkB,EAAE,eAAe,EAAE,UAAU,EAAC;SAClE,CAAC,CAAC;QACH,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;YACd,OAAO,IAAI,CAAC;QACb,CAAC;QACD,MAAM,GAAG,GAAG,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,CAAY,CAAC;QAC3C,OAAO,4BAA4B,CAAC,GAAG,EAAE,EAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,GAAG,EAAE,EAAC,CAAC,CAAC;IACnF,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,IAAI,CAAC;IACb,CAAC;YAAS,CAAC;QACV,YAAY,CAAC,KAAK,CAAC,CAAC;IACrB,CAAC;AACF,CAAC"}
@@ -0,0 +1,9 @@
1
+ export { BINANCE_DEPTH_LIMITS, DEFAULT_DEPTH_AVERAGE_WINDOW_SEC, DEFAULT_DEPTH_EXCHANGE_ID, DEFAULT_DEPTH_LEVEL_COUNT, DEFAULT_DEPTH_LIMIT, DEFAULT_DEPTH_MIN_SAMPLES, DEFAULT_DEPTH_SAMPLE_INTERVAL_SEC, AveragedDepthProfileSchema, DepthExchangeIdSchema, DepthProfileBinSchema, NormalizedDepthLevelSchema, NormalizedDepthSnapshotSchema, type AveragedDepthProfile, type BinanceDepthLimit, type DepthExchangeId, type DepthProfileBin, type NormalizedDepthLevel, type NormalizedDepthSnapshot, } from './schemas.js';
2
+ export { normalizeBinanceDepth, normalizeCoinbaseProductBook, normalizeDepthSnapshot, } from './normalize.js';
3
+ export { fetchBinanceDepthSnapshot, resolveBinanceDepthLimit } from './binance-fetch.js';
4
+ export { fetchCoinbaseDepthSnapshot, resolveCoinbaseDepthLimit } from './coinbase-fetch.js';
5
+ export { inferDepthExchangeId, resolveDepthSymbol } from './symbol-from-fetch.js';
6
+ export { averageDepthSamples, snapshotToBins, type DepthSampleRecord } from './average.js';
7
+ export { depthSamplerKeyString, ensureDepthSampler, getAveragedDepthProfile, getDepthSamplerSampleCount, ingestDepthSnapshot, resetDepthSamplersForTests, type DepthSamplerKey, type DepthSamplerOptions, } from './sampler.js';
8
+ export { buildLiquidityDepthLevelMenu, summarizeLiquidityDepthLevels, type LiquidityDepthLevelMenuEntry, } from './levels.js';
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/core/chart/depth/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,oBAAoB,EACpB,gCAAgC,EAChC,yBAAyB,EACzB,yBAAyB,EACzB,mBAAmB,EACnB,yBAAyB,EACzB,iCAAiC,EACjC,0BAA0B,EAC1B,qBAAqB,EACrB,qBAAqB,EACrB,0BAA0B,EAC1B,6BAA6B,EAC7B,KAAK,oBAAoB,EACzB,KAAK,iBAAiB,EACtB,KAAK,eAAe,EACpB,KAAK,eAAe,EACpB,KAAK,oBAAoB,EACzB,KAAK,uBAAuB,GAC5B,MAAM,cAAc,CAAC;AACtB,OAAO,EACN,qBAAqB,EACrB,4BAA4B,EAC5B,sBAAsB,GACtB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAC,yBAAyB,EAAE,wBAAwB,EAAC,MAAM,oBAAoB,CAAC;AACvF,OAAO,EAAC,0BAA0B,EAAE,yBAAyB,EAAC,MAAM,qBAAqB,CAAC;AAC1F,OAAO,EAAC,oBAAoB,EAAE,kBAAkB,EAAC,MAAM,wBAAwB,CAAC;AAChF,OAAO,EAAC,mBAAmB,EAAE,cAAc,EAAE,KAAK,iBAAiB,EAAC,MAAM,cAAc,CAAC;AACzF,OAAO,EACN,qBAAqB,EACrB,kBAAkB,EAClB,uBAAuB,EACvB,0BAA0B,EAC1B,mBAAmB,EACnB,0BAA0B,EAC1B,KAAK,eAAe,EACpB,KAAK,mBAAmB,GACxB,MAAM,cAAc,CAAC;AACtB,OAAO,EACN,4BAA4B,EAC5B,6BAA6B,EAC7B,KAAK,4BAA4B,GACjC,MAAM,aAAa,CAAC"}
@@ -0,0 +1,9 @@
1
+ export { BINANCE_DEPTH_LIMITS, DEFAULT_DEPTH_AVERAGE_WINDOW_SEC, DEFAULT_DEPTH_EXCHANGE_ID, DEFAULT_DEPTH_LEVEL_COUNT, DEFAULT_DEPTH_LIMIT, DEFAULT_DEPTH_MIN_SAMPLES, DEFAULT_DEPTH_SAMPLE_INTERVAL_SEC, AveragedDepthProfileSchema, DepthExchangeIdSchema, DepthProfileBinSchema, NormalizedDepthLevelSchema, NormalizedDepthSnapshotSchema, } from './schemas.js';
2
+ export { normalizeBinanceDepth, normalizeCoinbaseProductBook, normalizeDepthSnapshot, } from './normalize.js';
3
+ export { fetchBinanceDepthSnapshot, resolveBinanceDepthLimit } from './binance-fetch.js';
4
+ export { fetchCoinbaseDepthSnapshot, resolveCoinbaseDepthLimit } from './coinbase-fetch.js';
5
+ export { inferDepthExchangeId, resolveDepthSymbol } from './symbol-from-fetch.js';
6
+ export { averageDepthSamples, snapshotToBins } from './average.js';
7
+ export { depthSamplerKeyString, ensureDepthSampler, getAveragedDepthProfile, getDepthSamplerSampleCount, ingestDepthSnapshot, resetDepthSamplersForTests, } from './sampler.js';
8
+ export { buildLiquidityDepthLevelMenu, summarizeLiquidityDepthLevels, } from './levels.js';
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/core/chart/depth/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,oBAAoB,EACpB,gCAAgC,EAChC,yBAAyB,EACzB,yBAAyB,EACzB,mBAAmB,EACnB,yBAAyB,EACzB,iCAAiC,EACjC,0BAA0B,EAC1B,qBAAqB,EACrB,qBAAqB,EACrB,0BAA0B,EAC1B,6BAA6B,GAO7B,MAAM,cAAc,CAAC;AACtB,OAAO,EACN,qBAAqB,EACrB,4BAA4B,EAC5B,sBAAsB,GACtB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAC,yBAAyB,EAAE,wBAAwB,EAAC,MAAM,oBAAoB,CAAC;AACvF,OAAO,EAAC,0BAA0B,EAAE,yBAAyB,EAAC,MAAM,qBAAqB,CAAC;AAC1F,OAAO,EAAC,oBAAoB,EAAE,kBAAkB,EAAC,MAAM,wBAAwB,CAAC;AAChF,OAAO,EAAC,mBAAmB,EAAE,cAAc,EAAyB,MAAM,cAAc,CAAC;AACzF,OAAO,EACN,qBAAqB,EACrB,kBAAkB,EAClB,uBAAuB,EACvB,0BAA0B,EAC1B,mBAAmB,EACnB,0BAA0B,GAG1B,MAAM,cAAc,CAAC;AACtB,OAAO,EACN,4BAA4B,EAC5B,6BAA6B,GAE7B,MAAM,aAAa,CAAC"}
@@ -0,0 +1,23 @@
1
+ import type { AveragedDepthProfile } from './schemas.js';
2
+ export type LiquidityDepthLevelMenuEntry = {
3
+ index: number;
4
+ levelNumber: number;
5
+ side: 'bid' | 'ask';
6
+ price: number;
7
+ avgSize: number;
8
+ relativeStrength: number;
9
+ distancePct: number;
10
+ };
11
+ /**
12
+ * Rank averaged depth bins into a level menu (bids below mid, asks above).
13
+ */
14
+ export declare function buildLiquidityDepthLevelMenu(profile: AveragedDepthProfile, options?: {
15
+ levelCount?: number;
16
+ }): LiquidityDepthLevelMenuEntry[];
17
+ export declare function summarizeLiquidityDepthLevels(menu: LiquidityDepthLevelMenuEntry[], meta: {
18
+ symbol: string;
19
+ warmingUp: boolean;
20
+ sampleCount: number;
21
+ windowSec: number;
22
+ }): string;
23
+ //# sourceMappingURL=levels.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"levels.d.ts","sourceRoot":"","sources":["../../../../src/core/chart/depth/levels.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,oBAAoB,EAAkB,MAAM,cAAc,CAAC;AAExE,MAAM,MAAM,4BAA4B,GAAG;IAC1C,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,KAAK,GAAG,KAAK,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;CACpB,CAAC;AAMF;;GAEG;AACH,wBAAgB,4BAA4B,CAC3C,OAAO,EAAE,oBAAoB,EAC7B,OAAO,GAAE;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAM,GACjC,4BAA4B,EAAE,CAgDhC;AAED,wBAAgB,6BAA6B,CAC5C,IAAI,EAAE,4BAA4B,EAAE,EACpC,IAAI,EAAE;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,OAAO,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAC,GAChF,MAAM,CAwBR"}
@@ -0,0 +1,68 @@
1
+ function binMid(bin) {
2
+ return (bin.priceLo + bin.priceHi) / 2;
3
+ }
4
+ /**
5
+ * Rank averaged depth bins into a level menu (bids below mid, asks above).
6
+ */
7
+ export function buildLiquidityDepthLevelMenu(profile, options = {}) {
8
+ const levelCount = Math.max(1, Math.min(32, options.levelCount ?? 8));
9
+ const mid = profile.mid;
10
+ if (mid == null || !(mid > 0) || !profile.bins.length) {
11
+ return [];
12
+ }
13
+ const bidCandidates = profile.bins
14
+ .filter(b => binMid(b) < mid && b.bidSize > 0)
15
+ .map(b => ({ side: 'bid', price: binMid(b), avgSize: b.bidSize }));
16
+ const askCandidates = profile.bins
17
+ .filter(b => binMid(b) > mid && b.askSize > 0)
18
+ .map(b => ({ side: 'ask', price: binMid(b), avgSize: b.askSize }));
19
+ bidCandidates.sort((a, b) => b.avgSize - a.avgSize);
20
+ askCandidates.sort((a, b) => b.avgSize - a.avgSize);
21
+ const perSide = Math.max(1, Math.ceil(levelCount / 2));
22
+ const picked = [
23
+ ...bidCandidates.slice(0, perSide),
24
+ ...askCandidates.slice(0, perSide),
25
+ ].slice(0, levelCount);
26
+ const maxSize = Math.max(...picked.map(p => p.avgSize), Number.EPSILON);
27
+ const withMeta = picked.map(p => ({
28
+ ...p,
29
+ relativeStrength: Math.min(1, p.avgSize / maxSize),
30
+ distancePct: (Math.abs(p.price - mid) / mid) * 100,
31
+ }));
32
+ // Present nearest to mid first within each side, bids then asks
33
+ withMeta.sort((a, b) => {
34
+ if (a.side !== b.side) {
35
+ return a.side === 'bid' ? -1 : 1;
36
+ }
37
+ return a.distancePct - b.distancePct;
38
+ });
39
+ return withMeta.map((entry, index) => ({
40
+ index,
41
+ levelNumber: index + 1,
42
+ side: entry.side,
43
+ price: entry.price,
44
+ avgSize: entry.avgSize,
45
+ relativeStrength: entry.relativeStrength,
46
+ distancePct: entry.distancePct,
47
+ }));
48
+ }
49
+ export function summarizeLiquidityDepthLevels(menu, meta) {
50
+ if (meta.warmingUp) {
51
+ return (`Spot liquidity depth for ${meta.symbol}: warming up ` +
52
+ `(${meta.sampleCount} samples; need more for a full ${meta.windowSec}s average).`);
53
+ }
54
+ if (!menu.length) {
55
+ return `Spot liquidity depth for ${meta.symbol}: no significant walls in the averaged book.`;
56
+ }
57
+ const topBid = menu.find(m => m.side === 'bid');
58
+ const topAsk = menu.find(m => m.side === 'ask');
59
+ const parts = [`Spot book ${meta.symbol}`];
60
+ if (topBid) {
61
+ parts.push(`bid wall ~${topBid.price.toPrecision(6)} (rel ${topBid.relativeStrength.toFixed(2)})`);
62
+ }
63
+ if (topAsk) {
64
+ parts.push(`ask wall ~${topAsk.price.toPrecision(6)} (rel ${topAsk.relativeStrength.toFixed(2)})`);
65
+ }
66
+ return parts.join(': ') + '.';
67
+ }
68
+ //# sourceMappingURL=levels.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"levels.js","sourceRoot":"","sources":["../../../../src/core/chart/depth/levels.ts"],"names":[],"mappings":"AAYA,SAAS,MAAM,CAAC,GAAoB;IACnC,OAAO,CAAC,GAAG,CAAC,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AACxC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,4BAA4B,CAC3C,OAA6B,EAC7B,UAAiC,EAAE;IAEnC,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,CAAC,UAAU,IAAI,CAAC,CAAC,CAAC,CAAC;IACtE,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;IACxB,IAAI,GAAG,IAAI,IAAI,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;QACvD,OAAO,EAAE,CAAC;IACX,CAAC;IAED,MAAM,aAAa,GAAG,OAAO,CAAC,IAAI;SAChC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC;SAC7C,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAC,IAAI,EAAE,KAAc,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAC,CAAC,CAAC,CAAC;IAC3E,MAAM,aAAa,GAAG,OAAO,CAAC,IAAI;SAChC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC;SAC7C,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAC,IAAI,EAAE,KAAc,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAC,CAAC,CAAC,CAAC;IAE3E,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC;IACpD,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC;IAEpD,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC;IACvD,MAAM,MAAM,GAAG;QACd,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC;QAClC,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC;KAClC,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;IAEvB,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;IAExE,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACjC,GAAG,CAAC;QACJ,gBAAgB,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,OAAO,GAAG,OAAO,CAAC;QAClD,WAAW,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG;KAClD,CAAC,CAAC,CAAC;IAEJ,gEAAgE;IAChE,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACtB,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;YACvB,OAAO,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAClC,CAAC;QACD,OAAO,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC,WAAW,CAAC;IACtC,CAAC,CAAC,CAAC;IAEH,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;QACtC,KAAK;QACL,WAAW,EAAE,KAAK,GAAG,CAAC;QACtB,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,gBAAgB,EAAE,KAAK,CAAC,gBAAgB;QACxC,WAAW,EAAE,KAAK,CAAC,WAAW;KAC9B,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,6BAA6B,CAC5C,IAAoC,EACpC,IAAkF;IAElF,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;QACpB,OAAO,CACN,4BAA4B,IAAI,CAAC,MAAM,eAAe;YACtD,IAAI,IAAI,CAAC,WAAW,kCAAkC,IAAI,CAAC,SAAS,aAAa,CACjF,CAAC;IACH,CAAC;IACD,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;QAClB,OAAO,4BAA4B,IAAI,CAAC,MAAM,8CAA8C,CAAC;IAC9F,CAAC;IACD,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC;IAChD,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC;IAChD,MAAM,KAAK,GAAa,CAAC,aAAa,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;IACrD,IAAI,MAAM,EAAE,CAAC;QACZ,KAAK,CAAC,IAAI,CACT,aAAa,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,MAAM,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CACtF,CAAC;IACH,CAAC;IACD,IAAI,MAAM,EAAE,CAAC;QACZ,KAAK,CAAC,IAAI,CACT,aAAa,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,MAAM,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CACtF,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC;AAC/B,CAAC"}
@@ -0,0 +1,22 @@
1
+ import type { DepthExchangeId, NormalizedDepthSnapshot } from './schemas.js';
2
+ /**
3
+ * Normalize Binance `/api/v3/depth` JSON:
4
+ * `{ lastUpdateId, bids: [[price, qty], …], asks: […] }`.
5
+ */
6
+ export declare function normalizeBinanceDepth(raw: unknown, options: {
7
+ symbol: string;
8
+ asOfMs?: number;
9
+ }): NormalizedDepthSnapshot | null;
10
+ /**
11
+ * Normalize Coinbase Advanced Trade public product book (for later adapter):
12
+ * `{ pricebook: { product_id, bids: [{price,size}], asks }, mid_market? }`.
13
+ */
14
+ export declare function normalizeCoinbaseProductBook(raw: unknown, options?: {
15
+ symbol?: string;
16
+ asOfMs?: number;
17
+ }): NormalizedDepthSnapshot | null;
18
+ export declare function normalizeDepthSnapshot(exchangeId: DepthExchangeId, raw: unknown, options: {
19
+ symbol: string;
20
+ asOfMs?: number;
21
+ }): NormalizedDepthSnapshot | null;
22
+ //# sourceMappingURL=normalize.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"normalize.d.ts","sourceRoot":"","sources":["../../../../src/core/chart/depth/normalize.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,eAAe,EAAwB,uBAAuB,EAAC,MAAM,cAAc,CAAC;AAkDjG;;;GAGG;AACH,wBAAgB,qBAAqB,CACpC,GAAG,EAAE,OAAO,EACZ,OAAO,EAAE;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAC,GACxC,uBAAuB,GAAG,IAAI,CA2BhC;AAED;;;GAGG;AACH,wBAAgB,4BAA4B,CAC3C,GAAG,EAAE,OAAO,EACZ,OAAO,GAAE;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAM,GAC9C,uBAAuB,GAAG,IAAI,CAwChC;AAED,wBAAgB,sBAAsB,CACrC,UAAU,EAAE,eAAe,EAC3B,GAAG,EAAE,OAAO,EACZ,OAAO,EAAE;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAC,GACxC,uBAAuB,GAAG,IAAI,CAQhC"}
@@ -0,0 +1,130 @@
1
+ import { coerceFiniteNumber } from '../point-normalize.js';
2
+ function levelFromTuple(row) {
3
+ if (!Array.isArray(row) || row.length < 2) {
4
+ return null;
5
+ }
6
+ const price = coerceFiniteNumber(row[0]);
7
+ const size = coerceFiniteNumber(row[1]);
8
+ if (price == null || size == null || size < 0) {
9
+ return null;
10
+ }
11
+ return { price, size };
12
+ }
13
+ function levelFromObject(row) {
14
+ if (!row || typeof row !== 'object' || Array.isArray(row)) {
15
+ return null;
16
+ }
17
+ const record = row;
18
+ const price = coerceFiniteNumber(record.price);
19
+ const size = coerceFiniteNumber(record.size ?? record.quantity ?? record.qty);
20
+ if (price == null || size == null || size < 0) {
21
+ return null;
22
+ }
23
+ return { price, size };
24
+ }
25
+ function normalizeLevels(raw) {
26
+ if (!Array.isArray(raw)) {
27
+ return [];
28
+ }
29
+ const out = [];
30
+ for (const row of raw) {
31
+ const level = Array.isArray(row) ? levelFromTuple(row) : levelFromObject(row);
32
+ if (level) {
33
+ out.push(level);
34
+ }
35
+ }
36
+ return out;
37
+ }
38
+ function midFromBook(bids, asks) {
39
+ const bestBid = bids[0]?.price;
40
+ const bestAsk = asks[0]?.price;
41
+ if (bestBid == null || bestAsk == null || !(bestAsk >= bestBid)) {
42
+ return undefined;
43
+ }
44
+ return (bestBid + bestAsk) / 2;
45
+ }
46
+ /**
47
+ * Normalize Binance `/api/v3/depth` JSON:
48
+ * `{ lastUpdateId, bids: [[price, qty], …], asks: […] }`.
49
+ */
50
+ export function normalizeBinanceDepth(raw, options) {
51
+ if (!raw || typeof raw !== 'object' || Array.isArray(raw)) {
52
+ return null;
53
+ }
54
+ const record = raw;
55
+ const symbol = options.symbol.trim().toUpperCase();
56
+ if (!symbol) {
57
+ return null;
58
+ }
59
+ const bids = normalizeLevels(record.bids);
60
+ const asks = normalizeLevels(record.asks);
61
+ if (!bids.length && !asks.length) {
62
+ return null;
63
+ }
64
+ const mid = midFromBook(bids, asks);
65
+ const asOfMs = options.asOfMs ?? Date.now();
66
+ const updateId = record.lastUpdateId;
67
+ return {
68
+ exchangeId: 'binance',
69
+ market: 'spot',
70
+ symbol,
71
+ asOfMs,
72
+ bids,
73
+ asks,
74
+ ...(mid != null ? { mid } : {}),
75
+ ...(typeof updateId === 'number' || typeof updateId === 'string' ? { updateId } : {}),
76
+ };
77
+ }
78
+ /**
79
+ * Normalize Coinbase Advanced Trade public product book (for later adapter):
80
+ * `{ pricebook: { product_id, bids: [{price,size}], asks }, mid_market? }`.
81
+ */
82
+ export function normalizeCoinbaseProductBook(raw, options = {}) {
83
+ if (!raw || typeof raw !== 'object' || Array.isArray(raw)) {
84
+ return null;
85
+ }
86
+ const root = raw;
87
+ const book = root.pricebook && typeof root.pricebook === 'object' && !Array.isArray(root.pricebook)
88
+ ? root.pricebook
89
+ : root;
90
+ const productId = (typeof book.product_id === 'string' && book.product_id.trim()) ||
91
+ (typeof options.symbol === 'string' && options.symbol.trim()) ||
92
+ '';
93
+ if (!productId) {
94
+ return null;
95
+ }
96
+ const bids = normalizeLevels(book.bids);
97
+ const asks = normalizeLevels(book.asks);
98
+ if (!bids.length && !asks.length) {
99
+ return null;
100
+ }
101
+ const midFromVenue = coerceFiniteNumber(root.mid_market ?? book.mid_market);
102
+ const mid = midFromVenue ?? midFromBook(bids, asks);
103
+ let asOfMs = options.asOfMs ?? Date.now();
104
+ const timeRaw = book.time ?? root.time;
105
+ if (typeof timeRaw === 'string') {
106
+ const parsed = Date.parse(timeRaw);
107
+ if (Number.isFinite(parsed)) {
108
+ asOfMs = parsed;
109
+ }
110
+ }
111
+ return {
112
+ exchangeId: 'coinbase',
113
+ market: 'spot',
114
+ symbol: productId.toUpperCase(),
115
+ asOfMs,
116
+ bids,
117
+ asks,
118
+ ...(mid != null ? { mid } : {}),
119
+ };
120
+ }
121
+ export function normalizeDepthSnapshot(exchangeId, raw, options) {
122
+ if (exchangeId === 'binance') {
123
+ return normalizeBinanceDepth(raw, options);
124
+ }
125
+ if (exchangeId === 'coinbase') {
126
+ return normalizeCoinbaseProductBook(raw, options);
127
+ }
128
+ return null;
129
+ }
130
+ //# sourceMappingURL=normalize.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"normalize.js","sourceRoot":"","sources":["../../../../src/core/chart/depth/normalize.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import { type AveragedDepthProfile, type DepthExchangeId, type NormalizedDepthSnapshot } from './schemas.js';
2
+ export type DepthSamplerKey = {
3
+ exchangeId: DepthExchangeId;
4
+ symbol: string;
5
+ };
6
+ export type DepthSamplerOptions = {
7
+ sampleIntervalSec?: number;
8
+ windowSec?: number;
9
+ limit?: number;
10
+ };
11
+ export declare function depthSamplerKeyString(key: DepthSamplerKey): string;
12
+ export declare function ingestDepthSnapshot(key: DepthSamplerKey, snapshot: NormalizedDepthSnapshot, options?: DepthSamplerOptions): AveragedDepthProfile | null;
13
+ /** Start (or refresh options for) a background depth sampler. Idempotent. */
14
+ export declare function ensureDepthSampler(key: DepthSamplerKey, options?: DepthSamplerOptions): void;
15
+ export declare function getAveragedDepthProfile(key: DepthSamplerKey): AveragedDepthProfile | null;
16
+ export declare function getDepthSamplerSampleCount(key: DepthSamplerKey): number;
17
+ /** Test helper — clear all samplers. */
18
+ export declare function resetDepthSamplersForTests(): void;
19
+ //# sourceMappingURL=sampler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sampler.d.ts","sourceRoot":"","sources":["../../../../src/core/chart/depth/sampler.ts"],"names":[],"mappings":"AAGA,OAAO,EAKN,KAAK,oBAAoB,EACzB,KAAK,eAAe,EACpB,KAAK,uBAAuB,EAC5B,MAAM,cAAc,CAAC;AAEtB,MAAM,MAAM,eAAe,GAAG;IAC7B,UAAU,EAAE,eAAe,CAAC;IAC5B,MAAM,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IACjC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAgBF,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,eAAe,GAAG,MAAM,CAElE;AAcD,wBAAgB,mBAAmB,CAClC,GAAG,EAAE,eAAe,EACpB,QAAQ,EAAE,uBAAuB,EACjC,OAAO,GAAE,mBAAwB,GAC/B,oBAAoB,GAAG,IAAI,CAwB7B;AAoCD,6EAA6E;AAC7E,wBAAgB,kBAAkB,CACjC,GAAG,EAAE,eAAe,EACpB,OAAO,GAAE,mBAAwB,GAC/B,IAAI,CAwCN;AAED,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,eAAe,GAAG,oBAAoB,GAAG,IAAI,CAWzF;AAED,wBAAgB,0BAA0B,CAAC,GAAG,EAAE,eAAe,GAAG,MAAM,CAOvE;AAED,wCAAwC;AACxC,wBAAgB,0BAA0B,IAAI,IAAI,CAOjD"}
@@ -0,0 +1,146 @@
1
+ import { averageDepthSamples, snapshotToBins } from './average.js';
2
+ import { fetchBinanceDepthSnapshot } from './binance-fetch.js';
3
+ import { fetchCoinbaseDepthSnapshot } from './coinbase-fetch.js';
4
+ import { DEFAULT_DEPTH_AVERAGE_WINDOW_SEC, DEFAULT_DEPTH_EXCHANGE_ID, DEFAULT_DEPTH_LIMIT, DEFAULT_DEPTH_SAMPLE_INTERVAL_SEC, } from './schemas.js';
5
+ const samplers = new Map();
6
+ export function depthSamplerKeyString(key) {
7
+ return `${key.exchangeId}:spot:${key.symbol.trim().toUpperCase()}`;
8
+ }
9
+ function trimSamples(state) {
10
+ const cutoff = Date.now() - state.windowSec * 1000;
11
+ while (state.samples.length > 0 && state.samples[0].asOfMs < cutoff) {
12
+ state.samples.shift();
13
+ }
14
+ // Cap buffer even if clock skew
15
+ const maxSamples = Math.max(8, Math.ceil(state.windowSec / Math.max(1, state.sampleIntervalSec)) + 4);
16
+ if (state.samples.length > maxSamples) {
17
+ state.samples.splice(0, state.samples.length - maxSamples);
18
+ }
19
+ }
20
+ export function ingestDepthSnapshot(key, snapshot, options = {}) {
21
+ const id = depthSamplerKeyString(key);
22
+ let state = samplers.get(id);
23
+ if (!state) {
24
+ state = {
25
+ key: id,
26
+ exchangeId: key.exchangeId,
27
+ symbol: key.symbol.trim().toUpperCase(),
28
+ sampleIntervalSec: options.sampleIntervalSec ?? DEFAULT_DEPTH_SAMPLE_INTERVAL_SEC,
29
+ windowSec: options.windowSec ?? DEFAULT_DEPTH_AVERAGE_WINDOW_SEC,
30
+ limit: options.limit ?? DEFAULT_DEPTH_LIMIT,
31
+ samples: [],
32
+ timer: null,
33
+ polling: false,
34
+ };
35
+ samplers.set(id, state);
36
+ }
37
+ state.samples.push({
38
+ asOfMs: snapshot.asOfMs,
39
+ bins: snapshotToBins(snapshot),
40
+ ...(snapshot.mid != null ? { mid: snapshot.mid } : {}),
41
+ });
42
+ trimSamples(state);
43
+ return getAveragedDepthProfile(key);
44
+ }
45
+ async function pollOnce(state) {
46
+ if (state.polling) {
47
+ return;
48
+ }
49
+ state.polling = true;
50
+ try {
51
+ let snap = null;
52
+ if (state.exchangeId === 'binance') {
53
+ snap = await fetchBinanceDepthSnapshot({
54
+ symbol: state.symbol,
55
+ limit: state.limit,
56
+ });
57
+ }
58
+ else if (state.exchangeId === 'coinbase') {
59
+ snap = await fetchCoinbaseDepthSnapshot({
60
+ productId: state.symbol,
61
+ limit: state.limit,
62
+ });
63
+ }
64
+ if (snap) {
65
+ ingestDepthSnapshot({ exchangeId: state.exchangeId, symbol: state.symbol }, snap, {
66
+ sampleIntervalSec: state.sampleIntervalSec,
67
+ windowSec: state.windowSec,
68
+ limit: state.limit,
69
+ });
70
+ }
71
+ }
72
+ finally {
73
+ state.polling = false;
74
+ }
75
+ }
76
+ /** Start (or refresh options for) a background depth sampler. Idempotent. */
77
+ export function ensureDepthSampler(key, options = {}) {
78
+ const exchangeId = key.exchangeId || DEFAULT_DEPTH_EXCHANGE_ID;
79
+ const symbol = key.symbol.trim().toUpperCase();
80
+ if (!symbol) {
81
+ return;
82
+ }
83
+ const id = depthSamplerKeyString({ exchangeId, symbol });
84
+ const sampleIntervalSec = options.sampleIntervalSec ?? DEFAULT_DEPTH_SAMPLE_INTERVAL_SEC;
85
+ const windowSec = options.windowSec ?? DEFAULT_DEPTH_AVERAGE_WINDOW_SEC;
86
+ const limit = options.limit ?? DEFAULT_DEPTH_LIMIT;
87
+ let state = samplers.get(id);
88
+ if (!state) {
89
+ state = {
90
+ key: id,
91
+ exchangeId,
92
+ symbol,
93
+ sampleIntervalSec,
94
+ windowSec,
95
+ limit,
96
+ samples: [],
97
+ timer: null,
98
+ polling: false,
99
+ };
100
+ samplers.set(id, state);
101
+ }
102
+ else {
103
+ state.sampleIntervalSec = sampleIntervalSec;
104
+ state.windowSec = windowSec;
105
+ state.limit = limit;
106
+ }
107
+ if (state.timer == null) {
108
+ void pollOnce(state);
109
+ state.timer = setInterval(() => {
110
+ void pollOnce(state);
111
+ }, sampleIntervalSec * 1000);
112
+ if (typeof state.timer === 'object' && 'unref' in state.timer) {
113
+ state.timer.unref?.();
114
+ }
115
+ }
116
+ }
117
+ export function getAveragedDepthProfile(key) {
118
+ const state = samplers.get(depthSamplerKeyString(key));
119
+ if (!state) {
120
+ return null;
121
+ }
122
+ trimSamples(state);
123
+ return averageDepthSamples(state.samples, {
124
+ exchangeId: state.exchangeId,
125
+ symbol: state.symbol,
126
+ windowSec: state.windowSec,
127
+ });
128
+ }
129
+ export function getDepthSamplerSampleCount(key) {
130
+ const state = samplers.get(depthSamplerKeyString(key));
131
+ if (!state) {
132
+ return 0;
133
+ }
134
+ trimSamples(state);
135
+ return state.samples.length;
136
+ }
137
+ /** Test helper — clear all samplers. */
138
+ export function resetDepthSamplersForTests() {
139
+ for (const state of samplers.values()) {
140
+ if (state.timer != null) {
141
+ clearInterval(state.timer);
142
+ }
143
+ }
144
+ samplers.clear();
145
+ }
146
+ //# sourceMappingURL=sampler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sampler.js","sourceRoot":"","sources":["../../../../src/core/chart/depth/sampler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,71 @@
1
+ import { z } from 'zod';
2
+ /** Extensible exchange ids for spot depth adapters. */
3
+ export declare const DepthExchangeIdSchema: z.ZodEnum<{
4
+ binance: "binance";
5
+ coinbase: "coinbase";
6
+ }>;
7
+ export type DepthExchangeId = z.infer<typeof DepthExchangeIdSchema>;
8
+ export declare const NormalizedDepthLevelSchema: z.ZodObject<{
9
+ price: z.ZodNumber;
10
+ size: z.ZodNumber;
11
+ }, z.core.$strict>;
12
+ export type NormalizedDepthLevel = z.infer<typeof NormalizedDepthLevelSchema>;
13
+ /** Vendor-neutral L2 snapshot after adapter normalization. */
14
+ export declare const NormalizedDepthSnapshotSchema: z.ZodObject<{
15
+ exchangeId: z.ZodEnum<{
16
+ binance: "binance";
17
+ coinbase: "coinbase";
18
+ }>;
19
+ market: z.ZodLiteral<"spot">;
20
+ symbol: z.ZodString;
21
+ asOfMs: z.ZodNumber;
22
+ bids: z.ZodArray<z.ZodObject<{
23
+ price: z.ZodNumber;
24
+ size: z.ZodNumber;
25
+ }, z.core.$strict>>;
26
+ asks: z.ZodArray<z.ZodObject<{
27
+ price: z.ZodNumber;
28
+ size: z.ZodNumber;
29
+ }, z.core.$strict>>;
30
+ mid: z.ZodOptional<z.ZodNumber>;
31
+ updateId: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>;
32
+ }, z.core.$strict>;
33
+ export type NormalizedDepthSnapshot = z.infer<typeof NormalizedDepthSnapshotSchema>;
34
+ export declare const DepthProfileBinSchema: z.ZodObject<{
35
+ priceLo: z.ZodNumber;
36
+ priceHi: z.ZodNumber;
37
+ bidSize: z.ZodNumber;
38
+ askSize: z.ZodNumber;
39
+ totalSize: z.ZodNumber;
40
+ }, z.core.$strict>;
41
+ export type DepthProfileBin = z.infer<typeof DepthProfileBinSchema>;
42
+ export declare const AveragedDepthProfileSchema: z.ZodObject<{
43
+ exchangeId: z.ZodEnum<{
44
+ binance: "binance";
45
+ coinbase: "coinbase";
46
+ }>;
47
+ market: z.ZodLiteral<"spot">;
48
+ symbol: z.ZodString;
49
+ mid: z.ZodOptional<z.ZodNumber>;
50
+ asOfMs: z.ZodNumber;
51
+ windowSec: z.ZodNumber;
52
+ sampleCount: z.ZodNumber;
53
+ bins: z.ZodArray<z.ZodObject<{
54
+ priceLo: z.ZodNumber;
55
+ priceHi: z.ZodNumber;
56
+ bidSize: z.ZodNumber;
57
+ askSize: z.ZodNumber;
58
+ totalSize: z.ZodNumber;
59
+ }, z.core.$strict>>;
60
+ }, z.core.$strict>;
61
+ export type AveragedDepthProfile = z.infer<typeof AveragedDepthProfileSchema>;
62
+ /** Binance-allowed depth limits. */
63
+ export declare const BINANCE_DEPTH_LIMITS: readonly [5, 10, 20, 50, 100, 500, 1000, 5000];
64
+ export type BinanceDepthLimit = (typeof BINANCE_DEPTH_LIMITS)[number];
65
+ export declare const DEFAULT_DEPTH_EXCHANGE_ID: DepthExchangeId;
66
+ export declare const DEFAULT_DEPTH_SAMPLE_INTERVAL_SEC = 12;
67
+ export declare const DEFAULT_DEPTH_AVERAGE_WINDOW_SEC = 300;
68
+ export declare const DEFAULT_DEPTH_LIMIT: BinanceDepthLimit;
69
+ export declare const DEFAULT_DEPTH_LEVEL_COUNT = 8;
70
+ export declare const DEFAULT_DEPTH_MIN_SAMPLES = 5;
71
+ //# sourceMappingURL=schemas.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../../../../src/core/chart/depth/schemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,CAAC,EAAC,MAAM,KAAK,CAAC;AAEtB,uDAAuD;AACvD,eAAO,MAAM,qBAAqB;;;EAAkC,CAAC;AACrE,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAEpE,eAAO,MAAM,0BAA0B;;;kBAK7B,CAAC;AAEX,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAC;AAE9E,8DAA8D;AAC9D,eAAO,MAAM,6BAA6B;;;;;;;;;;;;;;;;;;kBAWhC,CAAC;AAEX,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,6BAA6B,CAAC,CAAC;AAEpF,eAAO,MAAM,qBAAqB;;;;;;kBAQxB,CAAC;AAEX,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAEpE,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;;;;kBAW7B,CAAC;AAEX,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAC;AAE9E,oCAAoC;AACpC,eAAO,MAAM,oBAAoB,gDAAiD,CAAC;AACnF,MAAM,MAAM,iBAAiB,GAAG,CAAC,OAAO,oBAAoB,CAAC,CAAC,MAAM,CAAC,CAAC;AAEtE,eAAO,MAAM,yBAAyB,EAAE,eAA2B,CAAC;AACpE,eAAO,MAAM,iCAAiC,KAAK,CAAC;AACpD,eAAO,MAAM,gCAAgC,MAAM,CAAC;AACpD,eAAO,MAAM,mBAAmB,EAAE,iBAAuB,CAAC;AAC1D,eAAO,MAAM,yBAAyB,IAAI,CAAC;AAC3C,eAAO,MAAM,yBAAyB,IAAI,CAAC"}