Files
2026-06-28 00:09:32 +02:00

109 lines
1.9 KiB
Go

package nodebuilder
import (
"errors"
p2panda "git.coopcloud.tech/decentral1se/p2panda-go"
)
type Option func(*p2panda.NodeBuilder) error
// New creates a new p2panda Node.
func New(options ...Option) (*p2panda.Node, error) {
var err error
nodeBuilder := p2panda.NewNodeBuilder()
defer nodeBuilder.Destroy()
for _, opt := range options {
if optErr := opt(nodeBuilder); optErr != nil {
err = errors.Join(err, optErr)
}
}
node, spawnErr := nodeBuilder.Spawn()
if spawnErr != nil {
err = errors.Join(err, spawnErr)
}
return node, err
}
func WithSigningKey(signKey *p2panda.SigningKey) Option {
return func(n *p2panda.NodeBuilder) error {
if err := n.SigningKey(signKey); err != nil {
return err
}
return nil
}
}
func WithDatabaseUrl(databaseUrl string) Option {
return func(n *p2panda.NodeBuilder) error {
if err := n.DatabaseUrl(databaseUrl); err != nil {
return err
}
return nil
}
}
func WithNetworkId(id string) Option {
return func(n *p2panda.NodeBuilder) error {
networkId, err := p2panda.NetworkIdFromHex(id)
if err != nil {
return err
}
if err := n.NetworkId(networkId); err != nil {
return err
}
return nil
}
}
func WithRelayUrl(url string) Option {
return func(n *p2panda.NodeBuilder) error {
relayUrl, err := p2panda.RelayUrlFromStr(url)
if err != nil {
return err
}
if err := n.RelayUrl(relayUrl); err != nil {
return err
}
return nil
}
}
func WithBootstrap(verifyKey, relayUrl string) Option {
return func(n *p2panda.NodeBuilder) error {
vk, err := p2panda.VerifyingKeyFromHex(verifyKey)
if err != nil {
return err
}
r, err := p2panda.RelayUrlFromStr(relayUrl)
if err != nil {
return err
}
if err := n.Bootstrap(vk, r); err != nil {
return err
}
return nil
}
}
func WithMdnsMode(mode p2panda.MdnsDiscoveryMode) Option {
return func(n *p2panda.NodeBuilder) error {
if err := n.MdnsMode(mode); err != nil {
return err
}
return nil
}
}