Limit number of relays to publish zap receipts to
This commit is contained in:
		
							parent
							
								
									2d1ff29eca
								
							
						
					
					
						commit
						48041630ca
					
				| @ -169,6 +169,9 @@ class Setting < RailsSettings::Base | ||||
|   field :nostr_public_key, type: :string, | ||||
|     default: ENV["NOSTR_PUBLIC_KEY"].presence | ||||
| 
 | ||||
|   field :nostr_zaps_relay_limit, type: :integer, | ||||
|     default: 12 | ||||
| 
 | ||||
|   # | ||||
|   # OpenCollective | ||||
|   # | ||||
|  | ||||
| @ -7,8 +7,7 @@ module NostrManager | ||||
|     def call | ||||
|       tags = parse_tags(@zap.request_event.tags) | ||||
| 
 | ||||
|       # TODO limit to 15 or so relays | ||||
|       tags[:relays].each do |relay_url| | ||||
|       tags[:relays].take(Setting.nostr_zaps_relay_limit).each do |relay_url| | ||||
|         if @delayed | ||||
|           NostrPublishEventJob.perform_later(event: @zap.receipt, relay: relay_url) | ||||
|         else | ||||
|  | ||||
| @ -19,5 +19,15 @@ | ||||
|         title: "Public key", | ||||
|         description: "The corresponding public key of the accounts service" | ||||
|       ) %> | ||||
| <% end %> | ||||
| </ul> | ||||
| </section> | ||||
| <section> | ||||
| <h3>Zaps</h3> | ||||
| <ul role="list"> | ||||
|   <%= render FormElements::FieldsetResettableSettingComponent.new( | ||||
|         key: :nostr_zaps_relay_limit, | ||||
|         title: "Relay limit", | ||||
|         description: "The maximum number of relays to publish zap receipts to" | ||||
|       ) %> | ||||
| </ul> | ||||
| <% end %> | ||||
|  | ||||
| @ -6,11 +6,35 @@ RSpec.describe NostrManager::PublishZapReceipt, type: :model do | ||||
| 
 | ||||
|   describe "Default/delayed execution" do | ||||
|     it "publishes zap receipts to all requested relays" do | ||||
|       2.times do | ||||
|         expect(NostrPublishEventJob).to receive(:perform_later).and_return(true) | ||||
|       expect(NostrPublishEventJob).to receive(:perform_later) | ||||
|         .exactly(2).times.and_return(true) | ||||
| 
 | ||||
|       described_class.call(zap: zap) | ||||
|     end | ||||
| 
 | ||||
|     context "with a long relay list" do | ||||
|       before do | ||||
|         relays = zap.request["tags"].find { |t| t.first == "relays" } | ||||
|         [ | ||||
|           "wss://aegonstargaryen.example.com", "wss://visenya.example.com", | ||||
|           "wss://rhaenys.example.com", "wss://housevelaryon.example.com", | ||||
|           "wss://aemond.example.com", "wss://jaehaerys.example.com", | ||||
|           "wss://daenerys.example.com", "wss://corlys.example.com", | ||||
|           "wss://laenor.example.com", "wss://alysanne.example.com", | ||||
|           "wss://balerion.example.com", "wss://meraxes.example.com", | ||||
|           "wss://vhaegar.example.com", "wss://vermax.example.com", | ||||
|           "wss://caraxes.example.com" | ||||
|         ].each do |url| | ||||
|           relays << url | ||||
|         end | ||||
|       end | ||||
| 
 | ||||
|       it "limits publishing attempts to the first 12 relays" do | ||||
|         expect(NostrPublishEventJob).to receive(:perform_later) | ||||
|           .exactly(12).times.and_return(true) | ||||
| 
 | ||||
|         described_class.call(zap: zap) | ||||
|       end | ||||
|     end | ||||
|   end | ||||
| end | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user