forked from octokit/webhooks.js
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.ts
76 lines (69 loc) · 2.37 KB
/
index.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
import { createEventHandler } from "./event-handler/index";
import { createMiddleware } from "./middleware/index";
import { middleware } from "./middleware/middleware";
import { sign } from "./sign/index";
import { verify } from "./verify/index";
import { verifyAndReceive } from "./middleware/verify-and-receive";
import { Options, State, WebhookEvent } from "./types";
import { EventNames } from "./generated/event-names";
import { GetWebhookPayloadTypeFromEvent } from "./generated/get-webhook-payload-type-from-event";
import { IncomingMessage, ServerResponse } from "http";
class Webhooks<T extends WebhookEvent = WebhookEvent> {
public sign: (payload: string | object) => string;
public verify: (eventPayload?: object, signature?: string) => boolean;
public on: <E extends EventNames.All>(
event: E | E[],
callback: (
event: GetWebhookPayloadTypeFromEvent<E, T>
) => Promise<void> | void
) => void;
public removeListener: <E extends EventNames.All>(
event: E | E[],
callback: (
event: GetWebhookPayloadTypeFromEvent<E, T>
) => Promise<void> | void
) => void;
public receive: (options: {
id: string;
name: string;
payload: any;
}) => Promise<void>;
public middleware: (
request: IncomingMessage,
response: ServerResponse,
next?: (err?: any) => void
) => void | Promise<void>;
public verifyAndReceive: (
options: WebhookEvent & { signature: string }
) => Promise<void>;
constructor(options?: Options<T>) {
if (!options || !options.secret) {
throw new Error("options.secret required");
}
const state: State = {
eventHandler: createEventHandler(options),
path: options.path || "/",
secret: options.secret,
hooks: {},
};
this.sign = sign.bind(null, options.secret);
this.verify = verify.bind(null, options.secret);
this.on = state.eventHandler.on;
this.removeListener = state.eventHandler.removeListener;
this.receive = state.eventHandler.receive;
this.middleware = middleware.bind(null, state);
this.verifyAndReceive = verifyAndReceive.bind(null, state);
}
}
const createWebhooksApi = Webhooks.prototype.constructor;
export { EventNames } from "./generated/event-names";
export { EventPayloads } from "./generated/event-payloads";
export {
createEventHandler,
createMiddleware,
createWebhooksApi,
Webhooks,
WebhookEvent,
sign,
verify,
};