// Package mw provides transport-level HTTP middleware for Einherjar services. // // All middleware functions return func(http.Handler) http.Handler and are // composed via [server.WithMiddleware] or chi's Use method. // // # Recommended middleware order (outermost first) // // server.WithMiddleware( // mw.Recover(), // mw.RequestID(uuid.NewString), // mw.RequestLogger(logger), // mw.CORS([]string{"https://example.com"}), // ) // // # Rate limiting // // // In-memory (default — no extra dependencies) // store := mw.NewInMemoryRateLimiterStore(100, 20) // srv.Use(mw.IPRateLimit(store, logger)) // // // Distributed — swap store, middleware unchanged // store := valkeymw.NewRateLimiterStore(client, 100, 20) // srv.Use(mw.IPRateLimit(store, logger)) package mw