import { z } from "zod";
import axios, { AxiosResponse } from "axios";
import { baseUri, chainName } from "../../constants";
export default function (server: any) {
server.tool(
"getTransactionsForAddress",
"Get transactions to and from the wallet address",
{
chainName: z.literal(chainName),
address: z.string().describe("Address to fetch transactions for"),
authToken: z.string(),
},
{
title: "Get Transactions",
readOnlyHint: true,
description: "Fetch transactions for a specific address.",
},
async (args:any) => {
const { chainName, address, authToken } = args;
try {
const response: AxiosResponse<any> = await axios.get(
`${baseUri}/${chainName}/v1/address/${address}/transactions`,
{
headers: {
Authorization: `Bearer ${authToken}`,
"Content-Type": "application/json",
Accept: "application/json",
},
}
);
return {
content: [
{
type: "text",
text: `Transactions Data: ${JSON.stringify(response.data)}`,
},
],
};
} catch (error) {
return {
content: [
{
type: "text",
text: `Error fetching transactions: ${error}`,
},
],
};
}
}
);
server.tool(
"getWalletTransactionSummary",
"Get a summary of transactions for a specific wallet address",
{
chainName: z.literal(chainName),
walletAddress: z
.string()
.describe("Address to fetch transaction summary for"),
authToken: z.string(),
},
{
title: "Get Wallet Transaction Summary",
readOnlyHint: true,
description:
"Fetch a summary of transactions for a specific wallet address.",
},
async (args:any) => {
const { chainName, walletAddress, authToken } = args;
try {
const response: AxiosResponse<any> = await axios.get(
`${baseUri}/${chainName}/v1/address/${walletAddress}/transactions/summary`,
{
headers: {
Authorization: `Bearer ${authToken}`,
"Content-Type": "application/json",
Accept: "application/json",
},
}
);
return {
content: [
{
type: "text",
text: `Wallet Transaction Summary: ${JSON.stringify(
response.data
)}`,
},
],
};
} catch (error) {
return {
content: [
{
type: "text",
text: `Error fetching wallet transaction summary: ${error}`,
},
],
};
}
}
);
server.tool(
"getBulkTransactions",
"This API provides bulk transaction data for a wallet address in a 15-minute time bucket interval",
{
chainName: z.literal(chainName),
walletAddress: z
.string()
.describe("Address to fetch bulk transaction data for"),
timeBucket: z.string().describe("Time bucket interval for transactions"),
authToken: z.string(),
},
{
title: "Get Bulk Transactions",
readOnlyHint: true,
description: "Fetch bulk transaction data for a specific wallet address.",
},
async (args:any) => {
const { chainName, walletAddress, timeBucket, authToken } = args;
try {
const response: AxiosResponse<any> = await axios.get(
`${baseUri}/${chainName}/v1/bulk/transactions/${walletAddress}/${timeBucket}`,
{
headers: {
Authorization: `Bearer ${authToken}`,
"Content-Type": "application/json",
Accept: "application/json",
},
}
);
return {
content: [
{
type: "text",
text: `Bulk Transactions Data: ${JSON.stringify(response.data)}`,
},
],
};
} catch (error) {
return {
content: [
{
type: "text",
text: `Error fetching bulk transactions: ${error}`,
},
],
};
}
}
);
server.tool(
"getEarliestTransaction",
"Get the earliest transaction for an address",
{
chainName: z.literal(chainName),
walletAddress: z
.string()
.describe("Address to fetch earliest transaction for"),
authToken: z.string(),
},
{
title: "Get Earliest Transaction",
readOnlyHint: true,
description:
"Fetch the earliest transaction for a specific wallet address.",
},
async (args:any) => {
const { chainName, walletAddress, authToken } = args;
try {
const response: AxiosResponse<any> = await axios.get(
`${baseUri}/${chainName}/v1/earliest/${walletAddress}/transactions`,
{
headers: {
Authorization: `Bearer ${authToken}`,
"Content-Type": "application/json",
Accept: "application/json",
},
}
);
return {
content: [
{
type: "text",
text: `Earliest Transaction Data: ${JSON.stringify(response.data)}`,
},
],
};
} catch (error) {
return {
content: [
{
type: "text",
text: `Error fetching earliest transaction: ${error}`,
},
],
};
}
}
);
server.tool(
"getRecentTransactions",
"Get recent transactions",
{
chainName: z.literal(chainName),
authToken: z.string(),
walletAddress: z
.string()
.describe("Address to fetch recent transactions for"),
},
{
title: "Get Recent Transactions",
readOnlyHint: true,
description: "Fetch recent transactions for a specific wallet address.",
},
async (args:any) => {
const { chainName, walletAddress, authToken } = args;
try {
const response: AxiosResponse<any> = await axios.get(
`${baseUri}/${chainName}/v1/recent/${walletAddress}/transactions`,
{
headers: {
Authorization: `Bearer ${authToken}`,
"Content-Type": "application/json",
Accept: "application/json",
},
}
);
return {
content: [
{
type: "text",
text: `Recent Transactions Data: ${JSON.stringify(response.data)}`,
},
],
};
} catch (error) {
return {
content: [
{
type: "text",
text: `Error fetching recent transactions: ${error}`,
},
],
};
}
}
);
server.tool(
"getOneTransaction",
"Get a single transaction by its hash",
{
chainName: z.literal(chainName),
authToken: z.string(),
txHash: z.string().describe("Transaction hash to fetch"),
},
{
title: "Get One Transaction",
readOnlyHint: true,
description: "Fetch a single transaction by its hash.",
},
async (args:any) => {
const { chainName, authToken, txHash } = args;
try {
const response: AxiosResponse<any> = await axios.get(
`${baseUri}/${chainName}/v1/transaction/${txHash}`,
{
headers: {
Authorization: `Bearer ${authToken}`,
"Content-Type": "application/json",
Accept: "application/json",
},
}
);
return {
content: [
{
type: "text",
text: `Transaction Data: ${JSON.stringify(response.data)}`,
},
],
};
} catch (error) {
return {
content: [
{
type: "text",
text: `Error fetching transaction: ${error}`,
},
],
};
}
}
);
server.tool(
"getLatestTransactions",
"Get latest transactions",
{
chainName: z.literal(chainName),
authToken: z.string(),
},
{
title: "Get Latest Transactions",
readOnlyHint: true,
description: "Fetch latest transactions.",
},
async (args:any) => {
const { chainName, authToken } = args;
try {
const response: AxiosResponse<any> = await axios.get(
`${baseUri}/${chainName}/v1/transactions`,
{
headers: {
Authorization: `Bearer ${authToken}`,
"Content-Type": "application/json",
Accept: "application/json",
},
}
);
return {
content: [
{
type: "text",
text: `Latest Transactions Data: ${JSON.stringify(response.data)}`,
},
],
};
} catch (error) {
return {
content: [
{
type: "text",
text: `Error fetching latest transactions: ${error}`,
},
],
};
}
}
);
}