Class: Mpp::Server::MppHandler

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

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(method:, realm:, secret_key:, defaults: nil, events: nil) ⇒ MppHandler

Returns a new instance of MppHandler.



26
27
28
29
30
31
32
# File 'lib/mpp/server/mpp_handler.rb', line 26

def initialize(method:, realm:, secret_key:, defaults: nil, events: nil)
  @method = T.let(method, T.untyped)
  @realm = T.let(realm, String)
  @secret_key = T.let(secret_key, String)
  @defaults = T.let(defaults || {}, T::Hash[String, T.untyped])
  @events = T.let(events || Mpp::Events.server_dispatcher, Mpp::Events::Dispatcher)
end

Instance Attribute Details

#defaultsObject (readonly)

Returns the value of attribute defaults.



23
24
25
# File 'lib/mpp/server/mpp_handler.rb', line 23

def defaults
  @defaults
end

#methodObject (readonly)

Returns the value of attribute method.



14
15
16
# File 'lib/mpp/server/mpp_handler.rb', line 14

def method
  @method
end

#realmObject (readonly)

Returns the value of attribute realm.



17
18
19
# File 'lib/mpp/server/mpp_handler.rb', line 17

def realm
  @realm
end

#secret_keyObject (readonly)

Returns the value of attribute secret_key.



20
21
22
# File 'lib/mpp/server/mpp_handler.rb', line 20

def secret_key
  @secret_key
end

Class Method Details

.create(method:, realm: nil, secret_key: nil, events: nil) ⇒ Object



36
37
38
39
40
41
42
43
# File 'lib/mpp/server/mpp_handler.rb', line 36

def self.create(method:, realm: nil, secret_key: nil, events: nil)
  new(
    method: method,
    realm: realm || Defaults.detect_realm,
    secret_key: secret_key || Defaults.detect_secret_key,
    events: events
  )
end

Instance Method Details

#charge(authorization, amount, currency: nil, recipient: nil, expires: nil, description: nil, external_id: nil, memo: nil, fee_payer: false, chain_id: nil, extra: nil, mppx_scope: nil, body: nil) ⇒ Object

Raises:

  • (ArgumentError)


67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
# File 'lib/mpp/server/mpp_handler.rb', line 67

def charge(authorization, amount, currency: nil, recipient: nil, expires: nil,
  description: nil, external_id: nil, memo: nil, fee_payer: false, chain_id: nil,
  extra: nil, mppx_scope: nil, body: nil)
  intent = @method.intents["charge"]
  raise ArgumentError, "Method #{@method.name} does not support charge intent" unless intent

  resolved_currency = currency || (@method.respond_to?(:currency) ? @method.currency : nil)
  resolved_recipient = recipient || (@method.respond_to?(:recipient) ? @method.recipient : nil)
  raise ArgumentError, "currency must be set on the method or passed to charge()" unless resolved_currency
  raise ArgumentError, "recipient must be set on the method or passed to charge()" unless resolved_recipient

  decimals = @method.respond_to?(:decimals) ? @method.decimals : DEFAULT_DECIMALS
  base_amount = Mpp::Units.parse_units(amount, decimals).to_s

  request = {
    "amount" => base_amount,
    "currency" => resolved_currency,
    "recipient" => resolved_recipient
  }
  request["externalId"] = external_id unless external_id.nil?

  if extra
    extra.each do |k, v|
      raise ArgumentError, "extra must be a dict[str, str]" unless k.is_a?(String) && v.is_a?(String)
    end
    request["extra"] = extra
  end
  if mppx_scope
    mppx_scope.each do |k, v|
      raise ArgumentError, "mppx_scope must be a dict[str, str]" unless k.is_a?(String) && v.is_a?(String)
    end
    request["_mppx_scope"] = mppx_scope
  end

  resolved_chain_id = chain_id
  resolved_chain_id ||= @method.chain_id if @method.respond_to?(:chain_id)

  if memo || fee_payer || !resolved_chain_id.nil?
    method_details = {}
    method_details["chainId"] = resolved_chain_id unless resolved_chain_id.nil?
    method_details["memo"] = memo if memo
    method_details["feePayer"] = true if fee_payer
    request["methodDetails"] = method_details
  end

  request = Mpp::Server::MethodHelper.transform_request(@method, request, nil)

  Verify.verify_or_challenge(
    authorization: authorization,
    intent: intent,
    request: request,
    realm: @realm,
    secret_key: @secret_key,
    method: @method.name,
    description: description,
    expires: expires,
    events: @events,
    body: body
  )
end

#on(name, handler = nil, &block) ⇒ Object



46
47
48
# File 'lib/mpp/server/mpp_handler.rb', line 46

def on(name, handler = nil, &block)
  @events.on(name, handler, &block)
end

#on_challenge_created(handler = nil, &block) ⇒ Object



51
52
53
# File 'lib/mpp/server/mpp_handler.rb', line 51

def on_challenge_created(handler = nil, &block)
  on(Mpp::Events::CHALLENGE_CREATED, handler, &block)
end

#on_payment_failed(handler = nil, &block) ⇒ Object



56
57
58
# File 'lib/mpp/server/mpp_handler.rb', line 56

def on_payment_failed(handler = nil, &block)
  on(Mpp::Events::PAYMENT_FAILED, handler, &block)
end

#on_payment_success(handler = nil, &block) ⇒ Object



61
62
63
# File 'lib/mpp/server/mpp_handler.rb', line 61

def on_payment_success(handler = nil, &block)
  on(Mpp::Events::PAYMENT_SUCCESS, handler, &block)
end