Skip to content

Commit a1197d7

Browse files
committed
feat(typescript): compile-time missing secret error
1 parent 8c774d3 commit a1197d7

File tree

6 files changed

+12
-15
lines changed

6 files changed

+12
-15
lines changed

src/index.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ import {
99
EmitterWebhookEventName,
1010
HandlerFunction,
1111
Options,
12-
State,
1312
WebhookError,
1413
WebhookEventHandlerError,
1514
} from "./types";
@@ -42,12 +41,12 @@ class Webhooks<
4241
options: EmitterWebhookEvent & { signature: string }
4342
) => Promise<void>;
4443

45-
constructor(options?: Options<E, TTransformed>) {
44+
constructor(options?: Options<E, TTransformed> & { secret: string }) {
4645
if (!options || !options.secret) {
4746
throw new Error("[@octokit/webhooks] options.secret required");
4847
}
4948

50-
const state: State = {
49+
const state = {
5150
eventHandler: createEventHandler(options),
5251
path: options.path || "/",
5352
secret: options.secret,

src/middleware/index.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
import { createEventHandler } from "../event-handler/index";
22
import { middleware } from "./middleware";
3-
import { Options, State } from "../types";
3+
import { Options } from "../types";
44

5-
export function createMiddleware(options: Options<any>) {
5+
export function createMiddleware(options: Options<any> & { secret: string }) {
66
if (!options || !options.secret) {
77
throw new Error("[@octokit/webhooks] options.secret required");
88
}
99

10-
const state: State = {
10+
const state = {
1111
eventHandler: createEventHandler(options),
1212
path: options.path || "/",
1313
secret: options.secret,

src/middleware/middleware.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import { State, WebhookEventHandlerError } from "../types";
1010
const debugWebhooks = debug("webhooks:receiver");
1111

1212
export function middleware(
13-
state: State,
13+
state: State & { secret: string },
1414
request: IncomingMessage,
1515
response: ServerResponse,
1616
next?: Function

src/middleware/verify-and-receive.ts

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,11 @@ import { EmitterWebhookEvent, State } from "../types";
22
import { verify } from "../verify/index";
33

44
export function verifyAndReceive(
5-
state: State,
5+
state: State & { secret: string },
66
event: EmitterWebhookEvent & { signature: string }
77
): any {
88
// verify will validate that the secret is not undefined
9-
const matchesSignature = verify(
10-
state.secret!,
11-
event.payload,
12-
event.signature
13-
);
9+
const matchesSignature = verify(state.secret, event.payload, event.signature);
1410

1511
if (!matchesSignature) {
1612
const error = new Error(
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import { createMiddleware as Middleware } from "../../src/middleware";
22

33
test("options: none", () => {
4+
// @ts-expect-error
45
expect(() => Middleware({})).toThrow();
56
});

test/unit/middleware-test.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ test("next() callback", () => {
1717

1818
middleware(
1919
{
20+
secret: "mysecret",
2021
hooks: {},
2122
},
2223
{ method: "POST", url: "/foo" } as IncomingMessage,
@@ -41,7 +42,7 @@ describe("when does a timeout on retrieving the payload", () => {
4142
mockVerifyAndReceive.mockResolvedValueOnce(undefined);
4243

4344
const promiseMiddleware = middleware(
44-
{ hooks: {}, path: "/foo" },
45+
{ secret: "mysecret", hooks: {}, path: "/foo" },
4546
{
4647
method: "POST",
4748
url: "/foo",
@@ -70,7 +71,7 @@ describe("when does a timeout on retrieving the payload", () => {
7071
mockVerifyAndReceive.mockRejectedValueOnce(new Error("random error"));
7172

7273
const promiseMiddleware = middleware(
73-
{ hooks: {}, path: "/foo" },
74+
{ secret: "mysecret", hooks: {}, path: "/foo" },
7475
{
7576
method: "POST",
7677
url: "/foo",

0 commit comments

Comments
 (0)