Bot & Automation

Market AI

/root/hermes-projects/Market AI

packages/core/src/types.ts text
export type ChainId = "solana" | "ethereum" | "base" | "bsc" | "arbitrum" | "polygon" | string;

export type TradingMode = "scalp" | "momentum" | "snipe" | "conservative";

export type SignalAction = "BUY" | "SELL" | "WAIT";

export type TrendDirection = "Bullish" | "Bearish" | "Sideways" | "Mixed";

export type RiskLevel = "Medium" | "High" | "Extreme";

export type CandidateVerdict = "PRIORITY_WATCH" | "RESEARCH" | "SKIP";

export type TradeSide = "BUY" | "SELL";

export type TradeExecutionMode = "paper" | "live";

export interface MemeTokenProfile {
  chainId: ChainId;
  tokenAddress: string;
  symbol: string;
  name: string;
  pairAddress?: string;
  dexId?: string;
  url?: string;
}

export interface MemePairMetrics {
  priceUsd: number;
  liquidityUsd: number;
  fdv?: number;
  marketCap?: number;
  volumeH24: number;
  buysH24: number;
  sellsH24: number;
  priceChangeM5?: number;
  priceChangeH1?: number;
  priceChangeH6?: number;
  priceChangeH24?: number;
  pairCreatedAt?: string;
}

export interface MemeCoinCandidate {
  id: string;
  token: MemeTokenProfile;
  metrics: MemePairMetrics;
  score: number;
  verdict: CandidateVerdict;
  riskLevel: RiskLevel;
  labels: string[];
  warnings: string[];
  source: string;
  scannedAt: string;
}

export interface ScannerCriteria {
  chainId?: ChainId;
  limit?: number;
  minLiquidityUsd?: number;
  minVolumeH24?: number;
  maxAgeHours?: number;
  minScore?: number;
}

export interface MemeSignalRequest {
  query: string;
  mode: TradingMode;
  chainId?: ChainId;
}

export interface MemeSignalAnalysis {
  id: string;
  candidate: MemeCoinCandidate;
  mode: TradingMode;
  action: SignalAction;
  trend: TrendDirection;
  confidence: number;
  entryPlan: string;
  stopLossPlan: string;
  takeProfitPlan: string;
  riskLevel: RiskLevel;
  maxPositionSize: string;
  invalidation: string;
  reasons: string[];
  warnings: string[];
  disclaimer: string;
  generatedAt: string;
}

export interface TradeRequest {
  userId?: string;
  chainId: ChainId;
  tokenAddress: string;
  side: TradeSide;
  amount: number;
  slippageBps: number;
  mode: TradeExecutionMode;
}

export interface TradeQuote {
  id: string;
  request: TradeRequest;
  inputSymbol: string;
  outputSymbol: string;
  estimatedOutput: string;
  priceImpactPct?: number;
  routeSummary: string;
  expiresAt: string;
  warnings: string[];
}

export interface TradeExecutionResult {
  id: string;
  mode: TradeExecutionMode;
  status: "prepared" | "submitted" | "filled" | "rejected" | "failed";
  txHash?: string;
  quote?: TradeQuote;
  message: string;
  executedAt: string;
}

export interface WatchlistItem {
  userId: string;
  chainId: ChainId;
  tokenAddress: string;
  symbol?: string;
  createdAt: string;
}

export interface AlertRule {
  userId: string;
  chainId: ChainId;
  tokenAddress: string;
  condition: "price_above" | "price_below" | "volume_spike" | "score_above" | "liquidity_below";
  target?: number;
  enabled: boolean;
  createdAt: string;
}

export interface ProviderStatus {
  id: string;
  displayName: string;
  status: "healthy" | "degraded" | "not_configured";
  coverage: string[];
  rateLimit: string;
  lastSyncedAt: string;
}