@bitte-ai/agent-sdk
Version:
Agent SDK for Bitte Protocol
57 lines (56 loc) • 1.78 kB
JavaScript
import { getAddress } from "viem";
export function validateInput(params, validatorMapping) {
const fields = createFields(validatorMapping);
return Object.fromEntries(Object.entries(fields).map(([key, value]) => {
const { paramName, validator } = value;
return [key, validator(params.get(paramName), paramName)];
}));
}
export function addressField(param, name) {
return parseField(param, name, getAddress, "Invalid Address field");
}
export function addressOrSymbolField(param, name) {
return parseField(param, name, (value) => {
try {
return getAddress(value);
}
catch {
return value;
}
}, "Invalid Address or Symbol field");
}
export function numberField(param, name) {
const value = parseField(param, name, parseInt, "Invalid Float field");
if (isNaN(value)) {
throw new Error(`Invalid Integer field '${name}': Not a number`);
}
return value;
}
export function floatField(param, name) {
const value = parseField(param, name, parseFloat, "Invalid Float parameter");
if (isNaN(value)) {
throw new Error(`Invalid Float parameter '${name}': Not a number`);
}
return value;
}
function createFields(validatorMapping) {
return Object.fromEntries(Object.keys(validatorMapping).map((key) => [
key,
{ paramName: key, validator: validatorMapping[key] },
]));
}
function exists(param, name) {
if (!param) {
throw new Error(`Missing required field: '${name}'`);
}
return param;
}
function parseField(param, name, parser, errorMessage) {
const value = exists(param, name);
try {
return parser(value);
}
catch {
throw new Error(`${errorMessage} '${name}': ${value}`);
}
}