eventstore

package module
v0.16.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jan 20, 2025 License: Unlicense Imports: 4 Imported by: 46

README

eventstore

A collection of reusable database connectors, wrappers and schemas that store Nostr events and expose a simple Go interface:

type Store interface {
	// Init is called at the very beginning by [Server.Start], after [Relay.Init],
	// allowing a storage to initialize its internal resources.
	Init() error

	// Close must be called after you're done using the store, to free up resources and so on.
	Close()

	// 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(context.Context, nostr.Filter) (chan *nostr.Event, error)

	// DeleteEvent is used to handle deletion events, as per NIP-09.
	DeleteEvent(context.Context, *nostr.Event) error

	// SaveEvent is called once Relay.AcceptEvent reports true.
	SaveEvent(context.Context, *nostr.Event) error
}

Go Reference Run Tests

command-line tool

There is an eventstore command-line tool that can be used to query these databases directly.

Documentation

Index

Constants

This section is empty.

Variables

View Source
var ErrDupEvent = errors.New("duplicate: event already exists")

Functions

func IsNegentropySession added in v0.13.0

func IsNegentropySession(ctx context.Context) bool

func SetNegentropy added in v0.13.0

func SetNegentropy(ctx context.Context) context.Context

Types

type Counter added in v0.7.2

type Counter interface {
	CountEvents(context.Context, nostr.Filter) (int64, error)
}

type RelayWrapper

type RelayWrapper struct {
	Store
}

func (RelayWrapper) Publish

func (w RelayWrapper) Publish(ctx context.Context, evt nostr.Event) error

func (RelayWrapper) QuerySync

func (w RelayWrapper) QuerySync(ctx context.Context, filter nostr.Filter) ([]*nostr.Event, error)

type Store

type Store interface {
	// Init is called at the very beginning by [Server.Start], after [Relay.Init],
	// allowing a storage to initialize its internal resources.
	Init() error

	// Close must be called after you're done using the store, to free up resources and so on.
	Close()

	// QueryEvents 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(context.Context, nostr.Filter) (chan *nostr.Event, error)
	// DeleteEvent just deletes an event, no side-effects.
	DeleteEvent(context.Context, *nostr.Event) error
	// SaveEvent just saves an event, no side-effects.
	SaveEvent(context.Context, *nostr.Event) error
	// ReplaceEvent atomically replaces a replaceable or addressable event.
	// Conceptually it is like a Query->Delete->Save, but streamlined.
	ReplaceEvent(context.Context, *nostr.Event) error
}

Store is a persistence layer for nostr events handled by a relay.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL