@continuumdao/ctm-mpc-defi 0.2.19 → 0.2.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 (94) hide show
  1. package/dist/agent/catalog.cjs +303 -93
  2. package/dist/agent/catalog.cjs.map +1 -1
  3. package/dist/agent/catalog.d.ts +985 -709
  4. package/dist/agent/catalog.js +299 -94
  5. package/dist/agent/catalog.js.map +1 -1
  6. package/dist/agent/skills/hyperliquid/SKILL.md +24 -20
  7. package/dist/agent/skills/uniswap-v4/SKILL.md +58 -0
  8. package/dist/chains/evm/index.cjs +6 -2
  9. package/dist/chains/evm/index.cjs.map +1 -1
  10. package/dist/chains/evm/index.d.ts +4 -4
  11. package/dist/chains/evm/index.js +6 -2
  12. package/dist/chains/evm/index.js.map +1 -1
  13. package/dist/chains/near/index.d.ts +1 -1
  14. package/dist/chains/solana/index.d.ts +1 -1
  15. package/dist/core/index.cjs +95 -1
  16. package/dist/core/index.cjs.map +1 -1
  17. package/dist/core/index.d.ts +44 -4
  18. package/dist/core/index.js +91 -2
  19. package/dist/core/index.js.map +1 -1
  20. package/dist/{envelope-CpBUh9eP.d.ts → envelope-C_bfuKab.d.ts} +3 -1
  21. package/dist/index.cjs +96 -2
  22. package/dist/index.cjs.map +1 -1
  23. package/dist/index.d.ts +5 -5
  24. package/dist/index.js +93 -4
  25. package/dist/index.js.map +1 -1
  26. package/dist/protocols/evm/aave-v4/index.cjs +6 -2
  27. package/dist/protocols/evm/aave-v4/index.cjs.map +1 -1
  28. package/dist/protocols/evm/aave-v4/index.d.ts +1 -1
  29. package/dist/protocols/evm/aave-v4/index.js +6 -2
  30. package/dist/protocols/evm/aave-v4/index.js.map +1 -1
  31. package/dist/protocols/evm/circle-cctp/index.cjs +6 -2
  32. package/dist/protocols/evm/circle-cctp/index.cjs.map +1 -1
  33. package/dist/protocols/evm/circle-cctp/index.d.ts +2 -2
  34. package/dist/protocols/evm/circle-cctp/index.js +6 -2
  35. package/dist/protocols/evm/circle-cctp/index.js.map +1 -1
  36. package/dist/protocols/evm/curve-dao/index.cjs +6 -2
  37. package/dist/protocols/evm/curve-dao/index.cjs.map +1 -1
  38. package/dist/protocols/evm/curve-dao/index.d.ts +2 -2
  39. package/dist/protocols/evm/curve-dao/index.js +6 -2
  40. package/dist/protocols/evm/curve-dao/index.js.map +1 -1
  41. package/dist/protocols/evm/ethena/index.cjs +6 -2
  42. package/dist/protocols/evm/ethena/index.cjs.map +1 -1
  43. package/dist/protocols/evm/ethena/index.d.ts +1 -1
  44. package/dist/protocols/evm/ethena/index.js +6 -2
  45. package/dist/protocols/evm/ethena/index.js.map +1 -1
  46. package/dist/protocols/evm/euler-v2/index.cjs +6 -2
  47. package/dist/protocols/evm/euler-v2/index.cjs.map +1 -1
  48. package/dist/protocols/evm/euler-v2/index.d.ts +1 -1
  49. package/dist/protocols/evm/euler-v2/index.js +6 -2
  50. package/dist/protocols/evm/euler-v2/index.js.map +1 -1
  51. package/dist/protocols/evm/gmx/index.cjs +54 -22
  52. package/dist/protocols/evm/gmx/index.cjs.map +1 -1
  53. package/dist/protocols/evm/gmx/index.d.ts +22 -8
  54. package/dist/protocols/evm/gmx/index.js +53 -23
  55. package/dist/protocols/evm/gmx/index.js.map +1 -1
  56. package/dist/protocols/evm/hyperliquid/index.cjs +467 -2
  57. package/dist/protocols/evm/hyperliquid/index.cjs.map +1 -1
  58. package/dist/protocols/evm/hyperliquid/index.d.ts +189 -3
  59. package/dist/protocols/evm/hyperliquid/index.js +447 -4
  60. package/dist/protocols/evm/hyperliquid/index.js.map +1 -1
  61. package/dist/protocols/evm/lido/index.cjs +6 -2
  62. package/dist/protocols/evm/lido/index.cjs.map +1 -1
  63. package/dist/protocols/evm/lido/index.d.ts +1 -1
  64. package/dist/protocols/evm/lido/index.js +6 -2
  65. package/dist/protocols/evm/lido/index.js.map +1 -1
  66. package/dist/protocols/evm/maple/index.cjs +6 -2
  67. package/dist/protocols/evm/maple/index.cjs.map +1 -1
  68. package/dist/protocols/evm/maple/index.d.ts +1 -1
  69. package/dist/protocols/evm/maple/index.js +6 -2
  70. package/dist/protocols/evm/maple/index.js.map +1 -1
  71. package/dist/protocols/evm/morpho/index.cjs +6 -2
  72. package/dist/protocols/evm/morpho/index.cjs.map +1 -1
  73. package/dist/protocols/evm/morpho/index.d.ts +1 -1
  74. package/dist/protocols/evm/morpho/index.js +6 -2
  75. package/dist/protocols/evm/morpho/index.js.map +1 -1
  76. package/dist/protocols/evm/permit2/index.cjs +206 -0
  77. package/dist/protocols/evm/permit2/index.cjs.map +1 -0
  78. package/dist/protocols/evm/permit2/index.d.ts +43 -0
  79. package/dist/protocols/evm/permit2/index.js +203 -0
  80. package/dist/protocols/evm/permit2/index.js.map +1 -0
  81. package/dist/protocols/evm/sky/index.cjs +6 -2
  82. package/dist/protocols/evm/sky/index.cjs.map +1 -1
  83. package/dist/protocols/evm/sky/index.d.ts +1 -1
  84. package/dist/protocols/evm/sky/index.js +6 -2
  85. package/dist/protocols/evm/sky/index.js.map +1 -1
  86. package/dist/protocols/evm/uniswap-v4/index.cjs +685 -2
  87. package/dist/protocols/evm/uniswap-v4/index.cjs.map +1 -1
  88. package/dist/protocols/evm/uniswap-v4/index.d.ts +180 -3
  89. package/dist/protocols/evm/uniswap-v4/index.js +663 -3
  90. package/dist/protocols/evm/uniswap-v4/index.js.map +1 -1
  91. package/dist/{registry-Bv5o37_w.d.ts → registry-DxDSPQ-p.d.ts} +1 -1
  92. package/dist/{types-BfjWdw1j.d.ts → types-PZrvtjv8.d.ts} +2 -0
  93. package/dist/{types-DUeNJLr9.d.ts → types-RZWOTm8c.d.ts} +1 -1
  94. package/package.json +8 -2
@@ -1,12 +1,14 @@
1
- import { b as KeyGenSubsetForPermit, M as MultisignBuildResult, e as ProtocolModule } from '../../../types-BfjWdw1j.js';
1
+ import { b as KeyGenSubsetForPermit, M as MultisignBuildResult, e as ProtocolModule } from '../../../types-PZrvtjv8.js';
2
2
  import { Address } from 'viem';
3
- import { E as EvmChainDetail } from '../../../types-DUeNJLr9.js';
3
+ import { E as EvmChainDetail } from '../../../types-RZWOTm8c.js';
4
4
 
5
5
  /** GMX V2 production chains supported in Continuum multi-sign v1. */
6
6
  declare const GMX_SUPPORTED_CHAIN_IDS: readonly [42161, 43114];
7
7
  type GmxSupportedChainId = (typeof GMX_SUPPORTED_CHAIN_IDS)[number];
8
8
  declare function isGmxChainSupported(chainId: number): chainId is GmxSupportedChainId;
9
9
 
10
+ /** Primary + fallback REST bases from @gmx-io/sdk (each includes `/v1`; SDK paths are e.g. `/tokens`). */
11
+ declare function gmxResolvedApiBaseUrls(chainId: number): readonly string[];
10
12
  type GmxApiSdkInstance = {
11
13
  fetchMarkets: () => Promise<GmxMarketRow[]>;
12
14
  fetchMarketsTickers: (args?: {
@@ -237,6 +239,7 @@ type GmxIncreaseOrderArgs = GmxMultisignCommon & {
237
239
  collateralToken: string;
238
240
  collateralAmountHuman: string;
239
241
  triggerPriceUsdHuman?: string;
242
+ patternFailureUsdHuman?: string;
240
243
  slippageBps?: number;
241
244
  executionFeeBufferBps?: number;
242
245
  isNativeIn?: boolean;
@@ -448,17 +451,28 @@ declare function gmxFetchMarketPrices(args: {
448
451
  symbol: string;
449
452
  collateralSymbol: string;
450
453
  }): Promise<GmxMarketPrices>;
454
+ type GmxOhlcvFetchResult = {
455
+ symbol: string;
456
+ timeframe: GmxOhlcvTimeframe;
457
+ chainId: number;
458
+ startTimeMs?: number;
459
+ endTimeMs?: number;
460
+ candleCount: number;
461
+ candles: GmxOhlcvCandleRow[];
462
+ };
463
+ /** Derive chart window metadata from vendor candle rows (ascending time bounds). */
464
+ declare function gmxOhlcvWindowFromCandles(candles: GmxOhlcvCandleRow[]): {
465
+ startTimeMs?: number;
466
+ endTimeMs?: number;
467
+ candleCount: number;
468
+ };
451
469
  declare function gmxFetchOhlcv(args: {
452
470
  chainId: number;
453
471
  symbol: string;
454
472
  timeframe?: string;
455
473
  limit?: number;
456
474
  sort?: 'asc' | 'desc';
457
- }): Promise<{
458
- symbol: string;
459
- timeframe: GmxOhlcvTimeframe;
460
- candles: GmxOhlcvCandleRow[];
461
- }>;
475
+ }): Promise<GmxOhlcvFetchResult>;
462
476
  declare function gmxFetchMarketSnapshot(args: {
463
477
  chainId: number;
464
478
  symbol: string;
@@ -482,4 +496,4 @@ declare function gmxKeyForNodeAssetRow(args: {
482
496
  declare const GMX_PROTOCOL_ID = "gmx";
483
497
  declare const gmxProtocolModule: ProtocolModule;
484
498
 
485
- export { GMX_NATIVE_GAS_SYMBOL_BY_CHAIN, GMX_OHLCV_TIMEFRAMES, GMX_PROTOCOL_ID, GMX_SUPPORTED_CHAIN_IDS, GMX_WRAPPED_NATIVE_SYMBOL_BY_CHAIN, type GmxApiSdkInstance, type GmxCancelOrderArgs, type GmxClosePositionCap, type GmxDecreaseOrderArgs, type GmxGmDepositArgs, type GmxGmLiquidityPositionRow, type GmxGmMarketSummaryRow, type GmxGmWithdrawArgs, type GmxIncreaseOrderArgs, type GmxMarketApySource, type GmxMarketPrices, type GmxMarketRow, type GmxMarketSnapshot, type GmxOhlcvCandleRow, type GmxOhlcvTimeframe, type GmxOrderRow, type GmxPositionDisplayRow, type GmxPositionRow, type GmxPrepareOrderResponse, type GmxStakeGmxArgs, type GmxSupportedChainId, type GmxTokenRow, type GmxTradeEstimate, type GmxUnstakeGmxArgs, assertGmxOhlcvTimeframe, buildEvmMultisignBodyGmxCancelBatch, buildEvmMultisignBodyGmxDecreaseBatch, buildEvmMultisignBodyGmxGmDepositBatch, buildEvmMultisignBodyGmxGmWithdrawBatch, buildEvmMultisignBodyGmxIncreaseBatch, buildEvmMultisignBodyGmxLimitDecreaseBatch, buildEvmMultisignBodyGmxLimitIncreaseBatch, buildEvmMultisignBodyGmxStakeGmxBatch, buildEvmMultisignBodyGmxUnstakeGmxBatch, formatGmxLeverageBps, formatGmxTokenAmountHuman, formatGmxUsd30, formatGmxUsd30HumanInput, getGmxApiSdk, gmxAssertIncreaseOrderWithinMaxLeverage, gmxContractAddress, gmxEnrichGmMarketRowWithApy, gmxEstimateDecreasePreview, gmxEstimateGmExecutionFee, gmxEstimateIncreasePreview, gmxFetchClosePositionCap, gmxFetchCollateralTokens, gmxFetchGmApy, gmxFetchGmLiquidityPositions, gmxFetchGmMarketForToken, gmxFetchGmMarkets, gmxFetchGmMarketsSummary, gmxFetchMarketPrices, gmxFetchMarketSnapshot, gmxFetchMarkets, gmxFetchMarketsSummary, gmxFetchOhlcv, gmxFetchOrdersForExecutor, gmxFetchOrdersSummary, gmxFetchPositionDisplayRows, gmxFetchPositionsForExecutor, gmxFetchStakingPower, gmxFetchTokens, gmxFindWrappedNativeToken, gmxFormatApyPercent, gmxFormatPositionsForDisplay, gmxGmxTokenAddress, gmxIsCloseSizeWithinPosition, gmxIsCollateralTokenSupported, gmxIsGmMarketTokenAddress, gmxIsGmxStakeTokenAddress, gmxKeyForNodeAssetRow, gmxLookupMarketApy, gmxMarketAcceptsCollateral, gmxMarketCollateralTokens, gmxMarketMaxLeverageBps, gmxMarketMaxLeverageLabel, gmxMarketsForCollateralSymbol, gmxNativeGasSymbolForChain, gmxProtocolModule, gmxResolveMarketByGmTokenAddress, gmxResolveMarketBySymbol, gmxResolveTokenBySymbol, gmxWrappedNativeSymbolForChain, gmxZeroAddress, isGmxChainSupported, parseGmxTokenAmount, parseGmxUsd30 };
499
+ export { GMX_NATIVE_GAS_SYMBOL_BY_CHAIN, GMX_OHLCV_TIMEFRAMES, GMX_PROTOCOL_ID, GMX_SUPPORTED_CHAIN_IDS, GMX_WRAPPED_NATIVE_SYMBOL_BY_CHAIN, type GmxApiSdkInstance, type GmxCancelOrderArgs, type GmxClosePositionCap, type GmxDecreaseOrderArgs, type GmxGmDepositArgs, type GmxGmLiquidityPositionRow, type GmxGmMarketSummaryRow, type GmxGmWithdrawArgs, type GmxIncreaseOrderArgs, type GmxMarketApySource, type GmxMarketPrices, type GmxMarketRow, type GmxMarketSnapshot, type GmxOhlcvCandleRow, type GmxOhlcvFetchResult, type GmxOhlcvTimeframe, type GmxOrderRow, type GmxPositionDisplayRow, type GmxPositionRow, type GmxPrepareOrderResponse, type GmxStakeGmxArgs, type GmxSupportedChainId, type GmxTokenRow, type GmxTradeEstimate, type GmxUnstakeGmxArgs, assertGmxOhlcvTimeframe, buildEvmMultisignBodyGmxCancelBatch, buildEvmMultisignBodyGmxDecreaseBatch, buildEvmMultisignBodyGmxGmDepositBatch, buildEvmMultisignBodyGmxGmWithdrawBatch, buildEvmMultisignBodyGmxIncreaseBatch, buildEvmMultisignBodyGmxLimitDecreaseBatch, buildEvmMultisignBodyGmxLimitIncreaseBatch, buildEvmMultisignBodyGmxStakeGmxBatch, buildEvmMultisignBodyGmxUnstakeGmxBatch, formatGmxLeverageBps, formatGmxTokenAmountHuman, formatGmxUsd30, formatGmxUsd30HumanInput, getGmxApiSdk, gmxAssertIncreaseOrderWithinMaxLeverage, gmxContractAddress, gmxEnrichGmMarketRowWithApy, gmxEstimateDecreasePreview, gmxEstimateGmExecutionFee, gmxEstimateIncreasePreview, gmxFetchClosePositionCap, gmxFetchCollateralTokens, gmxFetchGmApy, gmxFetchGmLiquidityPositions, gmxFetchGmMarketForToken, gmxFetchGmMarkets, gmxFetchGmMarketsSummary, gmxFetchMarketPrices, gmxFetchMarketSnapshot, gmxFetchMarkets, gmxFetchMarketsSummary, gmxFetchOhlcv, gmxFetchOrdersForExecutor, gmxFetchOrdersSummary, gmxFetchPositionDisplayRows, gmxFetchPositionsForExecutor, gmxFetchStakingPower, gmxFetchTokens, gmxFindWrappedNativeToken, gmxFormatApyPercent, gmxFormatPositionsForDisplay, gmxGmxTokenAddress, gmxIsCloseSizeWithinPosition, gmxIsCollateralTokenSupported, gmxIsGmMarketTokenAddress, gmxIsGmxStakeTokenAddress, gmxKeyForNodeAssetRow, gmxLookupMarketApy, gmxMarketAcceptsCollateral, gmxMarketCollateralTokens, gmxMarketMaxLeverageBps, gmxMarketMaxLeverageLabel, gmxMarketsForCollateralSymbol, gmxNativeGasSymbolForChain, gmxOhlcvWindowFromCandles, gmxProtocolModule, gmxResolveMarketByGmTokenAddress, gmxResolveMarketBySymbol, gmxResolveTokenBySymbol, gmxResolvedApiBaseUrls, gmxWrappedNativeSymbolForChain, gmxZeroAddress, isGmxChainSupported, parseGmxTokenAmount, parseGmxUsd30 };
@@ -21,11 +21,15 @@ function isGmxChainSupported(chainId) {
21
21
  }
22
22
  var require2 = createRequire(fileURLToPath(import.meta.url));
23
23
  var { GmxApiSdk } = require2("@gmx-io/sdk/v2");
24
+ var { getApiUrl, getApiFallbackUrls } = require2("@gmx-io/sdk/configs/api");
24
25
  var GMX_HTTP_TIMEOUT_MS = 3e4;
25
- var GMX_API_BASE_URLS = {
26
- 42161: ["https://arbitrum.gmxapi.io", "https://arbitrum.gmxapi.ai"],
27
- 43114: ["https://avalanche.gmxapi.io", "https://avalanche.gmxapi.ai"]
28
- };
26
+ function gmxResolvedApiBaseUrls(chainId) {
27
+ const primary = getApiUrl(chainId);
28
+ if (!primary) {
29
+ throw new Error(`GMX API URLs are not configured for chain ${chainId}.`);
30
+ }
31
+ return [primary, ...getApiFallbackUrls(chainId)];
32
+ }
29
33
  function buildGmxUrl(baseUrl, path, query) {
30
34
  const base = baseUrl.replace(/\/$/, "");
31
35
  if (!query) return `${base}${path}`;
@@ -90,10 +94,7 @@ async function gmxHttpPostJson(baseUrl, path, body, opts) {
90
94
  }
91
95
  }
92
96
  function createIoFirstGmxHttpApi(chainId) {
93
- const urls = GMX_API_BASE_URLS[chainId];
94
- if (!urls) {
95
- throw new Error(`GMX API URLs are not configured for chain ${chainId}.`);
96
- }
97
+ const urls = gmxResolvedApiBaseUrls(chainId);
97
98
  async function withIoFirstFallback(fn) {
98
99
  let lastError;
99
100
  for (const baseUrl of urls) {
@@ -578,7 +579,7 @@ function finalizeMultisign(input) {
578
579
  batchMeta,
579
580
  ...input.extraJSON ?? {}
580
581
  };
581
- const extraJSON = JSON.stringify(extraPayload);
582
+ const extraJSON = JSON.stringify(extraPayload, (_, v) => typeof v === "bigint" ? v.toString() : v);
582
583
  const bodyForSign = {
583
584
  keyList,
584
585
  pubKey: ph,
@@ -603,6 +604,9 @@ function finalizeMultisign(input) {
603
604
  bodyForSign.value = valueWei.toString();
604
605
  }
605
606
  if (clientId) bodyForSign.clientId = clientId;
607
+ if (input.expiryDate != null && input.expiryDate > 0) {
608
+ bodyForSign.expiryDate = Math.floor(input.expiryDate);
609
+ }
606
610
  return { bodyForSign, messageToSign: JSON.stringify(bodyForSign) };
607
611
  }
608
612
  function routerSwapGasLimitFromEstimate(estimatedGas, chainGasLimit) {
@@ -766,7 +770,8 @@ async function buildEvmMultisignBatch(args) {
766
770
  destinationChainID: String(chainId),
767
771
  destinationAddress: args.destinationAddress ?? steps[0].to,
768
772
  legs,
769
- extraJSON: Object.keys(extraJSON).length > 0 ? extraJSON : void 0
773
+ extraJSON: Object.keys(extraJSON).length > 0 ? extraJSON : void 0,
774
+ expiryDate: context.expiryDate
770
775
  });
771
776
  const pv = args.payableValueWei;
772
777
  if (pv != null && pv > 0n) {
@@ -1312,7 +1317,9 @@ async function buildEvmMultisignBodyGmxIncreaseBatch(args) {
1312
1317
  sizeUsdHuman: args.sizeUsdHuman,
1313
1318
  collateralToken: collateralSymbol,
1314
1319
  collateralAmountHuman: args.collateralAmountHuman,
1315
- isNativeIn: Boolean(args.isNativeIn)
1320
+ isNativeIn: Boolean(args.isNativeIn),
1321
+ ...args.orderType === "limit" && args.triggerPriceUsdHuman?.trim() ? { triggerPriceUsdHuman: args.triggerPriceUsdHuman.trim() } : {},
1322
+ ...args.patternFailureUsdHuman?.trim() ? { pfE: args.patternFailureUsdHuman.trim() } : {}
1316
1323
  },
1317
1324
  prepSteps
1318
1325
  );
@@ -2059,18 +2066,21 @@ async function gmxFetchMarketPrices(args) {
2059
2066
  if (!symbol) throw new Error("GMX market symbol is required.");
2060
2067
  if (!collateralSymbol) throw new Error("Collateral symbol is required.");
2061
2068
  const sdk = getGmxApiSdk(args.chainId);
2062
- const [tickers, collateralToken] = await Promise.all([
2063
- sdk.fetchMarketsTickers({ symbols: [symbol] }),
2064
- resolveGmxTokenBySymbol(args.chainId, collateralSymbol)
2065
- ]);
2069
+ const tickers = await sdk.fetchMarketsTickers({ symbols: [symbol] });
2066
2070
  const ticker = tickers.find((t) => String(t.symbol ?? "") === symbol) ?? tickers[0];
2067
2071
  const mark = asBigint3(ticker?.markPrice ?? ticker?.minPrice);
2068
2072
  const indexMarkUsd = formatGmxUsd30(mark);
2069
- const collateralPrice = asBigint3(
2070
- collateralToken?.prices?.minPrice
2071
- );
2072
- const collateralUsd = formatGmxUsd30(collateralPrice);
2073
- const indexPerCollateral = mark != null && collateralPrice != null ? formatIndexPerCollateral(mark, collateralPrice) : null;
2073
+ let collateralUsd = null;
2074
+ let indexPerCollateral = null;
2075
+ try {
2076
+ const collateralToken = await resolveGmxTokenBySymbol(args.chainId, collateralSymbol);
2077
+ const collateralPrice = asBigint3(
2078
+ collateralToken?.prices?.minPrice
2079
+ );
2080
+ collateralUsd = formatGmxUsd30(collateralPrice);
2081
+ indexPerCollateral = mark != null && collateralPrice != null ? formatIndexPerCollateral(mark, collateralPrice) : null;
2082
+ } catch {
2083
+ }
2074
2084
  return {
2075
2085
  symbol,
2076
2086
  indexLabel: indexLabelFromMarketSymbol(symbol),
@@ -2081,18 +2091,38 @@ async function gmxFetchMarketPrices(args) {
2081
2091
  fetchedAtMs: Date.now()
2082
2092
  };
2083
2093
  }
2094
+ function gmxOhlcvWindowFromCandles(candles) {
2095
+ if (candles.length === 0) {
2096
+ return { candleCount: 0 };
2097
+ }
2098
+ let startTimeMs = candles[0].timestampMs;
2099
+ let endTimeMs = candles[0].timestampMs;
2100
+ for (const candle of candles) {
2101
+ if (candle.timestampMs < startTimeMs) {
2102
+ startTimeMs = candle.timestampMs;
2103
+ }
2104
+ if (candle.timestampMs > endTimeMs) {
2105
+ endTimeMs = candle.timestampMs;
2106
+ }
2107
+ }
2108
+ return { startTimeMs, endTimeMs, candleCount: candles.length };
2109
+ }
2084
2110
  async function gmxFetchOhlcv(args) {
2085
2111
  const symbol = args.symbol.trim();
2086
2112
  if (!symbol) throw new Error("GMX market symbol is required.");
2087
2113
  const timeframe = assertGmxOhlcvTimeframe(args.timeframe ?? "15m");
2088
2114
  const limit = args.limit ?? DEFAULT_OHLCV_LIMIT;
2089
- const sort = args.sort ?? "desc";
2115
+ const sort = args.sort ?? "asc";
2090
2116
  const sdk = getGmxApiSdk(args.chainId);
2091
2117
  const ohlcvRaw = await sdk.fetchOhlcv({ symbol, timeframe, limit });
2118
+ const candles = mapOhlcvRows(ohlcvRaw, sort).sort((a, b) => a.timestampMs - b.timestampMs);
2119
+ const window = gmxOhlcvWindowFromCandles(candles);
2092
2120
  return {
2093
2121
  symbol,
2094
2122
  timeframe,
2095
- candles: mapOhlcvRows(ohlcvRaw, sort)
2123
+ chainId: args.chainId,
2124
+ ...window,
2125
+ candles
2096
2126
  };
2097
2127
  }
2098
2128
  async function gmxFetchMarketSnapshot(args) {
@@ -2209,6 +2239,6 @@ var gmxProtocolModule = {
2209
2239
  };
2210
2240
  registerProtocolModule(gmxProtocolModule);
2211
2241
 
2212
- export { GMX_NATIVE_GAS_SYMBOL_BY_CHAIN, GMX_OHLCV_TIMEFRAMES, GMX_PROTOCOL_ID, GMX_SUPPORTED_CHAIN_IDS, GMX_WRAPPED_NATIVE_SYMBOL_BY_CHAIN, assertGmxOhlcvTimeframe, buildEvmMultisignBodyGmxCancelBatch, buildEvmMultisignBodyGmxDecreaseBatch, buildEvmMultisignBodyGmxGmDepositBatch, buildEvmMultisignBodyGmxGmWithdrawBatch, buildEvmMultisignBodyGmxIncreaseBatch, buildEvmMultisignBodyGmxLimitDecreaseBatch, buildEvmMultisignBodyGmxLimitIncreaseBatch, buildEvmMultisignBodyGmxStakeGmxBatch, buildEvmMultisignBodyGmxUnstakeGmxBatch, formatGmxLeverageBps, formatGmxTokenAmountHuman, formatGmxUsd30, formatGmxUsd30HumanInput, getGmxApiSdk, gmxAssertIncreaseOrderWithinMaxLeverage, gmxContractAddress, gmxEnrichGmMarketRowWithApy, gmxEstimateDecreasePreview, gmxEstimateGmExecutionFee, gmxEstimateIncreasePreview, gmxFetchClosePositionCap, gmxFetchCollateralTokens, gmxFetchGmApy, gmxFetchGmLiquidityPositions, gmxFetchGmMarketForToken, gmxFetchGmMarkets, gmxFetchGmMarketsSummary, gmxFetchMarketPrices, gmxFetchMarketSnapshot, gmxFetchMarkets, gmxFetchMarketsSummary, gmxFetchOhlcv, gmxFetchOrdersForExecutor, gmxFetchOrdersSummary, gmxFetchPositionDisplayRows, gmxFetchPositionsForExecutor, gmxFetchStakingPower, gmxFetchTokens, gmxFindWrappedNativeToken, gmxFormatApyPercent, gmxFormatPositionsForDisplay, gmxGmxTokenAddress, gmxIsCloseSizeWithinPosition, gmxIsCollateralTokenSupported, gmxIsGmMarketTokenAddress, gmxIsGmxStakeTokenAddress, gmxKeyForNodeAssetRow, gmxLookupMarketApy, gmxMarketAcceptsCollateral, gmxMarketCollateralTokens, gmxMarketMaxLeverageBps, gmxMarketMaxLeverageLabel, gmxMarketsForCollateralSymbol, gmxNativeGasSymbolForChain, gmxProtocolModule, gmxResolveMarketByGmTokenAddress, gmxResolveMarketBySymbol, gmxResolveTokenBySymbol, gmxWrappedNativeSymbolForChain, gmxZeroAddress, isGmxChainSupported, parseGmxTokenAmount, parseGmxUsd30 };
2242
+ export { GMX_NATIVE_GAS_SYMBOL_BY_CHAIN, GMX_OHLCV_TIMEFRAMES, GMX_PROTOCOL_ID, GMX_SUPPORTED_CHAIN_IDS, GMX_WRAPPED_NATIVE_SYMBOL_BY_CHAIN, assertGmxOhlcvTimeframe, buildEvmMultisignBodyGmxCancelBatch, buildEvmMultisignBodyGmxDecreaseBatch, buildEvmMultisignBodyGmxGmDepositBatch, buildEvmMultisignBodyGmxGmWithdrawBatch, buildEvmMultisignBodyGmxIncreaseBatch, buildEvmMultisignBodyGmxLimitDecreaseBatch, buildEvmMultisignBodyGmxLimitIncreaseBatch, buildEvmMultisignBodyGmxStakeGmxBatch, buildEvmMultisignBodyGmxUnstakeGmxBatch, formatGmxLeverageBps, formatGmxTokenAmountHuman, formatGmxUsd30, formatGmxUsd30HumanInput, getGmxApiSdk, gmxAssertIncreaseOrderWithinMaxLeverage, gmxContractAddress, gmxEnrichGmMarketRowWithApy, gmxEstimateDecreasePreview, gmxEstimateGmExecutionFee, gmxEstimateIncreasePreview, gmxFetchClosePositionCap, gmxFetchCollateralTokens, gmxFetchGmApy, gmxFetchGmLiquidityPositions, gmxFetchGmMarketForToken, gmxFetchGmMarkets, gmxFetchGmMarketsSummary, gmxFetchMarketPrices, gmxFetchMarketSnapshot, gmxFetchMarkets, gmxFetchMarketsSummary, gmxFetchOhlcv, gmxFetchOrdersForExecutor, gmxFetchOrdersSummary, gmxFetchPositionDisplayRows, gmxFetchPositionsForExecutor, gmxFetchStakingPower, gmxFetchTokens, gmxFindWrappedNativeToken, gmxFormatApyPercent, gmxFormatPositionsForDisplay, gmxGmxTokenAddress, gmxIsCloseSizeWithinPosition, gmxIsCollateralTokenSupported, gmxIsGmMarketTokenAddress, gmxIsGmxStakeTokenAddress, gmxKeyForNodeAssetRow, gmxLookupMarketApy, gmxMarketAcceptsCollateral, gmxMarketCollateralTokens, gmxMarketMaxLeverageBps, gmxMarketMaxLeverageLabel, gmxMarketsForCollateralSymbol, gmxNativeGasSymbolForChain, gmxOhlcvWindowFromCandles, gmxProtocolModule, gmxResolveMarketByGmTokenAddress, gmxResolveMarketBySymbol, gmxResolveTokenBySymbol, gmxResolvedApiBaseUrls, gmxWrappedNativeSymbolForChain, gmxZeroAddress, isGmxChainSupported, parseGmxTokenAmount, parseGmxUsd30 };
2213
2243
  //# sourceMappingURL=index.js.map
2214
2244
  //# sourceMappingURL=index.js.map