的TypeScript SDK 机器支付协议
文档 · 安装 · 快速启动 · 例子 · CLI · 支付代理 · 协议
文档
完整的文档、API参考和指南可在 mpp.dev / sdk /打印稿。
更改Tempo会话的贡献者应阅读 会话的设计 在更改凭证、恢复、会计或传输行为之前。
安装
npm i mppx
快速启动
服务器
import { Mppx, tempo } from 'mppx/server'
const mppx = Mppx.create({
methods: [
tempo({
recipient: '0x742d35Cc6634c0532925a3b844bC9e7595F8fE00',
}),
],
secretKey: process.env.MPP_SECRET_KEY!,
})
export async function handler(request: Request) {
const response = await mppx.charge({ amount: '1' })(request)
if (response.status === 402) return response.challenge
return response.withReceipt(Response.json({ data: '...' }))
}
生成 MPP_SECRET_KEY 至少32字节,例如: openssl rand -base64 32。
客户端
import { Mppx, tempo } from 'mppx/client'
import { privateKeyToAccount } from 'viem/accounts'
Mppx.create({
methods: [tempo({ account: privateKeyToAccount('0x...') })],
})
// Global fetch now handles 402 automatically
const res = await fetch('https://mpp.dev/api/ping/paid')
例子
| 例子 | 描述 |
|---|---|
| 负责 | 支付门控照片生成API |
| charge-wagmi | 使用Wagmi + React支付收费 |
| 会话/ multi-fetch | 多个付费请求在一个单一的支付渠道 |
| 会话/ sse | 使用SSE按令牌付费的LLM流 |
| 条纹 | 条带SPT收费与自动客户端 |
npx gitpick wevm/mppx/examples/charge
CLI
mppx 包括一个基本的CLI,用于发出带有自动支付处理的HTTP请求。节奏
会话通道会被自动保留和重用,直到您关闭它们。
# create account - stored in keychain, autofunded on testnet
mppx account create
# make request - automatic payment handling, curl-like api
mppx example.com
# pay an x402 offer on a server that advertises both protocols
mppx example.com --protocol x402
# open another session instead of reusing the preferred channel
mppx example.com --session new
# inspect and close retained sessions
mppx sessions list
mppx sessions view <channel-id>
mppx sessions close <channel-id>
mppx sessions close --all --yes
# explicitly trust a custom session escrow advertised by the server
mppx example.com -M allowCustomEscrow=true
--session auto 是默认值。通过 new 打开另一个通道或通道ID选择一个
明确。
默认情况下,Tempo会话客户端只接受规范的托管契约。服务器可以发布广告
它在支付挑战中配置了自定义托管,但客户端拒绝它,除非
-M allowCustomEscrow=true 供应。此选项信任服务器选择的地址;客户
那些不支持自定义托管的人应该不设置它。看到
会话托管信任文档。
--protocol auto 为默认值:可用时首选MPP,否则使用x402。
通过 mpp 或 x402 需要一个协议。x402付款使用与EVM相同的EVM帐户
费用,所以 MPPX_PRIVATE_KEY 或者一个存储帐户对两者都适用。
付款延期可以在挑战选择和确认后执行政策或准备资金。 在创建凭据之前:
import { defineConfig, Extension } from 'mppx/cli'
export default defineConfig({
extensions: [
Extension.from({
async preparePayment({ challenge }) {
await prepareFunds(challenge)
},
}),
],
})
扩展按配置顺序运行。在Mppx签字之前,throw拒绝付款。
也可以全局安装以使用 mppx 来自任何地方的CLI:
npm i -g mppx
支付代理
mppx 出口 Proxy 服务器处理程序,以便您可以为任何API创建或定义受402保护的支付代理。
import { openai, stripe, Proxy } from 'mppx/proxy'
import { Mppx, tempo } from 'mppx/server'
const mppx = Mppx.create({
methods: [tempo()],
secretKey: process.env.MPP_SECRET_KEY!,
})
const proxy = Proxy.create({
services: [
openai({
apiKey: 'sk-...',
routes: {
'POST /v1/chat/completions': mppx.charge({ amount: '0.05' }),
'POST /v1/completions': mppx.tempo.session({
amount: '0.0001',
unitType: 'token',
}),
'GET /v1/models': true,
},
}),
stripe({
apiKey: 'sk-...',
routes: {
'POST /v1/charges': mppx.charge({ amount: '0.01' }),
'GET /v1/customers/:id': true,
},
}),
],
})
createServer(proxy.listener) // Node.js
Bun.serve(proxy) // Bun
Deno.serve(proxy.fetch) // Deno
app.use(proxy.listener) // Express
app.all('*', (c) => proxy.fetch(c.req.raw)) // Hono
app.all('*', (c) => proxy.fetch(c.request)) // Elysia
export const GET = proxy.fetch // Next.js
export const POST = proxy.fetch // Next.js
这暴露了以下路由:
| 路线 | 定价 |
|---|---|
POST /openai/v1/chat/completions | 负责 0.005美元 |
POST /openai/v1/completions | 会话 每个代币0.0001美元 |
GET /openai/v1/models | 免费的 |
POST /stripe/v1/charges | 负责 0.01美元 |
GET /stripe/v1/customers/:id | 免费的 |
协议
建立在 “支付”HTTP认证方案. 看到 mpp-specs 获取完整规格。
许可证
麻省理工学院
可接受的节拍货币
tempo(), tempo.charge(), tempo.session(), tempo.subscription() 首先提供usd,然后是USDC。在主网上或在中速网上(testnet: true). 每个工厂返回一个直接接受的组 Mppx.create. 客户选择一个报价;排序不会触发自动交换。
import { Mppx, tempo } from 'mppx/server'
import { ousd, usdce } from 'viem/tokens'
const mppx = Mppx.create({
methods: [
tempo.charge({
currencies: [ousd, usdce],
recipient: '0x742d35Cc6634c0532925a3b844bC9e7595F8fE00',
}),
],
})
省略 currencies 对于网络默认设置,还是使用 currencies: [ousd] 在主网只接受美元。显式列表替换默认值。弃用的 currency 选项还将接受限制为一个令牌。连接请求和处理程序覆盖继续使用单数 currency。
使用已配置的处理程序,例如 mppx.tempo.charge 当组成付款时。直接检查Method的代码可以解构该组: const [charge] = tempo.charge({ currencies: [ousd] }). 现有会话和订阅继续使用其最初授权的货币。