package main
import (
"context"
"fmt"
"os"
"os/signal"
nevo "github.com/nevo-sh/nevo-go"
)
func main() {
ctx, stop := signal.NotifyContext(context.Background(), os.Interrupt)
defer stop()
client := nevo.New(nevo.Config{Token: os.Getenv("NEVO_API_KEY")})
_ = client.OnEvent(func(ctx context.Context, event *nevo.Event) error {
fmt.Println(event.Type, event.ID, event.Channel.Label)
if e := event.Email(); e != nil {
fmt.Println("from:", e.From, "|", e.Subject)
}
return nil
})
if err := client.Run(ctx); err != nil && err != context.Canceled {
fmt.Fprintln(os.Stderr, "nevo:", err)
os.Exit(1)
}
}
Environment
export NEVO_API_KEY=nvo_live_...
go run handler.go
Handler rules
OnEventregisters a single handler. Call it once; branch onevent.Typeinside.- Returning
nil= event handled. Returning a non-nil error or exceedingHandlerTimeout(default 30s) is logged at warn; the stream keeps running. The event is not re-delivered to the SDK — replay from the dashboard if you need to.
Reconnects
Automatic. Transient network failures reconnect silently with exponential jittered backoff, capped at ReconnectMaxBackoff (default 30s). Run only returns on context cancellation or a terminal AuthError.