import axios from "axios";
import { privateKeyToAccount } from "viem/accounts";
import {
x402Client,
wrapAxiosWithPayment,
decodePaymentResponseHeader,
} from "@x402/axios";
import { registerExactEvmScheme } from "@x402/evm/exact/client";
const evmPrivateKey = process.env.EVM_PRIVATE_KEY as `0x${string}`;
const receiver = process.env.RECEIVER as string;
const amount = parseFloat(process.env.AMOUNT || "0.01");
async function sendPayment() {
console.log("🚀 Starting Snack Money payment with x402 v2\n");
console.log("ℹ️ Network: Base (EVM)\n");
// Create Base signer
const evmAccount = privateKeyToAccount(evmPrivateKey);
console.log("✅ Base signer created:", evmAccount.address);
// Create x402 client and register EVM scheme
const client = new x402Client();
registerExactEvmScheme(client, { signer: evmAccount });
console.log("✅ Registered EVM payment scheme\n");
// Wrap axios with payment interceptor
const api = wrapAxiosWithPayment(
axios.create({ baseURL: "https://api.snack.money" }),
client
);
console.log(`💸 Sending ${amount} USDC to @${receiver} on X via Base...\n`);
try {
const response = await api.post("/payments/x/pay", {
amount,
currency: "USDC",
receiver,
description: "Payment via x402 v2 (Base)"
});
console.log("✅ Payment successful!");
console.log("\n📊 Response:", JSON.stringify(response.data, null, 2));
const paymentResponseHeader = response.headers["payment-response"];
if (paymentResponseHeader) {
const paymentResponse = decodePaymentResponseHeader(paymentResponseHeader);
console.log("\n🔐 Payment Response Details:", JSON.stringify(paymentResponse, null, 2));
}
} catch (error) {
console.error("❌ Payment failed:", error);
throw error;
}
}
sendPayment();