ephemeral.go raw
1 package routing
2
3 import (
4 "next.orly.dev/pkg/nostr/encoders/event"
5 "next.orly.dev/pkg/nostr/encoders/kind"
6 "next.orly.dev/pkg/lol/log"
7 )
8
9 // Publisher abstracts event delivery to subscribers.
10 type Publisher interface {
11 // Deliver sends an event to all matching subscribers.
12 Deliver(ev *event.E)
13 }
14
15 // IsEphemeral checks if a kind is ephemeral (20000-29999).
16 func IsEphemeral(k uint16) bool {
17 return kind.IsEphemeral(k)
18 }
19
20 // MakeEphemeralHandler creates a handler for ephemeral events.
21 // Ephemeral events (kinds 20000-29999):
22 // - Are NOT persisted to the database
23 // - Are immediately delivered to subscribers
24 func MakeEphemeralHandler(publisher Publisher) Handler {
25 return func(ev *event.E, authedPubkey []byte) Result {
26 log.D.F("ephemeral handler received event kind %d, id %0x", ev.Kind, ev.ID[:8])
27 // Clone and deliver immediately without persistence
28 cloned := ev.Clone()
29 go publisher.Deliver(cloned)
30 return HandledResult("")
31 }
32 }
33