úΉÁ›Ś      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ Ą˘Ł¤Ľ Safe ˜"Data from the caller is not valid.+Received non 200 response code from Pusher.%Received unexpected data from Pusher.#Functions for issuing HTTP requests(c) Will Sewell, 2016MITme@willsewell.com experimentalNone<N¨The API endpoint, for example  (http://api.pusherapp.com/apps/123/events. 4List 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.    Various utilty functions(c) Will Sewell, 2016MITme@willsewell.com experimentalNone{ŚGet the system time as an Int.§ŠWhen 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.¨‰When 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.ŠŸWhen 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.ŞŠWhen 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.ŤGeneralised version of show.ڧ¨ŠŞŤ6Data structure representing Pusher concepts and config(c) Will Sewell, 2016MITme@willsewell.com experimentalNone62v!Firebase Cloud Messaging payload.Google Cloud Messaging payload.(Apple push notification service payload.5Level of detail sent to WebhookURL. Defaults to Info. Errors only EverythingHURL to which pusher will send information about sent push notifications.bUp 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-.#FThe channel name (not including the channel type prefix) and its type.'$The possible types of Pusher channe.,QThe cluster the current app resides on. Common clusters include: mt1,eu,ap1,ap2./$The credentials for the current app.5?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.A8Get a Pusher instance that uses a specific API endpoint.BˆGet a Pusher instance with a given connection manager. This can be useful if you want to share a connection with your application code.Ź8Given a possible cluster, return the corresponding host.ECConvert string representation, e.g. private-chan into the datatype.>  !"#$%&'()*+,-./0123456789:;<=>?­ŽŻ°@ABCDEF ą#$%&'()*,-./0123456789:;<>Functions to perform authentication (generate auth signatures)(c) Will Sewell, 2016MITme@willsewell.com experimentalNone<CzGA Pusher auth signature.HFThe bytestring to sign with the app secret to create a signature from.IWGenerate the required query string parameters required to send API requests to Pusher.˛HRender key-value tuple mapping of query string parameters into a string.łJCreate a Pusher auth signature of a string using the provided credentials.J[Generate an auth signature of the form "app_key:auth_sig" for a user of a private channel.K\Generate an auth signature of the form "app_key:auth_sig" for a user of a presence channel.Lä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.IAny additional parameters.Current UNIX timestamp.LThe encoder of the user data.GHIJKLHGKLJI"Types representing Pusher messages(c) Will Sewell, 2016MITme@willsewell.com experimentalNone6KNOż MNThe data about a user returned when querying for users in a presence channel.PEA list of users returned by querying for users in a presence channel.R<The possible values returned by a query to a single channel.W[The possible returned channel attributes when multiple when multiple channels are queried.ZA map of channels to their W>. The result of querying channel info from multuple channels.\A set of requested ^.^IEnumeration of the attributes that can be queried about a single channel.aA set of requested c.cJEnumeration of the attributes that can be queried about multiple channels.e>Types that can be serialised to a querystring parameter value.MNOPQRSTUVWXYZ[\]^_`abcdefWXY^_`\]Z[abcdRSTUVMNOPQeff MNOPQRSTUVWXYZ[\]^_`abcdef-Pure functions called by the public interface(c) Will Sewell, 2016MITme@willsewell.com experimentalNoneX…´ABuild a full endpoint from the details in Pusher and the subPath.ľYBuild a full endpoint for push notifications from the details in Pusher and the subPath.´?The subpath of the specific request, e.g "events/channel-name"./The full endpoint, and just the path component.ľ$The subpath of the specific request..The full endpoint and just the path component.‚ƒ„…‚ƒ„… NonenYˆPAuthentication header. The oldest active token is used, identified by this key.‰CA HMAC SHA256 formed by signing the payload with the tokens secret.‹A ‹g is one of several events Pusher may send to your server in response to events your users may trigger.Œ7A channel has become occupied. There is > 1 subscriber.6A channel has become vacated. There are 0 subscribers.Ž0A new user has subscribed to a presence channel.0A user has unsubscribed from a presence channel.IA client has sent a named client event with some json body. They have a   and a M$ if they were in a presence channel.ś%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.—XA 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.›7Given a HTTP Header and its associated value, parse an >.œ6Given a HTTP Header and its associated value, parse a G.0Given a HTTP body, parse the contained webhooks.žDDoes a webhook body hash with our secret key to the given signature?ŸGiven 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+<|q )Trigger an event to one or more channels.Ą)Query a list of channels for information.˘*Query for information on a single channel.Ł*Get a list of users in a presence channel.¤Send a push notification.ĽHParse 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 =. #The list of channels to trigger to.Often encoded JSON.:An optional socket ID of a connection you wish to exclude.ĄFilter by the type of channel.'A channel prefix you wish to filter on.:Data you wish to query for, currently just the user count.The returned data.˘>Can query user count and also subscription count (if enabled).b  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHJK†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ Ą˘Ł¤Ľg56789:;</01234,-.?>=@AB#$%&+'()*DCE"! F Ą˘Ł¤HGKJĽ‹ŒŽ‘‘‘’‘’‘“”•–†‡ˆ‰Š—˜™š›œžŸš     !"#$%&'(()*+,-./0012234567789:;<=>?@ABCDEFGHIJKLMNNOPPQQRSTUUVWWXXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ € €  ‚ ƒ „ … † ‡ ˆ ‰ Š ‹ Œ  Ž    ‘ ’ “ ” • – —˜™š›œžŸ Ą˘Ł¤ĽŚ§¨$ŠŞŤŹ ­ ­ ŽŻ2pusher-http-haskell-1.5.1.2-Ht9unCqKg3ECvYk9yc4QC6Network.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 _unOurTime