VP>n      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmVarious utilty functions(c) Will Sewell, 2016MITme@willsewell.com experimentalNonenGet the system time as an Int.oWhen 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.pGeneralised version of shownopnopnopSafe"Data from the caller is not valid.+Received non 200 response code from Pusher.%Received unexpected data from Pusher.qq#Functions for issuing HTTP requests(c) Will Sewell, 2016MITme@willsewell.com experimentalNone:LThe API endpoint, for example (http://api.pusherapp.com/apps/123/events 3List of query string parameters as key-value tuples Issue an HTTP GET request. On a 200 response, the response body is returned. On failure, an error will be thrown into the MonadError instance. Issue an HTTP POST request.  The body of the response rst    rst6Data structure representing Pusher concepts and config(c) Will Sewell, 2016MITme@willsewell.com experimentalNone5FThe channel name (not including the channel type prefix) and its type.$The possible types of Pusher channe.$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.'8Get a Pusher instance that uses a specific API endpoint.(Get a Pusher instance with a given connection manager. This can be useful if you want to share a connection with your application code.+BConvert string representation, e.g. private-chan into the datatype$  !"#$%&'(u)*+vwx  !"#$%&'()*+  !"#$%&'(u)*+vwx>Functions to perform authentication (generate auth signatures)(c) Will Sewell, 2016MITme@willsewell.com experimentalNone:,A Pusher auth signature.-FThe bytestring to sign with the app secret to create a signature from..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.0\Generate an auth signature of the form "app_key:auth_sig" for a user of a presence channel.1As 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/01The encoder of the user data.,-./01-,01/.,-.yz/01"Types representing Pusher messages(c) Will Sewell, 2016MITme@willsewell.com experimentalNone5IL 2MThe data about a user returned when querying for users in a presence channel.5EA list of users returned by querying for users in a presence channel.7;The possible values returned by a query to a single channel<[The possible returned channel attributes when multiple when multiple channels are queried.?dA map of channels to their ChannelInfo. The result of querying channel info from multuple channels.A)A set of requested ChannelInfoAttributes.CIEnumeration of the attributes that can be queried about a single channel.F*A set of requested ChannelsInfoAttributes.HJEnumeration of the attributes that can be queried about multiple channels.J>Types that can be serialised to a querystring parameter value.K4Convert the data into a querystring parameter value.$23456789:;<=>?@ABCDEFGHIJKLMNOPQRSTU23456789:;<=>?@ABCDEFGHIJK<=>CDEAB?@FGHI789:;23456JKK23456789:;<=>?@ABCDEFGHIJKLMNOPQRSTU-Pure functions called by the public interface(c) Will Sewell, 2016MITme@willsewell.com experimentalNone{ABuild a full endpoint from the details in Pusher and the subPath.fghi|}{>The subpath of the specific request, e.g "events/channel-name".The full endpoint, and just the path component~fghifghifghi|}{~(Haskell interface to the Pusher HTTP API(c) Will Sewell, 2016MITme@willsewell.com experimentalNone*:j)Trigger an event to one or more channels.k)Query a list of channels for information.l*Query for information on a single channel.m*Get a list of users in a presence channel.j"The list of channels to trigger toOften encoded JSON9An optional socket ID of a connection you wish to excludekFilter by the type of channel&A channel prefix you wish to filter on9Data you wish to query for, currently just the user countThe returned datal=Can query user count and also subscription count (if enabled)m,  !"#$%&'()*+,-/0jklm, !"%$#&'(*)+ jklm-,0/jklm      !"##$%&'()*+,-./012345677899::;<=>>?@@AABCDEEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}2pusher-http-haskell-1.2.0.0-KHHl4d3sMd7LWzPTNZDUUmNetwork.PusherNetwork.Pusher.Internal.HTTPNetwork.Pusher.Internal.AuthNetwork.Pusher.ProtocolNetwork.Pusher.InternalNetwork.Pusher.Internal.UtilNetwork.Pusher.ErrorNetwork.Pusher.Data PusherErrorPusherArgumentErrorPusherNon200ResponseErrorPusherInvalidResponseError RequestBodyRequestQueryString RequestParamsrequestEndpointrequestQueryStringgetpostSocketID EventDataEventChannel channelType channelName ChannelTypePublicPrivatePresence ChannelName CredentialscredentialsAppIDcredentialsAppKeycredentialsAppSecretPusher pusherHost pusherPathpusherCredentialspusherConnectionManager AppSecretAppKeyAppID getPushergetPusherWithHostgetPusherWithConnManagerrenderChannelPrefix renderChannel parseChannel AuthSignature AuthStringmakeQSauthenticatePrivateauthenticatePresenceauthenticatePresenceWithEncoderUseruserIDUsersFullChannelInfofullChannelInfoOccupiedfullChannelInfoUserCountfullChannelInfoSubCount ChannelInfochannelInfoUserCount ChannelsInfoChannelInfoQueryChannelInfoAttributesChannelUserCountChannelSubscriptionCountChannelsInfoQueryChannelsInfoAttributesChannelsUserCount ToURLParam toURLParam$fFromJSONUser$fFromJSONUsers$fFromJSONFullChannelInfo$fFromJSONChannelInfo$fFromJSONChannelsInfo$fToURLParamHashSet$fHashableChannelInfoAttributes!$fToURLParamChannelInfoAttributes $fHashableChannelsInfoAttributes"$fToURLParamChannelsInfoAttributes$fEqChannelsInfoAttributes$fGenericChannelsInfoAttributes$fToURLParamChannelsInfoQuery$fEqChannelInfoAttributes$fGenericChannelInfoAttributes$fToURLParamChannelInfoQuery$fEqChannelInfo$fShowChannelInfo$fEqChannelsInfo$fShowChannelsInfo$fEqFullChannelInfo$fShowFullChannelInfo$fEqUser $fShowUser $fEqUsers $fShowUsersmkTriggerRequestmkChannelsRequestmkChannelRequestmkUsersRequesttriggerchannelschannelusersgetTime failExpectObjshow'$fExceptionPusherError mkRequestmkPostdoReqestgetConnManager$fHashableChannel$fHashableChannelType$fFromJSONCredentialsformQueryString authSignature mkEndpoint mkGetRequest mkPostRequestmkQS