import { z } from "zod";
import axios, { AxiosResponse } from "axios";
import { baseUri, chainName } from "../../constants";
export default function (server: any) {
server.tool(
"getTransactionLogs",
"Get logs from blocks",
{
chainName: z.literal(chainName),
authToken: z
.string()
.describe("Authorization token for accessing the Somnia API"),
},
{
title: "Get Transaction Logs",
readOnlyHint: true,
description: "Fetch logs from blocks.",
destructiveHint: false,
},
async (args:any) => {
const { chainName, authToken } = args;
try {
const response: AxiosResponse<any> = await axios.get(
`${baseUri}/${chainName}/v1/events/`,
{
headers: {
Authorization: `Bearer ${authToken}`,
"Content-Type": "application/json",
Accept: "application/json",
},
}
);
return {
content: [
{
type: "text",
text: `Transaction Logs Data: ${JSON.stringify(response.data)}`,
},
],
};
} catch (error) {
return {
content: [
{
type: "text",
text: `Error fetching transaction logs: ${error}`,
},
],
};
}
}
);
server.tool(
"getTransactionLogsForAddress",
"Get logs for transaction created by the provided address",
{
chainName: z.literal(chainName),
contractAddress: z.string().describe("Contract address to fetch logs for"),
authToken: z.string(),
},
{
title: "Get Transaction Logs For Address",
readOnlyHint: true,
description: "Fetch logs for transaction created by the provided address.",
},
async (args:any) => {
const { chainName, contractAddress, authToken } = args;
try {
const response: AxiosResponse<any> = await axios.get(
`${baseUri}/${chainName}/v1/events/address/${contractAddress}`,
{
headers: {
Authorization: `Bearer ${authToken}`,
"Content-Type": "application/json",
Accept: "application/json",
},
}
);
return {
content: [
{
type: "text",
text: `Transaction Logs Data: ${JSON.stringify(response.data)}`,
},
],
};
} catch (error) {
return {
content: [
{
type: "text",
text: `Error fetching transaction logs for address: ${error}`,
},
],
};
}
}
);
server.tool(
"getTopicTransactionLogs",
"Get logs for transactions matching the provided topic",
{
chainName: z.literal(chainName),
topicHash: z.string().describe("Topic hash to fetch logs for"),
authToken: z.string(),
},
{
title: "Get Topic Transaction Logs",
readOnlyHint: true,
description: "Fetch logs for transactions matching the provided topic.",
},
async (args:any) => {
const { chainName, topicHash, authToken } = args;
try {
const response: AxiosResponse<any> = await axios.get(
`${baseUri}/${chainName}/v1/events/topics/${topicHash}`,
{
headers: {
Authorization: `Bearer ${authToken}`,
"Content-Type": "application/json",
Accept: "application/json",
},
}
);
return {
content: [
{
type: "text",
text: `Topic Transaction Logs Data: ${JSON.stringify(
response.data
)}`,
},
],
};
} catch (error) {
return {
content: [
{
type: "text",
text: `Error fetching topic transaction logs: ${error}`,
},
],
};
}
}
);
}