Skip to content
LogoLogo

Ruby SDK

The mpp-rb library

Overview

The mpp-rb Ruby gem provides a typed interface over the Machine Payments Protocol, from high-level abstractions to low-level primitives and building blocks.

Install

install.sh
$ gem install mpp-rb

Or add to your Gemfile:

Gemfile
gem "mpp-rb"

Requirements

  • Ruby 3.3+
  • eth for Tempo signing (optional)
  • stripe for Stripe method (optional)
  • async + async-http for async HTTP (optional)

Quick start

Server

server.rb
require "mpp-rb"
 
server = Mpp.create(
  method: Mpp::Methods::Tempo.tempo(
    currency: "0x20c0000000000000000000000000000000000000",
    intents: { "charge" => Mpp::Methods::Tempo::ChargeIntent.new },
    recipient: "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266",
  ),
  secret_key: ENV["MPP_SECRET_KEY"],
)
 
# In your request handler
result = server.charge(
  request.get_header("HTTP_AUTHORIZATION"),
  "0.50",
  description: "Paid resource",
)
 
if result.is_a?(Mpp::Challenge)
  resp = Mpp::Server::Decorator.make_challenge_response(result, server.realm)
  [resp["status"], resp["headers"], [resp["body"]]]
else
  credential, receipt = result
  [200, { "Payment-Receipt" => receipt.to_payment_receipt }, [{ data: "paid content", payer: credential.source }.to_json]]
end

Set MPP_SECRET_KEY in your environment before you start the server, or pass secret_key explicitly to Mpp.create().

Client

client.rb
require "mpp-rb"
 
account = Mpp::Methods::Tempo::Account.from_env
 
transport = Mpp::Client::Transport.new(
  methods: [Mpp::Methods::Tempo.tempo(account: account)],
)
 
response = transport.get("https://mpp.dev/api/ping/paid")
puts response.body

Module layout

ModuleDescription
Mpp::ChallengeChallenge parsed from WWW-Authenticate
Mpp::CredentialCredential for the Authorization header
Mpp::ReceiptReceipt parsed from Payment-Receipt
Mpp::Client::TransportHTTP client with automatic 402 handling
Mpp::Server::MiddlewareRack middleware for payment-gated endpoints
Mpp::Methods::TempoTempo payment method (client and server)
Mpp::Methods::StripeStripe payment method (client and server)

Next steps