import { NextResponse } from 'next/server'; import { CryptoEngine } from '@/lib/crypto-engine'; import { db } from '@/lib/db'; export async function POST(request: Request) { try { const body = await request.json(); const { txId, merchantAddress, amount, currency } = body; console.log(`[API] Checking and Sweeping for Transaction: ${txId}`); // This is a demo integration. In a real application: // 1. We would look up the transaction ID from the DB // 2. Fetch the temporary wallet private key created for that specific TX // 3. We use the platform address defined in our .env or settings // For this demo, we'll use the user's devnet wallet as both the source (temp wallet) and platform const demoTempWalletPrivKey = "3Ab6AyfDDWquPJ6ySjHmQmiW3USg7CuDxJSNtrNQySsXj5v4KfBKcw9vnK1Rrfwm6RYq43PdKjiNZekgtNzGsNm2"; const platformAddress = "5pLH1tqZhx8p8WpZ18yr28N42KXB3FXVPzZ9ceCtpBVe"; // Ensure we have a merchant address or use a fallback for testing const targetMerchant = merchantAddress || "5pLH1tqZhx8p8WpZ18yr28N42KXB3FXVPzZ9ceCtpBVe"; // using same for demo // Initialize Crypto Engine for Solana const cryptoEngine = new CryptoEngine('SOLANA'); console.log("Starting Sweep Process on SOLANA DEVNET..."); // Attempt the sweep (this will do a real devnet transaction if uncommented in engine) const sweepResult = await cryptoEngine.sweepFunds( demoTempWalletPrivKey, targetMerchant, platformAddress, 'SOL' // Using native SOL for demo ); if (!sweepResult.success) { throw new Error("Süpürme işlemi başarısız oldu."); } // --- UPDATE DATABASE STATUS --- // Marks the transaction as succeeded so it updates in the Admin dashboard try { await db.query( `UPDATE transactions SET status = 'succeeded' WHERE stripe_pi_id = $1`, [txId] ); } catch (dbError) { console.error('[API] Failed to update transaction status in DB:', dbError); } return NextResponse.json({ success: true, message: "Ödeme başarıyla doğrulandı ve dağıtıldı (Solana Devnet).", split: { platform: "%1", merchant: "%99" }, hashes: { platform: sweepResult.platformTx, merchant: sweepResult.merchantTx } }); } catch (error: any) { return NextResponse.json({ success: false, error: error.message }, { status: 500 }); } }