import axios from "axios";
import { privateKeyToAccount } from "viem/accounts";
import { x402Client } from "@x402/core/client";
import { registerExactEvmScheme } from "@x402/evm/exact/client";
import { encodePaymentSignatureHeader } from "@x402/core/http";
// Setup
const account = privateKeyToAccount(evmPrivateKey);
const x402 = new x402Client();
registerExactEvmScheme(x402, { signer: account });
// Phase 1: Request payment requirements
const initialRequest = {
jsonrpc: "2.0",
id: 1,
method: "snack-money.pay.twitter",
params: {
receiver: "username",
amount: 0.01,
description: "Payment via A2A"
}
};
const response = await axios.post(
"https://api.snack.money/a2a",
initialRequest,
{
headers: {
"Content-Type": "application/json",
"X-A2A-Extensions": "https://a2a.dev/spec/extensions/x402/v0"
}
}
);
// Phase 2: Execute on-chain payment
const { taskId, payment } = response.data.result;
const paymentReceipt = await x402.payment.execute(payment);
// Phase 3: Submit payment proof
const proofRequest = {
jsonrpc: "2.0",
id: 2,
method: "snack-money.pay.twitter",
params: {
receiver: "username",
amount: 0.01,
taskId,
payment: {
network: payment.network,
transactionHash: paymentReceipt.hash
}
}
};
const finalResponse = await axios.post(
"https://api.snack.money/a2a",
proofRequest,
{
headers: {
"Content-Type": "application/json",
"X-A2A-Extensions": "https://a2a.dev/spec/extensions/x402/v0",
"x-payment-signature": encodePaymentSignatureHeader(
paymentReceipt.signature
)
}
}
);