Skip to content

Repository files navigation

mppx

TypeScript SDK for the Machine Payments Protocol

Documentation · Install · Quick Start · Examples · CLI · Payments Proxy · Protocol

VersionMIT License


Documentation

Full documentation, API reference, and guides are available at mpp.dev/sdk/typescript.

Contributors changing Tempo sessions should read the session design before altering credential, recovery, accounting, or transport behavior.

Install

npm i mppx

Quick Start

Server

import{Mppx,tempo}from'mppx/server'constmppx=Mppx.create({methods: [tempo({currency: '0x20c0000000000000000000000000000000000000',recipient: '0x742d35Cc6634c0532925a3b844bC9e7595F8fE00',}),],secretKey: process.env.MPP_SECRET_KEY!,})exportasyncfunctionhandler(request: Request){constresponse=awaitmppx.charge({amount: '1'})(request)if(response.status===402)returnresponse.challengereturnresponse.withReceipt(Response.json({data: '...'}))}

Generate MPP_SECRET_KEY with at least 32 bytes, for example: openssl rand -base64 32.

Client

import{privateKeyToAccount}from'viem/accounts'import{Mppx,tempo}from'mppx/client'Mppx.create({methods: [tempo({account: privateKeyToAccount('0x...')})],})// Global fetch now handles 402 automaticallyconstres=awaitfetch('https://mpp.dev/api/ping/paid')

Examples

ExampleDescription
chargePayment-gated photo generation API
charge-wagmiPayment-gated charge with Wagmi + React
session/multi-fetchMultiple paid requests over a single payment channel
session/ssePay-per-token LLM streaming with SSE
stripeStripe SPT charge with automatic client
npx gitpick wevm/mppx/examples/charge

CLI

mppx includes a basic CLI for making HTTP requests with automatic payment handling. Tempo session channels are retained and reused automatically until you close them.

# create account - stored in keychain, autofunded on testnet
mppx account create
# make request - automatic payment handling, curl-like api
mppx example.com
# 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

--session auto is the default. Pass new to open another channel or a channel ID to select one explicitly.

You can also install globally to use the mppx CLI from anywhere:

npm i -g mppx

Payments Proxy

mppx exports a Proxy server handler so that you can create or define a 402-protected payments proxy for any API.

import{openai,stripe,Proxy}from'mppx/proxy'import{Mppx,tempo}from'mppx/server'constmppx=Mppx.create({methods: [tempo()],secretKey: process.env.MPP_SECRET_KEY!,})constproxy=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.jsBun.serve(proxy)// BunDeno.serve(proxy.fetch)// Denoapp.use(proxy.listener)// Expressapp.all('*',(c)=>proxy.fetch(c.req.raw))// Honoapp.all('*',(c)=>proxy.fetch(c.request))// ElysiaexportconstGET=proxy.fetch// Next.jsexportconstPOST=proxy.fetch// Next.js

This exposes the following routes:

RoutePricing
POST /openai/v1/chat/completionscharge $0.005
POST /openai/v1/completionssession $0.0001 per token
GET /openai/v1/modelsfree
POST /stripe/v1/chargescharge $0.01
GET /stripe/v1/customers/:idfree

Protocol

Built on the "Payment" HTTP Authentication Scheme. See mpp-specs for the full specification.

License

MIT

About

TypeScript Interface for Machine Payments Protocol

Topics

Resources

Code of conduct

Security policy

Stars

164 stars

Watchers

1 watching

Forks

Releases

Sponsor this project

Used by

Contributors

Languages