GEMINI_API_KEY=api_gemini
PAY_TO_ADDRESS=wallet_tujuan_penerimaan pembayaran
pnpm install
pnpm install wagmi viem @tanstack/react-query @x402/fetch @x402/next @x402/core @x402/evm @google/generative-ai
pnpm dev
tambahkan di bawa route(nanti):
export const POST = withX402(handler, routeConfig, server);
di page nanti tambahkan :
if (walletClient.chain.id !== X402_CONFIG.CHAIN_ID) {
setError(`Please switch wallet to Base Sepolia (Chain ID: ${X402_CONFIG.CHAIN_ID})`);
setLoading(false);
return;
}
const signer = {
address: walletClient.account.address,
signTypedData: async (params: {
domain: Record<string, unknown>;
types: Record<string, unknown>;
primaryType: string;
message: Record<string, unknown>;
}) => {
return walletClient.signTypedData({
domain: params.domain as Parameters<typeof walletClient.signTypedData>[0]["domain"],
types: params.types as Parameters<typeof walletClient.signTypedData>[0]["types"],
primaryType: params.primaryType,
message: params.message,
});
},
};
const client = new x402Client()
.register(X402_CONFIG.NETWORK_ID, new ExactEvmScheme(signer));
const httpClient = new x402HTTPClient(client);
const x402Fetch = wrapFetchWithPayment(fetch, httpClient);
const res = await x402Fetch("/api/chat", {
lanjut kek nerima format biasa di awal
});
terus buat file untuk variable:
export const NETWORK_ID = "eip155:84532" as const;
export const CHAIN_ID = 84532;
export const PRICE = "$0.001";
export const TOKEN_ADDRESS = "0x036CbD53842c5426634e7929541eC2318f3dCF7e";
export const FACILITATOR_URL = "https://x402.org/facilitator";
export const RESOURCE_DESCRIPTION = "AI Chat powered by Gemini";
export const X402_CONFIG = {
NETWORK_ID,
CHAIN_ID,
PRICE,
TOKEN_ADDRESS,
FACILITATOR_URL,
RESOURCE_DESCRIPTION,
} as const;