@abstract-foundation/agw-client
Version:
Abstract Global Wallet Client SDK
54 lines • 2.53 kB
JavaScript
import { sendRawTransactionSync, } from "viem/actions";
import { getAction, getTransactionError, parseAccount, } from "viem/utils";
import { EOA_VALIDATOR_ADDRESS, INSUFFICIENT_BALANCE_SELECTOR, } from "../constants.js";
import { InsufficientBalanceError } from "../errors/insufficientBalance.js";
import { signPrivyTransaction } from "./sendPrivyTransaction.js";
import { sendTransactionInternal } from "./sendTransactionInternal.js";
export async function sendTransactionSync(client, signerClient, publicClient, parameters, isPrivyCrossApp = false, customPaymasterHandler = undefined) {
const { throwOnReceiptRevert, timeout, ...txParameters } = parameters;
if (isPrivyCrossApp) {
try {
let paymasterData = {};
// eslint-disable-next-line @typescript-eslint/no-explicit-any
const requestAsAny = txParameters;
if (customPaymasterHandler &&
!requestAsAny.paymaster &&
!requestAsAny.paymasterInput) {
paymasterData = await customPaymasterHandler({
...txParameters,
from: client.account.address,
chainId: txParameters.chain?.id ?? client.chain.id,
});
}
const updatedParameters = {
...txParameters,
...paymasterData,
};
const signedTx = await signPrivyTransaction(client, updatedParameters);
return await sendRawTransactionSync(publicClient, {
serializedTransaction: signedTx,
throwOnReceiptRevert,
timeout,
});
}
catch (err) {
if (err instanceof Error &&
err.message.includes(INSUFFICIENT_BALANCE_SELECTOR)) {
throw new InsufficientBalanceError();
}
throw getTransactionError(err, {
...txParameters,
account: txParameters.account
? parseAccount(txParameters.account)
: null,
chain: txParameters.chain ?? undefined,
});
}
}
return sendTransactionInternal(client, signerClient, publicClient, txParameters, EOA_VALIDATOR_ADDRESS, {}, customPaymasterHandler, (serializedTransaction) => getAction(client, sendRawTransactionSync, "sendRawTransactionSync")({
serializedTransaction,
throwOnReceiptRevert,
timeout,
}));
}
//# sourceMappingURL=sendTransactionSync.js.map