支付处理服务器

AgentPay Hub是一个开源MCP服务器,使AI代理能够创建发票、执行x402支付意图并通过单一接口协调Solana devnet支付。

  • by Martins-O
  • TypeScript
  • 本地部署
  • 更新于
在 GitHub 查看 Martins-O/agent-pay-hub

使用说明

代理支付中心

AgentPay Hub是一个开源的MCP服务器,它使AI代理能够通过一个定义良好的接口创建发票、执行x402支付意图并协调Solana devnet支付。该项目的结构是一个包含后端服务器、TypeScript SDK、浏览器仪表板和共享类型定义的单代码仓库。

当前状态

  • [x] 已起草架构规范(docs/architecture.md).
  • [x] 已起草环境变量目录(docs/environment.md).
  • [x] 存储库脚手架(packages/ 用于服务器、sdk、仪表板、类型)。
  • [x] 核心服务器基础(配置加载器、身份验证框架、速率限制、健康端点、持久性模式)。
  • [x] 发票、付款、余额和webhook API脚手架,带有分类帐+等功性+调度管道。
  • [x] Webhook调度器、Solana提交/确认生命周期和分类账预测(初始通过)。
  • [x] 普罗米修斯 /metrics 导出默认进程统计数据、域计数器和钱包签名遥测。
  • [x] Webhook死信队列显示列表+重播端点。
  • [x] 可选的钱包签名验证,带有随机数重放保护。
  • []SDK人体工程学、仪表板UI流程和Solana故障转移强化。
  • []测试、CI、文档套件和演示资产。

入门指南

地方发展

  1. 安装先决条件:Node.js 20、pnpm 8.15.4、Docker和Docker Compose。
  2. 引导工作区:
    bash scripts/bootstrap-dev.sh
    
    脚本复制 .env.example 文件,通过Docker启动Postgres+Redis,应用Prisma迁移,并种子一个开发API密钥。生成的密钥(如果已创建)将回显到控制台。
  3. 在监视模式下启动软件包:
    pnpm dev
    
    服务器绑定到 http://localhost:8080 默认情况下,仅模拟Solana行为。
  4. 仅启动仪表板(可选)以与发票、付款和webhooks交互:
    pnpm --filter @agentpay/dashboard dev
    
    该应用程序运行于 http://localhost:5173 并使用本地存储的API密钥来调用服务器。

质量门

  • 运行服务器测试套件: pnpm --filter @agentpay/server test
  • 运行所有工作区测试/lints/类型检查: pnpm test, pnpm lint, pnpm typecheck
  • CI(GitHub Actions)对每个推送和拉取请求执行相同的命令。

SDK使用(预览版)

import { AgentPayClient, verifyWebhookSignature } from '@agentpay/sdk';

const client = new AgentPayClient({
  baseUrl: process.env.AGENTPAY_URL!,
  apiKey: process.env.AGENTPAY_API_KEY!
});

const { invoice } = await client.createInvoice({
  recipientWalletAddress: 'RecipientPubkey',
  assetSymbol: 'USDC',
  amount: '1.50',
  memo: 'Sample invoice'
});

for await (const webhook of client.iterateWebhooks({ limit: 25 })) {
  console.log('Registered webhook', webhook.id);
}

function handleWebhook(headers: Record<string, string>, body: string) {
  const valid = verifyWebhookSignature({
    secret: process.env.AGENTPAY_WEBHOOK_SECRET!,
    timestamp: headers['x-agentpay-timestamp'],
    signature: headers['x-agentpay-signature'],
    body
  });
  if (!valid) throw new Error('Invalid webhook signature');
}