Help us shape the future of Go! Take the 2026 Go Developer Survey

client

package
v0.4.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 25, 2026 License: MIT, Apache-2.0, MIT Imports: 15 Imported by: 0

Documentation

Overview

Package client provides an HTTP client with automatic 402 Payment Required handling.

Package client provides the generic HTTP 402 retry transport used by MPP payment methods.

Examples import this package by its bare name. The Tempo charge package uses the alias `charge`, so there is no conflict.

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type ChallengeMatcher added in v0.4.0

type ChallengeMatcher interface {
	CanHandleChallenge(challenge *mpp.Challenge) bool
}

ChallengeMatcher may be implemented by a Method that only handles some challenges for its method and intent. It allows multiple handlers for the same method and intent to select between method-specific request details.

type Client

type Client struct {
	// contains filtered or unexported fields
}

Client is an HTTP client with automatic 402 payment handling.

func New

func New(methods []Method, opts ...Option) *Client

New creates a Client with the given payment methods.

func (*Client) Do

func (c *Client) Do(req *http.Request) (*http.Response, error)

Do sends an HTTP request, handling 402 responses automatically. If a 402 is received with a WWW-Authenticate: Payment header, it finds a matching method, creates credentials, and retries.

func (*Client) Get

func (c *Client) Get(ctx context.Context, url string) (*http.Response, error)

Get is a convenience method for GET requests.

func (*Client) Post

func (c *Client) Post(ctx context.Context, url string, contentType string, body io.Reader) (*http.Response, error)

Post is a convenience method for POST requests.

type Method

type Method interface {
	// Name returns the method name this handler supports (e.g., "tempo").
	Name() string
	// Intent returns the payment intent this handler supports (e.g., "charge").
	Intent() string
	// CreateCredential creates a payment credential for the given challenge.
	CreateCredential(ctx context.Context, challenge *mpp.Challenge) (*mpp.Credential, error)
}

Method is the interface that payment methods must implement for client-side use.

type OnChallengeFunc added in v0.4.0

type OnChallengeFunc func(
	ctx context.Context,
	challenge *mpp.Challenge,
	createCredential func(ctx context.Context) (*mpp.Credential, error),
) (*mpp.Credential, error)

OnChallengeFunc is called when the transport has selected a 402 challenge it can pay, before any credential is created. It mirrors mppx's onChallenge.

createCredential creates a credential with the selected method; ctx can carry method-specific context for this request. It runs the method at most once per challenge: later calls return the first result. The hook can:

  • return (nil, nil) to let the transport create the credential itself, or to use the one createCredential already made,
  • return a credential, from createCredential or built another way, to send it,
  • return an error to decline the payment: RoundTrip returns that error, wrapped, and does not pay.

It runs once per challenge: a credential the transport already created for the same challenge is reused without calling it again.

type Option

type Option func(*Client)

Option configures the Client.

func WithHTTPClient

func WithHTTPClient(c *http.Client) Option

WithHTTPClient sets a custom http.Client.

func WithOnChallenge added in v0.4.0

func WithOnChallenge(onChallenge OnChallengeFunc) Option

WithOnChallenge sets a hook that runs when Do receives a 402 challenge it can pay, before a credential is created. Use it to approve or decline a payment or to supply the credential. See OnChallengeFunc.

func WithPaymentPreferences added in v0.4.0

func WithPaymentPreferences(preferences PaymentPreferences) Option

WithPaymentPreferences sets client payment preferences. The preferences are advertised in Accept-Payment and used to rank server challenges. Unknown keys and invalid q-values cause Do to fail before sending the request.

func WithTrustedTempoProofRealm added in v0.4.0

func WithTrustedTempoProofRealm(origin, realm string) Option

WithTrustedTempoProofRealm pins the proof realm of a server at a known origin. Use this when the server's configured realm differs from its public hostname.

type PaymentPreferences added in v0.4.0

type PaymentPreferences map[string]float64

PaymentPreferences assigns HTTP q-values to configured payment methods. Keys use the "method/intent" form. Omitted methods default to q=1.

type Transport

type Transport struct {
	// contains filtered or unexported fields
}

Transport is an http.RoundTripper that handles 402 Payment Required responses. It wraps an inner transport and automatically negotiates payment.

func NewTransport

func NewTransport(methods []Method, inner http.RoundTripper, opts ...TransportOption) *Transport

NewTransport creates a payment-aware transport.

func (*Transport) RoundTrip

func (t *Transport) RoundTrip(req *http.Request) (*http.Response, error)

RoundTrip implements http.RoundTripper with automatic 402 handling.

type TransportOption added in v0.4.0

type TransportOption func(*transportConfig)

TransportOption configures a Transport.

func WithTransportOnChallenge added in v0.4.0

func WithTransportOnChallenge(onChallenge OnChallengeFunc) TransportOption

WithTransportOnChallenge sets a hook that runs before the transport creates a credential for a 402 challenge. Client users should use WithOnChallenge.

func WithTransportPaymentPreferences added in v0.4.0

func WithTransportPaymentPreferences(preferences PaymentPreferences) TransportOption

WithTransportPaymentPreferences sets payment preferences on a standalone Transport. Client users should use WithPaymentPreferences instead. Unknown keys and invalid q-values cause RoundTrip to fail before sending the request.

func WithTransportTrustedProofRealm added in v0.4.0

func WithTransportTrustedProofRealm(origin, realm string) TransportOption

WithTransportTrustedProofRealm pins the Tempo proof realm for a known HTTP origin. The origin must include scheme and host (and port, when non-default).

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL