úÎ!|JtÒ}      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{| Safepusher-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.comstableSafe¡}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-haskellKTypically you will want to connect directly to a standard Pusher Channels .pusher-http-haskellBThe 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 M. 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-haskell‰Get 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>50 pusher-http-haskellXGenerate the required query string parameters required to send API requests to Pusher.†pusher-http-haskellHRender key-value tuple mapping of query string parameters into a string.‡pusher-http-haskellJCreate a Pusher auth signature of a string using the provided credentials.!pusher-http-haskell\Generate an auth signature of the form "app_key:auth_sig" for a user of a private channel."pusher-http-haskell]Generate an auth signature of the form "app_key:auth_sig" for a user of a presence channel.#pusher-http-haskellæ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. pusher-http-haskellAny additional parameters.#pusher-http-haskellThe encoder of the user data. !"#"#! "Types representing Pusher messages(c) Will Sewell, 2016MITme@willsewell.comstableNone7MD[ $pusher-http-haskellOThe data about a user returned when querying for users in a presence channel.'pusher-http-haskellEA list of users returned by querying for users in a presence channel.)pusher-http-haskell<The possible values returned by a query to a single channel..pusher-http-haskell\The possible returned channel attributes when multiple when multiple channels are queried.1pusher-http-haskellA map of channels to their .?. The result of querying channel info from multiple channels.3pusher-http-haskellA set of requested 5.5pusher-http-haskellIEnumeration of the attributes that can be queried about a single channel.8pusher-http-haskellA set of requested :.:pusher-http-haskellJEnumeration of the attributes that can be queried about multiple channels.<pusher-http-haskell>Types that can be serialised to a querystring parameter value.$%&'()*+,-./0123456789:;<=./0567341289:;)*+,-$%&'(<=-Pure functions called by the public interface(c) Will Sewell, 2016MITme@willsewell.comstableNoneFßXYZ[XYZ[ None^^pusher-http-haskellQAuthentication header. The oldest active token is used, identified by this key._pusher-http-haskellCA HMAC SHA256 formed by signing the payload with the tokens secret.apusher-http-haskellA ah 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-haskellZA 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-haskellYA Webhook is received by POST request from Pusher to notify your server of a number of aVs. 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-haskellFGiven a HTTP Header and its associated value, parse an auth signature.spusher-http-haskell0Given a HTTP body, parse the contained webhooks.tpusher-http-haskellDDoes 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,>svpusher-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-haskell\Generate an auth signature of the form "app_key:auth_sig" for a user of a private channel.{pusher-http-haskell]Generate an auth signature of the form "app_key:auth_sig" for a user of a presence channel.|pusher-http-haskellÍParse 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{|}~€‚ƒ1pusher-http-haskell-2.0.0.1-1XUUIpwgRdX5I9m9lg3SCNetwork.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$fEqChannelsInfoAttributes$fGenericChannelsInfoAttributes$fToURLParamChannelsInfoQuery$fEqChannelInfoAttributes$fGenericChannelInfoAttributes$fToURLParamChannelInfoQuery$fEqChannelInfo$fShowChannelInfo$fEqChannelsInfo$fShowChannelsInfo$fEqFullChannelInfo$fShowFullChannelInfo$fEqUser $fShowUser $fEqUsers $fShowUsersmkTriggerRequestmkChannelsRequestmkChannelRequestmkUsersRequestWebhookPayload xPusherKeyxPusherSignaturewebhooks WebhookEvChannelOccupiedEvChannelVacatedEv MemberAddedEvMemberRemovedEvClientEv onChannelwithUser clientEvName clientEvBody withSocketIdwithPossibleUserWebhookstimeMs webhookEvsparseAppKeyHdrparseAuthSignatureHdrparseWebhooksBodyverifyWebhooksBodyparseWebhookPayloadWithtriggerchannelschannelusersparseWebhookPayloadshow'getSystemTimeSecondspUseTLSpHostpPortpPathpTokenpConnectionManagerformQueryString authSignature