import express from "express";
import {
settle,
SettlementMode,
ServiceType,
getNetworkConfig,
} from "@x84-ai/sdk";
import { Rpc } from "@lightprotocol/stateless.js";
const app = express();
const config = getNetworkConfig("mainnet");
const rpc = new Rpc(connection);
app.post("/a2a/v1", async (req, res) => {
const paymentHeader = req.headers["x-payment"];
// No payment -- return 402
if (!paymentHeader) {
return res.status(402).json({
paymentRequirement: {
amount: "1000000",
token: "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
network: "solana",
recipient: ownerPubkey.toBase58(),
description: "1 USDC per request",
},
});
}
// Verify and settle the payment
try {
const result = await settle({
program,
rpc,
connection,
nftMint: agentId,
serviceType: ServiceType.A2A,
amount: new BN(1_000_000),
resource: "/a2a/v1",
mode: SettlementMode.Atomic,
payer: extractPayerFromTx(paymentHeader),
payerTokenAccount: extractPayerAta(paymentHeader),
payeeTokenAccount: ownerAta,
treasuryTokenAccount: config.treasuryTokenAccount!,
tokenMint: config.tokenMint!,
tokenProgram: TOKEN_PROGRAM_ID,
signers: [payerKeypair], // or verify pre-signed tx
altAddress: config.lightAlt!,
});
// Payment confirmed -- process the A2A request
const agentResponse = await processRequest(req.body);
res.json({
jsonrpc: "2.0",
id: req.body.id,
result: {
id: generateTaskId(),
status: { state: "completed" },
artifacts: [{ parts: [{ type: "text", text: agentResponse }] }],
},
});
} catch (err) {
res.status(400).json({ error: "Payment verification failed" });
}
});