UNPKG

ai-payments

Version:

A TypeScript library for AI payments functionality

76 lines 2.93 kB
import { createWalletClient, http, publicActions } from 'viem'; import { privateKeyToAccount } from 'viem/accounts'; import { base, baseSepolia } from 'viem/chains'; import { createPaymentHeader } from 'x402/client'; import { processPriceToAtomicAmount } from 'x402/shared'; export var PaymentMethods; (function (PaymentMethods) { PaymentMethods["USDC_BASE_SEPOLIA"] = "USDC_BASE_SEPOLIA"; PaymentMethods["USDC_BASE_MAINNET"] = "USDC_BASE_MAINNET"; })(PaymentMethods || (PaymentMethods = {})); export function getChainFromPaymentMethod(paymentMethod) { switch (paymentMethod) { case PaymentMethods.USDC_BASE_SEPOLIA: return baseSepolia; case PaymentMethods.USDC_BASE_MAINNET: return base; default: throw new Error(`Unsupported payment method: ${paymentMethod}`); } } export function getNetworkFromChain(chain) { const networkName = chain.name.toLowerCase().replace(/\s+/g, '-'); switch (networkName) { case 'base-sepolia': return 'base-sepolia'; case 'base': return 'base'; default: throw new Error(`Unsupported network: ${networkName}`); } } /** * Sign a transaction for payment * * @param amount - Payment amount in USD * @param sellerWalletAddress - Wallet address to receive payment * @param buyerWalletAddress - Buyer's wallet private key (without 0x prefix) * @param resource - Resource URI being paid for * @param paymentMethod - Payment method to use * @returns Payment header string or error message */ export async function signTransaction(amount, sellerWalletAddress, buyerWalletAddress, resource, paymentMethod) { try { const privateKey = `0x${buyerWalletAddress}`; const chain = getChainFromPaymentMethod(paymentMethod); const wallet = createWalletClient({ chain, transport: http(), account: privateKeyToAccount(privateKey), }).extend(publicActions); const atomicAmountForAsset = processPriceToAtomicAmount(amount, getNetworkFromChain(chain)); if ('error' in atomicAmountForAsset) { throw new Error(atomicAmountForAsset.error); } const { maxAmountRequired, asset } = atomicAmountForAsset; const paymentDetails = { scheme: 'exact', network: getNetworkFromChain(chain), maxAmountRequired, resource, description: 'Payment for order', mimeType: 'application/json', payTo: sellerWalletAddress, maxTimeoutSeconds: 300, asset: asset.address, outputSchema: undefined, extra: asset?.eip712, }; const paymentHeader = await createPaymentHeader(wallet, 1, paymentDetails); return paymentHeader; } catch (error) { return error.message; } } //# sourceMappingURL=utils.js.map