h$# ؅      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~  Safe-Inferred pusher-http-haskell+Received non 200 response code from Pusher.pusher-http-haskell%Received unexpected data from Pusher.#Functions for issuing HTTP requests(c) Will Sewell, 2016MITme@willsewell.comstableNone ?pusher-http-haskellThe API endpoint, for example  (http://api.pusherapp.com/apps/123/events. pusher-http-haskell4List of query string parameters as key-value tuples. pusher-http-haskellIssue an HTTP GET request. On a 200 response, the response body is returned. On failure, an error will be thrown into the MonadError instance. pusher-http-haskellIssue an HTTP POST request.   Various utility functions(c) Will Sewell, 2016MITme@willsewell.comstable Safe-Inferred pusher-http-haskellGeneralised version of show.;Data structures representing Channels concepts and settings(c) Will Sewell, 2016MITme@willsewell.comstableNone pusher-http-haskellChannel to trigger on.pusher-http-haskell Event name.pusher-http-haskellEvent data. Often encoded JSON.pusher-http-haskell:An optional socket ID of a connection you wish to exclude.pusher-http-haskell"The core handle to the Pusher API.pusher-http-haskellTypically you will want to connect directly to a standard Pusher Channels .pusher-http-haskellThe cluster the current app resides on. Common clusters include: mt1, eu, ap1, ap2.pusher-http-haskell&Used to connect to a raw address:port.pusher-http-haskell4A Channels key and secret pair for a particular app.pusher-http-haskell?All the required configuration needed to interact with the API.#pusher-http-haskell,A convenient way of creating an instance of . Another benefit is it prevents breaking changes when fields are added to , see  ,https://www.yesodweb.com/book/settings-types.You must set   and ! . Currently  defaults to the mt1 cluster.Example: defaultSettings {   = 123, ! =  {  = "key",  "secret" } } $pusher-http-haskell"Use this to get a Pusher instance.%pusher-http-haskellGet a Pusher instance with a given connection manager. This can be useful if you want to share a connection with your application code. !"#$%>Functions to perform authentication (generate auth signatures)(c) Will Sewell, 2016MITme@willsewell.comstableNone ?D&pusher-http-haskellGenerate the required query string parameters required to send API requests to Pusher.'pusher-http-haskellGenerate an auth signature of the form "app_key:auth_sig" for a user of a private channel.(pusher-http-haskellGenerate an auth signature of the form "app_key:auth_sig" for a user of a presence channel.)pusher-http-haskellAs 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.&pusher-http-haskellAny additional parameters.)pusher-http-haskellThe encoder of the user data.&'()()'&"Types representing Pusher messages(c) Will Sewell, 2016MITme@willsewell.comstableNone 8a *pusher-http-haskellThe data about a user returned when querying for users in a presence channel.-pusher-http-haskellA list of users returned by querying for users in a presence channel./pusher-http-haskellpusher-http-haskellA set of requested @.@pusher-http-haskellEnumeration of the attributes that can be queried about multiple channels.Bpusher-http-haskell>Types that can be serialised to a querystring parameter value.*+,-./0123456789:;<=>?@ABC456;<=9:78>?@A/0123*+,-.BC-Pure functions called by the public interface(c) Will Sewell, 2016MITme@willsewell.comstableNone ^_`ab^_`ab None Hepusher-http-haskellAuthentication header. The oldest active token is used, identified by this key.fpusher-http-haskellA HMAC SHA256 formed by signing the payload with the tokens secret.hpusher-http-haskellA h is one of several events Pusher may send to your server in response to events your users may trigger.ipusher-http-haskell7A channel has become occupied. There is > 1 subscriber.jpusher-http-haskell6A channel has become vacated. There are 0 subscribers.kpusher-http-haskell0A new user has subscribed to a presence channel.lpusher-http-haskell0A user has unsubscribed from a presence channel.mpusher-http-haskellA client has sent a named client event with some json body. They have a socket_id and a *$ if they were in a presence channel.tpusher-http-haskellA Webhook is received by POST request from Pusher to notify your server of a number of hs. Multiple events are received under the same timestamp if batch events is enabled.xpusher-http-haskell?Given a HTTP Header and its associated value, parse an app key.ypusher-http-haskellGiven a HTTP Header and its associated value, parse an auth signature.zpusher-http-haskell0Given a HTTP body, parse the contained webhooks.{pusher-http-haskellDoes a webhook body hash with our secret key to the given signature?|pusher-http-haskellGiven a list of http header key:values, a http body and a lookup function for an apps secret, parse and validate a potential webhook payload.cdefghijklmnopqrstuvwxyz{|1Haskell interface to the Pusher Channels HTTP API(c) Will Sewell, 2016MITme@willsewell.comstableNone -? N}pusher-http-haskell)Trigger an event to one or more channels.~pusher-http-haskellTrigger multiple events.pusher-http-haskell)Query a list of channels for information.pusher-http-haskell*Query for information on a single channel.pusher-http-haskell*Get a list of users in a presence channel.pusher-http-haskellGenerate an auth signature of the form "app_key:auth_sig" for a user of a private channel.pusher-http-haskellGenerate an auth signature of the form "app_key:auth_sig" for a user of a presence channel.pusher-http-haskellParse webhooks from a list of HTTP headers and a HTTP body given their app key matches the one in our Pusher Channels credentials and the webhook is correctly encrypted by the corresponding app secret.}pusher-http-haskell#The list of channels to trigger to.pusher-http-haskell Event name.pusher-http-haskellEvent data. Often encoded JSON.pusher-http-haskell:An optional socket ID of a connection you wish to exclude.~pusher-http-haskellThe list of events to trigger.pusher-http-haskell'A channel prefix you wish to filter on.pusher-http-haskell:Data you wish to query for, currently just the user count.pusher-http-haskellThe returned data.pusher-http-haskell>Can query user count and also subscription count (if enabled).> !"#$%cdefghijklmnopqrstuvwxyz{|}~> !"#$%}~hijklmnopqrscdefgtuvwxyz{|     !!"#$$%&'()*+,-./001223345677899::;<=>>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`a b b c d e f g h i j k l m n o p q r r s t u v w x yz{|}~-.2pusher-http-haskell-2.1.0.2-CtUuBAr9M4e31eO6OEMvRpNetwork.PusherNetwork.Pusher.Internal.HTTPNetwork.Pusher.Internal.AuthNetwork.Pusher.ProtocolNetwork.Pusher.InternalNetwork.Pusher.ErrorNetwork.Pusher.Internal.UtilNetwork.Pusher.DataNetwork.Pusher.Webhook PusherErrorNon200ResponseInvalidResponsenon200ResponseStatusCodenon200ResponseBody RequestParams requestSecure requestHost requestPort requestPathrequestQueryStringgetpost$fShowRequestParamsEvent eventChannel eventName eventData eventSocketIdPusherAddressClusterHostPortTokentokenKey tokenSecretSettings pusherAddress pusherAppID pusherToken pusherUseTLSdefaultSettings newPushernewPusherWithConnManagermakeQSauthenticatePrivateauthenticatePresenceauthenticatePresenceWithEncoderUseruserIDUsersFullChannelInfofullChannelInfoOccupiedfullChannelInfoUserCountfullChannelInfoSubCount ChannelInfochannelInfoUserCount ChannelsInfoChannelInfoQueryChannelInfoAttributesChannelUserCountChannelSubscriptionCountChannelsInfoQueryChannelsInfoAttributesChannelsUserCount ToURLParam toURLParam$fToURLParamHashSet $fHashableChannelsInfoAttributes"$fToURLParamChannelsInfoAttributes$fHashableChannelInfoAttributes!$fToURLParamChannelInfoAttributes$fFromJSONChannelInfo$fFromJSONChannelsInfo$fFromJSONFullChannelInfo$fFromJSONUser$fFromJSONUsers $fEqUsers $fShowUsers$fEqUser $fShowUser$fEqFullChannelInfo$fShowFullChannelInfo$fEqChannelsInfo$fShowChannelsInfo$fEqChannelInfo$fShowChannelInfo$fToURLParamChannelInfoQuery$fEqChannelInfoAttributes$fGenericChannelInfoAttributes$fToURLParamChannelsInfoQuery$fEqChannelsInfoAttributes$fGenericChannelsInfoAttributesmkTriggerRequestmkTriggerBatchRequestmkChannelsRequestmkChannelRequestmkUsersRequestWebhookPayload xPusherKeyxPusherSignaturewebhooks WebhookEvChannelOccupiedEvChannelVacatedEv MemberAddedEvMemberRemovedEvClientEv onChannelwithUser clientEvName clientEvBody withSocketIdwithPossibleUserWebhookstimeMs webhookEvsparseAppKeyHdrparseAuthSignatureHdrparseWebhooksBodyverifyWebhooksBodyparseWebhookPayloadWithtrigger triggerBatchchannelschannelusersparseWebhookPayloadshow'getSystemTimeSecondspUseTLSpHostpPortpPathpTokenpConnectionManager