51 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			51 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
module NostrManager
 | 
						|
  class PublishEvent < NostrManagerService
 | 
						|
    def initialize(event:, relay_url:)
 | 
						|
      relay_name = URI.parse(relay_url).host
 | 
						|
      @relay = Nostr::Relay.new(url: relay_url, name: relay_name)
 | 
						|
 | 
						|
      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}]"
 | 
						|
 | 
						|
      thread = Thread.new do
 | 
						|
        client.on :connect do
 | 
						|
          puts "#{log_prefix} Publishing #{event.id}..."
 | 
						|
          client.publish event
 | 
						|
        end
 | 
						|
 | 
						|
        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 && msg[2]
 | 
						|
            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
 | 
						|
 | 
						|
      thread.join
 | 
						|
    end
 | 
						|
  end
 | 
						|
end
 |