Bot & Automation
Market AI
/root/hermes-projects/Market AI
packages/core/src/schemas.ts
text
import { z } from "zod";
export const tradingModeSchema = z.enum(["scalp", "momentum", "snipe", "conservative"]);
export const tradeSideSchema = z.enum(["BUY", "SELL"]);
export const tradeExecutionModeSchema = z.enum(["paper", "live"]);
export const scannerCriteriaSchema = z.object({
chainId: z.string().trim().min(2).max(32).default("solana"),
limit: z.coerce.number().int().min(1).max(25).default(10),
minLiquidityUsd: z.coerce.number().nonnegative().default(15000),
minVolumeH24: z.coerce.number().nonnegative().default(25000),
maxAgeHours: z.coerce.number().positive().max(3650).default(72),
minScore: z.coerce.number().int().min(0).max(100).default(55),
});
export const memeSignalRequestSchema = z.object({
query: z.string().trim().min(2).max(120),
chainId: z.string().trim().min(2).max(32).optional(),
mode: tradingModeSchema.default("momentum"),
});
export const tradeRequestSchema = z.object({
userId: z.string().trim().min(1).optional(),
chainId: z.string().trim().min(2).max(32).default("solana"),
tokenAddress: z.string().trim().min(20).max(80),
side: tradeSideSchema,
amount: z.coerce.number().positive().max(1000000),
slippageBps: z.coerce.number().int().min(10).max(5000).default(300),
mode: tradeExecutionModeSchema.default("paper"),
});
export const alertRuleSchema = z.object({
userId: z.string().trim().min(1),
chainId: z.string().trim().min(2).max(32).default("solana"),
tokenAddress: z.string().trim().min(20).max(80),
condition: z.enum(["price_above", "price_below", "volume_spike", "score_above", "liquidity_below"]),
target: z.number().positive().optional(),
});