Versions in this module Expand all Collapse all v0 v0.2.0 Sep 28, 2026 v0.1.0 Sep 28, 2026 Changes in this version + const MaxPeerIDBytes + const MaxTopicBytes + var ErrBusClosed = errors.New("event bus is closed") + var ErrEventBackpressure = errors.New("event subscription queue is full") + var ErrFanoutLimit = errors.New("event fan-out peer limit exceeded") + var ErrInvalidDirectoryConfig = errors.New("invalid peer directory configuration") + var ErrInvalidEvent = errors.New("invalid event") + var ErrInvalidMessage = errors.New("invalid direct message") + var ErrInvalidNode = errors.New("invalid meshbus node") + var ErrInvalidPeer = errors.New("invalid discovered peer") + var ErrInvalidPeerID = errors.New("invalid peer identity") + var ErrInvalidTopic = errors.New("invalid event topic") + var ErrMetadataLimit = errors.New("peer metadata exceeds bound") + var ErrNodeAlreadyStarted = errors.New("meshbus node is already started") + var ErrNodeClosed = errors.New("meshbus node is closed") + var ErrNodeNotStarted = errors.New("meshbus node is not started") + var ErrPeerLimit = errors.New("peer directory capacity reached") + var ErrSubscriptionLimit = errors.New("event subscription limit reached") + var ErrUnknownPeer = errors.New("unknown meshbus peer") + type Bus struct + func NewBus(config BusConfig) (*Bus, error) + func (b *Bus) Close() error + func (b *Bus) HandleMessage(_ context.Context, message ReceivedMessage) (bool, error) + func (b *Bus) Handler(next Handler) Handler + func (b *Bus) Publish(ctx context.Context, topic string, payload []byte, options PublishOptions) (PublishResult, error) + func (b *Bus) Subscribe(topic string, handler EventHandler) (*Subscription, error) + type BusConfig struct + DedupCapacity int + DefaultTTL time.Duration + FanoutConcurrency int + MaxFanoutPeers int + MaxPayloadBytes int + MaxSubscriptions int + MaxTTL time.Duration + OnHandlerError func(error) + Peers PeerSource + QueueCapacity int + Sender Sender + type DirectoryConfig struct + MaxMetadataBytes int + MaxPeers int + type Event struct + ContentType string + ID EventID + Payload []byte + PublishedAt time.Time + TTL time.Duration + Topic string + type EventHandler func(context.Context, ReceivedEvent) error + type EventID [16]byte + func (id EventID) String() string + type Handler func(context.Context, ReceivedMessage) error + type Node struct + func NewNode(config NodeConfig) (*Node, error) + func (n *Node) Authenticated(id PeerID) error + func (n *Node) Close() error + func (n *Node) Discovered(peer Peer) error + func (n *Node) DiscoveredPeers() []Peer + func (n *Node) Identity() PeerID + func (n *Node) Peers() []Peer + func (n *Node) Publish(ctx context.Context, topic string, payload []byte, options PublishOptions) (PublishResult, error) + func (n *Node) Send(ctx context.Context, peer PeerID, payload []byte) error + func (n *Node) SendMessage(ctx context.Context, peer PeerID, payload []byte) error + func (n *Node) Start(ctx context.Context) error + func (n *Node) Subscribe(topic string, handler EventHandler) (*Subscription, error) + type NodeConfig struct + Bus BusConfig + DirectHandler Handler + Directory DirectoryConfig + OnPeerError func(error) + PeerTTL time.Duration + SweepInterval time.Duration + Transport TransportFactory + type NodeTransport interface + Close func() error + Identity func() PeerID + SetPeerObserver func(PeerObserver) error + Start func(context.Context) error + type Peer struct + Hops uint8 + ID PeerID + LastSeen time.Time + Metadata map[string]string + type PeerDirectory struct + func NewPeerDirectory(config DirectoryConfig) (*PeerDirectory, error) + func (d *PeerDirectory) ExpireStale(olderThan time.Duration) int + func (d *PeerDirectory) Get(id PeerID) (Peer, bool) + func (d *PeerDirectory) IDs() []PeerID + func (d *PeerDirectory) Len() int + func (d *PeerDirectory) Peers() []Peer + func (d *PeerDirectory) Remember(peer Peer) error + func (d *PeerDirectory) Remove(id PeerID) + type PeerID struct + func NewPeerID(value []byte) (PeerID, error) + func (p PeerID) Bytes() []byte + func (p PeerID) IsZero() bool + func (p PeerID) String() string + type PeerObserver interface + Authenticated func(PeerID) error + Discovered func(Peer) error + type PeerSource interface + Peers func() []PeerID + type PeerSourceFunc func() []PeerID + func (f PeerSourceFunc) Peers() []PeerID + type PublishOptions struct + ContentType string + RemoteOnly bool + TTL time.Duration + type PublishResult struct + Attempted int + Delivered int + Failed map[PeerID]error + ID EventID + LocalDelivered bool + LocalError error + type ReceivedEvent struct + ReceivedAt time.Time + Sender PeerID + type ReceivedMessage struct + func NewReceivedMessage(sender []byte, payload []byte) (ReceivedMessage, error) + func (m ReceivedMessage) Payload() []byte + func (m ReceivedMessage) Sender() PeerID + type Sender interface + SendMessage func(context.Context, PeerID, []byte) error + type Subscription struct + func (s *Subscription) Close() error + func (s *Subscription) Done() <-chan struct{} + type TransportFactory func(Handler) (NodeTransport, error)