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"; import type AggregateError from "aggregate-error"; export type WebhookEventName = keyof EventPayloadMap; export type ExtractEvents = TEventName extends `${infer _TWebhookEvent}.${infer _TAction}` ? never : TEventName; export type WebhookEvents = ExtractEvents; export type WebhookEventDefinition = OpenAPIWebhooks[TEventName]["post"]["requestBody"]["content"]["application/json"]; export type EmitterWebhookEventName = (typeof emitterEventNames)[number]; export type EmitterWebhookEvent = TEmitterEvent extends `${infer TWebhookEvent}.${infer TAction}` ? BaseWebhookEvent> & { payload: { action: TAction; }; } : BaseWebhookEvent>; export type EmitterWebhookEventWithStringPayloadAndSignature = { id: string; name: WebhookEventName; payload: string; signature: string; }; interface BaseWebhookEvent { id: string; name: TName; payload: EventPayloadMap[TName]; } export interface Options { secret?: string; transform?: TransformMethod; log?: Partial; } type TransformMethod = (event: EmitterWebhookEvent) => T | PromiseLike; export type HandlerFunction = (event: EmitterWebhookEvent & TTransformed) => any; export type RemoveHandlerFunction = (event: EmitterWebhookEvent> & TTransformed) => any; type Hooks = { [key: string]: Function[]; }; export interface State extends Options { eventHandler?: EventHandler; hooks: Hooks; log: Logger; } /** * Error object with optional properties coming from `octokit.request` errors */ export type WebhookError = Error & Partial; export interface WebhookEventHandlerError extends AggregateError { event: TTransformed extends unknown ? EmitterWebhookEvent : EmitterWebhookEvent & TTransformed; } export {};