From 21acc9bd743da4e44b42c909abc3d2a3e36b4572 Mon Sep 17 00:00:00 2001 From: Gareth Jones Date: Sun, 6 Dec 2020 10:09:27 +1300 Subject: [PATCH] feat(typescript): make `verify` a type-guard --- src/verify/index.ts | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/verify/index.ts b/src/verify/index.ts index e769a9d4..f3fd8000 100644 --- a/src/verify/index.ts +++ b/src/verify/index.ts @@ -1,7 +1,18 @@ import { timingSafeEqual } from "crypto"; import { Buffer } from "buffer"; +import { EventTypesPayload } from "../generated/get-webhook-payload-type-from-event"; import { sign } from "../sign/index"; +type WebhookEvents = Exclude< + keyof EventTypesPayload, + `${string}.${string}` | "errors" | "*" +>; + +type GithubEvent = Omit< + EventTypesPayload[TName], + "name" +> & { name: TName }; + const getAlgorithm = (signature: string) => { return signature.startsWith("sha256=") ? "sha256" : "sha1"; }; @@ -10,7 +21,7 @@ export function verify( secret: string, eventPayload: object, signature: string -): boolean { +): eventPayload is GithubEvent { if (!secret || !eventPayload || !signature) { throw new TypeError( "[@octokit/webhooks] secret, eventPayload & signature required"