package eventstore import ( . "nostr.mleku.dev" "nostr.mleku.dev/codec/event" "nostr.mleku.dev/codec/eventid" "nostr.mleku.dev/codec/filter" ) // I is an types for a persistence layer for nostr events handled by a relay. type I interface { // Init is called at the very beginning by [Server.Start], after [Relay.Init], allowing a // storage to initialize its internal resources. The parameters can be used by the database // implementations to set custom parameters such as cache management and other relevant // parameters to the specific implementation. Init(path S) (err E) // Path returns the directory of the database. Path() S // Close must be called after you're done using the store, to free up resources and so on. Close() (err E) // Nuke deletes everything in the database. Nuke() (err E) // QueryEvents is invoked upon a client's REQ as described in NIP-01. it should return a // channel with the events as they're recovered from a database. the channel should be // closed after the events are all delivered. QueryEvents(c Ctx, f *filter.T) (evs []*event.T, err E) // CountEvents performs the same work as QueryEvents but instead of delivering the events // that were found it just returns the count of events CountEvents(c Ctx, f *filter.T) (count N, err E) // DeleteEvent is used to handle deletion events, as per NIP-09. DeleteEvent(c Ctx, ev *eventid.T) (err E) // SaveEvent is called once Relay.AcceptEvent reports true. SaveEvent(c Ctx, ev *event.T) (err E) }