Documentation
¶
Index ¶
- Constants
- func DeepEqual(a, b interface{}) bool
- func IsWildcardNetwork(network Network) bool
- func MatchesNetwork(pattern Network, network Network) bool
- func Newx402Client(opts ...ClientOption) *x402Client
- func Newx402Facilitator() *x402Facilitator
- func Newx402ResourceServer(opts ...ResourceServerOption) *x402ResourceServer
- func ResolveSettlementOverrideAmount(rawAmount string, requirements types.PaymentRequirements, decimals int) (string, error)
- func ValidatePaymentPayload(p PaymentPayload) error
- func ValidatePaymentRequirements(r PaymentRequirements) error
- type AfterPaymentCreationHook
- type AfterSettleHook
- type AfterVerifyHook
- type AssetAmount
- type AssetDecimalsProvider
- type BeforeHookResult
- type BeforePaymentCreationHook
- type BeforePaymentCreationHookResult
- type BeforeSettleHook
- type BeforeVerifyHook
- type ClientExtension
- type ClientOption
- func WithAfterPaymentCreationHook(hook AfterPaymentCreationHook) ClientOption
- func WithBeforePaymentCreationHook(hook BeforePaymentCreationHook) ClientOption
- func WithOnPaymentCreationFailureHook(hook OnPaymentCreationFailureHook) ClientOption
- func WithPaymentSelector(selector PaymentRequirementsSelector) ClientOption
- func WithPolicy(policy PaymentPolicy) ClientOption
- type ExtensionAwareClient
- type FacilitatorAfterSettleHook
- type FacilitatorAfterVerifyHook
- type FacilitatorBeforeHookResult
- type FacilitatorBeforeSettleHook
- type FacilitatorBeforeVerifyHook
- type FacilitatorClient
- type FacilitatorContext
- type FacilitatorExtension
- type FacilitatorOnSettleFailureHook
- type FacilitatorOnVerifyFailureHook
- type FacilitatorSettleContext
- type FacilitatorSettleFailureContext
- type FacilitatorSettleFailureHookResult
- type FacilitatorSettleResultContext
- type FacilitatorVerifyContext
- type FacilitatorVerifyFailureContext
- type FacilitatorVerifyFailureHookResult
- type FacilitatorVerifyResultContext
- type MoneyParser
- type Network
- type OnPaymentCreationFailureHook
- type OnSettleFailureHook
- type OnVerifyFailureHook
- type PartialPaymentPayload
- type PaymentCreatedContext
- type PaymentCreationContext
- type PaymentCreationFailureContext
- type PaymentCreationFailureHookResult
- type PaymentError
- type PaymentPayload
- type PaymentPayloadView
- type PaymentPolicy
- type PaymentRequired
- type PaymentRequirements
- type PaymentRequirementsSelector
- type PaymentRequirementsView
- type Price
- type ResourceConfig
- type ResourceInfo
- type ResourceServerOption
- func WithAfterSettleHook(hook AfterSettleHook) ResourceServerOption
- func WithAfterVerifyHook(hook AfterVerifyHook) ResourceServerOption
- func WithBeforeSettleHook(hook BeforeSettleHook) ResourceServerOption
- func WithBeforeVerifyHook(hook BeforeVerifyHook) ResourceServerOption
- func WithCacheTTL(ttl time.Duration) ResourceServerOption
- func WithFacilitatorClient(client FacilitatorClient) ResourceServerOption
- func WithOnSettleFailureHook(hook OnSettleFailureHook) ResourceServerOption
- func WithOnVerifyFailureHook(hook OnVerifyFailureHook) ResourceServerOption
- func WithSchemeServer(network Network, schemeServer SchemeNetworkServer) ResourceServerOption
- type SchemeNetworkClient
- type SchemeNetworkClientV1
- type SchemeNetworkFacilitator
- type SchemeNetworkFacilitatorV1
- type SchemeNetworkServer
- type SettleContext
- type SettleError
- type SettleFailureContext
- type SettleFailureHookResult
- type SettleResponse
- type SettleResultContext
- type SettlementOverrides
- type SupportedCache
- type SupportedKind
- type SupportedResponse
- type SupportedResponseV1
- type VerifyContext
- type VerifyError
- type VerifyFailureContext
- type VerifyFailureHookResult
- type VerifyResponse
- type VerifyResultContext
- type X402Client
- type X402Facilitator
- type X402ResourceServer
Constants ¶
const ( // Version is the SDK version Version = "2.7.0" // ProtocolVersion is the current x402 protocol version ProtocolVersion = 2 // ProtocolVersionV1 is the legacy x402 protocol version ProtocolVersionV1 = 1 )
Version constants
const ( ErrCodeInvalidPayment = "invalid_payment" ErrCodePaymentRequired = "payment_required" ErrCodeInsufficientFunds = "insufficient_funds" ErrCodeNetworkMismatch = "network_mismatch" ErrCodeSchemeMismatch = "scheme_mismatch" ErrCodeSignatureInvalid = "signature_invalid" ErrCodePaymentExpired = "payment_expired" ErrCodeSettlementFailed = "settlement_failed" ErrCodeUnsupportedScheme = "unsupported_scheme" ErrCodeUnsupportedNetwork = "unsupported_network" )
Common error codes
const ( ErrInvalidVersion = "invalid_version" ErrInvalidV1Payload = "invalid_v1_payload" ErrInvalidV1Requirements = "invalid_v1_requirements" ErrInvalidV2Payload = "invalid_v2_payload" ErrInvalidV2Requirements = "invalid_v2_requirements" ErrNoFacilitatorForNetwork = "no_facilitator_for_network" ErrInvalidResponse = "invalid_response" )
Facilitator error constants
const ( ErrFailedToMarshalPayload = "failed_to_marshal_payload" ErrFailedToMarshalRequirements = "failed_to_marshal_requirements" )
Server error constants
Variables ¶
This section is empty.
Functions ¶
func DeepEqual ¶
func DeepEqual(a, b interface{}) bool
DeepEqual performs deep equality check on payment requirements
func IsWildcardNetwork ¶
IsWildcardNetwork checks if network is a wildcard pattern
func MatchesNetwork ¶
MatchesNetwork checks if a network matches a pattern (supports wildcards)
func Newx402Client ¶
func Newx402Client(opts ...ClientOption) *x402Client
Newx402Client creates a new x402 client
func Newx402Facilitator ¶
func Newx402Facilitator() *x402Facilitator
func Newx402ResourceServer ¶
func Newx402ResourceServer(opts ...ResourceServerOption) *x402ResourceServer
func ResolveSettlementOverrideAmount ¶
func ResolveSettlementOverrideAmount(rawAmount string, requirements types.PaymentRequirements, decimals int) (string, error)
ResolveSettlementOverrideAmount resolves a settlement override amount string to a final atomic-unit string. Supports three formats:
- Raw atomic units: "1000"
- Percent of requirements.Amount: "50%" (up to 2 decimal places, floored)
- Dollar price: "$0.05" (converted using the provided decimals)
func ValidatePaymentPayload ¶
func ValidatePaymentPayload(p PaymentPayload) error
ValidatePaymentPayload performs basic validation on a payment payload Version-aware: handles both v1 and v2 payload structures
func ValidatePaymentRequirements ¶
func ValidatePaymentRequirements(r PaymentRequirements) error
ValidatePaymentRequirements performs basic validation on payment requirements
Types ¶
type AfterPaymentCreationHook ¶
type AfterPaymentCreationHook func(PaymentCreatedContext) error
AfterPaymentCreationHook is called after successful payment payload creation Any error returned will be logged but will not affect the payment creation result
type AfterSettleHook ¶
type AfterSettleHook func(SettleResultContext) error
AfterSettleHook is called after successful payment settlement Any error returned will be logged but will not affect the settlement result
type AfterVerifyHook ¶
type AfterVerifyHook func(VerifyResultContext) error
AfterVerifyHook is called after successful payment verification Any error returned will be logged but will not affect the verification result
type AssetAmount ¶
type AssetAmount struct {
Asset string `json:"asset"`
Amount string `json:"amount"`
Extra map[string]interface{} `json:"extra,omitempty"`
}
AssetAmount represents an amount of a specific asset
type AssetDecimalsProvider ¶
AssetDecimalsProvider is an optional interface that SchemeNetworkServer implementations can satisfy to report the decimal precision of the asset for a given network. SettlePayment uses this to convert dollar-format settlement overrides to atomic units. Falls back to 6 decimals when the scheme does not implement this interface.
type BeforeHookResult ¶
BeforeHookResult represents the result of a "before" hook If Abort is true, the operation will be aborted with the given Reason
type BeforePaymentCreationHook ¶
type BeforePaymentCreationHook func(PaymentCreationContext) (*BeforePaymentCreationHookResult, error)
BeforePaymentCreationHook is called before payment payload creation If it returns a result with Abort=true, payment creation will be aborted and an error will be returned with the provided reason
type BeforePaymentCreationHookResult ¶
BeforePaymentCreationHookResult represents the result of a "before payment creation" hook If Abort is true, the payment creation will be aborted with the given Reason
type BeforeSettleHook ¶
type BeforeSettleHook func(SettleContext) (*BeforeHookResult, error)
BeforeSettleHook is called before payment settlement If it returns a result with Abort=true, settlement will be aborted and an error will be returned with the provided reason
type BeforeVerifyHook ¶
type BeforeVerifyHook func(VerifyContext) (*BeforeHookResult, error)
BeforeVerifyHook is called before payment verification If it returns a result with Abort=true, verification will be skipped and an invalid VerifyResponse will be returned with the provided reason
type ClientExtension ¶
type ClientExtension interface {
// Key returns the unique extension identifier (e.g., "eip2612GasSponsoring").
// Must match the extension key used in PaymentRequired.Extensions.
Key() string
// EnrichPaymentPayload is called after payload creation when the extension key
// is present in paymentRequired.Extensions. Allows the extension to enrich the
// payload with extension-specific data (e.g., signing an EIP-2612 permit).
EnrichPaymentPayload(ctx context.Context, payload types.PaymentPayload, required types.PaymentRequired) (types.PaymentPayload, error)
}
ClientExtension can enrich payment payloads on the client side. Client extensions are invoked after the scheme creates the base payload but before it is returned. This allows mechanism-specific logic (e.g., EVM EIP-2612 permit signing) to enrich the payload's extensions data.
type ClientOption ¶
type ClientOption func(*x402Client)
ClientOption configures the client
func WithAfterPaymentCreationHook ¶
func WithAfterPaymentCreationHook(hook AfterPaymentCreationHook) ClientOption
WithAfterPaymentCreationHook registers a hook to execute after successful payment creation
func WithBeforePaymentCreationHook ¶
func WithBeforePaymentCreationHook(hook BeforePaymentCreationHook) ClientOption
WithBeforePaymentCreationHook registers a hook to execute before payment creation
func WithOnPaymentCreationFailureHook ¶
func WithOnPaymentCreationFailureHook(hook OnPaymentCreationFailureHook) ClientOption
WithOnPaymentCreationFailureHook registers a hook to execute when payment creation fails
func WithPaymentSelector ¶
func WithPaymentSelector(selector PaymentRequirementsSelector) ClientOption
WithPaymentSelector sets a custom payment requirements selector
func WithPolicy ¶
func WithPolicy(policy PaymentPolicy) ClientOption
WithPolicy registers a payment policy at creation time
type ExtensionAwareClient ¶
type ExtensionAwareClient interface {
SchemeNetworkClient
CreatePaymentPayloadWithExtensions(ctx context.Context, requirements types.PaymentRequirements, extensions map[string]interface{}) (types.PaymentPayload, error)
}
ExtensionAwareClient is an optional interface for schemes that can handle extensions. When a scheme implements this, x402Client will call CreatePaymentPayloadWithExtensions instead of CreatePaymentPayload, passing the server-declared extensions so the scheme can enrich the payload (e.g., EIP-2612 gas sponsoring).
type FacilitatorAfterSettleHook ¶
type FacilitatorAfterSettleHook func(FacilitatorSettleResultContext) error
FacilitatorAfterSettleHook is called after successful facilitator payment settlement Any error returned will be logged but will not affect the settlement result
type FacilitatorAfterVerifyHook ¶
type FacilitatorAfterVerifyHook func(FacilitatorVerifyResultContext) error
FacilitatorAfterVerifyHook is called after successful facilitator payment verification Any error returned will be logged but will not affect the verification result
type FacilitatorBeforeHookResult ¶
FacilitatorBeforeHookResult represents the result of a facilitator "before" hook If Abort is true, the operation will be aborted with the given Reason
type FacilitatorBeforeSettleHook ¶
type FacilitatorBeforeSettleHook func(FacilitatorSettleContext) (*FacilitatorBeforeHookResult, error)
FacilitatorBeforeSettleHook is called before facilitator payment settlement If it returns a result with Abort=true, settlement will be aborted and an error will be returned with the provided reason
type FacilitatorBeforeVerifyHook ¶
type FacilitatorBeforeVerifyHook func(FacilitatorVerifyContext) (*FacilitatorBeforeHookResult, error)
FacilitatorBeforeVerifyHook is called before facilitator payment verification If it returns a result with Abort=true, verification will be skipped and an invalid VerifyResponse will be returned with the provided reason
type FacilitatorClient ¶
type FacilitatorClient interface {
// Verify a payment (detects version from bytes, routes internally)
Verify(ctx context.Context, payloadBytes []byte, requirementsBytes []byte) (*VerifyResponse, error)
// Settle a payment (detects version from bytes, routes internally)
Settle(ctx context.Context, payloadBytes []byte, requirementsBytes []byte) (*SettleResponse, error)
// GetSupported returns supported payment kinds in flat array format with x402Version in each element (backward compatible)
GetSupported(ctx context.Context) (SupportedResponse, error)
}
FacilitatorClient interface for facilitators that support V1 and/or V2. Uses bytes at network boundary - SDK internal routing unmarshals and routes to typed mechanisms. Both modern facilitators (supporting V1+V2) and legacy facilitators (V1 only) implement this interface.
type FacilitatorContext ¶
type FacilitatorContext struct {
// contains filtered or unexported fields
}
FacilitatorContext provides access to registered facilitator extensions. Passed to SchemeNetworkFacilitator.Verify/Settle so mechanism implementations can retrieve extension-provided capabilities.
func NewFacilitatorContext ¶
func NewFacilitatorContext(extensions map[string]FacilitatorExtension) *FacilitatorContext
NewFacilitatorContext creates a FacilitatorContext from the given extensions map.
func (*FacilitatorContext) GetExtension ¶
func (c *FacilitatorContext) GetExtension(key string) FacilitatorExtension
GetExtension returns the extension registered under the given key, or nil.
type FacilitatorExtension ¶
type FacilitatorExtension interface {
Key() string
}
FacilitatorExtension is the base interface for extensions registered with x402Facilitator. Extensions are stored by key and made available to mechanism implementations via FacilitatorContext. Specific extensions embed this and add their own capabilities (e.g., a batch signer).
func NewFacilitatorExtension ¶
func NewFacilitatorExtension(key string) FacilitatorExtension
NewFacilitatorExtension creates a FacilitatorExtension with the given key.
type FacilitatorOnSettleFailureHook ¶
type FacilitatorOnSettleFailureHook func(FacilitatorSettleFailureContext) (*FacilitatorSettleFailureHookResult, error)
FacilitatorOnSettleFailureHook is called when facilitator payment settlement fails If it returns a result with Recovered=true, the provided SettleResponse will be returned instead of the error
type FacilitatorOnVerifyFailureHook ¶
type FacilitatorOnVerifyFailureHook func(FacilitatorVerifyFailureContext) (*FacilitatorVerifyFailureHookResult, error)
FacilitatorOnVerifyFailureHook is called when facilitator payment verification fails If it returns a result with Recovered=true, the provided VerifyResponse will be returned instead of the error
type FacilitatorSettleContext ¶
type FacilitatorSettleContext struct {
Ctx context.Context
Payload PaymentPayloadView
Requirements PaymentRequirementsView
PayloadBytes []byte // Raw bytes for extensions needing full data
RequirementsBytes []byte // Raw bytes for extensions needing full data
}
FacilitatorSettleContext contains information passed to facilitator settle hooks Uses view interfaces for version-agnostic hooks PayloadBytes and RequirementsBytes provide escape hatch for extensions (e.g., Bazaar)
type FacilitatorSettleFailureContext ¶
type FacilitatorSettleFailureContext struct {
FacilitatorSettleContext
Error error
}
FacilitatorSettleFailureContext contains facilitator settle operation failure and context
type FacilitatorSettleFailureHookResult ¶
type FacilitatorSettleFailureHookResult struct {
Recovered bool
Result *SettleResponse
}
FacilitatorSettleFailureHookResult represents the result of a facilitator settle failure hook
type FacilitatorSettleResultContext ¶
type FacilitatorSettleResultContext struct {
FacilitatorSettleContext
Result *SettleResponse
}
FacilitatorSettleResultContext contains facilitator settle operation result and context
type FacilitatorVerifyContext ¶
type FacilitatorVerifyContext struct {
Ctx context.Context
Payload PaymentPayloadView
Requirements PaymentRequirementsView
PayloadBytes []byte // Raw bytes for extensions needing full data
RequirementsBytes []byte // Raw bytes for extensions needing full data
}
FacilitatorVerifyContext contains information passed to facilitator verify hooks Uses view interfaces for version-agnostic hooks PayloadBytes and RequirementsBytes provide escape hatch for extensions (e.g., Bazaar)
type FacilitatorVerifyFailureContext ¶
type FacilitatorVerifyFailureContext struct {
FacilitatorVerifyContext
Error error
}
FacilitatorVerifyFailureContext contains facilitator verify operation failure and context
type FacilitatorVerifyFailureHookResult ¶
type FacilitatorVerifyFailureHookResult struct {
Recovered bool
Result *VerifyResponse
}
FacilitatorVerifyFailureHookResult represents the result of a facilitator verify failure hook If Recovered is true, the hook has recovered from the failure with the given result
type FacilitatorVerifyResultContext ¶
type FacilitatorVerifyResultContext struct {
FacilitatorVerifyContext
Result *VerifyResponse
}
FacilitatorVerifyResultContext contains facilitator verify operation result and context
type MoneyParser ¶
type MoneyParser func(amount float64, network Network) (*AssetAmount, error)
MoneyParser is a function that converts a decimal amount to an AssetAmount If the parser cannot handle the conversion, it should return nil Multiple parsers can be registered and will be tried in order The default parser is always used as a fallback
Args:
amount: Decimal amount (e.g., 1.50 for $1.50) network: Network identifier
Returns:
AssetAmount or nil if this parser cannot handle the conversion
type Network ¶
type Network string
Network represents a blockchain network identifier in CAIP-2 format Format: namespace:reference (e.g., "eip155:1" for Ethereum mainnet)
func ParseNetwork ¶
ParseNetwork parses a network string into Network type
type OnPaymentCreationFailureHook ¶
type OnPaymentCreationFailureHook func(PaymentCreationFailureContext) (*PaymentCreationFailureHookResult, error)
OnPaymentCreationFailureHook is called when payment payload creation fails If it returns a result with Recovered=true, the provided PaymentPayload will be returned instead of the error
type OnSettleFailureHook ¶
type OnSettleFailureHook func(SettleFailureContext) (*SettleFailureHookResult, error)
OnSettleFailureHook is called when payment settlement fails If it returns a result with Recovered=true, the provided SettleResponse will be returned instead of the error
type OnVerifyFailureHook ¶
type OnVerifyFailureHook func(VerifyFailureContext) (*VerifyFailureHookResult, error)
OnVerifyFailureHook is called when payment verification fails If it returns a result with Recovered=true, the provided VerifyResponse will be returned instead of the error
type PartialPaymentPayload ¶
type PartialPaymentPayload struct {
X402Version int `json:"x402Version"`
}
PartialPaymentPayload contains only x402Version for version detection Used to detect protocol version before unmarshaling to specific types
type PaymentCreatedContext ¶
type PaymentCreatedContext struct {
PaymentCreationContext
Payload PaymentPayloadView
}
PaymentCreatedContext contains payment creation result and context
type PaymentCreationContext ¶
type PaymentCreationContext struct {
Ctx context.Context
Version int // V1 or V2
SelectedRequirements PaymentRequirementsView
}
PaymentCreationContext contains information passed to payment creation hooks Uses view interfaces for version-agnostic hooks
type PaymentCreationFailureContext ¶
type PaymentCreationFailureContext struct {
PaymentCreationContext
Error error
}
PaymentCreationFailureContext contains payment creation failure and context
type PaymentCreationFailureHookResult ¶
type PaymentCreationFailureHookResult struct {
Recovered bool
Payload PaymentPayloadView
}
PaymentCreationFailureHookResult represents the result of a payment creation failure hook If Recovered is true, the hook has recovered from the failure with the given payload
type PaymentError ¶
type PaymentError struct {
Code string `json:"code"`
Message string `json:"message"`
Details map[string]interface{} `json:"details,omitempty"`
}
PaymentError represents a payment-specific error
func NewPaymentError ¶
func NewPaymentError(code, message string, details map[string]interface{}) *PaymentError
NewPaymentError creates a new payment error
func (*PaymentError) Error ¶
func (e *PaymentError) Error() string
type PaymentPayload ¶
type PaymentPayload = types.PaymentPayload
Re-export V2 types as default in x402 package V2 types are defined in types/v2.go but re-exported here for convenience
type PaymentPayloadView ¶
type PaymentPayloadView interface {
GetVersion() int
GetScheme() string
GetNetwork() string // Returns network as string (can be converted to Network type)
GetPayload() map[string]interface{}
}
PaymentPayloadView is a unified interface for payment payloads Both V1 and V2 types implement this to work with hooks
type PaymentPolicy ¶
type PaymentPolicy func(requirements []PaymentRequirementsView) []PaymentRequirementsView
PaymentPolicy filters or transforms payment requirements Works with unified view interface
type PaymentRequired ¶
type PaymentRequired = types.PaymentRequired
Re-export V2 types as default in x402 package V2 types are defined in types/v2.go but re-exported here for convenience
type PaymentRequirements ¶
type PaymentRequirements = types.PaymentRequirements
Re-export V2 types as default in x402 package V2 types are defined in types/v2.go but re-exported here for convenience
type PaymentRequirementsSelector ¶
type PaymentRequirementsSelector func(requirements []PaymentRequirementsView) PaymentRequirementsView
PaymentRequirementsSelector chooses which payment option to use Works with unified view interface
type PaymentRequirementsView ¶
type PaymentRequirementsView interface {
GetScheme() string
GetNetwork() string // Returns network as string (can be converted to Network type)
GetAsset() string
GetAmount() string // V1: MaxAmountRequired, V2: Amount
GetPayTo() string
GetMaxTimeoutSeconds() int
GetExtra() map[string]interface{}
}
PaymentRequirementsView is a unified interface for payment requirements Both V1 and V2 types implement this to work with selectors/policies/hooks
func DefaultPaymentSelector ¶
func DefaultPaymentSelector(requirements []PaymentRequirementsView) PaymentRequirementsView
DefaultPaymentSelector chooses the first available payment option
type Price ¶
type Price interface{}
Price represents a price that can be specified in various formats
type ResourceConfig ¶
type ResourceConfig struct {
Scheme string `json:"scheme"`
PayTo string `json:"payTo"`
Price Price `json:"price"`
Network Network `json:"network"`
MaxTimeoutSeconds int `json:"maxTimeoutSeconds,omitempty"`
Extra map[string]interface{} `json:"extra,omitempty"`
}
ResourceConfig defines payment configuration for a protected resource
type ResourceInfo ¶
type ResourceInfo = types.ResourceInfo
Re-export V2 types as default in x402 package V2 types are defined in types/v2.go but re-exported here for convenience
type ResourceServerOption ¶
type ResourceServerOption func(*x402ResourceServer)
ResourceServerOption configures the server
func WithAfterSettleHook ¶
func WithAfterSettleHook(hook AfterSettleHook) ResourceServerOption
WithAfterSettleHook registers a hook to execute after successful payment settlement
func WithAfterVerifyHook ¶
func WithAfterVerifyHook(hook AfterVerifyHook) ResourceServerOption
WithAfterVerifyHook registers a hook to execute after successful payment verification
func WithBeforeSettleHook ¶
func WithBeforeSettleHook(hook BeforeSettleHook) ResourceServerOption
WithBeforeSettleHook registers a hook to execute before payment settlement
func WithBeforeVerifyHook ¶
func WithBeforeVerifyHook(hook BeforeVerifyHook) ResourceServerOption
WithBeforeVerifyHook registers a hook to execute before payment verification
func WithCacheTTL ¶
func WithCacheTTL(ttl time.Duration) ResourceServerOption
WithCacheTTL sets the cache TTL for supported kinds
func WithFacilitatorClient ¶
func WithFacilitatorClient(client FacilitatorClient) ResourceServerOption
WithFacilitatorClient adds a facilitator client
func WithOnSettleFailureHook ¶
func WithOnSettleFailureHook(hook OnSettleFailureHook) ResourceServerOption
WithOnSettleFailureHook registers a hook to execute when payment settlement fails
func WithOnVerifyFailureHook ¶
func WithOnVerifyFailureHook(hook OnVerifyFailureHook) ResourceServerOption
WithOnVerifyFailureHook registers a hook to execute when payment verification fails
func WithSchemeServer ¶
func WithSchemeServer(network Network, schemeServer SchemeNetworkServer) ResourceServerOption
WithSchemeServer registers a scheme server implementation (V2, default)
type SchemeNetworkClient ¶
type SchemeNetworkClient interface {
Scheme() string
CreatePaymentPayload(ctx context.Context, requirements types.PaymentRequirements) (types.PaymentPayload, error)
}
SchemeNetworkClient is implemented by client-side payment mechanisms (V2)
type SchemeNetworkClientV1 ¶
type SchemeNetworkClientV1 interface {
Scheme() string
CreatePaymentPayload(ctx context.Context, requirements types.PaymentRequirementsV1) (types.PaymentPayloadV1, error)
}
SchemeNetworkClientV1 is implemented by client-side V1 payment mechanisms
type SchemeNetworkFacilitator ¶
type SchemeNetworkFacilitator interface {
Scheme() string
// CaipFamily returns the CAIP family pattern this facilitator supports.
// Used to group signers by blockchain family in the supported response.
//
// Examples:
// - EVM facilitators return "eip155:*"
// - SVM facilitators return "solana:*"
CaipFamily() string
// GetExtra returns mechanism-specific extra data for the supported kinds endpoint.
// This method is called when building the facilitator's supported response.
//
// For EVM schemes, return nil (no extra data needed).
// For SVM schemes, return map with feePayer address.
//
// Args:
// network: Network identifier for context
//
// Returns:
// Extra data map or nil if no extra data is needed
GetExtra(network Network) map[string]interface{}
// GetSigners returns signer addresses used by this facilitator for a given network.
// These are included in the supported response to help clients understand
// which addresses might sign/pay for transactions.
//
// Supports multiple addresses for load balancing, key rotation, and high availability.
//
// Args:
// network: Network identifier
//
// Returns:
// Array of signer addresses
//
// Examples:
// - EVM: Returns facilitator wallet addresses
// - SVM: Returns fee payer addresses
GetSigners(network Network) []string
Verify(ctx context.Context, payload types.PaymentPayload, requirements types.PaymentRequirements, fctx *FacilitatorContext) (*VerifyResponse, error)
Settle(ctx context.Context, payload types.PaymentPayload, requirements types.PaymentRequirements, fctx *FacilitatorContext) (*SettleResponse, error)
}
SchemeNetworkFacilitator is implemented by facilitator-side payment mechanisms (V2)
type SchemeNetworkFacilitatorV1 ¶
type SchemeNetworkFacilitatorV1 interface {
Scheme() string
// CaipFamily returns the CAIP family pattern this facilitator supports.
// Used to group signers by blockchain family in the supported response.
//
// Examples:
// - EVM facilitators return "eip155:*"
// - SVM facilitators return "solana:*"
CaipFamily() string
// GetExtra returns mechanism-specific extra data for the supported kinds endpoint.
// This method is called when building the facilitator's supported response.
//
// For EVM schemes, return nil (no extra data needed).
// For SVM schemes, return map with feePayer address.
//
// Args:
// network: Network identifier for context
//
// Returns:
// Extra data map or nil if no extra data is needed
GetExtra(network Network) map[string]interface{}
// GetSigners returns signer addresses used by this facilitator for a given network.
// These are included in the supported response to help clients understand
// which addresses might sign/pay for transactions.
//
// Supports multiple addresses for load balancing, key rotation, and high availability.
//
// Args:
// network: Network identifier
//
// Returns:
// Array of signer addresses
//
// Examples:
// - EVM: Returns facilitator wallet addresses
// - SVM: Returns fee payer addresses
GetSigners(network Network) []string
Verify(ctx context.Context, payload types.PaymentPayloadV1, requirements types.PaymentRequirementsV1, fctx *FacilitatorContext) (*VerifyResponse, error)
Settle(ctx context.Context, payload types.PaymentPayloadV1, requirements types.PaymentRequirementsV1, fctx *FacilitatorContext) (*SettleResponse, error)
}
SchemeNetworkFacilitatorV1 is implemented by facilitator-side V1 payment mechanisms
type SchemeNetworkServer ¶
type SchemeNetworkServer interface {
Scheme() string
ParsePrice(price Price, network Network) (AssetAmount, error)
EnhancePaymentRequirements(
ctx context.Context,
requirements types.PaymentRequirements,
supportedKind types.SupportedKind,
extensions []string,
) (types.PaymentRequirements, error)
}
SchemeNetworkServer is implemented by server-side payment mechanisms (V2)
type SettleContext ¶
type SettleContext struct {
Ctx context.Context
Payload PaymentPayloadView
Requirements PaymentRequirementsView
PayloadBytes []byte // Raw bytes for extensions needing full data
RequirementsBytes []byte // Raw bytes for extensions needing full data
}
SettleContext contains information passed to settle hooks Uses view interfaces for version-agnostic hooks PayloadBytes and RequirementsBytes provide escape hatch for extensions (e.g., Bazaar)
type SettleError ¶
type SettleError struct {
ErrorReason string // Error reason/code (e.g., "transaction_failed", "insufficient_balance")
Payer string // Payer address (if known)
Network Network // Network identifier
Transaction string // Transaction hash (if settlement was attempted)
ErrorMessage string // Optional error message details
}
SettleError represents a payment settlement failure All settlement failures (business logic and system errors) are returned as errors
func NewSettleError ¶
func NewSettleError(reason string, payer string, network Network, transaction string, message string) *SettleError
NewSettleError creates a new settlement error
Args:
reason: Error reason/code payer: Payer address (empty string if unknown) network: Network identifier transaction: Transaction hash (empty string if not submitted) err: Optional underlying error
Returns:
*SettleError
func (*SettleError) Error ¶
func (e *SettleError) Error() string
Error implements the error interface
type SettleFailureContext ¶
type SettleFailureContext struct {
SettleContext
Error error
}
SettleFailureContext contains settle operation failure and context
type SettleFailureHookResult ¶
type SettleFailureHookResult struct {
Recovered bool
Result *SettleResponse
}
SettleFailureHookResult represents the result of a settle failure hook
type SettleResponse ¶
type SettleResponse struct {
Success bool `json:"success"`
ErrorReason string `json:"errorReason,omitempty"`
ErrorMessage string `json:"errorMessage,omitempty"`
Payer string `json:"payer,omitempty"`
Transaction string `json:"transaction"`
Network Network `json:"network"`
Amount string `json:"amount,omitempty"`
Extensions map[string]interface{} `json:"extensions,omitempty"`
}
SettleResponse contains the settlement result If settlement fails, an error (typically *SettleError) is returned and this will be nil
type SettleResultContext ¶
type SettleResultContext struct {
SettleContext
Result *SettleResponse
}
SettleResultContext contains settle operation result and context
type SettlementOverrides ¶
type SettlementOverrides struct {
// Amount to settle. Supports three formats:
// - Raw atomic units: "1000" settles exactly 1000 atomic units.
// - Percent: "50%" settles 50% of PaymentRequirements.Amount (up to 2 decimal places, floored).
// - Dollar price: "$0.05" converts to atomic units using Extra["decimals"] (default 6).
// The resolved amount must be <= the authorized maximum in PaymentRequirements.
Amount string `json:"amount,omitempty"`
}
SettlementOverrides allows overriding settlement parameters. Used to support partial settlement (e.g., upto scheme billing by actual usage).
type SupportedCache ¶
type SupportedCache struct {
// contains filtered or unexported fields
}
SupportedCache caches facilitator capabilities
func (*SupportedCache) Get ¶
func (c *SupportedCache) Get(key string) (SupportedResponse, bool)
Get retrieves a supported response from the cache
func (*SupportedCache) Set ¶
func (c *SupportedCache) Set(key string, response SupportedResponse)
Set stores a supported response in the cache
type SupportedKind ¶
type SupportedKind = types.SupportedKind
Re-export V2 types as default in x402 package V2 types are defined in types/v2.go but re-exported here for convenience
type SupportedResponse ¶
type SupportedResponse = types.SupportedResponse
Re-export V2 types as default in x402 package V2 types are defined in types/v2.go but re-exported here for convenience
type SupportedResponseV1 ¶
type SupportedResponseV1 = types.SupportedResponseV1
Re-export V1 types for legacy facilitator support
type VerifyContext ¶
type VerifyContext struct {
Ctx context.Context
Payload PaymentPayloadView
Requirements PaymentRequirementsView
PayloadBytes []byte // Raw bytes for extensions needing full data
RequirementsBytes []byte // Raw bytes for extensions needing full data
}
VerifyContext contains information passed to verify hooks Uses view interfaces for version-agnostic hooks PayloadBytes and RequirementsBytes provide escape hatch for extensions (e.g., Bazaar)
type VerifyError ¶
type VerifyError struct {
InvalidReason string // Error reason/code (e.g., "insufficient_balance", "invalid_signature")
Payer string // Payer address (if known)
InvalidMessage string // Optional invalid message details
}
VerifyError represents a payment verification failure All verification failures (business logic and system errors) are returned as errors
func NewVerifyError ¶
func NewVerifyError(reason string, payer string, message string) *VerifyError
NewVerifyError creates a new verification error
Args:
reason: Error reason/code payer: Payer address (empty string if unknown) network: Network identifier (empty string if unknown) message: Optional invalid message details
Returns:
*VerifyError
func (*VerifyError) Error ¶
func (e *VerifyError) Error() string
Error implements the error interface
type VerifyFailureContext ¶
type VerifyFailureContext struct {
VerifyContext
Error error
}
VerifyFailureContext contains verify operation failure and context
type VerifyFailureHookResult ¶
type VerifyFailureHookResult struct {
Recovered bool
Result *VerifyResponse
}
VerifyFailureHookResult represents the result of a verify failure hook If Recovered is true, the hook has recovered from the failure with the given result
type VerifyResponse ¶
type VerifyResponse struct {
IsValid bool `json:"isValid"`
InvalidReason string `json:"invalidReason,omitempty"`
InvalidMessage string `json:"invalidMessage,omitempty"`
Payer string `json:"payer,omitempty"`
Extensions map[string]interface{} `json:"extensions,omitempty"`
}
VerifyResponse contains the verification result If verification fails, an error (typically *VerifyError) is returned and this will be nil
type VerifyResultContext ¶
type VerifyResultContext struct {
VerifyContext
Result *VerifyResponse
}
VerifyResultContext contains verify operation result and context
type X402Facilitator ¶
type X402Facilitator = x402Facilitator
X402Facilitator is the exported type for x402Facilitator
type X402ResourceServer ¶
type X402ResourceServer = x402ResourceServer
X402ResourceServer is the exported type for x402ResourceServer
Source Files
¶
Directories
¶
| Path | Synopsis |
|---|---|
|
extensions
|
|
|
bazaar
Package bazaar provides the Bazaar Discovery Extension for x402 v2 and v1.
|
Package bazaar provides the Bazaar Discovery Extension for x402 v2 and v1. |
|
eip2612gassponsor
Package eip2612gassponsor provides types and helpers for the EIP-2612 Gas Sponsoring extension.
|
Package eip2612gassponsor provides types and helpers for the EIP-2612 Gas Sponsoring extension. |
|
erc20approvalgassponsor
Package erc20approvalgassponsor provides types and helpers for the ERC-20 Approval Gas Sponsoring extension.
|
Package erc20approvalgassponsor provides types and helpers for the ERC-20 Approval Gas Sponsoring extension. |
|
paymentidentifier
Package paymentidentifier implements the payment-identifier extension for x402.
|
Package paymentidentifier implements the payment-identifier extension for x402. |
|
THIS FILE IS AUTO-GENERATED - DO NOT EDIT
|
THIS FILE IS AUTO-GENERATED - DO NOT EDIT |
|
Package mcp provides MCP (Model Context Protocol) transport integration for the x402 payment protocol.
|
Package mcp provides MCP (Model Context Protocol) transport integration for the x402 payment protocol. |
|
mechanisms
|
|
|
signers
|
|
|
test
|
|