@agentek/tools
Version:
Blockchain tools for AI agents
82 lines • 3.04 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.checkMaliciousWebsite = exports.checkMaliciousAddress = void 0;
const client_js_1 = require("../client.js");
const zod_1 = require("zod");
const supportedChains = []; // essentially cross chain
function normalizeUrl(url) {
try {
const urlObj = new URL(url.toLowerCase());
return urlObj.hostname.replace(/^www\./, "");
}
catch {
// If URL parsing fails, try basic string manipulation
const normalized = url
.toLowerCase()
.replace(/^https?:\/\//, "")
.replace(/^www\./, "")
.split("/")[0];
return normalized || "";
}
}
// Cache configuration
let addressBlacklist = null;
let domainBlacklist = null;
let lastAddressFetch = 0;
let lastDomainFetch = 0;
const CACHE_DURATION = 1000 * 60 * 60 * 24; // 24 hours to match daily updates
async function getAddressBlacklist() {
const now = Date.now();
if (!addressBlacklist || now - lastAddressFetch > CACHE_DURATION) {
const response = await fetch("https://raw.githubusercontent.com/scamsniffer/scam-database/refs/heads/main/blacklist/address.json");
addressBlacklist = await response.json();
lastAddressFetch = now;
}
return addressBlacklist;
}
async function getDomainBlacklist() {
const now = Date.now();
if (!domainBlacklist || now - lastDomainFetch > CACHE_DURATION) {
const response = await fetch("https://raw.githubusercontent.com/scamsniffer/scam-database/refs/heads/main/blacklist/domains.json");
domainBlacklist = await response.json();
lastDomainFetch = now;
}
return domainBlacklist;
}
exports.checkMaliciousAddress = (0, client_js_1.createTool)({
name: "checkMaliciousAddress",
description: "Check if an Ethereum address has been associated with malicious activity",
supportedChains,
parameters: zod_1.z.object({
address: zod_1.z.string(),
}),
execute: async (_client, args) => {
const blacklist = await getAddressBlacklist();
if (!blacklist) {
throw new Error("Failed to fetch address blacklist");
}
return {
address: args.address,
isMalicious: blacklist.includes(args.address.toLowerCase()),
};
},
});
exports.checkMaliciousWebsite = (0, client_js_1.createTool)({
name: "checkMaliciousWebsite",
description: "Check if a website has been associated with crypto scams or malicious activity",
parameters: zod_1.z.object({
website: zod_1.z.string(),
}),
execute: async (_client, args) => {
const blacklist = await getDomainBlacklist();
if (!blacklist) {
throw new Error("Failed to fetch domain blacklist");
}
const formattedWebsite = normalizeUrl(args.website);
return {
website: args.website,
isMalicious: blacklist.includes(formattedWebsite),
};
},
});
//# sourceMappingURL=tools.js.map