// Operations for transaction management (TXM)
import { z } from "zod";
import { getTxmApi } from "../common/client";
import { CurvegridError } from "../common/errors";
import { TransactionStatus } from "@curvegrid/multibaas-sdk";
// Schema for listing wallet transactions
export const ListTxmTransactionsSchema = z.object({
walletAddress: z.string().describe("Wallet address"),
hash: z.string().optional().describe("Filter by transaction hash"),
nonce: z.number().optional().describe("Filter by nonce"),
status: z
.nativeEnum(TransactionStatus)
.optional()
.describe("Filter by transaction status"),
limit: z
.number()
.optional()
.describe("Maximum number of transactions to return"),
offset: z.number().optional().describe("Offset for pagination"),
});
// Schema for counting wallet transactions
export const CountTxmTransactionsSchema = z.object({
walletAddress: z.string().describe("Wallet address"),
});
// Schema for speeding up a transaction
export const SpeedUpTransactionSchema = z.object({
walletAddress: z.string().describe("Wallet address"),
nonce: z.number().describe("Transaction nonce"),
gasPrice: z.string().describe("New gas price in wei"),
});
// Schema for canceling a transaction
export const CancelTransactionSchema = z.object({
walletAddress: z.string().describe("Wallet address"),
nonce: z.number().describe("Transaction nonce"),
gasPrice: z.string().describe("New gas price in wei"),
});
// List TXM transactions
export async function listTxmTransactions(
options: z.infer<typeof ListTxmTransactionsSchema>,
) {
try {
const txmApi = getTxmApi();
const response = await txmApi.listWalletTransactions(
options.walletAddress,
options.hash,
options.nonce,
options.status,
options.limit,
options.offset,
);
return response.data.result;
} catch (error: any) {
throw new CurvegridError(
`Failed to list TXM transactions: ${error.message}`,
);
}
}
// Speed up TXM transaction
export async function speedUpTransaction(
options: z.infer<typeof SpeedUpTransactionSchema>,
) {
try {
const txmApi = getTxmApi();
const response = await txmApi.speedUpTransaction(
options.walletAddress,
options.nonce,
{
gasPrice: options.gasPrice,
},
);
return response.data.result;
} catch (error: any) {
throw new CurvegridError(
`Failed to speed up transaction: ${error.message}`,
);
}
}
// Cancel TXM transaction
export async function cancelTransaction(
options: z.infer<typeof CancelTransactionSchema>,
) {
try {
const txmApi = getTxmApi();
const response = await txmApi.cancelTransaction(
options.walletAddress,
options.nonce,
{
gasPrice: options.gasPrice,
},
);
return response.data.result;
} catch (error: any) {
throw new CurvegridError(`Failed to cancel transaction: ${error.message}`);
}
}
// Count TXM transactions
export async function countWalletTransactions(
options: z.infer<typeof CountTxmTransactionsSchema>,
) {
try {
const txmApi = getTxmApi();
const response = await txmApi.countWalletTransactions(
options.walletAddress,
);
return response.data.result;
} catch (error: any) {
throw new CurvegridError(
`Failed to count wallet transactions: ${error.message}`,
);
}
}