| Copyright | (c) Will Sewell 2016 |
|---|---|
| License | MIT |
| Maintainer | me@willsewell.com |
| 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