Bot & Automation

Market AI

/root/hermes-projects/Market AI

packages/provider-adapters/src/mock-market-data.ts text
import { buildMockCandidate, filterCandidates, scoreMemeCandidate, type MemeCoinCandidate, type ScannerCriteria } from "@market-ai/core";
import type { MemeMarketDataAdapter } from "./provider-types.js";

const mockCandidates: MemeCoinCandidate[] = [
  buildMockCandidate(),
  scoreMemeCandidate(
    buildMockCandidate({
      token: {
        chainId: "solana",
        tokenAddress: "EKpQGSJtjMFqKZ9KQanSqYXRcF8fBopzL9FZAKK8Wwc",
        symbol: "WIF",
        name: "dogwifhat",
        pairAddress: "mock-wif-sol",
        dexId: "mock",
        url: "https://dexscreener.com/solana/wif",
      },
      metrics: {
        priceUsd: 2.1,
        liquidityUsd: 9200000,
        fdv: 2100000000,
        marketCap: 2100000000,
        volumeH24: 120000000,
        buysH24: 45100,
        sellsH24: 42800,
        priceChangeM5: -0.2,
        priceChangeH1: 2.6,
        priceChangeH6: 7.8,
        priceChangeH24: 14.3,
        pairCreatedAt: new Date(Date.now() - 1000 * 60 * 60 * 24 * 200).toISOString(),
      },
    }),
  ),
];

export const mockMemeMarketDataAdapter: MemeMarketDataAdapter = {
  id: "mock-meme-data",
  displayName: "Mock Meme Coin Data",
  async scanMemeCoins(criteria?: ScannerCriteria): Promise<MemeCoinCandidate[]> {
    return filterCandidates(mockCandidates, criteria);
  },
  async searchMemeCoins(query: string, criteria?: ScannerCriteria): Promise<MemeCoinCandidate[]> {
    const normalized = query.toLowerCase();
    const matched = mockCandidates.filter(
      (candidate) =>
        candidate.token.symbol.toLowerCase().includes(normalized) ||
        candidate.token.name.toLowerCase().includes(normalized) ||
        candidate.token.tokenAddress.toLowerCase() === normalized,
    );

    return filterCandidates(matched.length ? matched : mockCandidates, criteria);
  },
  async getMemeCandidate(query: string, chainId?: string): Promise<MemeCoinCandidate> {
    const candidates = await this.searchMemeCoins(query, { chainId: chainId ?? "solana", limit: 1, minScore: 0, minLiquidityUsd: 0, minVolumeH24: 0 });
    return candidates[0] ?? buildMockCandidate();
  },
};