@continuumdao/continuum-node-sdk 1.3.20 → 1.3.22

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 (63) hide show
  1. package/dist/core/chart/chart-defaults.d.ts +4 -0
  2. package/dist/core/chart/chart-defaults.d.ts.map +1 -1
  3. package/dist/core/chart/chart-defaults.js +25 -0
  4. package/dist/core/chart/chart-defaults.js.map +1 -1
  5. package/dist/core/chart/fetch-metadata.d.ts +12 -0
  6. package/dist/core/chart/fetch-metadata.d.ts.map +1 -0
  7. package/dist/core/chart/fetch-metadata.js +87 -0
  8. package/dist/core/chart/fetch-metadata.js.map +1 -0
  9. package/dist/core/chart/fetch-result.d.ts +2 -1
  10. package/dist/core/chart/fetch-result.d.ts.map +1 -1
  11. package/dist/core/chart/fetch-result.js +43 -40
  12. package/dist/core/chart/fetch-result.js.map +1 -1
  13. package/dist/core/chart/index.d.ts +2 -0
  14. package/dist/core/chart/index.d.ts.map +1 -1
  15. package/dist/core/chart/index.js +2 -0
  16. package/dist/core/chart/index.js.map +1 -1
  17. package/dist/core/chart/live/binding-extract.d.ts +12 -0
  18. package/dist/core/chart/live/binding-extract.d.ts.map +1 -0
  19. package/dist/core/chart/live/binding-extract.js +104 -0
  20. package/dist/core/chart/live/binding-extract.js.map +1 -0
  21. package/dist/core/chart/live/index.d.ts +6 -0
  22. package/dist/core/chart/live/index.d.ts.map +1 -0
  23. package/dist/core/chart/live/index.js +6 -0
  24. package/dist/core/chart/live/index.js.map +1 -0
  25. package/dist/core/chart/live/interval.d.ts +3 -0
  26. package/dist/core/chart/live/interval.d.ts.map +1 -0
  27. package/dist/core/chart/live/interval.js +30 -0
  28. package/dist/core/chart/live/interval.js.map +1 -0
  29. package/dist/core/chart/live/merge-tick.d.ts +19 -0
  30. package/dist/core/chart/live/merge-tick.d.ts.map +1 -0
  31. package/dist/core/chart/live/merge-tick.js +89 -0
  32. package/dist/core/chart/live/merge-tick.js.map +1 -0
  33. package/dist/core/chart/live/refresh.d.ts +12 -0
  34. package/dist/core/chart/live/refresh.d.ts.map +1 -0
  35. package/dist/core/chart/live/refresh.js +47 -0
  36. package/dist/core/chart/live/refresh.js.map +1 -0
  37. package/dist/core/chart/live/schemas.d.ts +21 -0
  38. package/dist/core/chart/live/schemas.d.ts.map +1 -0
  39. package/dist/core/chart/live/schemas.js +23 -0
  40. package/dist/core/chart/live/schemas.js.map +1 -0
  41. package/dist/core/chart/prepare-from-rows.d.ts +8 -1
  42. package/dist/core/chart/prepare-from-rows.d.ts.map +1 -1
  43. package/dist/core/chart/prepare-from-rows.js +43 -19
  44. package/dist/core/chart/prepare-from-rows.js.map +1 -1
  45. package/dist/core/chart/prepare.d.ts.map +1 -1
  46. package/dist/core/chart/prepare.js +14 -2
  47. package/dist/core/chart/prepare.js.map +1 -1
  48. package/dist/core/chart/schemas.d.ts +7 -0
  49. package/dist/core/chart/schemas.d.ts.map +1 -1
  50. package/dist/core/chart/schemas.js +2 -0
  51. package/dist/core/chart/schemas.js.map +1 -1
  52. package/dist/mcp/chart.d.ts.map +1 -1
  53. package/dist/mcp/chart.js +3 -4
  54. package/dist/mcp/chart.js.map +1 -1
  55. package/dist/mcp/defi/discovery.d.ts.map +1 -1
  56. package/dist/mcp/defi/discovery.js +14 -21
  57. package/dist/mcp/defi/discovery.js.map +1 -1
  58. package/dist/mcp/defi/ohlcv-chart-workflow.d.ts +5 -0
  59. package/dist/mcp/defi/ohlcv-chart-workflow.d.ts.map +1 -0
  60. package/dist/mcp/defi/ohlcv-chart-workflow.js +16 -0
  61. package/dist/mcp/defi/ohlcv-chart-workflow.js.map +1 -0
  62. package/dist/mcp/resources/chart.md +51 -2
  63. package/package.json +2 -2
@@ -4,11 +4,15 @@ import type { PrepareChartInput } from './schemas.js';
4
4
  export declare const DEFAULT_CHART_EMA_PERIOD = 50;
5
5
  /** Default RSI oscillator pane when the caller omits `overlays`. */
6
6
  export declare const DEFAULT_CHART_RSI_PERIOD = 14;
7
+ /** Distinct overlay color for default EMA on the main price pane. */
8
+ export declare const DEFAULT_CHART_EMA_COLOR = "#FFA726";
7
9
  export declare function primaryCandlestickSeriesId(series: PrepareChartInput['series']): string | null;
8
10
  export declare function hasHistogramVolumeSeries(series: PrepareChartInput['series']): boolean;
9
11
  /** Promote per-bar `volume` on candlestick rows into a histogram series when none exists. */
10
12
  export declare function ensureVolumeHistogramSeries(input: PrepareChartInput): PrepareChartInput;
11
13
  export declare function buildDefaultCandlestickOverlays(sourceSeriesId: string, barCount: number): ChartOverlayInput[];
12
14
  export declare function shouldApplyDefaultCandlestickOverlays(series: PrepareChartInput['series']): boolean;
15
+ /** Warnings when default overlays are partially omitted (e.g. RSI but not EMA). */
16
+ export declare function defaultOverlayChartWarnings(series: PrepareChartInput['series']): string[];
13
17
  export declare function resolvePrepareChartOverlays(input: PrepareChartInput): ChartOverlayInput[] | undefined;
14
18
  //# sourceMappingURL=chart-defaults.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"chart-defaults.d.ts","sourceRoot":"","sources":["../../../src/core/chart/chart-defaults.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,iBAAiB,EAAC,MAAM,sBAAsB,CAAC;AAC5D,OAAO,KAAK,EAAC,iBAAiB,EAAC,MAAM,cAAc,CAAC;AAGpD,0EAA0E;AAC1E,eAAO,MAAM,wBAAwB,KAAK,CAAC;AAC3C,oEAAoE;AACpE,eAAO,MAAM,wBAAwB,KAAK,CAAC;AAE3C,wBAAgB,0BAA0B,CACzC,MAAM,EAAE,iBAAiB,CAAC,QAAQ,CAAC,GACjC,MAAM,GAAG,IAAI,CAGf;AAED,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,iBAAiB,CAAC,QAAQ,CAAC,GAAG,OAAO,CAErF;AAED,6FAA6F;AAC7F,wBAAgB,2BAA2B,CAC1C,KAAK,EAAE,iBAAiB,GACtB,iBAAiB,CA0CnB;AAED,wBAAgB,+BAA+B,CAC9C,cAAc,EAAE,MAAM,EACtB,QAAQ,EAAE,MAAM,GACd,iBAAiB,EAAE,CAoBrB;AAED,wBAAgB,qCAAqC,CACpD,MAAM,EAAE,iBAAiB,CAAC,QAAQ,CAAC,GACjC,OAAO,CAST;AAED,wBAAgB,2BAA2B,CAC1C,KAAK,EAAE,iBAAiB,GACtB,iBAAiB,EAAE,GAAG,SAAS,CAkBjC"}
1
+ {"version":3,"file":"chart-defaults.d.ts","sourceRoot":"","sources":["../../../src/core/chart/chart-defaults.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,iBAAiB,EAAC,MAAM,sBAAsB,CAAC;AAC5D,OAAO,KAAK,EAAC,iBAAiB,EAAC,MAAM,cAAc,CAAC;AAGpD,0EAA0E;AAC1E,eAAO,MAAM,wBAAwB,KAAK,CAAC;AAC3C,oEAAoE;AACpE,eAAO,MAAM,wBAAwB,KAAK,CAAC;AAC3C,qEAAqE;AACrE,eAAO,MAAM,uBAAuB,YAAY,CAAC;AAEjD,wBAAgB,0BAA0B,CACzC,MAAM,EAAE,iBAAiB,CAAC,QAAQ,CAAC,GACjC,MAAM,GAAG,IAAI,CAGf;AAED,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,iBAAiB,CAAC,QAAQ,CAAC,GAAG,OAAO,CAErF;AAED,6FAA6F;AAC7F,wBAAgB,2BAA2B,CAC1C,KAAK,EAAE,iBAAiB,GACtB,iBAAiB,CA0CnB;AAED,wBAAgB,+BAA+B,CAC9C,cAAc,EAAE,MAAM,EACtB,QAAQ,EAAE,MAAM,GACd,iBAAiB,EAAE,CAyBrB;AAED,wBAAgB,qCAAqC,CACpD,MAAM,EAAE,iBAAiB,CAAC,QAAQ,CAAC,GACjC,OAAO,CAST;AAED,mFAAmF;AACnF,wBAAgB,2BAA2B,CAC1C,MAAM,EAAE,iBAAiB,CAAC,QAAQ,CAAC,GACjC,MAAM,EAAE,CAgBV;AAED,wBAAgB,2BAA2B,CAC1C,KAAK,EAAE,iBAAiB,GACtB,iBAAiB,EAAE,GAAG,SAAS,CAkBjC"}
@@ -3,6 +3,8 @@ import { coerceFiniteNumber, ohlcvTupleToRow, parseChartTimeFromRow } from './po
3
3
  export const DEFAULT_CHART_EMA_PERIOD = 50;
4
4
  /** Default RSI oscillator pane when the caller omits `overlays`. */
5
5
  export const DEFAULT_CHART_RSI_PERIOD = 14;
6
+ /** Distinct overlay color for default EMA on the main price pane. */
7
+ export const DEFAULT_CHART_EMA_COLOR = '#FFA726';
6
8
  export function primaryCandlestickSeriesId(series) {
7
9
  const candle = series.find(s => s.type === 'candlestick');
8
10
  return candle?.id ?? null;
@@ -57,6 +59,11 @@ export function buildDefaultCandlestickOverlays(sourceSeriesId, barCount) {
57
59
  period: DEFAULT_CHART_EMA_PERIOD,
58
60
  label: `EMA(${DEFAULT_CHART_EMA_PERIOD})`,
59
61
  overlay: true,
62
+ style: {
63
+ color: DEFAULT_CHART_EMA_COLOR,
64
+ lineStyle: 'solid',
65
+ lineWidth: 2,
66
+ },
60
67
  });
61
68
  }
62
69
  if (barCount > DEFAULT_CHART_RSI_PERIOD) {
@@ -79,6 +86,24 @@ export function shouldApplyDefaultCandlestickOverlays(series) {
79
86
  }
80
87
  return true;
81
88
  }
89
+ /** Warnings when default overlays are partially omitted (e.g. RSI but not EMA). */
90
+ export function defaultOverlayChartWarnings(series) {
91
+ if (!shouldApplyDefaultCandlestickOverlays(series)) {
92
+ return [];
93
+ }
94
+ const sourceId = primaryCandlestickSeriesId(series);
95
+ if (!sourceId) {
96
+ return [];
97
+ }
98
+ const candle = series.find(s => s.id === sourceId);
99
+ const barCount = candle?.data.length ?? 0;
100
+ if (barCount > DEFAULT_CHART_RSI_PERIOD && barCount < DEFAULT_CHART_EMA_PERIOD) {
101
+ return [
102
+ `Only ${barCount} bars — RSI(${DEFAULT_CHART_RSI_PERIOD}) was added but EMA(${DEFAULT_CHART_EMA_PERIOD}) needs at least ${DEFAULT_CHART_EMA_PERIOD}. Fetch a longer lookback.`,
103
+ ];
104
+ }
105
+ return [];
106
+ }
82
107
  export function resolvePrepareChartOverlays(input) {
83
108
  if (input.overlays?.length) {
84
109
  return input.overlays;
@@ -1 +1 @@
1
- {"version":3,"file":"chart-defaults.js","sourceRoot":"","sources":["../../../src/core/chart/chart-defaults.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"chart-defaults.js","sourceRoot":"","sources":["../../../src/core/chart/chart-defaults.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /** Title/label embedded by the fetch step (execute script), not inferred from user chat. */
2
+ export type FetchChartMetadata = {
3
+ title?: string;
4
+ label?: string;
5
+ };
6
+ /**
7
+ * Read explicit chart metadata from a fetch tool payload.
8
+ * Accepts `{ title, label, result }`, `{ result: { title, label, bars } }`,
9
+ * Hyperliquid `{ ohlcv: { coin, interval, candles } }`, or GMX `{ symbol, timeframe, candles }`.
10
+ */
11
+ export declare function extractChartMetadataFromFetchPayload(payload: unknown): FetchChartMetadata;
12
+ //# sourceMappingURL=fetch-metadata.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fetch-metadata.d.ts","sourceRoot":"","sources":["../../../src/core/chart/fetch-metadata.ts"],"names":[],"mappings":"AAAA,4FAA4F;AAE5F,MAAM,MAAM,kBAAkB,GAAG;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAqDF;;;;GAIG;AACH,wBAAgB,oCAAoC,CAAC,OAAO,EAAE,OAAO,GAAG,kBAAkB,CAgCzF"}
@@ -0,0 +1,87 @@
1
+ /** Title/label embedded by the fetch step (execute script), not inferred from user chat. */
2
+ function readMetaField(record, key) {
3
+ const raw = record[key];
4
+ if (typeof raw !== 'string') {
5
+ return undefined;
6
+ }
7
+ const trimmed = raw.trim();
8
+ return trimmed || undefined;
9
+ }
10
+ function metadataFromRecord(record) {
11
+ const title = readMetaField(record, 'title');
12
+ const label = readMetaField(record, 'label');
13
+ if (!title && !label) {
14
+ return {};
15
+ }
16
+ return {
17
+ ...(title ? { title } : {}),
18
+ ...(label ? { label } : {}),
19
+ };
20
+ }
21
+ function metadataFromOhlcvWrapper(ohlcv) {
22
+ const coinRaw = ohlcv.coin ?? ohlcv.symbol;
23
+ const coin = typeof coinRaw === 'string' ? coinRaw.trim() : '';
24
+ const intervalRaw = ohlcv.interval ?? ohlcv.timeframe;
25
+ const interval = typeof intervalRaw === 'string' ? intervalRaw.trim() : '';
26
+ if (!coin) {
27
+ return {};
28
+ }
29
+ const label = coin;
30
+ const title = interval ? `${coin} ${interval.toUpperCase()}` : coin;
31
+ return { title, label };
32
+ }
33
+ /** GMX fetch_ohlcv: `{ symbol, timeframe, candles }` at top level (not nested under ohlcv). */
34
+ function metadataFromFlatDefiOhlcvFetch(record) {
35
+ if (!('candles' in record)) {
36
+ return {};
37
+ }
38
+ const symbolRaw = record.symbol;
39
+ const symbol = typeof symbolRaw === 'string' ? symbolRaw.trim() : '';
40
+ if (!symbol) {
41
+ return {};
42
+ }
43
+ const label = symbol.split('[')[0]?.trim() || symbol;
44
+ const intervalRaw = record.timeframe ?? record.interval;
45
+ const interval = typeof intervalRaw === 'string' ? intervalRaw.trim() : '';
46
+ const title = interval ? `${label} ${interval.toUpperCase()}` : label;
47
+ return { title, label };
48
+ }
49
+ /**
50
+ * Read explicit chart metadata from a fetch tool payload.
51
+ * Accepts `{ title, label, result }`, `{ result: { title, label, bars } }`,
52
+ * Hyperliquid `{ ohlcv: { coin, interval, candles } }`, or GMX `{ symbol, timeframe, candles }`.
53
+ */
54
+ export function extractChartMetadataFromFetchPayload(payload) {
55
+ if (!payload || typeof payload !== 'object' || Array.isArray(payload)) {
56
+ return {};
57
+ }
58
+ const record = payload;
59
+ const direct = metadataFromRecord(record);
60
+ if (direct.title || direct.label) {
61
+ return direct;
62
+ }
63
+ const fromFlat = metadataFromFlatDefiOhlcvFetch(record);
64
+ if (fromFlat.title || fromFlat.label) {
65
+ return fromFlat;
66
+ }
67
+ const ohlcv = record.ohlcv;
68
+ if (ohlcv && typeof ohlcv === 'object' && !Array.isArray(ohlcv)) {
69
+ const fromOhlcv = metadataFromOhlcvWrapper(ohlcv);
70
+ if (fromOhlcv.title || fromOhlcv.label) {
71
+ return fromOhlcv;
72
+ }
73
+ }
74
+ const result = record.result;
75
+ if (result && typeof result === 'object' && !Array.isArray(result)) {
76
+ const fromResult = metadataFromRecord(result);
77
+ if (fromResult.title || fromResult.label) {
78
+ return fromResult;
79
+ }
80
+ const nestedOhlcv = result.ohlcv;
81
+ if (nestedOhlcv && typeof nestedOhlcv === 'object' && !Array.isArray(nestedOhlcv)) {
82
+ return metadataFromOhlcvWrapper(nestedOhlcv);
83
+ }
84
+ }
85
+ return {};
86
+ }
87
+ //# sourceMappingURL=fetch-metadata.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fetch-metadata.js","sourceRoot":"","sources":["../../../src/core/chart/fetch-metadata.ts"],"names":[],"mappings":"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"}
@@ -2,6 +2,7 @@
2
2
  import { type BuildOhlcvBarsFromPriceVolumeOptions } from './price-volume-bars.js';
3
3
  export type ExtractOhlcvBarsOptions = BuildOhlcvBarsFromPriceVolumeOptions;
4
4
  export declare function parseJsonIfString(raw: unknown): unknown;
5
+ /** True when a row normalizes to a candle (same rules as prepareChart). */
5
6
  export declare function looksLikeOhlcvBar(row: unknown): boolean;
6
7
  /** True when at least one row carries a usable volume field (including zero). */
7
8
  export declare function barRowsHaveVolume(rows: unknown[]): boolean;
@@ -10,5 +11,5 @@ export declare function barRowsHaveVolume(rows: unknown[]): boolean;
10
11
  * Accepts bar objects, OHLC tuples, `{ result: [...] }`, spot `{ prices, total_volumes }` (marketChart),
11
12
  * stringified JSON, or common API wrappers.
12
13
  */
13
- export declare function extractOhlcvBarsFromUnknown(payload: unknown, options?: ExtractOhlcvBarsOptions): unknown[] | null;
14
+ export declare function extractOhlcvBarsFromUnknown(payload: unknown, options?: ExtractOhlcvBarsOptions, depth?: number): unknown[] | null;
14
15
  //# sourceMappingURL=fetch-result.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"fetch-result.d.ts","sourceRoot":"","sources":["../../../src/core/chart/fetch-result.ts"],"names":[],"mappings":"AAAA,8FAA8F;AAE9F,OAAO,EAEN,KAAK,oCAAoC,EACzC,MAAM,wBAAwB,CAAC;AAGhC,MAAM,MAAM,uBAAuB,GAAG,oCAAoC,CAAC;AAE3E,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAgBvD;AAED,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAsBvD;AAuDD,iFAAiF;AACjF,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,OAAO,CAwB1D;AAED;;;;GAIG;AACH,wBAAgB,2BAA2B,CAC1C,OAAO,EAAE,OAAO,EAChB,OAAO,GAAE,uBAA4B,GACnC,OAAO,EAAE,GAAG,IAAI,CAkClB"}
1
+ {"version":3,"file":"fetch-result.d.ts","sourceRoot":"","sources":["../../../src/core/chart/fetch-result.ts"],"names":[],"mappings":"AAAA,8FAA8F;AAE9F,OAAO,EAEN,KAAK,oCAAoC,EACzC,MAAM,wBAAwB,CAAC;AAGhC,MAAM,MAAM,uBAAuB,GAAG,oCAAoC,CAAC;AAE3E,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAgBvD;AAED,2EAA2E;AAC3E,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAQvD;AAoGD,iFAAiF;AACjF,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,OAAO,CAwB1D;AAED;;;;GAIG;AACH,wBAAgB,2BAA2B,CAC1C,OAAO,EAAE,OAAO,EAChB,OAAO,GAAE,uBAA4B,EACrC,KAAK,SAAI,GACP,OAAO,EAAE,GAAG,IAAI,CAUlB"}
@@ -1,6 +1,6 @@
1
1
  /** Vendor-agnostic OHLCV bar extraction from MCP tool results (any fetch/execute payload). */
2
2
  import { buildOhlcvBarsFromPriceVolumeSeries, } from './price-volume-bars.js';
3
- import { coerceFiniteNumber, ohlcvTupleToRow } from './point-normalize.js';
3
+ import { coerceFiniteNumber, normalizeCandleRow, ohlcvTupleToRow } from './point-normalize.js';
4
4
  export function parseJsonIfString(raw) {
5
5
  if (typeof raw !== 'string') {
6
6
  return raw;
@@ -19,26 +19,15 @@ export function parseJsonIfString(raw) {
19
19
  }
20
20
  return raw;
21
21
  }
22
+ /** True when a row normalizes to a candle (same rules as prepareChart). */
22
23
  export function looksLikeOhlcvBar(row) {
24
+ if (looksLikeOhlcvTuple(row)) {
25
+ return true;
26
+ }
23
27
  if (!row || typeof row !== 'object' || Array.isArray(row)) {
24
28
  return false;
25
29
  }
26
- const r = row;
27
- const hasPrice = 'open' in r ||
28
- 'high' in r ||
29
- 'low' in r ||
30
- 'close' in r ||
31
- 'o' in r ||
32
- 'h' in r ||
33
- 'l' in r ||
34
- 'c' in r;
35
- const hasTime = 'time' in r ||
36
- 't' in r ||
37
- 'timestampMs' in r ||
38
- 'openTime' in r ||
39
- 'startTime' in r ||
40
- 'periodStartUnix' in r;
41
- return hasPrice && hasTime;
30
+ return normalizeCandleRow(row) != null;
42
31
  }
43
32
  function looksLikeOhlcvTuple(row) {
44
33
  if (!Array.isArray(row) || row.length < 5) {
@@ -66,6 +55,41 @@ const NESTED_BAR_KEYS = [
66
55
  'klines',
67
56
  'candlesticks',
68
57
  ];
58
+ const MAX_OHLCV_WRAPPER_DEPTH = 6;
59
+ function extractOhlcvBarsFromRecord(record, options, depth) {
60
+ if (depth > MAX_OHLCV_WRAPPER_DEPTH) {
61
+ return null;
62
+ }
63
+ const fromMarketChart = extractMarketChartBars(record, options);
64
+ if (fromMarketChart?.length) {
65
+ return fromMarketChart;
66
+ }
67
+ for (const key of NESTED_BAR_KEYS) {
68
+ if (!(key in record)) {
69
+ continue;
70
+ }
71
+ const nested = extractOhlcvBarsFromUnknown(record[key], options, depth + 1);
72
+ if (nested?.length) {
73
+ return nested;
74
+ }
75
+ }
76
+ for (const value of Object.values(record)) {
77
+ if (Array.isArray(value)) {
78
+ const direct = barArrayFromParsed(value);
79
+ if (direct?.length) {
80
+ return direct;
81
+ }
82
+ continue;
83
+ }
84
+ if (value && typeof value === 'object') {
85
+ const nested = extractOhlcvBarsFromRecord(value, options, depth + 1);
86
+ if (nested?.length) {
87
+ return nested;
88
+ }
89
+ }
90
+ }
91
+ return null;
92
+ }
69
93
  function looksLikePriceVolumePoint(row) {
70
94
  return Array.isArray(row) && row.length >= 2 && coerceFiniteNumber(row[1]) != null;
71
95
  }
@@ -108,7 +132,7 @@ export function barRowsHaveVolume(rows) {
108
132
  * Accepts bar objects, OHLC tuples, `{ result: [...] }`, spot `{ prices, total_volumes }` (marketChart),
109
133
  * stringified JSON, or common API wrappers.
110
134
  */
111
- export function extractOhlcvBarsFromUnknown(payload, options = {}) {
135
+ export function extractOhlcvBarsFromUnknown(payload, options = {}, depth = 0) {
112
136
  const parsed = parseJsonIfString(payload);
113
137
  const direct = barArrayFromParsed(parsed);
114
138
  if (direct) {
@@ -117,27 +141,6 @@ export function extractOhlcvBarsFromUnknown(payload, options = {}) {
117
141
  if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) {
118
142
  return null;
119
143
  }
120
- const record = parsed;
121
- const fromMarketChart = extractMarketChartBars(record, options);
122
- if (fromMarketChart?.length) {
123
- return fromMarketChart;
124
- }
125
- for (const key of NESTED_BAR_KEYS) {
126
- if (!(key in record)) {
127
- continue;
128
- }
129
- const child = record[key];
130
- if (child && typeof child === 'object' && !Array.isArray(child)) {
131
- const fromNestedMarketChart = extractMarketChartBars(child, options);
132
- if (fromNestedMarketChart?.length) {
133
- return fromNestedMarketChart;
134
- }
135
- }
136
- const nested = extractOhlcvBarsFromUnknown(child, options);
137
- if (nested?.length) {
138
- return nested;
139
- }
140
- }
141
- return null;
144
+ return extractOhlcvBarsFromRecord(parsed, options, depth);
142
145
  }
143
146
  //# sourceMappingURL=fetch-result.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"fetch-result.js","sourceRoot":"","sources":["../../../src/core/chart/fetch-result.ts"],"names":[],"mappings":"AAAA,8FAA8F;AAE9F,OAAO,EACN,mCAAmC,GAEnC,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAC,kBAAkB,EAAE,eAAe,EAAC,MAAM,sBAAsB,CAAC;AAIzE,MAAM,UAAU,iBAAiB,CAAC,GAAY;IAC7C,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QAC7B,OAAO,GAAG,CAAC;IACZ,CAAC;IACD,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;IAC3B,IAAI,CAAC,OAAO,EAAE,CAAC;QACd,OAAO,GAAG,CAAC;IACZ,CAAC;IACD,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACxD,IAAI,CAAC;YACJ,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAY,CAAC;QACvC,CAAC;QAAC,MAAM,CAAC;YACR,OAAO,GAAG,CAAC;QACZ,CAAC;IACF,CAAC;IACD,OAAO,GAAG,CAAC;AACZ,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,GAAY;IAC7C,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QAC3D,OAAO,KAAK,CAAC;IACd,CAAC;IACD,MAAM,CAAC,GAAG,GAA8B,CAAC;IACzC,MAAM,QAAQ,GACb,MAAM,IAAI,CAAC;QACX,MAAM,IAAI,CAAC;QACX,KAAK,IAAI,CAAC;QACV,OAAO,IAAI,CAAC;QACZ,GAAG,IAAI,CAAC;QACR,GAAG,IAAI,CAAC;QACR,GAAG,IAAI,CAAC;QACR,GAAG,IAAI,CAAC,CAAC;IACV,MAAM,OAAO,GACZ,MAAM,IAAI,CAAC;QACX,GAAG,IAAI,CAAC;QACR,aAAa,IAAI,CAAC;QAClB,UAAU,IAAI,CAAC;QACf,WAAW,IAAI,CAAC;QAChB,iBAAiB,IAAI,CAAC,CAAC;IACxB,OAAO,QAAQ,IAAI,OAAO,CAAC;AAC5B,CAAC;AAED,SAAS,mBAAmB,CAAC,GAAY;IACxC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3C,OAAO,KAAK,CAAC;IACd,CAAC;IACD,OAAO,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,IAAI,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;AACjF,CAAC;AAED,SAAS,kBAAkB,CAAC,MAAe;IAC1C,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACnD,OAAO,IAAI,CAAC;IACb,CAAC;IACD,IAAI,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,mBAAmB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACpE,OAAO,MAAM,CAAC;IACf,CAAC;IACD,OAAO,IAAI,CAAC;AACb,CAAC;AAED,MAAM,eAAe,GAAG;IACvB,QAAQ;IACR,MAAM;IACN,MAAM;IACN,SAAS;IACT,MAAM;IACN,OAAO;IACP,MAAM;IACN,QAAQ;IACR,cAAc;CACL,CAAC;AAEX,SAAS,yBAAyB,CAAC,GAAY;IAC9C,OAAO,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,IAAI,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;AACpF,CAAC;AAED,SAAS,oBAAoB,CAAC,MAA+B;IAC5D,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;IAC7B,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,yBAAyB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AAC3F,CAAC;AAED,SAAS,sBAAsB,CAC9B,MAA+B,EAC/B,OAAgC;IAEhC,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,EAAE,CAAC;QACnC,OAAO,IAAI,CAAC;IACb,CAAC;IACD,MAAM,IAAI,GAAG,mCAAmC,CAC/C,MAAM,CAAC,MAAmB,EAC1B,MAAM,CAAC,aAAsC,EAC7C,OAAO,CACP,CAAC;IACF,OAAO,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;AACtC,CAAC;AAED,iFAAiF;AACjF,MAAM,UAAU,iBAAiB,CAAC,IAAe;IAChD,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACxB,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;QAC5D,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;YACrC,SAAS;QACV,CAAC;QACD,MAAM,CAAC,GAAG,GAA8B,CAAC;QACzC,MAAM,YAAY,GACjB,QAAQ,IAAI,CAAC;YACb,GAAG,IAAI,CAAC;YACR,WAAW,IAAI,CAAC;YAChB,WAAW,IAAI,CAAC;YAChB,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC;QACzC,IAAI,CAAC,YAAY,EAAE,CAAC;YACnB,SAAS;QACV,CAAC;QACD,MAAM,MAAM,GAAG,kBAAkB,CAChC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAC1F,CAAC;QACF,IAAI,MAAM,IAAI,IAAI,IAAI,MAAM,IAAI,CAAC,EAAE,CAAC;YACnC,OAAO,IAAI,CAAC;QACb,CAAC;IACF,CAAC;IACD,OAAO,KAAK,CAAC;AACd,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,2BAA2B,CAC1C,OAAgB,EAChB,UAAmC,EAAE;IAErC,MAAM,MAAM,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAC1C,MAAM,MAAM,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAC1C,IAAI,MAAM,EAAE,CAAC;QACZ,OAAO,MAAM,CAAC;IACf,CAAC;IACD,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QACpE,OAAO,IAAI,CAAC;IACb,CAAC;IACD,MAAM,MAAM,GAAG,MAAiC,CAAC;IACjD,MAAM,eAAe,GAAG,sBAAsB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChE,IAAI,eAAe,EAAE,MAAM,EAAE,CAAC;QAC7B,OAAO,eAAe,CAAC;IACxB,CAAC;IACD,KAAK,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;QACnC,IAAI,CAAC,CAAC,GAAG,IAAI,MAAM,CAAC,EAAE,CAAC;YACtB,SAAS;QACV,CAAC;QACD,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;QAC1B,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACjE,MAAM,qBAAqB,GAAG,sBAAsB,CACnD,KAAgC,EAChC,OAAO,CACP,CAAC;YACF,IAAI,qBAAqB,EAAE,MAAM,EAAE,CAAC;gBACnC,OAAO,qBAAqB,CAAC;YAC9B,CAAC;QACF,CAAC;QACD,MAAM,MAAM,GAAG,2BAA2B,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAC3D,IAAI,MAAM,EAAE,MAAM,EAAE,CAAC;YACpB,OAAO,MAAM,CAAC;QACf,CAAC;IACF,CAAC;IACD,OAAO,IAAI,CAAC;AACb,CAAC"}
1
+ {"version":3,"file":"fetch-result.js","sourceRoot":"","sources":["../../../src/core/chart/fetch-result.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  export { prepareChartCore, isChartV1Payload } from './prepare-core.js';
2
2
  export { prepareChart } from './prepare.js';
3
3
  export { prepareChartFromRows, PrepareChartFromRowsInputSchema } from './prepare-from-rows.js';
4
+ export { extractChartMetadataFromFetchPayload } from './fetch-metadata.js';
4
5
  export { barRowsHaveVolume, extractOhlcvBarsFromUnknown, looksLikeOhlcvBar, type ExtractOhlcvBarsOptions, } from './fetch-result.js';
5
6
  export { DEFAULT_CHART_EMA_PERIOD, DEFAULT_CHART_RSI_PERIOD, buildDefaultCandlestickOverlays, ensureVolumeHistogramSeries, } from './chart-defaults.js';
6
7
  export { expandChartOverlays } from './overlays.js';
@@ -9,5 +10,6 @@ export { ohlcvToPrepareChartInput, normalizeOhlcvRow, type OhlcvRow, type OhlcvT
9
10
  export { ohlcvRowsToChartOutput } from './ohlcv-output.js';
10
11
  export { ohlcvTupleToRow } from './point-normalize.js';
11
12
  export { buildOhlcvBarsFromPriceVolumeSeries, type BuiltOhlcvBar, type BuildOhlcvBarsFromPriceVolumeOptions, } from './price-volume-bars.js';
13
+ export { CHART_LIVE_DEFAULT_POLL_MS, CHART_LIVE_PROVIDER_COINGECKO_SIMPLE, CHART_LIVE_PROVIDER_GMX_MARK_PRICE, CHART_LIVE_PROVIDER_HYPERLIQUID_ALL_MIDS, ChartLiveBindingSchema, ChartLiveTickSchema, candlestickBarsFromChart, extractLiveBindingFromFetchPayload, intervalLabelToBucketSec, mergeLiveTickIntoBars, refreshChartFromLiveTick, type ChartLiveBinding, type ChartLiveTick, type ExtractLiveBindingOptions, type MergeLiveTickOptions, type RefreshChartFromLiveTickResult, } from './live/index.js';
12
14
  export { CHART_V1_KIND, DEFAULT_CHART_HEIGHT, DEFAULT_CHART_MAX_POINTS, PrepareChartInputSchema, PrepareChartOutputSchema, ChartV1PayloadSchema, type PrepareChartInput, type PrepareChartOutput, type ChartV1Payload, type ChartSeriesType, type ChartTime, } from './schemas.js';
13
15
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/chart/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,gBAAgB,EAAE,gBAAgB,EAAC,MAAM,mBAAmB,CAAC;AACrE,OAAO,EAAC,YAAY,EAAC,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAC,oBAAoB,EAAE,+BAA+B,EAAC,MAAM,wBAAwB,CAAC;AAC7F,OAAO,EACN,iBAAiB,EACjB,2BAA2B,EAC3B,iBAAiB,EACjB,KAAK,uBAAuB,GAC5B,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACN,wBAAwB,EACxB,wBAAwB,EACxB,+BAA+B,EAC/B,2BAA2B,GAC3B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAC,mBAAmB,EAAC,MAAM,eAAe,CAAC;AAClD,OAAO,EACN,uBAAuB,EACvB,sBAAsB,EACtB,6BAA6B,EAC7B,aAAa,EACb,KAAK,kBAAkB,GACvB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAC,wBAAwB,EAAE,iBAAiB,EAAE,KAAK,QAAQ,EAAE,KAAK,+BAA+B,EAAC,MAAM,YAAY,CAAC;AAC5H,OAAO,EAAC,sBAAsB,EAAC,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAC,eAAe,EAAC,MAAM,sBAAsB,CAAC;AACrD,OAAO,EACN,mCAAmC,EACnC,KAAK,aAAa,EAClB,KAAK,oCAAoC,GACzC,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACN,aAAa,EACb,oBAAoB,EACpB,wBAAwB,EACxB,uBAAuB,EACvB,wBAAwB,EACxB,oBAAoB,EACpB,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,EACvB,KAAK,cAAc,EACnB,KAAK,eAAe,EACpB,KAAK,SAAS,GACd,MAAM,cAAc,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/chart/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,gBAAgB,EAAE,gBAAgB,EAAC,MAAM,mBAAmB,CAAC;AACrE,OAAO,EAAC,YAAY,EAAC,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAC,oBAAoB,EAAE,+BAA+B,EAAC,MAAM,wBAAwB,CAAC;AAC7F,OAAO,EAAC,oCAAoC,EAAC,MAAM,qBAAqB,CAAC;AACzE,OAAO,EACN,iBAAiB,EACjB,2BAA2B,EAC3B,iBAAiB,EACjB,KAAK,uBAAuB,GAC5B,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACN,wBAAwB,EACxB,wBAAwB,EACxB,+BAA+B,EAC/B,2BAA2B,GAC3B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAC,mBAAmB,EAAC,MAAM,eAAe,CAAC;AAClD,OAAO,EACN,uBAAuB,EACvB,sBAAsB,EACtB,6BAA6B,EAC7B,aAAa,EACb,KAAK,kBAAkB,GACvB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAC,wBAAwB,EAAE,iBAAiB,EAAE,KAAK,QAAQ,EAAE,KAAK,+BAA+B,EAAC,MAAM,YAAY,CAAC;AAC5H,OAAO,EAAC,sBAAsB,EAAC,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAC,eAAe,EAAC,MAAM,sBAAsB,CAAC;AACrD,OAAO,EACN,mCAAmC,EACnC,KAAK,aAAa,EAClB,KAAK,oCAAoC,GACzC,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACN,0BAA0B,EAC1B,oCAAoC,EACpC,kCAAkC,EAClC,wCAAwC,EACxC,sBAAsB,EACtB,mBAAmB,EACnB,wBAAwB,EACxB,kCAAkC,EAClC,wBAAwB,EACxB,qBAAqB,EACrB,wBAAwB,EACxB,KAAK,gBAAgB,EACrB,KAAK,aAAa,EAClB,KAAK,yBAAyB,EAC9B,KAAK,oBAAoB,EACzB,KAAK,8BAA8B,GACnC,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACN,aAAa,EACb,oBAAoB,EACpB,wBAAwB,EACxB,uBAAuB,EACvB,wBAAwB,EACxB,oBAAoB,EACpB,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,EACvB,KAAK,cAAc,EACnB,KAAK,eAAe,EACpB,KAAK,SAAS,GACd,MAAM,cAAc,CAAC"}
@@ -1,6 +1,7 @@
1
1
  export { prepareChartCore, isChartV1Payload } from './prepare-core.js';
2
2
  export { prepareChart } from './prepare.js';
3
3
  export { prepareChartFromRows, PrepareChartFromRowsInputSchema } from './prepare-from-rows.js';
4
+ export { extractChartMetadataFromFetchPayload } from './fetch-metadata.js';
4
5
  export { barRowsHaveVolume, extractOhlcvBarsFromUnknown, looksLikeOhlcvBar, } from './fetch-result.js';
5
6
  export { DEFAULT_CHART_EMA_PERIOD, DEFAULT_CHART_RSI_PERIOD, buildDefaultCandlestickOverlays, ensureVolumeHistogramSeries, } from './chart-defaults.js';
6
7
  export { expandChartOverlays } from './overlays.js';
@@ -9,5 +10,6 @@ export { ohlcvToPrepareChartInput, normalizeOhlcvRow } from './ohlcv.js';
9
10
  export { ohlcvRowsToChartOutput } from './ohlcv-output.js';
10
11
  export { ohlcvTupleToRow } from './point-normalize.js';
11
12
  export { buildOhlcvBarsFromPriceVolumeSeries, } from './price-volume-bars.js';
13
+ export { CHART_LIVE_DEFAULT_POLL_MS, CHART_LIVE_PROVIDER_COINGECKO_SIMPLE, CHART_LIVE_PROVIDER_GMX_MARK_PRICE, CHART_LIVE_PROVIDER_HYPERLIQUID_ALL_MIDS, ChartLiveBindingSchema, ChartLiveTickSchema, candlestickBarsFromChart, extractLiveBindingFromFetchPayload, intervalLabelToBucketSec, mergeLiveTickIntoBars, refreshChartFromLiveTick, } from './live/index.js';
12
14
  export { CHART_V1_KIND, DEFAULT_CHART_HEIGHT, DEFAULT_CHART_MAX_POINTS, PrepareChartInputSchema, PrepareChartOutputSchema, ChartV1PayloadSchema, } from './schemas.js';
13
15
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/chart/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,gBAAgB,EAAE,gBAAgB,EAAC,MAAM,mBAAmB,CAAC;AACrE,OAAO,EAAC,YAAY,EAAC,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAC,oBAAoB,EAAE,+BAA+B,EAAC,MAAM,wBAAwB,CAAC;AAC7F,OAAO,EACN,iBAAiB,EACjB,2BAA2B,EAC3B,iBAAiB,GAEjB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACN,wBAAwB,EACxB,wBAAwB,EACxB,+BAA+B,EAC/B,2BAA2B,GAC3B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAC,mBAAmB,EAAC,MAAM,eAAe,CAAC;AAClD,OAAO,EACN,uBAAuB,EACvB,sBAAsB,EACtB,6BAA6B,EAC7B,aAAa,GAEb,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAC,wBAAwB,EAAE,iBAAiB,EAAsD,MAAM,YAAY,CAAC;AAC5H,OAAO,EAAC,sBAAsB,EAAC,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAC,eAAe,EAAC,MAAM,sBAAsB,CAAC;AACrD,OAAO,EACN,mCAAmC,GAGnC,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACN,aAAa,EACb,oBAAoB,EACpB,wBAAwB,EACxB,uBAAuB,EACvB,wBAAwB,EACxB,oBAAoB,GAMpB,MAAM,cAAc,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/chart/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,gBAAgB,EAAE,gBAAgB,EAAC,MAAM,mBAAmB,CAAC;AACrE,OAAO,EAAC,YAAY,EAAC,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAC,oBAAoB,EAAE,+BAA+B,EAAC,MAAM,wBAAwB,CAAC;AAC7F,OAAO,EAAC,oCAAoC,EAAC,MAAM,qBAAqB,CAAC;AACzE,OAAO,EACN,iBAAiB,EACjB,2BAA2B,EAC3B,iBAAiB,GAEjB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACN,wBAAwB,EACxB,wBAAwB,EACxB,+BAA+B,EAC/B,2BAA2B,GAC3B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAC,mBAAmB,EAAC,MAAM,eAAe,CAAC;AAClD,OAAO,EACN,uBAAuB,EACvB,sBAAsB,EACtB,6BAA6B,EAC7B,aAAa,GAEb,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAC,wBAAwB,EAAE,iBAAiB,EAAsD,MAAM,YAAY,CAAC;AAC5H,OAAO,EAAC,sBAAsB,EAAC,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAC,eAAe,EAAC,MAAM,sBAAsB,CAAC;AACrD,OAAO,EACN,mCAAmC,GAGnC,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACN,0BAA0B,EAC1B,oCAAoC,EACpC,kCAAkC,EAClC,wCAAwC,EACxC,sBAAsB,EACtB,mBAAmB,EACnB,wBAAwB,EACxB,kCAAkC,EAClC,wBAAwB,EACxB,qBAAqB,EACrB,wBAAwB,GAMxB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACN,aAAa,EACb,oBAAoB,EACpB,wBAAwB,EACxB,uBAAuB,EACvB,wBAAwB,EACxB,oBAAoB,GAMpB,MAAM,cAAc,CAAC"}
@@ -0,0 +1,12 @@
1
+ import { type ChartLiveBinding } from './schemas.js';
2
+ export type ExtractLiveBindingOptions = {
3
+ bucketSec?: number;
4
+ maxPoints?: number;
5
+ pollMs?: number;
6
+ };
7
+ /**
8
+ * Infer live tick binding from a fetch tool payload (extensible like fetch-metadata).
9
+ * Returns undefined when the source is unknown or live tick fetch is not configured.
10
+ */
11
+ export declare function extractLiveBindingFromFetchPayload(payload: unknown, options?: ExtractLiveBindingOptions): ChartLiveBinding | undefined;
12
+ //# sourceMappingURL=binding-extract.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"binding-extract.d.ts","sourceRoot":"","sources":["../../../../src/core/chart/live/binding-extract.ts"],"names":[],"mappings":"AAEA,OAAO,EAKN,KAAK,gBAAgB,EACrB,MAAM,cAAc,CAAC;AAEtB,MAAM,MAAM,yBAAyB,GAAG;IACvC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAuFF;;;GAGG;AACH,wBAAgB,kCAAkC,CACjD,OAAO,EAAE,OAAO,EAChB,OAAO,GAAE,yBAA8B,GACrC,gBAAgB,GAAG,SAAS,CA8B9B"}
@@ -0,0 +1,104 @@
1
+ import { DEFAULT_CHART_MAX_POINTS } from '../schemas.js';
2
+ import { intervalLabelToBucketSec } from './interval.js';
3
+ import { CHART_LIVE_DEFAULT_POLL_MS, CHART_LIVE_PROVIDER_COINGECKO_SIMPLE, CHART_LIVE_PROVIDER_GMX_MARK_PRICE, CHART_LIVE_PROVIDER_HYPERLIQUID_ALL_MIDS, } from './schemas.js';
4
+ function bindingFromHyperliquidOhlcv(ohlcv, options) {
5
+ const coinRaw = ohlcv.coin ?? ohlcv.symbol;
6
+ const coin = typeof coinRaw === 'string' ? coinRaw.trim() : '';
7
+ if (!coin) {
8
+ return undefined;
9
+ }
10
+ const intervalRaw = ohlcv.interval ?? ohlcv.timeframe;
11
+ const interval = typeof intervalRaw === 'string' ? intervalRaw.trim() : '';
12
+ const bucketSec = options.bucketSec ??
13
+ (interval ? intervalLabelToBucketSec(interval) : null) ??
14
+ 900;
15
+ const dexRaw = ohlcv.dex;
16
+ return {
17
+ providerId: CHART_LIVE_PROVIDER_HYPERLIQUID_ALL_MIDS,
18
+ bucketSec,
19
+ pollMs: options.pollMs ?? CHART_LIVE_DEFAULT_POLL_MS,
20
+ maxPoints: options.maxPoints ?? DEFAULT_CHART_MAX_POINTS,
21
+ params: {
22
+ coin,
23
+ ...(interval ? { interval } : {}),
24
+ ...(typeof dexRaw === 'string' && dexRaw.trim() ? { dex: dexRaw.trim() } : {}),
25
+ },
26
+ };
27
+ }
28
+ function bindingFromGmxFlat(record, options) {
29
+ if (!('candles' in record)) {
30
+ return undefined;
31
+ }
32
+ const symbolRaw = record.symbol;
33
+ const symbol = typeof symbolRaw === 'string' ? symbolRaw.trim() : '';
34
+ if (!symbol) {
35
+ return undefined;
36
+ }
37
+ const intervalRaw = record.timeframe ?? record.interval;
38
+ const interval = typeof intervalRaw === 'string' ? intervalRaw.trim() : '15m';
39
+ const bucketSec = options.bucketSec ?? intervalLabelToBucketSec(interval) ?? 900;
40
+ const collateralRaw = record.collateralSymbol ?? record.collateralToken;
41
+ const collateralSymbol = typeof collateralRaw === 'string' && collateralRaw.trim()
42
+ ? collateralRaw.trim()
43
+ : 'USDC';
44
+ return {
45
+ providerId: CHART_LIVE_PROVIDER_GMX_MARK_PRICE,
46
+ bucketSec,
47
+ pollMs: options.pollMs ?? CHART_LIVE_DEFAULT_POLL_MS,
48
+ maxPoints: options.maxPoints ?? DEFAULT_CHART_MAX_POINTS,
49
+ params: {
50
+ symbol,
51
+ collateralSymbol,
52
+ interval,
53
+ },
54
+ };
55
+ }
56
+ function bindingFromCoinGecko(record, options) {
57
+ const coinIdRaw = record.coinId ?? record.id ?? record.coingeckoId;
58
+ const coinId = typeof coinIdRaw === 'string' ? coinIdRaw.trim() : '';
59
+ if (!coinId) {
60
+ return undefined;
61
+ }
62
+ const bucketSec = options.bucketSec ?? 3600;
63
+ return {
64
+ providerId: CHART_LIVE_PROVIDER_COINGECKO_SIMPLE,
65
+ bucketSec,
66
+ pollMs: options.pollMs ?? CHART_LIVE_DEFAULT_POLL_MS,
67
+ maxPoints: options.maxPoints ?? DEFAULT_CHART_MAX_POINTS,
68
+ params: {
69
+ coinId,
70
+ vsCurrency: 'usd',
71
+ },
72
+ };
73
+ }
74
+ /**
75
+ * Infer live tick binding from a fetch tool payload (extensible like fetch-metadata).
76
+ * Returns undefined when the source is unknown or live tick fetch is not configured.
77
+ */
78
+ export function extractLiveBindingFromFetchPayload(payload, options = {}) {
79
+ if (!payload || typeof payload !== 'object' || Array.isArray(payload)) {
80
+ return undefined;
81
+ }
82
+ const record = payload;
83
+ const fromGmx = bindingFromGmxFlat(record, options);
84
+ if (fromGmx) {
85
+ return fromGmx;
86
+ }
87
+ const ohlcv = record.ohlcv;
88
+ if (ohlcv && typeof ohlcv === 'object' && !Array.isArray(ohlcv)) {
89
+ const fromHl = bindingFromHyperliquidOhlcv(ohlcv, options);
90
+ if (fromHl) {
91
+ return fromHl;
92
+ }
93
+ }
94
+ const fromCg = bindingFromCoinGecko(record, options);
95
+ if (fromCg) {
96
+ return fromCg;
97
+ }
98
+ const result = record.result;
99
+ if (result && typeof result === 'object' && !Array.isArray(result)) {
100
+ return extractLiveBindingFromFetchPayload(result, options);
101
+ }
102
+ return undefined;
103
+ }
104
+ //# sourceMappingURL=binding-extract.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"binding-extract.js","sourceRoot":"","sources":["../../../../src/core/chart/live/binding-extract.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export { CHART_LIVE_DEFAULT_POLL_MS, CHART_LIVE_PROVIDER_COINGECKO_SIMPLE, CHART_LIVE_PROVIDER_GMX_MARK_PRICE, CHART_LIVE_PROVIDER_HYPERLIQUID_ALL_MIDS, ChartLiveBindingSchema, ChartLiveTickSchema, type ChartLiveBinding, type ChartLiveTick, } from './schemas.js';
2
+ export { intervalLabelToBucketSec } from './interval.js';
3
+ export { candlestickBarsFromChart, mergeLiveTickIntoBars, type MergeLiveTickOptions, } from './merge-tick.js';
4
+ export { extractLiveBindingFromFetchPayload, type ExtractLiveBindingOptions, } from './binding-extract.js';
5
+ export { refreshChartFromLiveTick, type RefreshChartFromLiveTickResult } from './refresh.js';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/core/chart/live/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,0BAA0B,EAC1B,oCAAoC,EACpC,kCAAkC,EAClC,wCAAwC,EACxC,sBAAsB,EACtB,mBAAmB,EACnB,KAAK,gBAAgB,EACrB,KAAK,aAAa,GAClB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAC,wBAAwB,EAAC,MAAM,eAAe,CAAC;AACvD,OAAO,EACN,wBAAwB,EACxB,qBAAqB,EACrB,KAAK,oBAAoB,GACzB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACN,kCAAkC,EAClC,KAAK,yBAAyB,GAC9B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAC,wBAAwB,EAAE,KAAK,8BAA8B,EAAC,MAAM,cAAc,CAAC"}
@@ -0,0 +1,6 @@
1
+ export { CHART_LIVE_DEFAULT_POLL_MS, CHART_LIVE_PROVIDER_COINGECKO_SIMPLE, CHART_LIVE_PROVIDER_GMX_MARK_PRICE, CHART_LIVE_PROVIDER_HYPERLIQUID_ALL_MIDS, ChartLiveBindingSchema, ChartLiveTickSchema, } from './schemas.js';
2
+ export { intervalLabelToBucketSec } from './interval.js';
3
+ export { candlestickBarsFromChart, mergeLiveTickIntoBars, } from './merge-tick.js';
4
+ export { extractLiveBindingFromFetchPayload, } from './binding-extract.js';
5
+ export { refreshChartFromLiveTick } from './refresh.js';
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/core/chart/live/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,0BAA0B,EAC1B,oCAAoC,EACpC,kCAAkC,EAClC,wCAAwC,EACxC,sBAAsB,EACtB,mBAAmB,GAGnB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAC,wBAAwB,EAAC,MAAM,eAAe,CAAC;AACvD,OAAO,EACN,wBAAwB,EACxB,qBAAqB,GAErB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACN,kCAAkC,GAElC,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAC,wBAAwB,EAAsC,MAAM,cAAc,CAAC"}
@@ -0,0 +1,3 @@
1
+ /** Map interval label (15m, 1h, 4h, …) to bar bucket width in seconds. */
2
+ export declare function intervalLabelToBucketSec(interval: string): number | null;
3
+ //# sourceMappingURL=interval.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interval.d.ts","sourceRoot":"","sources":["../../../../src/core/chart/live/interval.ts"],"names":[],"mappings":"AAiBA,0EAA0E;AAC1E,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAWxE"}
@@ -0,0 +1,30 @@
1
+ const INTERVAL_BUCKET_SEC = {
2
+ '1m': 60,
3
+ '3m': 180,
4
+ '5m': 300,
5
+ '15m': 900,
6
+ '30m': 1800,
7
+ '1h': 3600,
8
+ '2h': 7200,
9
+ '4h': 14_400,
10
+ '8h': 28_800,
11
+ '12h': 43_200,
12
+ '1d': 86_400,
13
+ '3d': 259_200,
14
+ '1w': 604_800,
15
+ '1M': 2_592_000,
16
+ };
17
+ /** Map interval label (15m, 1h, 4h, …) to bar bucket width in seconds. */
18
+ export function intervalLabelToBucketSec(interval) {
19
+ const key = interval.trim();
20
+ if (!key) {
21
+ return null;
22
+ }
23
+ const direct = INTERVAL_BUCKET_SEC[key];
24
+ if (direct != null) {
25
+ return direct;
26
+ }
27
+ const lower = key.toLowerCase();
28
+ return INTERVAL_BUCKET_SEC[lower] ?? null;
29
+ }
30
+ //# sourceMappingURL=interval.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interval.js","sourceRoot":"","sources":["../../../../src/core/chart/live/interval.ts"],"names":[],"mappings":"AAAA,MAAM,mBAAmB,GAA2B;IACnD,IAAI,EAAE,EAAE;IACR,IAAI,EAAE,GAAG;IACT,IAAI,EAAE,GAAG;IACT,KAAK,EAAE,GAAG;IACV,KAAK,EAAE,IAAI;IACX,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,MAAM;IACZ,IAAI,EAAE,MAAM;IACZ,KAAK,EAAE,MAAM;IACb,IAAI,EAAE,MAAM;IACZ,IAAI,EAAE,OAAO;IACb,IAAI,EAAE,OAAO;IACb,IAAI,EAAE,SAAS;CACf,CAAC;AAEF,0EAA0E;AAC1E,MAAM,UAAU,wBAAwB,CAAC,QAAgB;IACxD,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC;IAC5B,IAAI,CAAC,GAAG,EAAE,CAAC;QACV,OAAO,IAAI,CAAC;IACb,CAAC;IACD,MAAM,MAAM,GAAG,mBAAmB,CAAC,GAAG,CAAC,CAAC;IACxC,IAAI,MAAM,IAAI,IAAI,EAAE,CAAC;QACpB,OAAO,MAAM,CAAC;IACf,CAAC;IACD,MAAM,KAAK,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;IAChC,OAAO,mBAAmB,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC;AAC3C,CAAC"}