| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- import { TickMath } from '@/lib/byreal-clmm-sdk/src/instructions/utils/tickMath'
- import { NextRequest, NextResponse } from 'next/server'
- export async function GET(request: NextRequest) {
- try {
- const searchParams = request.nextUrl.searchParams
- const address = searchParams.get('address')
- const response = await fetch(
- `https://api2.byreal.io/byreal/api/dex/v2/position/detail?address=${address}`,
- {
- method: 'GET',
- headers: {
- accept: 'application/json',
- },
- }
- )
- if (!response.ok) {
- return NextResponse.json(
- { retCode: response.status, retMsg: '外部 API 请求失败' },
- { status: response.status }
- )
- }
- const data = await response.json()
- const { pool, lowerTick, upperTick } = data.result?.data as {
- lowerTick: number
- upperTick: number
- pool: {
- mintA: { decimals: number; price: string }
- mintB: { decimals: number; price: string }
- baseMint: { decimals: number; price: string }
- displayReversed?: boolean
- }
- }
- const displayReversed = pool.displayReversed || false
- let priceLower = TickMath.getPriceFromTick({
- tick: lowerTick,
- decimalsA: pool.mintA.decimals,
- decimalsB: pool.mintB.decimals,
- // baseIn: !displayReversed,
- })
- let priceUpper = TickMath.getPriceFromTick({
- tick: upperTick,
- decimalsA: pool.mintA.decimals,
- decimalsB: pool.mintB.decimals,
- baseIn: !displayReversed,
- })
- // 如果 displayReversed 为 true,调换 priceLower 和 priceUpper
- if (displayReversed) {
- const temp = priceLower
- priceLower = priceUpper
- priceUpper = temp
- }
- const isInRange =
- Number(pool.baseMint.price) < priceUpper.toNumber() &&
- Number(pool.baseMint.price) > priceLower.toNumber()
- const newData = {
- ...data,
- result: {
- data: {
- ...data.result.data,
- priceLower: priceLower.toString(),
- priceUpper: priceUpper.toString(),
- isInRange,
- displayReversed,
- priceOutType: isInRange
- ? 'inRange'
- : Number(pool.baseMint.price) > priceUpper.toNumber()
- ? 'priceUp'
- : 'priceDown',
- },
- },
- }
- return NextResponse.json(newData)
- } catch (error) {
- console.error('API Route Error:', error)
- return NextResponse.json(
- { retCode: 500, retMsg: '服务器内部错误' },
- { status: 500 }
- )
- }
- }
|