import { z } from "zod";
import axios, { AxiosResponse } from "axios";
import { baseUri, chainName } from "../../constants";
export default function (server: any) {
server.tool(
"getNFTtokensByAddress",
"Lists tokens for an NFT contract",
{
chainName: z.literal(chainName),
address: z.string().describe("Address to fetch NFT tokens for"),
authToken: z.string(),
},
{
title: "Get NFT Tokens",
readOnlyHint: true,
description: "Fetch NFT tokens owned by a specific address.",
},
async (args:any) => {
const { chainName, address, authToken } = args;
try {
const response: AxiosResponse<any> = await axios.get(
`${baseUri}/${chainName}/v1/nft/collections/${address}/tokens`,
{
headers: {
Authorization: `Bearer ${authToken}`,
"Content-Type": "application/json",
Accept: "application/json",
},
}
);
return {
content: [
{
type: "text",
text: `NFT Tokens Data: ${JSON.stringify(response.data)}`,
},
],
};
} catch (error) {
return {
content: [
{
type: "text",
text: `Error fetching NFT tokens: ${error}`,
},
],
};
}
}
);
server.tool(
"getNFTtokensByIdForAddress",
"Gets token details for a specific token of an NFT contract.",
{
chainName: z.literal(chainName),
address: z.string().describe("Address to fetch NFT token details for"),
tokenId: z.string().describe("Token ID to fetch details for"),
authToken: z.string(),
},
{
title: "Get NFT Token Details",
readOnlyHint: true,
description:
"Fetch NFT token details for a specific token ID owned by a specific address.",
destructiveHint: false,
openWorldHint: true,
},
async (args:any) => {
const { chainName, address, tokenId, authToken } = args;
try {
const response: AxiosResponse<any> = await axios.get(
`${baseUri}/${chainName}/v1/nft/collections/${address}/tokens/${tokenId}`,
{
headers: {
Authorization: `Bearer ${authToken}`,
"Content-Type": "application/json",
Accept: "application/json",
},
}
);
return {
content: [
{
type: "text",
text: `NFT Token Details: ${JSON.stringify(response.data)}`,
},
],
};
} catch (error) {
return {
content: [
{
type: "text",
text: `Error fetching NFT token details: ${error}`,
},
],
};
}
}
);
}