mirror of
https://github.com/github/codeql-action.git
synced 2025-12-27 01:30:10 +08:00
250 lines
4.9 KiB
Markdown
250 lines
4.9 KiB
Markdown
# webhooks-methods.js
|
|
|
|
> Methods to handle GitHub Webhook requests
|
|
|
|
[](https://www.npmjs.com/package/@octokit/webhooks-methods)
|
|
[](https://github.com/octokit/webhooks-methods.js/actions?query=workflow%3ATest+branch%3Amain)
|
|
|
|
<details>
|
|
<summary>Table of contents</summary>
|
|
|
|
<!-- toc -->
|
|
|
|
- [usage](#usage)
|
|
- [Methods](#methods)
|
|
- [`sign()`](#sign)
|
|
- [`verify()`](#verify)
|
|
- [`verifyWithFallback()`](#verifywithfallback)
|
|
- [Contributing](#contributing)
|
|
- [License](#license)
|
|
|
|
<!-- tocstop -->
|
|
|
|
</details>
|
|
|
|
## usage
|
|
|
|
<table>
|
|
<tbody valign=top align=left>
|
|
<tr><th>
|
|
|
|
Browsers
|
|
|
|
</th><td width=100%>
|
|
|
|
🚧 `@octokit/webhooks-methods` is not meant to be used in browsers. The webhook secret is a sensitive credential that must not be exposed to users.
|
|
|
|
Load `@octokit/webhooks-methods` directly from [esm.sh](https://esm.sh)
|
|
|
|
```html
|
|
<script type="module">
|
|
import {
|
|
sign,
|
|
verify,
|
|
verifyWithFallback,
|
|
} from "https://esm.sh/@octokit/webhooks-methods";
|
|
</script>
|
|
```
|
|
|
|
</td></tr>
|
|
<tr><th>
|
|
|
|
Node
|
|
|
|
</th><td>
|
|
|
|
Install with `npm install @octokit/core @octokit/webhooks-methods`
|
|
|
|
```js
|
|
import { sign, verify, verifyWithFallback } from "@octokit/webhooks-methods";
|
|
```
|
|
|
|
</td></tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
```js
|
|
await sign("mysecret", eventPayloadString);
|
|
// resolves with a string like "sha256=4864d2759938a15468b5df9ade20bf161da9b4f737ea61794142f3484236bda3"
|
|
|
|
await verify("mysecret", eventPayloadString, "sha256=486d27...");
|
|
// resolves with true or false
|
|
|
|
await verifyWithFallback("mysecret", eventPayloadString, "sha256=486d27...", ["oldsecret", ...]);
|
|
// resolves with true or false
|
|
```
|
|
|
|
## Methods
|
|
|
|
### `sign()`
|
|
|
|
```js
|
|
await sign(secret, eventPayloadString);
|
|
```
|
|
|
|
<table width="100%">
|
|
<tr>
|
|
<td>
|
|
<code>
|
|
secret
|
|
</code>
|
|
<em>(String)</em>
|
|
</td>
|
|
<td>
|
|
<strong>Required.</strong>
|
|
Secret as configured in GitHub Settings.
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<code>
|
|
eventPayloadString
|
|
</code>
|
|
<em>
|
|
(String)
|
|
</em>
|
|
</td>
|
|
<td>
|
|
<strong>Required.</strong>
|
|
Webhook request payload as received from GitHub.<br>
|
|
<br>
|
|
If you have only access to an already parsed object, stringify it with <code>JSON.stringify(payload)</code>
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
|
|
Resolves with a `signature` string. Throws an error if an argument is missing.
|
|
|
|
### `verify()`
|
|
|
|
```js
|
|
await verify(secret, eventPayloadString, signature);
|
|
```
|
|
|
|
<table width="100%">
|
|
<tr>
|
|
<td>
|
|
<code>
|
|
secret
|
|
</code>
|
|
<em>(String)</em>
|
|
</td>
|
|
<td>
|
|
<strong>Required.</strong>
|
|
Secret as configured in GitHub Settings.
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<code>
|
|
eventPayloadString
|
|
</code>
|
|
<em>
|
|
(String)
|
|
</em>
|
|
</td>
|
|
<td>
|
|
<strong>Required.</strong>
|
|
Webhook request payload as received from GitHub.<br>
|
|
<br>
|
|
If you have only access to an already parsed object, stringify it with <code>JSON.stringify(payload)</code>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<code>
|
|
signature
|
|
</code>
|
|
<em>
|
|
(String)
|
|
</em>
|
|
</td>
|
|
<td>
|
|
<strong>Required.</strong>
|
|
Signature string as calculated by <code><a href="../sign">sign()</a></code>.
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
|
|
Resolves with `true` or `false`. Throws error if an argument is missing.
|
|
|
|
### `verifyWithFallback()`
|
|
|
|
```js
|
|
await verifyWithFallback(
|
|
secret,
|
|
eventPayloadString,
|
|
signature,
|
|
additionalSecrets,
|
|
);
|
|
```
|
|
|
|
<table width="100%">
|
|
<tr>
|
|
<td>
|
|
<code>
|
|
secret
|
|
</code>
|
|
<em>(String)</em>
|
|
</td>
|
|
<td>
|
|
<strong>Required.</strong>
|
|
Secret as configured in GitHub Settings.
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<code>
|
|
eventPayloadString
|
|
</code>
|
|
<em>
|
|
(String)
|
|
</em>
|
|
</td>
|
|
<td>
|
|
<strong>Required.</strong>
|
|
Webhook request payload as received from GitHub.<br>
|
|
<br>
|
|
If you have only access to an already parsed object, stringify it with <code>JSON.stringify(payload)</code>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<code>
|
|
signature
|
|
</code>
|
|
<em>
|
|
(String)
|
|
</em>
|
|
</td>
|
|
<td>
|
|
<strong>Required.</strong>
|
|
Signature string as calculated by <code><a href="../sign">sign()</a></code>.
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<code>
|
|
additionalSecrets
|
|
</code>
|
|
<em>
|
|
(Array of String)
|
|
</em>
|
|
</td>
|
|
<td>
|
|
If given, each additional secret will be tried in turn.
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
|
|
This is a thin wrapper around [`verify()`](#verify) that is intended to ease callers' support for key rotation.
|
|
Resolves with `true` or `false`. Throws error if a required argument is missing.
|
|
|
|
## Contributing
|
|
|
|
See [CONTRIBUTING.md](CONTRIBUTING.md)
|
|
|
|
## License
|
|
|
|
[MIT](LICENSE)
|