!      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ Safe pusher-http-haskell"Data from the caller is not valid.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.com experimentalNone>Ppusher-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. pusher-http-haskellThe body of the response.   Various utilty functions(c) Will Sewell, 2016MITme@willsewell.com experimentalNone!pusher-http-haskellGet the system time as an Int.pusher-http-haskellWhen 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.pusher-http-haskellWhen decoding Aeson values, this can be used to return a failing parser when an array was expected, but it was a different type of data.pusher-http-haskellWhen decoding Aeson values, this can be used to return a failing parser when an array of length exactly one was expected but it was a different type of data.pusher-http-haskellWhen decoding Aeson values, this can be used to return a failing parser when an string was expected, but it was a different type of data.pusher-http-haskellGeneralised version of show.6Data structure representing Pusher concepts and config(c) Will Sewell, 2016MITme@willsewell.com experimentalNone7<pusher-http-haskell!Firebase Cloud Messaging payload.pusher-http-haskellGoogle Cloud Messaging payload.pusher-http-haskell(Apple push notification service payload.pusher-http-haskell5Level of detail sent to WebhookURL. Defaults to Info.pusher-http-haskell Errors onlypusher-http-haskell Everythingpusher-http-haskellHURL to which pusher will send information about sent push notifications.pusher-http-haskellbUp to 164 characters where each character is ASCII upper or lower case, a number or one of _=@,.;Note: hyphen - is NOT valid as it is reserved for the possibility of marking interest names with prefixes such as private- or presence-.#pusher-http-haskellFThe channel name (not including the channel type prefix) and its type.'pusher-http-haskell$The possible types of Pusher channe.,pusher-http-haskellQThe cluster the current app resides on. Common clusters include: mt1,eu,ap1,ap2./pusher-http-haskell$The credentials for the current app.5pusher-http-haskell?All the required configuration needed to interact with the API.@pusher-http-haskellWUse this to get an instance Pusher. This will fill in the host and path automatically.Apusher-http-haskell8Get a Pusher instance that uses a specific API endpoint.Bpusher-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.pusher-http-haskell8Given a possible cluster, return the corresponding host.Epusher-http-haskellCConvert string representation, e.g. private-chan into the datatype.>  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEF>Functions to perform authentication (generate auth signatures)(c) Will Sewell, 2016MITme@willsewell.com experimentalNone>OGpusher-http-haskellA Pusher auth signature.Hpusher-http-haskellFThe bytestring to sign with the app secret to create a signature from.Ipusher-http-haskellWGenerate 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.Jpusher-http-haskell[Generate an auth signature of the form "app_key:auth_sig" for a user of a private channel.Kpusher-http-haskell\Generate an auth signature of the form "app_key:auth_sig" for a user of a presence channel.Lpusher-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.Ipusher-http-haskellAny additional parameters.pusher-http-haskellCurrent UNIX timestamp.Lpusher-http-haskellThe encoder of the user data.GHIJKLHGKLJI"Types representing Pusher messages(c) Will Sewell, 2016MITme@willsewell.com experimentalNone7MP_ Mpusher-http-haskellNThe data about a user returned when querying for users in a presence channel.Ppusher-http-haskellEA list of users returned by querying for users in a presence channel.Rpusher-http-haskell<The possible values returned by a query to a single channel.Wpusher-http-haskell[The possible returned channel attributes when multiple when multiple channels are queried.Zpusher-http-haskellA map of channels to their W>. The result of querying channel info from multuple channels.\pusher-http-haskellA set of requested ^.^pusher-http-haskellIEnumeration of the attributes that can be queried about a single channel.apusher-http-haskellA set of requested c.cpusher-http-haskellJEnumeration of the attributes that can be queried about multiple channels.epusher-http-haskell>Types that can be serialised to a querystring parameter value.MNOPQRSTUVWXYZ[\]^_`abcdefWXY^_`\]Z[abcdRSTUVMNOPQef-Pure functions called by the public interface(c) Will Sewell, 2016MITme@willsewell.com experimentalNonei0pusher-http-haskellABuild a full endpoint from the details in Pusher and the subPath.pusher-http-haskellYBuild a full endpoint for push notifications from the details in Pusher and the subPath.pusher-http-haskell?The subpath of the specific request, e.g "events/channel-name".pusher-http-haskell/The full endpoint, and just the path component.pusher-http-haskell$The subpath of the specific request.pusher-http-haskell.The full endpoint and just the path component. Nonepusher-http-haskellPAuthentication 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.pusher-http-haskellA g is one of several events Pusher may send to your server in response to events your users may trigger.pusher-http-haskell7A channel has become occupied. There is > 1 subscriber.pusher-http-haskell6A channel has become vacated. There are 0 subscribers.pusher-http-haskell0A new user has subscribed to a presence channel.pusher-http-haskell0A user has unsubscribed from a presence channel.pusher-http-haskellIA client has sent a named client event with some json body. They have a   and a M$ if they were in a presence channel.pusher-http-haskell%Exists only so we can define our own FromJSON instance on NominalDiffTime. This is useful because it didnt exist before a certain GHC version that we support and allows us to avoid CPP and orphan instances.pusher-http-haskellXA Webhook is received by POST request from Pusher to notify your server of a number of Us. Multiple events are received under the same timestamp if batch events is enabled.pusher-http-haskell7Given a HTTP Header and its associated value, parse an >.pusher-http-haskell6Given a HTTP Header and its associated value, parse a G.pusher-http-haskell0Given a HTTP body, parse the contained webhooks.pusher-http-haskellDDoes 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.(Haskell interface to the Pusher HTTP API(c) Will Sewell, 2016MITme@willsewell.com experimentalNone,>vpusher-http-haskell)Trigger an event to one or more channels.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-haskellSend a push notification.pusher-http-haskellHParse webhooks from a list of HTTP headers and a HTTP body given their >h matches the one in our Pusher credentials and the webhook is correctly encrypted by the corresponding =.pusher-http-haskell#The list of channels to trigger to.pusher-http-haskellOften encoded JSON.pusher-http-haskell:An optional socket ID of a connection you wish to exclude.pusher-http-haskellFilter by the type of channel.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).b  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHJKb56789:;</01234,-.?>=@AB#$%&+'()*DCE"! FHGKJ     !"#$%&'(()*+,-./0012234567789:;<=>?@ABCDEFGHIJKLMNNOPPQQRSTUUVWWXXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~            3pusher-http-haskell-1.5.1.13-5GtcEFNXHvE95ZY0KX5I4MNetwork.PusherNetwork.Pusher.Internal.HTTPNetwork.Pusher.Internal.AuthNetwork.Pusher.ProtocolNetwork.Pusher.InternalNetwork.Pusher.ErrorNetwork.Pusher.Internal.UtilNetwork.Pusher.DataNetwork.Pusher.Webhook PusherErrorPusherArgumentErrorPusherNon200ResponseErrorPusherInvalidResponseError RequestBodyRequestQueryString RequestParamsrequestEndpointrequestQueryStringgetpost$fShowRequestParams NotificationnotificationInterestnotificationWebhookURLnotificationWebhookLevelnotificationAPNSPayloadnotificationGCMPayloadnotificationFCMPayload FCMPayload GCMPayload APNSPayload WebhookLevelInfoDebug WebhookURLInterestSocketID EventDataEventChannel channelType channelName ChannelTypePublicPrivatePresence ChannelNameCluster clusterName CredentialscredentialsAppIDcredentialsAppKeycredentialsAppSecretcredentialsClusterPusher pusherHost pusherPathpusherNotifyHostpusherNotifyPathpusherCredentialspusherConnectionManager AppSecretAppKeyAppID getPushergetPusherWithHostgetPusherWithConnManagerrenderChannelPrefix renderChannel parseChannel mkInterest AuthSignature AuthStringmakeQSauthenticatePrivateauthenticatePresenceauthenticatePresenceWithEncoderUseruserIDUsersFullChannelInfofullChannelInfoOccupiedfullChannelInfoUserCountfullChannelInfoSubCount 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 $fShowUsersmkTriggerRequestmkChannelsRequestmkChannelRequestmkUsersRequestmkNotifyRequestWebhookPayload xPusherKeyxPusherSignaturewebhooks WebhookEvChannelOccupiedEvChannelVacatedEv MemberAddedEvMemberRemovedEvClientEv onChannelwithUser clientEvName clientEvBody withSocketIdwithPossibleUserWebhookstimeMs webhookEvsparseAppKeyHdrparseAuthSignatureHdrparseWebhooksBodyverifyWebhooksBodyparseWebhookPayloadWithtriggerchannelschannelusersnotifyparseWebhookPayloadgetTime failExpectObjfailExpectArrayfailExpectSingletonArray failExpectStrshow'mkHost clusterMt1 clusterEu clusterAp1 clusterAp2formQueryString authSignature mkEndpointmkNotifyEndpointOurTime