Skip to content

Commit

Permalink
feat: Add overloads for all Webhook events (#858)
Browse files Browse the repository at this point in the history
  • Loading branch information
wolfy1339 authored and gr2m committed Feb 28, 2019
1 parent 9dd9a15 commit e367c81
Show file tree
Hide file tree
Showing 2 changed files with 303 additions and 3 deletions.
300 changes: 300 additions & 0 deletions src/application.ts
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@ export interface Options {
Octokit?: Octokit.Static
}

type OnCallback<T> = (context: Context<T>) => Promise<void>

// Some events can't get an authenticated client (#382):
function isUnauthenticatedEvent (event: Webhooks.WebhookEvent<any>) {
return !event.payload.installation ||
Expand Down Expand Up @@ -135,6 +137,304 @@ export class Application {
* @param callback - a function to call when the
* webhook is received.
*/
public on (
event:
| 'check_run'
| 'check_run.completed'
| 'check_run.created'
| 'check_run.requested_action'
| 'check_run.rerequested',
callback: OnCallback<Webhooks.WebhookPayloadCheckRun>
): void

public on (
event:
| 'check_suite'
| 'check_suite.completed'
| 'check_suite.requested'
| 'check_suite.rerequested',
callback: OnCallback<Webhooks.WebhookPayloadCheckSuite>
): void

public on (
event: 'commit_comment' | 'commit_comment.created',
callback: OnCallback<Webhooks.WebhookPayloadCommitComment>
): void

public on (
event: 'create',
callback: OnCallback<Webhooks.WebhookPayloadCreate>
): void

public on (
event: 'delete',
callback: OnCallback<Webhooks.WebhookPayloadDelete>
): void

public on (
event: 'deployment',
callback: OnCallback<Webhooks.WebhookPayloadDeployment>
): void

public on (
event: 'deployment_status',
callback: OnCallback<Webhooks.WebhookPayloadDeploymentStatus>
): void

public on (
event: 'fork',
callback: OnCallback<Webhooks.WebhookPayloadFork>
): void

public on (
event: 'github_app_authorization',
callback: OnCallback<Webhooks.WebhookPayloadGithubAppAuthorization>
): void

public on (
event: 'gollum',
callback: OnCallback<Webhooks.WebhookPayloadGollum>
): void

public on (
event: 'installation' | 'installation.created' | 'installation.deleted',
callback: OnCallback<Webhooks.WebhookPayloadInstallation>
): void

public on (
event:
| 'installation_repositories'
| 'installation_repositories.added'
| 'installation_repositories.removed',
callback: OnCallback<Webhooks.WebhookPayloadInstallationRepositories>
): void

public on (
event:
| 'issue_comment'
| 'issue_comment.created'
| 'issue_comment.deleted'
| 'issue_comment.edited',
callback: OnCallback<Webhooks.WebhookPayloadIssueComment>
): void

public on (
event:
| 'issues'
| 'issues.assigned'
| 'issues.closed'
| 'issues.deleted'
| 'issues.demilestoned'
| 'issues.edited'
| 'issues.labeled'
| 'issues.milestoned'
| 'issues.opened'
| 'issues.reopened'
| 'issues.transferred'
| 'issues.unassigned'
| 'issues.unlabeled',
callback: OnCallback<Webhooks.WebhookPayloadIssues>
): void

public on (
event: 'label' | 'label.created' | 'label.deleted' | 'label.edited',
callback: OnCallback<Webhooks.WebhookPayloadLabel>
): void

public on (
event:
| 'marketplace_purchase'
| 'marketplace_purchase.cancelled'
| 'marketplace_purchase.changed'
| 'marketplace_purchase.pending_change'
| 'marketplace_purchase.pending_change_cancelled'
| 'marketplace_purchase.purchased',
callback: OnCallback<Webhooks.WebhookPayloadMarketplacePurchase>
): void

public on (
event: 'member' | 'member.added' | 'member.deleted' | 'member.edited',
callback: OnCallback<Webhooks.WebhookPayloadMember>
): void

public on (
event: 'membership' | 'membership.added' | 'membership.removed',
callback: OnCallback<Webhooks.WebhookPayloadMembership>
): void

public on (
event:
| 'milestone'
| 'milestone.closed'
| 'milestone.created'
| 'milestone.deleted'
| 'milestone.edited'
| 'milestone.opened',
callback: OnCallback<Webhooks.WebhookPayloadMilestone>
): void

public on (
event:
| 'organization'
| 'organization.member_added'
| 'organization.member_invited'
| 'organization.member_removed',
callback: OnCallback<Webhooks.WebhookPayloadOrganization>
): void

public on (
event: 'org_block' | 'org_block.blocked' | 'org_block.unblocked',
callback: OnCallback<Webhooks.WebhookPayloadOrgBlock>
): void

public on (
event: 'page_build',
callback: OnCallback<Webhooks.WebhookPayloadPageBuild>
): void

public on (
event:
| 'project_card'
| 'project_card.converted'
| 'project_card.created'
| 'project_card.deleted'
| 'project_card.edited'
| 'project_card.moved',
callback: OnCallback<Webhooks.WebhookPayloadProjectCard>
): void

public on (
event:
| 'project_column'
| 'project_column.created'
| 'project_column.deleted'
| 'project_column.edited'
| 'project_column.moved',
callback: OnCallback<Webhooks.WebhookPayloadProjectColumn>
): void

public on (
event:
| 'project'
| 'project.closed'
| 'project.created'
| 'project.deleted'
| 'project.edited'
| 'project.reopened',
callback: OnCallback<Webhooks.WebhookPayloadProject>
): void

public on (
event: 'public',
callback: OnCallback<Webhooks.WebhookPayloadPublic>
): void

public on (
event:
| 'pull_request'
| 'pull_request.assigned'
| 'pull_request.closed'
| 'pull_request.edited'
| 'pull_request.labeled'
| 'pull_request.opened'
| 'pull_request.reopened'
| 'pull_request.review_request_removed'
| 'pull_request.review_requested'
| 'pull_request.unassigned'
| 'pull_request.unlabeled'
| 'pull_request.synchronize',
callback: OnCallback<Webhooks.WebhookPayloadPullRequest>
): void

public on (
event:
| 'pull_request_review'
| 'pull_request_review.dismissed'
| 'pull_request_review.edited'
| 'pull_request_review.submitted',
callback: OnCallback<Webhooks.WebhookPayloadPullRequestReview>
): void

public on (
event:
| 'pull_request_review_comment'
| 'pull_request_review_comment.created'
| 'pull_request_review_comment.deleted'
| 'pull_request_review_comment.edited',
callback: OnCallback<Webhooks.WebhookPayloadPullRequestReviewComment>
): void

public on (
event: 'push',
callback: OnCallback<Webhooks.WebhookPayloadPush>
): void

public on (
event: 'release' | 'release.published',
callback: OnCallback<Webhooks.WebhookPayloadRelease>
): void

public on (
event:
| 'repository'
| 'repository.archived'
| 'repository.created'
| 'repository.deleted'
| 'repository.privatized'
| 'repository.publicized'
| 'repository.unarchived',
callback: OnCallback<Webhooks.WebhookPayloadRepository>
): void

public on (
event: 'repository_import',
callback: OnCallback<Webhooks.WebhookPayloadRepositoryImport>
): void

public on (
event:
| 'repository_vulnerability_alert'
| 'repository_vulnerability_alert.create'
| 'repository_vulnerability_alert.dismiss'
| 'repository_vulnerability_alert.resolve',
callback: OnCallback<Webhooks.WebhookPayloadRepositoryVulnerabilityAlert>
): void

public on (
event:
| 'security_advisory'
| 'security_advisory.performed'
| 'security_advisory.published'
| 'security_advisory.updated',
callback: OnCallback<Webhooks.WebhookPayloadSecurityAdvisory>
): void

public on (
event: 'status',
callback: OnCallback<Webhooks.WebhookPayloadStatus>
): void

public on (
event:
| 'team'
| 'team.added_to_repository'
| 'team.created'
| 'team.deleted'
| 'team.edited'
| 'team.removed_from_repository',
callback: OnCallback<Webhooks.WebhookPayloadTeam>
): void

public on (
event: 'team_add',
callback: OnCallback<Webhooks.WebhookPayloadTeamAdd>
): void

public on (
event: 'watch' | 'watch.started',
callback: OnCallback<Webhooks.WebhookPayloadWatch>
): void
public on (eventName: string | string[], callback: OnCallback<any>): void
public on (eventName: string | string[], callback: (context: Context) => Promise<void>) {
if (typeof eventName === 'string') {

Expand Down
6 changes: 3 additions & 3 deletions src/context.ts
Original file line number Diff line number Diff line change
Expand Up @@ -47,18 +47,18 @@ interface WebhookPayloadWithRepository {
* @property {logger} log - A logger
*/

export class Context implements Webhooks.WebhookEvent<any> {
export class Context<E extends WebhookPayloadWithRepository = any> implements Webhooks.WebhookEvent<E> {
public name: string
public id: string
public payload: WebhookPayloadWithRepository
public payload: E
public protocol?: 'http' | 'https'
public host?: string
public url?: string

public github: GitHubAPI
public log: LoggerWithTarget

constructor (event: Webhooks.WebhookEvent<any>, github: GitHubAPI, log: LoggerWithTarget) {
constructor (event: Webhooks.WebhookEvent<E>, github: GitHubAPI, log: LoggerWithTarget) {
this.name = event.name
this.id = event.id
this.payload = event.payload
Expand Down

0 comments on commit e367c81

Please sign in to comment.