package bootstrap import ( "time" "tm/pkg/config" ) // Config holds configuration for the web command type Config struct { Server config.ServerConfig Database config.DatabaseConfig Cache config.CacheConfig Logging config.LoggingConfig RateLimit config.RateLimitConfig Assets config.AssetsConfig Notification config.NotificationConfig Ollama config.OllamaConfig HCaptcha config.HCaptchaConfig GLM GLMConfig Scraper ScraperConfig TED TEDConfig UserAuth AuthConfig CustomerAuth AuthConfig DocumentScraper DocumentScraperConfig AISummarizer AISummarizerConfig } type GLMConfig struct { BaseURL string `env:"GLM_BASE_URL" envDefault:"https://api.z.ai"` APIKey string `env:"GLM_API_KEY" envDefault:""` Timeout time.Duration `env:"GLM_TIMEOUT" envDefault:"300s"` RetryAttempts int `env:"GLM_RETRY_ATTEMPTS" envDefault:"3"` RetryDelay time.Duration `env:"GLM_RETRY_DELAY" envDefault:"2s"` EnableLogging bool `env:"GLM_ENABLE_LOGGING" envDefault:"true"` UserAgent string `env:"GLM_USER_AGENT" envDefault:"Opplens-GLMSDK/1.0"` DefaultModel string `env:"GLM_DEFAULT_MODEL" envDefault:"glm-4.5"` DefaultMaxTokens int `env:"GLM_DEFAULT_MAX_TOKENS" envDefault:"4096"` DefaultTopP float64 `env:"GLM_DEFAULT_TOP_P" envDefault:"1.0"` DefaultTemperature float64 `env:"GLM_DEFAULT_TEMPERATURE" envDefault:"0.7"` DefaultFrequencyPenalty float64 `env:"GLM_DEFAULT_FREQUENCY_PENALTY" envDefault:"0"` DefaultPresencePenalty float64 `env:"GLM_DEFAULT_PRESENCE_PENALTY" envDefault:"0"` EnableStreaming bool `env:"GLM_ENABLE_STREAMING" envDefault:"false"` EnableThinking bool `env:"GLM_ENABLE_THINKING" envDefault:"false"` TranslateOptions TranslateOptions } type TranslateOptions struct { Model string `env:"GLM_TRANSLATION_MODEL" envDefault:"glm-4.5"` MaxTokens int `env:"GLM_TRANSLATION_MAX_TOKENS" envDefault:"2048"` Temperature float64 `env:"GLM_TRANSLATION_TEMPERATURE" envDefault:"0.3"` FrequencyPenalty float64 `env:"GLM_TRANSLATION_FREQUENCY_PENALTY" envDefault:"0.1"` PresencePenalty float64 `env:"GLM_TRANSLATION_PRESENCE_PENALTY" envDefault:"0.1"` TopP float64 `env:"GLM_TRANSLATION_TOP_P" envDefault:"1.0"` EnableThinking bool `env:"GLM_TRANSLATION_ENABLE_THINKING" envDefault:"false"` } type ScraperConfig struct { BaseURL string `env:"SCRAPER_BASE_URL"` Timeout time.Duration `env:"SCRAPER_TIMEOUT"` } // TEDConfig holds configuration for TED scraper (one-time scraping from admin panel) type TEDConfig struct { BaseURL string `env:"TED_BASE_URL" envDefault:"https://ted.europa.eu"` Timeout time.Duration `env:"TED_TIMEOUT" envDefault:"30s"` MaxRetries int `env:"TED_MAX_RETRIES" envDefault:"3"` RetryDelay time.Duration `env:"TED_RETRY_DELAY" envDefault:"5s"` UserAgent string `env:"TED_USER_AGENT" envDefault:"TM-TED-Scraper/1.0"` MaxConcurrency int `env:"TED_MAX_CONCURRENCY" envDefault:"5"` DownloadDir string `env:"TED_DOWNLOAD_DIR" envDefault:"./downloads"` CleanupAfter time.Duration `env:"TED_CLEANUP_AFTER" envDefault:"24h"` ScrapingInterval string `env:"TED_SCRAPING_INTERVAL" envDefault:"* * 10 * * *"` MaxNoticesPerDay int `env:"TED_MAX_NOTICES_PER_DAY" envDefault:"0"` AlertMail string `env:"ALERT_MAIL" envDefault:"alerts@opplens.com"` } type AuthConfig struct { JWT JWTConfig } type JWTConfig struct { AccessSecret string `env:"USER_AUTH_ACCESS_SECRET"` RefreshSecret string `env:"USER_AUTH_REFRESH_SECRET"` AccessExpiresIn int `env:"USER_AUTH_ACCESS_EXPIRES_IN"` RefreshExpiresIn int `env:"USER_AUTH_REFRESH_EXPIRES_IN"` } // DocumentScraperConfig holds configuration for the external document scraper service API type DocumentScraperConfig struct { APIKey string `env:"DOCUMENT_SCRAPER_API_KEY" envDefault:""` } // AISummarizerConfig holds configuration for the external AI summarizer service type AISummarizerConfig struct { // HTTP API settings APIBaseURL string `env:"AI_SUMMARIZER_API_BASE_URL" envDefault:""` APITimeout time.Duration `env:"AI_SUMMARIZER_API_TIMEOUT" envDefault:"120s"` APIRetryCount int `env:"AI_SUMMARIZER_API_RETRY_COUNT" envDefault:"2"` APIRetryDelay time.Duration `env:"AI_SUMMARIZER_API_RETRY_DELAY" envDefault:"3s"` DefaultLanguage string `env:"AI_SUMMARIZER_DEFAULT_LANGUAGE" envDefault:"en"` // MinIO storage settings MinioEndpoint string `env:"AI_SUMMARIZER_MINIO_ENDPOINT" envDefault:""` MinioAccessKey string `env:"AI_SUMMARIZER_MINIO_ACCESS_KEY" envDefault:""` MinioSecretKey string `env:"AI_SUMMARIZER_MINIO_SECRET_KEY" envDefault:""` MinioUseSSL bool `env:"AI_SUMMARIZER_MINIO_USE_SSL" envDefault:"false"` MinioRegion string `env:"AI_SUMMARIZER_MINIO_REGION" envDefault:"us-east-1"` MinioBucket string `env:"AI_SUMMARIZER_MINIO_BUCKET" envDefault:"opplens-documents"` }