module NostrManager class FetchLatestEvent < NostrManagerService def initialize(relays:, filter:, max_events: 2) @relays = relays @filter = filter @max_events = max_events end def call received_events = 0 events = [] @relays.each do |url| event = NostrManager::FetchEvent.call(filter: @filter, relay_url: url) if event.present? events << event if events.none? { |e| e["id"] == event["id"] } received_events += 1 end if received_events >= @max_events Rails.logger.debug "Found #{@max_events} events, ending the search" break end end events.min_by { |e| e["created_at"] } end end end