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