UNPKG

@abstract-foundation/agw-client

Version:
69 lines (65 loc) 2.02 kB
import { type Account, bytesToString, type Client, fromHex, type Hex, hashMessage, type SignMessageParameters, type Transport, type WalletClient, } from "viem"; import type { ChainEIP712 } from "viem/chains"; import { getAgwTypedSignature } from "../getAgwTypedSignature.js"; import { sendPrivySignMessage } from "./sendPrivyTransaction.js"; /** * Function to sign messages using the connected Abstract Global Wallet. * * This method follows the EIP-1271 standard for contract signature verification. * * @example * ```tsx * import { useAbstractClient } from "@abstract-foundation/agw-react"; * * export default function SignMessage() { * const { data: agwClient } = useAbstractClient(); * * async function signMessage() { * if (!agwClient) return; * * const signature = await agwClient.signMessage({ * message: "Hello, Abstract!", * }); * * console.log("Signature:", signature); * } * } * ``` * * @param parameters - Parameters for signing a message * @param parameters.message - The message to sign. Can be a string or a hex value (required) * @returns A Promise containing the signature of the message */ export async function signMessage( client: Client<Transport, ChainEIP712, Account>, signerClient: WalletClient<Transport, ChainEIP712, Account>, parameters: Omit<SignMessageParameters, "account">, isPrivyCrossApp = false, ): Promise<Hex> { if (isPrivyCrossApp) { // We handle {message: {raw}} here because the message is expected to be a string if (typeof parameters.message === "object") { if (parameters.message.raw instanceof Uint8Array) { parameters.message = bytesToString(parameters.message.raw); } else { parameters.message = fromHex(parameters.message.raw, "string"); } } return await sendPrivySignMessage(client, parameters); } return await getAgwTypedSignature({ client, signer: signerClient, messageHash: hashMessage(parameters.message), }); }