module Network.Pusher (
Pusher(..)
, Credentials(..)
, AppID
, AppKey
, AppSecret
, getPusher
, getPusherWithHost
, getPusherWithConnManager
, Channel(..)
, ChannelName
, ChannelType(..)
, renderChannel
, renderChannelPrefix
, parseChannel
, Event
, EventData
, SocketID
, trigger
, channels
, channel
, users
, AuthString
, AuthSignature
, authenticatePresence
, authenticatePrivate
, PusherError(..)
) where
import Control.Monad.Trans.Except (ExceptT(ExceptT), runExceptT)
import Control.Monad.IO.Class (MonadIO, liftIO)
import qualified Data.Text as T
import Network.Pusher.Data
( AppID
, AppKey
, AppSecret
, Channel(..)
, ChannelName
, ChannelType(..)
, Credentials(..)
, Event
, EventData
, Pusher(..)
, SocketID
, getPusher
, getPusherWithHost
, getPusherWithConnManager
, parseChannel
, renderChannel
, renderChannelPrefix
)
import Network.Pusher.Error(PusherError(..))
import Network.Pusher.Internal.Auth
( AuthSignature
, AuthString
, authenticatePresence
, authenticatePrivate
)
import Network.Pusher.Internal.Util (getTime)
import Network.Pusher.Protocol
( ChannelInfoQuery
, ChannelsInfo
, ChannelsInfoQuery
, FullChannelInfo
, Users
)
import qualified Network.Pusher.Internal as Pusher
import qualified Network.Pusher.Internal.HTTP as HTTP
trigger
:: MonadIO m
=> Pusher
-> [Channel]
-> Event
-> EventData
-> Maybe SocketID
-> m (Either PusherError ())
trigger pusher chans event dat socketId =
liftIO $ runExceptT $ do
(requestParams, requestBody) <-
ExceptT $
Pusher.mkTriggerRequest pusher chans event dat socketId <$> getTime
HTTP.post (pusherConnectionManager pusher) requestParams requestBody
channels
:: MonadIO m
=> Pusher
-> Maybe ChannelType
-> T.Text
-> ChannelsInfoQuery
-> m (Either PusherError ChannelsInfo)
channels pusher channelTypeFilter prefixFilter attributes =
liftIO $ runExceptT $ do
requestParams <-
liftIO $
Pusher.mkChannelsRequest
pusher
channelTypeFilter
prefixFilter
attributes <$>
getTime
HTTP.get (pusherConnectionManager pusher) requestParams
channel
:: MonadIO m
=> Pusher
-> Channel
-> ChannelInfoQuery
-> m (Either PusherError FullChannelInfo)
channel pusher chan attributes =
liftIO $ runExceptT $ do
requestParams <-
liftIO $ Pusher.mkChannelRequest pusher chan attributes <$> getTime
HTTP.get (pusherConnectionManager pusher) requestParams
users
:: MonadIO m
=> Pusher
-> Channel
-> m (Either PusherError Users)
users pusher chan =
liftIO $ runExceptT $ do
requestParams <- liftIO $ Pusher.mkUsersRequest pusher chan <$> getTime
HTTP.get (pusherConnectionManager pusher) requestParams