WIP Persist zaps, create and send zap receipts
This commit is contained in:
25
app/services/nostr_manager/create_zap_receipt.rb
Normal file
25
app/services/nostr_manager/create_zap_receipt.rb
Normal file
@@ -0,0 +1,25 @@
|
||||
module NostrManager
|
||||
class CreateZapReceipt < NostrManagerService
|
||||
def initialize(zap:, paid_at:, preimage:)
|
||||
@zap, @paid_at, @preimage = zap, paid_at, preimage
|
||||
end
|
||||
|
||||
def call
|
||||
request_tags = parse_tags(@zap.request_event.tags)
|
||||
|
||||
site_user.create_event(
|
||||
kind: 9735,
|
||||
created_at: @paid_at,
|
||||
content: "",
|
||||
tags: [
|
||||
["p", request_tags[:p].first],
|
||||
["e", request_tags[:e]&.first],
|
||||
["a", request_tags[:a]&.first],
|
||||
["bolt11", @zap.payment_request],
|
||||
["preimage", @preimage],
|
||||
["description", @zap.request_event.to_json]
|
||||
].reject { |t| t[1].nil? }
|
||||
)
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -1,17 +1,17 @@
|
||||
module NostrManager
|
||||
class PublishEvent < NostrManagerService
|
||||
def initialize(event: nil, relay: nil)
|
||||
# @relay = relay
|
||||
@relay = Nostr::Relay.new(url: 'ws://nostr-relay:7777', name: 'strfry')
|
||||
keypair = Nostr::KeyPair.new(
|
||||
private_key: Nostr::PrivateKey.new(Setting.nostr_private_key),
|
||||
public_key: Nostr::PublicKey.new(Setting.nostr_public_key)
|
||||
)
|
||||
@user = Nostr::User.new(keypair: keypair)
|
||||
@event = @user.create_event(
|
||||
kind: Nostr::EventKind::TEXT_NOTE,
|
||||
content: "The time is #{Time.now.strftime('%H:%M:%S')}"
|
||||
)
|
||||
def initialize(event: nil, relay_url: nil)
|
||||
relay_name = relay_url.gsub(/^ws(s):\/\//, "")
|
||||
@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
|
||||
@client = Nostr::Client.new
|
||||
end
|
||||
|
||||
@@ -25,6 +25,7 @@ module NostrManager
|
||||
end
|
||||
|
||||
client.on :error do |e|
|
||||
# TODO log relay URL/name
|
||||
puts "Error: #{e}"
|
||||
puts "Closing thread..."
|
||||
Thread.exit
|
||||
@@ -36,6 +37,7 @@ module NostrManager
|
||||
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..."
|
||||
end
|
||||
Thread.exit
|
||||
|
||||
@@ -1,10 +1,20 @@
|
||||
module NostrManager
|
||||
class PublishZapReceipt < NostrManagerService
|
||||
def initialize(user:, zap_request:)
|
||||
@user, @zap_request = user, zap_request
|
||||
def initialize(zap:, delayed: true)
|
||||
@zap, @delayed = zap, delayed
|
||||
end
|
||||
|
||||
def call
|
||||
tags = parse_tags(@zap.request_event.tags)
|
||||
|
||||
# TODO limit to 15 or so relays
|
||||
tags[:relays].each do |relay_url|
|
||||
if @delayed
|
||||
NostrPublishEventJob.perform_later(event: @zap.receipt, relay: relay_url)
|
||||
else
|
||||
NostrManager::PublishEvent.call(event: @zap.receipt_event, relay: relay_url)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -8,4 +8,15 @@ class NostrManagerService < ApplicationService
|
||||
end
|
||||
out
|
||||
end
|
||||
|
||||
def site_keypair
|
||||
Nostr::KeyPair.new(
|
||||
private_key: Nostr::PrivateKey.new(Setting.nostr_private_key),
|
||||
public_key: Nostr::PublicKey.new(Setting.nostr_public_key)
|
||||
)
|
||||
end
|
||||
|
||||
def site_user
|
||||
Nostr::User.new(keypair: site_keypair)
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user