eventstore

package
v0.0.5 Latest Latest
Warning

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

Go to latest
Published: Jun 9, 2024 License: CC0-1.0, CC0-1.0, MIT Imports: 14 Imported by: 0

README

eventstore

interface specifications, utilities and basic implementations for nostr event stores

includes

  • badger implementation with space limiting garbage collector
  • layer2 two level storage scheme for secondary, authoritative large (shared) event stores
  • simple testing layer2 implementation that uses badger on both levels

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	ErrDupEvent       = errors.New("duplicate: event already exists")
	ErrEventNotExists = errors.New("unknown: event not known by any source of this relay")
)

Functions

func GetAddrTagElements

func GetAddrTagElements(tagValue string) (k uint16, pkb []byte, d string)

func TagSorter

func TagSorter(a, b tag.T) int

Types

type Cache

type Cache interface {
	Store
	GCCount() (deleteItems del.Items, err error)
	Delete(serials del.Items) (err error)
}

Cache is a sketch of an expanded interface that might be used for a size-constrained event store.

type RelayInterface

type RelayInterface interface {
	Publish(c context.T, evt *event.T) error
	QuerySync(c context.T, f *filter.T,
		opts ...subscriptionoption.I) ([]*event.T, error)
}

RelayInterface is a wrapper thing that unifies Store and nostr.Relay under a common API.

type RelayWrapper

type RelayWrapper struct {
	Store
}

func (RelayWrapper) Publish

func (w RelayWrapper) Publish(c context.T, evt *event.T) (err error)

func (RelayWrapper) QuerySync

func (w RelayWrapper) QuerySync(c context.T, f *filter.T,
	opts ...subscriptionoption.I) ([]*event.T, 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.
	// 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() (err 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(c context.T, f *filter.T) (ch event.C, err error)
	// 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 context.T, f *filter.T) (count int, err error)
	// DeleteEvent is used to handle deletion events, as per NIP-09.
	DeleteEvent(c context.T, ev *event.T) (err error)
	// SaveEvent is called once Relay.AcceptEvent reports true.
	SaveEvent(c context.T, ev *event.T) (err error)
}

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

Directories

Path Synopsis
del
keys
Package keys is a composable framework for constructing badger keys from fields of events.
Package keys is a composable framework for constructing badger keys from fields of events.
Package l2 is a testing data store that implements a level 2 cache for events with a badger eventstore.
Package l2 is a testing data store that implements a level 2 cache for events with a badger eventstore.

Jump to

Keyboard shortcuts

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