branch:
github-types.ts
3794 bytesRaw
// GitHub webhook event types
// See: https://docs.github.com/en/webhooks/webhook-events-and-payloads
export type GitHubEventType =
| "push"
| "pull_request"
| "issues"
| "issue_comment"
| "star"
| "fork"
| "watch"
| "create"
| "delete"
| "release"
| "ping";
export interface GitHubUser {
login: string;
id: number;
avatar_url: string;
html_url: string;
}
export interface GitHubRepository {
id: number;
name: string;
full_name: string;
owner: GitHubUser;
html_url: string;
description: string | null;
stargazers_count: number;
forks_count: number;
open_issues_count: number;
default_branch: string;
}
export interface GitHubCommit {
id: string;
message: string;
author: {
name: string;
email: string;
};
url: string;
timestamp: string;
}
export interface GitHubPushPayload {
ref: string;
before: string;
after: string;
commits: GitHubCommit[];
pusher: { name: string; email: string };
repository: GitHubRepository;
sender: GitHubUser;
}
export interface GitHubPullRequest {
id: number;
number: number;
title: string;
body: string | null;
state: "open" | "closed";
html_url: string;
user: GitHubUser;
created_at: string;
updated_at: string;
merged_at: string | null;
head: { ref: string; sha: string };
base: { ref: string; sha: string };
additions: number;
deletions: number;
changed_files: number;
}
export interface GitHubPullRequestPayload {
action:
| "opened"
| "closed"
| "reopened"
| "synchronize"
| "edited"
| "review_requested";
number: number;
pull_request: GitHubPullRequest;
repository: GitHubRepository;
sender: GitHubUser;
}
export interface GitHubIssue {
id: number;
number: number;
title: string;
body: string | null;
state: "open" | "closed";
html_url: string;
user: GitHubUser;
labels: Array<{ name: string; color: string }>;
created_at: string;
updated_at: string;
}
export interface GitHubIssuesPayload {
action: "opened" | "closed" | "reopened" | "edited" | "labeled" | "unlabeled";
issue: GitHubIssue;
repository: GitHubRepository;
sender: GitHubUser;
}
export interface GitHubIssueCommentPayload {
action: "created" | "edited" | "deleted";
issue: GitHubIssue;
comment: {
id: number;
body: string;
user: GitHubUser;
created_at: string;
html_url: string;
};
repository: GitHubRepository;
sender: GitHubUser;
}
export interface GitHubStarPayload {
action: "created" | "deleted";
starred_at: string | null;
repository: GitHubRepository;
sender: GitHubUser;
}
export interface GitHubForkPayload {
forkee: GitHubRepository;
repository: GitHubRepository;
sender: GitHubUser;
}
export interface GitHubReleasePayload {
action: "published" | "created" | "edited" | "deleted";
release: {
id: number;
tag_name: string;
name: string | null;
body: string | null;
html_url: string;
author: GitHubUser;
created_at: string;
published_at: string | null;
};
repository: GitHubRepository;
sender: GitHubUser;
}
export interface GitHubPingPayload {
zen: string;
hook_id: number;
hook: {
type: string;
id: number;
events: string[];
active: boolean;
};
repository: GitHubRepository;
sender: GitHubUser;
}
export type GitHubWebhookPayload =
| GitHubPushPayload
| GitHubPullRequestPayload
| GitHubIssuesPayload
| GitHubIssueCommentPayload
| GitHubStarPayload
| GitHubForkPayload
| GitHubReleasePayload
| GitHubPingPayload;
// Stored event format
export interface StoredEvent {
id: string;
type: GitHubEventType;
action?: string;
title: string;
description: string;
url: string;
actor: {
login: string;
avatar_url: string;
};
timestamp: string;
}