@open-everywhere/provider-github 0.0.0-stage → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +201 -0
- package/NOTICE +21 -0
- package/README.md +50 -2
- package/agent/channels/github-catch-up.ts +134 -0
- package/agent/channels/github-engagement.ts +381 -0
- package/agent/channels/github-identity.ts +376 -0
- package/agent/channels/github-installations.ts +152 -0
- package/agent/channels/github-message-ops.ts +62 -0
- package/agent/channels/github-origin-codec.ts +42 -0
- package/agent/channels/github-post-arm.ts +422 -0
- package/agent/channels/github-reaction-feedback.ts +489 -0
- package/agent/channels/github-reaction-scope.ts +312 -0
- package/agent/channels/github-read.ts +471 -0
- package/agent/channels/github-stop.ts +175 -0
- package/agent/channels/github-supervisor.ts +645 -0
- package/agent/channels/github-webhook-verifier.ts +56 -0
- package/agent/channels/github.ts +1458 -0
- package/agent/contributions.ts +31 -0
- package/agent/docs-generated.ts +15 -0
- package/agent/memory/memory.ts +265 -0
- package/agent/ops.ts +17 -0
- package/agent/provider-events.ts +114 -0
- package/agent/register.ts +130 -0
- package/agent/surface-parity.ts +116 -0
- package/dist/agent/channels/github-catch-up.d.ts +29 -0
- package/dist/agent/channels/github-catch-up.d.ts.map +1 -0
- package/dist/agent/channels/github-catch-up.js +105 -0
- package/dist/agent/channels/github-catch-up.js.map +1 -0
- package/dist/agent/channels/github-engagement.d.ts +223 -0
- package/dist/agent/channels/github-engagement.d.ts.map +1 -0
- package/dist/agent/channels/github-engagement.js +317 -0
- package/dist/agent/channels/github-engagement.js.map +1 -0
- package/dist/agent/channels/github-identity.d.ts +164 -0
- package/dist/agent/channels/github-identity.d.ts.map +1 -0
- package/dist/agent/channels/github-identity.js +295 -0
- package/dist/agent/channels/github-identity.js.map +1 -0
- package/dist/agent/channels/github-installations.d.ts +49 -0
- package/dist/agent/channels/github-installations.d.ts.map +1 -0
- package/dist/agent/channels/github-installations.js +114 -0
- package/dist/agent/channels/github-installations.js.map +1 -0
- package/dist/agent/channels/github-message-ops.d.ts +3 -0
- package/dist/agent/channels/github-message-ops.d.ts.map +1 -0
- package/dist/agent/channels/github-message-ops.js +58 -0
- package/dist/agent/channels/github-message-ops.js.map +1 -0
- package/dist/agent/channels/github-origin-codec.d.ts +7 -0
- package/dist/agent/channels/github-origin-codec.d.ts.map +1 -0
- package/dist/agent/channels/github-origin-codec.js +36 -0
- package/dist/agent/channels/github-origin-codec.js.map +1 -0
- package/dist/agent/channels/github-post-arm.d.ts +54 -0
- package/dist/agent/channels/github-post-arm.d.ts.map +1 -0
- package/dist/agent/channels/github-post-arm.js +339 -0
- package/dist/agent/channels/github-post-arm.js.map +1 -0
- package/dist/agent/channels/github-reaction-feedback.d.ts +97 -0
- package/dist/agent/channels/github-reaction-feedback.d.ts.map +1 -0
- package/dist/agent/channels/github-reaction-feedback.js +380 -0
- package/dist/agent/channels/github-reaction-feedback.js.map +1 -0
- package/dist/agent/channels/github-reaction-scope.d.ts +102 -0
- package/dist/agent/channels/github-reaction-scope.d.ts.map +1 -0
- package/dist/agent/channels/github-reaction-scope.js +296 -0
- package/dist/agent/channels/github-reaction-scope.js.map +1 -0
- package/dist/agent/channels/github-read.d.ts +135 -0
- package/dist/agent/channels/github-read.d.ts.map +1 -0
- package/dist/agent/channels/github-read.js +371 -0
- package/dist/agent/channels/github-read.js.map +1 -0
- package/dist/agent/channels/github-stop.d.ts +52 -0
- package/dist/agent/channels/github-stop.d.ts.map +1 -0
- package/dist/agent/channels/github-stop.js +145 -0
- package/dist/agent/channels/github-stop.js.map +1 -0
- package/dist/agent/channels/github-supervisor.d.ts +308 -0
- package/dist/agent/channels/github-supervisor.d.ts.map +1 -0
- package/dist/agent/channels/github-supervisor.js +339 -0
- package/dist/agent/channels/github-supervisor.js.map +1 -0
- package/dist/agent/channels/github-webhook-verifier.d.ts +5 -0
- package/dist/agent/channels/github-webhook-verifier.d.ts.map +1 -0
- package/dist/agent/channels/github-webhook-verifier.js +55 -0
- package/dist/agent/channels/github-webhook-verifier.js.map +1 -0
- package/dist/agent/channels/github.d.ts +139 -0
- package/dist/agent/channels/github.d.ts.map +1 -0
- package/dist/agent/channels/github.js +1232 -0
- package/dist/agent/channels/github.js.map +1 -0
- package/dist/agent/contributions.d.ts +12 -0
- package/dist/agent/contributions.d.ts.map +1 -0
- package/dist/agent/contributions.js +31 -0
- package/dist/agent/contributions.js.map +1 -0
- package/dist/agent/docs-generated.d.ts +3 -0
- package/dist/agent/docs-generated.d.ts.map +1 -0
- package/dist/agent/docs-generated.js +13 -0
- package/dist/agent/docs-generated.js.map +1 -0
- package/dist/agent/memory/memory.d.ts +54 -0
- package/dist/agent/memory/memory.d.ts.map +1 -0
- package/dist/agent/memory/memory.js +224 -0
- package/dist/agent/memory/memory.js.map +1 -0
- package/dist/agent/ops.d.ts +3 -0
- package/dist/agent/ops.d.ts.map +1 -0
- package/dist/agent/ops.js +16 -0
- package/dist/agent/ops.js.map +1 -0
- package/dist/agent/provider-events.d.ts +3 -0
- package/dist/agent/provider-events.d.ts.map +1 -0
- package/dist/agent/provider-events.js +112 -0
- package/dist/agent/provider-events.js.map +1 -0
- package/dist/agent/register.d.ts +4 -0
- package/dist/agent/register.d.ts.map +1 -0
- package/dist/agent/register.js +116 -0
- package/dist/agent/register.js.map +1 -0
- package/dist/agent/surface-parity.d.ts +3 -0
- package/dist/agent/surface-parity.d.ts.map +1 -0
- package/dist/agent/surface-parity.js +110 -0
- package/dist/agent/surface-parity.js.map +1 -0
- package/package.json +156 -4
- package/tsconfig.build.json +22 -0
- package/tsconfig.json +15 -0
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
// GitHub's webhook signature scheme, as a registry entry (OPE-164) — what lets a GENERIC hook
|
|
2
|
+
// (`POST /webhooks/<id>`) declare `source: "github"` and be verified exactly the way GitHub signs,
|
|
3
|
+
// instead of GitHub being expected to adopt our scheme (which it never will).
|
|
4
|
+
//
|
|
5
|
+
// ZERO NEW CRYPTO. The digest itself is core's `verifyGithubSignature` (routines/events.ts, through
|
|
6
|
+
// the adapter-api barrel) — the same function the native github webhook route has always used, so
|
|
7
|
+
// there is one implementation of GitHub's scheme in the tree, not two that can drift.
|
|
8
|
+
//
|
|
9
|
+
// THE SCHEME (https://docs.github.com/en/webhooks/using-webhooks/validating-webhook-deliveries):
|
|
10
|
+
// X-Hub-Signature-256: sha256=<hex> HMAC-SHA256 of the RAW body under the webhook secret.
|
|
11
|
+
// `X-Hub-Signature` (SHA-1) is legacy and deliberately NOT accepted — accepting it would be a
|
|
12
|
+
// downgrade a sender could choose.
|
|
13
|
+
//
|
|
14
|
+
// 🔴 `signedTimestamp: false` — GitHub signs NOTHING but the body. A captured delivery replays
|
|
15
|
+
// forever. That is GitHub's scheme, not a gap we can close in the verifier; it is declared here
|
|
16
|
+
// so it lands on the reviewed UNDEFENDED_REPLAY_SOURCES allowlist (webhook-verifier-test.ts)
|
|
17
|
+
// rather than being an unwritten fact. It is also exactly why resolution is by DECLARED source:
|
|
18
|
+
// with a weaker verifier registered alongside a timestamped one, letting the REQUEST choose the
|
|
19
|
+
// scheme would be a live downgrade primitive.
|
|
20
|
+
//
|
|
21
|
+
// NOTE this entry changes NO existing route. The native github webhook path keeps its own inline
|
|
22
|
+
// gate; registering here only makes the scheme available to the generic ingress.
|
|
23
|
+
|
|
24
|
+
import { verifyGithubSignature, type WebhookVerifier } from "@open-everywhere/core/agent/adapter-api.js";
|
|
25
|
+
|
|
26
|
+
/** The registry key — what a generic hook declares as its `source` to be verified as GitHub. */
|
|
27
|
+
export const GITHUB_WEBHOOK_SOURCE = "github";
|
|
28
|
+
|
|
29
|
+
const GITHUB_SIGNATURE_HEADER = "x-hub-signature-256";
|
|
30
|
+
|
|
31
|
+
export const githubWebhookVerifier: WebhookVerifier = {
|
|
32
|
+
source: GITHUB_WEBHOOK_SOURCE,
|
|
33
|
+
// Provider-owned ⇒ routed through admitProviderRegistration: de-select the github bundle and
|
|
34
|
+
// this row never lands, so a `source: "github"` hook 401s instead of silently using another
|
|
35
|
+
// scheme.
|
|
36
|
+
provider: "github",
|
|
37
|
+
keyKind: "shared-secret",
|
|
38
|
+
// `keyOrigin: "receiver-minted"` (OPE-186) — GitHub's webhook secret is a value the person
|
|
39
|
+
// CREATING the webhook types into GitHub's own form, not one GitHub generates and hands back:
|
|
40
|
+
// *"Setting a webhook secret allows you to ensure that POST requests sent to the payload URL are
|
|
41
|
+
// from GitHub … you can create a random string"* (the same docs page linked above). That is what
|
|
42
|
+
// makes `source: "github"` legal for a CHAT-MINTED hook, whose key is an OE-minted random secret
|
|
43
|
+
// the approver pastes into that form. Sourced to GitHub's docs, not to anything in this tree.
|
|
44
|
+
keyOrigin: "receiver-minted",
|
|
45
|
+
signedTimestamp: false,
|
|
46
|
+
verify({ rawBody, headers, keys }) {
|
|
47
|
+
const signature = headers.get(GITHUB_SIGNATURE_HEADER);
|
|
48
|
+
if (!signature) return { ok: false, failure: "missing-signature" };
|
|
49
|
+
for (const [i, key] of keys.entries()) {
|
|
50
|
+
// Ordered, current-first: a match at i>0 is a rotation overlap and the gate audits it.
|
|
51
|
+
// GitHub documents no overlap window of its own, so `keys[]` is how an operator gets one.
|
|
52
|
+
if (verifyGithubSignature(key, rawBody, signature)) return { ok: true, keyIndex: i };
|
|
53
|
+
}
|
|
54
|
+
return { ok: false, failure: "signature-mismatch" };
|
|
55
|
+
},
|
|
56
|
+
};
|