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-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 ?3 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 8P $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-haskellTypes that can be serialised to a querystring parameter value.$%&'()*+,-./0123456789:;<=./0567341289:;)*+,-$%&'(<=-Pure functions called by the public interface(c) Will Sewell, 2016MITme@willsewell.comstableNone XYZ[XYZ[ None 5^pusher-http-haskellAuthentication header. The oldest active token is used, identified by this key._pusher-http-haskellA HMAC SHA256 formed by signing the payload with the tokens secret.apusher-http-haskellA a is one of several events Pusher may send to your server in response to events your users may trigger.bpusher-http-haskell7A channel has become occupied. There is > 1 subscriber.cpusher-http-haskell6A channel has become vacated. There are 0 subscribers.dpusher-http-haskell0A new user has subscribed to a presence channel.epusher-http-haskell0A user has unsubscribed from a presence channel.fpusher-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.mpusher-http-haskellA Webhook is received by POST request from Pusher to notify your server of a number of as. Multiple events are received under the same timestamp if batch events is enabled.qpusher-http-haskell?Given a HTTP Header and its associated value, parse an app key.rpusher-http-haskellGiven a HTTP Header and its associated value, parse an auth signature.spusher-http-haskell0Given a HTTP body, parse the contained webhooks.tpusher-http-haskellDoes a webhook body hash with our secret key to the given signature?upusher-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.\]^_`abcdefghijklmnopqrstu1Haskell interface to the Pusher Channels HTTP API(c) Will Sewell, 2016MITme@willsewell.comstableNone -?vpusher-http-haskell)Trigger an event to one or more channels.wpusher-http-haskell)Query a list of channels for information.xpusher-http-haskell*Query for information on a single channel.ypusher-http-haskell*Get a list of users in a presence channel.zpusher-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.vpusher-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.wpusher-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.xpusher-http-haskell>Can query user count and also subscription count (if enabled).7\]^_`abcdefghijklmnopqrstuvwxyz{|7vwxy{z|abcdefghijkl\]^_`mnopqrstu     !"#$%&'()*++,--../01223445567899:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[ \ \ ] ^ _ ` a b c d e f g h i j k l l m n o p q r stuvw()xyz{|}~2pusher-http-haskell-2.0.0.3-8eZbR5bur3g4mZ2VHuSrItNetwork.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$fShowRequestParamsPusherAddressClusterHostPortTokentokenKey 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$fGenericChannelsInfoAttributesmkTriggerRequestmkChannelsRequestmkChannelRequestmkUsersRequestWebhookPayload xPusherKeyxPusherSignaturewebhooks WebhookEvChannelOccupiedEvChannelVacatedEv MemberAddedEvMemberRemovedEvClientEv onChannelwithUser clientEvName clientEvBody withSocketIdwithPossibleUserWebhookstimeMs webhookEvsparseAppKeyHdrparseAuthSignatureHdrparseWebhooksBodyverifyWebhooksBodyparseWebhookPayloadWithtriggerchannelschannelusersparseWebhookPayloadshow'getSystemTimeSecondspUseTLSpHostpPortpPathpTokenpConnectionManager