lighstorm 0.0.4 → 0.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.github/workflows/ruby-rspec-tests.yml +39 -0
- data/Gemfile.lock +1 -1
- data/README.md +5 -5
- data/adapters/connections/channel_node/policy.rb +61 -0
- data/adapters/connections/channel_node.rb +40 -18
- data/adapters/edges/channel.rb +23 -7
- data/adapters/edges/forward.rb +1 -2
- data/adapters/edges/payment/purpose.rb +0 -2
- data/adapters/edges/payment.rb +2 -5
- data/adapters/invoice.rb +2 -3
- data/adapters/nodes/node.rb +39 -5
- data/adapters/payment_request.rb +0 -1
- data/controllers/channel/actions/apply_gossip.rb +194 -0
- data/controllers/channel/find_by_id.rb +1 -1
- data/controllers/channel/mine.rb +1 -1
- data/controllers/channel.rb +4 -0
- data/controllers/node/actions/apply_gossip.rb +112 -0
- data/controllers/node.rb +4 -0
- data/controllers/payment/all.rb +52 -36
- data/controllers/payment.rb +6 -6
- data/docs/README.md +89 -13
- data/docs/_coverpage.md +1 -1
- data/docs/index.html +1 -1
- data/models/concerns/protectable.rb +23 -0
- data/models/connections/channel_node/accounting.rb +4 -0
- data/models/connections/channel_node/fee.rb +27 -18
- data/models/connections/channel_node/htlc/blocks/delta.rb +39 -0
- data/models/connections/channel_node/htlc.rb +48 -14
- data/models/connections/channel_node/policy.rb +11 -2
- data/models/connections/channel_node.rb +33 -1
- data/models/edges/channel/accounting.rb +17 -0
- data/models/edges/channel.rb +39 -5
- data/models/edges/forward.rb +0 -1
- data/models/edges/payment.rb +0 -1
- data/models/errors.rb +3 -0
- data/models/nodes/node/lightning.rb +6 -0
- data/models/nodes/node/platform.rb +6 -0
- data/models/nodes/node.rb +51 -0
- data/models/payment_request.rb +6 -3
- data/ports/grpc/session.rb +26 -0
- data/ports/grpc.rb +23 -5
- data/static/spec.rb +1 -1
- metadata +9 -2
@@ -4,6 +4,7 @@ require 'securerandom'
|
|
4
4
|
|
5
5
|
require_relative '../../satoshis'
|
6
6
|
require_relative '../../rate'
|
7
|
+
require_relative '../../concerns/protectable'
|
7
8
|
|
8
9
|
require_relative '../../../components/lnd'
|
9
10
|
require_relative '../../../controllers/channel/actions/update_fee'
|
@@ -11,24 +12,38 @@ require_relative '../../../controllers/channel/actions/update_fee'
|
|
11
12
|
module Lighstorm
|
12
13
|
module Models
|
13
14
|
class Fee
|
15
|
+
include Protectable
|
16
|
+
|
14
17
|
def initialize(policy, data)
|
15
18
|
@policy = policy
|
16
19
|
@data = data
|
17
20
|
end
|
18
21
|
|
19
22
|
def base
|
23
|
+
return nil unless @data[:base]
|
24
|
+
|
20
25
|
@base ||= Satoshis.new(milisatoshis: @data[:base][:milisatoshis])
|
21
26
|
end
|
22
27
|
|
23
28
|
def rate
|
29
|
+
return nil unless @data[:rate]
|
30
|
+
|
24
31
|
@rate ||= Rate.new(parts_per_million: @data[:rate][:parts_per_million])
|
25
32
|
end
|
26
33
|
|
27
34
|
def to_h
|
28
|
-
{
|
29
|
-
|
30
|
-
|
31
|
-
|
35
|
+
result = {}
|
36
|
+
|
37
|
+
result[:base] = base.to_h if @data[:base]
|
38
|
+
result[:rate] = rate.to_h if @data[:rate]
|
39
|
+
|
40
|
+
return nil if result.empty?
|
41
|
+
|
42
|
+
result
|
43
|
+
end
|
44
|
+
|
45
|
+
def dump
|
46
|
+
Marshal.load(Marshal.dump(@data))
|
32
47
|
end
|
33
48
|
|
34
49
|
def update(params, preview: false, fake: false)
|
@@ -38,29 +53,23 @@ module Lighstorm
|
|
38
53
|
end
|
39
54
|
|
40
55
|
def base=(value)
|
41
|
-
|
56
|
+
protect!(value)
|
42
57
|
|
43
58
|
@base = value[:value]
|
44
|
-
end
|
45
59
|
|
46
|
-
|
47
|
-
validate_token!(value)
|
60
|
+
@data[:base] = { milisatoshis: @base.milisatoshis }
|
48
61
|
|
49
|
-
|
62
|
+
base
|
50
63
|
end
|
51
64
|
|
52
|
-
def
|
53
|
-
|
54
|
-
end
|
55
|
-
|
56
|
-
private
|
65
|
+
def rate=(value)
|
66
|
+
protect!(value)
|
57
67
|
|
58
|
-
|
59
|
-
token = value.is_a?(Hash) ? value[:token] : nil
|
68
|
+
@rate = value[:value]
|
60
69
|
|
61
|
-
|
70
|
+
@data[:rate] = { parts_per_million: @rate.parts_per_million }
|
62
71
|
|
63
|
-
|
72
|
+
rate
|
64
73
|
end
|
65
74
|
end
|
66
75
|
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative '../../../../concerns/protectable'
|
4
|
+
|
5
|
+
module Lighstorm
|
6
|
+
module Models
|
7
|
+
class BlocksDelta
|
8
|
+
include Protectable
|
9
|
+
|
10
|
+
def initialize(data)
|
11
|
+
@data = data
|
12
|
+
end
|
13
|
+
|
14
|
+
def minimum
|
15
|
+
@minimum ||= @data[:minimum]
|
16
|
+
end
|
17
|
+
|
18
|
+
def to_h
|
19
|
+
{
|
20
|
+
minimum: minimum
|
21
|
+
}
|
22
|
+
end
|
23
|
+
|
24
|
+
def dump
|
25
|
+
Marshal.load(Marshal.dump(@data))
|
26
|
+
end
|
27
|
+
|
28
|
+
def minimum=(value)
|
29
|
+
protect!(value)
|
30
|
+
|
31
|
+
@minimum = value[:value]
|
32
|
+
|
33
|
+
@data[:minimum] = @minimum
|
34
|
+
|
35
|
+
minimum
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -2,42 +2,48 @@
|
|
2
2
|
|
3
3
|
require_relative '../../satoshis'
|
4
4
|
require_relative '../../rate'
|
5
|
-
|
6
|
-
require_relative '
|
5
|
+
require_relative '../../concerns/protectable'
|
6
|
+
require_relative 'htlc/blocks/delta'
|
7
7
|
|
8
8
|
module Lighstorm
|
9
9
|
module Models
|
10
10
|
class HTLC
|
11
|
+
include Protectable
|
12
|
+
|
11
13
|
def initialize(data)
|
12
14
|
@data = data
|
13
15
|
end
|
14
16
|
|
15
17
|
def minimum
|
16
|
-
@minimum ||=
|
18
|
+
@minimum ||= if @data[:minimum]
|
19
|
+
Satoshis.new(
|
20
|
+
milisatoshis: @data[:minimum][:milisatoshis]
|
21
|
+
)
|
22
|
+
end
|
17
23
|
end
|
18
24
|
|
19
25
|
def maximum
|
20
|
-
@maximum ||=
|
26
|
+
@maximum ||= if @data[:maximum]
|
27
|
+
Satoshis.new(
|
28
|
+
milisatoshis: @data[:maximum][:milisatoshis]
|
29
|
+
)
|
30
|
+
end
|
21
31
|
end
|
22
32
|
|
23
33
|
def blocks
|
24
34
|
@blocks ||= Struct.new(:data) do
|
25
35
|
def delta
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
def to_h
|
32
|
-
{ minimum: minimum }
|
33
|
-
end
|
34
|
-
end.new(data[:delta])
|
36
|
+
@delta ||= BlocksDelta.new(data[:delta] || {})
|
37
|
+
end
|
38
|
+
|
39
|
+
def dump
|
40
|
+
{ delta: delta.dump }
|
35
41
|
end
|
36
42
|
|
37
43
|
def to_h
|
38
44
|
{ delta: delta.to_h }
|
39
45
|
end
|
40
|
-
end.new(@data[:blocks])
|
46
|
+
end.new(@data[:blocks] || {})
|
41
47
|
end
|
42
48
|
|
43
49
|
def to_h
|
@@ -47,6 +53,34 @@ module Lighstorm
|
|
47
53
|
blocks: blocks.to_h
|
48
54
|
}
|
49
55
|
end
|
56
|
+
|
57
|
+
def dump
|
58
|
+
result = Marshal.load(Marshal.dump(@data))
|
59
|
+
|
60
|
+
result = result.merge({ blocks: blocks.dump }) if @data[:blocks]
|
61
|
+
|
62
|
+
result
|
63
|
+
end
|
64
|
+
|
65
|
+
def minimum=(value)
|
66
|
+
protect!(value)
|
67
|
+
|
68
|
+
@minimum = value[:value]
|
69
|
+
|
70
|
+
@data[:minimum] = { milisatoshis: @minimum.milisatoshis }
|
71
|
+
|
72
|
+
minimum
|
73
|
+
end
|
74
|
+
|
75
|
+
def maximum=(value)
|
76
|
+
protect!(value)
|
77
|
+
|
78
|
+
@maximum = value[:value]
|
79
|
+
|
80
|
+
@data[:maximum] = { milisatoshis: @maximum.milisatoshis }
|
81
|
+
|
82
|
+
maximum
|
83
|
+
end
|
50
84
|
end
|
51
85
|
end
|
52
86
|
end
|
@@ -14,16 +14,25 @@ module Lighstorm
|
|
14
14
|
end
|
15
15
|
|
16
16
|
def fee
|
17
|
-
@fee ||=
|
17
|
+
@fee ||= Fee.new(self, @data ? @data[:fee] : {})
|
18
18
|
end
|
19
19
|
|
20
20
|
def htlc
|
21
|
-
@htlc ||= @data ?
|
21
|
+
@htlc ||= HTLC.new(@data ? @data[:htlc] : {})
|
22
22
|
end
|
23
23
|
|
24
24
|
def to_h
|
25
25
|
{ fee: fee.to_h, htlc: htlc.to_h }
|
26
26
|
end
|
27
|
+
|
28
|
+
def dump
|
29
|
+
result = Marshal.load(Marshal.dump(@data))
|
30
|
+
|
31
|
+
result = result.merge({ fee: fee.dump }) if @data && @data[:fee]
|
32
|
+
result = result.merge({ htlc: htlc.dump }) if @data && @data[:htlc]
|
33
|
+
|
34
|
+
result
|
35
|
+
end
|
27
36
|
end
|
28
37
|
end
|
29
38
|
end
|
@@ -9,12 +9,21 @@ require_relative '../errors'
|
|
9
9
|
module Lighstorm
|
10
10
|
module Models
|
11
11
|
class ChannelNode
|
12
|
+
include Protectable
|
13
|
+
|
14
|
+
attr_reader :state
|
15
|
+
|
12
16
|
def initialize(data, is_mine, transaction)
|
13
17
|
@data = data
|
18
|
+
@state = data[:state]
|
14
19
|
@is_mine = is_mine
|
15
20
|
@transaction = transaction
|
16
21
|
end
|
17
22
|
|
23
|
+
def active?
|
24
|
+
state == 'active'
|
25
|
+
end
|
26
|
+
|
18
27
|
def node
|
19
28
|
@node ||= Node.new(@data[:node])
|
20
29
|
end
|
@@ -30,13 +39,36 @@ module Lighstorm
|
|
30
39
|
end
|
31
40
|
|
32
41
|
def to_h
|
33
|
-
restult = { node: node.to_h }
|
42
|
+
restult = { state: state, node: node.to_h }
|
34
43
|
|
35
44
|
restult[:accounting] = accounting.to_h if @is_mine
|
36
45
|
restult[:policy] = policy.to_h if @data[:policy]
|
37
46
|
|
38
47
|
restult
|
39
48
|
end
|
49
|
+
|
50
|
+
def dump
|
51
|
+
result = Marshal.load(Marshal.dump(@data)).merge(
|
52
|
+
{
|
53
|
+
node: node.dump,
|
54
|
+
policy: policy.dump
|
55
|
+
}
|
56
|
+
)
|
57
|
+
|
58
|
+
result[:accounting] = accounting.dump if @is_mine
|
59
|
+
result.delete(:policy) if result[:policy].nil?
|
60
|
+
|
61
|
+
result
|
62
|
+
end
|
63
|
+
|
64
|
+
def state=(value)
|
65
|
+
protect!(value)
|
66
|
+
|
67
|
+
@state = value[:value]
|
68
|
+
@data[:state] = @state
|
69
|
+
|
70
|
+
state
|
71
|
+
end
|
40
72
|
end
|
41
73
|
end
|
42
74
|
end
|
@@ -2,10 +2,13 @@
|
|
2
2
|
|
3
3
|
require_relative '../../satoshis'
|
4
4
|
require_relative '../../errors'
|
5
|
+
require_relative '../../concerns/protectable'
|
5
6
|
|
6
7
|
module Lighstorm
|
7
8
|
module Models
|
8
9
|
class ChannelAccounting
|
10
|
+
include Protectable
|
11
|
+
|
9
12
|
def initialize(data, is_mine)
|
10
13
|
@data = data
|
11
14
|
@is_mine = is_mine
|
@@ -63,6 +66,20 @@ module Lighstorm
|
|
63
66
|
}
|
64
67
|
end
|
65
68
|
end
|
69
|
+
|
70
|
+
def dump
|
71
|
+
Marshal.load(Marshal.dump(@data))
|
72
|
+
end
|
73
|
+
|
74
|
+
def capacity=(value)
|
75
|
+
protect!(value)
|
76
|
+
|
77
|
+
@capacity = value[:value]
|
78
|
+
|
79
|
+
@data[:capacity][:milisatoshis] = @capacity.milisatoshis
|
80
|
+
|
81
|
+
capacity
|
82
|
+
end
|
66
83
|
end
|
67
84
|
end
|
68
85
|
end
|
data/models/edges/channel.rb
CHANGED
@@ -1,7 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require 'time'
|
4
|
-
require 'date'
|
5
4
|
|
6
5
|
require_relative '../../ports/grpc'
|
7
6
|
require_relative '../../adapters/edges/channel'
|
@@ -12,6 +11,7 @@ require_relative '../../components/cache'
|
|
12
11
|
require_relative '../nodes/node'
|
13
12
|
require_relative 'channel/accounting'
|
14
13
|
|
14
|
+
require_relative '../../controllers/channel/actions/apply_gossip'
|
15
15
|
require_relative '../connections/channel_node'
|
16
16
|
require_relative '../satoshis'
|
17
17
|
|
@@ -20,7 +20,7 @@ require_relative '../errors'
|
|
20
20
|
module Lighstorm
|
21
21
|
module Models
|
22
22
|
class Channel
|
23
|
-
attr_reader :data, :_key, :id
|
23
|
+
attr_reader :data, :_key, :id
|
24
24
|
|
25
25
|
def initialize(data)
|
26
26
|
@data = data
|
@@ -57,10 +57,16 @@ module Lighstorm
|
|
57
57
|
@data[:up_at]
|
58
58
|
end
|
59
59
|
|
60
|
-
def active
|
60
|
+
def active?
|
61
61
|
ensure_mine!
|
62
62
|
|
63
|
-
@data[:active
|
63
|
+
@data[:state] == 'active'
|
64
|
+
end
|
65
|
+
|
66
|
+
def state
|
67
|
+
ensure_mine!
|
68
|
+
|
69
|
+
@data[:state]
|
64
70
|
end
|
65
71
|
|
66
72
|
def accounting
|
@@ -126,7 +132,7 @@ module Lighstorm
|
|
126
132
|
id: id,
|
127
133
|
opened_at: opened_at,
|
128
134
|
up_at: up_at,
|
129
|
-
|
135
|
+
state: state,
|
130
136
|
exposure: exposure,
|
131
137
|
accounting: accounting.to_h,
|
132
138
|
partner: partner.to_h,
|
@@ -148,6 +154,34 @@ module Lighstorm
|
|
148
154
|
end
|
149
155
|
end
|
150
156
|
|
157
|
+
def dump
|
158
|
+
result = Marshal.load(Marshal.dump(@data)).merge(
|
159
|
+
{ partners: partners.map(&:dump) }
|
160
|
+
)
|
161
|
+
|
162
|
+
result[:accounting] = accounting.dump if known?
|
163
|
+
|
164
|
+
result
|
165
|
+
end
|
166
|
+
|
167
|
+
def self.adapt(gossip: nil, dump: nil)
|
168
|
+
raise TooManyArgumentsError, 'you need to pass gossip: or dump:, not both' if !gossip.nil? && !dump.nil?
|
169
|
+
|
170
|
+
raise ArgumentError, 'missing gossip: or dump:' if gossip.nil? && dump.nil?
|
171
|
+
|
172
|
+
if !gossip.nil?
|
173
|
+
new(Adapter::Channel.subscribe_channel_graph(gossip))
|
174
|
+
elsif !dump.nil?
|
175
|
+
new(dump)
|
176
|
+
end
|
177
|
+
end
|
178
|
+
|
179
|
+
def apply!(gossip:)
|
180
|
+
Controllers::Channel::ApplyGossip.perform(
|
181
|
+
self, gossip
|
182
|
+
)
|
183
|
+
end
|
184
|
+
|
151
185
|
private
|
152
186
|
|
153
187
|
def ensure_known!
|
data/models/edges/forward.rb
CHANGED
data/models/edges/payment.rb
CHANGED
data/models/errors.rb
CHANGED
@@ -6,6 +6,9 @@ module Lighstorm
|
|
6
6
|
|
7
7
|
class ToDoError < LighstormError; end
|
8
8
|
|
9
|
+
class TooManyArgumentsError < LighstormError; end
|
10
|
+
class IncoherentGossipError < LighstormError; end
|
11
|
+
class MissingGossipHandlerError < LighstormError; end
|
9
12
|
class MissingCredentialsError < LighstormError; end
|
10
13
|
class MissingMilisatoshisError < LighstormError; end
|
11
14
|
class MissingPartsPerMillionError < LighstormError; end
|
data/models/nodes/node.rb
CHANGED
@@ -1,6 +1,9 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require_relative '../../controllers/node/actions/apply_gossip'
|
3
4
|
require_relative '../../controllers/channel'
|
5
|
+
require_relative '../../adapters/nodes/node'
|
6
|
+
require_relative '../concerns/protectable'
|
4
7
|
require_relative '../errors'
|
5
8
|
|
6
9
|
require_relative 'node/platform'
|
@@ -8,6 +11,8 @@ require_relative 'node/platform'
|
|
8
11
|
module Lighstorm
|
9
12
|
module Models
|
10
13
|
class Node
|
14
|
+
include Protectable
|
15
|
+
|
11
16
|
attr_reader :data, :_key, :alias, :public_key, :color
|
12
17
|
|
13
18
|
def initialize(data)
|
@@ -46,6 +51,52 @@ module Lighstorm
|
|
46
51
|
|
47
52
|
result
|
48
53
|
end
|
54
|
+
|
55
|
+
def dump
|
56
|
+
result = Marshal.load(Marshal.dump(@data))
|
57
|
+
|
58
|
+
result[:platform] = platform.dump if @data[:platform]
|
59
|
+
|
60
|
+
result
|
61
|
+
end
|
62
|
+
|
63
|
+
def alias=(value)
|
64
|
+
protect!(value)
|
65
|
+
|
66
|
+
@alias = value[:value]
|
67
|
+
|
68
|
+
@data[:alias] = @alias
|
69
|
+
|
70
|
+
self.alias
|
71
|
+
end
|
72
|
+
|
73
|
+
def color=(value)
|
74
|
+
protect!(value)
|
75
|
+
|
76
|
+
@color = value[:value]
|
77
|
+
|
78
|
+
@data[:color] = @color
|
79
|
+
|
80
|
+
color
|
81
|
+
end
|
82
|
+
|
83
|
+
def self.adapt(gossip: nil, dump: nil)
|
84
|
+
raise TooManyArgumentsError, 'you need to pass gossip: or dump:, not both' if !gossip.nil? && !dump.nil?
|
85
|
+
|
86
|
+
raise ArgumentError, 'missing gossip: or dump:' if gossip.nil? && dump.nil?
|
87
|
+
|
88
|
+
if !gossip.nil?
|
89
|
+
new(Adapter::Node.subscribe_channel_graph(gossip))
|
90
|
+
elsif !dump.nil?
|
91
|
+
new(dump)
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
def apply!(gossip:)
|
96
|
+
Controllers::Node::ApplyGossip.perform(
|
97
|
+
self, gossip
|
98
|
+
)
|
99
|
+
end
|
49
100
|
end
|
50
101
|
end
|
51
102
|
end
|
data/models/payment_request.rb
CHANGED
@@ -11,7 +11,10 @@ module Lighstorm
|
|
11
11
|
def initialize(data)
|
12
12
|
@data = data
|
13
13
|
|
14
|
-
@_key = Digest::SHA256.hexdigest(
|
14
|
+
@_key = data[:_key] || Digest::SHA256.hexdigest(
|
15
|
+
data[:code] || "#{data[:code][:amount][:milisatoshis]}#{Time.now}"
|
16
|
+
)
|
17
|
+
|
15
18
|
@code = data[:code]
|
16
19
|
|
17
20
|
@address = data[:address]
|
@@ -34,7 +37,7 @@ module Lighstorm
|
|
34
37
|
def to_h
|
35
38
|
{ memo: memo, hash: hash }
|
36
39
|
end
|
37
|
-
end.new(@data[:description])
|
40
|
+
end.new(@data[:description] || {})
|
38
41
|
end
|
39
42
|
|
40
43
|
def secret
|
@@ -51,7 +54,7 @@ module Lighstorm
|
|
51
54
|
# Don't expose 'secret' by default: Security
|
52
55
|
{ hash: hash }
|
53
56
|
end
|
54
|
-
end.new(@data[:secret])
|
57
|
+
end.new(@data[:secret] || {})
|
55
58
|
end
|
56
59
|
|
57
60
|
def to_h
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Lighstorm
|
4
|
+
module Ports
|
5
|
+
class GRPCSession
|
6
|
+
attr_reader :calls
|
7
|
+
|
8
|
+
def initialize(grpc)
|
9
|
+
@grpc = grpc
|
10
|
+
@calls = {}
|
11
|
+
end
|
12
|
+
|
13
|
+
def handler(key, &block)
|
14
|
+
@calls[key] = 0 unless @calls.key?(key)
|
15
|
+
@calls[key] += 1
|
16
|
+
block.call
|
17
|
+
end
|
18
|
+
|
19
|
+
def method_missing(method_name, *args)
|
20
|
+
@grpc.send(method_name, *args) do |key, &block|
|
21
|
+
handler(key, &block)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
data/ports/grpc.rb
CHANGED
@@ -2,13 +2,15 @@
|
|
2
2
|
|
3
3
|
require_relative '../components/cache'
|
4
4
|
require_relative '../components/lnd'
|
5
|
+
require_relative 'grpc/session'
|
5
6
|
|
6
7
|
module Lighstorm
|
7
8
|
module Ports
|
8
9
|
class GRPC
|
9
|
-
def initialize(service, service_key)
|
10
|
+
def initialize(service, service_key, &handler)
|
10
11
|
@service = service
|
11
12
|
@service_key = service_key
|
13
|
+
@handler = handler
|
12
14
|
end
|
13
15
|
|
14
16
|
def call!(call_key, *args, &block)
|
@@ -17,12 +19,24 @@ module Lighstorm
|
|
17
19
|
if block.nil?
|
18
20
|
response = Cache.for(key, params: args&.first) do
|
19
21
|
LND.instance.middleware(key) do
|
20
|
-
@
|
22
|
+
if @handler
|
23
|
+
@handler.call(call_key) do
|
24
|
+
@service.send(call_key, *args, &block)
|
25
|
+
end
|
26
|
+
else
|
27
|
+
@service.send(call_key, *args, &block)
|
28
|
+
end
|
21
29
|
end
|
22
30
|
end
|
23
31
|
else
|
24
32
|
LND.instance.middleware(key) do
|
25
|
-
@
|
33
|
+
if @handler
|
34
|
+
@handler.call(call_key) do
|
35
|
+
@service.send(call_key, *args, &block)
|
36
|
+
end
|
37
|
+
else
|
38
|
+
@service.send(call_key, *args, &block)
|
39
|
+
end
|
26
40
|
end
|
27
41
|
end
|
28
42
|
end
|
@@ -41,7 +55,11 @@ module Lighstorm
|
|
41
55
|
@service.respond_to?(call_key) || super
|
42
56
|
end
|
43
57
|
|
44
|
-
def self.
|
58
|
+
def self.session
|
59
|
+
GRPCSession.new(self)
|
60
|
+
end
|
61
|
+
|
62
|
+
def self.method_missing(method_name, *_args, &block)
|
45
63
|
service_key = method_name.to_sym
|
46
64
|
|
47
65
|
unless LND.instance.client.respond_to?(service_key)
|
@@ -49,7 +67,7 @@ module Lighstorm
|
|
49
67
|
"Method `#{method_name}` doesn't exist."
|
50
68
|
end
|
51
69
|
|
52
|
-
new(LND.instance.client.send(service_key), service_key)
|
70
|
+
new(LND.instance.client.send(service_key), service_key, &block)
|
53
71
|
end
|
54
72
|
|
55
73
|
def self.respond_to_missing?(method_name, include_private = false)
|
data/static/spec.rb
CHANGED
@@ -4,7 +4,7 @@ module Lighstorm
|
|
4
4
|
module Static
|
5
5
|
SPEC = {
|
6
6
|
name: 'lighstorm',
|
7
|
-
version: '0.0.
|
7
|
+
version: '0.0.5',
|
8
8
|
author: 'icebaker',
|
9
9
|
summary: 'API for interacting with a Lightning Node.',
|
10
10
|
description: 'Lighstorm is an opinionated abstraction layer on top of the lnd-client for interacting with a Lightning Node.',
|