Skip to content

Commit 4892c43

Browse files
authored
docs: add createWebMiddleware() & update event-handler to reflect ESM usage (#1116)
1 parent b8525a9 commit 4892c43

File tree

3 files changed

+79
-19
lines changed

3 files changed

+79
-19
lines changed

README.md

Lines changed: 60 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -96,8 +96,9 @@ source.onmessage = (event) => {
9696
8. [webhooks.onError()](#webhooksonerror)
9797
9. [webhooks.removeListener()](#webhooksremovelistener)
9898
10. [createNodeMiddleware()](#createnodemiddleware)
99-
11. [Webhook events](#webhook-events)
100-
12. [emitterEventNames](#emittereventnames)
99+
11. [createWebMiddleware()](#createwebmiddleware)
100+
12. [Webhook events](#webhook-events)
101+
13. [emitterEventNames](#emittereventnames)
101102

102103
### Constructor
103104

@@ -570,6 +571,63 @@ Used for internal logging. Defaults to [`console`](https://developer.mozilla.org
570571
<tbody>
571572
</table>
572573

574+
### createWebMiddleware()
575+
576+
```js
577+
import { Webhooks, createWebMiddleware } from "@octokit/webhooks";
578+
579+
const webhooks = new Webhooks({
580+
secret: "mysecret",
581+
});
582+
583+
const middleware = createWebMiddleware(webhooks, { path: "/webhooks" });
584+
585+
// Example usage in Deno
586+
Deno.serve({ port: 3000 }, middleware);
587+
```
588+
589+
The middleware returned from `createWebMiddleware` can also be used in serverless environments like AWS Lambda, Cloudflare Workers, and Vercel.
590+
591+
<table width="100%">
592+
<tbody valign="top">
593+
<tr>
594+
<td>
595+
<code>webhooks</code>
596+
<em>
597+
Webhooks instance
598+
</em>
599+
</td>
600+
<td>
601+
<strong>Required.</strong>
602+
</td>
603+
</tr>
604+
<tr>
605+
<td>
606+
<code>path</code>
607+
<em>
608+
string
609+
</em>
610+
</td>
611+
<td>
612+
Custom path to match requests against. Defaults to <code>/api/github/webhooks</code>.
613+
</td>
614+
</tr>
615+
<tr>
616+
<td>
617+
<code>log</code>
618+
<em>
619+
object
620+
</em>
621+
</td>
622+
<td>
623+
624+
Used for internal logging. Defaults to [`console`](https://developer.mozilla.org/en-US/docs/Web/API/console) with `debug` and `info` doing nothing.
625+
626+
</td>
627+
</tr>
628+
<tbody>
629+
</table>
630+
573631
### Webhook events
574632

575633
See the full list of [event types with example payloads](https://docs.github.com/developers/webhooks-and-events/webhook-events-and-payloads/).

package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@
1010
"scripts": {
1111
"build": "node scripts/build.mjs && tsc -p tsconfig.json",
1212
"generate-types": "node --loader=ts-node/esm scripts/generate-types.ts",
13-
"lint": "prettier --check 'src/**/*.{ts,json}' 'scripts/**/*' 'test/**/*.ts' README.md package.json",
14-
"lint:fix": "prettier --write 'src/**/*.{ts,json}' 'scripts/**/*' 'test/**/*.ts' README.md package.json",
13+
"lint": "prettier --check 'src/**/*.{ts,json}' 'scripts/**/*' 'test/**/*.ts' README.md package.json 'src/event-handler/README.md'",
14+
"lint:fix": "prettier --write 'src/**/*.{ts,json}' 'scripts/**/*' 'test/**/*.ts' README.md package.json 'src/event-handler/README.md'",
1515
"pretest": "npm run -s lint",
1616
"test": "vitest",
1717
"validate:ts": "tsc --noEmit --noImplicitAny --target es2023 --esModuleInterop --moduleResolution node16 --module node16 --allowImportingTsExtensions test/typescript-validate.ts"

src/event-handler/README.md

Lines changed: 17 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -5,33 +5,35 @@ If you implement the route to receive webhook events from GitHub yourself then y
55
## Example
66

77
```js
8-
const { createEventHandler } = require('@octokit/webhooks')
8+
import { createEventHandler } from "@octokit/webhooks";
99
const eventHandler = createEventHandler({
10-
async transform (event) {
10+
async transform(event) {
1111
// optionally transform passed event before handlers are called
12-
return event
13-
}
14-
})
15-
eventHandler.on('installation', asyncInstallationHook)
12+
return event;
13+
},
14+
});
15+
eventHandler.on("installation", asyncInstallationHook);
1616

1717
// put this inside your webhooks route handler
18-
eventHandler.receive({
19-
id: request.headers['x-github-delivery'],
20-
name: request.headers['x-github-event'],
21-
payload: request.body
22-
}).catch(handleErrorsFromHooks)
18+
eventHandler
19+
.receive({
20+
id: request.headers["x-github-delivery"],
21+
name: request.headers["x-github-event"],
22+
payload: request.body,
23+
})
24+
.catch(handleErrorsFromHooks);
2325
```
2426

2527
## 🚨 Verify events
2628

2729
If you receive events through a publicly accessible URL, make sure to verify that the event request is coming from GitHub:
2830

2931
```js
30-
import { verify } from '@octokit/webhooks';
31-
const secret = 'mysecret'
32+
import { verify } from "@octokit/webhooks";
33+
const secret = "mysecret";
3234

33-
if (!verify(secret, request.payload, request.headers['x-hub-signature'])) {
34-
throw new Error('Signature does not match event payload & secret')
35+
if (!verify(secret, request.payload, request.headers["x-hub-signature-256"])) {
36+
throw new Error("Signature does not match event payload & secret");
3537
}
3638
```
3739

0 commit comments

Comments
 (0)