-- | Integration of "Freckle.App" tooling with "Network.Wai"
module Freckle.App.Wai
  ( noCacheMiddleware
  , denyFrameEmbeddingMiddleware

    -- * CORS
  , corsMiddleware

    -- * Logs
  , requestLogger
  , addThreadContextFromRequest

    -- * Tracing
  , newOpenTelemetryWaiMiddleware

    -- * Metrics
  , addThreadContextFromStatsTags
  , requestStats
  ) where

import Network.Wai
import Network.Wai.Middleware.AddHeaders
import Network.Wai.Middleware.Cors
import Network.Wai.Middleware.Logging
import Network.Wai.Middleware.OpenTelemetry
import Network.Wai.Middleware.Stats

-- | Middleware that adds header to disable all caching
noCacheMiddleware :: Middleware
noCacheMiddleware :: Middleware
noCacheMiddleware =
  [(ByteString, ByteString)] -> Middleware
addHeaders [(ByteString
"Cache-Control", ByteString
"no-cache, no-store, max-age=0, private")]

-- | Middleware that adds header to deny all frame embedding
denyFrameEmbeddingMiddleware :: Middleware
denyFrameEmbeddingMiddleware :: Middleware
denyFrameEmbeddingMiddleware = [(ByteString, ByteString)] -> Middleware
addHeaders [(ByteString
"X-Frame-Options", ByteString
"DENY")]