github 0.21 → 0.22
raw patch · 52 files changed
+1009/−329 lines, 52 filesdep +HsOpenSSLdep +HsOpenSSL-x509-systemdep +binary-instancesdep −binary-orphansdep ~exceptionsdep ~hashabledep ~http-typesPVP ok
version bump matches the API change (PVP)
Dependencies added: HsOpenSSL, HsOpenSSL-x509-system, binary-instances, http-client-openssl
Dependencies removed: binary-orphans
Dependency ranges changed: exceptions, hashable, http-types, semigroups, tagged, text, transformers-compat, unordered-containers
API changes (from Hackage documentation)
- GitHub.Auth: type Token = ByteString
- GitHub.Data.Request: instance Data.Data.Data GitHub.Data.Request.MediaType
- GitHub.Data.Request: instance GHC.Classes.Eq GitHub.Data.Request.MediaType
- GitHub.Data.Request: instance GHC.Classes.Ord GitHub.Data.Request.MediaType
- GitHub.Data.Request: instance GHC.Enum.Bounded GitHub.Data.Request.MediaType
- GitHub.Data.Request: instance GHC.Enum.Enum GitHub.Data.Request.MediaType
- GitHub.Data.Request: instance GHC.Generics.Generic GitHub.Data.Request.MediaType
- GitHub.Data.Request: instance GHC.Read.Read GitHub.Data.Request.MediaType
- GitHub.Data.Request: instance GHC.Show.Show GitHub.Data.Request.MediaType
+ GitHub: acceptInvitationFromR :: Id RepoInvitation -> GenRequest 'MtUnit 'RW ()
+ GitHub: getNotificationsR :: FetchCount -> Request 'RA (Vector Notification)
+ GitHub: listInvitationsForR :: FetchCount -> Request k (Vector RepoInvitation)
+ GitHub: listInvitationsOnR :: Name Owner -> Name Repo -> FetchCount -> GenRequest 'MtJSON k (Vector RepoInvitation)
+ GitHub: markAllNotificationsAsReadR :: GenRequest 'MtUnit 'RW ()
+ GitHub: markNotificationAsReadR :: Id Notification -> GenRequest 'MtUnit 'RW ()
+ GitHub.Auth: class AuthMethod a
+ GitHub.Auth: endpoint :: AuthMethod a => a -> Maybe Text
+ GitHub.Auth: instance GitHub.Auth.AuthMethod GitHub.Auth.Auth
+ GitHub.Auth: setAuthRequest :: AuthMethod a => a -> Request -> Request
+ GitHub.Data.Activities: AssignReason :: NotificationReason
+ GitHub.Data.Activities: AuthorReason :: NotificationReason
+ GitHub.Data.Activities: CommentReason :: NotificationReason
+ GitHub.Data.Activities: InvitationReason :: NotificationReason
+ GitHub.Data.Activities: ManualReason :: NotificationReason
+ GitHub.Data.Activities: MentionReason :: NotificationReason
+ GitHub.Data.Activities: Notification :: !Id Notification -> !RepoRef -> !Subject -> !NotificationReason -> !Bool -> !Maybe UTCTime -> !Maybe UTCTime -> !URL -> Notification
+ GitHub.Data.Activities: ReviewRequestedReason :: NotificationReason
+ GitHub.Data.Activities: StateChangeReason :: NotificationReason
+ GitHub.Data.Activities: Subject :: !Text -> !URL -> !Maybe URL -> !Text -> Subject
+ GitHub.Data.Activities: SubscribedReason :: NotificationReason
+ GitHub.Data.Activities: TeamMentionReason :: NotificationReason
+ GitHub.Data.Activities: [notificationId] :: Notification -> !Id Notification
+ GitHub.Data.Activities: [notificationLastReadAt] :: Notification -> !Maybe UTCTime
+ GitHub.Data.Activities: [notificationReason] :: Notification -> !NotificationReason
+ GitHub.Data.Activities: [notificationRepo] :: Notification -> !RepoRef
+ GitHub.Data.Activities: [notificationSubject] :: Notification -> !Subject
+ GitHub.Data.Activities: [notificationUnread] :: Notification -> !Bool
+ GitHub.Data.Activities: [notificationUpdatedAt] :: Notification -> !Maybe UTCTime
+ GitHub.Data.Activities: [notificationUrl] :: Notification -> !URL
+ GitHub.Data.Activities: [subjectLatestCommentURL] :: Subject -> !Maybe URL
+ GitHub.Data.Activities: [subjectTitle] :: Subject -> !Text
+ GitHub.Data.Activities: [subjectType] :: Subject -> !Text
+ GitHub.Data.Activities: [subjectURL] :: Subject -> !URL
+ GitHub.Data.Activities: data Notification
+ GitHub.Data.Activities: data NotificationReason
+ GitHub.Data.Activities: data Subject
+ GitHub.Data.Activities: instance Control.DeepSeq.NFData GitHub.Data.Activities.Notification
+ GitHub.Data.Activities: instance Control.DeepSeq.NFData GitHub.Data.Activities.NotificationReason
+ GitHub.Data.Activities: instance Control.DeepSeq.NFData GitHub.Data.Activities.Subject
+ GitHub.Data.Activities: instance Data.Aeson.Types.FromJSON.FromJSON GitHub.Data.Activities.Notification
+ GitHub.Data.Activities: instance Data.Aeson.Types.FromJSON.FromJSON GitHub.Data.Activities.NotificationReason
+ GitHub.Data.Activities: instance Data.Aeson.Types.FromJSON.FromJSON GitHub.Data.Activities.Subject
+ GitHub.Data.Activities: instance Data.Binary.Class.Binary GitHub.Data.Activities.Notification
+ GitHub.Data.Activities: instance Data.Binary.Class.Binary GitHub.Data.Activities.NotificationReason
+ GitHub.Data.Activities: instance Data.Binary.Class.Binary GitHub.Data.Activities.Subject
+ GitHub.Data.Activities: instance Data.Data.Data GitHub.Data.Activities.Notification
+ GitHub.Data.Activities: instance Data.Data.Data GitHub.Data.Activities.NotificationReason
+ GitHub.Data.Activities: instance Data.Data.Data GitHub.Data.Activities.Subject
+ GitHub.Data.Activities: instance GHC.Classes.Eq GitHub.Data.Activities.Notification
+ GitHub.Data.Activities: instance GHC.Classes.Eq GitHub.Data.Activities.NotificationReason
+ GitHub.Data.Activities: instance GHC.Classes.Eq GitHub.Data.Activities.Subject
+ GitHub.Data.Activities: instance GHC.Classes.Ord GitHub.Data.Activities.Notification
+ GitHub.Data.Activities: instance GHC.Classes.Ord GitHub.Data.Activities.NotificationReason
+ GitHub.Data.Activities: instance GHC.Classes.Ord GitHub.Data.Activities.Subject
+ GitHub.Data.Activities: instance GHC.Enum.Bounded GitHub.Data.Activities.NotificationReason
+ GitHub.Data.Activities: instance GHC.Enum.Enum GitHub.Data.Activities.NotificationReason
+ GitHub.Data.Activities: instance GHC.Generics.Generic GitHub.Data.Activities.Notification
+ GitHub.Data.Activities: instance GHC.Generics.Generic GitHub.Data.Activities.NotificationReason
+ GitHub.Data.Activities: instance GHC.Generics.Generic GitHub.Data.Activities.Subject
+ GitHub.Data.Activities: instance GHC.Show.Show GitHub.Data.Activities.Notification
+ GitHub.Data.Activities: instance GHC.Show.Show GitHub.Data.Activities.NotificationReason
+ GitHub.Data.Activities: instance GHC.Show.Show GitHub.Data.Activities.Subject
+ GitHub.Data.Invitation: RepoInvitation :: !Id RepoInvitation -> !SimpleUser -> !SimpleUser -> !Repo -> !URL -> !UTCTime -> !Text -> !URL -> RepoInvitation
+ GitHub.Data.Invitation: [repoInvitationCreatedAt] :: RepoInvitation -> !UTCTime
+ GitHub.Data.Invitation: [repoInvitationHtmlUrl] :: RepoInvitation -> !URL
+ GitHub.Data.Invitation: [repoInvitationId] :: RepoInvitation -> !Id RepoInvitation
+ GitHub.Data.Invitation: [repoInvitationInvitee] :: RepoInvitation -> !SimpleUser
+ GitHub.Data.Invitation: [repoInvitationInviter] :: RepoInvitation -> !SimpleUser
+ GitHub.Data.Invitation: [repoInvitationPermission] :: RepoInvitation -> !Text
+ GitHub.Data.Invitation: [repoInvitationRepo] :: RepoInvitation -> !Repo
+ GitHub.Data.Invitation: [repoInvitationUrl] :: RepoInvitation -> !URL
+ GitHub.Data.Invitation: data RepoInvitation
+ GitHub.Data.Invitation: instance Control.DeepSeq.NFData GitHub.Data.Invitation.RepoInvitation
+ GitHub.Data.Invitation: instance Data.Aeson.Types.FromJSON.FromJSON GitHub.Data.Invitation.RepoInvitation
+ GitHub.Data.Invitation: instance Data.Binary.Class.Binary GitHub.Data.Invitation.RepoInvitation
+ GitHub.Data.Invitation: instance Data.Data.Data GitHub.Data.Invitation.RepoInvitation
+ GitHub.Data.Invitation: instance GHC.Classes.Eq GitHub.Data.Invitation.RepoInvitation
+ GitHub.Data.Invitation: instance GHC.Classes.Ord GitHub.Data.Invitation.RepoInvitation
+ GitHub.Data.Invitation: instance GHC.Generics.Generic GitHub.Data.Invitation.RepoInvitation
+ GitHub.Data.Invitation: instance GHC.Show.Show GitHub.Data.Invitation.RepoInvitation
+ GitHub.Data.PublicSSHKeys: NewPublicSSHKey :: !Text -> !Text -> NewPublicSSHKey
+ GitHub.Data.PublicSSHKeys: PublicSSHKey :: !Id PublicSSHKey -> !Text -> !URL -> !Text -> !Bool -> !Maybe UTCTime -> !Bool -> PublicSSHKey
+ GitHub.Data.PublicSSHKeys: PublicSSHKeyBasic :: !Id PublicSSHKey -> !Text -> PublicSSHKeyBasic
+ GitHub.Data.PublicSSHKeys: [basicPublicSSHKeyId] :: PublicSSHKeyBasic -> !Id PublicSSHKey
+ GitHub.Data.PublicSSHKeys: [basicPublicSSHKeyKey] :: PublicSSHKeyBasic -> !Text
+ GitHub.Data.PublicSSHKeys: [newPublicSSHKeyKey] :: NewPublicSSHKey -> !Text
+ GitHub.Data.PublicSSHKeys: [newPublicSSHKeyTitle] :: NewPublicSSHKey -> !Text
+ GitHub.Data.PublicSSHKeys: [publicSSHKeyCreatedAt] :: PublicSSHKey -> !Maybe UTCTime
+ GitHub.Data.PublicSSHKeys: [publicSSHKeyId] :: PublicSSHKey -> !Id PublicSSHKey
+ GitHub.Data.PublicSSHKeys: [publicSSHKeyKey] :: PublicSSHKey -> !Text
+ GitHub.Data.PublicSSHKeys: [publicSSHKeyReadOnly] :: PublicSSHKey -> !Bool
+ GitHub.Data.PublicSSHKeys: [publicSSHKeyTitle] :: PublicSSHKey -> !Text
+ GitHub.Data.PublicSSHKeys: [publicSSHKeyUrl] :: PublicSSHKey -> !URL
+ GitHub.Data.PublicSSHKeys: [publicSSHKeyVerified] :: PublicSSHKey -> !Bool
+ GitHub.Data.PublicSSHKeys: data NewPublicSSHKey
+ GitHub.Data.PublicSSHKeys: data PublicSSHKey
+ GitHub.Data.PublicSSHKeys: data PublicSSHKeyBasic
+ GitHub.Data.PublicSSHKeys: instance Data.Aeson.Types.FromJSON.FromJSON GitHub.Data.PublicSSHKeys.NewPublicSSHKey
+ GitHub.Data.PublicSSHKeys: instance Data.Aeson.Types.FromJSON.FromJSON GitHub.Data.PublicSSHKeys.PublicSSHKey
+ GitHub.Data.PublicSSHKeys: instance Data.Aeson.Types.FromJSON.FromJSON GitHub.Data.PublicSSHKeys.PublicSSHKeyBasic
+ GitHub.Data.PublicSSHKeys: instance Data.Aeson.Types.ToJSON.ToJSON GitHub.Data.PublicSSHKeys.NewPublicSSHKey
+ GitHub.Data.PublicSSHKeys: instance Data.Data.Data GitHub.Data.PublicSSHKeys.NewPublicSSHKey
+ GitHub.Data.PublicSSHKeys: instance Data.Data.Data GitHub.Data.PublicSSHKeys.PublicSSHKey
+ GitHub.Data.PublicSSHKeys: instance Data.Data.Data GitHub.Data.PublicSSHKeys.PublicSSHKeyBasic
+ GitHub.Data.PublicSSHKeys: instance GHC.Classes.Eq GitHub.Data.PublicSSHKeys.NewPublicSSHKey
+ GitHub.Data.PublicSSHKeys: instance GHC.Classes.Eq GitHub.Data.PublicSSHKeys.PublicSSHKey
+ GitHub.Data.PublicSSHKeys: instance GHC.Classes.Eq GitHub.Data.PublicSSHKeys.PublicSSHKeyBasic
+ GitHub.Data.PublicSSHKeys: instance GHC.Classes.Ord GitHub.Data.PublicSSHKeys.NewPublicSSHKey
+ GitHub.Data.PublicSSHKeys: instance GHC.Classes.Ord GitHub.Data.PublicSSHKeys.PublicSSHKey
+ GitHub.Data.PublicSSHKeys: instance GHC.Classes.Ord GitHub.Data.PublicSSHKeys.PublicSSHKeyBasic
+ GitHub.Data.PublicSSHKeys: instance GHC.Generics.Generic GitHub.Data.PublicSSHKeys.NewPublicSSHKey
+ GitHub.Data.PublicSSHKeys: instance GHC.Generics.Generic GitHub.Data.PublicSSHKeys.PublicSSHKey
+ GitHub.Data.PublicSSHKeys: instance GHC.Generics.Generic GitHub.Data.PublicSSHKeys.PublicSSHKeyBasic
+ GitHub.Data.PublicSSHKeys: instance GHC.Show.Show GitHub.Data.PublicSSHKeys.NewPublicSSHKey
+ GitHub.Data.PublicSSHKeys: instance GHC.Show.Show GitHub.Data.PublicSSHKeys.PublicSSHKey
+ GitHub.Data.PublicSSHKeys: instance GHC.Show.Show GitHub.Data.PublicSSHKeys.PublicSSHKeyBasic
+ GitHub.Data.Request: MtPreview :: a -> MediaType a
+ GitHub.Data.Request: instance Data.Data.Data a => Data.Data.Data (GitHub.Data.Request.MediaType a)
+ GitHub.Data.Request: instance GHC.Classes.Eq a => GHC.Classes.Eq (GitHub.Data.Request.MediaType a)
+ GitHub.Data.Request: instance GHC.Classes.Ord a => GHC.Classes.Ord (GitHub.Data.Request.MediaType a)
+ GitHub.Data.Request: instance GHC.Generics.Generic (GitHub.Data.Request.MediaType a)
+ GitHub.Data.Request: instance GHC.Read.Read a => GHC.Read.Read (GitHub.Data.Request.MediaType a)
+ GitHub.Data.Request: instance GHC.Show.Show a => GHC.Show.Show (GitHub.Data.Request.MediaType a)
+ GitHub.Data.Webhooks: WebhookCheckRunEvent :: RepoWebhookEvent
+ GitHub.Data.Webhooks: WebhookCheckSuiteEvent :: RepoWebhookEvent
+ GitHub.Data.Webhooks: WebhookContentReferenceEvent :: RepoWebhookEvent
+ GitHub.Data.Webhooks: WebhookDeployKeyEvent :: RepoWebhookEvent
+ GitHub.Data.Webhooks: WebhookDownloadEvent :: RepoWebhookEvent
+ GitHub.Data.Webhooks: WebhookFollowEvent :: RepoWebhookEvent
+ GitHub.Data.Webhooks: WebhookForkApplyEvent :: RepoWebhookEvent
+ GitHub.Data.Webhooks: WebhookGistEvent :: RepoWebhookEvent
+ GitHub.Data.Webhooks: WebhookGitHubAppAuthorizationEvent :: RepoWebhookEvent
+ GitHub.Data.Webhooks: WebhookLabelEvent :: RepoWebhookEvent
+ GitHub.Data.Webhooks: WebhookMarketplacePurchaseEvent :: RepoWebhookEvent
+ GitHub.Data.Webhooks: WebhookMembershipEvent :: RepoWebhookEvent
+ GitHub.Data.Webhooks: WebhookMetaEvent :: RepoWebhookEvent
+ GitHub.Data.Webhooks: WebhookMilestoneEvent :: RepoWebhookEvent
+ GitHub.Data.Webhooks: WebhookOrgBlockEvent :: RepoWebhookEvent
+ GitHub.Data.Webhooks: WebhookOrganizationEvent :: RepoWebhookEvent
+ GitHub.Data.Webhooks: WebhookProjectCardEvent :: RepoWebhookEvent
+ GitHub.Data.Webhooks: WebhookProjectColumnEvent :: RepoWebhookEvent
+ GitHub.Data.Webhooks: WebhookProjectEvent :: RepoWebhookEvent
+ GitHub.Data.Webhooks: WebhookPullRequestReviewEvent :: RepoWebhookEvent
+ GitHub.Data.Webhooks: WebhookRegistryPackageEvent :: RepoWebhookEvent
+ GitHub.Data.Webhooks: WebhookRepositoryEvent :: RepoWebhookEvent
+ GitHub.Data.Webhooks: WebhookRepositoryImportEvent :: RepoWebhookEvent
+ GitHub.Data.Webhooks: WebhookRepositoryVulnerabilityAlertEvent :: RepoWebhookEvent
+ GitHub.Data.Webhooks: WebhookSecurityAdvisoryEvent :: RepoWebhookEvent
+ GitHub.Data.Webhooks: WebhookStarEvent :: RepoWebhookEvent
+ GitHub.Data.Webhooks: WebhookTeamEvent :: RepoWebhookEvent
+ GitHub.Endpoints.Activity.Notifications: getNotifications :: Auth -> IO (Either Error (Vector Notification))
+ GitHub.Endpoints.Activity.Notifications: getNotificationsR :: FetchCount -> Request 'RA (Vector Notification)
+ GitHub.Endpoints.Activity.Notifications: markAllNotificationsAsReadR :: GenRequest 'MtUnit 'RW ()
+ GitHub.Endpoints.Activity.Notifications: markNotificationAsRead :: Auth -> Id Notification -> IO (Either Error ())
+ GitHub.Endpoints.Activity.Notifications: markNotificationAsReadR :: Id Notification -> GenRequest 'MtUnit 'RW ()
+ GitHub.Endpoints.Activity.Notifications: markNotificationsAsRead :: Auth -> IO (Either Error ())
+ GitHub.Endpoints.Repos.Invitations: acceptInvitationFromR :: Id RepoInvitation -> GenRequest 'MtUnit 'RW ()
+ GitHub.Endpoints.Repos.Invitations: listInvitationsForR :: FetchCount -> Request k (Vector RepoInvitation)
+ GitHub.Endpoints.Repos.Invitations: listInvitationsOnR :: Name Owner -> Name Repo -> FetchCount -> GenRequest 'MtJSON k (Vector RepoInvitation)
+ GitHub.Endpoints.Users.PublicSSHKeys: createUserPublicSSHKey' :: Auth -> NewPublicSSHKey -> IO (Either Error PublicSSHKey)
+ GitHub.Endpoints.Users.PublicSSHKeys: createUserPublicSSHKeyR :: NewPublicSSHKey -> Request 'RW PublicSSHKey
+ GitHub.Endpoints.Users.PublicSSHKeys: deleteUserPublicSSHKey' :: Auth -> Id PublicSSHKey -> IO (Either Error ())
+ GitHub.Endpoints.Users.PublicSSHKeys: deleteUserPublicSSHKeyR :: Id PublicSSHKey -> GenRequest 'MtUnit 'RW ()
+ GitHub.Endpoints.Users.PublicSSHKeys: publicSSHKey' :: Auth -> Id PublicSSHKey -> IO (Either Error PublicSSHKey)
+ GitHub.Endpoints.Users.PublicSSHKeys: publicSSHKeyR :: Id PublicSSHKey -> Request 'RA PublicSSHKey
+ GitHub.Endpoints.Users.PublicSSHKeys: publicSSHKeys' :: Auth -> IO (Either Error (Vector PublicSSHKey))
+ GitHub.Endpoints.Users.PublicSSHKeys: publicSSHKeysFor' :: Name Owner -> IO (Either Error (Vector PublicSSHKeyBasic))
+ GitHub.Endpoints.Users.PublicSSHKeys: publicSSHKeysForR :: Name Owner -> FetchCount -> Request 'RO (Vector PublicSSHKeyBasic)
+ GitHub.Endpoints.Users.PublicSSHKeys: publicSSHKeysR :: Request 'RA (Vector PublicSSHKey)
+ GitHub.Internal.Prelude: emptyObject :: Value
+ GitHub.Request: class PreviewAccept p
+ GitHub.Request: class PreviewAccept p => PreviewParseResponse p a
+ GitHub.Request: instance GitHub.Request.PreviewAccept p => GitHub.Request.Accept ('GitHub.Data.Request.MtPreview p)
+ GitHub.Request: instance GitHub.Request.PreviewParseResponse p a => GitHub.Request.ParseResponse ('GitHub.Data.Request.MtPreview p) a
+ GitHub.Request: parseResponseJSON :: (FromJSON a, MonadError Error m) => Response ByteString -> m a
+ GitHub.Request: previewContentType :: PreviewAccept p => Tagged ( 'MtPreview p) ByteString
+ GitHub.Request: previewModifyRequest :: PreviewAccept p => Tagged ( 'MtPreview p) (Request -> Request)
+ GitHub.Request: previewParseResponse :: (PreviewParseResponse p a, MonadError Error m) => Request -> Response ByteString -> Tagged ( 'MtPreview p) (m a)
- GitHub: addCollaboratorR :: Name Owner -> Name Repo -> Name User -> GenRequest 'MtUnit 'RW ()
+ GitHub: addCollaboratorR :: Name Owner -> Name Repo -> Name User -> GenRequest 'MtJSON 'RW (Maybe RepoInvitation)
- GitHub: deleteCommentR :: Name Owner -> Name Repo -> Id Comment -> Request 'RW ()
+ GitHub: deleteCommentR :: Name Owner -> Name Repo -> Id Comment -> GenRequest 'MtUnit 'RW ()
- GitHub: deleteGistR :: Name Gist -> Request 'RW ()
+ GitHub: deleteGistR :: Name Gist -> GenRequest 'MtUnit 'RW ()
- GitHub: deleteLabelR :: Name Owner -> Name Repo -> Name IssueLabel -> Request 'RW ()
+ GitHub: deleteLabelR :: Name Owner -> Name Repo -> Name IssueLabel -> GenRequest 'MtUnit 'RW ()
- GitHub: deleteMilestoneR :: Name Owner -> Name Repo -> Id Milestone -> Request 'RW ()
+ GitHub: deleteMilestoneR :: Name Owner -> Name Repo -> Id Milestone -> GenRequest 'MtUnit 'RW ()
- GitHub: deleteRepoWebhookR :: Name Owner -> Name Repo -> Id RepoWebhook -> Request 'RW ()
+ GitHub: deleteRepoWebhookR :: Name Owner -> Name Repo -> Id RepoWebhook -> GenRequest 'MtUnit 'RW ()
- GitHub: deleteTeamMembershipForR :: Id Team -> Name Owner -> Request 'RW ()
+ GitHub: deleteTeamMembershipForR :: Id Team -> Name Owner -> GenRequest 'MtUnit 'RW ()
- GitHub: deleteTeamR :: Id Team -> Request 'RW ()
+ GitHub: deleteTeamR :: Id Team -> GenRequest 'MtUnit 'RW ()
- GitHub: removeAllLabelsFromIssueR :: Name Owner -> Name Repo -> Id Issue -> Request 'RW ()
+ GitHub: removeAllLabelsFromIssueR :: Name Owner -> Name Repo -> Id Issue -> GenRequest 'MtUnit 'RW ()
- GitHub: removeLabelFromIssueR :: Name Owner -> Name Repo -> Id Issue -> Name IssueLabel -> Request 'RW ()
+ GitHub: removeLabelFromIssueR :: Name Owner -> Name Repo -> Id Issue -> Name IssueLabel -> GenRequest 'MtUnit 'RW ()
- GitHub: unstarGistR :: Name Gist -> Request 'RW ()
+ GitHub: unstarGistR :: Name Gist -> GenRequest 'MtUnit 'RW ()
- GitHub: unstarRepoR :: Name Owner -> Name Repo -> Request 'RW ()
+ GitHub: unstarRepoR :: Name Owner -> Name Repo -> GenRequest 'MtUnit 'RW ()
- GitHub.Data.Request: MtDiff :: MediaType
+ GitHub.Data.Request: MtDiff :: MediaType a
- GitHub.Data.Request: MtJSON :: MediaType
+ GitHub.Data.Request: MtJSON :: MediaType a
- GitHub.Data.Request: MtPatch :: MediaType
+ GitHub.Data.Request: MtPatch :: MediaType a
- GitHub.Data.Request: MtRaw :: MediaType
+ GitHub.Data.Request: MtRaw :: MediaType a
- GitHub.Data.Request: MtRedirect :: MediaType
+ GitHub.Data.Request: MtRedirect :: MediaType a
- GitHub.Data.Request: MtSha :: MediaType
+ GitHub.Data.Request: MtSha :: MediaType a
- GitHub.Data.Request: MtStar :: MediaType
+ GitHub.Data.Request: MtStar :: MediaType a
- GitHub.Data.Request: MtStatus :: MediaType
+ GitHub.Data.Request: MtStatus :: MediaType a
- GitHub.Data.Request: MtUnit :: MediaType
+ GitHub.Data.Request: MtUnit :: MediaType a
- GitHub.Data.Request: data GenRequest (mt :: MediaType) (rw :: RW) a
+ GitHub.Data.Request: data GenRequest (mt :: MediaType *) (rw :: RW) a
- GitHub.Data.Request: data MediaType
+ GitHub.Data.Request: data MediaType a
- GitHub.Endpoints.Activity.Starring: unstarRepoR :: Name Owner -> Name Repo -> Request 'RW ()
+ GitHub.Endpoints.Activity.Starring: unstarRepoR :: Name Owner -> Name Repo -> GenRequest 'MtUnit 'RW ()
- GitHub.Endpoints.Gists: deleteGistR :: Name Gist -> Request 'RW ()
+ GitHub.Endpoints.Gists: deleteGistR :: Name Gist -> GenRequest 'MtUnit 'RW ()
- GitHub.Endpoints.Gists: unstarGistR :: Name Gist -> Request 'RW ()
+ GitHub.Endpoints.Gists: unstarGistR :: Name Gist -> GenRequest 'MtUnit 'RW ()
- GitHub.Endpoints.Issues.Comments: deleteCommentR :: Name Owner -> Name Repo -> Id Comment -> Request 'RW ()
+ GitHub.Endpoints.Issues.Comments: deleteCommentR :: Name Owner -> Name Repo -> Id Comment -> GenRequest 'MtUnit 'RW ()
- GitHub.Endpoints.Issues.Labels: deleteLabelR :: Name Owner -> Name Repo -> Name IssueLabel -> Request 'RW ()
+ GitHub.Endpoints.Issues.Labels: deleteLabelR :: Name Owner -> Name Repo -> Name IssueLabel -> GenRequest 'MtUnit 'RW ()
- GitHub.Endpoints.Issues.Labels: removeAllLabelsFromIssueR :: Name Owner -> Name Repo -> Id Issue -> Request 'RW ()
+ GitHub.Endpoints.Issues.Labels: removeAllLabelsFromIssueR :: Name Owner -> Name Repo -> Id Issue -> GenRequest 'MtUnit 'RW ()
- GitHub.Endpoints.Issues.Labels: removeLabelFromIssueR :: Name Owner -> Name Repo -> Id Issue -> Name IssueLabel -> Request 'RW ()
+ GitHub.Endpoints.Issues.Labels: removeLabelFromIssueR :: Name Owner -> Name Repo -> Id Issue -> Name IssueLabel -> GenRequest 'MtUnit 'RW ()
- GitHub.Endpoints.Issues.Milestones: deleteMilestoneR :: Name Owner -> Name Repo -> Id Milestone -> Request 'RW ()
+ GitHub.Endpoints.Issues.Milestones: deleteMilestoneR :: Name Owner -> Name Repo -> Id Milestone -> GenRequest 'MtUnit 'RW ()
- GitHub.Endpoints.Organizations.Teams: deleteTeamMembershipForR :: Id Team -> Name Owner -> Request 'RW ()
+ GitHub.Endpoints.Organizations.Teams: deleteTeamMembershipForR :: Id Team -> Name Owner -> GenRequest 'MtUnit 'RW ()
- GitHub.Endpoints.Organizations.Teams: deleteTeamR :: Id Team -> Request 'RW ()
+ GitHub.Endpoints.Organizations.Teams: deleteTeamR :: Id Team -> GenRequest 'MtUnit 'RW ()
- GitHub.Endpoints.Repos: deleteRepoR :: Name Owner -> Name Repo -> Request 'RW ()
+ GitHub.Endpoints.Repos: deleteRepoR :: Name Owner -> Name Repo -> GenRequest 'MtUnit 'RW ()
- GitHub.Endpoints.Repos.Collaborators: addCollaborator :: Auth -> Name Owner -> Name Repo -> Name User -> IO (Either Error ())
+ GitHub.Endpoints.Repos.Collaborators: addCollaborator :: Auth -> Name Owner -> Name Repo -> Name User -> IO (Either Error (Maybe RepoInvitation))
- GitHub.Endpoints.Repos.Collaborators: addCollaboratorR :: Name Owner -> Name Repo -> Name User -> GenRequest 'MtUnit 'RW ()
+ GitHub.Endpoints.Repos.Collaborators: addCollaboratorR :: Name Owner -> Name Repo -> Name User -> GenRequest 'MtJSON 'RW (Maybe RepoInvitation)
- GitHub.Endpoints.Repos.Contents: deleteFileR :: Name Owner -> Name Repo -> DeleteFile -> Request 'RW ()
+ GitHub.Endpoints.Repos.Contents: deleteFileR :: Name Owner -> Name Repo -> DeleteFile -> GenRequest 'MtUnit 'RW ()
- GitHub.Endpoints.Repos.DeployKeys: deleteRepoDeployKeyR :: Name Owner -> Name Repo -> Id RepoDeployKey -> Request 'RW ()
+ GitHub.Endpoints.Repos.DeployKeys: deleteRepoDeployKeyR :: Name Owner -> Name Repo -> Id RepoDeployKey -> GenRequest 'MtUnit 'RW ()
- GitHub.Endpoints.Repos.Webhooks: deleteRepoWebhookR :: Name Owner -> Name Repo -> Id RepoWebhook -> Request 'RW ()
+ GitHub.Endpoints.Repos.Webhooks: deleteRepoWebhookR :: Name Owner -> Name Repo -> Id RepoWebhook -> GenRequest 'MtUnit 'RW ()
- GitHub.Request: class Accept (mt :: MediaType)
+ GitHub.Request: class Accept (mt :: MediaType *)
- GitHub.Request: class Accept mt => ParseResponse (mt :: MediaType) a
+ GitHub.Request: class Accept mt => ParseResponse (mt :: MediaType *) a
- GitHub.Request: data GenRequest (mt :: MediaType) (rw :: RW) a
+ GitHub.Request: data GenRequest (mt :: MediaType *) (rw :: RW) a
- GitHub.Request: executeRequest :: ParseResponse mt a => Auth -> GenRequest mt rw a -> IO (Either Error a)
+ GitHub.Request: executeRequest :: (AuthMethod am, ParseResponse mt a) => am -> GenRequest mt rw a -> IO (Either Error a)
- GitHub.Request: executeRequestMaybe :: ParseResponse mt a => Maybe Auth -> GenRequest mt 'RO a -> IO (Either Error a)
+ GitHub.Request: executeRequestMaybe :: (AuthMethod am, ParseResponse mt a) => Maybe am -> GenRequest mt 'RO a -> IO (Either Error a)
- GitHub.Request: executeRequestWithMgr :: ParseResponse mt a => Manager -> Auth -> GenRequest mt rw a -> IO (Either Error a)
+ GitHub.Request: executeRequestWithMgr :: (AuthMethod am, ParseResponse mt a) => Manager -> am -> GenRequest mt rw a -> IO (Either Error a)
- GitHub.Request: makeHttpRequest :: forall mt rw a m. (MonadThrow m, Accept mt) => Maybe Auth -> GenRequest mt rw a -> m Request
+ GitHub.Request: makeHttpRequest :: forall am mt rw a m. (AuthMethod am, MonadThrow m, Accept mt) => Maybe am -> GenRequest mt rw a -> m Request
Files
- CHANGELOG.md +27/−0
- github.cabal +38/−15
- spec/GitHub/PublicSSHKeysSpec.hs +41/−0
- spec/GitHub/PullRequestsSpec.hs +78/−27
- src/GitHub.hs +24/−2
- src/GitHub/Auth.hs +31/−7
- src/GitHub/Data.hs +3/−1
- src/GitHub/Data/Activities.hs +85/−1
- src/GitHub/Data/Content.hs +8/−7
- src/GitHub/Data/Definitions.hs +4/−5
- src/GitHub/Data/Deployments.hs +5/−5
- src/GitHub/Data/Email.hs +6/−3
- src/GitHub/Data/Invitation.hs +32/−2
- src/GitHub/Data/Issues.hs +4/−2
- src/GitHub/Data/Options.hs +12/−10
- src/GitHub/Data/PublicSSHKeys.hs +60/−0
- src/GitHub/Data/PullRequests.hs +13/−13
- src/GitHub/Data/Request.hs +14/−13
- src/GitHub/Data/Reviews.hs +10/−7
- src/GitHub/Data/Statuses.hs +7/−5
- src/GitHub/Data/Teams.hs +21/−19
- src/GitHub/Data/Webhooks.hs +132/−48
- src/GitHub/Endpoints/Activity/Notifications.hs +45/−0
- src/GitHub/Endpoints/Activity/Starring.hs +2/−2
- src/GitHub/Endpoints/Activity/Watching.hs +2/−2
- src/GitHub/Endpoints/Gists.hs +9/−9
- src/GitHub/Endpoints/GitData/Blobs.hs +1/−1
- src/GitHub/Endpoints/GitData/References.hs +1/−1
- src/GitHub/Endpoints/GitData/Trees.hs +2/−2
- src/GitHub/Endpoints/Issues.hs +4/−4
- src/GitHub/Endpoints/Issues/Comments.hs +6/−6
- src/GitHub/Endpoints/Issues/Events.hs +3/−3
- src/GitHub/Endpoints/Issues/Labels.hs +17/−17
- src/GitHub/Endpoints/Issues/Milestones.hs +3/−3
- src/GitHub/Endpoints/Organizations.hs +2/−2
- src/GitHub/Endpoints/Organizations/Teams.hs +4/−4
- src/GitHub/Endpoints/PullRequests.hs +3/−3
- src/GitHub/Endpoints/PullRequests/Comments.hs +1/−1
- src/GitHub/Endpoints/PullRequests/Reviews.hs +4/−4
- src/GitHub/Endpoints/Repos.hs +12/−10
- src/GitHub/Endpoints/Repos/Collaborators.hs +2/−2
- src/GitHub/Endpoints/Repos/Commits.hs +3/−3
- src/GitHub/Endpoints/Repos/Contents.hs +5/−5
- src/GitHub/Endpoints/Repos/DeployKeys.hs +2/−2
- src/GitHub/Endpoints/Repos/Forks.hs +1/−1
- src/GitHub/Endpoints/Repos/Invitations.hs +35/−0
- src/GitHub/Endpoints/Repos/Releases.hs +4/−4
- src/GitHub/Endpoints/Repos/Webhooks.hs +2/−2
- src/GitHub/Endpoints/Users.hs +1/−1
- src/GitHub/Endpoints/Users/PublicSSHKeys.hs +83/−0
- src/GitHub/Internal/Prelude.hs +4/−3
- src/GitHub/Request.hs +91/−40
CHANGELOG.md view
@@ -1,5 +1,32 @@ ## Changes for next +## Changes for 0.22++- Type-class for various auth methods+ [#365](https://github.com/phadej/github/pull/365)+- Throw on non-200 responses+ [#350](https://github.com/phadej/github/pull/350)+- Add extension point for (preview) media types+ [#370](https://github.com/phadej/github/pull/370)+- Add missing webhook event types+ [#359](https://github.com/phadej/github/pull/359)+- Add invitation endpoint+ [#360](https://github.com/phadej/github/pull/360)+- Add notifications endpoints+ [#324](https://github.com/phadej/github/pull/324)+- Add ssh keys endpoints+ [#363](https://github.com/phadej/github/pull/365)+- Case insensitive enum parsing+ [#373](https://github.com/phadej/github/pull/373)+- Don't try parse unitary responses+ [#377](https://github.com/phadej/github/issues/377)+- Update dependencies+ [#364](https://github.com/phadej/github/pull/364)+ [#368](https://github.com/phadej/github/pull/368)+ [#369](https://github.com/phadej/github/pull/369)+- Documentation improvements+ [#357](https://github.com/phadej/github/pull/357)+ ## Changes for 0.21 - Refactor `Request` type.
github.cabal view
@@ -1,6 +1,6 @@ cabal-version: >=1.10 name: github-version: 0.21+version: 0.22 synopsis: Access to the GitHub API, v3. category: Network description:@@ -15,7 +15,7 @@ > > main :: IO () > main = do- > possibleUser <- GH.executeRequest' $ GH.userInfoR "phadej"+ > possibleUser <- GH.executeRequest' $ GH.userInfoForR "phadej" > print possibleUser . For more of an overview please see the README: <https://github.com/phadej/github/blob/master/README.md>@@ -30,7 +30,7 @@ Copyright 2012-2013 Mike Burns, Copyright 2013-2015 John Wiegley, Copyright 2016-2019 Oleg Grenrus tested-with:- ghc ==7.8.4 || ==7.10.3 || ==8.0.2 || ==8.2.2 || ==8.4.3 || ==8.6.3+ GHC ==7.8.4 || ==7.10.3 || ==8.0.2 || ==8.2.2 || ==8.4.4 || ==8.6.5 || ==8.8.1 extra-source-files: README.md@@ -47,6 +47,11 @@ type: git location: git://github.com/phadej/github.git +flag openssl+ description: "Use http-client-openssl"+ manual: True+ default: False+ library default-language: Haskell2010 ghc-options: -Wall@@ -87,6 +92,7 @@ GitHub.Data.Milestone GitHub.Data.Name GitHub.Data.Options+ GitHub.Data.PublicSSHKeys GitHub.Data.PullRequests GitHub.Data.RateLimit GitHub.Data.Releases@@ -101,6 +107,7 @@ GitHub.Data.Webhooks.Validate GitHub.Endpoints.Activity.Events GitHub.Endpoints.Activity.Starring+ GitHub.Endpoints.Activity.Notifications GitHub.Endpoints.Activity.Watching GitHub.Endpoints.Gists GitHub.Endpoints.Gists.Comments@@ -131,10 +138,12 @@ GitHub.Endpoints.Repos.Releases GitHub.Endpoints.Repos.Statuses GitHub.Endpoints.Repos.Webhooks+ GitHub.Endpoints.Repos.Invitations GitHub.Endpoints.Search GitHub.Endpoints.Users GitHub.Endpoints.Users.Emails GitHub.Endpoints.Users.Followers+ GitHub.Endpoints.Users.PublicSSHKeys GitHub.Internal.Prelude GitHub.Request @@ -155,32 +164,43 @@ aeson >=1.4.0.0 && <1.5 , base-compat >=0.10.4 && <0.11 , base16-bytestring >=0.1.1.6 && <0.2- , binary-orphans >=0.1.8.0 && <0.2+ , binary-instances >=1 && <1.1 , cryptohash-sha1 >=0.11.100.1 && <0.12 , deepseq-generics >=0.2.0.0 && <0.3- , exceptions >=0.10.0 && <0.11- , hashable >=1.2.7.0 && <1.3+ , exceptions >=0.10.2 && <0.11+ , hashable >=1.2.7.0 && <1.4 , http-client >=0.5.12 && <0.7- , http-client-tls >=0.3.5.3 && <0.4 , http-link-header >=1.0.3.1 && <1.1- , http-types >=0.12.1 && <0.13+ , http-types >=0.12.3 && <0.13 , iso8601-time >=0.1.5 && <0.2 , network-uri >=2.6.1.0 && <2.7- , semigroups >=0.18.5 && <0.19- , tagged- , tls >=1.4.1- , transformers-compat >=0.6 && <0.7- , unordered-containers >=0.2.9.0 && <0.3+ , tagged >=0.8.5 && <0.9+ , transformers-compat >=0.6.5 && <0.7+ , unordered-containers >=0.2.10.0 && <0.3 , vector >=0.12.0.1 && <0.13 , vector-instances >=3.4 && <3.5 + if flag(openssl)+ build-depends:+ http-client-openssl >=0.3.0.0 && <0.4+ , HsOpenSSL >=0.11.4.16 && <0.12+ , HsOpenSSL-x509-system >=0.1.0.3 && <0.2+ else+ build-depends:+ http-client-tls >=0.3.5.3 && <0.4+ , tls >=1.4.1++ if !impl(ghc >= 8.0)+ build-depends:+ semigroups >=0.18.5 && <0.20+ test-suite github-test default-language: Haskell2010 type: exitcode-stdio-1.0 hs-source-dirs: spec main-is: Spec.hs- ghc-options: -Wall- build-tool-depends: hspec-discover:hspec-discover >=2.6.1 && <2.8+ ghc-options: -Wall -threaded+ build-tool-depends: hspec-discover:hspec-discover >=2.7.1 && <2.8 other-extensions: TemplateHaskell other-modules: GitHub.ActivitySpec@@ -189,6 +209,7 @@ GitHub.IssuesSpec GitHub.OrganizationsSpec GitHub.PullRequestReviewsSpec+ GitHub.PublicSSHKeysSpec GitHub.PullRequestsSpec GitHub.RateLimitSpec GitHub.ReleasesSpec@@ -203,6 +224,8 @@ , bytestring , file-embed , github+ , tagged+ , text , hspec >=2.6.1 && <2.8 , unordered-containers , vector
+ spec/GitHub/PublicSSHKeysSpec.hs view
@@ -0,0 +1,41 @@+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE TemplateHaskell #-}+module GitHub.PublicSSHKeysSpec where++import GitHub+ (Auth (..), FetchCount (..), PublicSSHKey (..), executeRequest)+import GitHub.Endpoints.Users.PublicSSHKeys+ (publicSSHKey', publicSSHKeys', publicSSHKeysForR)++import Data.Either.Compat (isRight)+import Data.String (fromString)+import System.Environment (lookupEnv)+import Test.Hspec (Spec, describe, it, pendingWith, shouldSatisfy)++import qualified Data.Vector as V++fromRightS :: Show a => Either a b -> b+fromRightS (Right b) = b+fromRightS (Left a) = error $ "Expected a Right and got a Left" ++ show a++withAuth :: (Auth -> IO ()) -> IO ()+withAuth action = do+ mtoken <- lookupEnv "GITHUB_TOKEN"+ case mtoken of+ Nothing -> pendingWith "no GITHUB_TOKEN"+ Just token -> action (OAuth $ fromString token)++spec :: Spec+spec = do+ describe "publicSSHKeysFor'" $ do+ it "works" $ withAuth $ \auth -> do+ keys <- executeRequest auth $ publicSSHKeysForR "phadej" FetchAll+ V.length (fromRightS keys) `shouldSatisfy` (> 1)++ describe "publicSSHKeys' and publicSSHKey'" $ do+ it "works" $ withAuth $ \auth -> do+ keys <- publicSSHKeys' auth+ V.length (fromRightS keys) `shouldSatisfy` (> 1)++ key <- publicSSHKey' auth (publicSSHKeyId $ V.head (fromRightS keys))+ key `shouldSatisfy` isRight
spec/GitHub/PullRequestsSpec.hs view
@@ -1,21 +1,27 @@-{-# LANGUAGE OverloadedStrings #-}-{-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE DataKinds #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE MultiParamTypeClasses #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE TemplateHaskell #-} module GitHub.PullRequestsSpec where -import qualified GitHub+import qualified GitHub as GH import Prelude () import Prelude.Compat -import Data.Aeson (eitherDecodeStrict)-import Data.ByteString (ByteString)-import Data.Either.Compat (isRight)-import Data.FileEmbed (embedFile)-import Data.Foldable (for_)-import Data.String (fromString)-import qualified Data.Vector as V+import Data.Aeson+ (FromJSON (..), eitherDecodeStrict, withObject, (.:))+import Data.ByteString (ByteString) import qualified Data.ByteString.Lazy.Char8 as LBS8-import System.Environment (lookupEnv)+import Data.Either.Compat (isRight)+import Data.FileEmbed (embedFile)+import Data.Foldable (for_)+import Data.String (fromString)+import Data.Tagged (Tagged (..))+import Data.Text (Text)+import qualified Data.Vector as V+import System.Environment (lookupEnv) import Test.Hspec (Spec, describe, it, pendingWith, shouldBe, shouldSatisfy) @@ -23,68 +29,75 @@ fromRightS (Right b) = b fromRightS (Left a) = error $ "Expected a Right and got a Left" ++ show a -withAuth :: (GitHub.Auth -> IO ()) -> IO ()+withAuth :: (GH.Auth -> IO ()) -> IO () withAuth action = do mtoken <- lookupEnv "GITHUB_TOKEN" case mtoken of Nothing -> pendingWith "no GITHUB_TOKEN"- Just token -> action (GitHub.OAuth $ fromString token)+ Just token -> action (GH.OAuth $ fromString token) spec :: Spec spec = do describe "pullRequestsForR" $ do it "works" $ withAuth $ \auth -> for_ repos $ \(owner, repo) -> do- cs <- GitHub.executeRequest auth $- GitHub.pullRequestsForR owner repo opts GitHub.FetchAll+ cs <- GH.executeRequest auth $+ GH.pullRequestsForR owner repo opts GH.FetchAll cs `shouldSatisfy` isRight describe "pullRequestPatchR" $ it "works" $ withAuth $ \auth -> do- Right patch <- GitHub.executeRequest auth $- GitHub.pullRequestPatchR "phadej" "github" (GitHub.IssueNumber 349)+ Right patch <- GH.executeRequest auth $+ GH.pullRequestPatchR "phadej" "github" (GH.IssueNumber 349) head (LBS8.lines patch) `shouldBe` "From c0e4ad33811be82e1f72ee76116345c681703103 Mon Sep 17 00:00:00 2001" describe "decoding pull request payloads" $ do it "decodes a pull request 'opened' payload" $ do- V.length (GitHub.simplePullRequestRequestedReviewers simplePullRequestOpened)+ V.length (GH.simplePullRequestRequestedReviewers simplePullRequestOpened) `shouldBe` 0 - V.length (GitHub.pullRequestRequestedReviewers pullRequestOpened)+ V.length (GH.pullRequestRequestedReviewers pullRequestOpened) `shouldBe` 0 it "decodes a pull request 'review_requested' payload" $ do- V.length (GitHub.simplePullRequestRequestedReviewers simplePullRequestReviewRequested)+ V.length (GH.simplePullRequestRequestedReviewers simplePullRequestReviewRequested) `shouldBe` 1 - V.length (GitHub.pullRequestRequestedReviewers pullRequestReviewRequested)+ V.length (GH.pullRequestRequestedReviewers pullRequestReviewRequested) `shouldBe` 1 describe "checking if a pull request is merged" $ do it "works" $ withAuth $ \auth -> do- b <- GitHub.executeRequest auth $ GitHub.isPullRequestMergedR "phadej" "github" (GitHub.IssueNumber 14)+ b <- GH.executeRequest auth $ GH.isPullRequestMergedR "phadej" "github" (GH.IssueNumber 14) b `shouldSatisfy` isRight fromRightS b `shouldBe` True + describe "Draft Pull Request" $ do+ it "works" $ withAuth $ \auth -> do+ cs <- GH.executeRequest auth $+ draftPullRequestsForR "phadej" "github" opts GH.FetchAll++ cs `shouldSatisfy` isRight+ where repos = [ ("thoughtbot", "paperclip") , ("phadej", "github") ]- opts = GitHub.stateClosed+ opts = GH.stateClosed - simplePullRequestOpened :: GitHub.SimplePullRequest+ simplePullRequestOpened :: GH.SimplePullRequest simplePullRequestOpened = fromRightS (eitherDecodeStrict prOpenedPayload) - pullRequestOpened :: GitHub.PullRequest+ pullRequestOpened :: GH.PullRequest pullRequestOpened = fromRightS (eitherDecodeStrict prOpenedPayload) - simplePullRequestReviewRequested :: GitHub.SimplePullRequest+ simplePullRequestReviewRequested :: GH.SimplePullRequest simplePullRequestReviewRequested = fromRightS (eitherDecodeStrict prReviewRequestedPayload) - pullRequestReviewRequested :: GitHub.PullRequest+ pullRequestReviewRequested :: GH.PullRequest pullRequestReviewRequested = fromRightS (eitherDecodeStrict prReviewRequestedPayload) @@ -93,3 +106,41 @@ prReviewRequestedPayload :: ByteString prReviewRequestedPayload = $(embedFile "fixtures/pull-request-review-requested.json")++-------------------------------------------------------------------------------+-- Draft Pull Requests+-------------------------------------------------------------------------------++draftPullRequestsForR+ :: GH.Name GH.Owner+ -> GH.Name GH.Repo+ -> GH.PullRequestMod+ -> GH.FetchCount+ -> GH.GenRequest ('GH.MtPreview ShadowCat) k (V.Vector DraftPR)+draftPullRequestsForR user repo opts = GH.PagedQuery+ ["repos", GH.toPathPart user, GH.toPathPart repo, "pulls"]+ (GH.prModToQueryString opts)++data DraftPR = DraftPR+ { dprId :: !(GH.Id GH.PullRequest)+ , dprNumber :: !GH.IssueNumber+ , dprTitle :: !Text+ , dprDraft :: !Bool+ }+ deriving (Show)++instance FromJSON DraftPR where+ parseJSON = withObject "DraftPR" $ \obj -> DraftPR+ <$> obj .: "id"+ <*> obj .: "number"+ <*> obj .: "title"+ <*> obj .: "draft"++-- | @application/vnd.github.shadow-cat-preview+json@ <https://developer.github.com/v3/previews/#draft-pull-requests>+data ShadowCat++instance GH.PreviewAccept ShadowCat where+ previewContentType = Tagged "application/vnd.github.shadow-cat-preview+json"++instance FromJSON a => GH.PreviewParseResponse ShadowCat a where+ previewParseResponse _ res = Tagged (GH.parseResponseJSON res)
src/GitHub.hs view
@@ -7,7 +7,7 @@ -- this package. -- -- See "GitHub.Request" module for executing 'Request', or other modules--- of this package (e.g. "GitHub.Users") for already composed versions.+-- of this package (e.g. "GitHub.Endpoints.Users") for already composed versions. -- -- The missing endpoints lists show which endpoints we know are missing, there -- might be more.@@ -16,9 +16,16 @@ -- | See <https://developer.github.com/v3/activity/> -- ** Events- -- | See https://developer.github.com/v3/activity/events/#events+ -- | See <https://developer.github.com/v3/activity/events/> repositoryEventsR, userEventsR,++ -- ** Notifications+ -- | See <https://developer.github.com/v3/activity/notifications/>+ getNotificationsR,+ markNotificationAsReadR,+ markAllNotificationsAsReadR,+ -- ** Starring -- | See <https://developer.github.com/v3/activity/starring/> --@@ -312,6 +319,19 @@ latestReleaseR, releaseByTagNameR, + -- ** Invitations+ -- | See <https://developer.github.com/v3/repos/invitations/>+ -- Missing endpoints:++ -- * Delete a repository invitation+ -- * Update a repository invitation+ -- * Decline a repository invitation++ listInvitationsOnR,+ acceptInvitationFromR,+ listInvitationsForR,++ -- * Search -- | See <https://developer.github.com/v3/search/> --@@ -374,6 +394,7 @@ import GitHub.Data import GitHub.Endpoints.Activity.Events+import GitHub.Endpoints.Activity.Notifications import GitHub.Endpoints.Activity.Starring import GitHub.Endpoints.Activity.Watching import GitHub.Endpoints.Gists@@ -400,6 +421,7 @@ import GitHub.Endpoints.Repos.Commits import GitHub.Endpoints.Repos.Deployments import GitHub.Endpoints.Repos.Forks+import GitHub.Endpoints.Repos.Invitations import GitHub.Endpoints.Repos.Releases import GitHub.Endpoints.Repos.Statuses import GitHub.Endpoints.Repos.Webhooks
src/GitHub/Auth.hs view
@@ -3,24 +3,48 @@ -- License : BSD-3-Clause -- Maintainer : Oleg Grenrus <oleg.grenrus@iki.fi> ---module GitHub.Auth where+module GitHub.Auth (+ Auth (..),+ AuthMethod,+ endpoint,+ setAuthRequest+ ) where import GitHub.Internal.Prelude import Prelude () -import qualified Data.ByteString as BS+import qualified Data.ByteString as BS+import qualified Network.HTTP.Client as HTTP type Token = BS.ByteString -- | The Github auth data type data Auth- = BasicAuth BS.ByteString BS.ByteString- | OAuth Token -- ^ token- | EnterpriseOAuth Text -- custom API endpoint without- -- trailing slash- Token -- token+ = BasicAuth BS.ByteString BS.ByteString -- ^ Username and password+ | OAuth Token -- ^ OAuth token+ | EnterpriseOAuth Text Token -- ^ Custom endpoint and OAuth token deriving (Show, Data, Typeable, Eq, Ord, Generic) instance NFData Auth where rnf = genericRnf instance Binary Auth instance Hashable Auth++-- | A type class for different authentication methods+class AuthMethod a where+ -- | Custom API endpoint without trailing slash+ endpoint :: a -> Maybe Text+ -- | A function which sets authorisation on an HTTP request+ setAuthRequest :: a -> HTTP.Request -> HTTP.Request++instance AuthMethod Auth where+ endpoint (BasicAuth _ _) = Nothing+ endpoint (OAuth _) = Nothing+ endpoint (EnterpriseOAuth e _) = Just e++ setAuthRequest (BasicAuth u p) = HTTP.applyBasicAuth u p+ setAuthRequest (OAuth t) = setAuthHeader $ "token " <> t+ setAuthRequest (EnterpriseOAuth _ t) = setAuthHeader $ "token " <> t++setAuthHeader :: BS.ByteString -> HTTP.Request -> HTTP.Request+setAuthHeader auth req =+ req { HTTP.requestHeaders = ("Authorization", auth) : HTTP.requestHeaders req }
src/GitHub/Data.hs view
@@ -4,7 +4,7 @@ -- License : BSD-3-Clause -- Maintainer : Oleg Grenrus <oleg.grenrus@iki.fi> ----- This module re-exports the @GitHub.Data.@ and "Github.Auth" submodules.+-- This module re-exports the @GitHub.Data.@ and "GitHub.Auth" submodules. module GitHub.Data ( -- * Tagged types -- ** Name@@ -48,6 +48,7 @@ module GitHub.Data.Issues, module GitHub.Data.Milestone, module GitHub.Data.Options,+ module GitHub.Data.PublicSSHKeys, module GitHub.Data.PullRequests, module GitHub.Data.RateLimit, module GitHub.Data.Releases,@@ -81,6 +82,7 @@ import GitHub.Data.Milestone import GitHub.Data.Name import GitHub.Data.Options+import GitHub.Data.PublicSSHKeys import GitHub.Data.PullRequests import GitHub.Data.RateLimit import GitHub.Data.Releases
src/GitHub/Data/Activities.hs view
@@ -5,10 +5,15 @@ -- module GitHub.Data.Activities where -import GitHub.Data.Repos (Repo)+import GitHub.Data.Id (Id, mkId)+import GitHub.Data.Repos (Repo, RepoRef)+import GitHub.Data.URL (URL) import GitHub.Internal.Prelude+ import Prelude () +import qualified Data.Text as T+ data RepoStarred = RepoStarred { repoStarredStarredAt :: !UTCTime , repoStarredRepo :: !Repo@@ -23,4 +28,83 @@ parseJSON = withObject "RepoStarred" $ \o -> RepoStarred <$> o .: "starred_at" <*> o .: "repo"++data Subject = Subject+ { subjectTitle :: !Text+ , subjectURL :: !URL+ , subjectLatestCommentURL :: !(Maybe URL)+ -- https://developer.github.com/v3/activity/notifications/ doesn't indicate+ -- what the possible values for this field are.+ -- TODO: Make an ADT for this.+ , subjectType :: !Text+ }+ deriving (Show, Data, Typeable, Eq, Ord, Generic)++instance NFData Subject where rnf = genericRnf+instance Binary Subject++instance FromJSON Subject where+ parseJSON = withObject "Subject" $ \o -> Subject+ <$> o .: "title"+ <*> o .: "url"+ <*> o .:? "latest_comment_url"+ <*> o .: "type"++data NotificationReason+ = AssignReason+ | AuthorReason+ | CommentReason+ | InvitationReason+ | ManualReason+ | MentionReason+ | ReviewRequestedReason+ | StateChangeReason+ | SubscribedReason+ | TeamMentionReason+ deriving (Show, Data, Enum, Bounded, Typeable, Eq, Ord, Generic)++instance NFData NotificationReason where rnf = genericRnf+instance Binary NotificationReason++instance FromJSON NotificationReason where+ parseJSON = withText "NotificationReason" $ \t -> case T.toLower t of+ "assign" -> pure AssignReason+ "author" -> pure AuthorReason+ "comment" -> pure CommentReason+ "invitation" -> pure InvitationReason+ "manual" -> pure ManualReason+ "mention" -> pure MentionReason+ "review_requested" -> pure ReviewRequestedReason+ "state_change" -> pure StateChangeReason+ "subscribed" -> pure SubscribedReason+ "team_mention" -> pure TeamMentionReason+ _ -> fail $ "Unknown NotificationReason " ++ show t++data Notification = Notification+ -- XXX: The notification id field type IS in fact string. Not sure why gh+ -- chose to do this when all the other ids are Numbers...+ { notificationId :: !(Id Notification)+ , notificationRepo :: !RepoRef+ , notificationSubject :: !Subject+ , notificationReason :: !NotificationReason+ , notificationUnread :: !Bool+ , notificationUpdatedAt :: !(Maybe UTCTime)+ , notificationLastReadAt :: !(Maybe UTCTime)+ , notificationUrl :: !URL+ }+ deriving (Show, Data, Typeable, Eq, Ord, Generic)++instance NFData Notification where rnf = genericRnf+instance Binary Notification++instance FromJSON Notification where+ parseJSON = withObject "Notification" $ \o -> Notification+ <$> (mkId undefined . read <$> o .: "id")+ <*> o .: "repository"+ <*> o .: "subject"+ <*> o .: "reason"+ <*> o .: "unread"+ <*> o .: "updated_at"+ <*> o .: "last_read_at"+ <*> o .: "url"
src/GitHub/Data/Content.hs view
@@ -6,13 +6,15 @@ -- module GitHub.Data.Content where -import Data.Aeson.Types (Pair)-import Data.Maybe (maybe) import GitHub.Data.GitData import GitHub.Data.URL import GitHub.Internal.Prelude import Prelude () +import Data.Aeson.Types (Pair)+import Data.Maybe (maybe)+import qualified Data.Text as T+ data Content = ContentFile !ContentFileData | ContentDirectory !(Vector ContentItem)@@ -142,11 +144,10 @@ <*> parseJSON (Object o) instance FromJSON ContentItemType where- parseJSON = withText "ContentItemType" $ \t ->- case t of- "file" -> return ItemFile- "dir" -> return ItemDir- _ -> fail $ "Invalid ContentItemType: " ++ unpack t+ parseJSON = withText "ContentItemType" $ \t -> case T.toLower t of+ "file" -> pure ItemFile+ "dir" -> pure ItemDir+ _ -> fail $ "Unknown ContentItemType: " <> T.unpack t instance FromJSON ContentInfo where parseJSON = withObject "ContentInfo" $ \o ->
src/GitHub/Data/Definitions.hs view
@@ -134,11 +134,10 @@ -- JSON instances instance FromJSON OwnerType where- parseJSON = withText "Owner type" $ \t ->- case t of- "User" -> pure $ OwnerUser- "Organization" -> pure $ OwnerOrganization- _ -> fail $ "Unknown owner type: " ++ T.unpack t+ parseJSON = withText "OwnerType" $ \t -> case T.toLower t of+ "user" -> pure $ OwnerUser+ "organization" -> pure $ OwnerOrganization+ _ -> fail $ "Unknown OwnerType: " <> T.unpack t instance FromJSON SimpleUser where parseJSON = withObject "SimpleUser" $ \obj -> do
src/GitHub/Data/Deployments.hs view
@@ -27,8 +27,8 @@ import GitHub.Internal.Prelude import qualified Data.Aeson as JSON-import qualified Data.Text as Text-import qualified Data.Text.Encoding as Text+import qualified Data.Text as T+import qualified Data.Text.Encoding as T data DeploymentQueryOption = DeploymentQuerySha !Text@@ -42,7 +42,7 @@ renderDeploymentQueryOption :: DeploymentQueryOption -> (ByteString, ByteString) renderDeploymentQueryOption =- second Text.encodeUtf8 . \case+ second T.encodeUtf8 . \case DeploymentQuerySha sha -> ("sha", sha) DeploymentQueryRef ref -> ("ref", ref) DeploymentQueryTask task -> ("task", task)@@ -172,13 +172,13 @@ DeploymentStatusInactive -> "inactive" instance FromJSON DeploymentStatusState where- parseJSON = withText "GitHub DeploymentStatusState" $ \case+ parseJSON = withText "DeploymentStatusState" $ \t -> case T.toLower t of "error" -> pure DeploymentStatusError "failure" -> pure DeploymentStatusFailure "pending" -> pure DeploymentStatusPending "success" -> pure DeploymentStatusSuccess "inactive" -> pure DeploymentStatusInactive- x -> fail $ "Unknown deployment status: " ++ Text.unpack x+ _ -> fail $ "Unknown DeploymentStatusState: " <> T.unpack t data CreateDeploymentStatus = CreateDeploymentStatus { createDeploymentStatusState :: !DeploymentStatusState
src/GitHub/Data/Email.hs view
@@ -8,6 +8,8 @@ import GitHub.Internal.Prelude import Prelude () +import qualified Data.Text as T+ data EmailVisibility = EmailVisibilityPrivate | EmailVisibilityPublic@@ -17,9 +19,10 @@ instance Binary EmailVisibility instance FromJSON EmailVisibility where- parseJSON (String "private") = pure EmailVisibilityPrivate- parseJSON (String "public") = pure EmailVisibilityPublic- parseJSON _ = fail "Could not build an EmailVisibility"+ parseJSON = withText "EmailVisibility" $ \t -> case T.toLower t of+ "private" -> pure EmailVisibilityPrivate+ "public" -> pure EmailVisibilityPublic+ _ -> fail $ "Unknown EmailVisibility: " <> T.unpack t data Email = Email { emailAddress :: !Text
src/GitHub/Data/Invitation.hs view
@@ -8,9 +8,13 @@ import GitHub.Data.Definitions import GitHub.Data.Id (Id) import GitHub.Data.Name (Name)+import GitHub.Data.Repos (Repo)+import GitHub.Data.URL (URL) import GitHub.Internal.Prelude import Prelude () +import qualified Data.Text as T+ data Invitation = Invitation { invitationId :: !(Id Invitation) -- TODO: technically either one should be, maybe both. use `these` ?@@ -48,10 +52,36 @@ instance Binary InvitationRole instance FromJSON InvitationRole where- parseJSON = withText "InvirationRole" $ \t -> case t of+ parseJSON = withText "InvitationRole" $ \t -> case T.toLower t of "direct_member" -> pure InvitationRoleDirectMember "admin" -> pure InvitationRoleAdmin "billing_manager" -> pure InvitationRoleBillingManager "hiring_manager" -> pure InvitationRoleHiringManager "reinstate" -> pure InvitationRoleReinstate- _ -> fail $ "Invalid role " ++ show t+ _ -> fail $ "Unknown InvitationRole: " <> T.unpack t++data RepoInvitation = RepoInvitation+ { repoInvitationId :: !(Id RepoInvitation)+ , repoInvitationInvitee :: !SimpleUser+ , repoInvitationInviter :: !SimpleUser+ , repoInvitationRepo :: !Repo+ , repoInvitationUrl :: !URL+ , repoInvitationCreatedAt :: !UTCTime+ , repoInvitationPermission :: !Text+ , repoInvitationHtmlUrl :: !URL+ }+ deriving (Show, Data, Typeable, Eq, Ord, Generic)++instance NFData RepoInvitation where rnf = genericRnf+instance Binary RepoInvitation++instance FromJSON RepoInvitation where+ parseJSON = withObject "RepoInvitation" $ \o -> RepoInvitation+ <$> o .: "id"+ <*> o .: "invitee"+ <*> o .: "inviter"+ <*> o .: "repository"+ <*> o .: "url"+ <*> o .: "created_at"+ <*> o .: "permissions"+ <*> o .: "html_url"
src/GitHub/Data/Issues.hs view
@@ -15,6 +15,8 @@ import GitHub.Internal.Prelude import Prelude () +import qualified Data.Text as T+ data Issue = Issue { issueClosedAt :: !(Maybe UTCTime) , issueUpdatedAt :: !UTCTime@@ -141,7 +143,7 @@ <*> o .:? "label" instance FromJSON EventType where- parseJSON = withText "EventType" $ \t -> case t of+ parseJSON = withText "EventType" $ \t -> case T.toLower t of "closed" -> pure Closed "reopened" -> pure Reopened "subscribed" -> pure Subscribed@@ -169,7 +171,7 @@ "removed_from_project" -> pure RemovedFromProject "converted_note_to_issue" -> pure ConvertedNoteToIssue "unsubscribed" -> pure Unsubscribed -- not in api docs list- _ -> fail $ "Unknown EventType " ++ show t+ _ -> fail $ "Unknown EventType: " <> T.unpack t instance FromJSON IssueComment where parseJSON = withObject "IssueComment" $ \o -> IssueComment
src/GitHub/Data/Options.hs view
@@ -82,9 +82,10 @@ toJSON StateClosed = String "closed" instance FromJSON IssueState where- parseJSON (String "open") = pure StateOpen- parseJSON (String "closed") = pure StateClosed- parseJSON v = typeMismatch "IssueState" v+ parseJSON = withText "IssueState" $ \t -> case T.toLower t of+ "open" -> pure StateOpen+ "closed" -> pure StateClosed+ _ -> fail $ "Unknown IssueState: " <> T.unpack t instance NFData IssueState where rnf = genericRnf instance Binary IssueState@@ -109,13 +110,14 @@ toJSON StateBehind = String "behind" instance FromJSON MergeableState where- parseJSON (String "unknown") = pure StateUnknown- parseJSON (String "clean") = pure StateClean- parseJSON (String "dirty") = pure StateDirty- parseJSON (String "unstable") = pure StateUnstable- parseJSON (String "blocked") = pure StateBlocked- parseJSON (String "behind") = pure StateBehind- parseJSON v = typeMismatch "MergeableState" v+ parseJSON = withText "MergeableState" $ \t -> case T.toLower t of+ "unknown" -> pure StateUnknown+ "clean" -> pure StateClean+ "dirty" -> pure StateDirty+ "unstable" -> pure StateUnstable+ "blocked" -> pure StateBlocked+ "behind" -> pure StateBehind+ _ -> fail $ "Unknown MergeableState: " <> T.unpack t instance NFData MergeableState where rnf = genericRnf instance Binary MergeableState
+ src/GitHub/Data/PublicSSHKeys.hs view
@@ -0,0 +1,60 @@+-----------------------------------------------------------------------------+-- |+-- License : BSD-3-Clause+-- Maintainer : Todd Mohney <toddmohney@gmail.com>+--+module GitHub.Data.PublicSSHKeys where++import GitHub.Data.Id (Id)+import GitHub.Data.URL (URL)+import GitHub.Internal.Prelude+import Prelude ()++data PublicSSHKeyBasic = PublicSSHKeyBasic+ { basicPublicSSHKeyId :: !(Id PublicSSHKey)+ , basicPublicSSHKeyKey :: !Text+ }+ deriving (Show, Data, Typeable, Eq, Ord, Generic)++instance FromJSON PublicSSHKeyBasic where+ parseJSON = withObject "PublicSSHKeyBasic" $ \o -> PublicSSHKeyBasic+ <$> o .: "id"+ <*> o .: "key"++data PublicSSHKey = PublicSSHKey+ { publicSSHKeyId :: !(Id PublicSSHKey)+ , publicSSHKeyKey :: !Text+ , publicSSHKeyUrl :: !URL+ , publicSSHKeyTitle :: !Text+ , publicSSHKeyVerified :: !Bool+ , publicSSHKeyCreatedAt :: !(Maybe UTCTime)+ , publicSSHKeyReadOnly :: !Bool+ }+ deriving (Show, Data, Typeable, Eq, Ord, Generic)++instance FromJSON PublicSSHKey where+ parseJSON = withObject "PublicSSHKey" $ \o -> PublicSSHKey+ <$> o .: "id"+ <*> o .: "key"+ <*> o .: "url"+ <*> o .: "title"+ <*> o .: "verified"+ <*> o .:? "created_at"+ <*> o .: "read_only"++data NewPublicSSHKey = NewPublicSSHKey+ { newPublicSSHKeyKey :: !Text+ , newPublicSSHKeyTitle :: !Text+ }+ deriving (Show, Data, Typeable, Eq, Ord, Generic)++instance ToJSON NewPublicSSHKey where+ toJSON (NewPublicSSHKey key title) = object+ [ "key" .= key+ , "title" .= title+ ]++instance FromJSON NewPublicSSHKey where+ parseJSON = withObject "PublicSSHKey" $ \o -> NewPublicSSHKey+ <$> o .: "key"+ <*> o .: "title"
src/GitHub/Data/PullRequests.hs view
@@ -283,19 +283,19 @@ <*> o .: "sender" instance FromJSON PullRequestEventType where- parseJSON (String "opened") = pure PullRequestOpened- parseJSON (String "closed") = pure PullRequestClosed- parseJSON (String "synchronize") = pure PullRequestSynchronized- parseJSON (String "reopened") = pure PullRequestReopened- parseJSON (String "assigned") = pure PullRequestAssigned- parseJSON (String "unassigned") = pure PullRequestUnassigned- parseJSON (String "labeled") = pure PullRequestLabeled- parseJSON (String "unlabeled") = pure PullRequestUnlabeled- parseJSON (String "review_requested") = pure PullRequestReviewRequested- parseJSON (String "review_request_removed") = pure PullRequestReviewRequestRemoved- parseJSON (String "edited") = pure PullRequestEdited- parseJSON (String s) = fail $ "Unknown action type " <> T.unpack s- parseJSON v = typeMismatch "Could not build a PullRequestEventType" v+ parseJSON = withText "PullRequestEventType" $ \t -> case T.toLower t of+ "opened" -> pure PullRequestOpened+ "closed" -> pure PullRequestClosed+ "synchronize" -> pure PullRequestSynchronized+ "reopened" -> pure PullRequestReopened+ "assigned" -> pure PullRequestAssigned+ "unassigned" -> pure PullRequestUnassigned+ "labeled" -> pure PullRequestLabeled+ "unlabeled" -> pure PullRequestUnlabeled+ "review_requested" -> pure PullRequestReviewRequested+ "review_request_removed" -> pure PullRequestReviewRequestRemoved+ "edited" -> pure PullRequestEdited+ _ -> fail $ "Unknown PullRequestEventType: " <> T.unpack t instance FromJSON PullRequestReference where parseJSON = withObject "PullRequestReference" $ \o -> PullRequestReference
src/GitHub/Data/Request.hs view
@@ -26,7 +26,7 @@ Count, ) where -import GitHub.Data.Definitions (Count, QueryString, IssueNumber, unIssueNumber)+import GitHub.Data.Definitions (Count, IssueNumber, QueryString, unIssueNumber) import GitHub.Data.Id (Id, untagId) import GitHub.Data.Name (Name, untagName) import GitHub.Internal.Prelude@@ -105,17 +105,18 @@ -- MediaType ------------------------------------------------------------------------------- -data MediaType- = MtJSON -- ^ @application/vnd.github.v3+json@- | MtRaw -- ^ @application/vnd.github.v3.raw@ <https://developer.github.com/v3/media/#raw-1>- | MtDiff -- ^ @application/vnd.github.v3.diff@ <https://developer.github.com/v3/media/#diff>- | MtPatch -- ^ @application/vnd.github.v3.patch@ <https://developer.github.com/v3/media/#patch>- | MtSha -- ^ @application/vnd.github.v3.sha@ <https://developer.github.com/v3/media/#sha>- | MtStar -- ^ @application/vnd.github.v3.star+json@ <https://developer.github.com/v3/activity/starring/#alternative-response-with-star-creation-timestamps-1>- | MtRedirect -- ^ <https://developer.github.com/v3/repos/contents/#get-archive-link>- | MtStatus -- ^ Parse status- | MtUnit -- ^ Always succeeds- deriving (Eq, Ord, Read, Show, Enum, Bounded, Typeable, Data, Generic)+data MediaType a+ = MtJSON -- ^ @application/vnd.github.v3+json@+ | MtRaw -- ^ @application/vnd.github.v3.raw@ <https://developer.github.com/v3/media/#raw-1>+ | MtDiff -- ^ @application/vnd.github.v3.diff@ <https://developer.github.com/v3/media/#diff>+ | MtPatch -- ^ @application/vnd.github.v3.patch@ <https://developer.github.com/v3/media/#patch>+ | MtSha -- ^ @application/vnd.github.v3.sha@ <https://developer.github.com/v3/media/#sha>+ | MtStar -- ^ @application/vnd.github.v3.star+json@ <https://developer.github.com/v3/activity/starring/#alternative-response-with-star-creation-timestamps-1>+ | MtRedirect -- ^ <https://developer.github.com/v3/repos/contents/#get-archive-link>+ | MtStatus -- ^ Parse status+ | MtUnit -- ^ Always succeeds+ | MtPreview a -- ^ Some other (preview) type; this is an extension point.+ deriving (Eq, Ord, Read, Show, Typeable, Data, Generic) ------------------------------------------------------------------------------ -- RW@@ -151,7 +152,7 @@ -- * @a@ is the result type -- -- /Note:/ 'Request' is not 'Functor' on purpose.-data GenRequest (mt :: MediaType) (rw :: RW) a where+data GenRequest (mt :: MediaType *) (rw :: RW) a where Query :: Paths -> QueryString -> GenRequest mt rw a PagedQuery :: Paths -> QueryString -> FetchCount -> GenRequest mt rw (Vector a)
src/GitHub/Data/Reviews.hs view
@@ -1,12 +1,14 @@ module GitHub.Data.Reviews where -import Data.Text (Text) import GitHub.Data.Definitions (SimpleUser) import GitHub.Data.Id (Id) import GitHub.Data.URL (URL) import GitHub.Internal.Prelude import Prelude () +import Data.Text (Text)+import qualified Data.Text as T+ data ReviewState = ReviewStatePending | ReviewStateApproved@@ -21,12 +23,13 @@ instance Binary ReviewState instance FromJSON ReviewState where- parseJSON (String "APPROVED") = pure ReviewStateApproved- parseJSON (String "PENDING") = pure ReviewStatePending- parseJSON (String "DISMISSED") = pure ReviewStateDismissed- parseJSON (String "COMMENTED") = pure ReviewStateCommented- parseJSON (String "CHANGES_REQUESTED") = pure ReviewStateChangesRequested- parseJSON _ = fail "Unexpected ReviewState"+ parseJSON = withText "ReviewState" $ \t -> case T.toLower t of+ "approved" -> pure ReviewStateApproved+ "pending" -> pure ReviewStatePending+ "dismissed" -> pure ReviewStateDismissed+ "commented" -> pure ReviewStateCommented+ "changes_requested" -> pure ReviewStateChangesRequested+ _ -> fail $ "Unknown ReviewState: " <> T.unpack t data Review = Review { reviewBody :: !Text
src/GitHub/Data/Statuses.hs view
@@ -14,6 +14,7 @@ import GitHub.Data.GitData (Commit) import GitHub.Data.Repos (RepoRef) +import qualified Data.Text as T data StatusState = StatusPending@@ -26,11 +27,12 @@ instance Binary StatusState instance FromJSON StatusState where- parseJSON (String "pending") = pure StatusPending- parseJSON (String "success") = pure StatusSuccess- parseJSON (String "error") = pure StatusError- parseJSON (String "failure") = pure StatusFailure- parseJSON _ = fail "Could not build a StatusState"+ parseJSON = withText "StatusState" $ \t -> case T.toLower t of+ "pending" -> pure StatusPending+ "success" -> pure StatusSuccess+ "error" -> pure StatusError+ "failure" -> pure StatusFailure+ _ -> fail $ "Unknown StatusState: " <> T.unpack t instance ToJSON StatusState where toJSON StatusPending = String "pending"
src/GitHub/Data/Teams.hs view
@@ -17,6 +17,8 @@ import GitHub.Internal.Prelude import Prelude () +import qualified Data.Text as T+ data Privacy = PrivacyClosed | PrivacySecret@@ -200,42 +202,42 @@ object [ "permission" .= permission ] instance FromJSON Role where- parseJSON = withText "Attribute" $ \attr -> case attr of- "maintainer" -> return RoleMaintainer- "member" -> return RoleMember- _ -> fail $ "Unknown Role: " ++ show attr+ parseJSON = withText "Role" $ \t -> case T.toLower t of+ "maintainer" -> pure RoleMaintainer+ "member" -> pure RoleMember+ _ -> fail $ "Unknown Role: " <> T.unpack t instance ToJSON Role where toJSON RoleMaintainer = String "maintainer" toJSON RoleMember = String "member" +instance FromJSON Permission where+ parseJSON = withText "Permission" $ \t -> case T.toLower t of+ "pull" -> pure PermissionPull+ "push" -> pure PermissionPush+ "admin" -> pure PermissionAdmin+ _ -> fail $ "Unknown Permission: " <> T.unpack t+ instance ToJSON Permission where toJSON PermissionPull = "pull" toJSON PermissionPush = "push" toJSON PermissionAdmin = "admin" -instance FromJSON Permission where- parseJSON = withText "Permission Attribute" $ \attr -> case attr of - "pull" -> return PermissionPull- "push" -> return PermissionPush- "admin" -> return PermissionAdmin- _ -> fail $ "Unknown Permission Attribute: " ++ show attr- instance FromJSON Privacy where- parseJSON = withText "Privacy Attribute" $ \attr -> case attr of- "secret" -> return PrivacySecret- "closed" -> return PrivacyClosed- _ -> fail $ "Unknown Privacy Attribute: " ++ show attr+ parseJSON = withText "Privacy" $ \t -> case T.toLower t of+ "secret" -> pure PrivacySecret+ "closed" -> pure PrivacyClosed+ _ -> fail $ "Unknown Privacy: " <> T.unpack t instance ToJSON Privacy where toJSON PrivacySecret = String "secret" toJSON PrivacyClosed = String "closed" instance FromJSON ReqState where- parseJSON = withText "ReqState" $ \attr -> case attr of- "active" -> return StateActive- "pending" -> return StatePending- _ -> fail $ "Unknown ReqState: " ++ show attr+ parseJSON = withText "ReqState" $ \t -> case T.toLower t of+ "active" -> pure StateActive+ "pending" -> pure StatePending+ _ -> fail $ "Unknown ReqState: " <> T.unpack t instance ToJSON ReqState where toJSON StateActive = String "active"
src/GitHub/Data/Webhooks.hs view
@@ -11,6 +11,7 @@ import Prelude () import qualified Data.Map as M+import qualified Data.Text as T data RepoWebhook = RepoWebhook { repoWebhookUrl :: !URL@@ -29,28 +30,56 @@ instance NFData RepoWebhook where rnf = genericRnf instance Binary RepoWebhook +-- | See <https://developer.github.com/webhooks/#events>. data RepoWebhookEvent = WebhookWildcardEvent+ | WebhookCheckRunEvent+ | WebhookCheckSuiteEvent | WebhookCommitCommentEvent+ | WebhookContentReferenceEvent | WebhookCreateEvent | WebhookDeleteEvent+ | WebhookDeployKeyEvent | WebhookDeploymentEvent | WebhookDeploymentStatusEvent+ | WebhookDownloadEvent+ | WebhookFollowEvent | WebhookForkEvent+ | WebhookForkApplyEvent+ | WebhookGitHubAppAuthorizationEvent+ | WebhookGistEvent | WebhookGollumEvent | WebhookInstallationEvent | WebhookInstallationRepositoriesEvent | WebhookIssueCommentEvent | WebhookIssuesEvent+ | WebhookLabelEvent+ | WebhookMarketplacePurchaseEvent | WebhookMemberEvent+ | WebhookMembershipEvent+ | WebhookMetaEvent+ | WebhookMilestoneEvent+ | WebhookOrganizationEvent+ | WebhookOrgBlockEvent | WebhookPageBuildEvent | WebhookPingEvent+ | WebhookProjectCardEvent+ | WebhookProjectColumnEvent+ | WebhookProjectEvent | WebhookPublicEvent- | WebhookPullRequestReviewCommentEvent | WebhookPullRequestEvent+ | WebhookPullRequestReviewEvent+ | WebhookPullRequestReviewCommentEvent | WebhookPushEvent+ | WebhookRegistryPackageEvent | WebhookReleaseEvent+ | WebhookRepositoryEvent+ | WebhookRepositoryImportEvent+ | WebhookRepositoryVulnerabilityAlertEvent+ | WebhookSecurityAdvisoryEvent+ | WebhookStarEvent | WebhookStatusEvent+ | WebhookTeamEvent | WebhookTeamAddEvent | WebhookWatchEvent deriving (Show, Data, Typeable, Eq, Ord, Generic)@@ -104,55 +133,110 @@ -- JSON instances instance FromJSON RepoWebhookEvent where- parseJSON (String "*") = pure WebhookWildcardEvent- parseJSON (String "commit_comment") = pure WebhookCommitCommentEvent- parseJSON (String "create") = pure WebhookCreateEvent- parseJSON (String "delete") = pure WebhookDeleteEvent- parseJSON (String "deployment") = pure WebhookDeploymentEvent- parseJSON (String "deployment_status") = pure WebhookDeploymentStatusEvent- parseJSON (String "fork") = pure WebhookForkEvent- parseJSON (String "gollum") = pure WebhookGollumEvent- parseJSON (String "installation") = pure WebhookInstallationEvent- parseJSON (String "installation_repositories") = pure WebhookInstallationRepositoriesEvent- parseJSON (String "issue_comment") = pure WebhookIssueCommentEvent- parseJSON (String "issues") = pure WebhookIssuesEvent- parseJSON (String "member") = pure WebhookMemberEvent- parseJSON (String "page_build") = pure WebhookPageBuildEvent- parseJSON (String "ping") = pure WebhookPingEvent- parseJSON (String "public") = pure WebhookPublicEvent- parseJSON (String "pull_request_review_comment") = pure WebhookPullRequestReviewCommentEvent- parseJSON (String "pull_request") = pure WebhookPullRequestEvent- parseJSON (String "push") = pure WebhookPushEvent- parseJSON (String "release") = pure WebhookReleaseEvent- parseJSON (String "status") = pure WebhookStatusEvent- parseJSON (String "team_add") = pure WebhookTeamAddEvent- parseJSON (String "watch") = pure WebhookWatchEvent- parseJSON _ = fail "Could not build a Webhook event"+ parseJSON = withText "RepoWebhookEvent" $ \t -> case T.toLower t of+ "*" -> pure WebhookWildcardEvent+ "check_run" -> pure WebhookCheckRunEvent+ "check_suite" -> pure WebhookCheckSuiteEvent+ "commit_comment" -> pure WebhookCommitCommentEvent+ "content_reference" -> pure WebhookContentReferenceEvent+ "create" -> pure WebhookCreateEvent+ "delete" -> pure WebhookDeleteEvent+ "deploy_key" -> pure WebhookDeployKeyEvent+ "deployment" -> pure WebhookDeploymentEvent+ "deployment_status" -> pure WebhookDeploymentStatusEvent+ "download" -> pure WebhookDownloadEvent+ "follow" -> pure WebhookFollowEvent+ "fork" -> pure WebhookForkEvent+ "fork_apply" -> pure WebhookForkApplyEvent+ "github_app_authorization" -> pure WebhookGitHubAppAuthorizationEvent+ "gist" -> pure WebhookGistEvent+ "gollum" -> pure WebhookGollumEvent+ "installation" -> pure WebhookInstallationEvent+ "installation_repositories" -> pure WebhookInstallationRepositoriesEvent+ "issue_comment" -> pure WebhookIssueCommentEvent+ "issues" -> pure WebhookIssuesEvent+ "label" -> pure WebhookLabelEvent+ "marketplace_purchase" -> pure WebhookMarketplacePurchaseEvent+ "member" -> pure WebhookMemberEvent+ "membership" -> pure WebhookMembershipEvent+ "meta" -> pure WebhookMetaEvent+ "milestone" -> pure WebhookMilestoneEvent+ "organization" -> pure WebhookOrganizationEvent+ "org_block" -> pure WebhookOrgBlockEvent+ "page_build" -> pure WebhookPageBuildEvent+ "ping" -> pure WebhookPingEvent+ "project_card" -> pure WebhookProjectCardEvent+ "project_column" -> pure WebhookProjectColumnEvent+ "project" -> pure WebhookProjectEvent+ "public" -> pure WebhookPublicEvent+ "pull_request" -> pure WebhookPullRequestEvent+ "pull_request_review" -> pure WebhookPullRequestReviewEvent+ "pull_request_review_comment" -> pure WebhookPullRequestReviewCommentEvent+ "push" -> pure WebhookPushEvent+ "registry_package" -> pure WebhookRegistryPackageEvent+ "release" -> pure WebhookReleaseEvent+ "repository" -> pure WebhookRepositoryEvent+ "repository_import" -> pure WebhookRepositoryImportEvent+ "repository_vulnerability_alert" -> pure WebhookRepositoryVulnerabilityAlertEvent+ "security_advisory" -> pure WebhookSecurityAdvisoryEvent+ "star" -> pure WebhookStarEvent+ "status" -> pure WebhookStatusEvent+ "team" -> pure WebhookTeamEvent+ "team_add" -> pure WebhookTeamAddEvent+ "watch" -> pure WebhookWatchEvent+ _ -> fail $ "Unknown RepoWebhookEvent: " <> T.unpack t instance ToJSON RepoWebhookEvent where- toJSON WebhookWildcardEvent = String "*"- toJSON WebhookCommitCommentEvent = String "commit_comment"- toJSON WebhookCreateEvent = String "create"- toJSON WebhookDeleteEvent = String "delete"- toJSON WebhookDeploymentEvent = String "deployment"- toJSON WebhookDeploymentStatusEvent = String "deployment_status"- toJSON WebhookForkEvent = String "fork"- toJSON WebhookGollumEvent = String "gollum"- toJSON WebhookInstallationEvent = String "installation"- toJSON WebhookInstallationRepositoriesEvent = String "installation_repositories"- toJSON WebhookIssueCommentEvent = String "issue_comment"- toJSON WebhookIssuesEvent = String "issues"- toJSON WebhookMemberEvent = String "member"- toJSON WebhookPageBuildEvent = String "page_build"- toJSON WebhookPingEvent = String "ping"- toJSON WebhookPublicEvent = String "public"- toJSON WebhookPullRequestReviewCommentEvent = String "pull_request_review_comment"- toJSON WebhookPullRequestEvent = String "pull_request"- toJSON WebhookPushEvent = String "push"- toJSON WebhookReleaseEvent = String "release"- toJSON WebhookStatusEvent = String "status"- toJSON WebhookTeamAddEvent = String "team_add"- toJSON WebhookWatchEvent = String "watch"+ toJSON WebhookWildcardEvent = String "*"+ toJSON WebhookCheckRunEvent = String "check_run"+ toJSON WebhookCheckSuiteEvent = String "check_suite"+ toJSON WebhookCommitCommentEvent = String "commit_comment"+ toJSON WebhookContentReferenceEvent = String "content_reference"+ toJSON WebhookCreateEvent = String "create"+ toJSON WebhookDeleteEvent = String "delete"+ toJSON WebhookDeployKeyEvent = String "deploy_key"+ toJSON WebhookDeploymentEvent = String "deployment"+ toJSON WebhookDeploymentStatusEvent = String "deployment_status"+ toJSON WebhookDownloadEvent = String "download"+ toJSON WebhookFollowEvent = String "follow"+ toJSON WebhookForkEvent = String "fork"+ toJSON WebhookForkApplyEvent = String "fork_apply"+ toJSON WebhookGitHubAppAuthorizationEvent = String "github_app_authorization"+ toJSON WebhookGistEvent = String "gist"+ toJSON WebhookGollumEvent = String "gollum"+ toJSON WebhookInstallationEvent = String "installation"+ toJSON WebhookInstallationRepositoriesEvent = String "installation_repositories"+ toJSON WebhookIssueCommentEvent = String "issue_comment"+ toJSON WebhookIssuesEvent = String "issues"+ toJSON WebhookLabelEvent = String "label"+ toJSON WebhookMarketplacePurchaseEvent = String "marketplace_purchase"+ toJSON WebhookMemberEvent = String "member"+ toJSON WebhookMembershipEvent = String "membership"+ toJSON WebhookMetaEvent = String "meta"+ toJSON WebhookMilestoneEvent = String "milestone"+ toJSON WebhookOrganizationEvent = String "organization"+ toJSON WebhookOrgBlockEvent = String "org_block"+ toJSON WebhookPageBuildEvent = String "page_build"+ toJSON WebhookPingEvent = String "ping"+ toJSON WebhookProjectCardEvent = String "project_card"+ toJSON WebhookProjectColumnEvent = String "project_column"+ toJSON WebhookProjectEvent = String "project"+ toJSON WebhookPublicEvent = String "public"+ toJSON WebhookPullRequestEvent = String "pull_request"+ toJSON WebhookPullRequestReviewEvent = String "pull_request_review"+ toJSON WebhookPullRequestReviewCommentEvent = String "pull_request_review_comment"+ toJSON WebhookPushEvent = String "push"+ toJSON WebhookRegistryPackageEvent = String "registry_package"+ toJSON WebhookReleaseEvent = String "release"+ toJSON WebhookRepositoryEvent = String "repository"+ toJSON WebhookRepositoryImportEvent = String "repository_import"+ toJSON WebhookRepositoryVulnerabilityAlertEvent = String "repository_vulnerability_alert"+ toJSON WebhookSecurityAdvisoryEvent = String "security_advisory"+ toJSON WebhookStarEvent = String "star"+ toJSON WebhookStatusEvent = String "status"+ toJSON WebhookTeamEvent = String "team"+ toJSON WebhookTeamAddEvent = String "team_add"+ toJSON WebhookWatchEvent = String "watch" instance FromJSON RepoWebhook where parseJSON = withObject "RepoWebhook" $ \o -> RepoWebhook
+ src/GitHub/Endpoints/Activity/Notifications.hs view
@@ -0,0 +1,45 @@+-----------------------------------------------------------------------------+-- |+-- License : BSD-3-Clause+-- Maintainer : Oleg Grenrus <oleg.grenrus@iki.fi>+--+-- The repo watching API as described on+-- <https://developer.github.com/v3/activity/notifications/>.++module GitHub.Endpoints.Activity.Notifications where++import GitHub.Data+import GitHub.Internal.Prelude+import GitHub.Request+import Prelude ()++getNotifications :: Auth -> IO (Either Error (Vector Notification))+getNotifications auth =+ executeRequest auth $ getNotificationsR FetchAll++-- | List your notifications.+-- See <https://developer.github.com/v3/activity/notifications/#list-your-notifications>+getNotificationsR :: FetchCount -> Request 'RA (Vector Notification)+getNotificationsR = pagedQuery ["notifications"] []++markNotificationAsRead :: Auth -> Id Notification -> IO (Either Error ())+markNotificationAsRead auth nid =+ executeRequest auth $ markNotificationAsReadR nid++-- | Mark a thread as read.+-- See <https://developer.github.com/v3/activity/notifications/#mark-a-thread-as-read>+markNotificationAsReadR :: Id Notification -> GenRequest 'MtUnit 'RW ()+markNotificationAsReadR nid = Command+ Patch+ ["notifications", "threads", toPathPart nid]+ (encode ())++markNotificationsAsRead :: Auth -> IO (Either Error ())+markNotificationsAsRead auth =+ executeRequest auth markAllNotificationsAsReadR++-- | Mark as read.+-- See <https://developer.github.com/v3/activity/notifications/#mark-as-read>+markAllNotificationsAsReadR :: GenRequest 'MtUnit 'RW ()+markAllNotificationsAsReadR =+ Command Put ["notifications"] $ encode emptyObject
src/GitHub/Endpoints/Activity/Starring.hs view
@@ -91,7 +91,7 @@ -- | Unstar a repo by the authenticated user. -- See <https://developer.github.com/v3/activity/starring/#unstar-a-repository>-unstarRepoR :: Name Owner -> Name Repo -> Request 'RW ()-unstarRepoR user repo = command Delete paths mempty+unstarRepoR :: Name Owner -> Name Repo -> GenRequest 'MtUnit 'RW ()+unstarRepoR user repo = Command Delete paths mempty where paths = ["user", "starred", toPathPart user, toPathPart repo]
src/GitHub/Endpoints/Activity/Watching.hs view
@@ -30,7 +30,7 @@ -- | The list of users that are watching the specified Github repo. -- With authentication ----- > watchersFor' (Just (User (user, password))) "thoughtbot" "paperclip"+-- > watchersFor' (Just $ BasicAuth "github-username" "github-password") "thoughtbot" "paperclip" watchersFor' :: Maybe Auth -> Name Owner -> Name Repo -> IO (Either Error (Vector SimpleUser)) watchersFor' auth user repo = executeRequestMaybe auth $ watchersForR user repo FetchAll@@ -50,7 +50,7 @@ -- | All the public repos watched by the specified user. -- With authentication ----- > reposWatchedBy' (Just (User (user, password))) "croaky"+-- > reposWatchedBy' (Just $ BasicAuth "github-username" "github-password") "croaky" reposWatchedBy' :: Maybe Auth -> Name Owner -> IO (Either Error (Vector Repo)) reposWatchedBy' auth user = executeRequestMaybe auth $ reposWatchedByR user FetchAll
src/GitHub/Endpoints/Gists.hs view
@@ -27,7 +27,7 @@ -- | The list of all gists created by the user ----- > gists' (Just ("github-username", "github-password")) "mike-burns"+-- > gists' (Just $ BasicAuth "github-username" "github-password") "mike-burns" gists' :: Maybe Auth -> Name Owner -> IO (Either Error (Vector Gist)) gists' auth user = executeRequestMaybe auth $ gistsR user FetchAll@@ -45,7 +45,7 @@ -- | A specific gist, given its id, with authentication credentials ----- > gist' (Just ("github-username", "github-password")) "225074"+-- > gist' (Just $ BasicAuth "github-username" "github-password") "225074" gist' :: Maybe Auth -> Name Gist -> IO (Either Error Gist) gist' auth gid = executeRequestMaybe auth $ gistR gid@@ -64,7 +64,7 @@ -- | Star a gist by the authenticated user. ----- > starGist ("github-username", "github-password") "225074"+-- > starGist (BasicAuth "github-username" "github-password") "225074" starGist :: Auth -> Name Gist -> IO (Either Error ()) starGist auth gid = executeRequest auth $ starGistR gid @@ -75,22 +75,22 @@ -- | Unstar a gist by the authenticated user. ----- > unstarGist ("github-username", "github-password") "225074"+-- > unstarGist (BasicAuth "github-username" "github-password") "225074" unstarGist :: Auth -> Name Gist -> IO (Either Error ()) unstarGist auth gid = executeRequest auth $ unstarGistR gid -- | Unstar a gist by the authenticated user. -- See <https://developer.github.com/v3/gists/#unstar-a-gist>-unstarGistR :: Name Gist -> Request 'RW ()-unstarGistR gid = command Delete ["gists", toPathPart gid, "star"] mempty+unstarGistR :: Name Gist -> GenRequest 'MtUnit 'RW ()+unstarGistR gid = Command Delete ["gists", toPathPart gid, "star"] mempty -- | Delete a gist by the authenticated user. ----- > deleteGist ("github-username", "github-password") "225074"+-- > deleteGist (BasicAuth "github-username" "github-password") "225074" deleteGist :: Auth -> Name Gist -> IO (Either Error ()) deleteGist auth gid = executeRequest auth $ deleteGistR gid -- | Delete a gist by the authenticated user. -- See <https://developer.github.com/v3/gists/#delete-a-gist>-deleteGistR :: Name Gist -> Request 'RW ()-deleteGistR gid = command Delete ["gists", toPathPart gid] mempty+deleteGistR :: Name Gist -> GenRequest 'MtUnit 'RW ()+deleteGistR gid = Command Delete ["gists", toPathPart gid] mempty
src/GitHub/Endpoints/GitData/Blobs.hs view
@@ -19,7 +19,7 @@ -- | Query a blob by SHA1. ----- > blob' (Just ("github-username", "github-password")) "thoughtbot" "paperclip" "bc5c51d1ece1ee45f94b056a0f5a1674d7e8cba9"+-- > blob' (Just $ BasicAuth "github-username" "github-password") "thoughtbot" "paperclip" "bc5c51d1ece1ee45f94b056a0f5a1674d7e8cba9" blob' :: Maybe Auth -> Name Owner -> Name Repo -> Name Blob -> IO (Either Error Blob) blob' auth user repo sha = executeRequestMaybe auth $ blobR user repo sha
src/GitHub/Endpoints/GitData/References.hs view
@@ -26,7 +26,7 @@ -- | A single reference by the ref name. ----- > reference' (Just ("github-username", "github-password")) "mike-burns" "github" "heads/master"+-- > reference' (Just $ BasicAuth "github-username" "github-password") "mike-burns" "github" "heads/master" reference' :: Maybe Auth -> Name Owner -> Name Repo -> Name GitReference -> IO (Either Error GitReference) reference' auth user repo ref = executeRequestMaybe auth $ referenceR user repo ref
src/GitHub/Endpoints/GitData/Trees.hs view
@@ -22,7 +22,7 @@ -- | A tree for a SHA1. ----- > tree (Just ("github-username", "github-password")) "thoughtbot" "paperclip" "fe114451f7d066d367a1646ca7ac10e689b46844"+-- > tree (Just $ BasicAuth "github-username" "github-password") "thoughtbot" "paperclip" "fe114451f7d066d367a1646ca7ac10e689b46844" tree' :: Maybe Auth -> Name Owner -> Name Repo -> Name Tree -> IO (Either Error Tree) tree' auth user repo sha = executeRequestMaybe auth $ treeR user repo sha@@ -41,7 +41,7 @@ -- | A recursively-nested tree for a SHA1. ----- > nestedTree' (Just ("github-username", "github-password")) "thoughtbot" "paperclip" "fe114451f7d066d367a1646ca7ac10e689b46844"+-- > nestedTree' (Just $ BasicAuth "github-username" "github-password") "thoughtbot" "paperclip" "fe114451f7d066d367a1646ca7ac10e689b46844" nestedTree' :: Maybe Auth -> Name Owner -> Name Repo -> Name Tree -> IO (Either Error Tree) nestedTree' auth user repo sha = executeRequestMaybe auth $ nestedTreeR user repo sha
src/GitHub/Endpoints/Issues.hs view
@@ -41,7 +41,7 @@ -- | Details on a specific issue, given the repo owner and name, and the issue -- number.' ----- > issue' (Just ("github-username", "github-password")) "thoughtbot" "paperclip" "462"+-- > issue' (Just $ BasicAuth "github-username" "github-password") "thoughtbot" "paperclip" "462" issue' :: Maybe Auth -> Name Owner -> Name Repo -> Id Issue -> IO (Either Error Issue) issue' auth user reqRepoName reqIssueNumber = executeRequestMaybe auth $ issueR user reqRepoName reqIssueNumber@@ -62,7 +62,7 @@ -- | All issues for a repo (given the repo owner and name), with optional -- restrictions as described in the 'IssueRepoMod' data type. ----- > issuesForRepo' (Just ("github-username", "github-password")) "thoughtbot" "paperclip" [NoMilestone, OnlyClosed, Mentions "jyurek", Ascending]+-- > issuesForRepo' (Just $ BasicAuth "github-username" "github-password") "thoughtbot" "paperclip" [NoMilestone, OnlyClosed, Mentions "jyurek", Ascending] issuesForRepo' :: Maybe Auth -> Name Owner -> Name Repo -> IssueRepoMod -> IO (Either Error (Vector Issue)) issuesForRepo' auth user reqRepoName opts = executeRequestMaybe auth $ issuesForRepoR user reqRepoName opts FetchAll@@ -90,7 +90,7 @@ -- | Create a new issue. ----- > createIssue (User (user, password)) user repo+-- > createIssue (BasicAuth "github-username" "github-password") user repo -- > (newIssue "some_repo") {...} createIssue :: Auth -> Name Owner -> Name Repo -> NewIssue -> IO (Either Error Issue)@@ -110,7 +110,7 @@ -- | Edit an issue. ----- > editIssue (User (user, password)) user repo issue+-- > editIssue (BasicAuth "github-username" "github-password") user repo issue -- > editOfIssue {...} editIssue :: Auth -> Name Owner -> Name Repo -> Id Issue -> EditIssue -> IO (Either Error Issue)
src/GitHub/Endpoints/Issues/Comments.hs view
@@ -46,7 +46,7 @@ -- | All comments on an issue, by the issue's number, using authentication. ----- > comments' (User (user, password)) "thoughtbot" "paperclip" 635+-- > comments' (Just $ BasicAuth "github-username" "github-password") "thoughtbot" "paperclip" 635 comments' :: Maybe Auth -> Name Owner -> Name Repo -> IssueNumber -> IO (Either Error (Vector IssueComment)) comments' auth user repo iid = executeRequestMaybe auth $ commentsR user repo iid FetchAll@@ -59,7 +59,7 @@ -- | Create a new comment. ----- > createComment (User (user, password)) user repo issue+-- > createComment (BasicAuth "github-username" "github-password") user repo issue -- > "some words" createComment :: Auth -> Name Owner -> Name Repo -> IssueNumber -> Text -> IO (Either Error Comment)@@ -76,7 +76,7 @@ -- | Edit a comment. ----- > editComment (User (user, password)) user repo commentid+-- > editComment (BasicAuth "github-username" "github-password") user repo commentid -- > "new words" editComment :: Auth -> Name Owner -> Name Repo -> Id Comment -> Text -> IO (Either Error Comment)@@ -93,7 +93,7 @@ -- | Delete a comment. ----- > deleteComment (User (user, password)) user repo commentid+-- > deleteComment (BasicAuth "github-username" "github-password") user repo commentid deleteComment :: Auth -> Name Owner -> Name Repo -> Id Comment -> IO (Either Error ()) deleteComment auth user repo commid =@@ -101,8 +101,8 @@ -- | Delete a comment. -- See <https://developer.github.com/v3/issues/comments/#delete-a-comment>-deleteCommentR :: Name Owner -> Name Repo -> Id Comment -> Request 'RW ()+deleteCommentR :: Name Owner -> Name Repo -> Id Comment -> GenRequest 'MtUnit 'RW () deleteCommentR user repo commid =- command Delete parts mempty+ Command Delete parts mempty where parts = ["repos", toPathPart user, toPathPart repo, "issues", "comments", toPathPart commid]
src/GitHub/Endpoints/Issues/Events.hs view
@@ -31,7 +31,7 @@ -- | All events that have happened on an issue, using authentication. ----- > eventsForIssue' (User (user, password)) "thoughtbot" "paperclip" 49+-- > eventsForIssue' (Just $ BasicAuth "github-username" "github-password") "thoughtbot" "paperclip" 49 eventsForIssue' :: Maybe Auth -> Name Owner -> Name Repo -> Id Issue -> IO (Either Error (Vector IssueEvent)) eventsForIssue' auth user repo iid = executeRequestMaybe auth $ eventsForIssueR user repo iid FetchAll@@ -50,7 +50,7 @@ -- | All the events for all issues in a repo, using authentication. ----- > eventsForRepo' (User (user, password)) "thoughtbot" "paperclip"+-- > eventsForRepo' (Just $ BasicAuth "github-username" "github-password") "thoughtbot" "paperclip" eventsForRepo' :: Maybe Auth -> Name Owner -> Name Repo -> IO (Either Error (Vector IssueEvent)) eventsForRepo' auth user repo = executeRequestMaybe auth $ eventsForRepoR user repo FetchAll@@ -69,7 +69,7 @@ -- | Details on a specific event, by the event's ID, using authentication. ----- > event' (User (user, password)) "thoughtbot" "paperclip" 5335772+-- > event' (Just $ BasicAuth "github-username" "github-password") "thoughtbot" "paperclip" 5335772 event' :: Maybe Auth -> Name Owner -> Name Repo -> Id IssueEvent -> IO (Either Error IssueEvent) event' auth user repo eid = executeRequestMaybe auth $ eventR user repo eid
src/GitHub/Endpoints/Issues/Labels.hs view
@@ -48,7 +48,7 @@ -- | All the labels available to use on any issue in the repo using authentication. ----- > labelsOnRepo' (Just (User (user password))) "thoughtbot" "paperclip"+-- > labelsOnRepo' (Just $ BasicAuth "github-username" "github-password") "thoughtbot" "paperclip" labelsOnRepo' :: Maybe Auth -> Name Owner -> Name Repo -> IO (Either Error (Vector IssueLabel)) labelsOnRepo' auth user repo = executeRequestMaybe auth $ labelsOnRepoR user repo FetchAll@@ -67,7 +67,7 @@ -- | A label by name using authentication. ----- > label' (Just (User (user password))) "thoughtbot" "paperclip" "bug"+-- > label' (Just $ BasicAuth "github-username" "github-password") "thoughtbot" "paperclip" "bug" label' :: Maybe Auth -> Name Owner -> Name Repo -> Name IssueLabel -> IO (Either Error IssueLabel) label' auth user repo lbl = executeRequestMaybe auth $ labelR user repo lbl@@ -80,7 +80,7 @@ -- | Create a label ----- > createLabel (User (user password)) "thoughtbot" "paperclip" "bug" "f29513"+-- > createLabel (BasicAuth "github-username" "github-password") "thoughtbot" "paperclip" "bug" "f29513" createLabel :: Auth -> Name Owner -> Name Repo -> Name IssueLabel -> String -> IO (Either Error IssueLabel) createLabel auth user repo lbl color = executeRequest auth $ createLabelR user repo lbl color@@ -96,7 +96,7 @@ -- | Update a label ----- > updateLabel (User (user password)) "thoughtbot" "paperclip" "bug" "new-bug" "ff1111"+-- > updateLabel (BasicAuth "github-username" "github-password") "thoughtbot" "paperclip" "bug" "new-bug" "ff1111" updateLabel :: Auth -> Name Owner -> Name Repo@@ -123,16 +123,16 @@ -- | Delete a label ----- > deleteLabel (User (user password)) "thoughtbot" "paperclip" "bug"+-- > deleteLabel (BasicAuth "github-username" "github-password") "thoughtbot" "paperclip" "bug" deleteLabel :: Auth -> Name Owner -> Name Repo -> Name IssueLabel -> IO (Either Error ()) deleteLabel auth user repo lbl = executeRequest auth $ deleteLabelR user repo lbl -- | Delete a label. -- See <https://developer.github.com/v3/issues/labels/#delete-a-label>-deleteLabelR :: Name Owner -> Name Repo -> Name IssueLabel -> Request 'RW ()+deleteLabelR :: Name Owner -> Name Repo -> Name IssueLabel -> GenRequest 'MtUnit 'RW () deleteLabelR user repo lbl =- command Delete ["repos", toPathPart user, toPathPart repo, "labels", toPathPart lbl] mempty+ Command Delete ["repos", toPathPart user, toPathPart repo, "labels", toPathPart lbl] mempty -- | The labels on an issue in a repo. --@@ -142,7 +142,7 @@ -- | The labels on an issue in a repo using authentication. ----- > labelsOnIssue' (Just (User (user password))) "thoughtbot" "paperclip" (Id 585)+-- > labelsOnIssue' (Just $ BasicAuth "github-username" "github-password") "thoughtbot" "paperclip" (Id 585) labelsOnIssue' :: Maybe Auth -> Name Owner -> Name Repo -> Id Issue -> IO (Either Error (Vector IssueLabel)) labelsOnIssue' auth user repo iid = executeRequestMaybe auth $ labelsOnIssueR user repo iid FetchAll@@ -155,7 +155,7 @@ -- | Add labels to an issue. ----- > addLabelsToIssue (User (user password)) "thoughtbot" "paperclip" (Id 585) ["Label1" "Label2"]+-- > addLabelsToIssue (BasicAuth "github-username" "github-password") "thoughtbot" "paperclip" (Id 585) ["Label1" "Label2"] addLabelsToIssue :: Foldable f => Auth -> Name Owner@@ -181,20 +181,20 @@ -- | Remove a label from an issue. ----- > removeLabelFromIssue (User (user password)) "thoughtbot" "paperclip" (Id 585) "bug"+-- > removeLabelFromIssue (BasicAuth "github-username" "github-password") "thoughtbot" "paperclip" (Id 585) "bug" removeLabelFromIssue :: Auth -> Name Owner -> Name Repo -> Id Issue -> Name IssueLabel -> IO (Either Error ()) removeLabelFromIssue auth user repo iid lbl = executeRequest auth $ removeLabelFromIssueR user repo iid lbl -- | Remove a label from an issue. -- See <https://developer.github.com/v3/issues/labels/#remove-a-label-from-an-issue>-removeLabelFromIssueR :: Name Owner -> Name Repo -> Id Issue -> Name IssueLabel -> Request 'RW ()+removeLabelFromIssueR :: Name Owner -> Name Repo -> Id Issue -> Name IssueLabel -> GenRequest 'MtUnit 'RW () removeLabelFromIssueR user repo iid lbl =- command Delete ["repos", toPathPart user, toPathPart repo, "issues", toPathPart iid, "labels", toPathPart lbl] mempty+ Command Delete ["repos", toPathPart user, toPathPart repo, "issues", toPathPart iid, "labels", toPathPart lbl] mempty -- | Replace all labels on an issue. Sending an empty list will remove all labels from the issue. ----- > replaceAllLabelsForIssue (User (user password)) "thoughtbot" "paperclip" (Id 585) ["Label1" "Label2"]+-- > replaceAllLabelsForIssue (BasicAuth "github-username" "github-password") "thoughtbot" "paperclip" (Id 585) ["Label1" "Label2"] replaceAllLabelsForIssue :: Foldable f => Auth -> Name Owner@@ -222,16 +222,16 @@ -- | Remove all labels from an issue. ----- > removeAllLabelsFromIssue (User (user password)) "thoughtbot" "paperclip" (Id 585)+-- > removeAllLabelsFromIssue (BasicAuth "github-username" "github-password") "thoughtbot" "paperclip" (Id 585) removeAllLabelsFromIssue :: Auth -> Name Owner -> Name Repo -> Id Issue -> IO (Either Error ()) removeAllLabelsFromIssue auth user repo iid = executeRequest auth $ removeAllLabelsFromIssueR user repo iid -- | Remove all labels from an issue. -- See <https://developer.github.com/v3/issues/labels/#remove-all-labels-from-an-issue>-removeAllLabelsFromIssueR :: Name Owner -> Name Repo -> Id Issue -> Request 'RW ()+removeAllLabelsFromIssueR :: Name Owner -> Name Repo -> Id Issue -> GenRequest 'MtUnit 'RW () removeAllLabelsFromIssueR user repo iid =- command Delete ["repos", toPathPart user, toPathPart repo, "issues", toPathPart iid, "labels"] mempty+ Command Delete ["repos", toPathPart user, toPathPart repo, "issues", toPathPart iid, "labels"] mempty -- | All the labels on a repo's milestone given the milestone ID. --@@ -241,7 +241,7 @@ -- | All the labels on a repo's milestone given the milestone ID using authentication. ----- > labelsOnMilestone' (Just (User (user password))) "thoughtbot" "paperclip" (Id 2)+-- > labelsOnMilestone' (Just $ BasicAuth "github-username" "github-password") "thoughtbot" "paperclip" (Id 2) labelsOnMilestone' :: Maybe Auth -> Name Owner -> Name Repo -> Id Milestone -> IO (Either Error (Vector IssueLabel)) labelsOnMilestone' auth user repo mid = executeRequestMaybe auth $ labelsOnMilestoneR user repo mid FetchAll
src/GitHub/Endpoints/Issues/Milestones.hs view
@@ -33,7 +33,7 @@ -- | All milestones in the repo, using authentication. ----- > milestones' (User (user, passwordG) "thoughtbot" "paperclip"+-- > milestones' (Just $ BasicAuth "github-username" "github-password") "thoughtbot" "paperclip" milestones' :: Maybe Auth -> Name Owner -> Name Repo -> IO (Either Error (Vector Milestone)) milestones' auth user repo = executeRequestMaybe auth $ milestonesR user repo FetchAll@@ -80,7 +80,7 @@ -- | Delete a milestone. -- See <https://developer.github.com/v3/issues/milestones/#delete-a-milestone>-deleteMilestoneR :: Name Owner -> Name Repo -> Id Milestone -> Request 'RW ()+deleteMilestoneR :: Name Owner -> Name Repo -> Id Milestone -> GenRequest 'MtUnit 'RW () deleteMilestoneR user repo mid =- command Delete+ Command Delete ["repos", toPathPart user, toPathPart repo, "milestones", toPathPart mid] mempty
src/GitHub/Endpoints/Organizations.hs view
@@ -22,7 +22,7 @@ -- | The public organizations for a user, given the user's login, with authorization ----- > publicOrganizationsFor' (Just ("github-username", "github-password")) "mike-burns"+-- > publicOrganizationsFor' (Just $ BasicAuth "github-username" "github-password") "mike-burns" publicOrganizationsFor' :: Maybe Auth -> Name User -> IO (Either Error (Vector SimpleOrganization)) publicOrganizationsFor' auth org = executeRequestMaybe auth $ publicOrganizationsForR org FetchAll@@ -45,7 +45,7 @@ -- | Details on a public organization. Takes the organization's login. ----- > publicOrganization' (Just ("github-username", "github-password")) "thoughtbot"+-- > publicOrganization' (Just $ BasicAuth "github-username" "github-password") "thoughtbot" publicOrganization' :: Maybe Auth -> Name Organization -> IO (Either Error Organization) publicOrganization' auth = executeRequestMaybe auth . publicOrganizationR
src/GitHub/Endpoints/Organizations/Teams.hs view
@@ -124,9 +124,9 @@ -- | Delete team. -- -- See <https://developer.github.com/v3/orgs/teams/#delete-team>-deleteTeamR :: Id Team -> Request 'RW ()+deleteTeamR :: Id Team -> GenRequest 'MtUnit 'RW () deleteTeamR tid =- command Delete ["teams", toPathPart tid] mempty+ Command Delete ["teams", toPathPart tid] mempty -- | List team members. --@@ -214,9 +214,9 @@ -- | Remove team membership. -- See <https://developer.github.com/v3/orgs/teams/#remove-team-membership>-deleteTeamMembershipForR :: Id Team -> Name Owner -> Request 'RW ()+deleteTeamMembershipForR :: Id Team -> Name Owner -> GenRequest 'MtUnit 'RW () deleteTeamMembershipForR tid user =- command Delete ["teams", toPathPart tid, "memberships", toPathPart user] mempty+ Command Delete ["teams", toPathPart tid, "memberships", toPathPart user] mempty -- | List teams for current authenticated user --
src/GitHub/Endpoints/PullRequests.hs view
@@ -106,7 +106,7 @@ -- repo owner and name along with the number assigned to the pull request. -- With authentification. ----- > pullRequest' (Just ("github-username", "github-password")) "thoughtbot" "paperclip" 562+-- > pullRequest' (Just $ BasicAuth "github-username" "github-password") "thoughtbot" "paperclip" 562 pullRequest' :: Maybe Auth -> Name Owner -> Name Repo -> IssueNumber -> IO (Either Error PullRequest) pullRequest' auth user repo prid = executeRequestMaybe auth $ pullRequestR user repo prid@@ -160,7 +160,7 @@ -- the number of the pull request. -- With authentification. ----- > pullRequestCommits' (Just ("github-username", "github-password")) "thoughtbot" "paperclip" 688+-- > pullRequestCommits' (Just $ BasicAuth "github-username" "github-password") "thoughtbot" "paperclip" 688 pullRequestCommits' :: Maybe Auth -> Name Owner -> Name Repo -> IssueNumber -> IO (Either Error (Vector Commit)) pullRequestCommits' auth user repo prid = executeRequestMaybe auth $ pullRequestCommitsR user repo prid FetchAll@@ -182,7 +182,7 @@ -- name, plus the number assigned to the pull request. -- With authentification. ----- > pullRequestFiles' (Just ("github-username", "github-password")) "thoughtbot" "paperclip" 688+-- > pullRequestFiles' (Just $ BasicAuth "github-username" "github-password") "thoughtbot" "paperclip" 688 pullRequestFiles' :: Maybe Auth -> Name Owner -> Name Repo -> IssueNumber -> IO (Either Error (Vector File)) pullRequestFiles' auth user repo prid = executeRequestMaybe auth $ pullRequestFilesR user repo prid FetchAll
src/GitHub/Endpoints/PullRequests/Comments.hs view
@@ -48,7 +48,7 @@ -- | Create a new comment. ----- > createPullComment (User (user, password)) user repo issue commit path position+-- > createPullComment (BasicAuth "github-username" "github-password") user repo issue commit path position -- > "some words" createPullComment :: Auth -> Name Owner -> Name Repo -> IssueNumber -> Text -> Text -> Int -> Text -> IO (Either Error Comment)
src/GitHub/Endpoints/PullRequests/Reviews.hs view
@@ -58,7 +58,7 @@ -- | All reviews for a pull request given the repo owner, repo name and the pull -- request id. With authentication. ----- > pullRequestReviews' (Just ("github-username", "github-password")) "thoughtbot" "paperclip" (Id 101)+-- > pullRequestReviews' (Just $ BasicAuth "github-username" "github-password") "thoughtbot" "paperclip" (Id 101) pullRequestReviews' :: Maybe Auth -> Name Owner@@ -104,8 +104,8 @@ -- | A detailed review on a pull request given the repo owner, repo name, pull -- request id and review id. With authentication. ----- > pullRequestReview' (Just ("github-username", "github-password"))--- "thoughtbot" "factory_girl" (Id 301819) (Id 332)+-- > pullRequestReview' (Just $ BasicAuth "github-username" "github-password")+-- > "thoughtbot" "factory_girl" (Id 301819) (Id 332) pullRequestReview' :: Maybe Auth -> Name Owner@@ -153,7 +153,7 @@ -- | All comments for a review on a pull request given the repo owner, repo -- name, pull request id and review id. With authentication. ----- > pullRequestReviewComments' (Just ("github-username", "github-password")) "thoughtbot" "factory_girl" (Id 301819) (Id 332)+-- > pullRequestReviewComments' (Just $ BasicAuth "github-username" "github-password") "thoughtbot" "factory_girl" (Id 301819) (Id 332) pullRequestReviewCommentsIO' :: Maybe Auth -> Name Owner
src/GitHub/Endpoints/Repos.hs view
@@ -88,7 +88,7 @@ -- | The repos for a user, by their login. -- With authentication. ----- > userRepos' (Just (BasicAuth (user, password))) "mike-burns" All+-- > userRepos' (Just $ BasicAuth "github-username" "github-password") "mike-burns" All userRepos' :: Maybe Auth -> Name Owner@@ -114,7 +114,7 @@ -- | The repos for an organization, by the organization name. -- With authentication. ----- > organizationRepos (Just (BasicAuth (user, password))) "thoughtbot" All+-- > organizationRepos (Just $ BasicAuth "github-username" "github-password") "thoughtbot" All organizationRepos' :: Maybe Auth -> Name Organization@@ -144,7 +144,7 @@ -- | Details on a specific repo, given the owner and repo name. -- With authentication. ----- > repository' (Just (BasicAuth (user, password))) "mike-burns" "github"+-- > repository' (Just $ BasicAuth "github-username" "github-password") "mike-burns" "github" repository' :: Maybe Auth -> Name Owner -> Name Repo -> IO (Either Error Repo) repository' auth user repo = executeRequestMaybe auth $ repositoryR user repo@@ -224,7 +224,7 @@ -- | The contributors to a repo, given the owner and repo name. -- With authentication. ----- > contributors' (Just (BasicAuth (user, password))) "thoughtbot" "paperclip"+-- > contributors' (Just $ BasicAuth "github-username" "github-password") "thoughtbot" "paperclip" contributors' :: Maybe Auth -> Name Owner -> Name Repo -> IO (Either Error (Vector Contributor)) contributors' auth user repo = executeRequestMaybe auth $ contributorsR user repo False FetchAll@@ -256,7 +256,7 @@ -- and repo name. -- With authentication. ----- > contributorsWithAnonymous' (Just (BasicAuth (user, password))) "thoughtbot" "paperclip"+-- > contributorsWithAnonymous' (Just $ BasicAuth "github-username" "github-password") "thoughtbot" "paperclip" contributorsWithAnonymous' :: Maybe Auth -> Name Owner -> Name Repo -> IO (Either Error (Vector Contributor)) contributorsWithAnonymous' auth user repo = executeRequestMaybe auth $ contributorsR user repo True FetchAll@@ -272,7 +272,7 @@ -- characters written in that language. Takes the repo owner and name. -- With authentication. ----- > languagesFor' (Just (BasicAuth (user, password))) "mike-burns" "ohlaunch"+-- > languagesFor' (Just $ BasicAuth "github-username" "github-password") "mike-burns" "ohlaunch" languagesFor' :: Maybe Auth -> Name Owner -> Name Repo -> IO (Either Error Languages) languagesFor' auth user repo = executeRequestMaybe auth $ languagesForR user repo@@ -292,7 +292,7 @@ -- | The git tags on a repo, given the repo owner and name. -- With authentication. ----- > tagsFor' (Just (BasicAuth (user, password))) "thoughtbot" "paperclip"+-- > tagsFor' (Just $ BasicAuth "github-username" "github-password") "thoughtbot" "paperclip" tagsFor' :: Maybe Auth -> Name Owner -> Name Repo -> IO (Either Error (Vector Tag)) tagsFor' auth user repo = executeRequestMaybe auth $ tagsForR user repo FetchAll@@ -312,7 +312,7 @@ -- | The git branches on a repo, given the repo owner and name. -- With authentication. ----- > branchesFor' (Just (BasicAuth (user, password))) "thoughtbot" "paperclip"+-- > branchesFor' (Just $ BasicAuth "github-username" "github-password") "thoughtbot" "paperclip" branchesFor' :: Maybe Auth -> Name Owner -> Name Repo -> IO (Either Error (Vector Branch)) branchesFor' auth user repo = executeRequestMaybe auth $ branchesForR user repo FetchAll@@ -330,6 +330,8 @@ deleteRepo auth user repo = executeRequest auth $ deleteRepoR user repo -deleteRepoR :: Name Owner -> Name Repo -> Request 'RW ()+-- | Delete a repository,.+-- See <https://developer.github.com/v3/repos/#delete-a-repository>+deleteRepoR :: Name Owner -> Name Repo -> GenRequest 'MtUnit 'RW () deleteRepoR user repo =- command Delete ["repos", toPathPart user, toPathPart repo] mempty+ Command Delete ["repos", toPathPart user, toPathPart repo] mempty
src/GitHub/Endpoints/Repos/Collaborators.hs view
@@ -68,7 +68,7 @@ -> Name Owner -- ^ Repository owner -> Name Repo -- ^ Repository name -> Name User -- ^ Collaborator to add- -> IO (Either Error ())+ -> IO (Either Error (Maybe RepoInvitation)) addCollaborator auth owner repo coll = executeRequest auth $ addCollaboratorR owner repo coll @@ -78,6 +78,6 @@ :: Name Owner -- ^ Repository owner -> Name Repo -- ^ Repository name -> Name User -- ^ Collaborator to add- -> GenRequest 'MtUnit 'RW ()+ -> GenRequest 'MtJSON 'RW (Maybe RepoInvitation) addCollaboratorR owner repo coll = Command Put ["repos", toPathPart owner, toPathPart repo, "collaborators", toPathPart coll] mempty
src/GitHub/Endpoints/Repos/Commits.hs view
@@ -48,7 +48,7 @@ -- | The commit history for a repo. -- With authentication. ----- > commitsFor' (Just (BasicAuth (user, password))) "mike-burns" "github"+-- > commitsFor' (Just $ BasicAuth "github-username" "github-password") "mike-burns" "github" commitsFor' :: Maybe Auth -> Name Owner -> Name Repo -> IO (Either Error (Vector Commit)) commitsFor' auth user repo = commitsWithOptionsFor' auth user repo []@@ -65,7 +65,7 @@ -- query options. -- With authentication. ----- > commitsWithOptionsFor' (Just (BasicAuth (user, password))) "mike-burns" "github" [CommitQueryAuthor "djeik"]+-- > commitsWithOptionsFor' (Just $ BasicAuth "github-username" "github-password") "mike-burns" "github" [CommitQueryAuthor "djeik"] commitsWithOptionsFor' :: Maybe Auth -> Name Owner -> Name Repo -> [CommitQueryOption] -> IO (Either Error (Vector Commit)) commitsWithOptionsFor' auth user repo opts = executeRequestMaybe auth $ commitsWithOptionsForR user repo FetchAll opts@@ -88,7 +88,7 @@ -- | Details on a specific SHA1 for a repo. -- With authentication. ----- > commit (Just $ BasicAuth (username, password)) "mike-burns" "github" "9d1a9a361266c3c890b1108ad2fdf52f824b1b81"+-- > commit (Just $ BasicAuth "github-username" "github-password") "mike-burns" "github" "9d1a9a361266c3c890b1108ad2fdf52f824b1b81" commit' :: Maybe Auth -> Name Owner -> Name Repo -> Name Commit -> IO (Either Error Commit) commit' auth user repo sha = executeRequestMaybe auth $ commitR user repo sha
src/GitHub/Endpoints/Repos/Contents.hs view
@@ -50,7 +50,7 @@ -- | The contents of a file or directory in a repo, given the repo owner, name, and path to the file -- With Authentication ----- > contentsFor' (Just (BasicAuth (user, password))) "thoughtbot" "paperclip" "README.md" Nothing+-- > contentsFor' (Just $ BasicAuth "github-username" "github-password") "thoughtbot" "paperclip" "README.md" Nothing contentsFor' :: Maybe Auth -> Name Owner -> Name Repo -> Text -> Maybe Text -> IO (Either Error Content) contentsFor' auth user repo path ref = executeRequestMaybe auth $ contentsForR user repo path ref@@ -75,7 +75,7 @@ -- | The contents of a README file in a repo, given the repo owner and name -- With Authentication ----- > readmeFor' (Just (BasicAuth (user, password))) "thoughtbot" "paperclip"+-- > readmeFor' (Just $ BasicAuth "github-username" "github-password") "thoughtbot" "paperclip" readmeFor' :: Maybe Auth -> Name Owner -> Name Repo -> IO (Either Error Content) readmeFor' auth user repo = executeRequestMaybe auth $ readmeForR user repo@@ -93,7 +93,7 @@ -- | The archive of a repo, given the repo owner, name, and archive type -- With Authentication ----- > archiveFor' (Just (BasicAuth (user, password))) "thoughtbot" "paperclip" ArchiveFormatTarball Nothing+-- > archiveFor' (Just $ BasicAuth "github-username" "github-password") "thoughtbot" "paperclip" ArchiveFormatTarball Nothing archiveFor' :: Maybe Auth -> Name Owner -> Name Repo -> ArchiveFormat -> Maybe Text -> IO (Either Error URI) archiveFor' auth user repo path ref = executeRequestMaybe auth $ archiveForR user repo path ref@@ -166,6 +166,6 @@ :: Name Owner -> Name Repo -> DeleteFile- -> Request 'RW ()+ -> GenRequest 'MtUnit 'RW () deleteFileR user repo body =- command Delete ["repos", toPathPart user, toPathPart repo, "contents", deleteFilePath body] (encode body)+ Command Delete ["repos", toPathPart user, toPathPart repo, "contents", deleteFilePath body] (encode body)
src/GitHub/Endpoints/Repos/DeployKeys.hs view
@@ -65,6 +65,6 @@ -- | Delete a deploy key. -- See <https://developer.github.com/v3/repos/keys/#remove-a-deploy-key>-deleteRepoDeployKeyR :: Name Owner -> Name Repo -> Id RepoDeployKey -> Request 'RW ()+deleteRepoDeployKeyR :: Name Owner -> Name Repo -> Id RepoDeployKey -> GenRequest 'MtUnit 'RW () deleteRepoDeployKeyR user repo keyId =- command Delete ["repos", toPathPart user, toPathPart repo, "keys", toPathPart keyId] mempty+ Command Delete ["repos", toPathPart user, toPathPart repo, "keys", toPathPart keyId] mempty
src/GitHub/Endpoints/Repos/Forks.hs view
@@ -26,7 +26,7 @@ -- | All the repos that are forked off the given repo. -- | With authentication ----- > forksFor' (Just (User (user, password))) "thoughtbot" "paperclip"+-- > forksFor' (Just $ BasicAuth "github-username" "github-password") "thoughtbot" "paperclip" forksFor' :: Maybe Auth -> Name Owner -> Name Repo -> IO (Either Error (Vector Repo)) forksFor' auth user repo = executeRequestMaybe auth $ forksForR user repo FetchAll
+ src/GitHub/Endpoints/Repos/Invitations.hs view
@@ -0,0 +1,35 @@+-----------------------------------------------------------------------------+-- |+-- License : BSD-3-Clause+-- Maintainer : Oleg Grenrus <oleg.grenrus@iki.fi>+--+-- The repo invitations API as described on+-- <https://developer.github.com/v3/repos/invitations/>.+module GitHub.Endpoints.Repos.Invitations (+ listInvitationsOnR,+ listInvitationsForR,+ acceptInvitationFromR+ ) where++import GitHub.Data+import GitHub.Internal.Prelude+import Prelude ()++-- | List open invitations of a repository+-- See <https://developer.github.com/v3/repos/invitations/#list-invitations-for-a-repository>+listInvitationsOnR :: Name Owner -> Name Repo -> FetchCount -> GenRequest 'MtJSON k (Vector RepoInvitation)+listInvitationsOnR user repo =+ PagedQuery ["repos", toPathPart user, toPathPart repo, "invitations"] []++-- | List a user's repository invitations+-- See <https://developer.github.com/v3/repos/invitations/#list-a-users-repository-invitations>+listInvitationsForR :: FetchCount -> Request k (Vector RepoInvitation)+listInvitationsForR =+ pagedQuery ["user", "repository_invitations"] []+++-- | Accept a repository invitation+-- See <https://developer.github.com/v3/repos/invitations/#accept-a-repository-invitation>+acceptInvitationFromR :: Id RepoInvitation -> GenRequest 'MtUnit 'RW ()+acceptInvitationFromR invId =+ Command Patch ["user", "repository_invitations", toPathPart invId] mempty
src/GitHub/Endpoints/Repos/Releases.hs view
@@ -29,7 +29,7 @@ -- | All releases for the given repo with authentication. ----- > releases' (Just (User (user, password))) "calleerlandsson" "pick"+-- > releases' (Just $ BasicAuth "github-username" "github-password") "calleerlandsson" "pick" releases' :: Maybe Auth -> Name Owner -> Name Repo -> IO (Either Error (Vector Release)) releases' auth user repo = executeRequestMaybe auth $ releasesR user repo FetchAll@@ -48,7 +48,7 @@ -- | Query a single release with authentication. ----- > release' (Just (User (user, password))) "calleerlandsson" "pick"+-- > release' (Just $ BasicAuth "github-username" "github-password") "calleerlandsson" "pick" release' :: Maybe Auth -> Name Owner -> Name Repo -> Id Release -> IO (Either Error Release) release' auth user repo reqReleaseId = executeRequestMaybe auth $ releaseR user repo reqReleaseId@@ -67,7 +67,7 @@ -- | Query latest release with authentication. ----- > latestRelease' (Just (User (user, password))) "calleerlandsson" "pick"+-- > latestRelease' (Just $ BasicAuth "github-username" "github-password") "calleerlandsson" "pick" latestRelease' :: Maybe Auth -> Name Owner -> Name Repo -> IO (Either Error Release) latestRelease' auth user repo = executeRequestMaybe auth $ latestReleaseR user repo@@ -86,7 +86,7 @@ -- | Query release by tag name with authentication. ----- > releaseByTagName' (Just (User (user, password))) "calleerlandsson" "pick"+-- > releaseByTagName' (Just $ BasicAuth "github-username" "github-password") "calleerlandsson" "pick" releaseByTagName' :: Maybe Auth -> Name Owner -> Name Repo -> Text -> IO (Either Error Release) releaseByTagName' auth user repo reqTagName = executeRequestMaybe auth $ releaseByTagNameR user repo reqTagName
src/GitHub/Endpoints/Repos/Webhooks.hs view
@@ -103,9 +103,9 @@ -- | Delete a hook. -- See <https://developer.github.com/v3/repos/hooks/#delete-a-hook>-deleteRepoWebhookR :: Name Owner -> Name Repo -> Id RepoWebhook -> Request 'RW ()+deleteRepoWebhookR :: Name Owner -> Name Repo -> Id RepoWebhook -> GenRequest 'MtUnit 'RW () deleteRepoWebhookR user repo hookId =- command Delete (createWebhookOpPath user repo hookId Nothing) mempty+ Command Delete (createWebhookOpPath user repo hookId Nothing) mempty createBaseWebhookPath :: Name Owner -> Name Repo -> Id RepoWebhook -> Paths createBaseWebhookPath user repo hookId =
src/GitHub/Endpoints/Users.hs view
@@ -23,7 +23,7 @@ -- | The information for a single user, by login name. -- With authentification ----- > userInfoFor' (Just ("github-username", "github-password")) "mike-burns"+-- > userInfoFor' (Just $ BasicAuth "github-username" "github-password") "mike-burns" userInfoFor' :: Maybe Auth -> Name User -> IO (Either Error User) userInfoFor' auth = executeRequestMaybe auth . userInfoForR
+ src/GitHub/Endpoints/Users/PublicSSHKeys.hs view
@@ -0,0 +1,83 @@+-----------------------------------------------------------------------------+-- |+-- License : BSD-3-Clause+-- Maintainer : Todd Mohney <toddmohney@gmail.com>+--+-- The public keys API, as described at+-- <https://developer.github.com/v3/users/keys/>+module GitHub.Endpoints.Users.PublicSSHKeys (+ -- * Querying public SSH keys+ publicSSHKeys',+ publicSSHKeysR,+ publicSSHKeysFor',+ publicSSHKeysForR,+ publicSSHKey',+ publicSSHKeyR,++ -- ** Create+ createUserPublicSSHKey',+ createUserPublicSSHKeyR,++ -- ** Delete+ deleteUserPublicSSHKey',+ deleteUserPublicSSHKeyR,+) where++import GitHub.Data+import GitHub.Internal.Prelude+import GitHub.Request+import Prelude ()++-- | Querying public SSH keys.+publicSSHKeysFor' :: Name Owner -> IO (Either Error (Vector PublicSSHKeyBasic))+publicSSHKeysFor' user =+ executeRequest' $ publicSSHKeysForR user FetchAll++-- | Querying public SSH keys.+-- See <https://developer.github.com/v3/users/keys/#list-public-keys-for-a-user>+publicSSHKeysForR :: Name Owner -> FetchCount -> Request 'RO (Vector PublicSSHKeyBasic)+publicSSHKeysForR user =+ pagedQuery ["users", toPathPart user, "keys"] []++-- | Querying the authenticated users' public SSH keys+publicSSHKeys' :: Auth -> IO (Either Error (Vector PublicSSHKey))+publicSSHKeys' auth =+ executeRequest auth publicSSHKeysR++-- | Querying the authenticated users' public SSH keys+-- See <https://developer.github.com/v3/users/keys/#list-your-public-keys>+publicSSHKeysR :: Request 'RA (Vector PublicSSHKey)+publicSSHKeysR =+ query ["user", "keys"] []++-- | Querying a public SSH key+publicSSHKey' :: Auth -> Id PublicSSHKey -> IO (Either Error PublicSSHKey)+publicSSHKey' auth keyId =+ executeRequest auth $ publicSSHKeyR keyId++-- | Querying a public SSH key.+-- See <https://developer.github.com/v3/users/keys/#get-a-single-public-key>+publicSSHKeyR :: Id PublicSSHKey -> Request 'RA PublicSSHKey+publicSSHKeyR keyId =+ query ["user", "keys", toPathPart keyId] []++-- | Create a public SSH key+createUserPublicSSHKey' :: Auth -> NewPublicSSHKey -> IO (Either Error PublicSSHKey)+createUserPublicSSHKey' auth key =+ executeRequest auth $ createUserPublicSSHKeyR key++-- | Create a public SSH key.+-- See <https://developer.github.com/v3/users/keys/#create-a-public-key>.+createUserPublicSSHKeyR :: NewPublicSSHKey -> Request 'RW PublicSSHKey+createUserPublicSSHKeyR key =+ command Post ["user", "keys"] (encode key)++deleteUserPublicSSHKey' :: Auth -> Id PublicSSHKey -> IO (Either Error ())+deleteUserPublicSSHKey' auth keyId =+ executeRequest auth $ deleteUserPublicSSHKeyR keyId++-- | Delete a public SSH key.+-- See <https://developer.github.com/v3/users/keys/#delete-a-public-key>+deleteUserPublicSSHKeyR :: Id PublicSSHKey -> GenRequest 'MtUnit 'RW ()+deleteUserPublicSSHKeyR keyId =+ Command Delete ["user", "keys", toPathPart keyId] mempty
src/GitHub/Internal/Prelude.hs view
@@ -4,7 +4,7 @@ -- License : BSD-3-Clause -- Maintainer : Oleg Grenrus <oleg.grenrus@iki.fi> ----- This module may change between minor releases. Do not rely on it contents.+-- This module may change between minor releases. Do not rely on its contents. module GitHub.Internal.Prelude ( module Prelude.Compat, -- * Commonly used types@@ -22,6 +22,7 @@ Semigroup(..), -- * Aeson FromJSON(..), ToJSON(..), Value(..), Object,+ emptyObject, encode, withText, withObject, (.:), (.:?), (.!=), (.=), object, typeMismatch, -- * Control.Applicative@@ -40,9 +41,9 @@ import Data.Aeson (FromJSON (..), Object, ToJSON (..), Value (..), encode, object, withObject, withText, (.!=), (.:), (.:?), (.=))-import Data.Aeson.Types (typeMismatch)+import Data.Aeson.Types (emptyObject, typeMismatch) import Data.Binary (Binary)-import Data.Binary.Orphans ()+import Data.Binary.Instances () import Data.Data (Data, Typeable) import Data.Foldable (toList) import Data.Hashable (Hashable (..))
src/GitHub/Request.hs view
@@ -51,6 +51,10 @@ StatusMap, getNextUrl, performPagedRequest,+ parseResponseJSON,+ -- ** Preview+ PreviewAccept (..),+ PreviewParseResponse (..), ) where import GitHub.Internal.Prelude@@ -67,10 +71,9 @@ import Data.Tagged (Tagged (..)) import Network.HTTP.Client- (HttpException (..), Manager, RequestBody (..), Response (..),- applyBasicAuth, getUri, httpLbs, method, newManager, redirectCount,- requestBody, requestHeaders, setQueryString, setRequestIgnoreStatus)-import Network.HTTP.Client.TLS (tlsManagerSettings)+ (HttpException (..), Manager, RequestBody (..), Response (..), getUri,+ httpLbs, method, newManager, redirectCount, requestBody, requestHeaders,+ setQueryString, setRequestIgnoreStatus) import Network.HTTP.Link.Parser (parseLinkHeaderBS) import Network.HTTP.Link.Types (Link (..), LinkParam (..), href, linkParams) import Network.HTTP.Types (Method, RequestHeaders, Status (..))@@ -84,14 +87,43 @@ import qualified Network.HTTP.Client as HTTP import qualified Network.HTTP.Client.Internal as HTTP -import GitHub.Auth (Auth (..))+#ifdef MIN_VERSION_http_client_tls+import Network.HTTP.Client.TLS (tlsManagerSettings)+#else+import Network.HTTP.Client.OpenSSL (opensslManagerSettings, withOpenSSL)++import qualified OpenSSL.Session as SSL+import qualified OpenSSL.X509.SystemStore as SSL+#endif++import GitHub.Auth (Auth, AuthMethod, endpoint, setAuthRequest) import GitHub.Data (Error (..)) import GitHub.Data.PullRequests (MergeResult (..)) import GitHub.Data.Request +#ifdef MIN_VERSION_http_client_tls+withOpenSSL :: IO a -> IO a+withOpenSSL = id+#else+tlsManagerSettings :: HTTP.ManagerSettings+tlsManagerSettings = opensslManagerSettings $ do+ ctx <- SSL.context+ SSL.contextAddOption ctx SSL.SSL_OP_NO_SSLv2+ SSL.contextAddOption ctx SSL.SSL_OP_NO_SSLv3+ SSL.contextAddOption ctx SSL.SSL_OP_NO_TLSv1+ SSL.contextSetCiphers ctx "ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256"+ SSL.contextLoadSystemCerts ctx+ SSL.contextSetVerificationMode ctx $ SSL.VerifyPeer True True Nothing+ return ctx+#endif+ -- | Execute 'Request' in 'IO'-executeRequest :: ParseResponse mt a => Auth -> GenRequest mt rw a -> IO (Either Error a)-executeRequest auth req = do+executeRequest+ :: (AuthMethod am, ParseResponse mt a)+ => am+ -> GenRequest mt rw a+ -> IO (Either Error a)+executeRequest auth req = withOpenSSL $ withOpenSSL $ do manager <- newManager tlsManagerSettings executeRequestWithMgr manager auth req @@ -101,9 +133,9 @@ -- | Like 'executeRequest' but with provided 'Manager'. executeRequestWithMgr- :: ParseResponse mt a+ :: (AuthMethod am, ParseResponse mt a) => Manager- -> Auth+ -> am -> GenRequest mt rw a -> IO (Either Error a) executeRequestWithMgr mgr auth req = runExceptT $ do@@ -129,7 +161,7 @@ -- | Like 'executeRequest' but without authentication. executeRequest' :: ParseResponse mt a => GenRequest mt 'RO a -> IO (Either Error a)-executeRequest' req = do+executeRequest' req = withOpenSSL $ do manager <- newManager tlsManagerSettings executeRequestWithMgr' manager req @@ -140,7 +172,7 @@ -> GenRequest mt 'RO a -> IO (Either Error a) executeRequestWithMgr' mgr req = runExceptT $ do- httpReq <- makeHttpRequest Nothing req+ httpReq <- makeHttpRequest (Nothing :: Maybe Auth) req performHttpReq httpReq req where httpLbs' :: HTTP.Request -> ExceptT Error IO (Response LBS.ByteString)@@ -158,7 +190,11 @@ -- | Helper for picking between 'executeRequest' and 'executeRequest''. -- -- The use is discouraged.-executeRequestMaybe :: ParseResponse mt a => Maybe Auth -> GenRequest mt 'RO a -> IO (Either Error a)+executeRequestMaybe+ :: (AuthMethod am, ParseResponse mt a)+ => Maybe am+ -> GenRequest mt 'RO a+ -> IO (Either Error a) executeRequestMaybe = maybe executeRequest' executeRequest -- | Partial function to drop authentication need.@@ -171,15 +207,18 @@ -- Parse response ------------------------------------------------------------------------------- -class Accept (mt :: MediaType) where+class Accept (mt :: MediaType *) where contentType :: Tagged mt BS.ByteString contentType = Tagged "application/json" -- default is JSON modifyRequest :: Tagged mt (HTTP.Request -> HTTP.Request) modifyRequest = Tagged id -class Accept mt => ParseResponse (mt :: MediaType) a where- parseResponse :: MonadError Error m => HTTP.Request -> HTTP.Response LBS.ByteString -> Tagged mt (m a)+class Accept mt => ParseResponse (mt :: MediaType *) a where+ parseResponse+ :: MonadError Error m+ => HTTP.Request -> HTTP.Response LBS.ByteString+ -> Tagged mt (m a) ------------------------------------------------------------------------------- -- JSON (+ star)@@ -208,7 +247,7 @@ parseResponse _ res = Tagged (parseResponseJSON res) ---------------------------------------------------------------------------------- Raw / Diff / Patch / Sha +-- Raw / Diff / Patch / Sha ------------------------------------------------------------------------------- instance Accept 'MtRaw where contentType = Tagged "application/vnd.github.v3.raw"@@ -251,6 +290,29 @@ noLocation = throwError $ ParseError "no location header in response" -------------------------------------------------------------------------------+-- Extension point+-------------------------------------------------------------------------------++class PreviewAccept p where+ previewContentType :: Tagged ('MtPreview p) BS.ByteString++ previewModifyRequest :: Tagged ('MtPreview p) (HTTP.Request -> HTTP.Request)+ previewModifyRequest = Tagged id++class PreviewAccept p => PreviewParseResponse p a where+ previewParseResponse+ :: MonadError Error m+ => HTTP.Request -> HTTP.Response LBS.ByteString+ -> Tagged ('MtPreview p) (m a)++instance PreviewAccept p => Accept ('MtPreview p) where+ contentType = previewContentType+ modifyRequest = previewModifyRequest++instance PreviewParseResponse p a => ParseResponse ('MtPreview p) a where+ parseResponse = previewParseResponse++------------------------------------------------------------------------------- -- Status ------------------------------------------------------------------------------- @@ -293,7 +355,11 @@ -- Unit ------------------------------------------------------------------------------- -instance Accept 'MtUnit+-- | Note: we don't ignore response status.+--+-- We only accept any response body.+instance Accept 'MtUnit where+ instance a ~ () => ParseResponse 'MtUnit a where parseResponse _ _ = Tagged (return ()) @@ -308,8 +374,8 @@ -- status checking is modifying accordingly. -- makeHttpRequest- :: forall mt rw a m. (MonadThrow m, Accept mt)- => Maybe Auth+ :: forall am mt rw a m. (AuthMethod am, MonadThrow m, Accept mt)+ => Maybe am -> GenRequest mt rw a -> m HTTP.Request makeHttpRequest auth r = case r of@@ -318,7 +384,7 @@ return $ setReqHeaders . unTagged (modifyRequest :: Tagged mt (HTTP.Request -> HTTP.Request))- . setAuthRequest auth+ . maybe id setAuthRequest auth . setQueryString qs $ req PagedQuery paths qs _ -> do@@ -326,7 +392,7 @@ return $ setReqHeaders . unTagged (modifyRequest :: Tagged mt (HTTP.Request -> HTTP.Request))- . setAuthRequest auth+ . maybe id setAuthRequest auth . setQueryString qs $ req Command m paths body -> do@@ -334,21 +400,16 @@ return $ setReqHeaders . unTagged (modifyRequest :: Tagged mt (HTTP.Request -> HTTP.Request))- . setAuthRequest auth+ . maybe id setAuthRequest auth . setBody body . setMethod (toMethod m) $ req where parseUrl' :: MonadThrow m => Text -> m HTTP.Request- parseUrl' = HTTP.parseRequest . T.unpack+ parseUrl' = HTTP.parseUrlThrow . T.unpack url :: Paths -> Text- url paths = baseUrl <> "/" <> T.intercalate "/" paths-- baseUrl :: Text- baseUrl = case auth of- Just (EnterpriseOAuth endpoint _) -> endpoint- _ -> "https://api.github.com"+ url paths = maybe "https://api.github.com" id (endpoint =<< auth) <> "/" <> T.intercalate "/" paths setReqHeaders :: HTTP.Request -> HTTP.Request setReqHeaders req = req { requestHeaders = reqHeaders <> requestHeaders req }@@ -357,21 +418,11 @@ setMethod m req = req { method = m } reqHeaders :: RequestHeaders- reqHeaders = maybe [] getOAuthHeader auth- <> [("User-Agent", "github.hs/0.21")] -- Version+ reqHeaders = [("User-Agent", "github.hs/0.21")] -- Version <> [("Accept", unTagged (contentType :: Tagged mt BS.ByteString))] setBody :: LBS.ByteString -> HTTP.Request -> HTTP.Request setBody body req = req { requestBody = RequestBodyLBS body }-- setAuthRequest :: Maybe Auth -> HTTP.Request -> HTTP.Request- setAuthRequest (Just (BasicAuth user pass)) = applyBasicAuth user pass- setAuthRequest _ = id-- getOAuthHeader :: Auth -> RequestHeaders- getOAuthHeader (OAuth token) = [("Authorization", "token " <> token)]- getOAuthHeader (EnterpriseOAuth _ token) = [("Authorization", "token " <> token)]- getOAuthHeader _ = [] -- | Query @Link@ header with @rel=next@ from the request headers. getNextUrl :: Response a -> Maybe URI