UNPKG

snackmoney-testing

Version:

A CLI tool for sending USDC payments on Twitter and Farcaster using x402.

147 lines (145 loc) 5.12 kB
#!/usr/bin/env node import { Logger } from './chunk-TQEXMNGL.js'; import axios from 'axios'; import { privateKeyToAccount } from 'viem/accounts'; import { withPaymentInterceptor, decodeXPaymentResponse } from 'x402-axios'; async function batchPay(cmd) { const privateKey = process.env.PRIVATE_KEY; const baseURL = "https://api.snack.money"; const endpointPath = "/payments/batch-pay"; if (!privateKey || !endpointPath) { Logger.error("Missing required environment variables"); process.exit(1); } const { identity, receivers } = cmd; const allowedIdentities = ["twitter", "farcaster"]; if (!allowedIdentities.includes(identity.toLowerCase())) { Logger.error("receiver_identity must be either 'twitter' or 'farcaster'"); process.exit(1); } let parsedReceivers; try { parsedReceivers = JSON.parse(receivers); if (!Array.isArray(parsedReceivers)) { throw new Error("Receivers must be an array"); } } catch (e) { Logger.error( // eslint-disable-next-line prettier/prettier `receivers must be a valid JSON array, e.g. '[{"username":"jrsarath","name":"Sarath Singh","amount":0.5}]'` ); process.exit(1); } const account = privateKeyToAccount(privateKey); const api = withPaymentInterceptor(axios.create({ baseURL }), account); try { const response = await api.post(endpointPath, { currency: "USDC", type: "social-network", sender_username: "snackmoney-agent-x402", receiver_identity: identity, receivers: parsedReceivers }); Logger.log("response", response.data); const paymentResponse = decodeXPaymentResponse( // eslint-disable-next-line prettier/prettier response.headers["x-payment-response"] ); Logger.log(paymentResponse); } catch (error) { Logger.error("error", error); } } async function confirmReward(cmd) { const privateKey = process.env.PRIVATE_KEY; const baseURL = "https://api.snack.money"; const endpointPath = "/rewards/confirm-distribution"; if (!privateKey || !endpointPath) { Logger.error("Missing required environment variables"); process.exit(1); } const { orderId } = cmd; const account = privateKeyToAccount(privateKey); const api = withPaymentInterceptor(axios.create({ baseURL }), account); try { const response = await api.post(`${endpointPath}/${orderId}`); Logger.log("response", JSON.stringify(response.data, null, 2)); } catch (error) { Logger.error("error", error); } } async function createReward(cmd) { const privateKey = process.env.PRIVATE_KEY; const baseURL = "https://api.snack.money"; const endpointPath = "/rewards/create-distribution"; if (!privateKey || !endpointPath) { Logger.error("Missing required environment variables"); process.exit(1); } const { platform, contentId, budget } = cmd; const allowedPlatforms = ["twitter", "farcaster"]; if (!allowedPlatforms.includes(platform.toLowerCase())) { Logger.error("platform must be either 'twitter' or 'farcaster'"); process.exit(1); } const parsedBudget = parseFloat(budget); if (isNaN(parsedBudget)) { Logger.error("budget must be a valid number, e.g., 0.01"); process.exit(1); } const account = privateKeyToAccount(privateKey); const api = withPaymentInterceptor(axios.create({ baseURL }), account); try { const response = await api.post(endpointPath, { budget: parsedBudget, platform, content_id: contentId }); Logger.log("response", JSON.stringify(response.data, null, 2)); } catch (error) { Logger.error("error", error); } } async function pay(cmd) { const privateKey = process.env.PRIVATE_KEY; const baseURL = "https://api.snack.money"; const endpointPath = "/payments/pay"; if (!privateKey || !endpointPath) { Logger.error("Missing required environment variables"); process.exit(1); } const { identity, username, amount } = cmd; const allowedIdentities = ["twitter", "farcaster"]; if (!allowedIdentities.includes(identity.toLowerCase())) { Logger.error("receiver_identity must be either 'twitter' or 'farcaster'"); process.exit(1); } const parsedAmount = parseFloat(amount); if (isNaN(parsedAmount)) { Logger.error("Amount must be a valid number, e.g., 0.01"); process.exit(1); } const account = privateKeyToAccount(privateKey); const api = withPaymentInterceptor(axios.create({ baseURL }), account); try { const response = await api.post(endpointPath, { amount: parsedAmount, currency: "USDC", type: "social-network", sender_username: "snackmoney-agent-x402", receiver_username: username, receiver_identity: identity }); Logger.log("response", response.data); const paymentResponse = decodeXPaymentResponse( // eslint-disable-next-line prettier/prettier response.headers["x-payment-response"] ); Logger.log(paymentResponse); } catch (error) { Logger.error("error", error); } } export { batchPay, confirmReward, createReward, pay }; //# sourceMappingURL=main.js.map //# sourceMappingURL=main.js.map