{"version":3,"sources":["../../../src/subgraph/markets/index.ts","../../../src/subgraph/markets/subgraphQueries.ts","../../../src/common/subgraphMapper.ts","../../../src/error/not-found.error.ts"],"sourcesContent":["import { request } from 'graphql-request';\nimport { fetchAllMarketsDataQuery, fetchMarketByIdQuery } from './subgraphQueries';\nimport { mapResponseToMarket, mapResponseToMarketArray } from '../../common/subgraphMapper';\nimport { NotFoundError } from '../../error/not-found.error';\nimport { Market } from '../../interfaces/sdkTypes';\nimport { MarketSubgraph } from '../../interfaces/subgraphTypes';\n\n// Returns data for all the markets from subgraph.\n// If the subgraph query fails, the function returns an empty array\nexport const getAllMarketsFromSubgraph = async (subgraphEndpoint: string): Promise<Market[]> => {\n  try {\n    const subgraphResponse: { markets: MarketSubgraph[] } = await request(subgraphEndpoint, fetchAllMarketsDataQuery);\n    if (!subgraphResponse) throw Error(`Error while fetching markets`);\n\n    const markets = mapResponseToMarketArray(subgraphResponse.markets)?.filter((market): market is Market => !!market);\n    if (markets) return markets;\n    throw new NotFoundError('Markets not found');\n  } catch (error) {\n    console.log('Markets not found. Subgraph request failed', error);\n    return [];\n  }\n};\n\n// Get all details of a market from subgraph by market ID\n// Throws error when query fails or market not found\nexport const getMarketById = async (subgraphEndpoint: string, marketId: string): Promise<Market> => {\n  try {\n    const subgraphResponse: any = await request(subgraphEndpoint, fetchMarketByIdQuery(marketId));\n    if (!subgraphResponse) throw Error(`Error while fetching markets`);\n\n    if (subgraphResponse) {\n      const market = mapResponseToMarket(subgraphResponse.market);\n      if (market && market.id === marketId) {\n        return market;\n      }\n    }\n    throw Error(`Market with Market Id ${marketId} Not Found`);\n  } catch (error) {\n    console.log(`Market with Market Id ${marketId} Not Found`, error);\n    throw error;\n  }\n};\n","import { gql } from 'graphql-request';\n\n// The `fetchAllMarketsData` query fetches all market data for the first 100 markets\nexport const fetchAllMarketsDataQuery = gql`\n  {\n    markets {\n      id\n      marketName\n      marketSymbol\n      marketPrice\n      feedId\n      skew\n      size\n      maxOpenInterest\n      maxMarketValue\n      interestRate\n      currentFundingRate\n      currentFundingVelocity\n      indexPrice\n      skewScale\n      maxFundingVelocity\n      makerFee\n      takerFee\n      marketPrice\n      initialMarginRatioD18\n      minimumPositionMargin\n      maintenanceMarginRatioD18\n      minimumInitialMarginRatioD18\n    }\n  }\n`;\n\n// Fetch all details of a market by ID\nexport const fetchMarketByIdQuery = (marketId: string) => gql`\n  {\n    market(id: \"${marketId}\") {\n    id\n    marketName\n    marketSymbol\n    marketPrice\n    feedId\n    skew\n    size\n    maxOpenInterest\n    maxMarketValue\n    interestRate\n    currentFundingRate\n    currentFundingVelocity\n    indexPrice\n    skewScale\n    maxFundingVelocity\n    makerFee\n    takerFee\n    marketPrice\n    initialMarginRatioD18\n  \tminimumPositionMargin\n    maintenanceMarginRatioD18\n    minimumInitialMarginRatioD18\n    }\n  }\n`;\n","import { PriceFeedSnapshot, PythData } from '../interfaces/subgraphTypes';\nimport { CollateralDeposit, Market, Order, Position, SnxAccount, Token, Wallet } from '../interfaces/sdkTypes';\n\n////////////////////////////////////////////////////////////////\n//////////////////////    Wallet   ////////////////////////////\n////////////////////////////////////////////////////////////////\n\nexport const mapResponseToWallet = (response: any): Wallet | undefined => {\n  if (!response) return undefined;\n  try {\n    return {\n      id: response?.id,\n      // snxAccounts: mapSnxAccountsArray(response.snxAccounts)\n    };\n  } catch (error) {\n    console.log('Error while mapping data', error);\n    return undefined;\n  }\n};\n\nexport const mapResponseToWalletArray = (response: any): Wallet[] | undefined => {\n  if (!response) return undefined;\n  try {\n    return response.map((account: any) => {\n      return mapResponseToWallet(account);\n    });\n  } catch (error) {\n    console.log('Error while mapping data', error);\n    return undefined;\n  }\n};\n\n////////////////////////////////////////////////////////////////\n//////////////////////    SNX Account   ////////////////////////\n////////////////////////////////////////////////////////////////\n\nexport const mapResponseToSnxAccount = (response: any): SnxAccount | undefined => {\n  if (!response) return undefined;\n\n  try {\n    return {\n      id: response?.id,\n      type: response?.type,\n      accountId: response?.accountId,\n      owner: response?.owner ?? mapResponseToWallet(response?.owner),\n      totalOrdersCount: response?.totalOrdersCount,\n      totalPositionsCount: response?.totalPositionsCount,\n      openPositionCount: response?.openPositionCount,\n      countProfitablePositions: response?.countProfitablePositions,\n      countLossPositions: response?.countLossPositions,\n      countLiquidatedPositions: response?.countLiquidatedPositions,\n      realizedPnlFromPositions: response?.realizedPnlFromPositions,\n      totalFeesPaid: response?.totalFeesPaid,\n      finalPnlAfterFees: response?.finalPnlAfterFees,\n      totalVolumeInUsd: response?.totalVolumeInUsd,\n      totalAccruedBorrowingFeesInUsd: response?.totalAccruedBorrowingFeesInUsd,\n      integratorFeesGenerated: response?.integratorFeesGenerated,\n      orders: response?.orders ? mapResponseToOrderArray(response?.orders) : [],\n      positions: response?.positions ? mapResponseToPositionArray(response?.positions) : [],\n      collateralDeposits: response?.collateralDeposits\n        ? mapResponseToCollateralDepositArray(response?.collateralDeposits)\n        : [],\n    };\n  } catch (error) {\n    console.log('Error while mapping data', error);\n    return undefined;\n  }\n};\n\nexport const mapResponseToSnxAccountArray = (response: any): SnxAccount[] | undefined => {\n  if (!response) return undefined;\n  try {\n    return response.map((snxAccount: any) => {\n      return mapResponseToSnxAccount(snxAccount);\n    });\n  } catch (error) {\n    console.log('Error while mapping data', error);\n    return undefined;\n  }\n};\n\n////////////////////////////////////////////////////////////////\n//////////////////////    MARKET    ////////////////////////////\n////////////////////////////////////////////////////////////////\n\nexport const mapResponseToMarket = (response: any): Market | undefined => {\n  if (!response) return undefined;\n  if (response?.marketName === '' || response?.marketSymbol === '') return undefined;\n  try {\n    return {\n      id: response?.id ?? '',\n      marketName: response?.marketName ?? '',\n      marketSymbol: response?.marketSymbol ?? '',\n      feedId: response?.feedId ?? '',\n      skew: response?.skew ?? '0',\n      size: response?.size ?? '0',\n      maxOpenInterest: response?.maxOpenInterest ?? '0',\n      interestRate: response?.interestRate ?? '0',\n      currentFundingRate: response?.currentFundingRate ?? '0',\n      currentFundingVelocity: response?.currentFundingVelocity ?? '0',\n      indexPrice: response?.indexPrice ?? '0',\n      skewScale: response?.skewScale ?? '0',\n      maxFundingVelocity: response?.maxFundingVelocity ?? '0',\n      makerFee: response?.makerFee ?? '0',\n      takerFee: response?.takerFee ?? '0',\n      maxMarketValue: response?.maxMarketValue ?? '0',\n      maxMarketSize: response?.maxMarketSize ?? '0',\n      marketPrice: response?.marketPrice ?? '0',\n      initialMarginRatioD18: response?.initialMarginRatioD18 ?? '0',\n      maintenanceMarginRatioD18: response?.maintenanceMarginRatioD18 ?? '0',\n      minimumInitialMarginRatioD18: response?.minimumInitialMarginRatioD18 ?? '0',\n      flagRewardRatioD18: response?.flagRewardRatioD18 ?? '0',\n      minimumPositionMargin: response?.minimumPositionMargin ?? '0',\n      openInterestUsd: response?.openInterestUsd ?? '0',\n    };\n  } catch (error) {\n    console.log('Error while mapping data', error);\n    return undefined;\n  }\n};\n\nexport const mapResponseToMarketArray = (response: any): (Market | undefined)[] | undefined => {\n  if (!response) return undefined;\n  try {\n    return response.map((market: any) => {\n      return mapResponseToMarket(market);\n    });\n  } catch (error) {\n    console.log('Error while mapping data', error);\n    return undefined;\n  }\n};\n\n////////////////////////////////////////////////////////////////\n//////////////////////    ORDERS    ////////////////////////////\n////////////////////////////////////////////////////////////////\n\nexport const mapResponseToOrder = (response: any): Order | undefined => {\n  if (!response) return undefined;\n  try {\n    return {\n      id: response?.id,\n      market: response?.market ?? mapResponseToMarket(response?.market),\n      snxAccountId: response?.snxAccount?.id,\n      isLimitOrder: response?.isLimitOrder,\n      acceptablePrice: response?.acceptablePrice,\n      commitmentTime: response?.commitmentTime,\n      expectedPriceTime: response?.expectedPriceTime,\n      settlementTime: response?.settlementTime,\n      expirationTime: response?.expirationTime,\n      trackingCode: response?.trackingCode,\n      deltaSize: response?.deltaSize,\n      deltaSizeUsd: response?.deltaSizeUsd,\n      executionPrice: response?.executionPrice,\n      collectedFees: response?.collectedFees,\n      settlementReward: response?.settlementReward,\n      referralFees: response?.referralFees,\n      partnerAddress: response?.partnerAddress,\n      txHash: response?.txHash,\n      createdTimestamp: response?.createdTimestamp,\n      status: response?.status,\n      settledTxHash: response?.settledTxHash,\n      cancellationTxHash: response?.cancellationTxHash,\n      settledTimestamp: response?.settledTimestamp,\n      settledTimestampISO: response?.settledTimestampISO,\n      settledBy: response?.settledBy ?? mapResponseToWallet(response?.settledBy),\n      snapshotCollateralValueUsd: response?.snapshotCollateralValueUsd,\n    };\n  } catch (error) {\n    console.log('Error while mapping data', error);\n    return undefined;\n  }\n};\n\nexport const mapResponseToOrderArray = (response: any): Order[] | undefined => {\n  if (!response) return undefined;\n  try {\n    return response.map((order: any) => {\n      return mapResponseToOrder(order);\n    });\n  } catch (error) {\n    console.log('Error while mapping data', error);\n    return undefined;\n  }\n};\n\n////////////////////////////////////////////////////////////////\n////////////////////    Collaterals   //////////////////////////\n////////////////////////////////////////////////////////////////\n\nfunction mapResponseToCollateralDeposit(response: any): CollateralDeposit | undefined {\n  if (!response) return undefined;\n  try {\n    return {\n      id: response?.id,\n      snxAccountId: response?.snxAccountId,\n      collateralId: response?.collateralId,\n      collateralName: response?.collateralName,\n      collateralSymbol: response?.collateralSymbol,\n      collateralDecimals: response?.collateralDecimals,\n      collateralAddress: response?.collateralAddress,\n      currentDepositedAmount: response?.currentDepositedAmount,\n      totalAmountDeposited: response?.totalAmountDeposited,\n      totalAmountWithdrawn: response?.totalAmountWithdrawn,\n      totalAmountLiquidated: response?.totalAmountLiquidated,\n    };\n  } catch (error) {\n    console.log('Error while mapping data', error);\n    return undefined;\n  }\n}\n\nexport const mapResponseToCollateralDepositArray = (response: any): CollateralDeposit[] | undefined => {\n  if (!response) return undefined;\n  try {\n    return response.map((deposit: any) => {\n      return mapResponseToCollateralDeposit(deposit);\n    });\n  } catch (error) {\n    console.log('Error while mapping data', error);\n    return undefined;\n  }\n};\n\n////////////////////////////////////////////////////////////////\n//////////////////////    POSITION    //////////////////////////\n////////////////////////////////////////////////////////////////\n\nexport const mapResponseToPosition = (response: any): Position | undefined => {\n  if (!response) return undefined;\n  try {\n    return {\n      id: response?.id,\n      market: response?.market ?? mapResponseToMarket(response?.market),\n      snxAccountId: response?.snxAccountId,\n      isLong: response?.isLong,\n      positionSize: response?.positionSize,\n      avgPrice: response?.avgPrice,\n      avgPriceDec: response?.avgPriceDec,\n      status: response?.status,\n      txHash: response?.txHash,\n      liquidationTxHash: response?.liquidationTxHash,\n      closingPrice: response?.closingPrice,\n      realizedPositionPnl: response?.realizedPositionPnl,\n      totalFeesPaid: response?.totalFeesPaid,\n      realizedPnlAfterFees: response?.realizedPnlAfterFees,\n      createdTimestamp: response?.createdTimestamp,\n      lastRefresh: response?.lastRefresh,\n      lastRefreshISO: response?.lastRefreshISO,\n      accruedBorrowingFees: response?.accruedBorrowingFees,\n      canBeLiquidated: response?.canBeLiquidated,\n      snapshotCollateralValueUsd: response?.snapshotCollateralValueUsd,\n    };\n  } catch (error) {\n    console.log('Error while mapping data', error);\n    return undefined;\n  }\n};\n\nexport const mapResponseToPositionArray = (response: any): Position[] | undefined => {\n  if (!response) return undefined;\n\n  try {\n    return response.map((position: any) => {\n      return mapResponseToPosition(position);\n    });\n  } catch (error) {\n    console.log('Error while mapping data', error);\n    return undefined;\n  }\n};\n\n////////////////////////////////////////////////////////////////\n//////////////////////    TOKEN    /////////////////////////////\n////////////////////////////////////////////////////////////////\n\nexport const mapResponseToToken = (response: any): Token | undefined => {\n  if (!response) return undefined;\n\n  try {\n    return {\n      id: response?.id,\n      name: response?.name,\n      symbol: response?.symbol,\n      decimals: response?.decimals,\n      lastPriceUSD: response?.lastPriceUSD,\n      lastPriceTimestamp: response?.lastPriceTimestamp,\n    };\n  } catch (error) {\n    console.log('Error while mapping data', error);\n    return undefined;\n  }\n};\n\n////////////////////////////////////////////////////////////////\n////////////////////////    PYTH    ////////////////////////////\n////////////////////////////////////////////////////////////////\n\nexport const mapResponseToPriceFeedSnapshot = (response: any): PriceFeedSnapshot | undefined => {\n  if (!response) return undefined;\n\n  try {\n    return {\n      id: response?.id,\n      priceId: response?.priceId,\n      publishTime: response?.publishTime,\n      price: response?.price,\n      confidence: response?.confidence,\n    };\n  } catch (error) {\n    console.log('Error while mapping data', error);\n    return undefined;\n  }\n};\n\nexport const mapResponseToPythData = (response: any): PythData | undefined => {\n  if (!response) return undefined;\n\n  try {\n    return {\n      id: response?.id,\n      marketId: response?.marketId,\n      tokenAddress: response?.tokenAddress,\n      price: response?.price,\n      lastUpdatedTimestamp: response?.lastUpdatedTimestamp,\n    };\n  } catch (error) {\n    console.log('Error while mapping data', error);\n    return undefined;\n  }\n};\n","export class NotFoundError extends Error {\n  constructor(message: string) {\n    super(message);\n    this.name = this.constructor.name;\n  }\n}"],"mappings":"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","names":[]}