extensions/v1
import "github.com/x402-foundation/x402/go/v2/extensions/v1"
Functions
func BuildBazaarExtensionFromDiscoveryInfo(discoveryInfo types.DiscoveryInfo) types.DiscoveryExtension
Source: extensions/v1/facilitator.go:344
BuildBazaarExtensionFromDiscoveryInfo builds a v2 bazaar extension from extracted v1 discovery info.
V1 had no formal schema validation, so the synthesized schema is permissive.
func BuildV1CatalogExtensions( existingExtensions map[string]any, discoveryInfo types.DiscoveryInfo, ) map[string]any
Source: extensions/v1/facilitator.go:363
BuildV1CatalogExtensions normalizes v1 catalog extension payloads to v2 bazaar format.
Preserves non-bazaar extensions from the payment payload. Replaces legacy outputSchema entries with a synthesized bazaar extension.
func ExtractDiscoveryInfoV1(paymentRequirements interface{}) (*types.DiscoveryInfo, error)
Source: extensions/v1/facilitator.go:50
ExtractDiscoveryInfoV1 extracts discovery info from v1 PaymentRequirements and transforms to v2 format
In v1, the discovery information is stored in the outputSchema field,
which contains both input (endpoint shape) and output (response schema) information.
This function makes smart assumptions to normalize v1 data into v2 DiscoveryInfo format:
- For GET/HEAD/DELETE: Looks for queryParams, query, or params fields
- For POST/PUT/PATCH: Looks for bodyFields, body, or data fields and normalizes bodyType
- Extracts optional headers if present
Args:
- paymentRequirements: V1 payment requirements (as a map or struct with outputSchema field)
Returns:
- Discovery info in v2 format if present and valid, or nil if not discoverable
Example:
requirements := map[string]interface{}{
"outputSchema": map[string]interface{}{
"input": map[string]interface{}{
"type": "http",
"method": "GET",
"discoverable": true,
"queryParams": map[string]interface{}{"query": "string"},
},
"output": map[string]interface{}{"type": "object"},
},
}
info, err := v1.ExtractDiscoveryInfoV1(requirements)
if info != nil {
fmt.Printf("Endpoint method: %v\n", info.Input)
}func ExtractResourceMetadataV1(paymentRequirements interface{}) map[string]string
Source: extensions/v1/facilitator.go:307
ExtractResourceMetadataV1 extracts resource metadata from v1 PaymentRequirements
In v1, resource information is embedded directly in the payment requirements rather than in a separate resource object.
Args:
- paymentRequirements: V1 payment requirements
Returns:
- Resource metadata (url, description, mimeType)
Example:
metadata := v1.ExtractResourceMetadataV1(requirements)
fmt.Printf("Resource URL: %s\n", metadata["url"])func IsDiscoverableV1(paymentRequirements interface{}) bool
Source: extensions/v1/facilitator.go:287
IsDiscoverableV1 checks if v1 PaymentRequirements contains discoverable information
Args:
- paymentRequirements: V1 payment requirements
Returns:
- True if the requirements contain valid discovery info
Example:
if v1.IsDiscoverableV1(requirements) {
info, _ := v1.ExtractDiscoveryInfoV1(requirements)
// Catalog info in Bazaar
}Types
type V1OutputSchema
Source: extensions/v1/facilitator.go:11
V1OutputSchema represents the v1 outputSchema structure
type V1OutputSchema struct {
Input map[string]interface{} `json:"input"`
Output interface{} `json:"output,omitempty"`
}Fields
Input map[string]interface{}`json:"input"`Output interface{}`json:"output,omitempty"`
