Skip to content

Commit 2b00d86

Browse files
authored
fix(types): add ability to remove onAny listeners again (#645)
1 parent 51dea7d commit 2b00d86

File tree

4 files changed

+20
-4
lines changed

4 files changed

+20
-4
lines changed

src/event-handler/remove-listener.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { EmitterWebhookEventName, State } from "../types";
22

33
export function removeListener(
44
state: State,
5-
webhookNameOrNames: EmitterWebhookEventName | EmitterWebhookEventName[],
5+
webhookNameOrNames: "*" | EmitterWebhookEventName | EmitterWebhookEventName[],
66
handler: Function
77
) {
88
if (Array.isArray(webhookNameOrNames)) {

src/index.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import {
77
EmitterWebhookEvent,
88
EmitterWebhookEventName,
99
HandlerFunction,
10+
RemoveHandlerFunction,
1011
Options,
1112
State,
1213
WebhookError,
@@ -31,9 +32,9 @@ class Webhooks<TTransformed = unknown> {
3132
) => void;
3233
public onAny: (callback: (event: EmitterWebhookEvent) => any) => void;
3334
public onError: (callback: (event: WebhookEventHandlerError) => any) => void;
34-
public removeListener: <E extends EmitterWebhookEventName>(
35+
public removeListener: <E extends EmitterWebhookEventName | "*">(
3536
event: E | E[],
36-
callback: HandlerFunction<E, TTransformed>
37+
callback: RemoveHandlerFunction<E, TTransformed>
3738
) => void;
3839
public receive: (event: EmitterWebhookEvent) => Promise<void>;
3940
public verifyAndReceive: (

src/types.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,11 @@ export type HandlerFunction<
4545
TTransformed
4646
> = (event: EmitterWebhookEvent<TName> & TTransformed) => any;
4747

48+
export type RemoveHandlerFunction<
49+
TName extends EmitterWebhookEventName | "*",
50+
TTransformed
51+
> = (event: EmitterWebhookEvent<Exclude<TName, "*">> & TTransformed) => any;
52+
4853
type Hooks = {
4954
[key: string]: Function[];
5055
};

test/typescript-validate.ts

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,11 @@ import {
66
createNodeMiddleware,
77
} from "../src/index";
88
import { createServer } from "http";
9-
import { HandlerFunction, EmitterWebhookEventName } from "../src/types";
9+
import {
10+
HandlerFunction,
11+
RemoveHandlerFunction,
12+
EmitterWebhookEventName,
13+
} from "../src/types";
1014

1115
// ************************************************************
1216
// THIS CODE IS NOT EXECUTED. IT IS FOR TYPECHECKING ONLY
@@ -119,6 +123,12 @@ export default async function () {
119123
return Promise.resolve(10);
120124
});
121125

126+
webhooks.removeListener("*", async ({ id, name, payload }) => {
127+
console.log(name, "event received", id);
128+
const sig = await webhooks.sign(payload);
129+
webhooks.verify(payload, sig);
130+
});
131+
122132
webhooks.removeListener("check_run.created", ({ name, payload }) => {
123133
console.log(payload.check_run.conclusion, name);
124134
});

0 commit comments

Comments
 (0)