import { PublicKey } from "@solana/web3.js"; import { Tool } from "langchain/tools"; import { SolanaAgentKit } from "../../agent"; export class SolanaPerpCloseTradeTool extends Tool { name = "solana_close_perp_trade"; description = `This tool can be used to close perpetuals trade ( It uses Adrena Protocol ). Inputs ( input is a JSON string ): tradeMint: string, eg "J1toso1uCk3RLmjorhTtrVwY9HJ7X8V9yYac6Y7kGCPn", "DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263" etc. (optional) price?: number, eg 100 (optional) side: string, eg: "long" or "short"`; constructor(private solanaKit: SolanaAgentKit) { super(); } protected async _call(input: string): Promise { try { const parsedInput = JSON.parse(input); const tx = parsedInput.side === "long" ? await this.solanaKit.closePerpTradeLong({ price: parsedInput.price, tradeMint: new PublicKey(parsedInput.tradeMint), }) : await this.solanaKit.closePerpTradeShort({ price: parsedInput.price, tradeMint: new PublicKey(parsedInput.tradeMint), }); return JSON.stringify({ status: "success", message: "Perpetual trade closed successfully", transaction: tx, price: parsedInput.price, tradeMint: new PublicKey(parsedInput.tradeMint), side: parsedInput.side, }); } catch (error: any) { return JSON.stringify({ status: "error", message: error.message, code: error.code || "UNKNOWN_ERROR", }); } } }