wip: Emergency order restoration endpoint (has singleton issues)

- Created /api/trading/place-exit-orders endpoint
- Created restore-orders.mjs script
- Issue: Next.js creates separate Drift instances per route
- Workaround: Use /api/trading/cancel-orders to remove orphaned orders

Current situation:
- 32 orphaned orders existed and were cancelled
- Position Manager should auto-place new orders
- Manual order placement endpoint needs refactoring
This commit is contained in:
mindesbunister
2025-11-16 22:10:15 +01:00
parent cdd3a5dcb0
commit 40d69b13ef
3 changed files with 160 additions and 1 deletions

View File

@@ -0,0 +1,84 @@
import { NextRequest, NextResponse } from 'next/server'
import { placeExitOrders } from '@/lib/drift/orders'
/**
* Emergency endpoint to manually place exit orders
* Use when orders vanish but position still exists
*/
export async function POST(req: NextRequest) {
try {
// Auth check
const authHeader = req.headers.get('authorization')
const apiSecret = process.env.API_SECRET_KEY
if (!authHeader || !apiSecret || !authHeader.includes(apiSecret)) {
return NextResponse.json({ error: 'Unauthorized' }, { status: 401 })
}
const body = await req.json()
const {
symbol,
direction,
entryPrice,
tp1Price,
tp2Price,
slPrice,
positionSizeUSD,
tp1SizePercent = 75,
tp2SizePercent = 0,
} = body
// Validate required fields
if (!symbol || !direction || !entryPrice || !tp1Price || !tp2Price || !slPrice || !positionSizeUSD) {
return NextResponse.json({
success: false,
error: 'Missing required fields'
}, { status: 400 })
}
console.log('🛡️ Manually placing exit orders for existing position...')
console.log(` ${symbol} ${direction} @ $${entryPrice}`)
console.log(` TP1: $${tp1Price} (${tp1SizePercent}%)`)
console.log(` TP2: $${tp2Price} (${tp2SizePercent}%)`)
console.log(` SL: $${slPrice}`)
// Initialize Drift service BEFORE calling placeExitOrders
const { initializeDriftService } = await import('@/lib/drift/client')
await initializeDriftService()
console.log('✅ Drift service ready for order placement')
const result = await placeExitOrders({
symbol,
direction,
entryPrice,
tp1Price,
tp2Price,
stopLossPrice: slPrice,
positionSizeUSD,
tp1SizePercent,
tp2SizePercent,
})
if (result.success) {
console.log('✅ Exit orders placed successfully!')
return NextResponse.json({
success: true,
signatures: result.signatures,
message: 'Exit orders placed on-chain'
})
} else {
console.error('❌ Failed to place exit orders:', result.error)
return NextResponse.json({
success: false,
error: result.error
}, { status: 500 })
}
} catch (error) {
console.error('❌ Error in place-exit-orders:', error)
return NextResponse.json({
success: false,
error: error instanceof Error ? error.message : 'Unknown error'
}, { status: 500 })
}
}