UNPKG

2.64 kBTypeScriptView Raw
1import type { RequestError } from "@octokit/request-error";
2import type { webhooks as OpenAPIWebhooks } from "@octokit/openapi-webhooks-types";
3import type { EventPayloadMap } from "./generated/webhook-identifiers.js";
4import type { Logger } from "./createLogger.js";
5import type { EventHandler } from "./event-handler/index.js";
6import type { emitterEventNames } from "./generated/webhook-names.js";
7import type AggregateError from "aggregate-error";
8export type WebhookEventName = keyof EventPayloadMap;
9export type ExtractEvents<TEventName> = TEventName extends `${infer _TWebhookEvent}.${infer _TAction}` ? never : TEventName;
10export type WebhookEvents = ExtractEvents<EmitterWebhookEventName>;
11export type WebhookEventDefinition<TEventName extends keyof OpenAPIWebhooks> = OpenAPIWebhooks[TEventName]["post"]["requestBody"]["content"]["application/json"];
12export type EmitterWebhookEventName = (typeof emitterEventNames)[number];
13export type EmitterWebhookEvent<TEmitterEvent extends EmitterWebhookEventName = EmitterWebhookEventName> = TEmitterEvent extends `${infer TWebhookEvent}.${infer TAction}` ? BaseWebhookEvent<Extract<TWebhookEvent, WebhookEventName>> & {
14 payload: {
15 action: TAction;
16 };
17} : BaseWebhookEvent<Extract<TEmitterEvent, WebhookEventName>>;
18export type EmitterWebhookEventWithStringPayloadAndSignature = {
19 id: string;
20 name: WebhookEventName;
21 payload: string;
22 signature: string;
23};
24interface BaseWebhookEvent<TName extends WebhookEventName> {
25 id: string;
26 name: TName;
27 payload: EventPayloadMap[TName];
28}
29export interface Options<TTransformed = unknown> {
30 secret?: string;
31 transform?: TransformMethod<TTransformed>;
32 log?: Partial<Logger>;
33}
34type TransformMethod<T> = (event: EmitterWebhookEvent) => T | PromiseLike<T>;
35export type HandlerFunction<TName extends EmitterWebhookEventName, TTransformed> = (event: EmitterWebhookEvent<TName> & TTransformed) => any;
36export type RemoveHandlerFunction<TName extends EmitterWebhookEventName | "*", TTransformed> = (event: EmitterWebhookEvent<Exclude<TName, "*">> & TTransformed) => any;
37type Hooks = {
38 [key: string]: Function[];
39};
40export interface State extends Options<any> {
41 eventHandler?: EventHandler<unknown>;
42 hooks: Hooks;
43 log: Logger;
44}
45/**
46 * Error object with optional properties coming from `octokit.request` errors
47 */
48export type WebhookError = Error & Partial<RequestError>;
49export interface WebhookEventHandlerError<TTransformed = unknown> extends AggregateError<WebhookError> {
50 event: TTransformed extends unknown ? EmitterWebhookEvent : EmitterWebhookEvent & TTransformed;
51}
52export {};