Add support for Lightning Zaps #190

Merged
raucao merged 25 commits from feature/170-nostr_zaps into master 2024-06-03 16:44:49 +00:00
Showing only changes of commit eeb9b0a331 - Show all commits

View File

@@ -1,50 +1,50 @@
module NostrManager
class PublishEvent < NostrManagerService
def initialize(event:, relay_url:)
relay_name = relay_url.gsub(/^ws(s):\/\//, "")
relay_name = URI.parse(relay_url).host
@relay = Nostr::Relay.new(url: relay_url, name: relay_name)
@event = case event.class
when Nostr::Event
event
when Hash
Nostr::Event.new(**event.symbolize_keys)
# else
# TODO
# raise NotImplementedError
end
if event.is_a?(Nostr::Event)
@event = event
else
@event = Nostr::Event.new(**event.symbolize_keys)
end
@client = Nostr::Client.new
end
def call
client, relay, event = @client, @relay, @event
log_prefix = "[nostr][#{relay.name}]"
client.on :connect do
puts "Connected to #{relay.url}"
puts "Publishing #{event.id}..."
client.publish event
end
client.on :error do |e|
# TODO log relay URL/name
puts "Error: #{e}"
puts "Closing thread..."
Thread.exit
end
client.on :message do |m|
puts "Message: #{m}"
msg = JSON.parse(m) rescue []
if msg[0] == "OK" && msg[1] == event.id
puts "Event published. Closing thread..."
else
# TODO log relay URL/name
puts "Unexpected message from relay. Closing thread..."
thread = Thread.new do
client.on :connect do
puts "#{log_prefix} Publishing #{event.id}..."
client.publish event
end
Thread.exit
client.on :error do |e|
puts "#{log_prefix} Error: #{e}"
puts "#{log_prefix} Closing thread..."
thread.exit
end
client.on :message do |m|
puts "#{log_prefix} Message: #{m}"
msg = JSON.parse(m) rescue []
if msg[0] == "OK" && msg[1] == event.id
puts "#{log_prefix} Event published. Closing thread..."
else
puts "#{log_prefix} Unexpected message from relay. Closing thread..."
end
thread.exit
end
puts "#{log_prefix} Connecting to #{relay.url}..."
client.connect relay
end
puts "Connecting to #{relay.url}..."
client.connect relay
thread.join
end
end
end