Copyright | (c) Will Sewell 2016 |
---|---|
License | MIT |
Maintainer | [email protected] |
Stability | experimental |
Safe Haskell | None |
Language | Haskell2010 |
Network.Pusher
Contents
Description
Exposes the functions necessary for interacting with the Pusher HTTP API, as well as functions for generating auth signatures for private and presence channels.
First create a Pusher
data structure with your Pusher Credentials
, and then
call the functions defined in this module to make the HTTP requests.
If any of the requests fail, the return values of the functions will result in
a Left
PusherError
when run.
An example of how you would use these functions:
let credentials = Credentials { credentialsAppID = 123 , credentialsAppKey = wrd12344rcd234 , credentialsAppSecret = 124df34d545v } pusher <- getPusher credentials result <- trigger pusher [Channel Public "my-channel"] "my-event" "my-data" Nothing case result of Left e -> error e Right resp -> print resp
There is a simple working example in the example/ directory.
See https://pusher.com/docs/rest_api for more detail on the HTTP requests.
- data Pusher = Pusher {}
- data Credentials = Credentials {}
- type AppID = Integer
- type AppKey = ByteString
- type AppSecret = ByteString
- getPusher :: MonadIO m => Credentials -> m Pusher
- getPusherWithHost :: MonadIO m => Text -> Credentials -> m Pusher
- getPusherWithConnManager :: Manager -> Maybe Text -> Credentials -> Pusher
- data Channel = Channel {}
- type ChannelName = Text
- data ChannelType
- renderChannel :: Channel -> Text
- renderChannelPrefix :: ChannelType -> Text
- parseChannel :: Text -> Channel
- type Event = Text
- type EventData = Text
- type SocketID = Text
- trigger :: MonadIO m => Pusher -> [Channel] -> Event -> EventData -> Maybe SocketID -> m (Either PusherError ())
- channels :: MonadIO m => Pusher -> Maybe ChannelType -> Text -> ChannelsInfoQuery -> m (Either PusherError ChannelsInfo)
- channel :: MonadIO m => Pusher -> Channel -> ChannelInfoQuery -> m (Either PusherError FullChannelInfo)
- users :: MonadIO m => Pusher -> Channel -> m (Either PusherError Users)
- type AuthString = ByteString
- type AuthSignature = ByteString
- authenticatePresence :: ToJSON a => Credentials -> SocketID -> Channel -> a -> AuthSignature
- authenticatePrivate :: Credentials -> SocketID -> Channel -> AuthSignature
- data PusherError
Data types
Pusher config type
All the required configuration needed to interact with the API.
Constructors
Pusher | |
Fields |
data Credentials Source #
The credentials for the current app.
Constructors
Credentials | |
Fields |
Instances
type AppKey = ByteString Source #
type AppSecret = ByteString Source #
getPusher :: MonadIO m => Credentials -> m Pusher Source #
Use this to get an instance Pusher. This will fill in the host and path automatically.
getPusherWithHost :: MonadIO m => Text -> Credentials -> m Pusher Source #
Get a Pusher instance that uses a specific API endpoint.
getPusherWithConnManager :: Manager -> Maybe Text -> Credentials -> Pusher Source #
Get a Pusher instance with a given connection manager. This can be useful if you want to share a connection with your application code.
Channels
The channel name (not including the channel type prefix) and its type.
Constructors
Channel | |
Fields |
type ChannelName = Text Source #
renderChannel :: Channel -> Text Source #
parseChannel :: Text -> Channel Source #
Convert string representation, e.g. private-chan into the datatype
Events
HTTP Requests
Trigger events
Arguments
:: MonadIO m | |
=> Pusher | |
-> [Channel] | The list of channels to trigger to |
-> Event | |
-> EventData | Often encoded JSON |
-> Maybe SocketID | An optional socket ID of a connection you wish to exclude |
-> m (Either PusherError ()) |
Trigger an event to one or more channels.
Channel queries
Arguments
:: MonadIO m | |
=> Pusher | |
-> Maybe ChannelType | Filter by the type of channel |
-> Text | A channel prefix you wish to filter on |
-> ChannelsInfoQuery | Data you wish to query for, currently just the user count |
-> m (Either PusherError ChannelsInfo) | The returned data |
Query a list of channels for information.
Arguments
:: MonadIO m | |
=> Pusher | |
-> Channel | |
-> ChannelInfoQuery | Can query user count and also subscription count (if enabled) |
-> m (Either PusherError FullChannelInfo) |
Query for information on a single channel.
users :: MonadIO m => Pusher -> Channel -> m (Either PusherError Users) Source #
Get a list of users in a presence channel.
Authentication
type AuthString = ByteString Source #
The bytestring to sign with the app secret to create a signature from.
type AuthSignature = ByteString Source #
A Pusher auth signature.
authenticatePresence :: ToJSON a => Credentials -> SocketID -> Channel -> a -> AuthSignature Source #
Generate an auth signature of the form "app_key:auth_sig" for a user of a presence channel.
authenticatePrivate :: Credentials -> SocketID -> Channel -> AuthSignature Source #
Generate an auth signature of the form "app_key:auth_sig" for a user of a private channel.
Errors
data PusherError Source #
Constructors
PusherArgumentError Text | Data from the caller is not valid. |
PusherNon200ResponseError Text | Received non 200 response code from Pusher. |
PusherInvalidResponseError Text | Received unexpected data from Pusher. |
Instances