UNPKG

@alchemy/aa-core

Version:

viem based SDK that enables interactions with ERC-4337 Smart Accounts. ABIs are based off the definitions generated in @account-abstraction/contracts

50 lines (42 loc) 1.36 kB
import { getAddress, type Hex, type SignableMessage, type TypedData, type TypedDataDefinition, type WalletClient, } from "viem"; import { InvalidSignerTypeError } from "../errors/signer.js"; import type { SmartAccountSigner } from "./types"; export class WalletClientSigner implements SmartAccountSigner<WalletClient> { signerType: string; inner: WalletClient; constructor(client: WalletClient, signerType: string) { this.inner = client; if (!signerType) { throw new InvalidSignerTypeError(signerType); } this.signerType = signerType; } getAddress: () => Promise<`0x${string}`> = async () => { let addresses = await this.inner.getAddresses(); return getAddress(addresses[0]); }; readonly signMessage: (message: SignableMessage) => Promise<`0x${string}`> = async (message) => { const account = this.inner.account ?? (await this.getAddress()); return this.inner.signMessage({ message, account }); }; signTypedData = async < const TTypedData extends TypedData | { [key: string]: unknown }, TPrimaryType extends string = string >( typedData: TypedDataDefinition<TTypedData, TPrimaryType> ): Promise<Hex> => { const account = this.inner.account ?? (await this.getAddress()); return this.inner.signTypedData({ account, ...typedData, }); }; }