module Network.Eventsourced.Lib (application, serverEvent, createCorsHeaders) where import System.IO.Error (tryIOError) import Network.Wai (Middleware, Application) import Network.Wai.EventSource (ServerEvent(..), eventSourceAppIO) import Network.Wai.Middleware.AddHeaders (addHeaders) import Blaze.ByteString.Builder.Char8 (fromString) import Data.ByteString.Char8 (pack) import Data.ByteString (ByteString) serverEvent :: Either IOError String -> ServerEvent serverEvent (Left _) = CloseEvent serverEvent (Right s) = ServerEvent Nothing Nothing [ fromString s ] eventFromLine :: IO ServerEvent eventFromLine = do input <- tryIOError getLine return $ serverEvent input createCorsHeaders :: String -> [(ByteString, ByteString)] createCorsHeaders s = [(pack "Access-Control-Allow-Origin", pack s)] addCorsHeaders :: String -> Middleware addCorsHeaders s = addHeaders $ createCorsHeaders s application :: String -> Application application allowOrigin = addCorsHeaders allowOrigin $ eventSourceAppIO eventFromLine