config

package
v0.90.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jan 20, 2026 License: AGPL-3.0 Imports: 8 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func ConfigDir added in v0.51.5

func ConfigDir() (string, error)

ConfigDir returns the path to the DeBros config directory (~/.orama).

func DecodeStrict added in v0.51.5

func DecodeStrict(r io.Reader, out interface{}) error

DecodeStrict decodes YAML from a reader and rejects any unknown fields. This ensures the YAML only contains recognized configuration keys.

func DefaultPath added in v0.51.5

func DefaultPath(component string) (string, error)

DefaultPath returns the path to the config file for the given component name. component should be e.g., "node.yaml", "gateway.yaml" It checks ~/.orama/data/, ~/.orama/configs/, and ~/.orama/ for backward compatibility. If component is already an absolute path, it returns it as-is.

func EnsureConfigDir added in v0.51.5

func EnsureConfigDir() (string, error)

EnsureConfigDir creates the config directory if it does not exist.

func ValidateSwarmKey added in v0.90.0

func ValidateSwarmKey(key string) error

ValidateSwarmKey validates that a swarm key is 64 hex characters. This is exported from the validate subpackage for backward compatibility.

Types

type ClientConfig

type ClientConfig struct {
	AppName        string        `yaml:"app_name"`
	DatabaseName   string        `yaml:"database_name"`
	BootstrapPeers []string      `yaml:"bootstrap_peers"`
	ConnectTimeout time.Duration `yaml:"connect_timeout"`
	RetryAttempts  int           `yaml:"retry_attempts"`
}

ClientConfig represents configuration for network clients

type Config

type Config struct {
	Node        NodeConfig        `yaml:"node"`
	Database    DatabaseConfig    `yaml:"database"`
	Discovery   DiscoveryConfig   `yaml:"discovery"`
	Security    SecurityConfig    `yaml:"security"`
	Logging     LoggingConfig     `yaml:"logging"`
	HTTPGateway HTTPGatewayConfig `yaml:"http_gateway"`
}

Config represents the main configuration for a network node

func DefaultConfig

func DefaultConfig() *Config

DefaultConfig returns a default configuration

func (*Config) ParseMultiaddrs

func (c *Config) ParseMultiaddrs() ([]multiaddr.Multiaddr, error)

ParseMultiaddrs converts string addresses to multiaddr objects

func (*Config) Validate added in v0.51.5

func (c *Config) Validate() []error

Validate performs comprehensive validation of the entire config. It aggregates all errors and returns them, allowing the caller to print all issues at once.

type DatabaseConfig

type DatabaseConfig struct {
	DataDir           string        `yaml:"data_dir"`
	ReplicationFactor int           `yaml:"replication_factor"`
	ShardCount        int           `yaml:"shard_count"`
	MaxDatabaseSize   int64         `yaml:"max_database_size"` // In bytes
	BackupInterval    time.Duration `yaml:"backup_interval"`

	// RQLite-specific configuration
	RQLitePort        int    `yaml:"rqlite_port"`         // RQLite HTTP API port
	RQLiteRaftPort    int    `yaml:"rqlite_raft_port"`    // RQLite Raft consensus port
	RQLiteJoinAddress string `yaml:"rqlite_join_address"` // Address to join RQLite cluster

	// RQLite node-to-node TLS encryption (for inter-node Raft communication)
	// See: https://rqlite.io/docs/guides/security/#encrypting-node-to-node-communication
	NodeCert     string `yaml:"node_cert"`      // Path to X.509 certificate for node-to-node communication
	NodeKey      string `yaml:"node_key"`       // Path to X.509 private key for node-to-node communication
	NodeCACert   string `yaml:"node_ca_cert"`   // Path to CA certificate (optional, uses system CA if not set)
	NodeNoVerify bool   `yaml:"node_no_verify"` // Skip certificate verification (for testing/self-signed certs)

	// Dynamic discovery configuration (always enabled)
	ClusterSyncInterval time.Duration `yaml:"cluster_sync_interval"` // default: 30s
	PeerInactivityLimit time.Duration `yaml:"peer_inactivity_limit"` // default: 24h
	MinClusterSize      int           `yaml:"min_cluster_size"`      // default: 1

	// Olric cache configuration
	OlricHTTPPort       int `yaml:"olric_http_port"`       // Olric HTTP API port (default: 3320)
	OlricMemberlistPort int `yaml:"olric_memberlist_port"` // Olric memberlist port (default: 3322)

	// IPFS storage configuration
	IPFS IPFSConfig `yaml:"ipfs"`
}

DatabaseConfig contains database-related configuration

type DiscoveryConfig

type DiscoveryConfig struct {
	BootstrapPeers    []string      `yaml:"bootstrap_peers"`    // Peer addresses to connect to
	DiscoveryInterval time.Duration `yaml:"discovery_interval"` // Discovery announcement interval
	BootstrapPort     int           `yaml:"bootstrap_port"`     // Default port for peer discovery
	HttpAdvAddress    string        `yaml:"http_adv_address"`   // HTTP advertisement address
	RaftAdvAddress    string        `yaml:"raft_adv_address"`   // Raft advertisement
	NodeNamespace     string        `yaml:"node_namespace"`     // Namespace for node identifiers
}

DiscoveryConfig contains peer discovery configuration

type HTTPGatewayConfig added in v0.72.0

type HTTPGatewayConfig struct {
	Enabled    bool                   `yaml:"enabled"`     // Enable HTTP gateway
	ListenAddr string                 `yaml:"listen_addr"` // Address to listen on (e.g., ":8080")
	NodeName   string                 `yaml:"node_name"`   // Node name for routing
	Routes     map[string]RouteConfig `yaml:"routes"`      // Service routes
	HTTPS      HTTPSConfig            `yaml:"https"`       // HTTPS/TLS configuration
	SNI        SNIConfig              `yaml:"sni"`         // SNI-based TCP routing configuration

	// Full gateway configuration (for API, auth, pubsub)
	ClientNamespace   string        `yaml:"client_namespace"`     // Namespace for network client
	RQLiteDSN         string        `yaml:"rqlite_dsn"`           // RQLite database DSN
	OlricServers      []string      `yaml:"olric_servers"`        // List of Olric server addresses
	OlricTimeout      time.Duration `yaml:"olric_timeout"`        // Timeout for Olric operations
	IPFSClusterAPIURL string        `yaml:"ipfs_cluster_api_url"` // IPFS Cluster API URL
	IPFSAPIURL        string        `yaml:"ipfs_api_url"`         // IPFS API URL
	IPFSTimeout       time.Duration `yaml:"ipfs_timeout"`         // Timeout for IPFS operations
}

HTTPGatewayConfig contains HTTP reverse proxy gateway configuration

type HTTPSConfig added in v0.72.0

type HTTPSConfig struct {
	Enabled       bool   `yaml:"enabled"`         // Enable HTTPS (port 443)
	Domain        string `yaml:"domain"`          // Primary domain (e.g., node-123.orama.network)
	AutoCert      bool   `yaml:"auto_cert"`       // Use Let's Encrypt for automatic certificate
	UseSelfSigned bool   `yaml:"use_self_signed"` // Use self-signed certificates (pre-generated)
	CertFile      string `yaml:"cert_file"`       // Path to certificate file (if not using auto_cert)
	KeyFile       string `yaml:"key_file"`        // Path to key file (if not using auto_cert)
	CacheDir      string `yaml:"cache_dir"`       // Directory for Let's Encrypt certificate cache
	HTTPPort      int    `yaml:"http_port"`       // HTTP port for ACME challenge (default: 80)
	HTTPSPort     int    `yaml:"https_port"`      // HTTPS port (default: 443)
	Email         string `yaml:"email"`           // Email for Let's Encrypt account
}

HTTPSConfig contains HTTPS/TLS configuration for the gateway

type IPFSConfig added in v0.69.13

type IPFSConfig struct {
	// ClusterAPIURL is the IPFS Cluster HTTP API URL (e.g., "http://localhost:9094")
	// If empty, IPFS storage is disabled for this node
	ClusterAPIURL string `yaml:"cluster_api_url"`

	// APIURL is the IPFS HTTP API URL for content retrieval (e.g., "http://localhost:5001")
	// If empty, defaults to "http://localhost:5001"
	APIURL string `yaml:"api_url"`

	// Timeout for IPFS operations
	// If zero, defaults to 60 seconds
	Timeout time.Duration `yaml:"timeout"`

	// ReplicationFactor is the replication factor for pinned content
	// If zero, defaults to 3
	ReplicationFactor int `yaml:"replication_factor"`

	// EnableEncryption enables client-side encryption before upload
	// Defaults to true
	EnableEncryption bool `yaml:"enable_encryption"`
}

IPFSConfig contains IPFS storage configuration

type LoggingConfig

type LoggingConfig struct {
	Level      string `yaml:"level"`       // debug, info, warn, error
	Format     string `yaml:"format"`      // json, console
	OutputFile string `yaml:"output_file"` // Empty for stdout
}

LoggingConfig contains logging configuration

type NodeConfig

type NodeConfig struct {
	ID              string   `yaml:"id"`               // Auto-generated if empty
	ListenAddresses []string `yaml:"listen_addresses"` // LibP2P listen addresses
	DataDir         string   `yaml:"data_dir"`         // Data directory
	MaxConnections  int      `yaml:"max_connections"`  // Maximum peer connections
	Domain          string   `yaml:"domain"`           // Domain for this node (e.g., node-1.orama.network)
}

NodeConfig contains node-specific configuration

type RouteConfig added in v0.72.0

type RouteConfig struct {
	PathPrefix string        `yaml:"path_prefix"` // URL path prefix (e.g., "/rqlite/http")
	BackendURL string        `yaml:"backend_url"` // Backend service URL
	Timeout    time.Duration `yaml:"timeout"`     // Request timeout
	WebSocket  bool          `yaml:"websocket"`   // Support WebSocket upgrades
}

RouteConfig defines a single reverse proxy route

type SNIConfig added in v0.72.0

type SNIConfig struct {
	Enabled    bool              `yaml:"enabled"`     // Enable SNI-based TCP routing
	ListenAddr string            `yaml:"listen_addr"` // Address to listen on (e.g., ":7001")
	Routes     map[string]string `yaml:"routes"`      // SNI hostname -> backend address mapping
	CertFile   string            `yaml:"cert_file"`   // Path to certificate file
	KeyFile    string            `yaml:"key_file"`    // Path to key file
}

SNIConfig contains SNI-based TCP routing configuration for port 7001

type SecurityConfig

type SecurityConfig struct {
	EnableTLS       bool   `yaml:"enable_tls"`
	PrivateKeyFile  string `yaml:"private_key_file"`
	CertificateFile string `yaml:"certificate_file"`
}

SecurityConfig contains security-related configuration

type ValidationError added in v0.51.5

type ValidationError = validate.ValidationError

ValidationError represents a single validation error with context. This is exported from the validate subpackage for backward compatibility.

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL