import { createPayer, type WalletAdapter } from "@faremeter/rides"
import { createOWSSolanaWallet } from "@faremeter/wallet-ows"
import { createPaymentHandler } from "@faremeter/payment-solana/exact"
import { lookupKnownSPLToken, clusterToCAIP2 } from "@faremeter/info/solana"
import { getTokenBalance } from "@faremeter/payment-solana/splToken"
import { Connection, PublicKey, clusterApiUrl } from "@solana/web3.js"
import { createSolanaRpc } from "@solana/kit"
const network = "devnet"
const usdcInfo = lookupKnownSPLToken(network, "USDC")
if (!usdcInfo) throw new Error("Unknown SPL token")
const wallet = createOWSSolanaWallet(network, {
walletNameOrId: "my-solana-wallet",
passphrase: "my-passphrase",
})
const mint = new PublicKey(usdcInfo.address)
const connection = new Connection(clusterApiUrl(network), "confirmed")
const rpcClient = createSolanaRpc(clusterApiUrl(network))
const adapter: WalletAdapter = {
x402Id: [{
scheme: "exact",
network: clusterToCAIP2(network).caip2,
asset: usdcInfo.address,
}],
paymentHandler: createPaymentHandler(wallet, mint, connection),
getBalance: async () => {
const balance = await getTokenBalance({
account: wallet.publicKey.toBase58(),
asset: usdcInfo.address,
rpcClient,
})
return { name: "USDC", amount: balance?.amount ?? 0n, decimals: balance?.decimals ?? 6 }
},
}
const payer = createPayer()
payer.addWalletAdapter(adapter)
const response = await payer.fetch("https://api.example.com/resource")