library/mobile/api.go
// Package gowaku implements gomobile bindings for go-waku. Contains a set of functions that
// are exported when go-waku is exported as libraries for mobile devices
package gowaku
import (
"github.com/waku-org/go-waku/library"
"github.com/waku-org/go-waku/waku/v2/protocol"
)
// NewNode initializes a waku node.
// Receives a JSON string containing the configuration, and use default values for those config items not specified
// Returns an instance id
func NewNode(instanceID uint, configJSON string) string {
instance := library.Init()
err := library.NewNode(instance, configJSON)
if err != nil {
_ = library.Free(instance)
}
return prepareJSONResponse(instance.ID, err)
}
// Start starts the waku node
func Start(instanceID uint) string {
instance, err := library.GetInstance(instanceID)
if err != nil {
return makeJSONResponse(err)
}
err = library.Start(instance)
return makeJSONResponse(err)
}
// Stop stops a waku node
func Stop(instanceID uint) string {
instance, err := library.GetInstance(instanceID)
if err != nil {
return makeJSONResponse(err)
}
err = library.Stop(instance)
return makeJSONResponse(err)
}
// Release resources allocated to a waku node
func Free(instanceID uint) string {
instance, err := library.GetInstance(instanceID)
if err != nil {
return makeJSONResponse(err)
}
err = library.Free(instance)
return makeJSONResponse(err)
}
// IsStarted is used to determine is a node is started or not
func IsStarted(instanceID uint) string {
instance, err := library.GetInstance(instanceID)
if err != nil {
return makeJSONResponse(err)
}
return prepareJSONResponse(library.IsStarted(instance), nil)
}
// PeerID is used to obtain the peer ID of the waku node
func PeerID(instanceID uint) string {
instance, err := library.GetInstance(instanceID)
if err != nil {
return makeJSONResponse(err)
}
peerID, err := library.PeerID(instance)
return prepareJSONResponse(peerID, err)
}
// ListenAddresses returns the multiaddresses the wakunode is listening to
func ListenAddresses(instanceID uint) string {
instance, err := library.GetInstance(instanceID)
if err != nil {
return makeJSONResponse(err)
}
addresses, err := library.ListenAddresses(instance)
return prepareJSONResponse(addresses, err)
}
// AddPeer adds a node multiaddress and protocol to the wakunode peerstore
func AddPeer(instanceID uint, address string, protocolID string) string {
instance, err := library.GetInstance(instanceID)
if err != nil {
return makeJSONResponse(err)
}
peerID, err := library.AddPeer(instance, address, protocolID)
return prepareJSONResponse(peerID, err)
}
// Connect is used to connect to a peer at multiaddress. if ms > 0, cancel the function execution if it takes longer than N milliseconds
func Connect(instanceID uint, address string, ms int) string {
instance, err := library.GetInstance(instanceID)
if err != nil {
return makeJSONResponse(err)
}
err = library.Connect(instance, address, ms)
return makeJSONResponse(err)
}
// ConnectPeerID is usedd to connect to a known peer by peerID. if ms > 0, cancel the function execution if it takes longer than N milliseconds
func ConnectPeerID(instanceID uint, peerID string, ms int) string {
instance, err := library.GetInstance(instanceID)
if err != nil {
return makeJSONResponse(err)
}
err = library.ConnectPeerID(instance, peerID, ms)
return makeJSONResponse(err)
}
// Disconnect closes a connection to a known peer by peerID
func Disconnect(instanceID uint, peerID string) string {
instance, err := library.GetInstance(instanceID)
if err != nil {
return makeJSONResponse(err)
}
err = library.Disconnect(instance, peerID)
return makeJSONResponse(err)
}
// PeerCnt returns the number of connected peers
func PeerCnt(instanceID uint) string {
instance, err := library.GetInstance(instanceID)
if err != nil {
return makeJSONResponse(err)
}
peerCnt, err := library.PeerCnt(instance)
return prepareJSONResponse(peerCnt, err)
}
// ContentTopic creates a content topic string according to RFC 23
func ContentTopic(applicationName string, applicationVersion string, contentTopicName string, encoding string) string {
contentTopic, _ := protocol.NewContentTopic(applicationName, applicationVersion, contentTopicName, encoding)
return contentTopic.String()
}
// DefaultPubsubTopic returns the default pubsub topic used in waku2: /waku/2/default-waku/proto
func DefaultPubsubTopic() string {
return library.DefaultPubsubTopic()
}
// Peers retrieves the list of peers known by the waku node
func Peers(instanceID uint) string {
instance, err := library.GetInstance(instanceID)
if err != nil {
return makeJSONResponse(err)
}
peers, err := library.Peers(instance)
return prepareJSONResponse(peers, err)
}