@continuumdao/ctm-mpc-defi 0.2.19 → 0.2.20

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 (77) hide show
  1. package/dist/agent/catalog.cjs +185 -56
  2. package/dist/agent/catalog.cjs.map +1 -1
  3. package/dist/agent/catalog.d.ts +696 -633
  4. package/dist/agent/catalog.js +183 -57
  5. package/dist/agent/catalog.js.map +1 -1
  6. package/dist/agent/skills/hyperliquid/SKILL.md +24 -20
  7. package/dist/chains/evm/index.cjs +1 -1
  8. package/dist/chains/evm/index.cjs.map +1 -1
  9. package/dist/chains/evm/index.js +1 -1
  10. package/dist/chains/evm/index.js.map +1 -1
  11. package/dist/core/index.cjs +70 -1
  12. package/dist/core/index.cjs.map +1 -1
  13. package/dist/core/index.d.ts +35 -2
  14. package/dist/core/index.js +69 -2
  15. package/dist/core/index.js.map +1 -1
  16. package/dist/index.cjs +69 -1
  17. package/dist/index.cjs.map +1 -1
  18. package/dist/index.d.ts +1 -1
  19. package/dist/index.js +69 -3
  20. package/dist/index.js.map +1 -1
  21. package/dist/protocols/evm/aave-v4/index.cjs +1 -1
  22. package/dist/protocols/evm/aave-v4/index.cjs.map +1 -1
  23. package/dist/protocols/evm/aave-v4/index.js +1 -1
  24. package/dist/protocols/evm/aave-v4/index.js.map +1 -1
  25. package/dist/protocols/evm/circle-cctp/index.cjs +1 -1
  26. package/dist/protocols/evm/circle-cctp/index.cjs.map +1 -1
  27. package/dist/protocols/evm/circle-cctp/index.js +1 -1
  28. package/dist/protocols/evm/circle-cctp/index.js.map +1 -1
  29. package/dist/protocols/evm/curve-dao/index.cjs +1 -1
  30. package/dist/protocols/evm/curve-dao/index.cjs.map +1 -1
  31. package/dist/protocols/evm/curve-dao/index.d.ts +1 -1
  32. package/dist/protocols/evm/curve-dao/index.js +1 -1
  33. package/dist/protocols/evm/curve-dao/index.js.map +1 -1
  34. package/dist/protocols/evm/ethena/index.cjs +1 -1
  35. package/dist/protocols/evm/ethena/index.cjs.map +1 -1
  36. package/dist/protocols/evm/ethena/index.js +1 -1
  37. package/dist/protocols/evm/ethena/index.js.map +1 -1
  38. package/dist/protocols/evm/euler-v2/index.cjs +1 -1
  39. package/dist/protocols/evm/euler-v2/index.cjs.map +1 -1
  40. package/dist/protocols/evm/euler-v2/index.js +1 -1
  41. package/dist/protocols/evm/euler-v2/index.js.map +1 -1
  42. package/dist/protocols/evm/gmx/index.cjs +49 -21
  43. package/dist/protocols/evm/gmx/index.cjs.map +1 -1
  44. package/dist/protocols/evm/gmx/index.d.ts +20 -6
  45. package/dist/protocols/evm/gmx/index.js +48 -22
  46. package/dist/protocols/evm/gmx/index.js.map +1 -1
  47. package/dist/protocols/evm/hyperliquid/index.cjs +461 -1
  48. package/dist/protocols/evm/hyperliquid/index.cjs.map +1 -1
  49. package/dist/protocols/evm/hyperliquid/index.d.ts +187 -1
  50. package/dist/protocols/evm/hyperliquid/index.js +441 -3
  51. package/dist/protocols/evm/hyperliquid/index.js.map +1 -1
  52. package/dist/protocols/evm/lido/index.cjs +1 -1
  53. package/dist/protocols/evm/lido/index.cjs.map +1 -1
  54. package/dist/protocols/evm/lido/index.js +1 -1
  55. package/dist/protocols/evm/lido/index.js.map +1 -1
  56. package/dist/protocols/evm/maple/index.cjs +1 -1
  57. package/dist/protocols/evm/maple/index.cjs.map +1 -1
  58. package/dist/protocols/evm/maple/index.js +1 -1
  59. package/dist/protocols/evm/maple/index.js.map +1 -1
  60. package/dist/protocols/evm/morpho/index.cjs +1 -1
  61. package/dist/protocols/evm/morpho/index.cjs.map +1 -1
  62. package/dist/protocols/evm/morpho/index.js +1 -1
  63. package/dist/protocols/evm/morpho/index.js.map +1 -1
  64. package/dist/protocols/evm/permit2/index.cjs +202 -0
  65. package/dist/protocols/evm/permit2/index.cjs.map +1 -0
  66. package/dist/protocols/evm/permit2/index.d.ts +43 -0
  67. package/dist/protocols/evm/permit2/index.js +199 -0
  68. package/dist/protocols/evm/permit2/index.js.map +1 -0
  69. package/dist/protocols/evm/sky/index.cjs +1 -1
  70. package/dist/protocols/evm/sky/index.cjs.map +1 -1
  71. package/dist/protocols/evm/sky/index.js +1 -1
  72. package/dist/protocols/evm/sky/index.js.map +1 -1
  73. package/dist/protocols/evm/uniswap-v4/index.cjs +1 -1
  74. package/dist/protocols/evm/uniswap-v4/index.cjs.map +1 -1
  75. package/dist/protocols/evm/uniswap-v4/index.js +1 -1
  76. package/dist/protocols/evm/uniswap-v4/index.js.map +1 -1
  77. package/package.json +7 -1
@@ -24,11 +24,15 @@ function isGmxChainSupported(chainId) {
24
24
  }
25
25
  var require2 = module$1.createRequire(url.fileURLToPath((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('index.cjs', document.baseURI).href))));
26
26
  var { GmxApiSdk } = require2("@gmx-io/sdk/v2");
27
+ var { getApiUrl, getApiFallbackUrls } = require2("@gmx-io/sdk/configs/api");
27
28
  var GMX_HTTP_TIMEOUT_MS = 3e4;
28
- var GMX_API_BASE_URLS = {
29
- 42161: ["https://arbitrum.gmxapi.io", "https://arbitrum.gmxapi.ai"],
30
- 43114: ["https://avalanche.gmxapi.io", "https://avalanche.gmxapi.ai"]
31
- };
29
+ function gmxResolvedApiBaseUrls(chainId) {
30
+ const primary = getApiUrl(chainId);
31
+ if (!primary) {
32
+ throw new Error(`GMX API URLs are not configured for chain ${chainId}.`);
33
+ }
34
+ return [primary, ...getApiFallbackUrls(chainId)];
35
+ }
32
36
  function buildGmxUrl(baseUrl, path, query) {
33
37
  const base = baseUrl.replace(/\/$/, "");
34
38
  if (!query) return `${base}${path}`;
@@ -93,10 +97,7 @@ async function gmxHttpPostJson(baseUrl, path, body, opts) {
93
97
  }
94
98
  }
95
99
  function createIoFirstGmxHttpApi(chainId) {
96
- const urls = GMX_API_BASE_URLS[chainId];
97
- if (!urls) {
98
- throw new Error(`GMX API URLs are not configured for chain ${chainId}.`);
99
- }
100
+ const urls = gmxResolvedApiBaseUrls(chainId);
100
101
  async function withIoFirstFallback(fn) {
101
102
  let lastError;
102
103
  for (const baseUrl of urls) {
@@ -581,7 +582,7 @@ function finalizeMultisign(input) {
581
582
  batchMeta,
582
583
  ...input.extraJSON ?? {}
583
584
  };
584
- const extraJSON = JSON.stringify(extraPayload);
585
+ const extraJSON = JSON.stringify(extraPayload, (_, v) => typeof v === "bigint" ? v.toString() : v);
585
586
  const bodyForSign = {
586
587
  keyList,
587
588
  pubKey: ph,
@@ -1315,7 +1316,9 @@ async function buildEvmMultisignBodyGmxIncreaseBatch(args) {
1315
1316
  sizeUsdHuman: args.sizeUsdHuman,
1316
1317
  collateralToken: collateralSymbol,
1317
1318
  collateralAmountHuman: args.collateralAmountHuman,
1318
- isNativeIn: Boolean(args.isNativeIn)
1319
+ isNativeIn: Boolean(args.isNativeIn),
1320
+ ...args.orderType === "limit" && args.triggerPriceUsdHuman?.trim() ? { triggerPriceUsdHuman: args.triggerPriceUsdHuman.trim() } : {},
1321
+ ...args.patternFailureUsdHuman?.trim() ? { pfE: args.patternFailureUsdHuman.trim() } : {}
1319
1322
  },
1320
1323
  prepSteps
1321
1324
  );
@@ -2062,18 +2065,21 @@ async function gmxFetchMarketPrices(args) {
2062
2065
  if (!symbol) throw new Error("GMX market symbol is required.");
2063
2066
  if (!collateralSymbol) throw new Error("Collateral symbol is required.");
2064
2067
  const sdk = getGmxApiSdk(args.chainId);
2065
- const [tickers, collateralToken] = await Promise.all([
2066
- sdk.fetchMarketsTickers({ symbols: [symbol] }),
2067
- resolveGmxTokenBySymbol(args.chainId, collateralSymbol)
2068
- ]);
2068
+ const tickers = await sdk.fetchMarketsTickers({ symbols: [symbol] });
2069
2069
  const ticker = tickers.find((t) => String(t.symbol ?? "") === symbol) ?? tickers[0];
2070
2070
  const mark = asBigint3(ticker?.markPrice ?? ticker?.minPrice);
2071
2071
  const indexMarkUsd = formatGmxUsd30(mark);
2072
- const collateralPrice = asBigint3(
2073
- collateralToken?.prices?.minPrice
2074
- );
2075
- const collateralUsd = formatGmxUsd30(collateralPrice);
2076
- const indexPerCollateral = mark != null && collateralPrice != null ? formatIndexPerCollateral(mark, collateralPrice) : null;
2072
+ let collateralUsd = null;
2073
+ let indexPerCollateral = null;
2074
+ try {
2075
+ const collateralToken = await resolveGmxTokenBySymbol(args.chainId, collateralSymbol);
2076
+ const collateralPrice = asBigint3(
2077
+ collateralToken?.prices?.minPrice
2078
+ );
2079
+ collateralUsd = formatGmxUsd30(collateralPrice);
2080
+ indexPerCollateral = mark != null && collateralPrice != null ? formatIndexPerCollateral(mark, collateralPrice) : null;
2081
+ } catch {
2082
+ }
2077
2083
  return {
2078
2084
  symbol,
2079
2085
  indexLabel: indexLabelFromMarketSymbol(symbol),
@@ -2084,18 +2090,38 @@ async function gmxFetchMarketPrices(args) {
2084
2090
  fetchedAtMs: Date.now()
2085
2091
  };
2086
2092
  }
2093
+ function gmxOhlcvWindowFromCandles(candles) {
2094
+ if (candles.length === 0) {
2095
+ return { candleCount: 0 };
2096
+ }
2097
+ let startTimeMs = candles[0].timestampMs;
2098
+ let endTimeMs = candles[0].timestampMs;
2099
+ for (const candle of candles) {
2100
+ if (candle.timestampMs < startTimeMs) {
2101
+ startTimeMs = candle.timestampMs;
2102
+ }
2103
+ if (candle.timestampMs > endTimeMs) {
2104
+ endTimeMs = candle.timestampMs;
2105
+ }
2106
+ }
2107
+ return { startTimeMs, endTimeMs, candleCount: candles.length };
2108
+ }
2087
2109
  async function gmxFetchOhlcv(args) {
2088
2110
  const symbol = args.symbol.trim();
2089
2111
  if (!symbol) throw new Error("GMX market symbol is required.");
2090
2112
  const timeframe = assertGmxOhlcvTimeframe(args.timeframe ?? "15m");
2091
2113
  const limit = args.limit ?? DEFAULT_OHLCV_LIMIT;
2092
- const sort = args.sort ?? "desc";
2114
+ const sort = args.sort ?? "asc";
2093
2115
  const sdk = getGmxApiSdk(args.chainId);
2094
2116
  const ohlcvRaw = await sdk.fetchOhlcv({ symbol, timeframe, limit });
2117
+ const candles = mapOhlcvRows(ohlcvRaw, sort).sort((a, b) => a.timestampMs - b.timestampMs);
2118
+ const window = gmxOhlcvWindowFromCandles(candles);
2095
2119
  return {
2096
2120
  symbol,
2097
2121
  timeframe,
2098
- candles: mapOhlcvRows(ohlcvRaw, sort)
2122
+ chainId: args.chainId,
2123
+ ...window,
2124
+ candles
2099
2125
  };
2100
2126
  }
2101
2127
  async function gmxFetchMarketSnapshot(args) {
@@ -2272,10 +2298,12 @@ exports.gmxMarketMaxLeverageBps = gmxMarketMaxLeverageBps;
2272
2298
  exports.gmxMarketMaxLeverageLabel = gmxMarketMaxLeverageLabel;
2273
2299
  exports.gmxMarketsForCollateralSymbol = gmxMarketsForCollateralSymbol;
2274
2300
  exports.gmxNativeGasSymbolForChain = gmxNativeGasSymbolForChain;
2301
+ exports.gmxOhlcvWindowFromCandles = gmxOhlcvWindowFromCandles;
2275
2302
  exports.gmxProtocolModule = gmxProtocolModule;
2276
2303
  exports.gmxResolveMarketByGmTokenAddress = gmxResolveMarketByGmTokenAddress;
2277
2304
  exports.gmxResolveMarketBySymbol = gmxResolveMarketBySymbol;
2278
2305
  exports.gmxResolveTokenBySymbol = gmxResolveTokenBySymbol;
2306
+ exports.gmxResolvedApiBaseUrls = gmxResolvedApiBaseUrls;
2279
2307
  exports.gmxWrappedNativeSymbolForChain = gmxWrappedNativeSymbolForChain;
2280
2308
  exports.gmxZeroAddress = gmxZeroAddress;
2281
2309
  exports.isGmxChainSupported = isGmxChainSupported;