@continuumdao/ctm-mpc-defi 0.2.9 → 0.2.11

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 (36) hide show
  1. package/dist/agent/catalog.cjs +522 -19
  2. package/dist/agent/catalog.cjs.map +1 -1
  3. package/dist/agent/catalog.d.ts +639 -14
  4. package/dist/agent/catalog.js +510 -20
  5. package/dist/agent/catalog.js.map +1 -1
  6. package/dist/agent/skills/hyperliquid/SKILL.md +34 -6
  7. package/dist/agent/skills/morpho/SKILL.md +63 -0
  8. package/dist/core/index.cjs +9 -0
  9. package/dist/core/index.cjs.map +1 -1
  10. package/dist/core/index.d.ts +3 -1
  11. package/dist/core/index.js +8 -1
  12. package/dist/core/index.js.map +1 -1
  13. package/dist/index.cjs +9 -0
  14. package/dist/index.cjs.map +1 -1
  15. package/dist/index.d.ts +1 -1
  16. package/dist/index.js +8 -1
  17. package/dist/index.js.map +1 -1
  18. package/dist/protocols/evm/aave-v4/index.cjs.map +1 -1
  19. package/dist/protocols/evm/aave-v4/index.js.map +1 -1
  20. package/dist/protocols/evm/euler-v2/index.cjs.map +1 -1
  21. package/dist/protocols/evm/euler-v2/index.js.map +1 -1
  22. package/dist/protocols/evm/hyperliquid/index.cjs +407 -34
  23. package/dist/protocols/evm/hyperliquid/index.cjs.map +1 -1
  24. package/dist/protocols/evm/hyperliquid/index.d.ts +168 -15
  25. package/dist/protocols/evm/hyperliquid/index.js +390 -35
  26. package/dist/protocols/evm/hyperliquid/index.js.map +1 -1
  27. package/dist/protocols/evm/maple/index.cjs.map +1 -1
  28. package/dist/protocols/evm/maple/index.js.map +1 -1
  29. package/dist/protocols/evm/morpho/index.cjs +1971 -0
  30. package/dist/protocols/evm/morpho/index.cjs.map +1 -0
  31. package/dist/protocols/evm/morpho/index.d.ts +522 -0
  32. package/dist/protocols/evm/morpho/index.js +1918 -0
  33. package/dist/protocols/evm/morpho/index.js.map +1 -0
  34. package/dist/protocols/evm/sky/index.cjs.map +1 -1
  35. package/dist/protocols/evm/sky/index.js.map +1 -1
  36. package/package.json +6 -1
@@ -24,6 +24,12 @@ function hyperliquidVaultStatsUrl(chainId) {
24
24
  return chainId === 998 ? null : "https://stats-data.hyperliquid.xyz/Mainnet/vaults";
25
25
  }
26
26
  var HYPERLIQUID_HLP_VAULT_ADDRESS = "0xdfc24b077bc1425ad1dea75bcb6f8158e10df303";
27
+ function hyperliquidInferDexFromCoin(coin) {
28
+ const trimmed = coin.trim();
29
+ const sep = trimmed.indexOf(":");
30
+ if (sep <= 0) return void 0;
31
+ return trimmed.slice(0, sep);
32
+ }
27
33
 
28
34
  // src/protocols/evm/hyperliquid/constants.ts
29
35
  var HYPERLIQUID_CORE_WRITER_ADDRESS = "0x3333333333333333333333333333333333333333";
@@ -34,6 +40,28 @@ var HYPERLIQUID_TIF = {
34
40
  gtc: 2,
35
41
  ioc: 3
36
42
  };
43
+ var HYPERLIQUID_INTERVAL_MS = {
44
+ "1m": 6e4,
45
+ "3m": 18e4,
46
+ "5m": 3e5,
47
+ "15m": 9e5,
48
+ "30m": 18e5,
49
+ "1h": 36e5,
50
+ "2h": 72e5,
51
+ "4h": 144e5,
52
+ "8h": 288e5,
53
+ "12h": 432e5,
54
+ "1d": 864e5,
55
+ "3d": 2592e5,
56
+ "1w": 6048e5,
57
+ "1M": 2592e6
58
+ };
59
+ var HYPERLIQUID_DEFAULT_OHLCV_INTERVAL = "15m";
60
+ var HYPERLIQUID_DEFAULT_CANDLE_LIMIT = 48;
61
+ var HYPERLIQUID_MAX_CANDLE_LIMIT = 200;
62
+ var HYPERLIQUID_MAX_OHLCV_BARS = 2e3;
63
+ var HYPERLIQUID_DEFAULT_LOOKBACK_DAYS = 1;
64
+ var HYPERLIQUID_MAX_LOOKBACK_DAYS = 90;
37
65
 
38
66
  // src/protocols/evm/hyperliquid/api.ts
39
67
  async function hyperliquidInfoPost(chainId, body) {
@@ -84,19 +112,8 @@ async function hyperliquidFetchAllMids(args) {
84
112
  const mids = await hyperliquidInfoPost(args.chainId, req);
85
113
  return { mids };
86
114
  }
87
- async function hyperliquidFetchCandles(args) {
88
- const endTime = args.endTimeMs ?? Date.now();
89
- const startTime = args.startTimeMs ?? endTime - 7 * 24 * 60 * 60 * 1e3;
90
- const raw = await hyperliquidInfoPost(args.chainId, {
91
- type: "candleSnapshot",
92
- req: {
93
- coin: args.coin,
94
- interval: args.interval,
95
- startTime,
96
- endTime
97
- }
98
- });
99
- const candles = (raw ?? []).map((c) => ({
115
+ function hyperliquidMapCandles(raw) {
116
+ return (raw ?? []).map((c) => ({
100
117
  timestampMs: c.t,
101
118
  open: c.o,
102
119
  high: c.h,
@@ -104,20 +121,180 @@ async function hyperliquidFetchCandles(args) {
104
121
  close: c.c,
105
122
  volume: c.v
106
123
  }));
107
- return { candles };
124
+ }
125
+ async function hyperliquidFetchCandlesRaw(args) {
126
+ const raw = await hyperliquidInfoPost(args.chainId, {
127
+ type: "candleSnapshot",
128
+ req: {
129
+ coin: args.coin,
130
+ interval: args.interval,
131
+ startTime: args.startTimeMs,
132
+ endTime: args.endTimeMs
133
+ }
134
+ });
135
+ return hyperliquidMapCandles(raw);
136
+ }
137
+ function hyperliquidResolveOhlcvWindow(args) {
138
+ const endTimeMs = args.endTimeMs ?? Date.now();
139
+ const intervalMs = HYPERLIQUID_INTERVAL_MS[args.interval] ?? HYPERLIQUID_INTERVAL_MS["15m"];
140
+ let startTimeMs;
141
+ if (args.startTimeMs != null) {
142
+ startTimeMs = args.startTimeMs;
143
+ } else if (args.lookbackDays != null) {
144
+ if (args.lookbackDays <= 0 || args.lookbackDays > HYPERLIQUID_MAX_LOOKBACK_DAYS) {
145
+ throw new Error(`lookbackDays must be between 1 and ${HYPERLIQUID_MAX_LOOKBACK_DAYS}`);
146
+ }
147
+ startTimeMs = endTimeMs - args.lookbackDays * 864e5;
148
+ } else if (args.lookbackHours != null) {
149
+ if (args.lookbackHours <= 0 || args.lookbackHours > HYPERLIQUID_MAX_LOOKBACK_DAYS * 24) {
150
+ throw new Error(`lookbackHours must be between 1 and ${HYPERLIQUID_MAX_LOOKBACK_DAYS * 24}`);
151
+ }
152
+ startTimeMs = endTimeMs - args.lookbackHours * 36e5;
153
+ } else {
154
+ startTimeMs = endTimeMs - HYPERLIQUID_DEFAULT_LOOKBACK_DAYS * 864e5;
155
+ }
156
+ if (!Number.isFinite(startTimeMs) || !Number.isFinite(endTimeMs) || startTimeMs >= endTimeMs) {
157
+ throw new Error("Invalid OHLCV time range: startTimeMs must be before endTimeMs");
158
+ }
159
+ const expectedBars = Math.ceil((endTimeMs - startTimeMs) / intervalMs);
160
+ if (expectedBars > HYPERLIQUID_MAX_OHLCV_BARS) {
161
+ throw new Error(
162
+ `OHLCV range needs ~${expectedBars} bars at ${args.interval} (max ${HYPERLIQUID_MAX_OHLCV_BARS}). Use a coarser interval or shorter lookback.`
163
+ );
164
+ }
165
+ return { startTimeMs, endTimeMs, expectedBars };
166
+ }
167
+ async function hyperliquidFetchCandles(args) {
168
+ const endTime = args.endTimeMs ?? Date.now();
169
+ const intervalMs = HYPERLIQUID_INTERVAL_MS[args.interval] ?? HYPERLIQUID_INTERVAL_MS["15m"];
170
+ const limit = Math.min(Math.max(args.limit ?? HYPERLIQUID_DEFAULT_CANDLE_LIMIT, 1), HYPERLIQUID_MAX_CANDLE_LIMIT);
171
+ const startTime = args.startTimeMs ?? endTime - intervalMs * (limit + 4);
172
+ const candles = await hyperliquidFetchCandlesRaw({
173
+ chainId: args.chainId,
174
+ coin: args.coin,
175
+ interval: args.interval,
176
+ startTimeMs: startTime,
177
+ endTimeMs: endTime
178
+ });
179
+ return { candles: candles.slice(-limit) };
180
+ }
181
+ async function hyperliquidFetchOhlcvRange(args) {
182
+ const coin = args.coin.trim();
183
+ const interval = args.interval ?? HYPERLIQUID_DEFAULT_OHLCV_INTERVAL;
184
+ const dex = args.dex?.trim() || hyperliquidInferDexFromCoin(coin) || null;
185
+ const { startTimeMs, endTimeMs, expectedBars } = hyperliquidResolveOhlcvWindow({
186
+ interval,
187
+ lookbackDays: args.lookbackDays,
188
+ lookbackHours: args.lookbackHours,
189
+ startTimeMs: args.startTimeMs,
190
+ endTimeMs: args.endTimeMs
191
+ });
192
+ const candles = await hyperliquidFetchCandlesRaw({
193
+ chainId: args.chainId,
194
+ coin,
195
+ interval,
196
+ startTimeMs,
197
+ endTimeMs
198
+ });
199
+ if (candles.length === 0) {
200
+ throw new Error(
201
+ `No OHLCV data for ${coin} between ${startTimeMs} and ${endTimeMs} at ${interval}. Check coin/dex.`
202
+ );
203
+ }
204
+ const latestCandle = candles.length > 0 ? candles[candles.length - 1] : null;
205
+ return {
206
+ coin,
207
+ dex,
208
+ interval,
209
+ startTimeMs,
210
+ endTimeMs,
211
+ expectedBars,
212
+ candleCount: candles.length,
213
+ latestCandle,
214
+ candles,
215
+ fetchedAtMs: Date.now()
216
+ };
217
+ }
218
+ async function hyperliquidFetchPerpAssetContext(args) {
219
+ const coin = args.coin.trim();
220
+ const dex = args.dex?.trim() || hyperliquidInferDexFromCoin(coin) || "";
221
+ const req = { type: "metaAndAssetCtxs" };
222
+ if (dex) req.dex = dex;
223
+ const raw = await hyperliquidInfoPost(args.chainId, req);
224
+ const universe = raw?.[0]?.universe ?? [];
225
+ const contexts = raw?.[1] ?? [];
226
+ const idx = universe.findIndex((u) => u.name === coin);
227
+ if (idx < 0) {
228
+ throw new Error(`Hyperliquid asset context not found for ${coin}${dex ? ` on dex ${dex}` : ""}`);
229
+ }
230
+ const ctx = contexts[idx] ?? {};
231
+ const str = (v) => {
232
+ const s = String(v ?? "").trim();
233
+ return s || null;
234
+ };
235
+ return {
236
+ markPx: str(ctx.markPx),
237
+ midPx: str(ctx.midPx),
238
+ oraclePx: str(ctx.oraclePx),
239
+ prevDayPx: str(ctx.prevDayPx),
240
+ funding: str(ctx.funding),
241
+ openInterest: str(ctx.openInterest)
242
+ };
243
+ }
244
+ function hyperliquidPickLivePrice(args) {
245
+ const midUsd = args.midPx ?? args.markPx ?? args.midFromAllMids;
246
+ if (!midUsd) {
247
+ throw new Error("Could not fetch live Hyperliquid price (mark, mid, and allMids all empty)");
248
+ }
249
+ const source = args.midPx ? "midPx" : args.markPx ? "markPx" : "allMids";
250
+ return {
251
+ markPx: args.markPx,
252
+ midPx: args.midPx,
253
+ oraclePx: null,
254
+ prevDayPx: null,
255
+ midUsd,
256
+ source
257
+ };
108
258
  }
109
259
  async function hyperliquidFetchMarketSnapshot(args) {
110
- const interval = args.interval ?? "1h";
111
- const [{ mids }, { candles }] = await Promise.all([
112
- hyperliquidFetchAllMids({ chainId: args.chainId, dex: args.dex }),
113
- hyperliquidFetchCandles({ chainId: args.chainId, coin: args.coin, interval })
260
+ const coin = args.coin.trim();
261
+ const interval = args.interval ?? HYPERLIQUID_DEFAULT_OHLCV_INTERVAL;
262
+ const dex = args.dex?.trim() || hyperliquidInferDexFromCoin(coin) || null;
263
+ const candleLimit = Math.min(
264
+ Math.max(args.candleLimit ?? HYPERLIQUID_DEFAULT_CANDLE_LIMIT, 1),
265
+ HYPERLIQUID_MAX_CANDLE_LIMIT
266
+ );
267
+ const [{ mids }, assetCtx, { candles }] = await Promise.all([
268
+ hyperliquidFetchAllMids({ chainId: args.chainId, dex: dex ?? void 0 }),
269
+ hyperliquidFetchPerpAssetContext({ chainId: args.chainId, coin, dex: dex ?? void 0 }),
270
+ hyperliquidFetchCandles({
271
+ chainId: args.chainId,
272
+ coin,
273
+ interval,
274
+ limit: candleLimit
275
+ })
114
276
  ]);
277
+ const midFromAllMids = mids[coin] ?? null;
278
+ const livePrice = {
279
+ ...hyperliquidPickLivePrice({
280
+ markPx: assetCtx.markPx,
281
+ midPx: assetCtx.midPx,
282
+ midFromAllMids
283
+ }),
284
+ oraclePx: assetCtx.oraclePx,
285
+ prevDayPx: assetCtx.prevDayPx
286
+ };
287
+ const latestCandle = candles.length > 0 ? candles[candles.length - 1] : null;
115
288
  return {
116
- coin: args.coin,
117
- midUsd: mids[args.coin] ?? null,
289
+ coin,
290
+ dex,
291
+ livePrice,
292
+ midUsd: livePrice.midUsd,
118
293
  fetchedAtMs: Date.now(),
119
294
  interval,
120
- candles
295
+ latestCandle,
296
+ candles,
297
+ candleCount: candles.length
121
298
  };
122
299
  }
123
300
  async function hyperliquidFetchClearinghouseState(args) {
@@ -262,6 +439,21 @@ async function hyperliquidFetchDexList(args) {
262
439
  }
263
440
  return { dexes };
264
441
  }
442
+ async function hyperliquidFetchPerpConciseAnnotations(args) {
443
+ const raw = await hyperliquidInfoPost(args.chainId, {
444
+ type: "perpConciseAnnotations"
445
+ });
446
+ const map = /* @__PURE__ */ new Map();
447
+ if (!Array.isArray(raw)) return map;
448
+ for (const entry of raw) {
449
+ if (!Array.isArray(entry) || entry.length < 2) continue;
450
+ const coin = String(entry[0] ?? "").trim();
451
+ const meta = entry[1];
452
+ if (!coin || !meta || typeof meta !== "object") continue;
453
+ map.set(coin, meta);
454
+ }
455
+ return map;
456
+ }
265
457
  async function hyperliquidFetchDelegations(args) {
266
458
  const raw = await hyperliquidInfoPost(args.chainId, {
267
459
  type: "delegations",
@@ -277,13 +469,138 @@ async function hyperliquidFetchStakingSummary(args) {
277
469
  return { delegated: raw?.delegated ?? "0", undelegated: raw?.undelegated ?? "0" };
278
470
  }
279
471
 
472
+ // src/protocols/evm/hyperliquid/marketSearch.ts
473
+ function normalizeQuery(value) {
474
+ return value.trim().toLowerCase();
475
+ }
476
+ function compactCoin(value) {
477
+ return normalizeQuery(value).replace(/[^a-z0-9]/g, "");
478
+ }
479
+ function hyperliquidMarketSymbol(coin) {
480
+ const sep = coin.indexOf(":");
481
+ return sep >= 0 ? coin.slice(sep + 1) : coin;
482
+ }
483
+ function scoreMarketMatch(query, market, annotation) {
484
+ const q = normalizeQuery(query);
485
+ if (!q) return null;
486
+ const coin = market.name;
487
+ const symbol = hyperliquidMarketSymbol(coin);
488
+ const coinLower = normalizeQuery(coin);
489
+ const symbolLower = normalizeQuery(symbol);
490
+ if (coinLower === q) return { score: 100, reason: "exact coin name" };
491
+ if (symbolLower === q) return { score: 95, reason: "exact ticker symbol" };
492
+ if (compactCoin(coin) === compactCoin(q)) return { score: 92, reason: "coin name without separators" };
493
+ if (annotation?.displayName) {
494
+ const display = normalizeQuery(annotation.displayName);
495
+ if (display === q) return { score: 94, reason: "exact display name" };
496
+ if (display.includes(q) || q.includes(display)) return { score: 72, reason: "display name partial match" };
497
+ }
498
+ for (const keyword of annotation?.keywords ?? []) {
499
+ const kw = normalizeQuery(keyword);
500
+ if (!kw) continue;
501
+ if (kw === q) return { score: 88, reason: `keyword "${keyword}"` };
502
+ if (kw.includes(q) || q.includes(kw)) return { score: 68, reason: `keyword partial "${keyword}"` };
503
+ }
504
+ if (symbolLower.includes(q) || q.includes(symbolLower)) {
505
+ return { score: 78, reason: "ticker partial match" };
506
+ }
507
+ if (!coin.includes(":") && coinLower.includes(q)) {
508
+ return { score: 65, reason: "native coin partial match" };
509
+ }
510
+ if (market.dex && normalizeQuery(market.dex) === q) {
511
+ return { score: 40, reason: "dex name match" };
512
+ }
513
+ return null;
514
+ }
515
+ async function hyperliquidCollectAllPerpMarkets(args) {
516
+ const dexFilter = args.dex?.trim();
517
+ const { dexes } = await hyperliquidFetchDexList({ chainId: args.chainId });
518
+ if (dexFilter) {
519
+ const { markets: markets2 } = await hyperliquidFetchPerpMeta({ chainId: args.chainId, dex: dexFilter });
520
+ return { markets: markets2.map((m) => ({ ...m, dex: dexFilter })), dexes };
521
+ }
522
+ const { markets: nativeMarkets } = await hyperliquidFetchPerpMeta({ chainId: args.chainId });
523
+ const markets = [...nativeMarkets];
524
+ const hip3Batches = await Promise.all(
525
+ dexes.map(async (d) => {
526
+ const { markets: dexMarkets } = await hyperliquidFetchPerpMeta({ chainId: args.chainId, dex: d.name });
527
+ return dexMarkets.map((m) => ({ ...m, dex: d.name }));
528
+ })
529
+ );
530
+ for (const batch of hip3Batches) markets.push(...batch);
531
+ return { markets, dexes };
532
+ }
533
+ async function hyperliquidSearchMarkets(args) {
534
+ const query = args.query.trim();
535
+ if (!query) return { matches: [] };
536
+ const limit = Math.max(1, Math.min(args.limit ?? 20, 50));
537
+ const [{ markets }, annotationMap] = await Promise.all([
538
+ hyperliquidCollectAllPerpMarkets({ chainId: args.chainId, dex: args.dex?.trim() }),
539
+ hyperliquidFetchPerpConciseAnnotations({ chainId: args.chainId })
540
+ ]);
541
+ const hits = [];
542
+ for (const market of markets) {
543
+ const annotation = annotationMap.get(market.name);
544
+ const scored = scoreMarketMatch(query, market, annotation);
545
+ if (!scored || scored.score < 40) continue;
546
+ hits.push({
547
+ coin: market.name,
548
+ symbol: hyperliquidMarketSymbol(market.name),
549
+ dex: market.dex,
550
+ asset: market.asset,
551
+ szDecimals: market.szDecimals,
552
+ maxLeverage: market.maxLeverage,
553
+ onlyIsolated: market.onlyIsolated,
554
+ displayName: annotation?.displayName,
555
+ category: annotation?.category,
556
+ keywords: annotation?.keywords,
557
+ matchScore: scored.score,
558
+ matchReason: scored.reason
559
+ });
560
+ }
561
+ hits.sort((a, b) => b.matchScore - a.matchScore || a.coin.localeCompare(b.coin));
562
+ return { matches: hits.slice(0, limit) };
563
+ }
564
+ async function hyperliquidResolvePerpMarket(args) {
565
+ const coin = args.coin.trim();
566
+ if (!coin) throw new Error("coin is required");
567
+ const dex = args.dex?.trim() || hyperliquidInferDexFromCoin(coin);
568
+ if (dex || !coin.includes(":")) {
569
+ const { markets } = await hyperliquidFetchPerpMeta({ chainId: args.chainId, dex });
570
+ const direct = markets.find((m) => m.name.toLowerCase() === coin.toLowerCase());
571
+ if (direct) {
572
+ return {
573
+ ...direct,
574
+ dex: dex || direct.dex,
575
+ symbol: hyperliquidMarketSymbol(direct.name)
576
+ };
577
+ }
578
+ }
579
+ const { matches } = await hyperliquidSearchMarkets({ chainId: args.chainId, query: coin, dex: args.dex, limit: 10 });
580
+ const bestScore = matches[0]?.matchScore ?? 0;
581
+ if (bestScore < 60) throw new Error(`Unknown Hyperliquid perp market: ${coin}`);
582
+ const top = matches.filter((m) => m.matchScore === bestScore);
583
+ if (top.length === 1) {
584
+ const m = top[0];
585
+ return {
586
+ name: m.coin,
587
+ asset: m.asset,
588
+ szDecimals: m.szDecimals,
589
+ maxLeverage: m.maxLeverage,
590
+ onlyIsolated: m.onlyIsolated,
591
+ dex: m.dex,
592
+ symbol: m.symbol
593
+ };
594
+ }
595
+ throw new Error(
596
+ `Ambiguous Hyperliquid market for "${coin}": ${top.map((m) => m.coin).join(", ")}. Pass dex or full coin name (e.g. xyz:AAPL).`
597
+ );
598
+ }
599
+
280
600
  // src/protocols/evm/hyperliquid/assets.ts
281
601
  async function hyperliquidResolvePerpAsset(args) {
282
- const coin = args.coin.trim();
283
- const { markets } = await hyperliquidFetchPerpMeta({ chainId: args.chainId, dex: args.dex });
284
- const hit = markets.find((m) => m.name.toLowerCase() === coin.toLowerCase());
285
- if (!hit) throw new Error(`Unknown Hyperliquid perp market: ${coin}`);
286
- return { asset: hit.asset, szDecimals: hit.szDecimals, maxLeverage: hit.maxLeverage };
602
+ const resolved = await hyperliquidResolvePerpMarket(args);
603
+ return { asset: resolved.asset, szDecimals: resolved.szDecimals, maxLeverage: resolved.maxLeverage };
287
604
  }
288
605
  async function hyperliquidResolveSpotAsset(args) {
289
606
  const coin = args.coin.trim();
@@ -357,10 +674,16 @@ function mapPositionRow(p) {
357
674
  }
358
675
  async function hyperliquidFetchOpenMarketContext(args) {
359
676
  const user = args.executorAddress.trim().toLowerCase();
360
- const coin = args.coin.trim();
677
+ const resolved = await hyperliquidResolvePerpMarket({
678
+ chainId: args.chainId,
679
+ coin: args.coin,
680
+ dex: args.dex
681
+ });
682
+ const coin = resolved.name;
683
+ const dex = args.dex?.trim() || resolved.dex;
361
684
  const [{ activeAsset }, { state }] = await Promise.all([
362
685
  hyperliquidFetchActiveAssetData({ chainId: args.chainId, user, coin }),
363
- hyperliquidFetchClearinghouseState({ chainId: args.chainId, user, dex: args.dex })
686
+ hyperliquidFetchClearinghouseState({ chainId: args.chainId, user, dex })
364
687
  ]);
365
688
  return {
366
689
  context: {
@@ -395,12 +718,15 @@ async function hyperliquidFetchOrdersForExecutor(args) {
395
718
  });
396
719
  }
397
720
  async function hyperliquidFetchMarketsSummary(args) {
398
- const [{ markets }, { dexes }] = await Promise.all([
399
- hyperliquidFetchPerpMeta({ chainId: args.chainId, dex: args.dex }),
400
- hyperliquidFetchDexList({ chainId: args.chainId })
401
- ]);
721
+ const { markets, dexes } = await hyperliquidCollectAllPerpMarkets({
722
+ chainId: args.chainId,
723
+ dex: args.dex?.trim()
724
+ });
402
725
  return { markets, dexes };
403
726
  }
727
+ async function hyperliquidSearchMarketsSummary(args) {
728
+ return hyperliquidSearchMarkets(args);
729
+ }
404
730
  async function hyperliquidFetchPositionsForExecutor(args) {
405
731
  const { rows } = await hyperliquidFetchPositionDisplayRows(args);
406
732
  return { positions: rows };
@@ -446,8 +772,37 @@ async function hyperliquidFetchDelegationsForExecutor(args) {
446
772
  return { delegations };
447
773
  }
448
774
  async function hyperliquidFetchMarketSnapshotSummary(args) {
449
- const snapshot = await hyperliquidFetchMarketSnapshot(args);
450
- return { snapshot };
775
+ const resolved = await hyperliquidResolvePerpMarket({
776
+ chainId: args.chainId,
777
+ coin: args.coin,
778
+ dex: args.dex
779
+ });
780
+ const snapshot = await hyperliquidFetchMarketSnapshot({
781
+ chainId: args.chainId,
782
+ coin: resolved.name,
783
+ interval: args.interval,
784
+ dex: args.dex?.trim() || resolved.dex,
785
+ candleLimit: args.candleLimit
786
+ });
787
+ return { snapshot, resolvedCoin: resolved.name, dex: resolved.dex ?? null };
788
+ }
789
+ async function hyperliquidFetchOhlcvSummary(args) {
790
+ const resolved = await hyperliquidResolvePerpMarket({
791
+ chainId: args.chainId,
792
+ coin: args.coin,
793
+ dex: args.dex
794
+ });
795
+ const ohlcv = await hyperliquidFetchOhlcvRange({
796
+ chainId: args.chainId,
797
+ coin: resolved.name,
798
+ interval: args.interval,
799
+ dex: args.dex?.trim() || resolved.dex,
800
+ lookbackDays: args.lookbackDays,
801
+ lookbackHours: args.lookbackHours,
802
+ startTimeMs: args.startTimeMs,
803
+ endTimeMs: args.endTimeMs
804
+ });
805
+ return { ohlcv, resolvedCoin: resolved.name, dex: resolved.dex ?? null };
451
806
  }
452
807
  var coreWriterAbi = parseAbi(["function sendRawAction(bytes data) external"]);
453
808
  var ACTION_LIMIT_ORDER = 1;
@@ -1104,6 +1459,6 @@ var hyperliquidProtocolModule = {
1104
1459
  };
1105
1460
  registerProtocolModule(hyperliquidProtocolModule);
1106
1461
 
1107
- export { HYPERLIQUID_CORE_WRITER_ADDRESS, HYPERLIQUID_CORE_WRITER_GAS_FALLBACK, HYPERLIQUID_HLP_VAULT_ADDRESS, HYPERLIQUID_PROTOCOL_ID, HYPERLIQUID_SPOT_ASSET_OFFSET, HYPERLIQUID_SUPPORTED_CHAIN_IDS, HYPERLIQUID_TIF, buildCoreWriterCancelByCloidCalldata, buildCoreWriterCancelByOidCalldata, buildCoreWriterLimitOrderCalldata, buildCoreWriterStakingDepositCalldata, buildCoreWriterStakingWithdrawCalldata, buildCoreWriterTokenDelegateCalldata, buildCoreWriterUsdClassTransferCalldata, buildCoreWriterVaultTransferCalldata, buildEvmMultisignBodyHyperliquidCancelBatch, buildEvmMultisignBodyHyperliquidCloseBatch, buildEvmMultisignBodyHyperliquidDelegateBatch, buildEvmMultisignBodyHyperliquidDelegateOnlyBatch, buildEvmMultisignBodyHyperliquidLimitOrderBatch, buildEvmMultisignBodyHyperliquidStakeDepositBatch, buildEvmMultisignBodyHyperliquidStakeWithdrawBatch, buildEvmMultisignBodyHyperliquidUndelegateBatch, buildEvmMultisignBodyHyperliquidUsdClassTransferBatch, buildEvmMultisignBodyHyperliquidVaultDepositBatch, buildEvmMultisignBodyHyperliquidVaultWithdrawBatch, coreWriterStep, hyperliquidApiBaseUrl, hyperliquidEncodePx8, hyperliquidEncodeUsd6, hyperliquidEncodeWei8, hyperliquidFetchActiveAssetData, hyperliquidFetchAllMids, hyperliquidFetchCandles, hyperliquidFetchClearinghouseState, hyperliquidFetchDelegations, hyperliquidFetchDelegationsForExecutor, hyperliquidFetchDexList, hyperliquidFetchMarketSnapshot, hyperliquidFetchMarketSnapshotSummary, hyperliquidFetchMarketsSummary, hyperliquidFetchOpenContextSummary, hyperliquidFetchOpenMarketContext, hyperliquidFetchOpenOrders, hyperliquidFetchOpenOrdersSummary, hyperliquidFetchOrdersForExecutor, hyperliquidFetchPerpMeta, hyperliquidFetchPositionDisplayRows, hyperliquidFetchPositionsForExecutor, hyperliquidFetchSpotClearinghouseState, hyperliquidFetchSpotMeta, hyperliquidFetchStakingSummary, hyperliquidFetchStakingSummaryForExecutor, hyperliquidFetchUsdClassBalances, hyperliquidFetchUsdClassBalancesSummary, hyperliquidFetchUserVaultEquities, hyperliquidFetchUserVaultEquitiesSummary, hyperliquidFetchVaultCatalogSummary, hyperliquidFetchVaultSummaries, hyperliquidIsSpotAssetId, hyperliquidProtocolModule, hyperliquidResolveAsset, hyperliquidResolvePerpAsset, hyperliquidResolveSpotAsset, hyperliquidResolveTif, hyperliquidVaultStatsUrl, isHyperliquidChainSupported };
1462
+ export { HYPERLIQUID_CORE_WRITER_ADDRESS, HYPERLIQUID_CORE_WRITER_GAS_FALLBACK, HYPERLIQUID_DEFAULT_CANDLE_LIMIT, HYPERLIQUID_DEFAULT_LOOKBACK_DAYS, HYPERLIQUID_DEFAULT_OHLCV_INTERVAL, HYPERLIQUID_HLP_VAULT_ADDRESS, HYPERLIQUID_INTERVAL_MS, HYPERLIQUID_MAX_CANDLE_LIMIT, HYPERLIQUID_MAX_LOOKBACK_DAYS, HYPERLIQUID_MAX_OHLCV_BARS, HYPERLIQUID_PROTOCOL_ID, HYPERLIQUID_SPOT_ASSET_OFFSET, HYPERLIQUID_SUPPORTED_CHAIN_IDS, HYPERLIQUID_TIF, buildCoreWriterCancelByCloidCalldata, buildCoreWriterCancelByOidCalldata, buildCoreWriterLimitOrderCalldata, buildCoreWriterStakingDepositCalldata, buildCoreWriterStakingWithdrawCalldata, buildCoreWriterTokenDelegateCalldata, buildCoreWriterUsdClassTransferCalldata, buildCoreWriterVaultTransferCalldata, buildEvmMultisignBodyHyperliquidCancelBatch, buildEvmMultisignBodyHyperliquidCloseBatch, buildEvmMultisignBodyHyperliquidDelegateBatch, buildEvmMultisignBodyHyperliquidDelegateOnlyBatch, buildEvmMultisignBodyHyperliquidLimitOrderBatch, buildEvmMultisignBodyHyperliquidStakeDepositBatch, buildEvmMultisignBodyHyperliquidStakeWithdrawBatch, buildEvmMultisignBodyHyperliquidUndelegateBatch, buildEvmMultisignBodyHyperliquidUsdClassTransferBatch, buildEvmMultisignBodyHyperliquidVaultDepositBatch, buildEvmMultisignBodyHyperliquidVaultWithdrawBatch, coreWriterStep, hyperliquidApiBaseUrl, hyperliquidCollectAllPerpMarkets, hyperliquidEncodePx8, hyperliquidEncodeUsd6, hyperliquidEncodeWei8, hyperliquidFetchActiveAssetData, hyperliquidFetchAllMids, hyperliquidFetchCandles, hyperliquidFetchClearinghouseState, hyperliquidFetchDelegations, hyperliquidFetchDelegationsForExecutor, hyperliquidFetchDexList, hyperliquidFetchMarketSnapshot, hyperliquidFetchMarketSnapshotSummary, hyperliquidFetchMarketsSummary, hyperliquidFetchOhlcvRange, hyperliquidFetchOhlcvSummary, hyperliquidFetchOpenContextSummary, hyperliquidFetchOpenMarketContext, hyperliquidFetchOpenOrders, hyperliquidFetchOpenOrdersSummary, hyperliquidFetchOrdersForExecutor, hyperliquidFetchPerpAssetContext, hyperliquidFetchPerpConciseAnnotations, hyperliquidFetchPerpMeta, hyperliquidFetchPositionDisplayRows, hyperliquidFetchPositionsForExecutor, hyperliquidFetchSpotClearinghouseState, hyperliquidFetchSpotMeta, hyperliquidFetchStakingSummary, hyperliquidFetchStakingSummaryForExecutor, hyperliquidFetchUsdClassBalances, hyperliquidFetchUsdClassBalancesSummary, hyperliquidFetchUserVaultEquities, hyperliquidFetchUserVaultEquitiesSummary, hyperliquidFetchVaultCatalogSummary, hyperliquidFetchVaultSummaries, hyperliquidInferDexFromCoin, hyperliquidIsSpotAssetId, hyperliquidMarketSymbol, hyperliquidProtocolModule, hyperliquidResolveAsset, hyperliquidResolveOhlcvWindow, hyperliquidResolvePerpAsset, hyperliquidResolvePerpMarket, hyperliquidResolveSpotAsset, hyperliquidResolveTif, hyperliquidSearchMarkets, hyperliquidSearchMarketsSummary, hyperliquidVaultStatsUrl, isHyperliquidChainSupported };
1108
1463
  //# sourceMappingURL=index.js.map
1109
1464
  //# sourceMappingURL=index.js.map