| """Deep Intelligence Router β 12 Unaccounted Features API |
| |
| Endpoints for: |
| 1. Deployer Reputation Score |
| 2. Pre-flight Transaction Simulator |
| 3. Liquidity Lock Authenticity |
| 4. Volume Authenticity Engine |
| 5. Slow Rug Detector |
| 6. Funding Source Tracer |
| 7. Ownership Theater Detector |
| 8. Exit Liquidity Calculator |
| 9. Token Lifespan Predictor |
| 10. Post-Purchase Monitor |
| 11. Cross-Chain Identity Resolution |
| 12. Social-Onchain Correlation |
| + Composite full report |
| """ |
|
|
| import logging |
|
|
| from fastapi import APIRouter, HTTPException, Query |
|
|
| from app.services.deep_intelligence import ( |
| cross_chain_identity, |
| deployer_reputation, |
| exit_liquidity_calculator, |
| full_deep_intel, |
| funding_source_tracer, |
| liquidity_lock_authenticity, |
| ownership_theater_detector, |
| post_purchase_monitor, |
| preflight_simulate, |
| slow_rug_detector, |
| social_onchain_correlation, |
| token_lifespan_predictor, |
| volume_authenticity, |
| ) |
|
|
| logger = logging.getLogger("deep_intel_router") |
|
|
| router = APIRouter(prefix="/api/v1/deep-intel", tags=["deep-intelligence"]) |
|
|
| SUPPORTED_CHAINS = ["sol", "eth", "bsc", "base", "arb", "polygon", "avax"] |
|
|
|
|
| |
|
|
|
|
| @router.get("/health") |
| async def health(): |
| return { |
| "status": "healthy", |
| "service": "deep-intelligence", |
| "features": [ |
| "deployer_reputation", |
| "preflight_simulation", |
| "liquidity_lock_authenticity", |
| "volume_authenticity", |
| "slow_rug_detector", |
| "funding_source_tracer", |
| "ownership_theater", |
| "exit_liquidity", |
| "lifespan_predictor", |
| "post_purchase_monitor", |
| "cross_chain_identity", |
| "social_onchain_correlation", |
| "full_report", |
| ], |
| } |
|
|
|
|
| |
|
|
|
|
| @router.get("/deployer/{address}") |
| async def api_deployer_reputation( |
| address: str, |
| chain: str = Query("sol", enum=SUPPORTED_CHAINS), |
| ): |
| """Track EVERY token a deployer wallet has created across ALL chains.""" |
| try: |
| result = await deployer_reputation(address, chain) |
| return result |
| except Exception as e: |
| logger.error(f"Deployer reputation error: {e}") |
| raise HTTPException(status_code=500, detail=str(e)) |
|
|
|
|
| |
|
|
|
|
| @router.get("/preflight/{token_address}") |
| async def api_preflight_simulate( |
| token_address: str, |
| wallet: str = Query("0x0000000000000000000000000000000000000000"), |
| amount_usd: float = Query(100, ge=1, le=1000000), |
| chain: str = Query("sol", enum=SUPPORTED_CHAINS), |
| ): |
| """Simulate buy AND sell to show real costs, slippage, taxes, net P&L.""" |
| try: |
| result = await preflight_simulate(token_address, wallet, amount_usd, chain) |
| return result |
| except Exception as e: |
| logger.error(f"Preflight simulation error: {e}") |
| raise HTTPException(status_code=500, detail=str(e)) |
|
|
|
|
| |
|
|
|
|
| @router.get("/liquidity-lock/{token_address}") |
| async def api_liquidity_lock( |
| token_address: str, |
| chain: str = Query("sol", enum=SUPPORTED_CHAINS), |
| ): |
| """Analyze liquidity lock authenticity β not just 'is it locked?' but meaningful analysis.""" |
| try: |
| result = await liquidity_lock_authenticity(token_address, chain) |
| return result |
| except Exception as e: |
| logger.error(f"Liquidity lock error: {e}") |
| raise HTTPException(status_code=500, detail=str(e)) |
|
|
|
|
| |
|
|
|
|
| @router.get("/volume-authenticity/{token_address}") |
| async def api_volume_authenticity( |
| token_address: str, |
| chain: str = Query("sol", enum=SUPPORTED_CHAINS), |
| ): |
| """Detect wash trading, fake volume, bot vs organic trading.""" |
| try: |
| result = await volume_authenticity(token_address, chain) |
| return result |
| except Exception as e: |
| logger.error(f"Volume authenticity error: {e}") |
| raise HTTPException(status_code=500, detail=str(e)) |
|
|
|
|
| |
|
|
|
|
| @router.get("/slow-rug/{token_address}") |
| async def api_slow_rug_detector( |
| token_address: str, |
| chain: str = Query("sol", enum=SUPPORTED_CHAINS), |
| ): |
| """Detect gradual LP removal, fee increases, slow ownership transfers.""" |
| try: |
| result = await slow_rug_detector(token_address, chain) |
| return result |
| except Exception as e: |
| logger.error(f"Slow rug detector error: {e}") |
| raise HTTPException(status_code=500, detail=str(e)) |
|
|
|
|
| |
|
|
|
|
| @router.get("/funding-source/{address}") |
| async def api_funding_source( |
| address: str, |
| chain: str = Query("sol", enum=SUPPORTED_CHAINS), |
| ): |
| """Trace where wallets got their initial ETH/SOL. Detect CEX, mixers, fresh wallets.""" |
| try: |
| result = await funding_source_tracer(address, chain) |
| return result |
| except Exception as e: |
| logger.error(f"Funding source error: {e}") |
| raise HTTPException(status_code=500, detail=str(e)) |
|
|
|
|
| |
|
|
|
|
| @router.get("/ownership-theater/{token_address}") |
| async def api_ownership_theater( |
| token_address: str, |
| chain: str = Query("sol", enum=SUPPORTED_CHAINS), |
| ): |
| """Detect fake renunciation: hidden admin roles, upgradeable proxies, remaining privileges.""" |
| try: |
| result = await ownership_theater_detector(token_address, chain) |
| return result |
| except Exception as e: |
| logger.error(f"Ownership theater error: {e}") |
| raise HTTPException(status_code=500, detail=str(e)) |
|
|
|
|
| |
|
|
|
|
| @router.get("/exit-liquidity/{token_address}") |
| async def api_exit_liquidity( |
| token_address: str, |
| position_usd: float = Query(1000, ge=1, le=10000000), |
| chain: str = Query("sol", enum=SUPPORTED_CHAINS), |
| ): |
| """Can you actually sell? Depth analysis, cascade simulation, recovery rate.""" |
| try: |
| result = await exit_liquidity_calculator(token_address, position_usd, chain) |
| return result |
| except Exception as e: |
| logger.error(f"Exit liquidity error: {e}") |
| raise HTTPException(status_code=500, detail=str(e)) |
|
|
|
|
| |
|
|
|
|
| @router.get("/lifespan/{token_address}") |
| async def api_lifespan_predictor( |
| token_address: str, |
| chain: str = Query("sol", enum=SUPPORTED_CHAINS), |
| ): |
| """AI-driven survival analysis. Predict 7d/30d/90d survival probability.""" |
| try: |
| result = await token_lifespan_predictor(token_address, chain) |
| return result |
| except Exception as e: |
| logger.error(f"Lifespan predictor error: {e}") |
| raise HTTPException(status_code=500, detail=str(e)) |
|
|
|
|
| |
|
|
|
|
| @router.get("/post-purchase/{token_address}") |
| async def api_post_purchase_monitor( |
| token_address: str, |
| chain: str = Query("sol", enum=SUPPORTED_CHAINS), |
| ): |
| """Live risk monitoring β detect contract changes, fee increases, liquidity drops.""" |
| try: |
| result = await post_purchase_monitor(token_address, chain) |
| return result |
| except Exception as e: |
| logger.error(f"Post purchase monitor error: {e}") |
| raise HTTPException(status_code=500, detail=str(e)) |
|
|
|
|
| |
|
|
|
|
| @router.get("/cross-chain/{address}") |
| async def api_cross_chain_identity( |
| address: str, |
| chain: str = Query("sol", enum=SUPPORTED_CHAINS), |
| ): |
| """Same entity, multiple chains. Detect deployer patterns across chains.""" |
| try: |
| result = await cross_chain_identity(address, chain) |
| return result |
| except Exception as e: |
| logger.error(f"Cross-chain identity error: {e}") |
| raise HTTPException(status_code=500, detail=str(e)) |
|
|
|
|
| |
|
|
|
|
| @router.get("/social-correlation/{token_address}") |
| async def api_social_onchain_correlation( |
| token_address: str, |
| chain: str = Query("sol", enum=SUPPORTED_CHAINS), |
| ): |
| """Map hype cycle: wallet activity vs social mentions. Coordinated pump detection.""" |
| try: |
| result = await social_onchain_correlation(token_address, chain) |
| return result |
| except Exception as e: |
| logger.error(f"Social correlation error: {e}") |
| raise HTTPException(status_code=500, detail=str(e)) |
|
|
|
|
| |
|
|
|
|
| @router.get("/full-report/{token_address}") |
| async def api_full_report( |
| token_address: str, |
| chain: str = Query("sol", enum=SUPPORTED_CHAINS), |
| wallet: str | None = Query(None), |
| ): |
| """Run ALL 12 intelligence modules and produce a composite deep intel report.""" |
| try: |
| result = await full_deep_intel(token_address, chain, wallet) |
| return result |
| except Exception as e: |
| logger.error(f"Full deep intel error: {e}") |
| raise HTTPException(status_code=500, detail=str(e)) |
|
|
|
|
| |
|
|
|
|
| @router.post("/batch-report") |
| async def api_batch_report( |
| tokens: list[dict], |
| chain: str = Query("sol", enum=SUPPORTED_CHAINS), |
| ): |
| """Run deep intel on multiple tokens. Body: [{"address": "0x..."}, ...]""" |
| from app.services.deep_intelligence import full_deep_intel |
|
|
| results = [] |
| for token in tokens[:10]: |
| addr = token.get("address", "") |
| if addr: |
| try: |
| report = await full_deep_intel(addr, chain) |
| results.append(report) |
| except Exception as e: |
| results.append({"address": addr, "error": str(e)}) |
| return {"results": results, "count": len(results)} |
|
|