Spaces:
Runtime error
Runtime error
| package main | |
| import ( | |
| "fmt" | |
| "log" | |
| "net/http" | |
| "time" | |
| "github.com/arpinfidel/p2p-llm/auth" | |
| "github.com/arpinfidel/p2p-llm/config" | |
| "github.com/arpinfidel/p2p-llm/db" | |
| "github.com/arpinfidel/p2p-llm/peers" | |
| "github.com/arpinfidel/p2p-llm/proxy" | |
| _ "modernc.org/sqlite" // SQLite driver | |
| ) | |
| type Application struct { | |
| cfg *config.Config | |
| database db.Database | |
| authService *auth.AuthService | |
| jwtMiddleware *auth.JWTMiddleware | |
| proxyHandler *proxy.ProxyHandler | |
| peerHandler *peers.PeerHandler | |
| } | |
| func NewApplication() (*Application, error) { | |
| // Load configuration (ignore secrets since we only need keys) | |
| cfg, _, keys, err := config.Load() | |
| if err != nil { | |
| return nil, fmt.Errorf("failed to load configuration: %w", err) | |
| } | |
| // Initialize database | |
| database, err := db.NewSQLiteDB(cfg) | |
| if err != nil { | |
| return nil, fmt.Errorf("failed to initialize database: %w", err) | |
| } | |
| // Initialize repositories | |
| authRepo := db.NewSQLiteAPIKeyRepository(database) | |
| peerRepo := db.NewSQLitePeerRepository(database) | |
| // Create tables | |
| if err := db.CreateTables(database); err != nil { | |
| return nil, fmt.Errorf("failed to create tables: %w", err) | |
| } | |
| // Initialize auth service | |
| authService := auth.NewAuthService(keys.PrivateKey, authRepo) | |
| // Initialize JWT middleware | |
| jwtMiddleware := auth.NewJWTMiddleware(keys.PublicKey) | |
| proxyHandler := proxy.NewProxyHandler(cfg, peerRepo) | |
| // Initialize peer service and handler | |
| peerService := peers.NewPeerService(cfg, peerRepo) | |
| peerHandler := peers.NewPeerHandler(peerService) | |
| return &Application{ | |
| cfg: cfg, | |
| database: database, | |
| authService: authService, | |
| jwtMiddleware: jwtMiddleware, | |
| proxyHandler: proxyHandler, | |
| peerHandler: peerHandler, | |
| }, nil | |
| } | |
| func (app *Application) Close() { | |
| if app.database != nil { | |
| app.database.Close() | |
| } | |
| } | |
| func main() { | |
| app, err := NewApplication() | |
| if err != nil { | |
| log.Fatalf("Failed to initialize application: %v", err) | |
| } | |
| defer app.Close() | |
| // Create auth handler | |
| authHandler := auth.NewAuthHandler(app.authService) | |
| // Register routes | |
| RegisterRoutes(authHandler, app.peerHandler, app.jwtMiddleware, app.proxyHandler) | |
| // Start server | |
| log.Printf("Starting proxy server on %s", app.cfg.Port) | |
| server := &http.Server{ | |
| Addr: app.cfg.Port, | |
| ReadTimeout: 10 * time.Minute, | |
| WriteTimeout: 10 * time.Minute, | |
| } | |
| log.Fatal(server.ListenAndServe()) | |
| } | |