{"version":3,"sources":["../src/EngineQueryClient.ts"],"sourcesContent":["import {\n  encodeSignedOrder,\n  MarketWithProduct,\n  subaccountToHex,\n} from '@vertex-protocol/contracts';\nimport {\n  addDecimals,\n  mapValues,\n  removeDecimals,\n  toBigDecimal,\n  toIntegerString,\n} from '@vertex-protocol/utils';\nimport { BigDecimal } from '@vertex-protocol/utils';\nimport { EngineBaseClient } from './EngineBaseClient';\nimport {\n  EngineServerStatusResponse,\n  EngineServerSubaccountInfoQueryParams,\n  EngineSymbolsResponse,\n  GetEngineAllMarketsResponse,\n  GetEngineContractsResponse,\n  GetEngineEstimatedSubaccountSummaryParams,\n  GetEngineHealthGroupsResponse,\n  GetEngineInsuranceResponse,\n  GetEngineIsolatedPositionsParams,\n  GetEngineIsolatedPositionsResponse,\n  GetEngineLinkedSignerParams,\n  GetEngineLinkedSignerResponse,\n  GetEngineMarketLiquidityParams,\n  GetEngineMarketLiquidityResponse,\n  GetEngineMarketPriceParams,\n  GetEngineMarketPriceResponse,\n  GetEngineMarketPricesParams,\n  GetEngineMarketPricesResponse,\n  GetEngineMaxMintLpAmountParams,\n  GetEngineMaxMintLpAmountResponse,\n  GetEngineMaxMintVlpAmountParams,\n  GetEngineMaxMintVlpAmountResponse,\n  GetEngineMaxOrderSizeParams,\n  GetEngineMaxOrderSizeResponse,\n  GetEngineMaxWithdrawableParams,\n  GetEngineMaxWithdrawableResponse,\n  GetEngineMinDepositRatesResponse,\n  GetEngineOrderParams,\n  GetEngineOrderResponse,\n  GetEngineSubaccountFeeRatesParams,\n  GetEngineSubaccountFeeRatesResponse,\n  GetEngineSubaccountOrdersParams,\n  GetEngineSubaccountOrdersResponse,\n  GetEngineSubaccountProductOrdersParams,\n  GetEngineSubaccountProductOrdersResponse,\n  GetEngineSubaccountSummaryParams,\n  GetEngineSubaccountSummaryResponse,\n  GetEngineSymbolsParams,\n  SubaccountOrderFeeRates,\n  ValidateEngineOrderParams,\n  ValidateEngineOrderResponse,\n  ValidateSignedEngineOrderParams,\n} from './types';\nimport { mapProductEngineType } from './utils/productEngineTypeMappers';\nimport {\n  mapEngineMarketPrice,\n  mapEngineServerIsolatedPositions,\n  mapEngineServerOrder,\n  mapEngineServerPerpProduct,\n  mapEngineServerSpotProduct,\n  mapEngineServerSymbols,\n  mapEngineServerTickLiquidity,\n  mapSubaccountSummary,\n} from './utils/queryDataMappers';\n\nexport class EngineQueryClient extends EngineBaseClient {\n  /**\n   * Retrieves the set of contracts that the engine is interfacing with\n   */\n  async getContracts(): Promise<GetEngineContractsResponse> {\n    const baseResponse = await this.query('contracts', {});\n    return {\n      chainId: Number(baseResponse.chain_id),\n      endpointAddr: baseResponse.endpoint_addr,\n      orderbookAddrs: baseResponse.book_addrs,\n    };\n  }\n\n  /**\n   * Retrieves current engine status\n   */\n  async getStatus(): Promise<EngineServerStatusResponse> {\n    return this.query('status', {});\n  }\n\n  /**\n   * Retrieves a subaccount summary reflective of the state within the offchain engine. This adheres to the\n   * same return interface as the contract version\n   *\n   * @param params\n   */\n  async getSubaccountSummary(\n    params: GetEngineSubaccountSummaryParams,\n  ): Promise<GetEngineSubaccountSummaryResponse> {\n    const subaccount = subaccountToHex({\n      subaccountOwner: params.subaccountOwner,\n      subaccountName: params.subaccountName,\n    });\n    const baseResponse = await this.query('subaccount_info', {\n      subaccount,\n    });\n\n    return mapSubaccountSummary(baseResponse);\n  }\n\n  /**\n   * Retrieves a list of isolated positions\n   *\n   * @param params\n   */\n  async getIsolatedPositions(\n    params: GetEngineIsolatedPositionsParams,\n  ): Promise<GetEngineIsolatedPositionsResponse> {\n    const subaccount = subaccountToHex({\n      subaccountOwner: params.subaccountOwner,\n      subaccountName: params.subaccountName,\n    });\n    const baseResponse = await this.query('isolated_positions', {\n      subaccount,\n    });\n\n    return mapEngineServerIsolatedPositions(baseResponse);\n  }\n\n  /**\n   * Retrieves an estimated subaccount summary with the applied transactions\n   *\n   * @param params\n   */\n  async getEstimatedSubaccountSummary(\n    params: GetEngineEstimatedSubaccountSummaryParams,\n  ): Promise<GetEngineSubaccountSummaryResponse> {\n    const subaccount = subaccountToHex({\n      subaccountOwner: params.subaccountOwner,\n      subaccountName: params.subaccountName,\n    });\n    const queryParams: EngineServerSubaccountInfoQueryParams = {\n      subaccount: subaccount,\n      txns: params.txs.map(\n        (\n          tx,\n        ): NonNullable<\n          EngineServerSubaccountInfoQueryParams['txns']\n        >[number] => {\n          switch (tx.type) {\n            case 'burn_lp':\n              return {\n                burn_lp: {\n                  product_id: tx.tx.productId,\n                  subaccount,\n                  amount_lp: toIntegerString(tx.tx.amountLp),\n                },\n              };\n            case 'apply_delta':\n              return {\n                apply_delta: {\n                  product_id: tx.tx.productId,\n                  subaccount,\n                  amount_delta: toIntegerString(tx.tx.amountDelta),\n                  v_quote_delta: toIntegerString(tx.tx.vQuoteDelta),\n                },\n              };\n            case 'mint_lp':\n              return {\n                mint_lp: {\n                  product_id: tx.tx.productId,\n                  subaccount,\n                  amount_base: toIntegerString(tx.tx.amountBase),\n                  quote_amount_low: toIntegerString(tx.tx.amountQuoteLow),\n                  quote_amount_high: toIntegerString(tx.tx.amountQuoteHigh),\n                },\n              };\n          }\n        },\n      ),\n    };\n    const baseResponse = await this.query('subaccount_info', {\n      subaccount: queryParams.subaccount,\n      txns: JSON.stringify(queryParams.txns),\n    });\n\n    return mapSubaccountSummary(baseResponse);\n  }\n\n  /**\n   * Retrieves symbols and product info\n   *\n   * @param params\n   */\n  async getSymbols(\n    params: GetEngineSymbolsParams,\n  ): Promise<EngineSymbolsResponse> {\n    const baseResponse = await this.query('symbols', {\n      product_ids: params.productIds,\n      product_type:\n        params.productType != null\n          ? mapProductEngineType(params.productType)\n          : undefined,\n    });\n    return mapEngineServerSymbols(baseResponse);\n  }\n\n  /**\n   * Retrieves all market states as per the offchain engine. Same return interface as contracts\n   */\n  async getAllMarkets(): Promise<GetEngineAllMarketsResponse> {\n    const markets: MarketWithProduct[] = [];\n\n    const baseResponse = await this.query('all_products', {});\n    baseResponse.spot_products.forEach((spotProduct) => {\n      markets.push(mapEngineServerSpotProduct(spotProduct));\n    });\n    baseResponse.perp_products.forEach((perpProduct) => {\n      markets.push(mapEngineServerPerpProduct(perpProduct));\n    });\n\n    return markets;\n  }\n\n  /**\n   * Retrieves all markets by chain id.\n   */\n  async getEdgeAllMarkets(): Promise<Record<number, MarketWithProduct[]>> {\n    const baseResponse = await this.query('edge_all_products', {});\n\n    return mapValues(baseResponse.edge_all_products, (allProducts) => {\n      const markets: MarketWithProduct[] = [];\n\n      allProducts.spot_products.forEach((spotProduct) => {\n        markets.push(mapEngineServerSpotProduct(spotProduct));\n      });\n\n      allProducts.perp_products.forEach((perpProduct) => {\n        markets.push(mapEngineServerPerpProduct(perpProduct));\n      });\n\n      return markets;\n    });\n  }\n\n  /**\n   * Retrieves all health groups (linked spot & perp products) from the engine\n   */\n  async getHealthGroups(): Promise<GetEngineHealthGroupsResponse> {\n    const baseResponse = await this.query('health_groups', {});\n\n    return {\n      healthGroups: baseResponse.health_groups.map(\n        ([spotProductId, perpProductId]) => {\n          return {\n            spotProductId,\n            perpProductId,\n          };\n        },\n      ),\n    };\n  }\n\n  /**\n   * Retrieves min deposit rates for all spot products from the engine\n   */\n  async getMinDepositRates(): Promise<GetEngineMinDepositRatesResponse> {\n    const baseResponse = await this.query('min_deposit_rates', {});\n\n    return {\n      minDepositRates: mapValues(baseResponse.min_deposit_rates, (m) => {\n        return {\n          productId: m.product_id,\n          minDepositRate: removeDecimals(m.min_deposit_rate_x18),\n        };\n      }),\n    };\n  }\n\n  /**\n   * Retrieves an order from the offchain engine\n   *\n   * @param params\n   */\n  async getOrder(\n    params: GetEngineOrderParams,\n  ): Promise<GetEngineOrderResponse> {\n    const baseResponse = await this.query('order', {\n      digest: params.digest,\n      product_id: params.productId,\n    });\n\n    return mapEngineServerOrder(baseResponse);\n  }\n\n  /**\n   * Signs and validates with the engine that the order is valid to be submitted (i.e. does not violate health reqs)\n   *\n   * @param params\n   */\n  async validateOrderParams(\n    params: ValidateEngineOrderParams,\n  ): Promise<ValidateEngineOrderResponse> {\n    const signedOrder = {\n      order: params.order,\n      signature: await this.sign(\n        'place_order',\n        params.orderbookAddr,\n        params.chainId,\n        params.order,\n      ),\n    };\n    return this.validateSignedOrderParams({\n      signedOrder,\n      productId: params.productId,\n    });\n  }\n\n  /**\n   * Validates an existing signed order with the engine as a pre-check for health\n   *\n   * @param params\n   */\n  async validateSignedOrderParams(\n    params: ValidateSignedEngineOrderParams,\n  ): Promise<ValidateEngineOrderResponse> {\n    const baseResponse = await this.query('validate_order', {\n      product_id: params.productId,\n      order: encodeSignedOrder(params.signedOrder),\n    });\n\n    return {\n      productId: baseResponse.product_id,\n      valid: baseResponse.valid,\n    };\n  }\n\n  /**\n   * Get all subaccount orders from the engine, per product ID\n   * @param params\n   */\n  async getSubaccountOrders(\n    params: GetEngineSubaccountOrdersParams,\n  ): Promise<GetEngineSubaccountOrdersResponse> {\n    const baseResponse = await this.query('subaccount_orders', {\n      sender: subaccountToHex({\n        subaccountOwner: params.subaccountOwner,\n        subaccountName: params.subaccountName,\n      }),\n      product_id: params.productId,\n    });\n\n    return {\n      orders: baseResponse.orders.map(mapEngineServerOrder),\n      productId: params.productId,\n    };\n  }\n\n  /**\n   * Get all subaccount orders from the engine, for multiple products\n   * @param params\n   */\n  async getSubaccountMultiProductOrders(\n    params: GetEngineSubaccountProductOrdersParams,\n  ): Promise<GetEngineSubaccountProductOrdersResponse> {\n    const baseResponse = await this.query('orders', {\n      sender: subaccountToHex({\n        subaccountOwner: params.subaccountOwner,\n        subaccountName: params.subaccountName,\n      }),\n      product_ids: params.productIds,\n    });\n\n    return {\n      productOrders: baseResponse.product_orders.map((orders) => {\n        return {\n          orders: orders.orders.map(mapEngineServerOrder),\n          productId: orders.product_id,\n        };\n      }),\n    };\n  }\n\n  /**\n   * Gets maker & taker fee rates for order fees\n   * @param params\n   */\n  async getSubaccountFeeRates(\n    params: GetEngineSubaccountFeeRatesParams,\n  ): Promise<GetEngineSubaccountFeeRatesResponse> {\n    const baseResponse = await this.query('fee_rates', {\n      sender: subaccountToHex({\n        subaccountOwner: params.subaccountOwner,\n        subaccountName: params.subaccountName,\n      }),\n    });\n\n    return {\n      healthCheckSequencerFee: toBigDecimal(\n        baseResponse.health_check_sequencer_fee,\n      ),\n      liquidationSequencerFee: toBigDecimal(\n        baseResponse.liquidation_sequencer_fee,\n      ),\n      takerSequencerFee: toBigDecimal(baseResponse.taker_sequencer_fee),\n      orders: baseResponse.taker_fee_rates_x18.reduce(\n        (acc, takerRateX18, currIndex) => {\n          acc[currIndex] = {\n            taker: removeDecimals(takerRateX18),\n            maker: removeDecimals(baseResponse.maker_fee_rates_x18[currIndex]),\n          };\n          return acc;\n        },\n        {} as Record<number, SubaccountOrderFeeRates>,\n      ),\n      withdrawal: baseResponse.withdraw_sequencer_fees.reduce(\n        (acc, productFee, currIndex) => {\n          acc[currIndex] = toBigDecimal(productFee);\n          return acc;\n        },\n        {} as Record<number, BigDecimal>,\n      ),\n    };\n  }\n\n  /**\n   * Gets \"price ticks\" for a given market, useful for constructing liquidity levels at each price\n   * @param params\n   */\n  async getMarketLiquidity(\n    params: GetEngineMarketLiquidityParams,\n  ): Promise<GetEngineMarketLiquidityResponse> {\n    const baseResponse = await this.query('market_liquidity', {\n      product_id: params.productId,\n      depth: params.depth,\n    });\n    return {\n      asks: baseResponse.asks.map(mapEngineServerTickLiquidity),\n      bids: baseResponse.bids.map(mapEngineServerTickLiquidity),\n    };\n  }\n\n  /**\n   * Retrieves the latest price for a given market\n   * @param params\n   */\n  async getMarketPrice(\n    params: GetEngineMarketPriceParams,\n  ): Promise<GetEngineMarketPriceResponse> {\n    const baseResponse = await this.query('market_price', {\n      product_id: params.productId,\n    });\n    return mapEngineMarketPrice(baseResponse);\n  }\n\n  /**\n   * Retrieves the latest prices for provided markets\n   * @param params\n   */\n  async getMarketPrices(\n    params: GetEngineMarketPricesParams,\n  ): Promise<GetEngineMarketPricesResponse> {\n    const baseResponse = await this.query('market_prices', {\n      product_ids: params.productIds,\n    });\n    return {\n      marketPrices: baseResponse.market_prices.map(mapEngineMarketPrice),\n    };\n  }\n\n  /**\n   * Retrieves the estimated max order size for a product\n   * @param params\n   */\n  async getMaxOrderSize(\n    params: GetEngineMaxOrderSizeParams,\n  ): Promise<GetEngineMaxOrderSizeResponse> {\n    const baseResponse = await this.query('max_order_size', {\n      direction: params.side,\n      price_x18: toIntegerString(addDecimals(params.price)),\n      product_id: params.productId,\n      sender: subaccountToHex({\n        subaccountOwner: params.subaccountOwner,\n        subaccountName: params.subaccountName,\n      }),\n      spot_leverage:\n        params.spotLeverage != null ? String(params.spotLeverage) : null,\n      reduce_only: params.reduceOnly != null ? String(params.reduceOnly) : null,\n    });\n\n    return toBigDecimal(baseResponse.max_order_size);\n  }\n\n  /**\n   * Retrieves the estimated max withdrawal size for a product\n   * @param params\n   */\n  async getMaxWithdrawable(\n    params: GetEngineMaxWithdrawableParams,\n  ): Promise<GetEngineMaxWithdrawableResponse> {\n    const baseResponse = await this.query('max_withdrawable', {\n      product_id: params.productId,\n      sender: subaccountToHex({\n        subaccountOwner: params.subaccountOwner,\n        subaccountName: params.subaccountName,\n      }),\n      spot_leverage:\n        params.spotLeverage != null ? String(params.spotLeverage) : null,\n    });\n\n    return toBigDecimal(baseResponse.max_withdrawable);\n  }\n\n  /**\n   * Retrieves the estimated max base & quote amounts for minting LPs\n   *\n   * @param params\n   */\n  async getMaxMintLpAmount(\n    params: GetEngineMaxMintLpAmountParams,\n  ): Promise<GetEngineMaxMintLpAmountResponse> {\n    const baseResponse = await this.query('max_lp_mintable', {\n      product_id: params.productId,\n      sender: subaccountToHex({\n        subaccountOwner: params.subaccountOwner,\n        subaccountName: params.subaccountName,\n      }),\n      spot_leverage:\n        params.spotLeverage != null ? String(params.spotLeverage) : null,\n    });\n\n    return {\n      maxBaseAmount: toBigDecimal(baseResponse.max_base_amount),\n      maxQuoteAmount: toBigDecimal(baseResponse.max_quote_amount),\n    };\n  }\n\n  /**\n   * Retrieves the estimated max quote amount for minting VLP.\n   *\n   * @param params\n   */\n  async getMaxMintVlpAmount(\n    params: GetEngineMaxMintVlpAmountParams,\n  ): Promise<GetEngineMaxMintVlpAmountResponse> {\n    const baseResponse = await this.query('max_vlp_mintable', {\n      sender: subaccountToHex({\n        subaccountOwner: params.subaccountOwner,\n        subaccountName: params.subaccountName,\n      }),\n      spot_leverage:\n        params.spotLeverage != null ? String(params.spotLeverage) : null,\n    });\n\n    return toBigDecimal(baseResponse.max_quote_amount);\n  }\n\n  /**\n   * Gets the currently linked signer for the subaccount\n   * @param params\n   * @returns\n   */\n  public async getLinkedSigner(\n    params: GetEngineLinkedSignerParams,\n  ): Promise<GetEngineLinkedSignerResponse> {\n    const baseResponse = await this.query('linked_signer', {\n      subaccount: subaccountToHex({\n        subaccountOwner: params.subaccountOwner,\n        subaccountName: params.subaccountName,\n      }),\n    });\n\n    return {\n      signer: baseResponse.linked_signer,\n    };\n  }\n\n  /**\n   * Gets the insurance funds in USDC.\n   * @returns\n   */\n  public async getInsurance(): Promise<GetEngineInsuranceResponse> {\n    const baseResponse = await this.query('insurance', {});\n\n    return toBigDecimal(baseResponse.insurance);\n  }\n\n  /**\n   * Gets the orderbook contract address for a given product\n   * @param productId\n   * @returns\n   */\n  public async getOrderbookAddress(productId: number): Promise<string> {\n    const contracts = await this.getContracts();\n    return contracts.orderbookAddrs[productId];\n  }\n}\n"],"mappings":"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","names":[]}