From fabcf636c46a3a93f83192ce7f3a95fe0adc9e1b Mon Sep 17 00:00:00 2001 From: thrishank Date: Sun, 5 Jan 2025 13:04:32 +0530 Subject: [PATCH] add action file --- src/actions/closeEmptyTokenAccounts.ts | 71 ++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 src/actions/closeEmptyTokenAccounts.ts diff --git a/src/actions/closeEmptyTokenAccounts.ts b/src/actions/closeEmptyTokenAccounts.ts new file mode 100644 index 0000000..867c25e --- /dev/null +++ b/src/actions/closeEmptyTokenAccounts.ts @@ -0,0 +1,71 @@ +import { Action } from "../types/action"; +import { SolanaAgentKit } from "../agent"; +import { z } from "zod"; +import { closeEmptyTokenAccounts } from "../tools"; + +const closeEmptyTokenAccountsAction: Action = { + name: "CLOSE_EMPTY_TOKEN_ACCOUNTS", + similes: [ + "close token accounts", + "remove empty accounts", + "clean up token accounts", + "close SPL token accounts", + "clean wallet", + ], + description: `Close empty SPL Token accounts associated with your wallet to reclaim rent. + This action will close both regular SPL Token accounts and Token-2022 accounts that have zero balance. `, + examples: [ + [ + { + input: {}, + output: { + status: "success", + signature: + "3KmPyiZvJQk8CfBVVaz8nf3c2crb6iqjQVDqNxknnusyb1FTFpXqD8zVSCBAd1X3rUcD8WiG1bdSjFbeHsmcYGXY", + accountsClosed: 10, + }, + explanation: "Closed 10 empty token accounts successfully.", + }, + ], + [ + { + input: {}, + output: { + status: "success", + signature: "", + accountsClosed: 0, + }, + explanation: "No empty token accounts were found to close.", + }, + ], + ], + schema: z.object({}), + handler: async (agent: SolanaAgentKit) => { + try { + const result = await closeEmptyTokenAccounts(agent); + + if (result.size === 0) { + return { + status: "success", + signature: "", + accountsClosed: 0, + message: "No empty token accounts found to close", + }; + } + + return { + status: "success", + signature: result.signature, + accountsClosed: result.size, + message: `Successfully closed ${result.size} empty token accounts`, + }; + } catch (error: any) { + return { + status: "error", + message: `Failed to close empty token accounts: ${error.message}`, + }; + } + }, +}; + +export default closeEmptyTokenAccountsAction;