UNPKG

@parifi/sdk

Version:

Parifi SDK with common utility functions

1 lines 23.8 kB
{"version":3,"sources":["../../../src/subgraph/orders/index.ts","../../../src/subgraph/orders/subgraphQueries.ts","../../../src/common/subgraphMapper.ts","../../../src/error/not-found.error.ts"],"sourcesContent":["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 { PriceFeedSnapshot, PythData } from '../interfaces/subgraphTypes';\nimport { CollateralDeposit, Market, Order, Position, SnxAccount, Token, Wallet } from '../interfaces/sdkTypes';\n\n////////////////////////////////////////////////////////////////\n////////////////////// Wallet ////////////////////////////\n////////////////////////////////////////////////////////////////\n\nexport const mapResponseToWallet = (response: any): Wallet | undefined => {\n if (!response) return undefined;\n try {\n return {\n id: response?.id,\n // snxAccounts: mapSnxAccountsArray(response.snxAccounts)\n };\n } catch (error) {\n console.log('Error while mapping data', error);\n return undefined;\n }\n};\n\nexport const mapResponseToWalletArray = (response: any): Wallet[] | undefined => {\n if (!response) return undefined;\n try {\n return response.map((account: any) => {\n return mapResponseToWallet(account);\n });\n } catch (error) {\n console.log('Error while mapping data', error);\n return undefined;\n }\n};\n\n////////////////////////////////////////////////////////////////\n////////////////////// SNX Account ////////////////////////\n////////////////////////////////////////////////////////////////\n\nexport const mapResponseToSnxAccount = (response: any): SnxAccount | undefined => {\n if (!response) return undefined;\n\n try {\n return {\n id: response?.id,\n type: response?.type,\n accountId: response?.accountId,\n owner: response?.owner ?? mapResponseToWallet(response?.owner),\n totalOrdersCount: response?.totalOrdersCount,\n totalPositionsCount: response?.totalPositionsCount,\n openPositionCount: response?.openPositionCount,\n countProfitablePositions: response?.countProfitablePositions,\n countLossPositions: response?.countLossPositions,\n countLiquidatedPositions: response?.countLiquidatedPositions,\n realizedPnlFromPositions: response?.realizedPnlFromPositions,\n totalFeesPaid: response?.totalFeesPaid,\n finalPnlAfterFees: response?.finalPnlAfterFees,\n totalVolumeInUsd: response?.totalVolumeInUsd,\n totalAccruedBorrowingFeesInUsd: response?.totalAccruedBorrowingFeesInUsd,\n integratorFeesGenerated: response?.integratorFeesGenerated,\n orders: response?.orders ? mapResponseToOrderArray(response?.orders) : [],\n positions: response?.positions ? mapResponseToPositionArray(response?.positions) : [],\n collateralDeposits: response?.collateralDeposits\n ? mapResponseToCollateralDepositArray(response?.collateralDeposits)\n : [],\n };\n } catch (error) {\n console.log('Error while mapping data', error);\n return undefined;\n }\n};\n\nexport const mapResponseToSnxAccountArray = (response: any): SnxAccount[] | undefined => {\n if (!response) return undefined;\n try {\n return response.map((snxAccount: any) => {\n return mapResponseToSnxAccount(snxAccount);\n });\n } catch (error) {\n console.log('Error while mapping data', error);\n return undefined;\n }\n};\n\n////////////////////////////////////////////////////////////////\n////////////////////// MARKET ////////////////////////////\n////////////////////////////////////////////////////////////////\n\nexport const mapResponseToMarket = (response: any): Market | undefined => {\n if (!response) return undefined;\n if (response?.marketName === '' || response?.marketSymbol === '') return undefined;\n try {\n return {\n id: response?.id ?? '',\n marketName: response?.marketName ?? '',\n marketSymbol: response?.marketSymbol ?? '',\n feedId: response?.feedId ?? '',\n skew: response?.skew ?? '0',\n size: response?.size ?? '0',\n maxOpenInterest: response?.maxOpenInterest ?? '0',\n interestRate: response?.interestRate ?? '0',\n currentFundingRate: response?.currentFundingRate ?? '0',\n currentFundingVelocity: response?.currentFundingVelocity ?? '0',\n indexPrice: response?.indexPrice ?? '0',\n skewScale: response?.skewScale ?? '0',\n maxFundingVelocity: response?.maxFundingVelocity ?? '0',\n makerFee: response?.makerFee ?? '0',\n takerFee: response?.takerFee ?? '0',\n maxMarketValue: response?.maxMarketValue ?? '0',\n maxMarketSize: response?.maxMarketSize ?? '0',\n marketPrice: response?.marketPrice ?? '0',\n initialMarginRatioD18: response?.initialMarginRatioD18 ?? '0',\n maintenanceMarginRatioD18: response?.maintenanceMarginRatioD18 ?? '0',\n minimumInitialMarginRatioD18: response?.minimumInitialMarginRatioD18 ?? '0',\n flagRewardRatioD18: response?.flagRewardRatioD18 ?? '0',\n minimumPositionMargin: response?.minimumPositionMargin ?? '0',\n openInterestUsd: response?.openInterestUsd ?? '0',\n };\n } catch (error) {\n console.log('Error while mapping data', error);\n return undefined;\n }\n};\n\nexport const mapResponseToMarketArray = (response: any): (Market | undefined)[] | undefined => {\n if (!response) return undefined;\n try {\n return response.map((market: any) => {\n return mapResponseToMarket(market);\n });\n } catch (error) {\n console.log('Error while mapping data', error);\n return undefined;\n }\n};\n\n////////////////////////////////////////////////////////////////\n////////////////////// ORDERS ////////////////////////////\n////////////////////////////////////////////////////////////////\n\nexport const mapResponseToOrder = (response: any): Order | undefined => {\n if (!response) return undefined;\n try {\n return {\n id: response?.id,\n market: response?.market ?? mapResponseToMarket(response?.market),\n snxAccountId: response?.snxAccount?.id,\n isLimitOrder: response?.isLimitOrder,\n acceptablePrice: response?.acceptablePrice,\n commitmentTime: response?.commitmentTime,\n expectedPriceTime: response?.expectedPriceTime,\n settlementTime: response?.settlementTime,\n expirationTime: response?.expirationTime,\n trackingCode: response?.trackingCode,\n deltaSize: response?.deltaSize,\n deltaSizeUsd: response?.deltaSizeUsd,\n executionPrice: response?.executionPrice,\n collectedFees: response?.collectedFees,\n settlementReward: response?.settlementReward,\n referralFees: response?.referralFees,\n partnerAddress: response?.partnerAddress,\n txHash: response?.txHash,\n createdTimestamp: response?.createdTimestamp,\n status: response?.status,\n settledTxHash: response?.settledTxHash,\n cancellationTxHash: response?.cancellationTxHash,\n settledTimestamp: response?.settledTimestamp,\n settledTimestampISO: response?.settledTimestampISO,\n settledBy: response?.settledBy ?? mapResponseToWallet(response?.settledBy),\n snapshotCollateralValueUsd: response?.snapshotCollateralValueUsd,\n };\n } catch (error) {\n console.log('Error while mapping data', error);\n return undefined;\n }\n};\n\nexport const mapResponseToOrderArray = (response: any): Order[] | undefined => {\n if (!response) return undefined;\n try {\n return response.map((order: any) => {\n return mapResponseToOrder(order);\n });\n } catch (error) {\n console.log('Error while mapping data', error);\n return undefined;\n }\n};\n\n////////////////////////////////////////////////////////////////\n//////////////////// Collaterals //////////////////////////\n////////////////////////////////////////////////////////////////\n\nfunction mapResponseToCollateralDeposit(response: any): CollateralDeposit | undefined {\n if (!response) return undefined;\n try {\n return {\n id: response?.id,\n snxAccountId: response?.snxAccountId,\n collateralId: response?.collateralId,\n collateralName: response?.collateralName,\n collateralSymbol: response?.collateralSymbol,\n collateralDecimals: response?.collateralDecimals,\n collateralAddress: response?.collateralAddress,\n currentDepositedAmount: response?.currentDepositedAmount,\n totalAmountDeposited: response?.totalAmountDeposited,\n totalAmountWithdrawn: response?.totalAmountWithdrawn,\n totalAmountLiquidated: response?.totalAmountLiquidated,\n };\n } catch (error) {\n console.log('Error while mapping data', error);\n return undefined;\n }\n}\n\nexport const mapResponseToCollateralDepositArray = (response: any): CollateralDeposit[] | undefined => {\n if (!response) return undefined;\n try {\n return response.map((deposit: any) => {\n return mapResponseToCollateralDeposit(deposit);\n });\n } catch (error) {\n console.log('Error while mapping data', error);\n return undefined;\n }\n};\n\n////////////////////////////////////////////////////////////////\n////////////////////// POSITION //////////////////////////\n////////////////////////////////////////////////////////////////\n\nexport const mapResponseToPosition = (response: any): Position | undefined => {\n if (!response) return undefined;\n try {\n return {\n id: response?.id,\n market: response?.market ?? mapResponseToMarket(response?.market),\n snxAccountId: response?.snxAccountId,\n isLong: response?.isLong,\n positionSize: response?.positionSize,\n avgPrice: response?.avgPrice,\n avgPriceDec: response?.avgPriceDec,\n status: response?.status,\n txHash: response?.txHash,\n liquidationTxHash: response?.liquidationTxHash,\n closingPrice: response?.closingPrice,\n realizedPositionPnl: response?.realizedPositionPnl,\n totalFeesPaid: response?.totalFeesPaid,\n realizedPnlAfterFees: response?.realizedPnlAfterFees,\n createdTimestamp: response?.createdTimestamp,\n lastRefresh: response?.lastRefresh,\n lastRefreshISO: response?.lastRefreshISO,\n accruedBorrowingFees: response?.accruedBorrowingFees,\n canBeLiquidated: response?.canBeLiquidated,\n snapshotCollateralValueUsd: response?.snapshotCollateralValueUsd,\n };\n } catch (error) {\n console.log('Error while mapping data', error);\n return undefined;\n }\n};\n\nexport const mapResponseToPositionArray = (response: any): Position[] | undefined => {\n if (!response) return undefined;\n\n try {\n return response.map((position: any) => {\n return mapResponseToPosition(position);\n });\n } catch (error) {\n console.log('Error while mapping data', error);\n return undefined;\n }\n};\n\n////////////////////////////////////////////////////////////////\n////////////////////// TOKEN /////////////////////////////\n////////////////////////////////////////////////////////////////\n\nexport const mapResponseToToken = (response: any): Token | undefined => {\n if (!response) return undefined;\n\n try {\n return {\n id: response?.id,\n name: response?.name,\n symbol: response?.symbol,\n decimals: response?.decimals,\n lastPriceUSD: response?.lastPriceUSD,\n lastPriceTimestamp: response?.lastPriceTimestamp,\n };\n } catch (error) {\n console.log('Error while mapping data', error);\n return undefined;\n }\n};\n\n////////////////////////////////////////////////////////////////\n//////////////////////// PYTH ////////////////////////////\n////////////////////////////////////////////////////////////////\n\nexport const mapResponseToPriceFeedSnapshot = (response: any): PriceFeedSnapshot | undefined => {\n if (!response) return undefined;\n\n try {\n return {\n id: response?.id,\n priceId: response?.priceId,\n publishTime: response?.publishTime,\n price: response?.price,\n confidence: response?.confidence,\n };\n } catch (error) {\n console.log('Error while mapping data', error);\n return undefined;\n }\n};\n\nexport const mapResponseToPythData = (response: any): PythData | undefined => {\n if (!response) return undefined;\n\n try {\n return {\n id: response?.id,\n marketId: response?.marketId,\n tokenAddress: response?.tokenAddress,\n price: response?.price,\n lastUpdatedTimestamp: response?.lastUpdatedTimestamp,\n };\n } catch (error) {\n console.log('Error while mapping data', error);\n return undefined;\n }\n};\n","export class NotFoundError extends Error {\n constructor(message: string) {\n super(message);\n this.name = this.constructor.name;\n }\n}"],"mappings":"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","names":[]}