openpondai/agents/news-bot
OpenTool app
typescript
import { normalizeHyperliquidBaseSymbol } from "opentool/adapters/hyperliquid";
import type { SimpleNewsBotConfig } from "./config";
function normalizeConfiguredSymbol(value?: string | null): string | null {
const trimmed = value?.trim();
if (!trimmed) return null;
if (trimmed.startsWith("@")) {
throw new Error(
"Use BASE-QUOTE or BASE/QUOTE for spot, bare BASE for perps, or dex:BASE for HIP-3. Do not use @index spot ids.",
);
}
if (trimmed.includes(":") || trimmed.includes("/") || trimmed.includes("-")) {
return trimmed;
}
return normalizeHyperliquidBaseSymbol(trimmed) ?? trimmed.toUpperCase();
}
export async function resolveExecutableMarketSymbol(
config: SimpleNewsBotConfig,
_fetchImplementation?: typeof fetch,
): Promise<string> {
const configuredMarketSymbol = normalizeConfiguredSymbol(config.marketSymbol);
if (configuredMarketSymbol) {
return configuredMarketSymbol;
}
const configuredExecutionSymbol = normalizeConfiguredSymbol(config.execution?.symbol);
if (configuredExecutionSymbol) {
return configuredExecutionSymbol;
}
const assetSymbol = normalizeConfiguredSymbol(config.asset);
if (!assetSymbol) {
throw new Error("Asset is required.");
}
return assetSymbol;
}