YcT->      !"#$%&'()*+,-./0123456789:;<= Various utilty functions(c) Will Sewell, 2015MITme@willsewell.com experimentalNone>When decoding Aeson values, this can be used to return a failing parser when an object was expected, but it was a different type of data.?Generalised version of show>?>?>?"Types representing Pusher messages(c) Will Sewell, 2015MITme@willsewell.com experimentalNone0BEMThe data about a user returned when querying for users in a presence channel.EA list of users returned by querying for users in a presence channel.@XAn enumeration of possible returned channel attributes when a single channel is queried:A set of returned channel attributes for a single channel.iAn enumeration of possible returned channel attributes when multiple when multiple channels are queried.:A set of returned channel attributes for a single channel. dA map of channels to their ChannelInfo. The result of querying channel info from multuple channels. )A set of requested ChannelInfoAttributes.IEnumeration of the attributes that can be queried about a single channel.*A set of requested ChannelsInfoAttributes.JEnumeration of the attributes that can be queried about multiple channels.A>Types that can be serialised to a querystring parameter value.4Convert the data into a querystring parameter value.FThe channel name (not including the channel type prefix) and its type.$The possible types of Pusher channe.BConvert string representation, e.g. private-chan into the datatype7@BCDE AFGHIJKLMNOPQRSTUVW   !@DCBE   AFGHIJKLMNOPQRSTUVW%Data structure to store Pusher config(c) Will Sewell, 2015MITme@willsewell.com experimentalNone$The credentials for the current app.$?All the required configuration needed to interact with the API.*WUse this to get an instance Pusher. This will fill in the host and path automatically. !"#$%&'()*+X  !"#$%&'()*+ $%&'() !"#*+ !"#$%&'()*+X>Functions to perform authentication (generate auth signatures)(c) Will Sewell, 2015MITme@willsewell.com experimentalNone3,WGenerate the required query string parameters required to send API requests to Pusher.YHRender key-value tuple mapping of query string parameters into a string.ZJCreate a Pusher auth signature of a string using the provided credentials.-[Generate an auth signature of the form "app_key:auth_sig" for a user of a private channel..\Generate an auth signature of the form "app_key:auth_sig" for a user of a presence channel./As above, but allows the encoder of the user data to be specified. This is useful for testing because the encoder can be mocked; aeson's encoder enodes JSON object fields in arbitrary orders, which makes it impossible to test.,Any additional parametersCurrent UNIX timestampYZ-./The encoder of the user data.,-././-,,YZ-./4Typclass for IO monads that can get the current time(c) Will Sewell, 2015MITme@willsewell.com experimentalNone01[\]010101[\]3Typclass for IO monads that can issue HTTP requests(c) Will Sewell, 2015MITme@willsewell.com experimentalNone2XThese functions essentially abstract the corresponding functions from the Wreq library.23^_`232323^_`#Functions for issuing HTTP requests(c) Will Sewell, 2015MITme@willsewell.com experimentalNone3E4Issue an HTTP GET request. On a 200 response, the response body is returned. On failure, an error will be thrown into the MonadError instance.5Issue an HTTP POST request.acMake a request by building up an http-client Request data structure, and performing the IO action.4The API endpoint, for example (http://api.pusherapp.com/apps/123/events3List of query string parameters as key-value tuplesThe body of the response5abc2345234545abcEMonad type aliases for the return types of the external API functions(c) Will Sewell, 2015MITme@willsewell.com experimentalNone&36]Typeclass alias for the return type of the API functions (keeps the signatures less verbose)76Use this if you wish to stack this on your own monads.8DMonad that can be used as the return type of the main API functions.91Run the monadic Pusher code to extract the result6789678968796789(Haskell interface to the Pusher HTTP API(c) Will Sewell, 2015MITme@willsewell.com experimentalNone&3:)Trigger an event to one or more channels.;)Query a list of channels for information.<*Query for information on a single channel.=*Get a list of users in a presence channel.dABuild a full endpoint from the details in Pusher and the subPath.eDImpure wrapper around makeQS which gets the current time implicitly.:"The list of channels to trigger to The event%The data to send (often encoded JSON)9An optional socket ID of a connection you wish to exclude;Filter by the type of channel&A channel prefix you wish to filter on9Data you wish to query for, currently just the user countThe returned data<=Can query user count and also subscription count (if enabled)=d>The subpath of the specific request, e.g "events/channel-name".The full endpoint, and just the path componente-.:;<=:;<=.-:;<=def       !""#$%&&'()*+,-./0123456789:;<=> ? @ABCDE FGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefpusher-http-haskell-0.2.0.0Network.Pusher.Protocol Data.PusherNetwork.Pusher.Internal.AuthControl.Monad.Pusher.TimeControl.Monad.Pusher.HTTPNetwork.Pusher.Internal.HTTPControl.Monad.PusherNetwork.PusherNetwork.Pusher.Internal.UtilUseruserIDUsersFullChannelInfoChannelInfoAttributeResp UserCountResp ChannelInfo ChannelsInfoChannelInfoQueryChannelInfoAttributesChannelSubscriptionCountChannelUserCountChannelsInfoQueryChannelsInfoAttributesChannelsUserCount toURLParamChannel channelType channelName ChannelTypePresencePrivatePublic parseChannel CredentialscredentialsAppIDcredentialsAppKeycredentialsAppSecretPusher pusherHost pusherPathpusherCredentialspusherConnectionManager getPushergetPusherWithConnManagermakeQSauthenticatePrivateauthenticatePresenceauthenticatePresenceWithEncoder MonadTime getPOSIXTime MonadHTTPhttpLbsgetpost MonadPusherPusherTPusherM runPusherTtriggerchannelschannelusers failExpectObjshow'FullChannelAttributeResp ToURLParamSubscriptionCountRespFullUserCountResp OccupiedResp$fFromJSONUser$fFromJSONUsers"$fHashableFullChannelAttributeResp$fFromJSONFullChannelInfo"$fHashableChannelInfoAttributeResp$fFromJSONChannelInfo$fFromJSONChannelsInfo$fToURLParamHashSet$fHashableChannelInfoAttributes!$fToURLParamChannelInfoAttributes $fHashableChannelsInfoAttributes"$fToURLParamChannelsInfoAttributes$fArbitraryChannel $fShowChannel$fHashableChannel$fArbitraryChannelType$fShowChannelType$fHashableChannelType$fFromJSONCredentialsformQueryString authSignature$fMonadTimeExceptT$fMonadTimeReaderT $fMonadTimeIO$fMonadHTTPExceptT$fMonadHTTPReaderT $fMonadHTTPIO makeRequestwhen200 errorOn200 getEndpoint makeQSWithTS