{"version":3,"sources":["../src/pyth/pyth.ts","../src/common/constants.ts","../src/common/helpers.ts","../src/pyth/pythMapper.ts","../src/pyth/index.ts","../src/subgraph/positions/index.ts","../src/subgraph/positions/subgraphQueries.ts","../src/error/not-found.error.ts","../src/common/subgraphMapper.ts","../src/perps/positions.ts","../src/perps/offchain.ts","../src/subgraph/portfolio/index.ts","../src/subgraph/markets/index.ts","../src/subgraph/markets/subgraphQueries.ts","../src/subgraph/index.ts","../src/subgraph/common/index.ts","../src/subgraph/accounts/index.ts","../src/subgraph/accounts/subgraphQueries.ts","../src/subgraph/protocol/index.ts","../src/subgraph/protocol/subgraphQueries.ts","../src/subgraph/orders/index.ts","../src/subgraph/orders/subgraphQueries.ts","../src/subgraph/scripts/index.ts","../src/subgraph/scripts/subgraphQueries.ts","../src/relayers/gelato/gelato-function.ts","../src/relayers/gelato/index.ts","../src/perps/index.ts","../src/relayers/pimlico/index.ts","../src/relayers/pimlico/utils.ts","../src/distribution/index.ts","../src/interfaces/subgraphTypes.ts","../src/index.ts"],"sourcesContent":["import axios, { AxiosInstance } from 'axios';\nimport { getUniqueValuesFromArray } from '../common';\nimport Decimal from 'decimal.js';\nimport { PythPriceResponse } from '../interfaces/subgraphTypes';\nimport { mapPythPriceResponseToInterface } from './pythMapper';\nimport { FormattedPythPrice } from '../interfaces/sdkTypes';\n\n// Returns a Pyth client object based on the params provided\nexport const getPythClient = async (\n  pythServiceEndpoint?: string,\n  pythServiceUsername?: string,\n  pythServicePassword?: string,\n  isStable: boolean = true,\n): Promise<AxiosInstance> => {\n  try {\n    const config = {\n      baseURL: pythServiceEndpoint || (isStable ? 'https://hermes.pyth.network' : 'https://hermes-beta.pyth.network'),\n      auth:\n        pythServiceUsername && pythServicePassword\n          ? {\n              username: pythServiceUsername,\n              password: pythServicePassword,\n            }\n          : undefined,\n    };\n\n    return axios.create(config);\n  } catch (error) {\n    console.log('Error when creating Pyth instance:', error);\n    throw error;\n  }\n};\n\n// The function accepts an array of priceIds and returns the priceUpdateData\n// for them from Pyth\nexport const getVaaPriceUpdateData = async (priceIds: string[], pythClient: AxiosInstance): Promise<string[]> => {\n  const uniquePriceIds = getUniqueValuesFromArray(priceIds);\n  let priceUpdateData: string[] = [];\n\n  if (pythClient) {\n    try {\n      const response = await pythClient.get('/api/latest_vaas', {\n        params: {\n          ids: uniquePriceIds,\n        },\n      });\n      priceUpdateData = response.data;\n    } catch (error) {\n      console.log('Error fetching data from Pyth', error);\n      throw error;\n    }\n  }\n  return priceUpdateData.map((vaa) => '0x' + Buffer.from(vaa, 'base64').toString('hex'));\n};\n\n// Pyth currently uses different exponents for supported assets. Parifi uses all price feeds with 8 decimals\n// This function converts the price from Pyth to a format Parifi uses with 8 decimals.\nexport const formatPythPrice = (pythPrice: number, pythExponent: number): Decimal => {\n  const adjustedFactor = new Decimal(10).pow(pythExponent);\n  return new Decimal(pythPrice).mul(adjustedFactor);\n};\n\n// Returns the latest prices from Pyth for priceIds in normalized format\n// for use within the Parifi protocol. Normalized price has 8 decimals\nexport const getLatestFormattedPrice = async (\n  priceIds: string[],\n  pythClient: AxiosInstance,\n): Promise<FormattedPythPrice[]> => {\n  let formattedPrices: FormattedPythPrice[] = [];\n\n  const priceData = await getLatestPricesFromPyth(priceIds, pythClient);\n  priceData.map((pythPrice) => {\n    const formattedPrice = formatPythPrice(Number(pythPrice.price.price), pythPrice.price.expo);\n    formattedPrices.push({\n      priceId: `0x${pythPrice.id}`,\n      formattedPrice: formattedPrice,\n    });\n  });\n  return formattedPrices;\n};\n\n// Get latest prices from Pyth for priceIds\n// The prices returned are in Pyth structure which needs to be normalized\n// before using for any Parifi functions\nexport const getLatestPricesFromPyth = async (\n  priceIds: string[],\n  pythClient: AxiosInstance,\n): Promise<PythPriceResponse[]> => {\n  const uniquePriceIds = getUniqueValuesFromArray(priceIds);\n\n  const pythPriceResponses: PythPriceResponse[] = [];\n\n  if (pythClient) {\n    try {\n      const response = await pythClient.get('/api/latest_price_feeds', {\n        params: {\n          ids: uniquePriceIds,\n          verbose: false,\n          binary: false,\n        },\n      });\n      return mapPythPriceResponseToInterface(response.data);\n    } catch (error) {\n      console.log('Error fetching latest prices from Pyth', error);\n      throw error;\n    }\n  }\n  return pythPriceResponses;\n};\n","import { Decimal } from 'decimal.js';\nimport { Address } from 'viem';\n\nexport const PRECISION_MULTIPLIER = new Decimal('10000');\nexport const DEVIATION_PRECISION_MULTIPLIER = new Decimal(10).pow(12);\nexport const SECONDS_IN_A_YEAR = new Decimal(365 * 24 * 60 * 60);\nexport const MAX_FEE = new Decimal(10000000); // 1% = 100_000\nexport const WAD = new Decimal(10).pow(18); // 10^18\nexport const EMPTY_BYTES32 = '0x0000000000000000000000000000000000000000000000000000000000000000';\n// export const PRICE_FEED_DECIMALS = 18;\n// export const PRICE_FEED_PRECISION = new Decimal(10).pow(PRICE_FEED_DECIMALS);\nexport const DECIMAL_10 = new Decimal(10);\nexport const DECIMAL_ZERO = new Decimal(0);\nexport const DEFAULT_BATCH_COUNT = 10;\nexport const BIGINT_ZERO = BigInt(0);\n\nexport const GAS_LIMIT_SETTLEMENT = 10000000; // 10M gas\nexport const GAS_LIMIT_LIQUIDATION = 15000000; // 15M gas\n\nexport const ONE_GWEI = 1000000000; // 10^9\nexport const DEFAULT_GAS_PRICE = 2 * ONE_GWEI; // 1 gwei\n\n// Constants for Pyth price ids of collaterals\nexport const PYTH_ETH_USD_PRICE_ID_BETA = '0xca80ba6dc32e08d06f1aa886011eed1d77c77be9eb761cc10d72b7d0a2fd57a6';\nexport const PYTH_ETH_USD_PRICE_ID_STABLE = '0xff61491a931112ddf1bd8147cd1b641375f79f5825126d665480874634fd0ace';\n\nexport const PYTH_USDC_USD_PRICE_ID_BETA = '0x41f3625971ca2ed2263e78573fe5ce23e13d2558ed3f2e47ab0f84fb9e7ae722';\nexport const PYTH_USDC_USD_PRICE_ID_STABLE = '0xeaa020c61cc479712813461ce153894a96a6c00b21ed0cfc2798d1f9a9e9c94a';\n\n// Constants for Pimlico relayer\nexport const FACTORY_ADDRESS_SIMPLE_ACCOUNT = '0x91E60e0613810449d098b0b5Ec8b51A0FE8c8985';\n\n// Temporary constants\nexport const SUBGRAPH_HELPER_ADDRESS = '0xf012d32505df6853187170F00C7b789A8ecC41c2';\n\nexport const SYMBOL_TO_PYTH_FEED = new Map<string, string>([\n  // market\n  ['BTC', '0xc9d8b075a5c69303365ae23633d4e085199bf5c520a3b90fed1322a0342ffc33'],\n  ['SOL', '0xef0d8b6fda2ceba41da15d4095d1da392a0d2f8ed0c6c7bc0f4cfac8c280b56d'],\n  ['WIF', '0x4ca4beeca86f0d164160323817a4e42b10010a724c2217c6ee41b54cd4cc61fc'],\n  ['ETH', '0xff61491a931112ddf1bd8147cd1b641375f79f5825126d665480874634fd0ace'],\n  ['AAVE', '0x2b9ab1e972a281585084148ba1389800799bd4be63b957507db1349314e47445'],\n  ['ADA', '0x2a01deaec9e51a579277b34b122399984d0bbf57e2458a7e42fecd2829867a0d'],\n  ['ARB', '0x3fa4252848f9f0a1480be62745a4629d9eb1322aebab8a791e344b3b9c1adcf5'],\n  ['AVAX', '0x93da3352f9f1d105fdfe4971cfa80e9dd777bfc5d0f683ebb6e1294b92137bb7'],\n  ['BCH', '0x3dd2b63686a450ec7290df3a1e0b583c0481f651351edfa7636f39aed55cf8a3'],\n  ['BNB', '0x2f95862b045670cd22bee3114c39763a4a08beeb663b145d283c31d7d1101c4f'],\n  ['CRV', '0xa19d04ac696c7a6616d291c7e5d1377cc8be437c327b75adb5dc1bad745fcae8'],\n  ['DOGE', '0xdcef50dd0a4cd2dcc17e45df1676dcb336a11a61c69df7a0299b0150c672d25c'],\n  ['DYDX', '0x6489800bb8974169adfe35937bf6736507097d13c190d760c557108c7e93a81b'],\n  ['GMX', '0xb962539d0fcb272a494d65ea56f94851c2bcf8823935da05bd628916e2e9edbf'],\n  ['LINK', '0x8ac0c70fff57e9aefdf5edf44b51d62c2d433653cbb2cf5cc06bb115af04d221'],\n  ['LTC', '0x6e3f3fa8253588df9326580180233eb791e03b443a3ba7a1d892e73874e19a54'],\n  ['MKR', '0x9375299e31c0deb9c6bc378e6329aab44cb48ec655552a70d4b9050346a30378'],\n  ['NEAR', '0xc415de8d2eba7db216527dff4b60e8f3a5311c740dadb233e13e12547e226750'],\n  ['OP', '0x385f64d993f7b77d8182ed5003d97c60aa3361f3cecfe711544d2d59165e9bdf'],\n  ['ORDI', '0x193c739db502aadcef37c2589738b1e37bdb257d58cf1ab3c7ebc8e6df4e3ec0'],\n  ['PEPE', '0xd69731a2e74ac1ce884fc3890f7ee324b6deb66147055249568869ed700882e4'],\n  ['POL', '0xffd11c5a1cfd42f80afb2df4d9f264c15f956d68153335374ec10722edd70472'],\n  ['PYTH', '0x0bbf28e9a841a1cc788f6a361b17ca072d0ea3098a1e5df1c3922d06719579ff'],\n  ['RUNE', '0x5fcf71143bb70d41af4fa9aa1287e2efd3c5911cee59f909f915c9f61baacb1e'],\n  ['SHIB', '0xf0d57deca57b3da2fe63a493f4c25925fdfd8edf834b20f93e1f84dbd1504d4a'],\n  ['STX', '0xec7a775f46379b5e943c3526b1c8d54cd49749176b0b98e02dde68d1bd335c17'],\n  ['TIA', '0x09f7c1d7dfbb7df2b8fe3d3d87ee94a2259d212da4f30c1f0540d066dfa44723'],\n  ['UNI', '0x78d185a741d07edb3412b09008b7c5cfb9bbbd7d568bf00ba737b456ba171501'],\n  ['XLM', '0xb7a8eba68a997cd0210c2e1e4ee811ad2d174b3611c22d9ebf16f4cb7e9ba850'],\n  ['XRP', '0xec5d399846a9209f3fe5881d70aae9268c94339ff9817e8d18ff19fa05eea1c8'],\n  // collateral\n  ['USDC', '0xeaa020c61cc479712813461ce153894a96a6c00b21ed0cfc2798d1f9a9e9c94a'],\n  ['USDE', '0x6ec879b1e9963de5ee97e9c8710b742d6228252a5e2ca12d4ae81d7fe5ee8c5d'],\n  ['DAI', '0xb0948a5e5313200c632b51bb5ca32f6de0d36e9950a942d19751e833f70dabfd'],\n]);\n\nexport const collateralMappingWithRegularSymbol = new Map<string, string>([\n  ['seth', 'eth'],\n  ['wbtc', 'btc'],\n  ['fbtc', 'btc'],\n  ['wsteth', 'eth'],\n  ['fdai', 'dai'],\n  ['susdc', 'usdc'],\n  ['susde', 'usde'],\n  ['steth', 'eth'],\n  ['fsol', 'sol'],\n  ['fusdc', 'usdc'],\n  ['fusdt', 'usdt'],\n  ['ssol', 'sol'],\n  ['sdai', 'dai'],\n  ['usdx', 'usdc'],\n  ['stbtc', 'btc'],\n]);\n// === TOKEN DISTRIBUTION ===\n\nexport enum SUPPORTED_CHAINS {\n  BASE = 8453,\n}\n\nexport const REWARD_DISTRIBUTOR_ADDRESSES: Record<number, Record<string, Address>> = {\n  [SUPPORTED_CHAINS.BASE]: {\n    esprf: '0x6511718804180CC57833fEA036389A24604Dfc69',\n    prf: '0x0000000000000000000000000000000000000000',\n    rt: '0x648d6D711860699A11aBa192E9daBAfb6408af18',\n  },\n};\n\nexport const REWARD_DISTRIBUTOR_ABI = [\n  {\n    inputs: [{ internalType: 'contract IERC20', name: '_rewardToken', type: 'address' }],\n    stateMutability: 'nonpayable',\n    type: 'constructor',\n  },\n  { inputs: [], name: 'AccessControlBadConfirmation', type: 'error' },\n  {\n    inputs: [\n      { internalType: 'address', name: 'account', type: 'address' },\n      { internalType: 'bytes32', name: 'neededRole', type: 'bytes32' },\n    ],\n    name: 'AccessControlUnauthorizedAccount',\n    type: 'error',\n  },\n  {\n    anonymous: false,\n    inputs: [\n      { indexed: true, internalType: 'address', name: 'user', type: 'address' },\n      { indexed: false, internalType: 'uint256', name: 'amount', type: 'uint256' },\n    ],\n    name: 'RewardClaimed',\n    type: 'event',\n  },\n  {\n    anonymous: false,\n    inputs: [\n      { indexed: true, internalType: 'bytes32', name: 'role', type: 'bytes32' },\n      { indexed: true, internalType: 'bytes32', name: 'previousAdminRole', type: 'bytes32' },\n      { indexed: true, internalType: 'bytes32', name: 'newAdminRole', type: 'bytes32' },\n    ],\n    name: 'RoleAdminChanged',\n    type: 'event',\n  },\n  {\n    anonymous: false,\n    inputs: [\n      { indexed: true, internalType: 'bytes32', name: 'role', type: 'bytes32' },\n      { indexed: true, internalType: 'address', name: 'account', type: 'address' },\n      { indexed: true, internalType: 'address', name: 'sender', type: 'address' },\n    ],\n    name: 'RoleGranted',\n    type: 'event',\n  },\n  {\n    anonymous: false,\n    inputs: [\n      { indexed: true, internalType: 'bytes32', name: 'role', type: 'bytes32' },\n      { indexed: true, internalType: 'address', name: 'account', type: 'address' },\n      { indexed: true, internalType: 'address', name: 'sender', type: 'address' },\n    ],\n    name: 'RoleRevoked',\n    type: 'event',\n  },\n  {\n    inputs: [],\n    name: 'DEFAULT_ADMIN_ROLE',\n    outputs: [{ internalType: 'bytes32', name: '', type: 'bytes32' }],\n    stateMutability: 'view',\n    type: 'function',\n  },\n  {\n    inputs: [],\n    name: 'actualRound',\n    outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }],\n    stateMutability: 'view',\n    type: 'function',\n  },\n  {\n    inputs: [\n      { internalType: 'uint256', name: '_round', type: 'uint256' },\n      { internalType: 'uint256', name: 'amount', type: 'uint256' },\n      { internalType: 'bytes32[]', name: 'proof', type: 'bytes32[]' },\n    ],\n    name: 'claimReward',\n    outputs: [],\n    stateMutability: 'nonpayable',\n    type: 'function',\n  },\n  {\n    inputs: [\n      { internalType: 'uint256[]', name: '_rounds', type: 'uint256[]' },\n      { internalType: 'uint256[]', name: 'amounts', type: 'uint256[]' },\n      { internalType: 'bytes32[][]', name: 'proofs', type: 'bytes32[][]' },\n    ],\n    name: 'claimRewards',\n    outputs: [],\n    stateMutability: 'nonpayable',\n    type: 'function',\n  },\n  {\n    inputs: [\n      { internalType: 'uint256', name: '', type: 'uint256' },\n      { internalType: 'address', name: '', type: 'address' },\n    ],\n    name: 'claimed',\n    outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }],\n    stateMutability: 'view',\n    type: 'function',\n  },\n  {\n    inputs: [{ internalType: 'bytes32', name: 'role', type: 'bytes32' }],\n    name: 'getRoleAdmin',\n    outputs: [{ internalType: 'bytes32', name: '', type: 'bytes32' }],\n    stateMutability: 'view',\n    type: 'function',\n  },\n  {\n    inputs: [\n      { internalType: 'bytes32', name: 'role', type: 'bytes32' },\n      { internalType: 'address', name: 'account', type: 'address' },\n    ],\n    name: 'grantRole',\n    outputs: [],\n    stateMutability: 'nonpayable',\n    type: 'function',\n  },\n  {\n    inputs: [\n      { internalType: 'bytes32', name: 'role', type: 'bytes32' },\n      { internalType: 'address', name: 'account', type: 'address' },\n    ],\n    name: 'hasRole',\n    outputs: [{ internalType: 'bool', name: '', type: 'bool' }],\n    stateMutability: 'view',\n    type: 'function',\n  },\n  {\n    inputs: [\n      { internalType: 'bytes32', name: 'role', type: 'bytes32' },\n      { internalType: 'address', name: 'callerConfirmation', type: 'address' },\n    ],\n    name: 'renounceRole',\n    outputs: [],\n    stateMutability: 'nonpayable',\n    type: 'function',\n  },\n  {\n    inputs: [\n      { internalType: 'bytes32', name: 'role', type: 'bytes32' },\n      { internalType: 'address', name: 'account', type: 'address' },\n    ],\n    name: 'revokeRole',\n    outputs: [],\n    stateMutability: 'nonpayable',\n    type: 'function',\n  },\n  {\n    inputs: [],\n    name: 'rewardToken',\n    outputs: [{ internalType: 'contract IERC20', name: '', type: 'address' }],\n    stateMutability: 'view',\n    type: 'function',\n  },\n  {\n    inputs: [{ internalType: 'uint256', name: '_round', type: 'uint256' }],\n    name: 'setActualRound',\n    outputs: [],\n    stateMutability: 'nonpayable',\n    type: 'function',\n  },\n  {\n    inputs: [\n      { internalType: 'uint256', name: '_round', type: 'uint256' },\n      { internalType: 'bytes32', name: '_root', type: 'bytes32' },\n    ],\n    name: 'setRootPerRound',\n    outputs: [],\n    stateMutability: 'nonpayable',\n    type: 'function',\n  },\n  {\n    inputs: [{ internalType: 'bytes4', name: 'interfaceId', type: 'bytes4' }],\n    name: 'supportsInterface',\n    outputs: [{ internalType: 'bool', name: '', type: 'bool' }],\n    stateMutability: 'view',\n    type: 'function',\n  },\n  {\n    inputs: [{ internalType: 'uint256', name: '', type: 'uint256' }],\n    name: 'verifiersPerRound',\n    outputs: [{ internalType: 'contract Verifier', name: '', type: 'address' }],\n    stateMutability: 'view',\n    type: 'function',\n  },\n];\n","import { Decimal } from 'decimal.js';\nimport { formatEther, parseEther } from 'viem';\n\nexport const getDiff = (a: Decimal, b: Decimal): Decimal => {\n  return a.gt(b) ? a.minus(b) : b.minus(a);\n};\n\nexport const addDelay = async (ms: number): Promise<void> => {\n  return new Promise((resolve) => setTimeout(resolve, ms));\n};\n\nexport const getCurrentTimestampInSeconds = (): number => {\n  return Math.floor(Date.now() / 1000);\n};\n\nexport const getUniqueValuesFromArray = (originalArray: string[]): string[] => {\n  const uniqueArray: string[] = [];\n  const seenValues = new Set<string>();\n\n  originalArray.forEach((item) => {\n    // Check if the value is not already seen\n    if (!seenValues.has(item)) {\n      // Add the value to the uniqueArray\n      uniqueArray.push(item);\n      // Mark the value as seen in the set\n      seenValues.add(item);\n    }\n  });\n  return uniqueArray;\n};\n\nexport function convertWeiToEther(amountInWei: string | bigint | undefined): number {\n  if (amountInWei == undefined) {\n    throw new Error('Invalid amount received during conversion: undefined');\n  }\n  if (typeof amountInWei == 'bigint') {\n    return Number(formatEther(amountInWei));\n  } else if (typeof amountInWei == 'string') {\n    return Number(formatEther(BigInt(amountInWei)));\n  } else {\n    throw new Error('Expected string or bigint for conversion');\n  }\n}\n\nexport function convertEtherToWei(amount: string | number | undefined): bigint {\n  if (amount == undefined) {\n    throw new Error('Invalid amount received during conversion: undefined');\n  }\n  if (typeof amount == 'number') {\n    return parseEther(amount.toString());\n  } else if (typeof amount == 'string') {\n    return parseEther(amount);\n  } else {\n    throw new Error('Expected string or bigint for conversion');\n  }\n}\n","import { PythPriceResponse } from '../interfaces/subgraphTypes';\n\n// Function to map the pyth latest price response to interface\nexport const mapPythPriceResponseToInterface = (response: any[]): PythPriceResponse[] => {\n  return response.map((item) => ({\n    id: item.id || '',\n    price: {\n      price: item.price.price || '0',\n      conf: item.price.conf || '0',\n      expo: item.price.expo || 0,\n      publish_time: item.price.publish_time || 0,\n    },\n    ema_price: {\n      price: item.ema_price.price || '0',\n      conf: item.ema_price.conf || '0',\n      expo: item.ema_price.expo || 0,\n      publish_time: item.ema_price.publish_time || 0,\n    },\n  }));\n};\n","import { AxiosInstance } from 'axios';\nimport { PythConfig } from '../interfaces/classConfigs';\nimport {\n  formatPythPrice,\n  getLatestFormattedPrice,\n  getLatestPricesFromPyth,\n  getPythClient,\n  getVaaPriceUpdateData,\n} from './pyth';\n\nexport class Pyth {\n  public pythClient: AxiosInstance;\n\n  constructor(private pythConfig: PythConfig) {\n    this.pythClient = {} as AxiosInstance;\n  }\n\n  async initPyth() {\n    this.pythClient = await getPythClient(\n      this.pythConfig.pythEndpoint,\n      this.pythConfig.username,\n      this.pythConfig.password,\n      this.pythConfig.isStable,\n    );\n  }\n\n  public async getVaaPriceUpdateData(priceIds: string[]) {\n    return await getVaaPriceUpdateData(priceIds, this.pythClient);\n  }\n\n  public formatPythPrice(pythPrice: number, pythExponent: number) {\n    return formatPythPrice(pythPrice, pythExponent);\n  }\n\n  public async getLatestPricesFromPyth(priceIds: string[]) {\n    return await getLatestPricesFromPyth(priceIds, this.pythClient);\n  }\n\n  public async getLatestFormattedPrice(priceIds: string[]) {\n    return await getLatestFormattedPrice(priceIds, this.pythClient);\n  }\n}\n","import { request } from 'graphql-request';\nimport {\n  fetchAllOpenPositionsWithTime,\n  fetchAllPositionHistoryWithTime,\n  fetchLiquidatedPositionsBySnxAccount,\n  fetchOpenPositionsByUser,\n  fetchPositionByIdQuery,\n  fetchPositionsByUserQuery,\n  fetchPositionsByUserQueryAndStatus,\n  fetchUserOpenPositionsWithTime,\n  fetchUserPositionHistory,\n  fetchUserPositionHistoryWithTime,\n} from './subgraphQueries';\n\nimport { NotFoundError } from '../../error/not-found.error';\nimport { Position, SnxAccount } from '../../interfaces/sdkTypes';\nimport {\n  mapResponseToPosition,\n  mapResponseToSnxAccount,\n  mapResponseToSnxAccountArray,\n} from '../../common/subgraphMapper';\n\n// Get all positions by user address\nexport const getAllPositionsByUserAddress = async (\n  subgraphEndpoint: string,\n  userAddress: string,\n  count: number = 10,\n  skip: number = 0,\n): Promise<SnxAccount[]> => {\n  try {\n    const subgraphResponse: any = await request(subgraphEndpoint, fetchPositionsByUserQuery(userAddress, count, skip));\n    const snxAccounts = mapResponseToSnxAccountArray(subgraphResponse?.snxAccounts);\n    return snxAccounts ?? [];\n  } catch (error) {\n    console.error('Error fetching positions:', error);\n    return [];\n  }\n};\n\n// Get open positions by user address\nexport const getOpenPositionsByUserAddress = async (\n  subgraphEndpoint: string,\n  userAddress: string,\n  count: number = 10,\n  skip: number = 0,\n): Promise<SnxAccount[]> => {\n  try {\n    const subgraphResponse: any = await request(subgraphEndpoint, fetchOpenPositionsByUser(userAddress, count, skip));\n    const snxAccounts = mapResponseToSnxAccountArray(subgraphResponse?.snxAccounts);\n    return snxAccounts ?? [];\n  } catch (error) {\n    console.error('Error fetching positions:', error);\n    return [];\n  }\n};\n\n// Get open positions by user address\nexport const getClosedPositionsByUserAddress = async (\n  subgraphEndpoint: string,\n  userAddress: string,\n  count: number = 10,\n  skip: number = 0,\n): Promise<SnxAccount[]> => {\n  try {\n    const subgraphResponse: any = await request(\n      subgraphEndpoint,\n      fetchPositionsByUserQueryAndStatus(userAddress, 'CLOSED', count, skip),\n    );\n    const snxAccounts = mapResponseToSnxAccountArray(subgraphResponse?.snxAccounts);\n    return snxAccounts ?? [];\n  } catch (error) {\n    console.error('Error fetching positions:', error);\n    return [];\n  }\n};\n\n// Get LIQUIDATED positions by user address\nexport const getLiquidatedPositionsByUserAddress = async (\n  subgraphEndpoint: string,\n  userAddress: string,\n  count: number = 10,\n  skip: number = 0,\n): Promise<SnxAccount[]> => {\n  try {\n    const subgraphResponse: any = await request(\n      subgraphEndpoint,\n      fetchPositionsByUserQueryAndStatus(userAddress, 'LIQUIDATED', count, skip),\n    );\n    const snxAccounts = mapResponseToSnxAccountArray(subgraphResponse?.snxAccounts);\n    return snxAccounts ?? [];\n  } catch (error) {\n    console.error('Error fetching positions:', error);\n    return [];\n  }\n};\n\n// Get position from subgraph by position ID\nexport const getPositionById = async (subgraphEndpoint: string, positionId: string): Promise<Position> => {\n  try {\n    let subgraphResponse: any = await request(subgraphEndpoint, fetchPositionByIdQuery(positionId));\n\n    console.log('subgraph response:', subgraphResponse);\n    const position = mapResponseToPosition(subgraphResponse?.position);\n    if (position) return position;\n    throw new NotFoundError('Position id not found');\n  } catch (error) {\n    console.error('Error fetching position:', error);\n    throw new NotFoundError('Position id not found');\n  }\n};\n\n// Get all positions by user address\nexport const getUserPositionsHistory = async (\n  subgraphEndpoint: string,\n  userAddress: string,\n  count: number = 100,\n  skip: number = 0,\n): Promise<SnxAccount[]> => {\n  try {\n    const subgraphResponse: any = await request(subgraphEndpoint, fetchUserPositionHistory(userAddress, count, skip));\n    const snxAccounts = mapResponseToSnxAccountArray(subgraphResponse?.snxAccounts);\n    return snxAccounts ?? [];\n  } catch (error) {\n    console.error('Error fetching positions:', error);\n    return [];\n  }\n};\n\n// Get positions history by user address\nexport const getUserPositionHistoryWithTime = async (\n  subgraphEndpoint: string,\n  userAddress: string,\n  startTime: number,\n  endTime: number,\n  count: number = 100,\n  skip: number = 0,\n): Promise<SnxAccount[]> => {\n  try {\n    const subgraphResponse: any = await request(\n      subgraphEndpoint,\n      fetchUserPositionHistoryWithTime(userAddress, startTime, endTime, count, skip),\n    );\n    const snxAccounts = mapResponseToSnxAccountArray(subgraphResponse?.snxAccounts);\n    return snxAccounts ?? [];\n  } catch (error) {\n    console.error('Error fetching positions:', error);\n    return [];\n  }\n};\n\n// Get all open positions by user address\nexport const getUserOpenPositionsWithTime = async (\n  subgraphEndpoint: string,\n  userAddress: string,\n  startTime: number,\n  endTime: number,\n  count: number = 10,\n  skip: number = 0,\n): Promise<SnxAccount[]> => {\n  try {\n    const subgraphResponse: any = await request(\n      subgraphEndpoint,\n      fetchUserOpenPositionsWithTime(userAddress, startTime, endTime, count, skip),\n    );\n    const snxAccounts = mapResponseToSnxAccountArray(subgraphResponse?.snxAccounts);\n    return snxAccounts ?? [];\n  } catch (error) {\n    console.error('Error fetching positions:', error);\n    return [];\n  }\n};\n\n// Get positions by SNX Account id\nexport const getUserLiquidatedPositionsBySnxAccount = async (\n  subgraphEndpoint: string,\n  snxAccountId: string,\n  lastRefresh: number,\n): Promise<SnxAccount | undefined> => {\n  let formattedSnxAccountId = snxAccountId;\n  try {\n    if (!snxAccountId.includes('PERP')) {\n      formattedSnxAccountId = 'PERP-'.concat(snxAccountId);\n    }\n    const subgraphResponse: any = await request(\n      subgraphEndpoint,\n      fetchLiquidatedPositionsBySnxAccount(formattedSnxAccountId, lastRefresh),\n    );\n    const snxAccount = mapResponseToSnxAccount(subgraphResponse?.snxAccount);\n    return snxAccount;\n  } catch (error) {\n    console.error('Error fetching positions:', error);\n    return undefined;\n  }\n};\n\n// Get all open positions for all users\nexport const getAllOpenPositionsWithTime = async (\n  subgraphEndpoint: string,\n  startTime: number,\n  endTime: number,\n  count: number = 10,\n  skip: number = 0,\n): Promise<SnxAccount[]> => {\n  try {\n    const subgraphResponse: any = await request(\n      subgraphEndpoint,\n      fetchAllOpenPositionsWithTime(startTime, endTime, count, skip),\n    );\n    console.log('subgraphresponse', subgraphResponse);\n    const snxAccounts = mapResponseToSnxAccountArray(subgraphResponse?.snxAccounts);\n    return snxAccounts ?? [];\n  } catch (error) {\n    console.error('Error fetching positions:', error);\n    return [];\n  }\n};\n\n// Get positions history by user address\nexport const getAllPositionHistoryWithTime = async (\n  subgraphEndpoint: string,\n  startTime: number,\n  endTime: number,\n  count: number = 100,\n  skip: number = 0,\n): Promise<SnxAccount[]> => {\n  try {\n    const subgraphResponse: any = await request(\n      subgraphEndpoint,\n      fetchAllPositionHistoryWithTime(startTime, endTime, count, skip),\n    );\n    const snxAccounts = mapResponseToSnxAccountArray(subgraphResponse?.snxAccounts);\n    return snxAccounts ?? [];\n  } catch (error) {\n    console.error('Error fetching positions:', error);\n    return [];\n  }\n};\n","import { gql } from 'graphql-request';\n\n// Fetches all positions by a user (Both open and closed)\nexport const fetchPositionsByUserQuery = (userAddress: string, count: number = 20, skip: number = 0) =>\n  gql`\n    {\n    snxAccounts(\n      first: ${count}\n      skip: ${skip}\n      where: { owner: \"${userAddress}\", type: PERP }) {\n      id\n      accountId\n      owner {\n        id\n      }\n      collateralDeposits {\n        id\n        collateralName\n        collateralSymbol\n        collateralDecimals\n        collateralAddress\n        currentDepositedAmount\n        totalAmountDeposited\n        totalAmountWithdrawn\n        totalAmountLiquidated\n      }\n      positions(where: {status_in: [OPEN, CLOSED, LIQUIDATED]}) {\n        id\n        market {\n          id\n          marketName\n          marketSymbol\n          feedId\n        }\n        positionSize\n        avgPrice\n        avgPriceDec\n        isLong\n        createdTimestamp\n        status\n        txHash\n        liquidationTxHash\n        closingPrice\n        realizedPositionPnl\n        realizedPnlAfterFees\n        totalFeesPaid\n        createdTimestamp\n        lastRefresh\n        lastRefreshISO\n        canBeLiquidated\n        snapshotCollateralValueUsd\n    }\n    }\n  }`;\n\n// Fetches positions for a user address by status\nexport const fetchPositionsByUserQueryAndStatus = (\n  userAddress: string,\n  status: string,\n  count: number = 20,\n  skip: number = 0,\n) =>\n  gql`\n    {\n    snxAccounts(\n      first: ${count}\n      skip: ${skip}\n      where: { owner: \"${userAddress}\", type: PERP }\n    ) {\n      id\n      accountId\n      owner {\n        id\n      }\n      collateralDeposits {\n        id\n        collateralName\n        collateralSymbol\n        collateralDecimals\n        collateralAddress\n        currentDepositedAmount\n        totalAmountDeposited\n        totalAmountWithdrawn\n        totalAmountLiquidated\n      }\n      positions(where: {status: ${status} }) {\n        id\n        market {\n          id\n          marketName\n          marketSymbol\n          feedId\n        }\n        positionSize\n        avgPrice\n        avgPriceDec\n        isLong\n        createdTimestamp\n        status\n        txHash\n        liquidationTxHash\n        closingPrice\n        realizedPositionPnl\n        realizedPnlAfterFees\n        totalFeesPaid\n        createdTimestamp\n        lastRefresh\n        lastRefreshISO\n        canBeLiquidated\n        snapshotCollateralValueUsd\n    }\n    }\n  }`;\n\n// Fetches open positions for a user address\nexport const fetchOpenPositionsByUser = (userAddress: string, count: number = 20, skip: number = 0) =>\n  gql`\n    {\n    snxAccounts(\n      first: ${count}\n      skip: ${skip}\n      where: {\n        owner: \"${userAddress}\",\n        type: PERP,\n        openPositionCount_gt: 0\n      }\n    ) {\n      id\n      accountId\n      owner {\n        id\n      }\n      collateralDeposits {\n        id\n        collateralName\n        collateralSymbol\n        collateralDecimals\n        collateralAddress\n        currentDepositedAmount\n        totalAmountDeposited\n        totalAmountWithdrawn\n        totalAmountLiquidated\n      }\n      positions(where: {status: OPEN }) {\n        id\n        market {\n          id\n          marketName\n          marketSymbol\n          feedId\n        }\n        positionSize\n        avgPrice\n        avgPriceDec\n        isLong\n        createdTimestamp\n        status\n        txHash\n        liquidationTxHash\n        closingPrice\n        realizedPositionPnl\n        realizedPnlAfterFees\n        totalFeesPaid\n        createdTimestamp\n        lastRefresh\n        lastRefreshISO\n        canBeLiquidated\n        snapshotCollateralValueUsd\n      }\n    }\n  }`;\n\n// Fetches positions for a user address by status\nexport const fetchUserPositionHistory = (userAddress: string, count: number = 20, skip: number = 0) =>\n  gql`\n    {\n    snxAccounts(\n      first: ${count}\n      skip: ${skip}\n      where: { owner: \"${userAddress}\", type: PERP }\n    ) {\n      id\n      accountId\n      owner {\n        id\n      }\n      collateralDeposits {\n        id\n        collateralName\n        collateralSymbol\n        collateralDecimals\n        collateralAddress\n        currentDepositedAmount\n        totalAmountDeposited\n        totalAmountWithdrawn\n        totalAmountLiquidated\n      }\n      positions(where: {status_in: [CLOSED, LIQUIDATED]}) {\n        id\n        market {\n          id\n          marketName\n          marketSymbol\n          feedId\n        }\n        positionSize\n        avgPrice\n        avgPriceDec\n        isLong\n        createdTimestamp\n        status\n        txHash\n        liquidationTxHash\n        closingPrice\n        realizedPositionPnl\n        realizedPnlAfterFees\n        totalFeesPaid\n        createdTimestamp\n        lastRefresh\n        lastRefreshISO\n        canBeLiquidated\n        snapshotCollateralValueUsd\n    }\n    }\n  }`;\n\nexport const fetchPositionByIdQuery = (positionId: string) =>\n  gql`\n    {\n        position(\n            id: \"${positionId}\"\n        ) {\n            id\n            market {\n              id,\n              marketName,\n              marketSymbol,\n              feedId \n            }\n            snxAccount{\n              id\n              accountId\n            }\n            isLong\n            positionSize\n            avgPrice\n            avgPriceDec\n            status\n            txHash\n            liquidationTxHash\n            closingPrice\n            realizedPositionPnl\n            realizedPnlAfterFees\n            totalFeesPaid\n            createdTimestamp\n            lastRefresh\n            lastRefreshISO\n            canBeLiquidated\n            snapshotCollateralValueUsd\n        }\n    }`;\n\nexport const fetchPositionsToLiquidateQuery = (count: number) => gql`\n  {\n    positions(where: { status: OPEN, canBeLiquidated: true }, first: ${count}, orderBy: positionSize, orderDirection: desc) {\n      id\n    }\n  }\n`;\n\n// Fetches positions for a user address by status\nexport const fetchUserPositionHistoryWithTime = (\n  userAddress: string,\n  startTimestamp: number,\n  endTimestamp: number,\n  count: number = 20,\n  skip: number = 0,\n) =>\n  gql`\n    {\n    snxAccounts(\n      first: ${count}\n      skip: ${skip}\n      where: {\n        owner: \"${userAddress}\",\n        type: PERP\n      }\n    ) {\n      id\n      accountId\n      owner {\n        id\n      }\n      collateralDeposits {\n        id\n        collateralName\n        collateralSymbol\n        collateralDecimals\n        collateralAddress\n        currentDepositedAmount\n        totalAmountDeposited\n        totalAmountWithdrawn\n        totalAmountLiquidated\n      }\n      positions( where: {\n          status_in: [CLOSED, LIQUIDATED],\n          createdTimestamp_gte: ${startTimestamp}\n          createdTimestamp_lte: ${endTimestamp}\n      }) {\n        id\n        market {\n          id\n          marketName\n          marketSymbol\n          feedId\n        }\n        positionSize\n        positionCollateral\n        avgPrice\n        avgPriceDec\n        isLong\n        createdTimestamp\n        status\n        txHash\n        liquidationTxHash\n        closingPrice\n        realizedPositionPnl\n        realizedPnlAfterFees\n        totalFeesPaid\n        createdTimestamp\n        lastRefresh\n        lastRefreshISO\n        canBeLiquidated\n        snapshotCollateralValueUsd\n    }\n    }\n  }`;\n\n// Fetches positions for a user address by status\nexport const fetchUserOpenPositionsWithTime = (\n  userAddress: string,\n  startTimestamp: number,\n  endTimestamp: number,\n  count: number = 20,\n  skip: number = 0,\n) =>\n  gql`\n    {\n    snxAccounts(\n      first: ${count}\n      skip: ${skip}\n      where: {\n        owner: \"${userAddress}\",\n        type: PERP,\n        positions_: {\n          status: OPEN,\n          createdTimestamp_gte: ${startTimestamp}\n          createdTimestamp_lte: ${endTimestamp}\n          }\n      }\n    ) {\n      id\n      accountId\n      owner {\n        id\n      }\n      collateralDeposits {\n        id\n        collateralName\n        collateralSymbol\n        collateralDecimals\n        collateralAddress\n        currentDepositedAmount\n        totalAmountDeposited\n        totalAmountWithdrawn\n        totalAmountLiquidated\n      }\n      positions {\n        id\n        market {\n          id\n          marketName\n          marketSymbol\n          feedId\n        }\n        positionSize\n        avgPrice\n        avgPriceDec\n        isLong\n        createdTimestamp\n        status\n        txHash\n        liquidationTxHash\n        closingPrice\n        realizedPositionPnl\n        realizedPnlAfterFees\n        totalFeesPaid\n        createdTimestamp\n        lastRefresh\n        lastRefreshISO\n        canBeLiquidated\n        snapshotCollateralValueUsd\n    }\n    }\n  }`;\n\nexport const fetchLiquidatedPositionsBySnxAccount = (snxAccountId: string, lastRefresh: number) =>\n  gql`\n    {\n    snxAccount(id: \"${snxAccountId}\"\n    ) {\n      id\n      accountId\n      owner {\n        id\n      }\n      collateralDeposits {\n        id\n        collateralName\n        collateralSymbol\n        collateralDecimals\n        collateralAddress\n        currentDepositedAmount\n        totalAmountDeposited\n        totalAmountWithdrawn\n        totalAmountLiquidated\n      }\n      positions(where: { status: LIQUIDATED, lastRefresh_gt: ${lastRefresh} }) {\n        id\n        market {\n          id\n          marketName\n          marketSymbol\n          feedId\n        }\n        positionSize\n        avgPrice\n        avgPriceDec\n        isLong\n        createdTimestamp\n        status\n        txHash\n        liquidationTxHash\n        closingPrice\n        realizedPositionPnl\n        realizedPnlAfterFees\n        totalFeesPaid\n        createdTimestamp\n        lastRefresh\n        lastRefreshISO\n        canBeLiquidated\n        snapshotCollateralValueUsd\n    }\n    }\n  }`;\n\nexport const fetchCrossMarginPositionsBySnxAccount = (snxAccountId: string, lastRefresh: number) => gql`\n  {\n    snxAccount(id: \"${snxAccountId}\") {\n      accountId\n      collateralDeposits {\n        totalAmountLiquidated\n      }\n      positions(where: { status: LIQUIDATED, lastRefresh_gt: ${lastRefresh} }) {\n        lastRefresh\n      }\n    }\n  }\n`;\n\n// Fetches positions for a user address by status\nexport const fetchAllOpenPositionsWithTime = (\n  startTimestamp: number,\n  endTimestamp: number,\n  count: number = 20,\n  skip: number = 0,\n) =>\n  gql`\n    {\n    snxAccounts(\n      first: ${count}\n      skip: ${skip}\n      where: { \n      type: PERP\n      openPositionCount_gt:0\n      }\n    ) {\n      id\n      accountId\n      owner {\n        id\n      }\n      collateralDeposits {\n        id\n        collateralName\n        collateralSymbol\n        collateralDecimals\n        collateralAddress\n        currentDepositedAmount\n        totalAmountDeposited\n        totalAmountWithdrawn\n        totalAmountLiquidated\n      }\n      positions(where: {\n          status: OPEN,\n          createdTimestamp_gte: ${startTimestamp}\n          createdTimestamp_lte: ${endTimestamp}\n          }) \n      {\n        id\n        market {\n          id\n          marketName\n          marketSymbol\n          feedId\n        }\n        positionSize\n        avgPrice\n        avgPriceDec\n        isLong\n        createdTimestamp\n        status\n        txHash\n        liquidationTxHash\n        closingPrice\n        realizedPositionPnl\n        realizedPnlAfterFees\n        totalFeesPaid\n        createdTimestamp\n        lastRefresh\n        lastRefreshISO\n        canBeLiquidated\n        snapshotCollateralValueUsd\n    }\n    }\n  }`;\n\n// Fetches positions for a user address by status\nexport const fetchAllPositionHistoryWithTime = (\n  startTimestamp: number,\n  endTimestamp: number,\n  count: number = 20,\n  skip: number = 0,\n) =>\n  gql`\n    {\n    snxAccounts(\n      first: ${count}\n      skip: ${skip}\n      where: {\n        type: PERP\n        totalPositionsCount_gt :0\n      }\n    ) {\n      id\n      accountId\n      owner {\n        id\n      }\n      collateralDeposits {\n        id\n        collateralName\n        collateralSymbol\n        collateralDecimals\n        collateralAddress\n        currentDepositedAmount\n        totalAmountDeposited\n        totalAmountWithdrawn\n        totalAmountLiquidated\n      }\n      positions(where: {\n          status_in: [CLOSED, LIQUIDATED],\n          createdTimestamp_gte: ${startTimestamp}\n          createdTimestamp_lte: ${endTimestamp}\n      }) {\n        id\n        market {\n          id\n          marketName\n          marketSymbol\n          feedId\n        }\n        positionSize\n        avgPrice\n        avgPriceDec\n        isLong\n        createdTimestamp\n        status\n        txHash\n        liquidationTxHash\n        closingPrice\n        realizedPositionPnl\n        realizedPnlAfterFees\n        totalFeesPaid\n        createdTimestamp\n        lastRefresh\n        lastRefreshISO\n        canBeLiquidated\n        snapshotCollateralValueUsd\n    }\n    }\n  }`;\n","export class NotFoundError extends Error {\n  constructor(message: string) {\n    super(message);\n    this.name = this.constructor.name;\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","import Decimal from 'decimal.js';\n\n// Calculates the Profit/Loss of the position given marketPrice and avgPrice\n// @param positionSize is negative for a short position and positive for Long position\nexport const getProfitOrLossInUsd = (marketPrice: number, avgPrice: number, positionSize: number): Decimal => {\n  const profitOrLossPerToken = new Decimal(marketPrice).minus(avgPrice);\n  return new Decimal(positionSize).times(profitOrLossPerToken);\n};\n\n// Calculates the formatted position size using collateral and leverage\n// using equation: Size = Collateral * Leverage\nexport const calculateSizeFromCollateralAndLeverage = (\n  collateralValueInUsd: number,\n  leverage: number,\n  marketPrice: number,\n): Decimal => {\n  const sizeInUsd = new Decimal(collateralValueInUsd).times(leverage);\n  return sizeInUsd.div(marketPrice);\n};\n\n// Calculates the Collateral amount using size and leverage values\n// using equation: Collateral = Size / Leverage\nexport const calculateCollateralFromSizeAndLeverage = (\n  sizeInUsd: number,\n  leverage: number,\n  collateralPrice: number,\n): Decimal => {\n  const collateralInUsd = new Decimal(sizeInUsd).div(leverage);\n  return collateralInUsd.div(collateralPrice);\n};\n\n// Calculates the leverage value of a position using size and collateral values\n// using equation: Leverage = Size / Collateral\nexport const calculateLeverageFromCollateralAndSize = (collateralValueInUsd: number, sizeInUsd: number): number => {\n  return sizeInUsd / collateralValueInUsd;\n};\n","import Decimal from 'decimal.js';\nimport { CollateralDeposit, Position } from '../interfaces';\nimport { collateralMappingWithRegularSymbol, convertWeiToEther, DECIMAL_ZERO, SYMBOL_TO_PYTH_FEED } from '../common';\nimport { getProfitOrLossInUsd } from './positions';\n\n// Calculates the unrealized pnl in USD for an array of positions off-chain\n// using the provided position array and price data\nexport const calculateUnrealizedPnlForPositions = (\n  positions: Position[],\n  priceData: { id: string; price: number }[],\n): Decimal => {\n  let totalUnrealizedPnl = DECIMAL_ZERO;\n  positions.forEach((position) => {\n    const currentPrice = getPriceFromPriceArray(priceData, position.market?.feedId);\n    const unrealizedPnl = getProfitOrLossInUsd(\n      currentPrice,\n      convertWeiToEther(position.avgPrice),\n      convertWeiToEther(position.positionSize),\n    );\n    totalUnrealizedPnl = totalUnrealizedPnl.add(unrealizedPnl);\n  });\n\n  return totalUnrealizedPnl;\n};\n\n// Calculates the total USD value for an array of collateral deposits off-chain\n// using the provided collateral deposits array and price data\nexport const calculateUsdValueOfCollateralDeposits = (\n  collateralDeposits: CollateralDeposit[],\n  priceData: { id: string; price: number }[],\n): Decimal => {\n  let totalCollateralValueInUsd = DECIMAL_ZERO;\n  collateralDeposits.forEach((deposit) => {\n    const price = getPriceFromPriceArray(priceData, undefined, deposit.collateralSymbol);\n\n    const usdValue = convertWeiToEther(deposit.currentDepositedAmount) * price;\n    totalCollateralValueInUsd = totalCollateralValueInUsd.add(usdValue);\n  });\n  return totalCollateralValueInUsd;\n};\n\n// Returns the price for a price id from a provided price data array\n\nexport const getPriceFromPriceArray = (\n  priceData: { id: string; price: number }[],\n  priceId?: string | undefined,\n  tokenSymbol?: string | undefined,\n): number => {\n  if (!priceId && !tokenSymbol) return 0;\n\n  if (!priceId) {\n    const formattedSymbol =\n      collateralMappingWithRegularSymbol.get(tokenSymbol?.toLowerCase() || '') || tokenSymbol?.toLowerCase();\n\n    priceId = SYMBOL_TO_PYTH_FEED.get(formattedSymbol?.toUpperCase() || '');\n  }\n  // Check if pythId exists before trying to access collateralPrice\n  const price = priceId ? priceData.find((p) => p.id === priceId.slice(2))?.price || 0 : 0;\n  console.log('price: ', priceId, price);\n  return price;\n};\n\n/**\n * Calculates the liquidation price for a position\n * @param availableMarginInUsd USD value of the margin that is available\n * @param marginBufferInUsd Margin used as buffer for the account\n * @param formattedPositionSize Formatted position size\n * @param formattedMarketPrice Formatted market price of the market\n * @returns liquidationPrice Approximate liquidation price of the asset\n */\nexport const calculateLiquidationPriceOffchain = ({\n  availableMarginInUsd,\n  marginBufferInUsd,\n  formattedPositionSize,\n  formattedMarketPrice,\n}: {\n  availableMarginInUsd: number;\n  marginBufferInUsd: number;\n  formattedPositionSize: number;\n  formattedMarketPrice: number;\n}): number => {\n  // For invalid position, return current market price\n  if (formattedPositionSize == 0) return formattedMarketPrice;\n  if (availableMarginInUsd == 0) return 0;\n\n  const lossPerToken = Math.abs((marginBufferInUsd - availableMarginInUsd) / formattedPositionSize);\n\n  let liquidationPrice;\n  if (formattedPositionSize > 0) {\n    liquidationPrice = formattedMarketPrice - lossPerToken;\n  } else {\n    liquidationPrice = formattedMarketPrice + lossPerToken;\n  }\n\n  return liquidationPrice;\n};\n","import { CollateralDeposit, Position, PriceObject } from '../../interfaces';\nimport { DECIMAL_ZERO } from '../../common';\nimport Decimal from 'decimal.js';\nimport { getAllPositionsByUserAddress } from '../positions';\nimport { calculateUnrealizedPnlForPositions, calculateUsdValueOfCollateralDeposits } from '../../perps/offchain';\n\nexport const getPortfolioStats = async (\n  subgraphEndpoint: string,\n  userAddress: string,\n  priceData: { id: string; price: number }[],\n): Promise<{\n  collateralValueInUsd: Decimal;\n  unrealizedPnl: Decimal;\n  realizedPnl: Decimal;\n}> => {\n  // Note: Fetching all positions (open, closed and liquidated) is required\n  // to account for collateralDeposits in SNX accounts without active positions\n  const snxAccountPositionData = await getAllPositionsByUserAddress(subgraphEndpoint, userAddress, 100);\n\n  let collateralDeposits: CollateralDeposit[] = [];\n  let positionsArray: Position[] = [];\n  let realizedPnl = DECIMAL_ZERO;\n\n  snxAccountPositionData.forEach((snxAccount) => {\n    // 1. Populate CollateralDeposits array for all snxAccounts by the user address\n    if (snxAccount.collateralDeposits) {\n      collateralDeposits = collateralDeposits.concat(snxAccount.collateralDeposits);\n    }\n\n    // 2. Add all unrealized pnl values for all snxAccounts by the user address\n    // @todo\n\n    // 3.Populate Positions array for all snxAccounts\n    if (snxAccount.positions) {\n      positionsArray = positionsArray.concat(snxAccount.positions);\n    }\n  });\n\n  // Use open positions to calculate unrealized pnl\n  const { openPositions, otherPositions } = splitPositionsByStatus(positionsArray);\n  const unrealizedPnl = calculateUnrealizedPnlForPositions(openPositions, priceData);\n  const collateralValueInUsd = calculateUsdValueOfCollateralDeposits(collateralDeposits, priceData);\n\n  return {\n    collateralValueInUsd,\n    unrealizedPnl,\n    realizedPnl,\n  };\n};\n\nconst splitPositionsByStatus = (positions: Position[]): { openPositions: Position[]; otherPositions: Position[] } => {\n  const openPositions: Position[] = [];\n  const otherPositions: Position[] = [];\n\n  positions.forEach((position) => {\n    if (position.status === 'OPEN') {\n      openPositions.push(position);\n    } else {\n      otherPositions.push(position);\n    }\n  });\n\n  return { openPositions, otherPositions };\n};\n\nexport function transformPriceArray(priceArray: PriceObject[]): { id: string; price: number }[] {\n  return priceArray.map((obj) => ({\n    id: obj.id,\n    price: Number(obj.price.price) / 10 ** Math.abs(obj.price.expo),\n  }));\n}\n","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 { PythConfig, RpcConfig, SubgraphConfig } from '../interfaces/classConfigs';\n\nimport { getPortfolioStats, transformPriceArray } from './portfolio';\nimport { getAllMarketsFromSubgraph, getMarketById } from './markets';\nimport { Chain } from '@parifi/references';\nimport request, { GraphQLClient } from 'graphql-request';\nimport { getPublicSubgraphEndpoint } from './common';\nimport { Pyth } from '../pyth';\nimport Decimal from 'decimal.js';\nimport {\n  checkIfExistingUser,\n  depositedCollateralForSnxAccounts,\n  getAccountByAddress,\n  getFeesByAddress,\n  getLeaderboardUserData,\n  getRealizedPnlForUser,\n} from './accounts';\nimport { LeaderboardUserData, Market, Order, Position } from '../interfaces/sdkTypes';\nimport { PriceObject, SnxAccount } from '../interfaces';\nimport { getProtocolStats } from './protocol';\nimport { getAllOrdersByUserAddress, getOrderById, getSettledOrdersCountBasedOnTimeStampByUserAddress } from './orders';\nimport {\n  getAllOpenPositionsWithTime,\n  getAllPositionHistoryWithTime,\n  getAllPositionsByUserAddress,\n  getClosedPositionsByUserAddress,\n  getLiquidatedPositionsByUserAddress,\n  getOpenPositionsByUserAddress,\n  getPositionById,\n  getUserOpenPositionsWithTime,\n  getUserPositionHistoryWithTime,\n  getUserLiquidatedPositionsBySnxAccount,\n  getUserPositionsHistory,\n} from './positions';\nimport { status } from '../../test/common/constants';\nimport { getEstimatedRewardsForUser } from './scripts';\n\nexport * from './common';\nexport * from './markets';\nexport * from './orders';\nexport * from './positions';\n\nexport class Subgraph {\n  // The rpcConfig and subgraphConfig objects that are passed to the class will only\n  // be used for the creation of the required fields for initialization\n  // @todo Add authentication to Graph QL Client in a separate PR\n  // Use the below graphQLClient for all requests to the subgraph\n  public graphQLClient: GraphQLClient;\n  public pyth: Pyth;\n\n  constructor(\n    private rpcConfig: RpcConfig,\n    private subgraphConfig: SubgraphConfig,\n    pythConfig: PythConfig,\n  ) {\n    this.pyth = new Pyth(pythConfig);\n    // Initialize the Graph QL Client using the config received\n    if (subgraphConfig.subgraphEndpoint) {\n      this.graphQLClient = new GraphQLClient(subgraphConfig.subgraphEndpoint);\n    } else {\n      this.graphQLClient = new GraphQLClient(getPublicSubgraphEndpoint(rpcConfig.chainId));\n    }\n  }\n  async init() {\n    await this.pyth.initPyth();\n  }\n\n  // Returns the configured subgraph endpoint if set, otherwise returns public subgraph endpoint\n  public getSubgraphEndpoint(chainId: Chain): string {\n    if (this.subgraphConfig.subgraphEndpoint) {\n      return this.subgraphConfig.subgraphEndpoint;\n    }\n    return getPublicSubgraphEndpoint(chainId);\n  }\n\n  // Execute the provided subgraph query using the configured subgraph endpoint and configuration values\n  public async executeSubgraphQuery(query: string): Promise<any> {\n    const subgraphEndpoint = this.getSubgraphEndpoint(this.rpcConfig.chainId);\n    try {\n      const subgraphResponse = await request(subgraphEndpoint, query);\n      return subgraphResponse;\n    } catch (error) {\n      throw error;\n    }\n  }\n\n  ////////////////////////////////////////////////////////////////\n  //////////////////////    ACCOUNT    ///////////////////////////\n  ////////////////////////////////////////////////////////////////\n  public async getRealizedPnlForUser(userAddress: string): Promise<{\n    totalRealizedPnlPositions: Decimal;\n    totalRealizedPnlVaults: Decimal;\n  }> {\n    const subgraphEndpoint = this.getSubgraphEndpoint(this.rpcConfig.chainId);\n    return await getRealizedPnlForUser(subgraphEndpoint, userAddress);\n  }\n\n  public async getPortfolioStats(\n    userAddress: string,\n    priceData: { id: string; price: number }[],\n  ): Promise<{\n    collateralValueInUsd: Decimal;\n    unrealizedPnl: Decimal;\n    realizedPnl: Decimal;\n  }> {\n    const subgraphEndpoint = this.getSubgraphEndpoint(this.rpcConfig.chainId);\n    return await getPortfolioStats(subgraphEndpoint, userAddress, priceData);\n  }\n\n  public async getLeaderboardUserData(userAddresses: string[]): Promise<LeaderboardUserData[]> {\n    const subgraphEndpoint = this.getSubgraphEndpoint(this.rpcConfig.chainId);\n    return await getLeaderboardUserData(subgraphEndpoint, userAddresses);\n  }\n\n  public async getFeesByAddress(userAddresses: string[]) {\n    const subgraphEndpoint = this.getSubgraphEndpoint(this.rpcConfig.chainId);\n    return await getFeesByAddress(subgraphEndpoint, userAddresses);\n  }\n\n  public async checkIfExistingUser(userAddress: string) {\n    const subgraphEndpoint = this.getSubgraphEndpoint(this.rpcConfig.chainId);\n    return await checkIfExistingUser(subgraphEndpoint, userAddress);\n  }\n\n  public async depositedCollateralForSnxAccounts(accountIds: string[]) {\n    const subgraphEndpoint = this.getSubgraphEndpoint(this.rpcConfig.chainId);\n    return await depositedCollateralForSnxAccounts(subgraphEndpoint, accountIds);\n  }\n\n  public transformPriceArray(priceArray: PriceObject[]): { id: string; price: number }[] {\n    return transformPriceArray(priceArray);\n  }\n\n  ////////////////////////////////////////////////////////////////\n  //////////////////////    ORDERS    ////////////////////////////\n  ////////////////////////////////////////////////////////////////\n  public async getAllOrdersByUserAddress(userAddress: string, count: number, skip: number): Promise<SnxAccount[]> {\n    const subgraphEndpoint = this.getSubgraphEndpoint(this.rpcConfig.chainId);\n    return await getAllOrdersByUserAddress(subgraphEndpoint, userAddress, count, skip);\n  }\n\n  public async getOrderById(orderId: string): Promise<Order> {\n    const subgraphEndpoint = this.getSubgraphEndpoint(this.rpcConfig.chainId);\n    return await getOrderById(subgraphEndpoint, orderId);\n  }\n\n  public async getUserByAddress(userAddress: string): Promise<any> {\n    const subgraphEndpoint = this.getSubgraphEndpoint(this.rpcConfig.chainId);\n    return await getAccountByAddress(subgraphEndpoint, userAddress);\n  }\n\n  public async getSettledOrdersCountBasedOnTimeStampByUserAddress(\n    userAddress: string,\n    count: number,\n    skip: number,\n    startTime: number,\n    endTime: number,\n  ): Promise<number> {\n    const subgraphEndpoint = this.getSubgraphEndpoint(this.rpcConfig.chainId);\n    return await getSettledOrdersCountBasedOnTimeStampByUserAddress(\n      subgraphEndpoint,\n      userAddress,\n      count,\n      skip,\n      startTime,\n      endTime,\n    );\n  }\n\n  ////////////////////////////////////////////////////////////////\n  //////////////////////    POSITION    //////////////////////////\n  ////////////////////////////////////////////////////////////////\n  public async getAllPositionsByUserAddress(\n    userAddress: string,\n    count: number = 10,\n    skip: number = 0,\n  ): Promise<SnxAccount[]> {\n    const subgraphEndpoint = this.getSubgraphEndpoint(this.rpcConfig.chainId);\n    return await getAllPositionsByUserAddress(subgraphEndpoint, userAddress, count, skip);\n  }\n\n  public async getOpenPositionsByUserAddress(\n    userAddress: string,\n    count: number = 10,\n    skip: number = 0,\n  ): Promise<SnxAccount[]> {\n    const subgraphEndpoint = this.getSubgraphEndpoint(this.rpcConfig.chainId);\n    return await getOpenPositionsByUserAddress(subgraphEndpoint, userAddress, count, skip);\n  }\n\n  public async getClosedPositionsByUserAddress(\n    userAddress: string,\n    count: number = 10,\n    skip: number = 0,\n  ): Promise<SnxAccount[]> {\n    const subgraphEndpoint = this.getSubgraphEndpoint(this.rpcConfig.chainId);\n    return await getClosedPositionsByUserAddress(subgraphEndpoint, userAddress, count, skip);\n  }\n\n  public async getLiquidatedPositionsByUserAddress(\n    userAddress: string,\n    count: number = 10,\n    skip: number = 0,\n  ): Promise<SnxAccount[]> {\n    const subgraphEndpoint = this.getSubgraphEndpoint(this.rpcConfig.chainId);\n    return await getLiquidatedPositionsByUserAddress(subgraphEndpoint, userAddress, count, skip);\n  }\n\n  public async getPositionById(positionId: string): Promise<Position> {\n    const subgraphEndpoint = this.getSubgraphEndpoint(this.rpcConfig.chainId);\n    return await getPositionById(subgraphEndpoint, positionId);\n  }\n\n  public async getUserPositionsHistory(\n    userAddress: string,\n    count: number = 100,\n    skip: number = 0,\n  ): Promise<SnxAccount[]> {\n    const subgraphEndpoint = this.getSubgraphEndpoint(this.rpcConfig.chainId);\n    return await getUserPositionsHistory(subgraphEndpoint, userAddress, count, skip);\n  }\n\n  // Get all positions by user address\n  public async getUserPositionHistoryWithTime(\n    userAddress: string,\n    startTime: number,\n    endTime: number,\n    count: number = 100,\n    skip: number = 0,\n  ): Promise<SnxAccount[]> {\n    const subgraphEndpoint = this.getSubgraphEndpoint(this.rpcConfig.chainId);\n    return await getUserPositionHistoryWithTime(subgraphEndpoint, userAddress, startTime, endTime, count, skip);\n  }\n\n  // Get open positions by user address\n  public async getUserOpenPositionsWithTime(\n    userAddress: string,\n    startTime: number,\n    endTime: number,\n    count: number = 10,\n    skip: number = 0,\n  ): Promise<SnxAccount[]> {\n    const subgraphEndpoint = this.getSubgraphEndpoint(this.rpcConfig.chainId);\n    return await getUserOpenPositionsWithTime(subgraphEndpoint, userAddress, startTime, endTime, count, skip);\n  }\n\n  // Get open positions by user address\n  public async getUserLiquidatedPositionsBySnxAccount(\n    snxAccountId: string,\n    lastRefresh: number,\n  ): Promise<SnxAccount | undefined> {\n    const subgraphEndpoint = this.getSubgraphEndpoint(this.rpcConfig.chainId);\n    return await getUserLiquidatedPositionsBySnxAccount(subgraphEndpoint, snxAccountId, lastRefresh);\n  }\n\n  // Get all closed/liquidated positions with time filter\n  public async getAllPositionHistoryWithTime(\n    startTime: number,\n    endTime: number,\n    count: number = 100,\n    skip: number = 0,\n  ): Promise<SnxAccount[]> {\n    const subgraphEndpoint = this.getSubgraphEndpoint(this.rpcConfig.chainId);\n    return await getAllPositionHistoryWithTime(subgraphEndpoint, startTime, endTime, count, skip);\n  }\n\n  // Get all open positions with time filter\n  public async getAllOpenPositionsWithTime(\n    startTime: number,\n    endTime: number,\n    count: number = 10,\n    skip: number = 0,\n  ): Promise<SnxAccount[]> {\n    const subgraphEndpoint = this.getSubgraphEndpoint(this.rpcConfig.chainId);\n    return await getAllOpenPositionsWithTime(subgraphEndpoint, startTime, endTime, count, skip);\n  }\n\n  ////////////////////////////////////////////////////////////////\n  //////////////////////    MARKET    ////////////////////////////\n  ////////////////////////////////////////////////////////////////\n\n  public async getAllMarketsFromSubgraph(): Promise<Market[]> {\n    const subgraphEndpoint = this.getSubgraphEndpoint(this.rpcConfig.chainId);\n    return getAllMarketsFromSubgraph(subgraphEndpoint);\n  }\n\n  public async getMarketById(marketId: string): Promise<Market> {\n    const subgraphEndpoint = this.getSubgraphEndpoint(this.rpcConfig.chainId);\n    return getMarketById(subgraphEndpoint, marketId);\n  }\n\n  ////////////////////////////////////////////////////////////////\n  /////////////////////    PROTOCOL    ///////////////////////////\n  ////////////////////////////////////////////////////////////////\n\n  public getProtocolStats() {\n    const subgraphEndpoint = this.getSubgraphEndpoint(this.rpcConfig.chainId);\n    return getProtocolStats(subgraphEndpoint);\n  }\n\n  ////////////////////////////////////////////////////////////////\n  ///////////////////////    MISC    /////////////////////////////\n  ////////////////////////////////////////////////////////////////\n\n  /**\n   * Estimates the rewards a user would receive based on their share of integrator fees\n   * generated during a specified time period.\n   *\n   * @param userAddress - The address of the user to calculate rewards for\n   * @param totalRewardsForPeriod - The total rewards to be distributed for the period\n   * @param startTimestamp - The starting Unix timestamp of the period\n   * @param endTimestamp - The ending Unix timestamp of the period\n   * @returns A Promise resolving to the estimated reward amount for the user\n   */\n  public async getEstimatedRewardsForUser(\n    userAddress: string,\n    totalRewardsForPeriod: number,\n    startTimestamp: number,\n    endTimestamp: number,\n  ): Promise<number> {\n    const subgraphEndpoint = this.getSubgraphEndpoint(this.rpcConfig.chainId);\n    return getEstimatedRewardsForUser(\n      subgraphEndpoint,\n      userAddress,\n      totalRewardsForPeriod,\n      startTimestamp,\n      endTimestamp,\n    );\n  }\n}\n","import { Chain } from '@parifi/references';\nimport dotenv from 'dotenv';\ndotenv.config();\nexport const publicSubgraphEndpoints: { [key in Chain]: string } = {\n  [Chain.ARBITRUM_SEPOLIA]: process.env.SUBGRAPH_ENDPOINT || '',\n  [Chain.ARBITRUM_MAINNET]: 'https://api.studio.thegraph.com/query/68480/parifi-arbitrum/version/latest',\n};\n\nexport const getPublicSubgraphEndpoint = (chainId: Chain) => {\n  return publicSubgraphEndpoints[chainId];\n};\n","import Decimal from 'decimal.js';\nimport { request } from 'graphql-request';\nimport {\n  checkExistingUser,\n  depositedCollateralForSnxAccountsQuery,\n  fetchAccountByWalletAddress,\n  fetchIntegratorFees,\n  fetchLeaderboardUserData,\n  fetchRealizedPnlData,\n} from './subgraphQueries';\nimport { convertWeiToEther, DECIMAL_ZERO } from '../../common';\nimport { CollateralDeposit, LeaderboardUserData } from '../../interfaces/sdkTypes';\n\nexport interface depositedCollateralAccountIdResponse {\n  owner: {\n    id: string;\n  };\n  accountId: string;\n  collateralDeposits: CollateralDeposit[];\n}\n\n/// Returns the Realized PNL for positions and vaults for a user address\nexport const getRealizedPnlForUser = async (\n  subgraphEndpoint: string,\n  userAddress: string,\n): Promise<{\n  totalRealizedPnlPositions: Decimal;\n  totalRealizedPnlVaults: Decimal;\n}> => {\n  try {\n    // Interface to map fetched data\n    interface RealizedPnlSubgraphResponse {\n      account: {\n        id: string;\n        totalRealizedPnlPositions: string;\n        totalRealizedPnlVaults: string;\n      };\n    }\n\n    const query = fetchRealizedPnlData(userAddress);\n    const subgraphResponse = await request(subgraphEndpoint, query);\n    const realizedPnlResponse: RealizedPnlSubgraphResponse = subgraphResponse as unknown as RealizedPnlSubgraphResponse;\n\n    if (realizedPnlResponse === null || realizedPnlResponse.account === null) {\n      console.log('Users Realized Pnl data not found');\n      return { totalRealizedPnlPositions: DECIMAL_ZERO, totalRealizedPnlVaults: DECIMAL_ZERO };\n    }\n    const totalRealizedPnlPositions = new Decimal(realizedPnlResponse.account.totalRealizedPnlPositions);\n    const totalRealizedPnlVaults = new Decimal(realizedPnlResponse.account.totalRealizedPnlVaults);\n    return { totalRealizedPnlPositions, totalRealizedPnlVaults };\n  } catch (error) {\n    throw error;\n  }\n};\n\n// Returns the leaderboard page details for a user address\nexport const getLeaderboardUserData = async (\n  subgraphEndpoint: string,\n  userAddresses: string[],\n): Promise<LeaderboardUserData[]> => {\n  const subgraphResponse: {\n    accounts: LeaderboardUserData[];\n  } = await request(subgraphEndpoint, fetchLeaderboardUserData(userAddresses));\n\n  const leaderboardUserData: LeaderboardUserData[] = subgraphResponse.accounts as LeaderboardUserData[];\n  return leaderboardUserData;\n};\n\nexport const getAccountByAddress = async (subgraphEndpoint: string, userAddresses: string) => {\n  const subgraphResponse: any = await request(subgraphEndpoint, fetchAccountByWalletAddress(userAddresses));\n  if (!subgraphResponse) throw new Error('Error while fetching account data');\n  return subgraphResponse?.wallet;\n};\n\nexport const getFeesByAddress = async (\n  subgraphEndpoint: string,\n  userAddresses: string[],\n): Promise<Map<string, number>> => {\n  // Temp interface to map subgraph response\n  interface SNXAccountResponse {\n    id: string;\n    accountId: string;\n    owner: { id: string };\n    integratorFeesGenerated: string;\n  }\n\n  const feesByAddress = new Map<string, number>();\n\n  const subgraphResponse: any = await request(subgraphEndpoint, fetchIntegratorFees(userAddresses));\n  if (!subgraphResponse) throw new Error('Error while fetching account data');\n\n  const snxAccounts: SNXAccountResponse[] = subgraphResponse?.snxAccounts;\n  snxAccounts.forEach((account) => {\n    const userFees = feesByAddress.get(account.owner.id);\n    if (userFees) {\n      // Multiple SNX accounts exist for the wallet address, add fees to previous values\n      const totalFees = userFees + convertWeiToEther(account.integratorFeesGenerated);\n      feesByAddress.set(account.owner.id, totalFees);\n    } else {\n      feesByAddress.set(account.owner.id, convertWeiToEther(account.integratorFeesGenerated));\n    }\n  });\n  return feesByAddress;\n};\n\nexport const checkIfExistingUser = async (subgraphEndpoint: string, userAddress: string) => {\n  interface SNXAccountResponse {\n    id: string;\n    accountId: string;\n    totalOrdersCount: string;\n  }\n\n  const subgraphResponse: any = await request(subgraphEndpoint, checkExistingUser(userAddress));\n  if (!subgraphResponse) throw new Error('Error while fetching account data');\n\n  // A wallet can have multiple SNX accounts\n  // The function returns true if it has any one snxAccount with past orders\n  const snxAccounts: SNXAccountResponse[] = subgraphResponse?.snxAccounts;\n  let isExisting = false;\n  for (let index = 0; index < snxAccounts.length; index++) {\n    if (Number(snxAccounts[index].totalOrdersCount) > 0) {\n      isExisting = true;\n      break;\n    }\n  }\n\n  return isExisting;\n};\n\nexport const depositedCollateralForSnxAccounts = async (subgraphEndpoint: string, accountIds: string[]) => {\n  const subgraphResponse: any = await request(subgraphEndpoint, depositedCollateralForSnxAccountsQuery(accountIds));\n  if (!subgraphResponse) throw new Error('Error while fetching account data');\n  const snxAccounts: depositedCollateralAccountIdResponse[] = subgraphResponse?.snxAccounts;\n  return snxAccounts;\n};\n","import { gql } from 'graphql-request';\n\n// The `fetchRealizedPnlData` query fetches the realized PnL for a user address\n// for vaults and positions\nexport const fetchRealizedPnlData = (userAddress: string) => gql`\n  {\n    account(id: \"${userAddress.toLowerCase()}\") {\n      id\n      totalRealizedPnlPositions\n      totalRealizedPnlVaults\n    }\n  }\n`;\n\n/// Fetch Portfolio total for a set of addresses\n/// Portfolio total consists of\n/// 1. Realized PNL from positions and vaults - user.totalRealizedPnlPositions, user.totalRealizedPnlVaults\n/// 2. Unrealized PNL from positions - positions.netUnrealizedPnlInUsd\n/// 3. Deposited liquidity in vaults -\n/// 4. Deposited collateral of all open positions - positions.positionCollateral\nexport const fetchPortfolioData = (userAddresses: string[]) => gql`\n{\n  accounts(where: {id_in: [${userAddresses.map((id) => `\"${id.toLowerCase()}\"`).join(', ')}]}) {\n    id\n    totalRealizedPnlPositions\n    totalRealizedPnlVaults\n  }\n  positions(\n    first: 1000\n    orderBy: positionCollateral\n    orderDirection: desc\n    where: {\n      user_in: [${userAddresses.map((id) => `\"${id.toLowerCase()}\"`).join(', ')}], \n      status: OPEN\n      }\n  ) {\n    id\n    user {\n      id\n    }\n    netUnrealizedPnlInUsd\n    positionCollateral\n    market {\n      depositToken {\n        decimals\n        pyth {\n          id\n          price\n        }\n      }\n    }\n  }\n  vaultPositions(\n    first: 1000\n    orderBy: sharesBalance\n    orderDirection: desc\n    where: {user_in: [${userAddresses.map((id) => `\"${id.toLowerCase()}\"`).join(', ')}]}\n  ) {\n    user {\n      id\n    }\n    vault {\n      id\n      assetsPerShare\n      sharesPerAsset\n      depositToken {\n        decimals\n        pyth {\n          id\n          price\n        }\n      }\n    }\n    sharesBalance\n  }\n}\n`;\n\nexport const fetchAccountByWalletAddress = (walletAddress: string) =>\n  gql`\n  {\n    wallet(id: \"${walletAddress}\") {\n      id\n    }\n  }\n`;\n\n// Fetch account specific data for a user address for Leaderboard view\nexport const fetchLeaderboardUserData = (userAddresses: string[]) => gql`\n{\n  accounts(\n    where: {id_in: [${userAddresses.map((id) => `\"${id}\"`).join(', ')}]}\n  ) {\n    id\n    totalOrdersCount\n    totalPositionsCount\n    countProfitablePositions\n    countLossPositions\n    countLiquidatedPositions\n    totalVolumeInUsd\n    totalVolumeInUsdLongs\n    totalVolumeInUsdShorts\n    totalRealizedPnlPositions\n    totalAccruedBorrowingFeesInUsd \n  }\n}`;\n\nexport const fetchIntegratorFees = (userAddresses: string[]) => gql`\n  {\n    snxAccounts(where:\n    {\n      owner_in: [${userAddresses.map((id) => `\"${id}\"`).join(', ')}],\n      type: PERP\n    }) {\n      id\n      accountId\n      owner {\n        id\n      }\n      integratorFeesGenerated\n    }\n  }\n`;\n\nexport const checkExistingUser = (userAddress: string) => gql`\n  {\n  snxAccounts(\n    where: {\n      owner: \"${userAddress}\",\n      type: PERP,\n    }\n  ) {\n    id\n    accountId\n\t\ttotalOrdersCount\n  }\n}\n`;\n\nexport const depositedCollateralForSnxAccountsQuery = (accountIds: string[]) => gql`\n{\n  snxAccounts\n  (where :{\n    accountId_in : [${accountIds.map((id) => `\"${id}\"`).join(', ')}]\n  })\n {\n    owner{\n      id\n    }\n    accountId\n    collateralDeposits {\n      totalAmountDeposited\n      totalAmountWithdrawn\n      totalAmountLiquidated\n      currentDepositedAmount\n      collateralName\n      collateralSymbol\n      collateralDecimals\n    }\n  }\n}\n`;\n","import request from 'graphql-request';\nimport { fetchProtocolTradeInfo } from './subgraphQueries';\nimport { ProtocolStats } from '../../interfaces';\n\n// Returns the protocol stats\nexport const getProtocolStats = async (subgraphEndpoint: string): Promise<ProtocolStats> => {\n  const subgraphResponse: any = await request(subgraphEndpoint, fetchProtocolTradeInfo());\n  return subgraphResponse.protocolData;\n};\n","import { gql } from 'graphql-request';\n\nexport const fetchProtocolTradeInfo = () => gql`\n  {\n    protocolData(id: \"1\") {\n      userCount\n      activeUsersCount\n      orderCount\n      settledCount\n      positionCount\n      totalActivePositions\n      referralFeesReceived\n      totalVolume\n      orderTotalFees\n    }\n  }\n`;\n","import { request } from 'graphql-request';\nimport {\n  fetchOrdersByIdQuery,\n  fetchOrdersByUserQuery,\n  fetchSettledOrdersCountBasedOnTimeStampByUserQuery,\n} from './subgraphQueries';\nimport { mapResponseToOrder, mapResponseToSnxAccountArray } from '../../common/subgraphMapper';\nimport { NotFoundError } from '../../error/not-found.error';\nimport { Order, SnxAccount } from '../../interfaces/sdkTypes';\n\n// Get all orders by a user address\nexport const getAllOrdersByUserAddress = async (\n  subgraphEndpoint: string,\n  userAddress: string,\n  count: number = 10,\n  skip: number = 0,\n): Promise<SnxAccount[]> => {\n  try {\n    const subgraphResponse: any = await request(subgraphEndpoint, fetchOrdersByUserQuery(userAddress, count, skip));\n    const snxAccounts = mapResponseToSnxAccountArray(subgraphResponse?.snxAccounts);\n    return snxAccounts ?? [];\n  } catch (error) {\n    console.error('Error fetching orders:', error);\n    return [];\n  }\n};\n\n// Get order from subgraph by order ID\nexport const getOrderById = async (subgraphEndpoint: string, orderId: string): Promise<Order> => {\n  try {\n    let subgraphResponse: any = await request(subgraphEndpoint, fetchOrdersByIdQuery(orderId));\n\n    console.log('subgraph response:', subgraphResponse);\n    const order = mapResponseToOrder(subgraphResponse?.order);\n    if (order) return order;\n    throw new NotFoundError('Order id not found');\n  } catch (error) {\n    console.error('Error fetching orders:', error);\n    throw new NotFoundError('Order id not found');\n  }\n};\n\n// Get count of settled orders by a user address\nexport const getSettledOrdersCountBasedOnTimeStampByUserAddress = async (\n  subgraphEndpoint: string,\n  userAddress: string,\n  count = 50,\n  skip = 0,\n  startTimeStamp: number,\n  endTimeStamp: number,\n): Promise<number> => {\n  try {\n    const response: any = await request(\n      subgraphEndpoint,\n      fetchSettledOrdersCountBasedOnTimeStampByUserQuery(userAddress, count, skip, startTimeStamp, endTimeStamp),\n    );\n\n    const snxAccounts = mapResponseToSnxAccountArray(response?.snxAccounts) ?? [];\n\n    if (!snxAccounts.length) return 0;\n\n    const orderCount = snxAccounts.reduce((total, account) => total + (account.orders?.length || 0), 0);\n\n    return orderCount;\n  } catch (error) {\n    console.error('Error fetching orders:', error);\n    return 0;\n  }\n};\n","import { gql } from 'graphql-request';\n\n// Fetch all orders by `userAddress`\nexport const fetchOrdersByUserQuery = (userAddress: string, count: number = 50, skip: number = 0) =>\n  gql`{\n    snxAccounts(\n      first: ${count}\n      skip: ${skip}\n      where: { owner: \"${userAddress}\", type: PERP }) {\n      id\n      accountId\n      owner {\n        id\n      }\n      collateralDeposits {\n        id\n        collateralName\n        collateralSymbol\n        collateralDecimals\n        collateralAddress\n        currentDepositedAmount\n        totalAmountDeposited\n        totalAmountWithdrawn\n        totalAmountLiquidated\n      }\n      orders {\n        id\n        market {\n          id\n          marketName\n          marketSymbol\n          feedId\n        }\n        expirationTime\n        deltaSize\n        executionPrice\n        isLimitOrder\n        status\n        createdTimestamp\n        txHash\n        partnerAddress\n        collectedFees\n        settledTxHash\n        settledTimestamp\n        deltaSizeUsd\n        acceptablePrice\n        snapshotCollateralValueUsd\n        settledBy {\n          id\n        }\n      }\n    }\n  }\n`;\n\n// Fetch all orders by `userAddress`\nexport const fetchSettledOrdersCountBasedOnTimeStampByUserQuery = (\n  userAddress: string,\n  count: number = 50,\n  skip: number = 0,\n  startTimeStamp: number, // unix timestamp\n  endTimeStamp: number, //unix timestamp\n) =>\n  gql`{\n    snxAccounts(\n      first: ${count}\n      skip: ${skip}\n      where: { owner: \"${userAddress}\", type: PERP }) {\n      id\n      accountId\n      owner {\n        id\n      }\n       orders(\n      where: {status: SETTLED, createdTimestamp_gt: ${startTimeStamp}, createdTimestamp_lt: ${endTimeStamp}}\n    ) {\n        id\n      }\n    }\n  }\n`;\n\nexport const fetchOrdersByIdQuery = (orderId: string) =>\n  gql`\n  {\n    order(id: \"${orderId}\") {\n    id\n    market {\n      id\n      marketName\n      marketSymbol\n      feedId\n    }\n    expirationTime\n    deltaSize\n    executionPrice\n    isLimitOrder\n    status\n    createdTimestamp\n    txHash\n    partnerAddress\n    collectedFees\n    settledTxHash\n    settledTimestamp\n    deltaSizeUsd\n    acceptablePrice\n    snapshotCollateralValueUsd\n    settledBy {\n      id\n    }\n    snxAccount {\n      id\n      accountId\n    }\n  }\n}\n`;\n","import request from 'graphql-request';\nimport { fetchIntegratorFeesWithTimestampQuery } from './subgraphQueries';\nimport { Decimal } from 'decimal.js';\nimport { WAD } from '../../common';\n\nexport const getEstimatedRewardsForUser = async (\n  subgraphEndpoint: string,\n  userAddress: string,\n  totalRewardsForPeriod: number,\n  startTimestamp: number,\n  endTimestamp: number,\n): Promise<number> => {\n  interface FeeDetailsInterface {\n    id: string;\n    integratorFeesGenerated: string;\n    accountId: string;\n    owner: { id: string };\n    orders: {\n      id: string;\n      referralFees: string;\n      collectedFees: string;\n    }[];\n  }\n\n  const response: any = await request(\n    subgraphEndpoint,\n    fetchIntegratorFeesWithTimestampQuery(startTimestamp, endTimestamp),\n  );\n  const feeDetails: FeeDetailsInterface[] = response?.snxAccounts ?? [];\n\n  let totalFeesForPeriod = 0;\n  let userFeesForPeriod = 0;\n  feeDetails.forEach((account) => {\n    account.orders.forEach((order) => {\n      const formattedFees = new Decimal(order.referralFees).div(WAD);\n      if (account.owner.id == userAddress) {\n        userFeesForPeriod += Number(formattedFees.toString());\n      }\n      totalFeesForPeriod += Number(formattedFees.toString());\n    });\n  });\n\n  if (totalFeesForPeriod === 0) {\n    return 0;\n  }\n  const estimatedUserRewards = (userFeesForPeriod * totalRewardsForPeriod) / totalFeesForPeriod;\n  return estimatedUserRewards;\n};\n","import { gql } from 'graphql-request';\n\n// Fetch all orders by `userAddress`\nexport const fetchIntegratorFeesWithTimestampQuery = (\n  startTimeStamp: number, // unix timestamp\n  endTimeStamp: number, //unix timestamp\n) =>\n  gql`{\n    snxAccounts(\n      first: 1000\n      where: { type: PERP, totalOrdersCount_gt: 0 }) {\n      id\n      integratorFeesGenerated\n      accountId\n      owner {\n        id\n      }\n      orders(\n        where: {\n          status: SETTLED,\n          createdTimestamp_gt: ${startTimeStamp},\n          createdTimestamp_lt: ${endTimeStamp}\n        }\n    ) {\n        id\n        referralFees\n        collectedFees\n      }\n    }\n  }\n`;\n","import {\n  GelatoRelay,\n  RelayRequestOptions,\n  SponsoredCallRequest,\n  TransactionStatusResponse,\n} from '@gelatonetwork/relay-sdk';\nimport { Chain } from '@parifi/references';\n\nexport const executeTxUsingGelato = async (\n  targetContractAddress: string,\n  chainId: Chain,\n  gelatoKey: string | undefined,\n  encodedTxData: string,\n  gelatoGasLimit?: bigint,\n): Promise<string> => {\n  const request: SponsoredCallRequest = {\n    chainId: BigInt(chainId.toString()),\n    target: targetContractAddress,\n    data: encodedTxData,\n  };\n\n  const relay = new GelatoRelay();\n  const relayOptions: RelayRequestOptions = {\n    gasLimit: gelatoGasLimit || BigInt(5000000),\n  };\n\n  const { taskId } = await relay.sponsoredCall(request, gelatoKey || '', relayOptions);\n  return taskId;\n};\n\nexport const checkGelatoTaskStatus = async (taskId: string): Promise<TransactionStatusResponse | undefined> => {\n  const relay = new GelatoRelay();\n  const txStatus = await relay.getTaskStatus(taskId);\n  return txStatus;\n};\n","import { TransactionStatusResponse } from '@gelatonetwork/relay-sdk';\nimport { RelayerConfig, RpcConfig } from '../../interfaces';\nimport { checkGelatoTaskStatus, executeTxUsingGelato } from './gelato-function';\n\nexport class Gelato {\n  constructor(\n    private gelatoConfig: RelayerConfig['gelatoConfig'],\n    private rpcConfig: RpcConfig,\n  ) {}\n\n  public async executeTxUsingGelato(\n    targetContractAddress: string,\n    encodedTxData: string,\n    gelatoGasLimit?: bigint,\n  ): Promise<string> {\n    return await executeTxUsingGelato(\n      targetContractAddress,\n      this.rpcConfig.chainId,\n      this.gelatoConfig?.apiKey,\n      encodedTxData,\n      gelatoGasLimit,\n    );\n  }\n\n  public checkGelatoTaskStatus = (taskId: string): Promise<TransactionStatusResponse | undefined> => {\n    return checkGelatoTaskStatus(taskId);\n  };\n}\n","import Decimal from 'decimal.js';\nimport {\n  calculateCollateralFromSizeAndLeverage,\n  calculateLeverageFromCollateralAndSize,\n  calculateSizeFromCollateralAndLeverage,\n  getProfitOrLossInUsd,\n} from './positions';\nimport { CollateralDeposit, Position } from '../interfaces';\nimport { collateralMappingWithRegularSymbol, convertWeiToEther, DECIMAL_ZERO, SYMBOL_TO_PYTH_FEED } from '../common';\nimport {\n  calculateLiquidationPriceOffchain,\n  calculateUnrealizedPnlForPositions,\n  calculateUsdValueOfCollateralDeposits,\n  getPriceFromPriceArray,\n} from './offchain';\n\nexport class Perps {\n  constructor() {}\n\n  getProfitOrLossInUsd = (marketPrice: number, avgPrice: number, positionSize: number): Decimal => {\n    return getProfitOrLossInUsd(marketPrice, avgPrice, positionSize);\n  };\n\n  calculateSizeFromCollateralAndLeverage = ({\n    collateralValueInUsd,\n    leverage,\n    marketPrice,\n  }: {\n    collateralValueInUsd: number;\n    leverage: number;\n    marketPrice: number;\n  }): Decimal => {\n    return calculateSizeFromCollateralAndLeverage(collateralValueInUsd, leverage, marketPrice);\n  };\n\n  calculateCollateralFromSizeAndLeverage = ({\n    sizeInUsd,\n    leverage,\n    collateralPrice,\n  }: {\n    sizeInUsd: number;\n    leverage: number;\n    collateralPrice: number;\n  }): Decimal => {\n    return calculateCollateralFromSizeAndLeverage(sizeInUsd, leverage, collateralPrice);\n  };\n\n  calculateLeverageFromCollateralAndSize = ({\n    collateralValueInUsd,\n    sizeInUsd,\n  }: {\n    collateralValueInUsd: number;\n    sizeInUsd: number;\n  }): number => {\n    return calculateLeverageFromCollateralAndSize(collateralValueInUsd, sizeInUsd);\n  };\n\n  // Calculates the unrealized pnl in USD for an array of positions off-chain\n  // using the provided position array and price data\n  calculateUnrealizedPnlForPositions = (positions: Position[], priceData: { id: string; price: number }[]): Decimal => {\n    return calculateUnrealizedPnlForPositions(positions, priceData);\n  };\n\n  // Calculates the total USD value for an array of collateral deposits off-chain\n  // using the provided collateral deposits array and price data\n  calculateUsdValueOfCollateralDeposits = (\n    collateralDeposits: CollateralDeposit[],\n    priceData: { id: string; price: number }[],\n  ): Decimal => {\n    return calculateUsdValueOfCollateralDeposits(collateralDeposits, priceData);\n  };\n\n  // Returns the price for a price id from a provided price data array\n  getPriceFromPriceArray = (\n    priceData: { id: string; price: number }[],\n    priceId?: string | undefined,\n    tokenSymbol?: string | undefined,\n  ): number => {\n    return getPriceFromPriceArray(priceData, priceId, tokenSymbol);\n  };\n\n  //   Calculates the liquidation price for a position\n  calculateLiquidationPriceOffchain = ({\n    availableMarginInUsd,\n    marginBufferInUsd,\n    formattedPositionSize,\n    formattedMarketPrice,\n  }: {\n    availableMarginInUsd: number;\n    marginBufferInUsd: number;\n    formattedPositionSize: number;\n    formattedMarketPrice: number;\n  }): number => {\n    return calculateLiquidationPriceOffchain({\n      availableMarginInUsd,\n      marginBufferInUsd,\n      formattedPositionSize,\n      formattedMarketPrice,\n    });\n  };\n}\n","import 'dotenv/config';\nimport { RelayerConfig, RpcConfig, SubgraphConfig } from '../../interfaces';\nimport { executeTxUsingPimlico, getPimlicoSmartAccountClient } from './utils';\nimport { SmartAccount } from 'permissionless/accounts';\nimport { Chain, Hex, Transport } from 'viem';\nimport { EntryPoint } from 'permissionless/types/entrypoint';\nimport { SmartAccountClient } from 'permissionless';\nimport { generatePrivateKey } from 'viem/accounts';\n\nexport class Pimlico {\n  /// Pimlico Class variables\n  public isInitialized: boolean;\n  private smartAccountClient: SmartAccountClient<EntryPoint, Transport, Chain, SmartAccount<EntryPoint>>;\n\n  constructor(\n    private pimlicoConfig: RelayerConfig['pimlicoConfig'],\n    private rpcConfig: RpcConfig,\n    private subgraphConfig: SubgraphConfig,\n  ) {\n    this.isInitialized = false;\n    this.smartAccountClient = {} as SmartAccountClient<EntryPoint, Transport, Chain, SmartAccount<EntryPoint>>;\n  }\n\n  ////////////////////////////////////////////////////////////////\n  //////////////////////    INITIALIZER    ///////////////////////\n  ////////////////////////////////////////////////////////////////\n  async initPimlico() {\n    if (this.isInitialized) {\n      console.log('Pimlico relayer already initialized');\n      return;\n    }\n\n    if (this.pimlicoConfig?.apiKey === undefined || this.rpcConfig.rpcEndpointUrl === undefined) {\n      console.log('Invalid config for Pimlico');\n      return;\n    }\n\n    /// Create Smart account for user address EOA\n    const privateKey =\n      ((process.env.PRIVATE_KEY as Hex) || this.pimlicoConfig.password) ??\n      (() => {\n        const pk = generatePrivateKey();\n        this.pimlicoConfig.password = pk;\n        return pk;\n      })();\n\n    this.smartAccountClient = await getPimlicoSmartAccountClient(this.pimlicoConfig, this.rpcConfig, privateKey);\n\n    // Set the Pimlico Relayer as initialized\n    this.isInitialized = true;\n  }\n\n  ////////////////////////////////////////////////////////////////\n  ////////////////////    PUBLIC FUNCTIONS    ////////////////////\n  ////////////////////////////////////////////////////////////////\n  public executeTxUsingPimlico = async (targetContractAddress: string, txData: string) => {\n    return await executeTxUsingPimlico(this.smartAccountClient, targetContractAddress, txData);\n  };\n}\n","import 'dotenv/config';\nimport { arbitrum } from 'viem/chains';\nimport { ENTRYPOINT_ADDRESS_V07, SmartAccountClient, createSmartAccountClient } from 'permissionless';\nimport { RelayerI, RpcConfig } from '../../interfaces';\nimport { SmartAccount, privateKeyToSimpleSmartAccount } from 'permissionless/accounts';\nimport { Chain, Hex, Transport, createPublicClient, http } from 'viem';\n\nimport { createPimlicoBundlerClient, createPimlicoPaymasterClient } from 'permissionless/clients/pimlico';\n\nimport { EntryPoint } from 'permissionless/types/entrypoint';\nimport { FACTORY_ADDRESS_SIMPLE_ACCOUNT } from '../../common';\n\nexport const getPimlicoSmartAccountClient = async (\n  pimlicoConfig: RelayerI,\n  rpcConfig: RpcConfig,\n  privateKey: `0x${string}`,\n): Promise<SmartAccountClient<EntryPoint, Transport, Chain, SmartAccount<EntryPoint>>> => {\n  const apiKey = pimlicoConfig.apiKey ?? '';\n  const viemChain = getViemChainById(rpcConfig.chainId as number);\n  const chainId = rpcConfig.chainId as number;\n\n  /// Create Paymaster Client\n  const paymasterUrl = `https://api.pimlico.io/v2/${chainId}/rpc?apikey=${apiKey}`;\n  const publicClient = createPublicClient({\n    transport: http(rpcConfig.rpcEndpointUrl),\n  });\n\n  const paymasterClient = createPimlicoPaymasterClient({\n    transport: http(paymasterUrl),\n    entryPoint: ENTRYPOINT_ADDRESS_V07,\n  });\n\n  const account = await privateKeyToSimpleSmartAccount(publicClient, {\n    privateKey,\n    entryPoint: ENTRYPOINT_ADDRESS_V07,\n    factoryAddress: FACTORY_ADDRESS_SIMPLE_ACCOUNT,\n  });\n\n  /// Create Bundler client\n  const bundlerUrl = `https://api.pimlico.io/v2/${chainId}/rpc?apikey=${apiKey}`;\n  const bundlerClient = createPimlicoBundlerClient({\n    transport: http(bundlerUrl),\n    entryPoint: ENTRYPOINT_ADDRESS_V07,\n  });\n\n  /// Create Smart account client\n  const smartAccountClient = createSmartAccountClient({\n    account,\n    entryPoint: ENTRYPOINT_ADDRESS_V07,\n    chain: viemChain,\n    bundlerTransport: http(bundlerUrl),\n    middleware: {\n      gasPrice: async () => {\n        return (await bundlerClient.getUserOperationGasPrice()).fast;\n      },\n      sponsorUserOperation: paymasterClient.sponsorUserOperation,\n    },\n  }) as SmartAccountClient<EntryPoint, Transport, Chain, SmartAccount<EntryPoint>>;\n\n  return smartAccountClient;\n};\n\nexport const executeTxUsingPimlico = async (\n  smartAccountClient: SmartAccountClient<EntryPoint, Transport, Chain, SmartAccount<EntryPoint>>,\n  targetContractAddress: string,\n  txData: string,\n): Promise<{ txHash: string }> => {\n  const txHash = await smartAccountClient.sendTransaction({\n    to: targetContractAddress as Hex,\n    value: 0n,\n    data: txData as Hex,\n  });\n  return { txHash };\n};\n\nexport const executeBatchTxsUsingPimlico = async (\n  smartAccountClient: SmartAccountClient<EntryPoint, Transport, Chain, SmartAccount<EntryPoint>>,\n  targetContractAddresses: string[],\n  txDatas: string[],\n): Promise<{ txHash: string }> => {\n  const batchTxDatas = [];\n\n  if (targetContractAddresses.length != txDatas.length) {\n    throw new Error('Target contract and data lengths do not match');\n  }\n\n  for (let index = 0; index < targetContractAddresses.length; index++) {\n    batchTxDatas.push({\n      to: targetContractAddresses[index] as Hex,\n      value: 0n,\n      data: txDatas[index] as Hex,\n    });\n  }\n\n  const txHash = await smartAccountClient.sendTransactions({\n    transactions: batchTxDatas,\n  });\n  return { txHash };\n};\n\n/**\n * Gets the chain object for the given chain id.\n * @param chainId - Chain id of the target EVM chain.\n * @returns Viem's chain object.\n */\nexport const getViemChainById = (chainId: number) => {\n  if (chainId === 42161) {\n    return arbitrum;\n  }\n};\n","import { StandardMerkleTree } from '@openzeppelin/merkle-tree';\nimport { encodeFunctionData } from 'viem';\nimport { REWARD_DISTRIBUTOR_ABI, REWARD_DISTRIBUTOR_ADDRESSES, SUPPORTED_CHAINS } from '../common/constants';\n\nexport type RewardList = Record<string, Record<number, { address: string; amount: string }[]>>;\n\nexport class RewardDistribution {\n  rewards: RewardList;\n\n  constructor(_rewards?: RewardList) {\n    this.rewards = _rewards || {};\n  }\n\n  /**\n   * Sets the reward list.\n   * @param rewards The reward list to set.\n   */\n  setRewardList(rewards: RewardList) {\n    this.rewards = rewards;\n  }\n\n  /**\n   * Gets the reward contract address and ABI for a specific token.\n   * @param tokenSymbol The symbol of the token.\n   * @returns The reward contract address and ABI.\n   */\n  async getRewardContract(tokenSymbol: string) {\n    tokenSymbol = tokenSymbol.toLowerCase();\n\n    const rewardContract = REWARD_DISTRIBUTOR_ADDRESSES[SUPPORTED_CHAINS.BASE][tokenSymbol];\n\n    if (!rewardContract) {\n      throw new Error(`No reward contract found for token ${tokenSymbol}`);\n    }\n\n    return {\n      address: rewardContract,\n      abi: REWARD_DISTRIBUTOR_ABI,\n    };\n  }\n\n  /**\n   * Gets the Merkle tree for a specific token and round.\n   * @param tokenSymbol The symbol of the token.\n   * @param round The round number.\n   * @returns The Merkle tree for the specified token and round.\n   */\n  async getTree(tokenSymbol: string, round: number) {\n    tokenSymbol = tokenSymbol.toLowerCase();\n    const treeData = this.rewards?.[tokenSymbol]?.[round];\n\n    if (!treeData) {\n      throw new Error(`No rewards found for token ${tokenSymbol}`);\n    }\n\n    const tree = StandardMerkleTree.of(\n      treeData.map((u) => [u.address, u.amount]),\n      ['address', 'uint256'],\n    );\n\n    return tree;\n  }\n\n  async getUserData(user: string, tokenSymbol: string, round: number) {\n    const tree = await this.getTree(tokenSymbol, round);\n\n    // serach the index of the user in the tree\n    const indexOf = tree.dump().values.findIndex((data) => data.value.at(0)?.toLowerCase() === user.toLowerCase());\n    // it return an [address, number] array so we parse to {address, amount}\n    const userData = tree\n      .dump()\n      .values.find((data) => data.value.at(0)?.toLowerCase() === user.toLowerCase())\n      ?.value?.reduce(\n        (acc, curr, index) => {\n          const keys: ['address', 'amount'] = ['address', 'amount'];\n          const key: 'address' | 'amount' = keys[index];\n\n          if (!key) return acc;\n\n          acc[key] = curr;\n\n          return acc;\n        },\n        {} as { address: string; amount: string },\n      );\n\n    return { userData, indexOf, tree };\n  }\n\n  /**\n   * Claims rewards for a user in multiple rounds.\n   * @param user The address of the user.\n   * @param rounds The array of round numbers.\n   * @param tokenSymbol The symbol of the token.\n   * @returns An array of transactions to be sent.\n   */\n\n  async claimRewards({ user, rounds, tokenSymbol }: { user: string; rounds: number[]; tokenSymbol: string }) {\n    const txs = [];\n    for (const round of rounds) {\n      try {\n        const tx = await this.claimReward({ user, round, tokenSymbol });\n        txs.push(tx);\n      } catch (error) {\n        console.error(`Error claiming rewards for ${user} in round ${round}:`, error);\n      }\n    }\n\n    return txs.flat();\n  }\n\n  /**\n   * Claims the reward for a user in a specific round.\n   * @param user The address of the user.\n   * @param round The round number.\n   * @param tokenSymbol The symbol of the token.\n   * @returns An array of transactions to be sent.\n   */\n\n  async claimReward({ user, round, tokenSymbol }: { user: string; tokenSymbol: string; round: number }) {\n    tokenSymbol = tokenSymbol.toLowerCase();\n\n    const { userData, indexOf, tree } = await this.getUserData(user, tokenSymbol, round);\n    if (!userData || !userData?.address) throw new Error(`User ${user} not found in the tree`);\n\n    const proof = tree.getProof(indexOf);\n    const distributor = await this.getRewardContract(tokenSymbol);\n\n    return [\n      {\n        tx: {\n          to: distributor.address,\n          data: encodeFunctionData({\n            abi: distributor.abi,\n            functionName: 'claimReward',\n            args: [round, userData.amount, proof],\n          }),\n          value: '0',\n        },\n        amount: userData.amount,\n      },\n    ];\n  }\n}\n","//// NOTE: All fields from the subgraph interfaces have their type as string\n//// and are marked as optional. This is because the logic to fetch these data might\n//// differ based on the requirement or function, and only required fields are fetched\n//// with queries to keep it concise and avoid fetching unnecessary data.\n\n////////////////////////////////////////////////////////////////\n////////////////////    ENUMS     //////////////////////////////\n////////////////////////////////////////////////////////////////\nexport enum OrderType {\n  OPEN_NEW_POSITION = 'OPEN_NEW_POSITION',\n  CLOSE_POSITION = 'CLOSE_POSITION',\n  INCREASE_POSITION = 'INCREASE_POSITION',\n  DECREASE_POSITION = 'DECREASE_POSITION',\n  CANCEL_ORDER = 'CANCEL_ORDER',\n}\n\nexport enum OrderStatus {\n  PENDING = 'PENDING',\n  CANCELLED = 'CANCELLED',\n  SETTLED = 'SETTLED',\n  INVALID = 'INVALID',\n}\n\nexport enum PositionStatus {\n  OPEN = 'OPEN',\n  CLOSED = 'CLOSED',\n  LIQUIDATED = 'LIQUIDATED',\n}\nexport enum SnxAccountType {\n  /** Core Proxy Account */\n  CORE = 'CORE',\n\n  /** Perps Market Proxy Account */\n  PERP = 'PERP',\n}\n\n////////////////////////////////////////////////////////////////\n//////////////////////    ACCOUNT   ////////////////////////////\n////////////////////////////////////////////////////////////////\n\nexport interface WalletSubgraph {\n  /** User wallet address */\n  id?: string;\n\n  snxAccounts?: SnxAccountSubgraph[];\n}\n////////////////////////////////////////////////////////////////\n////////////////////// SNX ACCOUNT //////////////////////////\n////////////////////////////////////////////////////////////////\nexport type SnxAccountSubgraph = {\n  id: string;\n  type?: SnxAccountType;\n  accountId?: string;\n  owner?: WalletSubgraph;\n  totalOrdersCount?: string;\n  totalPositionsCount?: string;\n  openPositionCount?: string;\n  countProfitablePositions?: string;\n  countLossPositions?: string;\n  countLiquidatedPositions?: string;\n  totalRealizedPnlPositions?: string;\n  totalVolumeInUsd?: string;\n  totalVolumeInUsdLongs?: string;\n  totalVolumeInUsdShorts?: string;\n  totalAccruedBorrowingFeesInUsd?: string;\n  integratorFeesGenerated?: string;\n  orders?: OrderSubgraph[];\n  positions?: PositionSubgraph[];\n  collateralDeposits?: CollateralDepositSubgraph[];\n};\n\n////////////////////////////////////////////////////////////////\n////////////////////    Collaterals   //////////////////////////\n////////////////////////////////////////////////////////////////\n\nexport type CollateralDepositSubgraph = {\n  id: string;\n  snxAccountId?: string; // \" SNX Account id including the type PERP/CORE\"\n  collateralId?: string;\n  collateralName?: string;\n  collateralSymbol?: string;\n  collateralDecimals?: string;\n  collateralAddress?: string;\n  currentDepositedAmount?: string;\n  totalAmountDeposited?: string;\n  totalAmountWithdrawn?: string;\n  totalAmountLiquidated?: string;\n};\n\nexport type SynthSubgraph = { id: string; name?: string; symbol?: string; decimals?: number; synthAddress?: string };\n\n////////////////////////////////////////////////////////////////\n/////////////////////////    Market   //////////////////////////\n////////////////////////////////////////////////////////////////\n\nexport type MarketSubgraph = {\n  id: string;\n  marketName?: string;\n  marketSymbol?: string;\n  feedId?: string;\n  skew?: string;\n  size?: string;\n  maxOpenInterest?: string;\n  interestRate?: string;\n  currentFundingRate?: string;\n  currentFundingVelocity?: string;\n  indexPrice?: string;\n  skewScale?: string;\n  maxFundingVelocity?: string;\n  makerFee?: string;\n  takerFee?: string;\n  maxMarketValue?: string;\n  marketPrice?: string;\n  initialMarginRatioD18?: string;\n  maintenanceMarginRatioD18?: string;\n  minimumInitialMarginRatioD18?: string;\n  flagRewardRatioD18?: string;\n  minimumPositionMargin?: string;\n};\n\n////////////////////////////////////////////////////////////////\n/////////////////////////    Orders   //////////////////////////\n////////////////////////////////////////////////////////////////\n\nexport type OrderSubgraph = {\n  id: string;\n  market?: MarketSubgraph;\n  snxAccountId?: string; // \" SNX Account id including the type PERP/CORE\"\n  isLimitOrder?: boolean;\n  acceptablePrice?: string;\n  commitmentTime?: string;\n  expectedPriceTime?: string;\n  settlementTime?: string;\n  expirationTime?: string;\n  trackingCode?: string;\n  deltaSize?: string;\n  deltaSizeUsd?: string;\n  executionPrice?: string;\n  collectedFees?: string;\n  settlementReward?: string;\n  referralFees?: string;\n  partnerAddress?: string;\n  txHash?: string;\n  createdTimestamp?: string;\n  status?: OrderStatus;\n  settledTxHash?: string;\n  settledTimestamp?: string;\n  settledTimestampISO: string;\n  settledBy?: WalletSubgraph;\n};\n\n////////////////////////////////////////////////////////////////\n///////////////////////    Positions   /////////////////////////\n////////////////////////////////////////////////////////////////\n\nexport type PositionSubgraph = {\n  id: string;\n  market?: MarketSubgraph;\n  snxAccountId?: string; // \" SNX Account id including the type PERP/CORE\"\n  isLong?: boolean;\n  positionSize?: string;\n  avgPrice?: string;\n  avgPriceDec?: string;\n  status?: PositionStatus;\n  txHash?: string;\n  liquidationTxHash?: string;\n  closingPrice?: string;\n  realizedPnl?: string;\n  realizedFee?: string;\n  netRealizedPnl?: string;\n  createdTimestamp?: string;\n  lastRefresh?: string;\n  lastRefreshISO?: string;\n  accruedBorrowingFees?: string;\n  canBeLiquidated?: boolean;\n};\n\n////////////////////////////////////////////////////////////////\n//////////////////////    TOKEN    /////////////////////////////\n////////////////////////////////////////////////////////////////\nexport interface TokenSubgraph {\n  // //\" Smart contract address of the token \"\n  id?: string;\n\n  // //\" Token name \"\n  name?: string;\n\n  // //\" Token Symbol \"\n  symbol?: string;\n\n  // //\" The string of decimal places for token \"\n  decimals?: string;\n\n  // //\" Reference to Pyth and price data \"\n  pyth?: PythData;\n\n  // //\" To store price snapshots of the token on price updates from Pyth  \"\n  lastPriceUSD?: string;\n\n  // //\" Timestamp of lastPriceUsd \"\n  lastPriceTimestamp?: string;\n}\n\n////////////////////////////////////////////////////////////////\n////////////////////////    PYTH    ////////////////////////////\n////////////////////////////////////////////////////////////////\n\n// Pyth price data interface for prices received from Pyth\nexport interface PythPrice {\n  price: string;\n\n  conf: string;\n\n  expo: number;\n\n  publish_time: number;\n}\n\n// Interface for response received for Pyth Price data\nexport interface PythPriceResponse {\n  // Pyth Price ID\n  id: string;\n\n  price: PythPrice;\n\n  ema_price: PythPrice;\n}\n\n// \" The entity saves all the price feed updates on-chain (by Parifi) \"\nexport interface PriceFeedSnapshot {\n  //\" Price ID + Timestamp \"\n  id?: string;\n\n  //\" Pyth network price ID \"\n  priceId?: string;\n\n  //\" Publish Timestamp \"\n  publishTime?: string;\n\n  //\" Price \"\n  price?: string;\n\n  //\" Price confidence \"\n  confidence?: string;\n}\n\n// \" Pyth Feeds for Parifi market IDs/Token addresses \"\nexport interface PythData {\n  // \" Pyth Price ID for market/token \"\n  id?: string;\n\n  // \" Market ID \"\n  marketId?: string;\n\n  // \" Token Address \"\n  tokenAddress?: string;\n\n  // \" Price \"\n  price?: string;\n\n  // \" Last updated timestamp \"\n  lastUpdatedTimestamp?: string;\n}\n\nexport interface BatchExecute {\n  id: string;\n  priceUpdateData: string[];\n}\n\nexport interface collateralDepositsPortfolioData {\n  depositedAmount: string;\n  collateralSymbol: string;\n  collateralName: string;\n  collateralDecimals: string;\n}\n\nexport interface positionsPortfolio {\n  snxAccount?: { accountId: string };\n  status: string;\n  market: {\n    marketSymbol: string;\n  };\n  positionSize: string;\n  avgPrice: string;\n  realizedPnl: string;\n  realizedFee: string;\n  user?: {\n    id: string;\n  };\n}\n\nexport interface PortfolioWallet {\n  id: string; // Wallet ID\n  snxAccounts: Array<{\n    collateralDeposits: collateralDepositsPortfolioData[];\n    positions: positionsPortfolio[];\n  }>;\n}\nexport interface PorfolioDataSubgraph {\n  wallets: PortfolioWallet[]; // Array of Wallet objects\n}\n\nexport type PriceObject = {\n  id: string;\n  price: {\n    price: string;\n    conf: string;\n    expo: number;\n    publish_time: number;\n  };\n  ema_price: {\n    price: string;\n    conf: string;\n    expo: number;\n    publish_time: number;\n  };\n};\n\nexport type LeaderBoardClosedPosition = {\n  id: string;\n  user: {\n    id: string;\n  };\n  positionSize: string;\n  avgPriceDec: string;\n  status: string;\n  netRealizedPnl: string;\n  realizedPnl: string;\n  snxAccount: {\n    accountId: string;\n  };\n};\n\nexport type LeaderBoardOpenPosition = {\n  positionSize: string;\n  avgPriceDec: string;\n  id: string;\n  market: {\n    id: string;\n  };\n  user: {\n    id: string;\n  };\n  snxAccount: {\n    id: string;\n    accountId: string;\n  };\n};\n\nexport type LiquidatePositionCollateral = {\n  accountId: string;\n  collateralDeposits: collateralDepositsPortfolioData[];\n};\n","import { Pyth } from './pyth';\nimport { Subgraph } from './subgraph';\nimport { PythConfig, RelayerConfig, RpcConfig, SubgraphConfig } from './interfaces/classConfigs';\nimport { Gelato } from './relayers/gelato';\nimport { Perps } from './perps';\nimport { Pimlico } from './relayers';\nimport { RewardDistribution, RewardList } from './distribution';\n\nexport * from './common';\nexport * from './relayers/gelato/gelato-function';\nexport * from './interfaces';\nexport * from './pyth';\nexport * from './subgraph';\nexport * from './perps';\n\nexport class ParifiSdk {\n  subgraph: Subgraph;\n  pyth: Pyth;\n  perps: Perps;\n  relayer: {\n    gelato: Gelato;\n    pimlico: Pimlico;\n  };\n  rewardDistribution: RewardDistribution;\n\n  constructor(\n    rpcConfig: RpcConfig,\n    subgraphConfig: SubgraphConfig,\n    relayerConfig: RelayerConfig,\n    pythConfig: PythConfig,\n    rewardList?: RewardList,\n  ) {\n    this.subgraph = new Subgraph(rpcConfig, subgraphConfig, pythConfig);\n    this.pyth = new Pyth(pythConfig);\n    this.perps = new Perps();\n    this.relayer = {\n      gelato: new Gelato(relayerConfig['gelatoConfig'], rpcConfig),\n      pimlico: new Pimlico(relayerConfig['pimlicoConfig'], rpcConfig, subgraphConfig),\n    };\n    this.rewardDistribution = new RewardDistribution(rewardList);\n  }\n\n  async init() {\n    await this.pyth.initPyth();\n    await this.relayer.pimlico.initPimlico();\n  }\n}\n"],"mappings":"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","names":["SUPPORTED_CHAINS","Decimal","Decimal","Decimal","request","gql","request","request","Decimal","request","gql","gql","request","Decimal","request","gql","request","request","gql","request","request","gql","Decimal","request","Decimal","request","request","OrderType","OrderStatus","PositionStatus","SnxAccountType"]}