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