config.go raw

   1  package main
   2  
   3  import (
   4  	"os"
   5  	"strings"
   6  
   7  	"go-simpler.org/env"
   8  	"next.orly.dev/pkg/lol/chk"
   9  	"next.orly.dev/pkg/lol/log"
  10  )
  11  
  12  // Config holds the relay group service configuration.
  13  type Config struct {
  14  	// Listen is the gRPC server listen address
  15  	Listen string `env:"ORLY_SYNC_RELAYGROUP_LISTEN" default:"127.0.0.1:50063" usage:"gRPC server listen address"`
  16  
  17  	// LogLevel is the logging level
  18  	LogLevel string `env:"ORLY_SYNC_RELAYGROUP_LOG_LEVEL" default:"info" usage:"log level (trace, debug, info, warn, error)"`
  19  
  20  	// Database configuration
  21  	DBType       string `env:"ORLY_SYNC_RELAYGROUP_DB_TYPE" default:"grpc" usage:"database type: grpc or badger"`
  22  	GRPCDBServer string `env:"ORLY_SYNC_RELAYGROUP_DB_SERVER" default:"127.0.0.1:50051" usage:"gRPC database server address"`
  23  	DataDir      string `env:"ORLY_DATA_DIR" usage:"database data directory (for badger mode)"`
  24  
  25  	// Relay group configuration
  26  	AdminNpubsRaw string `env:"ORLY_SYNC_RELAYGROUP_ADMINS" usage:"comma-separated admin npubs"`
  27  
  28  	// Parsed admin npubs
  29  	AdminNpubs []string
  30  }
  31  
  32  // loadConfig loads configuration from environment variables.
  33  func loadConfig() *Config {
  34  	cfg := &Config{}
  35  	if err := env.Load(cfg, nil); chk.E(err) {
  36  		log.E.F("failed to load config: %v", err)
  37  		os.Exit(1)
  38  	}
  39  
  40  	// Parse admin npubs from comma-separated string
  41  	if cfg.AdminNpubsRaw != "" {
  42  		cfg.AdminNpubs = strings.Split(cfg.AdminNpubsRaw, ",")
  43  		for i, p := range cfg.AdminNpubs {
  44  			cfg.AdminNpubs[i] = strings.TrimSpace(p)
  45  		}
  46  	}
  47  
  48  	return cfg
  49  }
  50