@account-kit/infra
Version:
adapters for @aa-sdk/core for interacting with alchemy services
59 lines • 2.48 kB
JavaScript
import { isSmartAccountWithSigner, sendTransaction, sendTransactions, sendUserOperation, clientHeaderTrack, } from "@aa-sdk/core";
import { simulateUserOperationChanges } from "../../actions/simulateUserOperationChanges.js";
import { InfraLogger } from "../../metrics.js";
/**
* Provides a set of actions for interacting with the Alchemy Smart Account client, including the ability to simulate user operations.
*
* @example
* ```ts
* import { alchemyActions } from "@account-kit/infra";
* import { createPublicClient } from "viem";
*
* const client = createPublicClient(...);
* const clientWithAlchemyActions = client.extend(alchemyActions);
* ```
*
* @param {Client<TTransport, TChain, TAccount>} client_ The client instance used to perform actions
* @returns {AlchemySmartAccountClientActions<TAccount, TContext>} An object containing Alchemy Smart Account client actions
*/
export const alchemyActions = (client_) => ({
simulateUserOperation: async (args) => {
const client = clientHeaderTrack(client_, "simulateUserOperation");
return simulateUserOperationChanges(client, args);
},
async sendUserOperation(args) {
const client = clientHeaderTrack(client_, "infraSendUserOperation");
const { account = client.account } = args;
const result = sendUserOperation(client, args);
logSendUoEvent(client.chain.id, account);
return result;
},
sendTransaction: async (args, overrides, context) => {
const client = clientHeaderTrack(client_, "sendTransaction");
const { account = client.account } = args;
const result = await sendTransaction(client, args, overrides, context);
logSendUoEvent(client.chain.id, account);
return result;
},
async sendTransactions(args) {
const client = clientHeaderTrack(client_, "sendTransactions");
const { account = client.account } = args;
const result = sendTransactions(client, args);
logSendUoEvent(client.chain.id, account);
return result;
},
});
function logSendUoEvent(chainId, account) {
const signerType = isSmartAccountWithSigner(account)
? account.getSigner().signerType
: "unknown";
InfraLogger.trackEvent({
name: "client_send_uo",
data: {
chainId,
signerType: signerType,
entryPoint: account.getEntryPoint().address,
},
});
}
//# sourceMappingURL=smartAccount.js.map