@octokit/webhooks
Version:
GitHub webhook events toolset for Node.js
56 lines (55 loc) • 2.73 kB
TypeScript
import type { RequestError } from "@octokit/request-error";
import type { webhooks as OpenAPIWebhooks } from "@octokit/openapi-webhooks-types";
import type { EventPayloadMap } from "./generated/webhook-identifiers.js";
import type { Logger } from "./createLogger.js";
import type { EventHandler } from "./event-handler/index.js";
import type { emitterEventNames } from "./generated/webhook-names.js";
export type WebhookEventName = keyof EventPayloadMap;
export type ExtractEvents<TEventName> = TEventName extends `${infer _TWebhookEvent}.${infer _TAction}` ? never : TEventName;
export type WebhookEvents = ExtractEvents<EmitterWebhookEventName>;
export type WebhookEventDefinition<TEventName extends keyof OpenAPIWebhooks> = OpenAPIWebhooks[TEventName]["post"]["requestBody"]["content"]["application/json"];
export type EmitterWebhookEventName = (typeof emitterEventNames)[number];
export type EmitterWebhookEvent<TEmitterEvent extends EmitterWebhookEventName = EmitterWebhookEventName> = TEmitterEvent extends `${infer TWebhookEvent}.${infer TAction}` ? BaseWebhookEvent<Extract<TWebhookEvent, WebhookEventName>> & {
payload: {
action: TAction;
};
} : BaseWebhookEvent<Extract<TEmitterEvent, WebhookEventName>>;
export type EmitterWebhookEventWithStringPayloadAndSignature = {
id: string;
name: string;
payload: string;
signature: string;
};
interface BaseWebhookEvent<TName extends WebhookEventName> {
id: string;
name: TName;
payload: EventPayloadMap[TName];
}
export interface Options<TTransformed = unknown> {
secret?: string;
additionalSecrets?: string[] | undefined;
transform?: TransformMethod<TTransformed>;
log?: Partial<Logger>;
}
type TransformMethod<T> = (event: EmitterWebhookEvent) => T | PromiseLike<T>;
export type HandlerFunction<TName extends EmitterWebhookEventName, TTransformed = unknown> = (event: EmitterWebhookEvent<TName> & TTransformed) => any;
export type RemoveHandlerFunction<TName extends EmitterWebhookEventName | "*", TTransformed = unknown> = (event: EmitterWebhookEvent<Exclude<TName, "*">> & TTransformed) => any;
type Hooks = {
[key: string]: Function[];
};
export interface State extends Options<any> {
eventHandler?: EventHandler<unknown>;
hooks: Hooks;
log: Logger;
}
/**
* Error object with optional properties coming from `octokit.request` errors
*/
export type WebhookError = Error & Partial<RequestError>;
export interface AggregateWebhookError extends AggregateError {
errors: WebhookError[];
}
export interface WebhookEventHandlerError<TTransformed = unknown> extends AggregateWebhookError {
event: TTransformed extends unknown ? EmitterWebhookEvent : EmitterWebhookEvent & TTransformed;
}
export {};