heroagent/pkg/clients/ mycelium
2025-04-23 04:18:28 +02:00
..
cmd ... 2025-04-23 04:18:28 +02:00
examples ... 2025-04-23 04:18:28 +02:00
client.go ... 2025-04-23 04:18:28 +02:00
README.md ... 2025-04-23 04:18:28 +02:00

Mycelium Client

A Go client for the Mycelium overlay network. This package allows you to connect to a Mycelium node via its HTTP API and perform operations like sending/receiving messages and managing peers.

Features

  • Send and receive messages through the Mycelium network
  • List, add, and remove peers
  • View network routes
  • Query node information
  • Reply to received messages
  • Check message status

Usage

Basic Client Usage

// Create a new client with default configuration (localhost:8989)
client := mycelium_client.NewClient("")

// Create a context with timeout
ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
defer cancel()

// Get node info
info, err := client.GetNodeInfo(ctx)
if err != nil {
    log.Fatal(err)
}
fmt.Printf("Node subnet: %s\n", info.NodeSubnet)

// List peers
peers, err := client.ListPeers(ctx)
if err != nil {
    log.Fatal(err)
}
fmt.Printf("Found %d peers\n", len(peers))

// Send a message
dest := mycelium_client.MessageDestination{
    PK: "publicKeyHexString", // or IP: "myceliumIPv6Address"
}
payload := []byte("Hello from mycelium client!")
waitForReply := false
replyTimeout := 0 // not used when waitForReply is false
_, msgID, err := client.SendMessage(ctx, dest, payload, "example.topic", waitForReply, replyTimeout)
if err != nil {
    log.Fatal(err)
}
fmt.Printf("Message sent with ID: %s\n", msgID)

// Receive a message with 10 second timeout
msg, err := client.ReceiveMessage(ctx, 10, "", false)
if err != nil {
    log.Fatal(err)
}
if msg != nil {
    payload, _ := msg.Decode()
    fmt.Printf("Received message: %s\n", string(payload))
}

Command Line Tool

The package includes a command-line tool for interacting with a Mycelium node:

Usage: mycelium-client [flags] COMMAND [args...]

Flags:
  -api string
        Mycelium API URL (default "http://localhost:8989")
  -json
        Output in JSON format
  -timeout int
        Client timeout in seconds (default 30)

Commands:
  info                        Get node information
  peers                       List connected peers
  add-peer ENDPOINT           Add a new peer
  del-peer ENDPOINT           Remove a peer
  send [--pk=PK|--ip=IP] [--topic=TOPIC] [--wait] [--reply-timeout=N] MESSAGE
                              Send a message to a destination
  receive [--topic=TOPIC] [--timeout=N]
                              Receive a message
  reply ID [--topic=TOPIC] MESSAGE
                              Reply to a message
  status ID                   Get status of a sent message
  routes [selected|fallback]  List routes (default: selected)

Building the Command Line Tool

cd pkg/mycelium_client/cmd
go build -o mycelium-client

Examples

See the examples directory for full usage examples.

Notes

  • This client requires a running Mycelium node accessible via HTTP API.
  • The default API endpoint is http://localhost:8989.
  • Messages are automatically encoded/decoded from base64 when working with the API.