Fetch webhooks before publish
This commit is contained in:
@@ -0,0 +1,48 @@
|
||||
// Based on https://github.com/github/docs/blob/main/src/rest/scripts/utils/webhook.js
|
||||
|
||||
import {getBodyParams} from "./get-body-params.js";
|
||||
|
||||
export default class Webhook {
|
||||
public description: string;
|
||||
public summary: string;
|
||||
public bodyParameters: any[];
|
||||
public availability: string[];
|
||||
public action: string;
|
||||
public category: string;
|
||||
#webhook: any;
|
||||
|
||||
constructor(webhook: any) {
|
||||
this.#webhook = webhook;
|
||||
this.description = webhook.description;
|
||||
this.summary = webhook.summary;
|
||||
this.bodyParameters = [];
|
||||
this.availability = webhook["x-github"]["supported-webhook-types"];
|
||||
|
||||
// for some webhook action types (like some pull-request webhook types) the
|
||||
// schema properties are under a oneOf so we try and take the action from
|
||||
// the first one (the action will be the same across oneOf items)
|
||||
this.action =
|
||||
webhook.requestBody.content["application/json"]?.schema?.properties?.action?.enum?.[0] ||
|
||||
webhook.requestBody.content["application/json"]?.schema?.oneOf?.[0]?.properties?.action?.enum?.[0] ||
|
||||
null;
|
||||
|
||||
// The OpenAPI uses hyphens for the webhook names, but the webhooks
|
||||
// are sent using underscores (e.g. `branch_protection_rule` instead
|
||||
// of `branch-protection-rule`)
|
||||
this.category = webhook["x-github"].subcategory.replaceAll("-", "_");
|
||||
return this;
|
||||
}
|
||||
|
||||
public async process() {
|
||||
await this.renderBodyParameterDescriptions();
|
||||
}
|
||||
|
||||
private async renderBodyParameterDescriptions() {
|
||||
if (!this.#webhook.requestBody) return [];
|
||||
const schema = this.#webhook.requestBody.content["application/json"]?.schema || {};
|
||||
|
||||
const isObject = schema !== null && typeof schema === "object";
|
||||
|
||||
this.bodyParameters = isObject ? await getBodyParams(schema, true) : [];
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user