@forgecharts/sdk 1.1.23 → 1.1.28

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 (562) hide show
  1. package/dist/__tests__/backwardCompatibility.test.d.ts +14 -0
  2. package/dist/__tests__/backwardCompatibility.test.d.ts.map +1 -0
  3. package/dist/__tests__/backwardCompatibility.test.js +159 -0
  4. package/dist/__tests__/backwardCompatibility.test.js.map +1 -0
  5. package/dist/__tests__/candleInvariant.test.d.ts +20 -0
  6. package/dist/__tests__/candleInvariant.test.d.ts.map +1 -0
  7. package/dist/__tests__/candleInvariant.test.js +415 -0
  8. package/dist/__tests__/candleInvariant.test.js.map +1 -0
  9. package/dist/__tests__/public-api-surface.d.ts +13 -0
  10. package/dist/__tests__/public-api-surface.d.ts.map +1 -0
  11. package/{src/__tests__/public-api-surface.ts → dist/__tests__/public-api-surface.js} +4 -42
  12. package/dist/__tests__/public-api-surface.js.map +1 -0
  13. package/dist/__tests__/timeframeBoundary.test.d.ts +17 -0
  14. package/dist/__tests__/timeframeBoundary.test.d.ts.map +1 -0
  15. package/dist/__tests__/timeframeBoundary.test.js +452 -0
  16. package/dist/__tests__/timeframeBoundary.test.js.map +1 -0
  17. package/dist/api/DrawingManager.d.ts +20 -0
  18. package/dist/api/DrawingManager.d.ts.map +1 -0
  19. package/dist/api/DrawingManager.js +190 -0
  20. package/dist/api/DrawingManager.js.map +1 -0
  21. package/dist/api/EventBus.d.ts +19 -0
  22. package/dist/api/EventBus.d.ts.map +1 -0
  23. package/dist/api/EventBus.js +44 -0
  24. package/dist/api/EventBus.js.map +1 -0
  25. package/dist/api/IndicatorDAG.d.ts +85 -0
  26. package/dist/api/IndicatorDAG.d.ts.map +1 -0
  27. package/dist/api/IndicatorDAG.js +316 -0
  28. package/dist/api/IndicatorDAG.js.map +1 -0
  29. package/dist/api/IndicatorRegistry.d.ts +22 -0
  30. package/dist/api/IndicatorRegistry.d.ts.map +1 -0
  31. package/dist/api/IndicatorRegistry.js +39 -0
  32. package/dist/api/IndicatorRegistry.js.map +1 -0
  33. package/dist/api/LayoutManager.d.ts +30 -0
  34. package/dist/api/LayoutManager.d.ts.map +1 -0
  35. package/dist/api/LayoutManager.js +51 -0
  36. package/dist/api/LayoutManager.js.map +1 -0
  37. package/dist/api/PaneManager.d.ts +42 -0
  38. package/dist/api/PaneManager.d.ts.map +1 -0
  39. package/dist/api/PaneManager.js +119 -0
  40. package/dist/api/PaneManager.js.map +1 -0
  41. package/dist/api/ReferenceAPI.d.ts +78 -0
  42. package/dist/api/ReferenceAPI.d.ts.map +1 -0
  43. package/dist/api/ReferenceAPI.js +153 -0
  44. package/dist/api/ReferenceAPI.js.map +1 -0
  45. package/dist/api/TChart.d.ts +345 -0
  46. package/dist/api/TChart.d.ts.map +1 -0
  47. package/dist/api/TChart.js +765 -0
  48. package/dist/api/TChart.js.map +1 -0
  49. package/{src/api/createChart.ts → dist/api/createChart.d.ts} +2 -7
  50. package/dist/api/createChart.d.ts.map +1 -0
  51. package/dist/api/createChart.js +42 -0
  52. package/dist/api/createChart.js.map +1 -0
  53. package/dist/api/drawing tools/fib gann menu/fibRetracement.d.ts +4 -0
  54. package/dist/api/drawing tools/fib gann menu/fibRetracement.d.ts.map +1 -0
  55. package/dist/api/drawing tools/fib gann menu/fibRetracement.js +22 -0
  56. package/dist/api/drawing tools/fib gann menu/fibRetracement.js.map +1 -0
  57. package/dist/api/drawing tools/lines menu/crossLine.d.ts +4 -0
  58. package/dist/api/drawing tools/lines menu/crossLine.d.ts.map +1 -0
  59. package/dist/api/drawing tools/lines menu/crossLine.js +16 -0
  60. package/dist/api/drawing tools/lines menu/crossLine.js.map +1 -0
  61. package/dist/api/drawing tools/lines menu/disjointChannel.d.ts +17 -0
  62. package/dist/api/drawing tools/lines menu/disjointChannel.d.ts.map +1 -0
  63. package/dist/api/drawing tools/lines menu/disjointChannel.js +59 -0
  64. package/dist/api/drawing tools/lines menu/disjointChannel.js.map +1 -0
  65. package/dist/api/drawing tools/lines menu/extendedLine.d.ts +4 -0
  66. package/dist/api/drawing tools/lines menu/extendedLine.d.ts.map +1 -0
  67. package/dist/api/drawing tools/lines menu/extendedLine.js +17 -0
  68. package/dist/api/drawing tools/lines menu/extendedLine.js.map +1 -0
  69. package/dist/api/drawing tools/lines menu/flatTopBottom.d.ts +4 -0
  70. package/dist/api/drawing tools/lines menu/flatTopBottom.d.ts.map +1 -0
  71. package/dist/api/drawing tools/lines menu/flatTopBottom.js +41 -0
  72. package/dist/api/drawing tools/lines menu/flatTopBottom.js.map +1 -0
  73. package/dist/api/drawing tools/lines menu/horizontal.d.ts +4 -0
  74. package/dist/api/drawing tools/lines menu/horizontal.d.ts.map +1 -0
  75. package/dist/api/drawing tools/lines menu/horizontal.js +19 -0
  76. package/dist/api/drawing tools/lines menu/horizontal.js.map +1 -0
  77. package/dist/api/drawing tools/lines menu/horizontalRay.d.ts +4 -0
  78. package/dist/api/drawing tools/lines menu/horizontalRay.d.ts.map +1 -0
  79. package/dist/api/drawing tools/lines menu/horizontalRay.js +20 -0
  80. package/dist/api/drawing tools/lines menu/horizontalRay.js.map +1 -0
  81. package/dist/api/drawing tools/lines menu/infoLine.d.ts +4 -0
  82. package/dist/api/drawing tools/lines menu/infoLine.d.ts.map +1 -0
  83. package/dist/api/drawing tools/lines menu/infoLine.js +107 -0
  84. package/dist/api/drawing tools/lines menu/infoLine.js.map +1 -0
  85. package/dist/api/drawing tools/lines menu/insidePitchfork.d.ts +4 -0
  86. package/dist/api/drawing tools/lines menu/insidePitchfork.d.ts.map +1 -0
  87. package/dist/api/drawing tools/lines menu/insidePitchfork.js +31 -0
  88. package/dist/api/drawing tools/lines menu/insidePitchfork.js.map +1 -0
  89. package/dist/api/drawing tools/lines menu/modifiedSchiffPitchfork.d.ts +4 -0
  90. package/dist/api/drawing tools/lines menu/modifiedSchiffPitchfork.d.ts.map +1 -0
  91. package/dist/api/drawing tools/lines menu/modifiedSchiffPitchfork.js +15 -0
  92. package/dist/api/drawing tools/lines menu/modifiedSchiffPitchfork.js.map +1 -0
  93. package/dist/api/drawing tools/lines menu/parallelChannel.d.ts +4 -0
  94. package/dist/api/drawing tools/lines menu/parallelChannel.d.ts.map +1 -0
  95. package/dist/api/drawing tools/lines menu/parallelChannel.js +43 -0
  96. package/dist/api/drawing tools/lines menu/parallelChannel.js.map +1 -0
  97. package/dist/api/drawing tools/lines menu/pitchfork.d.ts +4 -0
  98. package/dist/api/drawing tools/lines menu/pitchfork.d.ts.map +1 -0
  99. package/dist/api/drawing tools/lines menu/pitchfork.js +12 -0
  100. package/dist/api/drawing tools/lines menu/pitchfork.js.map +1 -0
  101. package/dist/api/drawing tools/lines menu/ray.d.ts +4 -0
  102. package/dist/api/drawing tools/lines menu/ray.d.ts.map +1 -0
  103. package/dist/api/drawing tools/lines menu/ray.js +23 -0
  104. package/dist/api/drawing tools/lines menu/ray.js.map +1 -0
  105. package/dist/api/drawing tools/lines menu/regressionTrend.d.ts +4 -0
  106. package/dist/api/drawing tools/lines menu/regressionTrend.d.ts.map +1 -0
  107. package/dist/api/drawing tools/lines menu/regressionTrend.js +127 -0
  108. package/dist/api/drawing tools/lines menu/regressionTrend.js.map +1 -0
  109. package/dist/api/drawing tools/lines menu/schiffPitchfork.d.ts +4 -0
  110. package/dist/api/drawing tools/lines menu/schiffPitchfork.d.ts.map +1 -0
  111. package/dist/api/drawing tools/lines menu/schiffPitchfork.js +15 -0
  112. package/dist/api/drawing tools/lines menu/schiffPitchfork.js.map +1 -0
  113. package/dist/api/drawing tools/lines menu/trendAngle.d.ts +4 -0
  114. package/dist/api/drawing tools/lines menu/trendAngle.d.ts.map +1 -0
  115. package/dist/api/drawing tools/lines menu/trendAngle.js +51 -0
  116. package/dist/api/drawing tools/lines menu/trendAngle.js.map +1 -0
  117. package/dist/api/drawing tools/lines menu/trendline.d.ts +4 -0
  118. package/dist/api/drawing tools/lines menu/trendline.d.ts.map +1 -0
  119. package/dist/api/drawing tools/lines menu/trendline.js +11 -0
  120. package/dist/api/drawing tools/lines menu/trendline.js.map +1 -0
  121. package/dist/api/drawing tools/lines menu/vertical.d.ts +4 -0
  122. package/dist/api/drawing tools/lines menu/vertical.d.ts.map +1 -0
  123. package/dist/api/drawing tools/lines menu/vertical.js +11 -0
  124. package/dist/api/drawing tools/lines menu/vertical.js.map +1 -0
  125. package/dist/api/drawing tools/pointers menu/crosshair.d.ts +16 -0
  126. package/dist/api/drawing tools/pointers menu/crosshair.d.ts.map +1 -0
  127. package/{src/api/drawing tools/pointers menu/crosshair.ts → dist/api/drawing tools/pointers menu/crosshair.js } +6 -7
  128. package/dist/api/drawing tools/pointers menu/crosshair.js.map +1 -0
  129. package/dist/api/drawing tools/pointers menu/cursor.d.ts +15 -0
  130. package/dist/api/drawing tools/pointers menu/cursor.d.ts.map +1 -0
  131. package/{src/api/drawing tools/pointers menu/cursor.ts → dist/api/drawing tools/pointers menu/cursor.js } +7 -8
  132. package/dist/api/drawing tools/pointers menu/cursor.js.map +1 -0
  133. package/dist/api/drawing tools/pointers menu/demonstration.d.ts +30 -0
  134. package/dist/api/drawing tools/pointers menu/demonstration.d.ts.map +1 -0
  135. package/{src/api/drawing tools/pointers menu/demonstration.ts → dist/api/drawing tools/pointers menu/demonstration.js } +9 -14
  136. package/dist/api/drawing tools/pointers menu/demonstration.js.map +1 -0
  137. package/dist/api/drawing tools/pointers menu/dot.d.ts +23 -0
  138. package/dist/api/drawing tools/pointers menu/dot.d.ts.map +1 -0
  139. package/{src/api/drawing tools/pointers menu/dot.ts → dist/api/drawing tools/pointers menu/dot.js } +8 -11
  140. package/dist/api/drawing tools/pointers menu/dot.js.map +1 -0
  141. package/dist/api/drawing tools/shapes menu/rectangle.d.ts +4 -0
  142. package/dist/api/drawing tools/shapes menu/rectangle.d.ts.map +1 -0
  143. package/dist/api/drawing tools/shapes menu/rectangle.js +19 -0
  144. package/dist/api/drawing tools/shapes menu/rectangle.js.map +1 -0
  145. package/dist/api/drawing tools/shapes menu/text.d.ts +4 -0
  146. package/dist/api/drawing tools/shapes menu/text.d.ts.map +1 -0
  147. package/dist/api/drawing tools/shapes menu/text.js +25 -0
  148. package/dist/api/drawing tools/shapes menu/text.js.map +1 -0
  149. package/dist/api/drawingUtils.d.ts +22 -0
  150. package/dist/api/drawingUtils.d.ts.map +1 -0
  151. package/dist/api/drawingUtils.js +83 -0
  152. package/dist/api/drawingUtils.js.map +1 -0
  153. package/dist/core/CanvasLayer.d.ts +26 -0
  154. package/dist/core/CanvasLayer.d.ts.map +1 -0
  155. package/dist/core/CanvasLayer.js +56 -0
  156. package/dist/core/CanvasLayer.js.map +1 -0
  157. package/dist/core/Chart.d.ts +164 -0
  158. package/dist/core/Chart.d.ts.map +1 -0
  159. package/dist/core/Chart.js +839 -0
  160. package/dist/core/Chart.js.map +1 -0
  161. package/dist/core/CoordTransform.d.ts +168 -0
  162. package/dist/core/CoordTransform.d.ts.map +1 -0
  163. package/dist/core/CoordTransform.js +224 -0
  164. package/dist/core/CoordTransform.js.map +1 -0
  165. package/dist/core/Crosshair.d.ts +30 -0
  166. package/dist/core/Crosshair.d.ts.map +1 -0
  167. package/dist/core/Crosshair.js +186 -0
  168. package/dist/core/Crosshair.js.map +1 -0
  169. package/dist/core/IndicatorEngine.d.ts +51 -0
  170. package/dist/core/IndicatorEngine.d.ts.map +1 -0
  171. package/dist/core/IndicatorEngine.js +181 -0
  172. package/dist/core/IndicatorEngine.js.map +1 -0
  173. package/dist/core/InteractionManager.d.ts +197 -0
  174. package/dist/core/InteractionManager.d.ts.map +1 -0
  175. package/dist/core/InteractionManager.js +698 -0
  176. package/dist/core/InteractionManager.js.map +1 -0
  177. package/dist/core/PriceScale.d.ts +27 -0
  178. package/dist/core/PriceScale.d.ts.map +1 -0
  179. package/dist/core/PriceScale.js +113 -0
  180. package/dist/core/PriceScale.js.map +1 -0
  181. package/dist/core/Series.d.ts +40 -0
  182. package/dist/core/Series.d.ts.map +1 -0
  183. package/dist/core/Series.js +114 -0
  184. package/dist/core/Series.js.map +1 -0
  185. package/dist/core/TimeScale.d.ts +43 -0
  186. package/dist/core/TimeScale.d.ts.map +1 -0
  187. package/dist/core/TimeScale.js +150 -0
  188. package/dist/core/TimeScale.js.map +1 -0
  189. package/dist/datafeed/DatafeedConnector.d.ts +89 -0
  190. package/dist/datafeed/DatafeedConnector.d.ts.map +1 -0
  191. package/dist/datafeed/DatafeedConnector.js +268 -0
  192. package/dist/datafeed/DatafeedConnector.js.map +1 -0
  193. package/dist/engine/CandleEngine.d.ts +207 -0
  194. package/dist/engine/CandleEngine.d.ts.map +1 -0
  195. package/dist/engine/CandleEngine.js +318 -0
  196. package/dist/engine/CandleEngine.js.map +1 -0
  197. package/dist/engine/__tests__/CandleEngine.test.d.ts +2 -0
  198. package/dist/engine/__tests__/CandleEngine.test.d.ts.map +1 -0
  199. package/dist/engine/__tests__/CandleEngine.test.js +300 -0
  200. package/dist/engine/__tests__/CandleEngine.test.js.map +1 -0
  201. package/dist/engine/candleInvariants.d.ts +66 -0
  202. package/dist/engine/candleInvariants.d.ts.map +1 -0
  203. package/dist/engine/candleInvariants.js +134 -0
  204. package/dist/engine/candleInvariants.js.map +1 -0
  205. package/{src/engine/mergeUtils.ts → dist/engine/mergeUtils.d.ts} +15 -52
  206. package/dist/engine/mergeUtils.d.ts.map +1 -0
  207. package/dist/engine/mergeUtils.js +64 -0
  208. package/dist/engine/mergeUtils.js.map +1 -0
  209. package/dist/engine/timeframeUtils.d.ts +80 -0
  210. package/dist/engine/timeframeUtils.d.ts.map +1 -0
  211. package/{src/engine/timeframeUtils.ts → dist/engine/timeframeUtils.js} +30 -48
  212. package/dist/engine/timeframeUtils.js.map +1 -0
  213. package/dist/index.d.ts +40 -0
  214. package/dist/index.d.ts.map +1 -0
  215. package/dist/index.js +49 -0
  216. package/dist/index.js.map +1 -0
  217. package/dist/internal.d.ts +29 -0
  218. package/dist/internal.d.ts.map +1 -0
  219. package/{src/internal.ts → dist/internal.js} +2 -11
  220. package/dist/internal.js.map +1 -0
  221. package/dist/licensing/ChartRuntimeResolver.d.ts +233 -0
  222. package/dist/licensing/ChartRuntimeResolver.d.ts.map +1 -0
  223. package/dist/licensing/ChartRuntimeResolver.js +310 -0
  224. package/dist/licensing/ChartRuntimeResolver.js.map +1 -0
  225. package/dist/licensing/LicenseManager.d.ts +55 -0
  226. package/dist/licensing/LicenseManager.d.ts.map +1 -0
  227. package/dist/licensing/LicenseManager.js +114 -0
  228. package/dist/licensing/LicenseManager.js.map +1 -0
  229. package/dist/licensing/__tests__/ChartRuntimeResolver.test.d.ts +13 -0
  230. package/dist/licensing/__tests__/ChartRuntimeResolver.test.d.ts.map +1 -0
  231. package/dist/licensing/__tests__/ChartRuntimeResolver.test.js +177 -0
  232. package/dist/licensing/__tests__/ChartRuntimeResolver.test.js.map +1 -0
  233. package/dist/licensing/__tests__/LicenseManager.test.d.ts +12 -0
  234. package/dist/licensing/__tests__/LicenseManager.test.d.ts.map +1 -0
  235. package/dist/licensing/__tests__/LicenseManager.test.js +153 -0
  236. package/dist/licensing/__tests__/LicenseManager.test.js.map +1 -0
  237. package/dist/licensing/licenseTypes.d.ts +18 -0
  238. package/dist/licensing/licenseTypes.d.ts.map +1 -0
  239. package/dist/licensing/licenseTypes.js +2 -0
  240. package/dist/licensing/licenseTypes.js.map +1 -0
  241. package/dist/pine/PineCompiler.d.ts +35 -0
  242. package/dist/pine/PineCompiler.d.ts.map +1 -0
  243. package/dist/pine/PineCompiler.js +44 -0
  244. package/dist/pine/PineCompiler.js.map +1 -0
  245. package/dist/pine/diagnostics.d.ts +20 -0
  246. package/dist/pine/diagnostics.d.ts.map +1 -0
  247. package/dist/pine/diagnostics.js +11 -0
  248. package/dist/pine/diagnostics.js.map +1 -0
  249. package/{src/pine/index.ts → dist/pine/index.d.ts} +4 -3
  250. package/dist/pine/index.d.ts.map +1 -0
  251. package/dist/pine/index.js +5 -0
  252. package/dist/pine/index.js.map +1 -0
  253. package/dist/pine/pine-ast.d.ts +142 -0
  254. package/dist/pine/pine-ast.d.ts.map +1 -0
  255. package/dist/pine/pine-ast.js +19 -0
  256. package/dist/pine/pine-ast.js.map +1 -0
  257. package/dist/pine/pine-lexer.d.ts +41 -0
  258. package/dist/pine/pine-lexer.d.ts.map +1 -0
  259. package/dist/pine/pine-lexer.js +249 -0
  260. package/dist/pine/pine-lexer.js.map +1 -0
  261. package/dist/pine/pine-parser.d.ts +51 -0
  262. package/dist/pine/pine-parser.d.ts.map +1 -0
  263. package/dist/pine/pine-parser.js +416 -0
  264. package/dist/pine/pine-parser.js.map +1 -0
  265. package/dist/pine/pine-transpiler.d.ts +33 -0
  266. package/dist/pine/pine-transpiler.d.ts.map +1 -0
  267. package/dist/pine/pine-transpiler.js +260 -0
  268. package/dist/pine/pine-transpiler.js.map +1 -0
  269. package/dist/pixi/LayerName.d.ts +18 -0
  270. package/dist/pixi/LayerName.d.ts.map +1 -0
  271. package/dist/pixi/LayerName.js +35 -0
  272. package/dist/pixi/LayerName.js.map +1 -0
  273. package/dist/pixi/PixiCandlestickRenderer.d.ts +23 -0
  274. package/dist/pixi/PixiCandlestickRenderer.d.ts.map +1 -0
  275. package/dist/pixi/PixiCandlestickRenderer.js +107 -0
  276. package/dist/pixi/PixiCandlestickRenderer.js.map +1 -0
  277. package/dist/pixi/PixiChart.d.ts +72 -0
  278. package/dist/pixi/PixiChart.d.ts.map +1 -0
  279. package/dist/pixi/PixiChart.js +367 -0
  280. package/dist/pixi/PixiChart.js.map +1 -0
  281. package/dist/pixi/PixiCrosshairRenderer.d.ts +29 -0
  282. package/dist/pixi/PixiCrosshairRenderer.d.ts.map +1 -0
  283. package/dist/pixi/PixiCrosshairRenderer.js +110 -0
  284. package/dist/pixi/PixiCrosshairRenderer.js.map +1 -0
  285. package/dist/pixi/PixiDrawingRenderer.d.ts +17 -0
  286. package/dist/pixi/PixiDrawingRenderer.d.ts.map +1 -0
  287. package/dist/pixi/PixiDrawingRenderer.js +111 -0
  288. package/dist/pixi/PixiDrawingRenderer.js.map +1 -0
  289. package/dist/pixi/PixiGridRenderer.d.ts +22 -0
  290. package/dist/pixi/PixiGridRenderer.d.ts.map +1 -0
  291. package/dist/pixi/PixiGridRenderer.js +114 -0
  292. package/dist/pixi/PixiGridRenderer.js.map +1 -0
  293. package/dist/pixi/PixiLayerManager.d.ts +56 -0
  294. package/dist/pixi/PixiLayerManager.d.ts.map +1 -0
  295. package/dist/pixi/PixiLayerManager.js +92 -0
  296. package/dist/pixi/PixiLayerManager.js.map +1 -0
  297. package/dist/react/canvas/ChartCanvas.d.ts +85 -0
  298. package/dist/react/canvas/ChartCanvas.d.ts.map +1 -0
  299. package/dist/react/canvas/ChartCanvas.js +604 -0
  300. package/dist/react/canvas/ChartCanvas.js.map +1 -0
  301. package/dist/react/canvas/ChartContextMenu.d.ts +18 -0
  302. package/dist/react/canvas/ChartContextMenu.d.ts.map +1 -0
  303. package/dist/react/canvas/ChartContextMenu.js +5 -0
  304. package/dist/react/canvas/ChartContextMenu.js.map +1 -0
  305. package/dist/react/canvas/ChartSettingsDialog.d.ts +25 -0
  306. package/dist/react/canvas/ChartSettingsDialog.d.ts.map +1 -0
  307. package/dist/react/canvas/ChartSettingsDialog.js +28 -0
  308. package/dist/react/canvas/ChartSettingsDialog.js.map +1 -0
  309. package/dist/react/canvas/IndicatorLabel.d.ts +21 -0
  310. package/dist/react/canvas/IndicatorLabel.d.ts.map +1 -0
  311. package/dist/react/canvas/IndicatorLabel.js +196 -0
  312. package/dist/react/canvas/IndicatorLabel.js.map +1 -0
  313. package/dist/react/canvas/IndicatorPane.d.ts +32 -0
  314. package/dist/react/canvas/IndicatorPane.d.ts.map +1 -0
  315. package/dist/react/canvas/IndicatorPane.js +395 -0
  316. package/dist/react/canvas/IndicatorPane.js.map +1 -0
  317. package/dist/react/canvas/PointerOverlay.d.ts +23 -0
  318. package/dist/react/canvas/PointerOverlay.d.ts.map +1 -0
  319. package/dist/react/canvas/PointerOverlay.js +61 -0
  320. package/dist/react/canvas/PointerOverlay.js.map +1 -0
  321. package/dist/react/canvas/toolbars/LeftToolbar.d.ts +19 -0
  322. package/dist/react/canvas/toolbars/LeftToolbar.d.ts.map +1 -0
  323. package/dist/react/canvas/toolbars/LeftToolbar.js +407 -0
  324. package/dist/react/canvas/toolbars/LeftToolbar.js.map +1 -0
  325. package/dist/react/hooks/useChartCapabilities.d.ts +21 -0
  326. package/dist/react/hooks/useChartCapabilities.d.ts.map +1 -0
  327. package/dist/react/hooks/useChartCapabilities.js +66 -0
  328. package/dist/react/hooks/useChartCapabilities.js.map +1 -0
  329. package/dist/react/index.d.ts +30 -0
  330. package/dist/react/index.d.ts.map +1 -0
  331. package/dist/react/index.js +28 -0
  332. package/dist/react/index.js.map +1 -0
  333. package/dist/react/internal.d.ts +38 -0
  334. package/dist/react/internal.d.ts.map +1 -0
  335. package/dist/react/internal.js +44 -0
  336. package/dist/react/internal.js.map +1 -0
  337. package/dist/react/shell/ManagedAppShell.d.ts +91 -0
  338. package/dist/react/shell/ManagedAppShell.d.ts.map +1 -0
  339. package/dist/react/shell/ManagedAppShell.js +440 -0
  340. package/dist/react/shell/ManagedAppShell.js.map +1 -0
  341. package/dist/react/trading/TradingBridge.d.ts +86 -0
  342. package/dist/react/trading/TradingBridge.d.ts.map +1 -0
  343. package/dist/react/trading/TradingBridge.js +73 -0
  344. package/dist/react/trading/TradingBridge.js.map +1 -0
  345. package/dist/react/workspace/ChartWorkspace.d.ts +73 -0
  346. package/dist/react/workspace/ChartWorkspace.d.ts.map +1 -0
  347. package/dist/react/workspace/ChartWorkspace.js +42 -0
  348. package/dist/react/workspace/ChartWorkspace.js.map +1 -0
  349. package/dist/react/workspace/FloatingPanel.d.ts +18 -0
  350. package/dist/react/workspace/FloatingPanel.d.ts.map +1 -0
  351. package/dist/react/workspace/FloatingPanel.js +82 -0
  352. package/dist/react/workspace/FloatingPanel.js.map +1 -0
  353. package/dist/react/workspace/IndicatorsDialog.d.ts +8 -0
  354. package/dist/react/workspace/IndicatorsDialog.d.ts.map +1 -0
  355. package/dist/react/workspace/IndicatorsDialog.js +121 -0
  356. package/dist/react/workspace/IndicatorsDialog.js.map +1 -0
  357. package/dist/react/workspace/LayoutMenu.d.ts +33 -0
  358. package/dist/react/workspace/LayoutMenu.d.ts.map +1 -0
  359. package/dist/react/workspace/LayoutMenu.js +113 -0
  360. package/dist/react/workspace/LayoutMenu.js.map +1 -0
  361. package/dist/react/workspace/SymbolSearchDialog.d.ts +10 -0
  362. package/dist/react/workspace/SymbolSearchDialog.d.ts.map +1 -0
  363. package/dist/react/workspace/SymbolSearchDialog.js +245 -0
  364. package/dist/react/workspace/SymbolSearchDialog.js.map +1 -0
  365. package/dist/react/workspace/TabBar.d.ts +17 -0
  366. package/dist/react/workspace/TabBar.d.ts.map +1 -0
  367. package/dist/react/workspace/TabBar.js +29 -0
  368. package/dist/react/workspace/TabBar.js.map +1 -0
  369. package/dist/react/workspace/toolbars/BottomToolbar.d.ts +19 -0
  370. package/dist/react/workspace/toolbars/BottomToolbar.d.ts.map +1 -0
  371. package/dist/react/workspace/toolbars/BottomToolbar.js +236 -0
  372. package/dist/react/workspace/toolbars/BottomToolbar.js.map +1 -0
  373. package/dist/react/workspace/toolbars/RightToolbar.d.ts +8 -0
  374. package/dist/react/workspace/toolbars/RightToolbar.d.ts.map +1 -0
  375. package/dist/react/workspace/toolbars/RightToolbar.js +18 -0
  376. package/dist/react/workspace/toolbars/RightToolbar.js.map +1 -0
  377. package/dist/react/workspace/toolbars/TopToolbar.d.ts +41 -0
  378. package/dist/react/workspace/toolbars/TopToolbar.d.ts.map +1 -0
  379. package/dist/react/workspace/toolbars/TopToolbar.js +82 -0
  380. package/dist/react/workspace/toolbars/TopToolbar.js.map +1 -0
  381. package/dist/renderers/CandlestickRenderer.d.ts +13 -0
  382. package/dist/renderers/CandlestickRenderer.d.ts.map +1 -0
  383. package/dist/renderers/CandlestickRenderer.js +98 -0
  384. package/dist/renderers/CandlestickRenderer.js.map +1 -0
  385. package/dist/renderers/HistogramRenderer.d.ts +11 -0
  386. package/dist/renderers/HistogramRenderer.d.ts.map +1 -0
  387. package/dist/renderers/HistogramRenderer.js +50 -0
  388. package/dist/renderers/HistogramRenderer.js.map +1 -0
  389. package/dist/renderers/LineRenderer.d.ts +12 -0
  390. package/dist/renderers/LineRenderer.d.ts.map +1 -0
  391. package/dist/renderers/LineRenderer.js +64 -0
  392. package/dist/renderers/LineRenderer.js.map +1 -0
  393. package/dist/theme/colors.d.ts +4 -0
  394. package/dist/theme/colors.d.ts.map +1 -0
  395. package/dist/theme/colors.js +19 -0
  396. package/dist/theme/colors.js.map +1 -0
  397. package/dist/tools/barDivergenceCheck.d.ts +120 -0
  398. package/dist/tools/barDivergenceCheck.d.ts.map +1 -0
  399. package/dist/tools/barDivergenceCheck.js +200 -0
  400. package/dist/tools/barDivergenceCheck.js.map +1 -0
  401. package/dist/trading/TradingOverlayStore.d.ts +86 -0
  402. package/dist/trading/TradingOverlayStore.d.ts.map +1 -0
  403. package/dist/trading/TradingOverlayStore.js +139 -0
  404. package/dist/trading/TradingOverlayStore.js.map +1 -0
  405. package/dist/trading/UnmanagedIngestion.d.ts +91 -0
  406. package/dist/trading/UnmanagedIngestion.d.ts.map +1 -0
  407. package/dist/trading/UnmanagedIngestion.js +114 -0
  408. package/dist/trading/UnmanagedIngestion.js.map +1 -0
  409. package/dist/trading/__tests__/ManagedTradingController.test.d.ts +18 -0
  410. package/dist/trading/__tests__/ManagedTradingController.test.d.ts.map +1 -0
  411. package/dist/trading/__tests__/ManagedTradingController.test.js +271 -0
  412. package/dist/trading/__tests__/ManagedTradingController.test.js.map +1 -0
  413. package/dist/trading/__tests__/TradingOverlayStore.test.d.ts +16 -0
  414. package/dist/trading/__tests__/TradingOverlayStore.test.d.ts.map +1 -0
  415. package/dist/trading/__tests__/TradingOverlayStore.test.js +267 -0
  416. package/dist/trading/__tests__/TradingOverlayStore.test.js.map +1 -0
  417. package/dist/trading/__tests__/UnmanagedIngestion.test.d.ts +16 -0
  418. package/dist/trading/__tests__/UnmanagedIngestion.test.d.ts.map +1 -0
  419. package/dist/trading/__tests__/UnmanagedIngestion.test.js +170 -0
  420. package/dist/trading/__tests__/UnmanagedIngestion.test.js.map +1 -0
  421. package/dist/trading/managed/ManagedTradingController.d.ts +110 -0
  422. package/dist/trading/managed/ManagedTradingController.d.ts.map +1 -0
  423. package/dist/trading/managed/ManagedTradingController.js +247 -0
  424. package/dist/trading/managed/ManagedTradingController.js.map +1 -0
  425. package/dist/trading/managed/managedCapabilities.d.ts +45 -0
  426. package/dist/trading/managed/managedCapabilities.d.ts.map +1 -0
  427. package/dist/trading/managed/managedCapabilities.js +79 -0
  428. package/dist/trading/managed/managedCapabilities.js.map +1 -0
  429. package/dist/trading/managed/managedTypes.d.ts +122 -0
  430. package/dist/trading/managed/managedTypes.d.ts.map +1 -0
  431. package/dist/trading/managed/managedTypes.js +13 -0
  432. package/dist/trading/managed/managedTypes.js.map +1 -0
  433. package/dist/trading/tradingTypes.d.ts +89 -0
  434. package/dist/trading/tradingTypes.d.ts.map +1 -0
  435. package/dist/trading/tradingTypes.js +8 -0
  436. package/dist/trading/tradingTypes.js.map +1 -0
  437. package/dist/tscript/TScriptIndicator.d.ts +41 -0
  438. package/dist/tscript/TScriptIndicator.d.ts.map +1 -0
  439. package/dist/tscript/TScriptIndicator.js +47 -0
  440. package/dist/tscript/TScriptIndicator.js.map +1 -0
  441. package/dist/tscript/ast.d.ts +89 -0
  442. package/dist/tscript/ast.d.ts.map +1 -0
  443. package/dist/tscript/ast.js +22 -0
  444. package/dist/tscript/ast.js.map +1 -0
  445. package/dist/tscript/lexer.d.ts +36 -0
  446. package/dist/tscript/lexer.d.ts.map +1 -0
  447. package/dist/tscript/lexer.js +187 -0
  448. package/dist/tscript/lexer.js.map +1 -0
  449. package/dist/tscript/parser.d.ts +50 -0
  450. package/dist/tscript/parser.d.ts.map +1 -0
  451. package/dist/tscript/parser.js +318 -0
  452. package/dist/tscript/parser.js.map +1 -0
  453. package/dist/tscript/runtime.d.ts +123 -0
  454. package/dist/tscript/runtime.d.ts.map +1 -0
  455. package/dist/tscript/runtime.js +475 -0
  456. package/dist/tscript/runtime.js.map +1 -0
  457. package/dist/tscript/series.d.ts +49 -0
  458. package/dist/tscript/series.d.ts.map +1 -0
  459. package/dist/tscript/series.js +79 -0
  460. package/dist/tscript/series.js.map +1 -0
  461. package/dist/types/IChart.d.ts +48 -0
  462. package/dist/types/IChart.d.ts.map +1 -0
  463. package/dist/types/IChart.js +2 -0
  464. package/dist/types/IChart.js.map +1 -0
  465. package/{src/types/IRenderer.ts → dist/types/IRenderer.d.ts} +2 -8
  466. package/dist/types/IRenderer.d.ts.map +1 -0
  467. package/dist/types/IRenderer.js +2 -0
  468. package/dist/types/IRenderer.js.map +1 -0
  469. package/dist/types/ISeries.d.ts +26 -0
  470. package/dist/types/ISeries.d.ts.map +1 -0
  471. package/dist/types/ISeries.js +2 -0
  472. package/dist/types/ISeries.js.map +1 -0
  473. package/package.json +32 -4
  474. package/src/__tests__/backwardCompatibility.test.ts +0 -191
  475. package/src/__tests__/candleInvariant.test.ts +0 -500
  476. package/src/__tests__/timeframeBoundary.test.ts +0 -583
  477. package/src/api/DrawingManager.ts +0 -188
  478. package/src/api/EventBus.ts +0 -53
  479. package/src/api/IndicatorDAG.ts +0 -389
  480. package/src/api/IndicatorRegistry.ts +0 -47
  481. package/src/api/LayoutManager.ts +0 -72
  482. package/src/api/PaneManager.ts +0 -129
  483. package/src/api/ReferenceAPI.ts +0 -195
  484. package/src/api/TChart.ts +0 -881
  485. package/src/api/drawing tools/fib gann menu/fibRetracement.ts +0 -27
  486. package/src/api/drawing tools/lines menu/crossLine.ts +0 -21
  487. package/src/api/drawing tools/lines menu/disjointChannel.ts +0 -74
  488. package/src/api/drawing tools/lines menu/extendedLine.ts +0 -22
  489. package/src/api/drawing tools/lines menu/flatTopBottom.ts +0 -45
  490. package/src/api/drawing tools/lines menu/horizontal.ts +0 -24
  491. package/src/api/drawing tools/lines menu/horizontalRay.ts +0 -25
  492. package/src/api/drawing tools/lines menu/infoLine.ts +0 -127
  493. package/src/api/drawing tools/lines menu/insidePitchfork.ts +0 -21
  494. package/src/api/drawing tools/lines menu/modifiedSchiffPitchfork.ts +0 -18
  495. package/src/api/drawing tools/lines menu/parallelChannel.ts +0 -47
  496. package/src/api/drawing tools/lines menu/pitchfork.ts +0 -15
  497. package/src/api/drawing tools/lines menu/ray.ts +0 -28
  498. package/src/api/drawing tools/lines menu/regressionTrend.ts +0 -157
  499. package/src/api/drawing tools/lines menu/schiffPitchfork.ts +0 -18
  500. package/src/api/drawing tools/lines menu/trendAngle.ts +0 -64
  501. package/src/api/drawing tools/lines menu/trendline.ts +0 -16
  502. package/src/api/drawing tools/lines menu/vertical.ts +0 -16
  503. package/src/api/drawing tools/shapes menu/rectangle.ts +0 -24
  504. package/src/api/drawing tools/shapes menu/text.ts +0 -30
  505. package/src/api/drawingUtils.ts +0 -82
  506. package/src/core/CanvasLayer.ts +0 -77
  507. package/src/core/Chart.ts +0 -917
  508. package/src/core/CoordTransform.ts +0 -282
  509. package/src/core/Crosshair.ts +0 -207
  510. package/src/core/IndicatorEngine.ts +0 -216
  511. package/src/core/InteractionManager.ts +0 -899
  512. package/src/core/PriceScale.ts +0 -133
  513. package/src/core/Series.ts +0 -132
  514. package/src/core/TimeScale.ts +0 -175
  515. package/src/datafeed/DatafeedConnector.ts +0 -300
  516. package/src/engine/CandleEngine.ts +0 -458
  517. package/src/engine/__tests__/CandleEngine.test.ts +0 -402
  518. package/src/engine/candleInvariants.ts +0 -172
  519. package/src/index.ts +0 -190
  520. package/src/licensing/ChartRuntimeResolver.ts +0 -380
  521. package/src/licensing/LicenseManager.ts +0 -131
  522. package/src/licensing/__tests__/ChartRuntimeResolver.test.ts +0 -207
  523. package/src/licensing/__tests__/LicenseManager.test.ts +0 -180
  524. package/src/licensing/licenseTypes.ts +0 -19
  525. package/src/pine/PineCompiler.ts +0 -68
  526. package/src/pine/diagnostics.ts +0 -30
  527. package/src/pine/pine-ast.ts +0 -163
  528. package/src/pine/pine-lexer.ts +0 -265
  529. package/src/pine/pine-parser.ts +0 -439
  530. package/src/pine/pine-transpiler.ts +0 -301
  531. package/src/pixi/LayerName.ts +0 -35
  532. package/src/pixi/PixiCandlestickRenderer.ts +0 -125
  533. package/src/pixi/PixiChart.ts +0 -425
  534. package/src/pixi/PixiCrosshairRenderer.ts +0 -134
  535. package/src/pixi/PixiDrawingRenderer.ts +0 -121
  536. package/src/pixi/PixiGridRenderer.ts +0 -136
  537. package/src/pixi/PixiLayerManager.ts +0 -102
  538. package/src/renderers/CandlestickRenderer.ts +0 -130
  539. package/src/renderers/HistogramRenderer.ts +0 -63
  540. package/src/renderers/LineRenderer.ts +0 -77
  541. package/src/theme/colors.ts +0 -21
  542. package/src/tools/barDivergenceCheck.ts +0 -305
  543. package/src/trading/TradingOverlayStore.ts +0 -161
  544. package/src/trading/UnmanagedIngestion.ts +0 -156
  545. package/src/trading/__tests__/ManagedTradingController.test.ts +0 -338
  546. package/src/trading/__tests__/TradingOverlayStore.test.ts +0 -323
  547. package/src/trading/__tests__/UnmanagedIngestion.test.ts +0 -205
  548. package/src/trading/managed/ManagedTradingController.ts +0 -292
  549. package/src/trading/managed/managedCapabilities.ts +0 -98
  550. package/src/trading/managed/managedTypes.ts +0 -151
  551. package/src/trading/tradingTypes.ts +0 -135
  552. package/src/tscript/TScriptIndicator.ts +0 -54
  553. package/src/tscript/ast.ts +0 -105
  554. package/src/tscript/lexer.ts +0 -190
  555. package/src/tscript/parser.ts +0 -334
  556. package/src/tscript/runtime.ts +0 -525
  557. package/src/tscript/series.ts +0 -84
  558. package/src/types/IChart.ts +0 -56
  559. package/src/types/ISeries.ts +0 -30
  560. package/tsconfig.json +0 -22
  561. package/tsup.config.ts +0 -15
  562. package/vitest.config.ts +0 -25
@@ -0,0 +1,120 @@
1
+ /**
2
+ * First-Divergence Bar Comparison Tool
3
+ *
4
+ * Compares OHLCV bars from multiple data sources (provider REST, database,
5
+ * aggregated from 1m, SDK engine) and reports the **first** mismatch found.
6
+ *
7
+ * Usage:
8
+ *
9
+ * import { compareSources, checkAllSources, formatReport } from '@forgecharts/sdk/tools/barDivergenceCheck';
10
+ *
11
+ * const report = compareSources(
12
+ * { source: 'provider', bars: providerBars },
13
+ * { source: 'database', bars: databaseBars },
14
+ * '1h',
15
+ * 'BINANCE:BTCUSDT',
16
+ * from,
17
+ * to,
18
+ * );
19
+ *
20
+ * if (report.diverged) console.log(formatReport(report));
21
+ *
22
+ * All bar arrays are expected to contain Unix **second** timestamps in the
23
+ * `time` field (matching the CandleBar.time convention). Use `from`/`to`
24
+ * as Unix seconds to scope the comparison window.
25
+ */
26
+ /** Identifies which pipeline stage produced a bar array. */
27
+ export type BarSource = 'provider' | 'database' | 'aggregated' | 'sdk';
28
+ /** Minimal OHLCV shape accepted by the divergence checker. */
29
+ export interface OhlcvBar {
30
+ /** Unix seconds (same as CandleBar.time). */
31
+ time: number;
32
+ open: number;
33
+ high: number;
34
+ low: number;
35
+ close: number;
36
+ volume?: number;
37
+ }
38
+ /** A labelled set of bars from one pipeline source. */
39
+ export interface SourceBars {
40
+ source: BarSource;
41
+ bars: readonly OhlcvBar[];
42
+ }
43
+ /** A single field-level difference between two bars at the same timestamp. */
44
+ export interface FieldDiff {
45
+ field: 'open' | 'high' | 'low' | 'close' | 'volume';
46
+ valueA: number;
47
+ valueB: number;
48
+ /** valueA − valueB */
49
+ delta: number;
50
+ }
51
+ /** Full description of a single mismatched candle. */
52
+ export interface BarMismatch {
53
+ /** Unix seconds — the candle open time where divergence was first detected. */
54
+ time: number;
55
+ /** Canonical candle-open boundary in milliseconds for the given timeframe. */
56
+ bucketStartMs: number;
57
+ sourceA: BarSource;
58
+ sourceB: BarSource;
59
+ /** OHLCV field deltas — empty when the only problem is a missing bar. */
60
+ differences: FieldDiff[];
61
+ /**
62
+ * True when the two bars carry the same `time` but their canonical
63
+ * `bucketStart` values differ — indicates a misaligned timestamp on one side.
64
+ */
65
+ bucketMismatch: boolean;
66
+ /** Human-readable diagnostic notes. */
67
+ notes: string[];
68
+ }
69
+ /** Summary of a pairwise source comparison. */
70
+ export interface DivergenceReport {
71
+ symbol: string;
72
+ timeframe: string;
73
+ /** Unix seconds — inclusive window start. */
74
+ from: number;
75
+ /** Unix seconds — inclusive window end. */
76
+ to: number;
77
+ diverged: boolean;
78
+ /** The first mismatch found, or null when the sources are identical. */
79
+ firstMismatch: BarMismatch | null;
80
+ totalMismatches: number;
81
+ /** Number of bars from source A inside [from, to]. */
82
+ sourceACount: number;
83
+ /** Number of bars from source B inside [from, to]. */
84
+ sourceBCount: number;
85
+ }
86
+ /**
87
+ * Compare all timestamps from both sources inside [from, to] and return the
88
+ * first mismatch found, scanning oldest-first.
89
+ *
90
+ * Mismatch criteria (any one triggers a report):
91
+ * 1. Bar present in one source but absent in the other.
92
+ * 2. OHLCV field values differ by more than floating-point epsilon.
93
+ * 3. Canonical `getBucketStart` for the bar's time differs between sources
94
+ * (indicates one source has a misaligned timestamp).
95
+ *
96
+ * @param a Source A bars.
97
+ * @param b Source B bars.
98
+ * @param timeframe Canonical timeframe label (e.g. `'1h'`, `'1w'`).
99
+ * @param symbol Symbol string — stored in the report for identification.
100
+ * @param from Window start, Unix seconds (inclusive).
101
+ * @param to Window end, Unix seconds (inclusive).
102
+ */
103
+ export declare function compareSources(a: SourceBars, b: SourceBars, timeframe: string, symbol: string, from: number, to: number): DivergenceReport;
104
+ /**
105
+ * Run all pairwise comparisons across every combination of the provided sources.
106
+ *
107
+ * For N sources this produces N*(N-1)/2 reports. Use `formatReport` to render
108
+ * each one for console output.
109
+ */
110
+ export declare function checkAllSources(sources: SourceBars[], symbol: string, timeframe: string, from: number, to: number): DivergenceReport[];
111
+ /**
112
+ * Render a `DivergenceReport` as a multi-line human-readable string suitable
113
+ * for console output or log files.
114
+ *
115
+ * @example
116
+ * const report = compareSources(a, b, '1h', 'BINANCE:BTCUSDT', from, to);
117
+ * console.log(formatReport(report));
118
+ */
119
+ export declare function formatReport(report: DivergenceReport): string;
120
+ //# sourceMappingURL=barDivergenceCheck.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"barDivergenceCheck.d.ts","sourceRoot":"","sources":["../../src/tools/barDivergenceCheck.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAMH,4DAA4D;AAC5D,MAAM,MAAM,SAAS,GAAG,UAAU,GAAG,UAAU,GAAG,YAAY,GAAG,KAAK,CAAC;AAEvE,8DAA8D;AAC9D,MAAM,WAAW,QAAQ;IACvB,6CAA6C;IAC7C,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,uDAAuD;AACvD,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,SAAS,CAAC;IAClB,IAAI,EAAE,SAAS,QAAQ,EAAE,CAAC;CAC3B;AAED,8EAA8E;AAC9E,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,KAAK,GAAG,OAAO,GAAG,QAAQ,CAAC;IACpD,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,sBAAsB;IACtB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,sDAAsD;AACtD,MAAM,WAAW,WAAW;IAC1B,+EAA+E;IAC/E,IAAI,EAAE,MAAM,CAAC;IACb,8EAA8E;IAC9E,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,SAAS,CAAC;IACnB,OAAO,EAAE,SAAS,CAAC;IACnB,yEAAyE;IACzE,WAAW,EAAE,SAAS,EAAE,CAAC;IACzB;;;OAGG;IACH,cAAc,EAAE,OAAO,CAAC;IACxB,uCAAuC;IACvC,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,+CAA+C;AAC/C,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,6CAA6C;IAC7C,IAAI,EAAE,MAAM,CAAC;IACb,2CAA2C;IAC3C,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,OAAO,CAAC;IAClB,wEAAwE;IACxE,aAAa,EAAE,WAAW,GAAG,IAAI,CAAC;IAClC,eAAe,EAAE,MAAM,CAAC;IACxB,sDAAsD;IACtD,YAAY,EAAE,MAAM,CAAC;IACrB,sDAAsD;IACtD,YAAY,EAAE,MAAM,CAAC;CACtB;AAwBD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,cAAc,CAC5B,CAAC,EAAE,UAAU,EACb,CAAC,EAAE,UAAU,EACb,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,MAAM,GACT,gBAAgB,CAmGlB;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAC7B,OAAO,EAAE,UAAU,EAAE,EACrB,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,MAAM,GACT,gBAAgB,EAAE,CAQpB;AAID;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM,CA6B7D"}
@@ -0,0 +1,200 @@
1
+ /**
2
+ * First-Divergence Bar Comparison Tool
3
+ *
4
+ * Compares OHLCV bars from multiple data sources (provider REST, database,
5
+ * aggregated from 1m, SDK engine) and reports the **first** mismatch found.
6
+ *
7
+ * Usage:
8
+ *
9
+ * import { compareSources, checkAllSources, formatReport } from '@forgecharts/sdk/tools/barDivergenceCheck';
10
+ *
11
+ * const report = compareSources(
12
+ * { source: 'provider', bars: providerBars },
13
+ * { source: 'database', bars: databaseBars },
14
+ * '1h',
15
+ * 'BINANCE:BTCUSDT',
16
+ * from,
17
+ * to,
18
+ * );
19
+ *
20
+ * if (report.diverged) console.log(formatReport(report));
21
+ *
22
+ * All bar arrays are expected to contain Unix **second** timestamps in the
23
+ * `time` field (matching the CandleBar.time convention). Use `from`/`to`
24
+ * as Unix seconds to scope the comparison window.
25
+ */
26
+ import { getBucketStart } from '@forgecharts/shared';
27
+ // ─── Helpers ──────────────────────────────────────────────────────────────────
28
+ /** Index bars by their Unix-second open time for O(1) lookup. */
29
+ function indexByTime(bars) {
30
+ const map = new Map();
31
+ for (const bar of bars) {
32
+ // Last-write-wins if the source has duplicate timestamps
33
+ map.set(bar.time, bar);
34
+ }
35
+ return map;
36
+ }
37
+ /**
38
+ * Compare two numeric values with a floating-point epsilon tolerance.
39
+ * Returns true when they differ by more than the tolerance.
40
+ */
41
+ function differ(a, b, eps = 1e-9) {
42
+ return Math.abs(a - b) > eps;
43
+ }
44
+ // ─── Core comparison ──────────────────────────────────────────────────────────
45
+ /**
46
+ * Compare all timestamps from both sources inside [from, to] and return the
47
+ * first mismatch found, scanning oldest-first.
48
+ *
49
+ * Mismatch criteria (any one triggers a report):
50
+ * 1. Bar present in one source but absent in the other.
51
+ * 2. OHLCV field values differ by more than floating-point epsilon.
52
+ * 3. Canonical `getBucketStart` for the bar's time differs between sources
53
+ * (indicates one source has a misaligned timestamp).
54
+ *
55
+ * @param a Source A bars.
56
+ * @param b Source B bars.
57
+ * @param timeframe Canonical timeframe label (e.g. `'1h'`, `'1w'`).
58
+ * @param symbol Symbol string — stored in the report for identification.
59
+ * @param from Window start, Unix seconds (inclusive).
60
+ * @param to Window end, Unix seconds (inclusive).
61
+ */
62
+ export function compareSources(a, b, timeframe, symbol, from, to) {
63
+ const aIndex = indexByTime(a.bars);
64
+ const bIndex = indexByTime(b.bars);
65
+ // All timestamps seen in either source, filtered to the requested window
66
+ const allTimes = new Set([...aIndex.keys(), ...bIndex.keys()]);
67
+ const sortedTimes = Array.from(allTimes)
68
+ .filter(t => t >= from && t <= to)
69
+ .sort((x, y) => x - y);
70
+ let totalMismatches = 0;
71
+ let firstMismatch = null;
72
+ const countA = a.bars.filter(bar => bar.time >= from && bar.time <= to).length;
73
+ const countB = b.bars.filter(bar => bar.time >= from && bar.time <= to).length;
74
+ for (const time of sortedTimes) {
75
+ const barA = aIndex.get(time);
76
+ const barB = bIndex.get(time);
77
+ // ── Missing bar ────────────────────────────────────────────────────────
78
+ if (!barA || !barB) {
79
+ totalMismatches++;
80
+ if (!firstMismatch) {
81
+ const notes = [];
82
+ if (!barA)
83
+ notes.push(`${a.source} is missing bar at time=${time}`);
84
+ if (!barB)
85
+ notes.push(`${b.source} is missing bar at time=${time}`);
86
+ firstMismatch = {
87
+ time,
88
+ bucketStartMs: getBucketStart(time * 1000, timeframe),
89
+ sourceA: a.source,
90
+ sourceB: b.source,
91
+ differences: [],
92
+ bucketMismatch: false,
93
+ notes,
94
+ };
95
+ }
96
+ continue;
97
+ }
98
+ // ── OHLCV field comparison ─────────────────────────────────────────────
99
+ const diffs = [];
100
+ const OHLCV_FIELDS = [
101
+ 'open', 'high', 'low', 'close', 'volume',
102
+ ];
103
+ for (const field of OHLCV_FIELDS) {
104
+ const vA = barA[field] ?? 0;
105
+ const vB = barB[field] ?? 0;
106
+ if (differ(vA, vB)) {
107
+ diffs.push({ field, valueA: vA, valueB: vB, delta: vA - vB });
108
+ }
109
+ }
110
+ // ── Bucket alignment comparison ────────────────────────────────────────
111
+ const bucketA = getBucketStart(barA.time * 1000, timeframe);
112
+ const bucketB = getBucketStart(barB.time * 1000, timeframe);
113
+ const bucketMismatch = bucketA !== bucketB;
114
+ const notes = [];
115
+ if (bucketMismatch) {
116
+ notes.push(`bucket start mismatch: ${a.source}=${bucketA}ms vs ${b.source}=${bucketB}ms ` +
117
+ `(delta=${bucketA - bucketB} ms)`);
118
+ }
119
+ for (const diff of diffs) {
120
+ notes.push(`${diff.field}: ${a.source}=${diff.valueA} vs ${b.source}=${diff.valueB} ` +
121
+ `(delta=${diff.delta.toPrecision(6)})`);
122
+ }
123
+ if (diffs.length > 0 || bucketMismatch) {
124
+ totalMismatches++;
125
+ if (!firstMismatch) {
126
+ firstMismatch = {
127
+ time,
128
+ bucketStartMs: bucketA,
129
+ sourceA: a.source,
130
+ sourceB: b.source,
131
+ differences: diffs,
132
+ bucketMismatch,
133
+ notes,
134
+ };
135
+ }
136
+ }
137
+ }
138
+ return {
139
+ symbol,
140
+ timeframe,
141
+ from,
142
+ to,
143
+ diverged: totalMismatches > 0,
144
+ firstMismatch,
145
+ totalMismatches,
146
+ sourceACount: countA,
147
+ sourceBCount: countB,
148
+ };
149
+ }
150
+ /**
151
+ * Run all pairwise comparisons across every combination of the provided sources.
152
+ *
153
+ * For N sources this produces N*(N-1)/2 reports. Use `formatReport` to render
154
+ * each one for console output.
155
+ */
156
+ export function checkAllSources(sources, symbol, timeframe, from, to) {
157
+ const reports = [];
158
+ for (let i = 0; i < sources.length; i++) {
159
+ for (let j = i + 1; j < sources.length; j++) {
160
+ reports.push(compareSources(sources[i], sources[j], timeframe, symbol, from, to));
161
+ }
162
+ }
163
+ return reports;
164
+ }
165
+ // ─── Formatter ───────────────────────────────────────────────────────────────
166
+ /**
167
+ * Render a `DivergenceReport` as a multi-line human-readable string suitable
168
+ * for console output or log files.
169
+ *
170
+ * @example
171
+ * const report = compareSources(a, b, '1h', 'BINANCE:BTCUSDT', from, to);
172
+ * console.log(formatReport(report));
173
+ */
174
+ export function formatReport(report) {
175
+ const lines = [];
176
+ const status = report.diverged
177
+ ? `DIVERGED (${report.totalMismatches} mismatch${report.totalMismatches === 1 ? '' : 'es'})`
178
+ : 'IDENTICAL';
179
+ lines.push('─'.repeat(72));
180
+ lines.push(`Bar Divergence Report — ${status}`);
181
+ lines.push(` Symbol : ${report.symbol}`);
182
+ lines.push(` Timeframe : ${report.timeframe}`);
183
+ lines.push(` Window : ${report.from} → ${report.to} (Unix seconds)`);
184
+ lines.push(` Bars : sourceA=${report.sourceACount} sourceB=${report.sourceBCount}`);
185
+ if (report.firstMismatch) {
186
+ const m = report.firstMismatch;
187
+ lines.push('');
188
+ lines.push(` First mismatch at time=${m.time} (bucketStart=${m.bucketStartMs} ms)`);
189
+ lines.push(` Sources : ${m.sourceA} vs ${m.sourceB}`);
190
+ if (m.bucketMismatch) {
191
+ lines.push(` ✗ Bucket alignment differs`);
192
+ }
193
+ for (const note of m.notes) {
194
+ lines.push(` · ${note}`);
195
+ }
196
+ }
197
+ lines.push('─'.repeat(72));
198
+ return lines.join('\n');
199
+ }
200
+ //# sourceMappingURL=barDivergenceCheck.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"barDivergenceCheck.js","sourceRoot":"","sources":["../../src/tools/barDivergenceCheck.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAsErD,iFAAiF;AAEjF,iEAAiE;AACjE,SAAS,WAAW,CAAC,IAAyB;IAC5C,MAAM,GAAG,GAAG,IAAI,GAAG,EAAoB,CAAC;IACxC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,yDAAyD;QACzD,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IACzB,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;GAGG;AACH,SAAS,MAAM,CAAC,CAAS,EAAE,CAAS,EAAE,GAAG,GAAG,IAAI;IAC9C,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC;AAC/B,CAAC;AAED,iFAAiF;AAEjF;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,cAAc,CAC5B,CAAa,EACb,CAAa,EACb,SAAiB,EACjB,MAAc,EACd,IAAY,EACZ,EAAU;IAEV,MAAM,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACnC,MAAM,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAEnC,yEAAyE;IACzE,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,IAAI,EAAE,EAAE,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IAC/D,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC;SACrC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;SACjC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAEzB,IAAI,eAAe,GAAG,CAAC,CAAC;IACxB,IAAI,aAAa,GAAuB,IAAI,CAAC;IAE7C,MAAM,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,IAAI,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;IAC/E,MAAM,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,IAAI,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;IAE/E,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE,CAAC;QAC/B,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC9B,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAE9B,0EAA0E;QAC1E,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACnB,eAAe,EAAE,CAAC;YAClB,IAAI,CAAC,aAAa,EAAE,CAAC;gBACnB,MAAM,KAAK,GAAa,EAAE,CAAC;gBAC3B,IAAI,CAAC,IAAI;oBAAE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,2BAA2B,IAAI,EAAE,CAAC,CAAC;gBACpE,IAAI,CAAC,IAAI;oBAAE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,2BAA2B,IAAI,EAAE,CAAC,CAAC;gBACpE,aAAa,GAAG;oBACd,IAAI;oBACJ,aAAa,EAAE,cAAc,CAAC,IAAI,GAAG,IAAI,EAAE,SAAS,CAAC;oBACrD,OAAO,EAAE,CAAC,CAAC,MAAM;oBACjB,OAAO,EAAE,CAAC,CAAC,MAAM;oBACjB,WAAW,EAAE,EAAE;oBACf,cAAc,EAAE,KAAK;oBACrB,KAAK;iBACN,CAAC;YACJ,CAAC;YACD,SAAS;QACX,CAAC;QAED,0EAA0E;QAC1E,MAAM,KAAK,GAAgB,EAAE,CAAC;QAC9B,MAAM,YAAY,GAAwD;YACxE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ;SACzC,CAAC;QACF,KAAK,MAAM,KAAK,IAAI,YAAY,EAAE,CAAC;YACjC,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC5B,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC5B,IAAI,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;gBACnB,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;YAChE,CAAC;QACH,CAAC;QAED,0EAA0E;QAC1E,MAAM,OAAO,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,EAAE,SAAS,CAAC,CAAC;QAC5D,MAAM,OAAO,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,EAAE,SAAS,CAAC,CAAC;QAC5D,MAAM,cAAc,GAAG,OAAO,KAAK,OAAO,CAAC;QAE3C,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,IAAI,cAAc,EAAE,CAAC;YACnB,KAAK,CAAC,IAAI,CACR,0BAA0B,CAAC,CAAC,MAAM,IAAI,OAAO,SAAS,CAAC,CAAC,MAAM,IAAI,OAAO,KAAK;gBAC9E,UAAU,OAAO,GAAG,OAAO,MAAM,CAClC,CAAC;QACJ,CAAC;QACD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,KAAK,CAAC,IAAI,CACR,GAAG,IAAI,CAAC,KAAK,KAAK,CAAC,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,OAAO,CAAC,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,GAAG;gBAC1E,UAAU,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,CACvC,CAAC;QACJ,CAAC;QAED,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,cAAc,EAAE,CAAC;YACvC,eAAe,EAAE,CAAC;YAClB,IAAI,CAAC,aAAa,EAAE,CAAC;gBACnB,aAAa,GAAG;oBACd,IAAI;oBACJ,aAAa,EAAE,OAAO;oBACtB,OAAO,EAAE,CAAC,CAAC,MAAM;oBACjB,OAAO,EAAE,CAAC,CAAC,MAAM;oBACjB,WAAW,EAAE,KAAK;oBAClB,cAAc;oBACd,KAAK;iBACN,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO;QACL,MAAM;QACN,SAAS;QACT,IAAI;QACJ,EAAE;QACF,QAAQ,EAAE,eAAe,GAAG,CAAC;QAC7B,aAAa;QACb,eAAe;QACf,YAAY,EAAE,MAAM;QACpB,YAAY,EAAE,MAAM;KACrB,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAC7B,OAAqB,EACrB,MAAc,EACd,SAAiB,EACjB,IAAY,EACZ,EAAU;IAEV,MAAM,OAAO,GAAuB,EAAE,CAAC;IACvC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACxC,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC5C,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAE,EAAE,OAAO,CAAC,CAAC,CAAE,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC;QACtF,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,gFAAgF;AAEhF;;;;;;;GAOG;AACH,MAAM,UAAU,YAAY,CAAC,MAAwB;IACnD,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ;QAC5B,CAAC,CAAC,aAAa,MAAM,CAAC,eAAe,YAAY,MAAM,CAAC,eAAe,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,GAAG;QAC5F,CAAC,CAAC,WAAW,CAAC;IAEhB,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;IAC3B,KAAK,CAAC,IAAI,CAAC,2BAA2B,MAAM,EAAE,CAAC,CAAC;IAChD,KAAK,CAAC,IAAI,CAAC,iBAAiB,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;IAC7C,KAAK,CAAC,IAAI,CAAC,iBAAiB,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;IAChD,KAAK,CAAC,IAAI,CAAC,iBAAiB,MAAM,CAAC,IAAI,MAAM,MAAM,CAAC,EAAE,iBAAiB,CAAC,CAAC;IACzE,KAAK,CAAC,IAAI,CAAC,yBAAyB,MAAM,CAAC,YAAY,aAAa,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC;IAE3F,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;QACzB,MAAM,CAAC,GAAG,MAAM,CAAC,aAAa,CAAC;QAC/B,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC,IAAI,iBAAiB,CAAC,CAAC,aAAa,MAAM,CAAC,CAAC;QACrF,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,OAAO,SAAS,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;QAC1D,IAAI,CAAC,CAAC,cAAc,EAAE,CAAC;YACrB,KAAK,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;QAC7C,CAAC;QACD,KAAK,MAAM,IAAI,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;YAC3B,KAAK,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;IAC3B,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
@@ -0,0 +1,86 @@
1
+ /**
2
+ * TradingOverlayStore
3
+ *
4
+ * Shared, mode-agnostic store for trade overlay state.
5
+ * Used by both unmanaged mode (externally supplied data) and managed mode
6
+ * (internally generated data from the managed trading service).
7
+ *
8
+ * Supports:
9
+ * - Full replace (setOrders / setPositions)
10
+ * - Incremental (upsertOrder / upsertPosition / pushExecution)
11
+ * - Remove by id (removeOrder / removePosition)
12
+ *
13
+ * Subscribers are notified via callbacks registered with onChange().
14
+ * The store is intentionally free of React/DOM dependencies so it can be
15
+ * consumed from any rendering layer (canvas, React, etc.).
16
+ *
17
+ * @example
18
+ * ```ts
19
+ * const store = new TradingOverlayStore();
20
+ *
21
+ * // Subscribe to changes (e.g. trigger a canvas repaint)
22
+ * store.onChange(() => chart.markDirty());
23
+ *
24
+ * // Feed data
25
+ * store.setOrders([...]);
26
+ * store.upsertOrder({ id: 'o1', role: 'entry', side: 'buy', ... });
27
+ * store.removeOrder('o1');
28
+ * ```
29
+ */
30
+ import type { ChartOrder, ChartPosition, ExecutionFill } from './tradingTypes';
31
+ type ChangeListener = () => void;
32
+ export declare class TradingOverlayStore {
33
+ private _orders;
34
+ private _positions;
35
+ private _fills;
36
+ private _listeners;
37
+ /**
38
+ * Register a callback that fires whenever any state changes.
39
+ * Returns an unsubscribe function.
40
+ */
41
+ onChange(listener: ChangeListener): () => void;
42
+ private _notify;
43
+ /** Replace the entire order set. */
44
+ setOrders(orders: ChartOrder[]): void;
45
+ /**
46
+ * Insert or replace a single order.
47
+ * Matching is done by `order.id`.
48
+ */
49
+ upsertOrder(order: ChartOrder): void;
50
+ /** Remove an order by id. Silent no-op if not found. */
51
+ removeOrder(orderId: string): void;
52
+ /** Returns a snapshot of all orders as an array (insertion order). */
53
+ getOrders(): ChartOrder[];
54
+ /** Returns orders that share the given `groupId`. */
55
+ getOrdersByGroup(groupId: string): ChartOrder[];
56
+ /** Replace the entire position set. */
57
+ setPositions(positions: ChartPosition[]): void;
58
+ /**
59
+ * Insert or replace a single position.
60
+ * Matching is done by `position.id`.
61
+ */
62
+ upsertPosition(position: ChartPosition): void;
63
+ /** Remove a position by id. Silent no-op if not found. */
64
+ removePosition(positionId: string): void;
65
+ /** Returns a snapshot of all positions as an array (insertion order). */
66
+ getPositions(): ChartPosition[];
67
+ /**
68
+ * Append an execution fill to the fill log.
69
+ * Fills are append-only — they are never updated or removed.
70
+ */
71
+ pushExecution(fill: ExecutionFill): void;
72
+ /** Returns all fills in insertion (chronological) order. */
73
+ getFills(): readonly ExecutionFill[];
74
+ /** Returns fills associated with a specific order id. */
75
+ getFillsByOrder(orderId: string): ExecutionFill[];
76
+ /** Wipes all overlay state (orders, positions, fills). */
77
+ clear(): void;
78
+ /** Returns the full overlay state as a plain object — useful for debug / serialisation. */
79
+ snapshot(): {
80
+ orders: ChartOrder[];
81
+ positions: ChartPosition[];
82
+ fills: readonly ExecutionFill[];
83
+ };
84
+ }
85
+ export {};
86
+ //# sourceMappingURL=TradingOverlayStore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TradingOverlayStore.d.ts","sourceRoot":"","sources":["../../src/trading/TradingOverlayStore.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAE/E,KAAK,cAAc,GAAG,MAAM,IAAI,CAAC;AAEjC,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,OAAO,CAAoC;IACnD,OAAO,CAAC,UAAU,CAAoC;IACtD,OAAO,CAAC,MAAM,CAA4B;IAE1C,OAAO,CAAC,UAAU,CAAwB;IAI1C;;;OAGG;IACH,QAAQ,CAAC,QAAQ,EAAE,cAAc,GAAG,MAAM,IAAI;IAO9C,OAAO,CAAC,OAAO;IAMf,oCAAoC;IACpC,SAAS,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,IAAI;IAMrC;;;OAGG;IACH,WAAW,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;IAKpC,wDAAwD;IACxD,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAIlC,sEAAsE;IACtE,SAAS,IAAI,UAAU,EAAE;IAIzB,qDAAqD;IACrD,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,EAAE;IAM/C,uCAAuC;IACvC,YAAY,CAAC,SAAS,EAAE,aAAa,EAAE,GAAG,IAAI;IAM9C;;;OAGG;IACH,cAAc,CAAC,QAAQ,EAAE,aAAa,GAAG,IAAI;IAK7C,0DAA0D;IAC1D,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAIxC,yEAAyE;IACzE,YAAY,IAAI,aAAa,EAAE;IAM/B;;;OAGG;IACH,aAAa,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI;IAKxC,4DAA4D;IAC5D,QAAQ,IAAI,SAAS,aAAa,EAAE;IAIpC,yDAAyD;IACzD,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,aAAa,EAAE;IAMjD,0DAA0D;IAC1D,KAAK,IAAI,IAAI;IASb,2FAA2F;IAC3F,QAAQ,IAAI;QAAE,MAAM,EAAE,UAAU,EAAE,CAAC;QAAC,SAAS,EAAE,aAAa,EAAE,CAAC;QAAC,KAAK,EAAE,SAAS,aAAa,EAAE,CAAA;KAAE;CAOlG"}
@@ -0,0 +1,139 @@
1
+ /**
2
+ * TradingOverlayStore
3
+ *
4
+ * Shared, mode-agnostic store for trade overlay state.
5
+ * Used by both unmanaged mode (externally supplied data) and managed mode
6
+ * (internally generated data from the managed trading service).
7
+ *
8
+ * Supports:
9
+ * - Full replace (setOrders / setPositions)
10
+ * - Incremental (upsertOrder / upsertPosition / pushExecution)
11
+ * - Remove by id (removeOrder / removePosition)
12
+ *
13
+ * Subscribers are notified via callbacks registered with onChange().
14
+ * The store is intentionally free of React/DOM dependencies so it can be
15
+ * consumed from any rendering layer (canvas, React, etc.).
16
+ *
17
+ * @example
18
+ * ```ts
19
+ * const store = new TradingOverlayStore();
20
+ *
21
+ * // Subscribe to changes (e.g. trigger a canvas repaint)
22
+ * store.onChange(() => chart.markDirty());
23
+ *
24
+ * // Feed data
25
+ * store.setOrders([...]);
26
+ * store.upsertOrder({ id: 'o1', role: 'entry', side: 'buy', ... });
27
+ * store.removeOrder('o1');
28
+ * ```
29
+ */
30
+ export class TradingOverlayStore {
31
+ _orders = new Map();
32
+ _positions = new Map();
33
+ _fills = [];
34
+ _listeners = [];
35
+ // ── Change subscription ──────────────────────────────────────────────────────
36
+ /**
37
+ * Register a callback that fires whenever any state changes.
38
+ * Returns an unsubscribe function.
39
+ */
40
+ onChange(listener) {
41
+ this._listeners.push(listener);
42
+ return () => {
43
+ this._listeners = this._listeners.filter(l => l !== listener);
44
+ };
45
+ }
46
+ _notify() {
47
+ for (const l of this._listeners)
48
+ l();
49
+ }
50
+ // ── Orders ───────────────────────────────────────────────────────────────────
51
+ /** Replace the entire order set. */
52
+ setOrders(orders) {
53
+ this._orders.clear();
54
+ for (const o of orders)
55
+ this._orders.set(o.id, o);
56
+ this._notify();
57
+ }
58
+ /**
59
+ * Insert or replace a single order.
60
+ * Matching is done by `order.id`.
61
+ */
62
+ upsertOrder(order) {
63
+ this._orders.set(order.id, order);
64
+ this._notify();
65
+ }
66
+ /** Remove an order by id. Silent no-op if not found. */
67
+ removeOrder(orderId) {
68
+ if (this._orders.delete(orderId))
69
+ this._notify();
70
+ }
71
+ /** Returns a snapshot of all orders as an array (insertion order). */
72
+ getOrders() {
73
+ return Array.from(this._orders.values());
74
+ }
75
+ /** Returns orders that share the given `groupId`. */
76
+ getOrdersByGroup(groupId) {
77
+ return this.getOrders().filter(o => o.groupId === groupId);
78
+ }
79
+ // ── Positions ────────────────────────────────────────────────────────────────
80
+ /** Replace the entire position set. */
81
+ setPositions(positions) {
82
+ this._positions.clear();
83
+ for (const p of positions)
84
+ this._positions.set(p.id, p);
85
+ this._notify();
86
+ }
87
+ /**
88
+ * Insert or replace a single position.
89
+ * Matching is done by `position.id`.
90
+ */
91
+ upsertPosition(position) {
92
+ this._positions.set(position.id, position);
93
+ this._notify();
94
+ }
95
+ /** Remove a position by id. Silent no-op if not found. */
96
+ removePosition(positionId) {
97
+ if (this._positions.delete(positionId))
98
+ this._notify();
99
+ }
100
+ /** Returns a snapshot of all positions as an array (insertion order). */
101
+ getPositions() {
102
+ return Array.from(this._positions.values());
103
+ }
104
+ // ── Fills ────────────────────────────────────────────────────────────────────
105
+ /**
106
+ * Append an execution fill to the fill log.
107
+ * Fills are append-only — they are never updated or removed.
108
+ */
109
+ pushExecution(fill) {
110
+ this._fills.push(fill);
111
+ this._notify();
112
+ }
113
+ /** Returns all fills in insertion (chronological) order. */
114
+ getFills() {
115
+ return this._fills;
116
+ }
117
+ /** Returns fills associated with a specific order id. */
118
+ getFillsByOrder(orderId) {
119
+ return this._fills.filter(f => f.orderId === orderId);
120
+ }
121
+ // ── Bulk clear ───────────────────────────────────────────────────────────────
122
+ /** Wipes all overlay state (orders, positions, fills). */
123
+ clear() {
124
+ this._orders.clear();
125
+ this._positions.clear();
126
+ this._fills = [];
127
+ this._notify();
128
+ }
129
+ // ── Snapshot ─────────────────────────────────────────────────────────────────
130
+ /** Returns the full overlay state as a plain object — useful for debug / serialisation. */
131
+ snapshot() {
132
+ return {
133
+ orders: this.getOrders(),
134
+ positions: this.getPositions(),
135
+ fills: this.getFills(),
136
+ };
137
+ }
138
+ }
139
+ //# sourceMappingURL=TradingOverlayStore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TradingOverlayStore.js","sourceRoot":"","sources":["../../src/trading/TradingOverlayStore.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,91 @@
1
+ /**
2
+ * UnmanagedIngestion
3
+ *
4
+ * External candle data ingestion for unmanaged mode.
5
+ *
6
+ * In unmanaged mode the client owns their data pipeline. They pass
7
+ * normalised candle data to us; this layer validates the license gate,
8
+ * delegates to the existing CandleEngine for bucket management, and
9
+ * notifies callers via callbacks mirroring the CandleEngine contract.
10
+ *
11
+ * Critical constraint: the default RapidAPI-backed datafeed is completely
12
+ * untouched. UnmanagedIngestion is an additive, opt-in path.
13
+ *
14
+ * Candle rules (matches CandleEngine behaviour):
15
+ * same timeMs → update current candle
16
+ * newer timeMs → append / new bucket
17
+ * older timeMs → silently ignored (logged in debug mode)
18
+ *
19
+ * @example
20
+ * ```ts
21
+ * const ingestion = new UnmanagedIngestion('1m', {
22
+ * onBarUpdated: (bar) => series.update(bar),
23
+ * onResync: (bars) => series.setData(bars),
24
+ * });
25
+ *
26
+ * // Feed a full history snapshot first
27
+ * ingestion.setHistory(historicalBars);
28
+ *
29
+ * // Then stream live ticks
30
+ * ingestion.pushCandle(latestBar);
31
+ * ```
32
+ */
33
+ import type { CandleBar, UpdateResult, GapInfo } from '../engine/CandleEngine';
34
+ import type { CandleInput } from './tradingTypes';
35
+ import type { Timeframe } from '@forgecharts/types';
36
+ export interface UnmanagedIngestionOptions {
37
+ /** Enable debug logging on the underlying CandleEngine. */
38
+ debug?: boolean;
39
+ /**
40
+ * Fired after every bar mutation (update or append from a live push).
41
+ * Corresponds to CandleEngine.onBarUpdated.
42
+ */
43
+ onBarUpdated?: (bar: CandleBar, result: UpdateResult) => void;
44
+ /**
45
+ * Fired when the full bar array changes (after setHistory or gap backfill).
46
+ * The chart adapter should call `series.setData(bars)`.
47
+ */
48
+ onResync?: (bars: readonly CandleBar[]) => void;
49
+ /** Fired when a candle bucket closes. */
50
+ onBarClosed?: (bar: CandleBar) => void;
51
+ /** Fired when the engine detects skipped buckets in the live stream. */
52
+ onGapDetected?: (info: GapInfo) => void;
53
+ }
54
+ export declare class UnmanagedIngestion {
55
+ private readonly _engine;
56
+ private readonly _opts;
57
+ private _timeframe;
58
+ constructor(timeframe: Timeframe, opts?: UnmanagedIngestionOptions);
59
+ private _assertUnmanaged;
60
+ /**
61
+ * Load a full historical bar snapshot.
62
+ * Replaces the engine's bar array and triggers `onResync` so the chart
63
+ * series is fully redrawn.
64
+ *
65
+ * Call this once at startup (or on symbol/interval change) before
66
+ * streaming live candles via `pushCandle`.
67
+ *
68
+ * @throws If the active license is not in unmanaged mode.
69
+ */
70
+ setHistory(bars: CandleInput[]): void;
71
+ /**
72
+ * Push a single live candle tick.
73
+ *
74
+ * Behaviour follows CandleEngine rules:
75
+ * - same bucket → updates existing bar (OHLCV merging)
76
+ * - new bucket → appends a new bar (previous bar is finalised)
77
+ * - older bucket → silently ignored; debug-logged when `debug: true`
78
+ *
79
+ * @throws If the active license is not in unmanaged mode.
80
+ */
81
+ pushCandle(bar: CandleInput): UpdateResult;
82
+ /** Returns the current bar array (chronological, ascending). */
83
+ getBars(): readonly CandleBar[];
84
+ /** Returns the latest candle, or null if no data has been loaded. */
85
+ getLatestBar(): CandleBar | null;
86
+ /** Changes the active timeframe and clears all bar data. */
87
+ setTimeframe(timeframe: Timeframe): void;
88
+ /** Clears all bars (e.g. on symbol change before calling setHistory again). */
89
+ reset(): void;
90
+ }
91
+ //# sourceMappingURL=UnmanagedIngestion.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UnmanagedIngestion.d.ts","sourceRoot":"","sources":["../../src/trading/UnmanagedIngestion.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAE/E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAEpD,MAAM,WAAW,yBAAyB;IACxC,2DAA2D;IAC3D,KAAK,CAAC,EAAE,OAAO,CAAC;IAEhB;;;OAGG;IACH,YAAY,CAAC,EAAE,CAAC,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,YAAY,KAAK,IAAI,CAAC;IAE9D;;;OAGG;IACH,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,SAAS,SAAS,EAAE,KAAK,IAAI,CAAC;IAEhD,yCAAyC;IACzC,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,SAAS,KAAK,IAAI,CAAC;IAEvC,wEAAwE;IACxE,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;CACzC;AAED,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAe;IACvC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA4B;IAClD,OAAO,CAAC,UAAU,CAAY;gBAElB,SAAS,EAAE,SAAS,EAAE,IAAI,GAAE,yBAA8B;IAgBtE,OAAO,CAAC,gBAAgB;IAWxB;;;;;;;;;OASG;IACH,UAAU,CAAC,IAAI,EAAE,WAAW,EAAE,GAAG,IAAI;IAYrC;;;;;;;;;OASG;IACH,UAAU,CAAC,GAAG,EAAE,WAAW,GAAG,YAAY;IAO1C,gEAAgE;IAChE,OAAO,IAAI,SAAS,SAAS,EAAE;IAI/B,qEAAqE;IACrE,YAAY,IAAI,SAAS,GAAG,IAAI;IAKhC,4DAA4D;IAC5D,YAAY,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI;IAMxC,+EAA+E;IAC/E,KAAK,IAAI,IAAI;CAGd"}