Class: Mpp::X402::Facilitator

Inherits:
Object
  • Object
show all
Extended by:
T::Sig
Defined in:
lib/mpp/x402/facilitator.rb

Overview

HTTP client for an x402 facilitator /verify and /settle API.

resolve accepts:

* a URL string (public / unauthenticated facilitator)
* a config hash (`url:` plus optional `headers:` as a Hash or per-request proc)
* any object that responds to `#verify` and `#settle` (e.g. a CDP HTTPFacilitatorClient)

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(url, headers: nil) ⇒ Facilitator

Returns a new instance of Facilitator.



30
31
32
33
34
35
# File 'lib/mpp/x402/facilitator.rb', line 30

def initialize(url, headers: nil)
  @base_url = T.let(Mpp::Http::Headers.normalize_base_url(url), String)
  Kernel.raise ArgumentError, "x402 exact requires `facilitator`." if @base_url.empty?

  @headers = T.let(headers, T.untyped)
end

Instance Attribute Details

#base_urlObject (readonly)

Returns the value of attribute base_url.



22
23
24
# File 'lib/mpp/x402/facilitator.rb', line 22

def base_url
  @base_url
end

Class Method Details

.duck_type?(facilitator) ⇒ Boolean

Returns:

  • (Boolean)


56
57
58
# File 'lib/mpp/x402/facilitator.rb', line 56

def self.duck_type?(facilitator)
  !facilitator.nil? && facilitator.respond_to?(:verify) && facilitator.respond_to?(:settle)
end

.from_config(config) ⇒ Object



48
49
50
51
52
53
# File 'lib/mpp/x402/facilitator.rb', line 48

def self.from_config(config)
  cfg = Mpp::Http::Headers.symbolize(config)
  url = cfg[:url] || cfg[:base_url] || cfg[:baseUrl]

  new(url.to_s, headers: cfg[:headers])
end

.resolve(facilitator) ⇒ Object



38
39
40
41
42
43
44
45
# File 'lib/mpp/x402/facilitator.rb', line 38

def self.resolve(facilitator)
  return facilitator if facilitator.is_a?(Facilitator)
  return new(facilitator) if facilitator.is_a?(String) && !facilitator.empty?
  return from_config(facilitator) if facilitator.is_a?(Hash)
  return facilitator if duck_type?(facilitator)

  Kernel.raise ArgumentError, "x402 exact requires `facilitator`."
end

Instance Method Details

#settle(payment_payload, payment_requirements) ⇒ Object



76
77
78
# File 'lib/mpp/x402/facilitator.rb', line 76

def settle(payment_payload, payment_requirements)
  post("/settle", payment_payload, payment_requirements)
end

#verify(payment_payload, payment_requirements) ⇒ Object



66
67
68
# File 'lib/mpp/x402/facilitator.rb', line 66

def verify(payment_payload, payment_requirements)
  post("/verify", payment_payload, payment_requirements)
end