109 lines
1.9 KiB
Go
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
|
|
}
|
|
}
|