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();
},
};