@ubiquity-os/plugin-sdk 1.0.6

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/dist/index.mjs ADDED
@@ -0,0 +1,3447 @@
1
+ // src/server.ts
2
+ import { Type as T } from "@sinclair/typebox";
3
+ import { Value } from "@sinclair/typebox/value";
4
+ import { LOG_LEVEL, LogReturn, Logs } from "@ubiquity-os/ubiquity-os-logger";
5
+ import { Hono } from "hono";
6
+ import { env as honoEnv } from "hono/adapter";
7
+ import { HTTPException } from "hono/http-exception";
8
+
9
+ // src/util.ts
10
+ function sanitizeMetadata(obj) {
11
+ return JSON.stringify(obj, null, 2).replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/--/g, "&#45;&#45;");
12
+ }
13
+
14
+ // src/comment.ts
15
+ var HEADER_NAME = "Ubiquity";
16
+ async function postComment(context2, message) {
17
+ if ("issue" in context2.payload && context2.payload.repository?.owner?.login) {
18
+ const metadata = createStructuredMetadata(message.metadata?.name, message);
19
+ await context2.octokit.rest.issues.createComment({
20
+ owner: context2.payload.repository.owner.login,
21
+ repo: context2.payload.repository.name,
22
+ issue_number: context2.payload.issue.number,
23
+ body: [message.logMessage.diff, metadata].join("\n")
24
+ });
25
+ } else {
26
+ context2.logger.info("Cannot post comment because issue is not found in the payload");
27
+ }
28
+ }
29
+ function createStructuredMetadata(className, logReturn) {
30
+ const logMessage = logReturn.logMessage;
31
+ const metadata = logReturn.metadata;
32
+ const jsonPretty = sanitizeMetadata(metadata);
33
+ const stack = logReturn.metadata?.stack;
34
+ const stackLine = (Array.isArray(stack) ? stack.join("\n") : stack)?.split("\n")[2] ?? "";
35
+ const caller = stackLine.match(/at (\S+)/)?.[1] ?? "";
36
+ const ubiquityMetadataHeader = `<!-- ${HEADER_NAME} - ${className} - ${caller} - ${metadata?.revision}`;
37
+ let metadataSerialized;
38
+ const metadataSerializedVisible = ["```json", jsonPretty, "```"].join("\n");
39
+ const metadataSerializedHidden = [ubiquityMetadataHeader, jsonPretty, "-->"].join("\n");
40
+ if (logMessage?.type === "fatal") {
41
+ metadataSerialized = [metadataSerializedVisible, metadataSerializedHidden].join("\n");
42
+ } else {
43
+ metadataSerialized = metadataSerializedHidden;
44
+ }
45
+ return `
46
+ ${metadataSerialized}
47
+ `;
48
+ }
49
+
50
+ // src/types/config.ts
51
+ var CONFIG_FULL_PATH = ".github/.ubiquity-os.config.yml";
52
+ var DEV_CONFIG_FULL_PATH = ".github/.ubiquity-os.config.dev.yml";
53
+ var CONFIG_ORG_REPO = ".ubiquity-os";
54
+
55
+ // src/constants.ts
56
+ var KERNEL_PUBLIC_KEY = `-----BEGIN PUBLIC KEY-----
57
+ MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs96DOU+JqM8SyNXOB6u3
58
+ uBKIFiyrcST/LZTYN6y7LeJlyCuGPqSDrWCfjU9Ph5PLf9TWiNmeM8DGaOpwEFC7
59
+ U3NRxOSglo4plnQ5zRwIHHXvxyK400sQP2oISXymISuBQWjEIqkC9DybQrKwNzf+
60
+ I0JHWPqmwMIw26UvVOtXGOOWBqTkk+N2+/9f8eDIJP5QQVwwszc8s1rXOsLMlVIf
61
+ wShw7GO4E2jyK8TSJKpyjV8eb1JJMDwFhPiRrtZfQJUtDf2mV/67shQww61BH2Y/
62
+ Plnalo58kWIbkqZoq1yJrL5sFb73osM5+vADTXVn79bkvea7W19nSkdMiarYt4Hq
63
+ JQIDAQAB
64
+ -----END PUBLIC KEY-----
65
+ `;
66
+ var KERNEL_APP_ID = 975031;
67
+ var BOT_USER_ID = 178941584;
68
+
69
+ // node_modules/universal-user-agent/index.js
70
+ function getUserAgent() {
71
+ if (typeof navigator === "object" && "userAgent" in navigator) {
72
+ return navigator.userAgent;
73
+ }
74
+ if (typeof process === "object" && process.version !== void 0) {
75
+ return `Node.js/${process.version.substr(1)} (${process.platform}; ${process.arch})`;
76
+ }
77
+ return "<environment undetectable>";
78
+ }
79
+
80
+ // node_modules/before-after-hook/lib/register.js
81
+ function register(state, name, method, options) {
82
+ if (typeof method !== "function") {
83
+ throw new Error("method for before hook must be a function");
84
+ }
85
+ if (!options) {
86
+ options = {};
87
+ }
88
+ if (Array.isArray(name)) {
89
+ return name.reverse().reduce((callback, name2) => {
90
+ return register.bind(null, state, name2, callback, options);
91
+ }, method)();
92
+ }
93
+ return Promise.resolve().then(() => {
94
+ if (!state.registry[name]) {
95
+ return method(options);
96
+ }
97
+ return state.registry[name].reduce((method2, registered) => {
98
+ return registered.hook.bind(null, method2, options);
99
+ }, method)();
100
+ });
101
+ }
102
+
103
+ // node_modules/before-after-hook/lib/add.js
104
+ function addHook(state, kind, name, hook2) {
105
+ const orig = hook2;
106
+ if (!state.registry[name]) {
107
+ state.registry[name] = [];
108
+ }
109
+ if (kind === "before") {
110
+ hook2 = (method, options) => {
111
+ return Promise.resolve().then(orig.bind(null, options)).then(method.bind(null, options));
112
+ };
113
+ }
114
+ if (kind === "after") {
115
+ hook2 = (method, options) => {
116
+ let result;
117
+ return Promise.resolve().then(method.bind(null, options)).then((result_) => {
118
+ result = result_;
119
+ return orig(result, options);
120
+ }).then(() => {
121
+ return result;
122
+ });
123
+ };
124
+ }
125
+ if (kind === "error") {
126
+ hook2 = (method, options) => {
127
+ return Promise.resolve().then(method.bind(null, options)).catch((error) => {
128
+ return orig(error, options);
129
+ });
130
+ };
131
+ }
132
+ state.registry[name].push({
133
+ hook: hook2,
134
+ orig
135
+ });
136
+ }
137
+
138
+ // node_modules/before-after-hook/lib/remove.js
139
+ function removeHook(state, name, method) {
140
+ if (!state.registry[name]) {
141
+ return;
142
+ }
143
+ const index = state.registry[name].map((registered) => {
144
+ return registered.orig;
145
+ }).indexOf(method);
146
+ if (index === -1) {
147
+ return;
148
+ }
149
+ state.registry[name].splice(index, 1);
150
+ }
151
+
152
+ // node_modules/before-after-hook/index.js
153
+ var bind = Function.bind;
154
+ var bindable = bind.bind(bind);
155
+ function bindApi(hook2, state, name) {
156
+ const removeHookRef = bindable(removeHook, null).apply(
157
+ null,
158
+ name ? [state, name] : [state]
159
+ );
160
+ hook2.api = { remove: removeHookRef };
161
+ hook2.remove = removeHookRef;
162
+ ["before", "error", "after", "wrap"].forEach((kind) => {
163
+ const args = name ? [state, kind, name] : [state, kind];
164
+ hook2[kind] = hook2.api[kind] = bindable(addHook, null).apply(null, args);
165
+ });
166
+ }
167
+ function Singular() {
168
+ const singularHookName = Symbol("Singular");
169
+ const singularHookState = {
170
+ registry: {}
171
+ };
172
+ const singularHook = register.bind(null, singularHookState, singularHookName);
173
+ bindApi(singularHook, singularHookState, singularHookName);
174
+ return singularHook;
175
+ }
176
+ function Collection() {
177
+ const state = {
178
+ registry: {}
179
+ };
180
+ const hook2 = register.bind(null, state);
181
+ bindApi(hook2, state);
182
+ return hook2;
183
+ }
184
+ var before_after_hook_default = { Singular, Collection };
185
+
186
+ // node_modules/@octokit/endpoint/dist-bundle/index.js
187
+ var VERSION = "0.0.0-development";
188
+ var userAgent = `octokit-endpoint.js/${VERSION} ${getUserAgent()}`;
189
+ var DEFAULTS = {
190
+ method: "GET",
191
+ baseUrl: "https://api.github.com",
192
+ headers: {
193
+ accept: "application/vnd.github.v3+json",
194
+ "user-agent": userAgent
195
+ },
196
+ mediaType: {
197
+ format: ""
198
+ }
199
+ };
200
+ function lowercaseKeys(object) {
201
+ if (!object) {
202
+ return {};
203
+ }
204
+ return Object.keys(object).reduce((newObj, key) => {
205
+ newObj[key.toLowerCase()] = object[key];
206
+ return newObj;
207
+ }, {});
208
+ }
209
+ function isPlainObject(value) {
210
+ if (typeof value !== "object" || value === null)
211
+ return false;
212
+ if (Object.prototype.toString.call(value) !== "[object Object]")
213
+ return false;
214
+ const proto = Object.getPrototypeOf(value);
215
+ if (proto === null)
216
+ return true;
217
+ const Ctor = Object.prototype.hasOwnProperty.call(proto, "constructor") && proto.constructor;
218
+ return typeof Ctor === "function" && Ctor instanceof Ctor && Function.prototype.call(Ctor) === Function.prototype.call(value);
219
+ }
220
+ function mergeDeep(defaults, options) {
221
+ const result = Object.assign({}, defaults);
222
+ Object.keys(options).forEach((key) => {
223
+ if (isPlainObject(options[key])) {
224
+ if (!(key in defaults))
225
+ Object.assign(result, { [key]: options[key] });
226
+ else
227
+ result[key] = mergeDeep(defaults[key], options[key]);
228
+ } else {
229
+ Object.assign(result, { [key]: options[key] });
230
+ }
231
+ });
232
+ return result;
233
+ }
234
+ function removeUndefinedProperties(obj) {
235
+ for (const key in obj) {
236
+ if (obj[key] === void 0) {
237
+ delete obj[key];
238
+ }
239
+ }
240
+ return obj;
241
+ }
242
+ function merge(defaults, route, options) {
243
+ if (typeof route === "string") {
244
+ let [method, url] = route.split(" ");
245
+ options = Object.assign(url ? { method, url } : { url: method }, options);
246
+ } else {
247
+ options = Object.assign({}, route);
248
+ }
249
+ options.headers = lowercaseKeys(options.headers);
250
+ removeUndefinedProperties(options);
251
+ removeUndefinedProperties(options.headers);
252
+ const mergedOptions = mergeDeep(defaults || {}, options);
253
+ if (options.url === "/graphql") {
254
+ if (defaults && defaults.mediaType.previews?.length) {
255
+ mergedOptions.mediaType.previews = defaults.mediaType.previews.filter(
256
+ (preview) => !mergedOptions.mediaType.previews.includes(preview)
257
+ ).concat(mergedOptions.mediaType.previews);
258
+ }
259
+ mergedOptions.mediaType.previews = (mergedOptions.mediaType.previews || []).map((preview) => preview.replace(/-preview/, ""));
260
+ }
261
+ return mergedOptions;
262
+ }
263
+ function addQueryParameters(url, parameters) {
264
+ const separator = /\?/.test(url) ? "&" : "?";
265
+ const names = Object.keys(parameters);
266
+ if (names.length === 0) {
267
+ return url;
268
+ }
269
+ return url + separator + names.map((name) => {
270
+ if (name === "q") {
271
+ return "q=" + parameters.q.split("+").map(encodeURIComponent).join("+");
272
+ }
273
+ return `${name}=${encodeURIComponent(parameters[name])}`;
274
+ }).join("&");
275
+ }
276
+ var urlVariableRegex = /\{[^}]+\}/g;
277
+ function removeNonChars(variableName) {
278
+ return variableName.replace(/^\W+|\W+$/g, "").split(/,/);
279
+ }
280
+ function extractUrlVariableNames(url) {
281
+ const matches = url.match(urlVariableRegex);
282
+ if (!matches) {
283
+ return [];
284
+ }
285
+ return matches.map(removeNonChars).reduce((a, b) => a.concat(b), []);
286
+ }
287
+ function omit(object, keysToOmit) {
288
+ const result = { __proto__: null };
289
+ for (const key of Object.keys(object)) {
290
+ if (keysToOmit.indexOf(key) === -1) {
291
+ result[key] = object[key];
292
+ }
293
+ }
294
+ return result;
295
+ }
296
+ function encodeReserved(str) {
297
+ return str.split(/(%[0-9A-Fa-f]{2})/g).map(function(part) {
298
+ if (!/%[0-9A-Fa-f]/.test(part)) {
299
+ part = encodeURI(part).replace(/%5B/g, "[").replace(/%5D/g, "]");
300
+ }
301
+ return part;
302
+ }).join("");
303
+ }
304
+ function encodeUnreserved(str) {
305
+ return encodeURIComponent(str).replace(/[!'()*]/g, function(c) {
306
+ return "%" + c.charCodeAt(0).toString(16).toUpperCase();
307
+ });
308
+ }
309
+ function encodeValue(operator, value, key) {
310
+ value = operator === "+" || operator === "#" ? encodeReserved(value) : encodeUnreserved(value);
311
+ if (key) {
312
+ return encodeUnreserved(key) + "=" + value;
313
+ } else {
314
+ return value;
315
+ }
316
+ }
317
+ function isDefined(value) {
318
+ return value !== void 0 && value !== null;
319
+ }
320
+ function isKeyOperator(operator) {
321
+ return operator === ";" || operator === "&" || operator === "?";
322
+ }
323
+ function getValues(context2, operator, key, modifier) {
324
+ var value = context2[key], result = [];
325
+ if (isDefined(value) && value !== "") {
326
+ if (typeof value === "string" || typeof value === "number" || typeof value === "boolean") {
327
+ value = value.toString();
328
+ if (modifier && modifier !== "*") {
329
+ value = value.substring(0, parseInt(modifier, 10));
330
+ }
331
+ result.push(
332
+ encodeValue(operator, value, isKeyOperator(operator) ? key : "")
333
+ );
334
+ } else {
335
+ if (modifier === "*") {
336
+ if (Array.isArray(value)) {
337
+ value.filter(isDefined).forEach(function(value2) {
338
+ result.push(
339
+ encodeValue(operator, value2, isKeyOperator(operator) ? key : "")
340
+ );
341
+ });
342
+ } else {
343
+ Object.keys(value).forEach(function(k) {
344
+ if (isDefined(value[k])) {
345
+ result.push(encodeValue(operator, value[k], k));
346
+ }
347
+ });
348
+ }
349
+ } else {
350
+ const tmp = [];
351
+ if (Array.isArray(value)) {
352
+ value.filter(isDefined).forEach(function(value2) {
353
+ tmp.push(encodeValue(operator, value2));
354
+ });
355
+ } else {
356
+ Object.keys(value).forEach(function(k) {
357
+ if (isDefined(value[k])) {
358
+ tmp.push(encodeUnreserved(k));
359
+ tmp.push(encodeValue(operator, value[k].toString()));
360
+ }
361
+ });
362
+ }
363
+ if (isKeyOperator(operator)) {
364
+ result.push(encodeUnreserved(key) + "=" + tmp.join(","));
365
+ } else if (tmp.length !== 0) {
366
+ result.push(tmp.join(","));
367
+ }
368
+ }
369
+ }
370
+ } else {
371
+ if (operator === ";") {
372
+ if (isDefined(value)) {
373
+ result.push(encodeUnreserved(key));
374
+ }
375
+ } else if (value === "" && (operator === "&" || operator === "?")) {
376
+ result.push(encodeUnreserved(key) + "=");
377
+ } else if (value === "") {
378
+ result.push("");
379
+ }
380
+ }
381
+ return result;
382
+ }
383
+ function parseUrl(template) {
384
+ return {
385
+ expand: expand.bind(null, template)
386
+ };
387
+ }
388
+ function expand(template, context2) {
389
+ var operators = ["+", "#", ".", "/", ";", "?", "&"];
390
+ template = template.replace(
391
+ /\{([^\{\}]+)\}|([^\{\}]+)/g,
392
+ function(_, expression, literal) {
393
+ if (expression) {
394
+ let operator = "";
395
+ const values = [];
396
+ if (operators.indexOf(expression.charAt(0)) !== -1) {
397
+ operator = expression.charAt(0);
398
+ expression = expression.substr(1);
399
+ }
400
+ expression.split(/,/g).forEach(function(variable) {
401
+ var tmp = /([^:\*]*)(?::(\d+)|(\*))?/.exec(variable);
402
+ values.push(getValues(context2, operator, tmp[1], tmp[2] || tmp[3]));
403
+ });
404
+ if (operator && operator !== "+") {
405
+ var separator = ",";
406
+ if (operator === "?") {
407
+ separator = "&";
408
+ } else if (operator !== "#") {
409
+ separator = operator;
410
+ }
411
+ return (values.length !== 0 ? operator : "") + values.join(separator);
412
+ } else {
413
+ return values.join(",");
414
+ }
415
+ } else {
416
+ return encodeReserved(literal);
417
+ }
418
+ }
419
+ );
420
+ if (template === "/") {
421
+ return template;
422
+ } else {
423
+ return template.replace(/\/$/, "");
424
+ }
425
+ }
426
+ function parse(options) {
427
+ let method = options.method.toUpperCase();
428
+ let url = (options.url || "/").replace(/:([a-z]\w+)/g, "{$1}");
429
+ let headers = Object.assign({}, options.headers);
430
+ let body;
431
+ let parameters = omit(options, [
432
+ "method",
433
+ "baseUrl",
434
+ "url",
435
+ "headers",
436
+ "request",
437
+ "mediaType"
438
+ ]);
439
+ const urlVariableNames = extractUrlVariableNames(url);
440
+ url = parseUrl(url).expand(parameters);
441
+ if (!/^http/.test(url)) {
442
+ url = options.baseUrl + url;
443
+ }
444
+ const omittedParameters = Object.keys(options).filter((option) => urlVariableNames.includes(option)).concat("baseUrl");
445
+ const remainingParameters = omit(parameters, omittedParameters);
446
+ const isBinaryRequest = /application\/octet-stream/i.test(headers.accept);
447
+ if (!isBinaryRequest) {
448
+ if (options.mediaType.format) {
449
+ headers.accept = headers.accept.split(/,/).map(
450
+ (format) => format.replace(
451
+ /application\/vnd(\.\w+)(\.v3)?(\.\w+)?(\+json)?$/,
452
+ `application/vnd$1$2.${options.mediaType.format}`
453
+ )
454
+ ).join(",");
455
+ }
456
+ if (url.endsWith("/graphql")) {
457
+ if (options.mediaType.previews?.length) {
458
+ const previewsFromAcceptHeader = headers.accept.match(/[\w-]+(?=-preview)/g) || [];
459
+ headers.accept = previewsFromAcceptHeader.concat(options.mediaType.previews).map((preview) => {
460
+ const format = options.mediaType.format ? `.${options.mediaType.format}` : "+json";
461
+ return `application/vnd.github.${preview}-preview${format}`;
462
+ }).join(",");
463
+ }
464
+ }
465
+ }
466
+ if (["GET", "HEAD"].includes(method)) {
467
+ url = addQueryParameters(url, remainingParameters);
468
+ } else {
469
+ if ("data" in remainingParameters) {
470
+ body = remainingParameters.data;
471
+ } else {
472
+ if (Object.keys(remainingParameters).length) {
473
+ body = remainingParameters;
474
+ }
475
+ }
476
+ }
477
+ if (!headers["content-type"] && typeof body !== "undefined") {
478
+ headers["content-type"] = "application/json; charset=utf-8";
479
+ }
480
+ if (["PATCH", "PUT"].includes(method) && typeof body === "undefined") {
481
+ body = "";
482
+ }
483
+ return Object.assign(
484
+ { method, url, headers },
485
+ typeof body !== "undefined" ? { body } : null,
486
+ options.request ? { request: options.request } : null
487
+ );
488
+ }
489
+ function endpointWithDefaults(defaults, route, options) {
490
+ return parse(merge(defaults, route, options));
491
+ }
492
+ function withDefaults(oldDefaults, newDefaults) {
493
+ const DEFAULTS2 = merge(oldDefaults, newDefaults);
494
+ const endpoint2 = endpointWithDefaults.bind(null, DEFAULTS2);
495
+ return Object.assign(endpoint2, {
496
+ DEFAULTS: DEFAULTS2,
497
+ defaults: withDefaults.bind(null, DEFAULTS2),
498
+ merge: merge.bind(null, DEFAULTS2),
499
+ parse
500
+ });
501
+ }
502
+ var endpoint = withDefaults(null, DEFAULTS);
503
+
504
+ // node_modules/@octokit/request-error/dist-src/index.js
505
+ var RequestError = class extends Error {
506
+ name;
507
+ /**
508
+ * http status code
509
+ */
510
+ status;
511
+ /**
512
+ * Request options that lead to the error.
513
+ */
514
+ request;
515
+ /**
516
+ * Response object if a response was received
517
+ */
518
+ response;
519
+ constructor(message, statusCode, options) {
520
+ super(message);
521
+ this.name = "HttpError";
522
+ this.status = Number.parseInt(statusCode);
523
+ if (Number.isNaN(this.status)) {
524
+ this.status = 0;
525
+ }
526
+ if ("response" in options) {
527
+ this.response = options.response;
528
+ }
529
+ const requestCopy = Object.assign({}, options.request);
530
+ if (options.request.headers.authorization) {
531
+ requestCopy.headers = Object.assign({}, options.request.headers, {
532
+ authorization: options.request.headers.authorization.replace(
533
+ / .*$/,
534
+ " [REDACTED]"
535
+ )
536
+ });
537
+ }
538
+ requestCopy.url = requestCopy.url.replace(/\bclient_secret=\w+/g, "client_secret=[REDACTED]").replace(/\baccess_token=\w+/g, "access_token=[REDACTED]");
539
+ this.request = requestCopy;
540
+ }
541
+ };
542
+
543
+ // node_modules/@octokit/request/dist-bundle/index.js
544
+ var VERSION2 = "0.0.0-development";
545
+ var defaults_default = {
546
+ headers: {
547
+ "user-agent": `octokit-request.js/${VERSION2} ${getUserAgent()}`
548
+ }
549
+ };
550
+ function isPlainObject2(value) {
551
+ if (typeof value !== "object" || value === null) return false;
552
+ if (Object.prototype.toString.call(value) !== "[object Object]") return false;
553
+ const proto = Object.getPrototypeOf(value);
554
+ if (proto === null) return true;
555
+ const Ctor = Object.prototype.hasOwnProperty.call(proto, "constructor") && proto.constructor;
556
+ return typeof Ctor === "function" && Ctor instanceof Ctor && Function.prototype.call(Ctor) === Function.prototype.call(value);
557
+ }
558
+ async function fetchWrapper(requestOptions) {
559
+ const fetch = requestOptions.request?.fetch || globalThis.fetch;
560
+ if (!fetch) {
561
+ throw new Error(
562
+ "fetch is not set. Please pass a fetch implementation as new Octokit({ request: { fetch }}). Learn more at https://github.com/octokit/octokit.js/#fetch-missing"
563
+ );
564
+ }
565
+ const log = requestOptions.request?.log || console;
566
+ const parseSuccessResponseBody = requestOptions.request?.parseSuccessResponseBody !== false;
567
+ const body = isPlainObject2(requestOptions.body) || Array.isArray(requestOptions.body) ? JSON.stringify(requestOptions.body) : requestOptions.body;
568
+ const requestHeaders = Object.fromEntries(
569
+ Object.entries(requestOptions.headers).map(([name, value]) => [
570
+ name,
571
+ String(value)
572
+ ])
573
+ );
574
+ let fetchResponse;
575
+ try {
576
+ fetchResponse = await fetch(requestOptions.url, {
577
+ method: requestOptions.method,
578
+ body,
579
+ redirect: requestOptions.request?.redirect,
580
+ headers: requestHeaders,
581
+ signal: requestOptions.request?.signal,
582
+ // duplex must be set if request.body is ReadableStream or Async Iterables.
583
+ // See https://fetch.spec.whatwg.org/#dom-requestinit-duplex.
584
+ ...requestOptions.body && { duplex: "half" }
585
+ });
586
+ } catch (error) {
587
+ let message = "Unknown Error";
588
+ if (error instanceof Error) {
589
+ if (error.name === "AbortError") {
590
+ error.status = 500;
591
+ throw error;
592
+ }
593
+ message = error.message;
594
+ if (error.name === "TypeError" && "cause" in error) {
595
+ if (error.cause instanceof Error) {
596
+ message = error.cause.message;
597
+ } else if (typeof error.cause === "string") {
598
+ message = error.cause;
599
+ }
600
+ }
601
+ }
602
+ const requestError = new RequestError(message, 500, {
603
+ request: requestOptions
604
+ });
605
+ requestError.cause = error;
606
+ throw requestError;
607
+ }
608
+ const status = fetchResponse.status;
609
+ const url = fetchResponse.url;
610
+ const responseHeaders = {};
611
+ for (const [key, value] of fetchResponse.headers) {
612
+ responseHeaders[key] = value;
613
+ }
614
+ const octokitResponse = {
615
+ url,
616
+ status,
617
+ headers: responseHeaders,
618
+ data: ""
619
+ };
620
+ if ("deprecation" in responseHeaders) {
621
+ const matches = responseHeaders.link && responseHeaders.link.match(/<([^>]+)>; rel="deprecation"/);
622
+ const deprecationLink = matches && matches.pop();
623
+ log.warn(
624
+ `[@octokit/request] "${requestOptions.method} ${requestOptions.url}" is deprecated. It is scheduled to be removed on ${responseHeaders.sunset}${deprecationLink ? `. See ${deprecationLink}` : ""}`
625
+ );
626
+ }
627
+ if (status === 204 || status === 205) {
628
+ return octokitResponse;
629
+ }
630
+ if (requestOptions.method === "HEAD") {
631
+ if (status < 400) {
632
+ return octokitResponse;
633
+ }
634
+ throw new RequestError(fetchResponse.statusText, status, {
635
+ response: octokitResponse,
636
+ request: requestOptions
637
+ });
638
+ }
639
+ if (status === 304) {
640
+ octokitResponse.data = await getResponseData(fetchResponse);
641
+ throw new RequestError("Not modified", status, {
642
+ response: octokitResponse,
643
+ request: requestOptions
644
+ });
645
+ }
646
+ if (status >= 400) {
647
+ octokitResponse.data = await getResponseData(fetchResponse);
648
+ throw new RequestError(toErrorMessage(octokitResponse.data), status, {
649
+ response: octokitResponse,
650
+ request: requestOptions
651
+ });
652
+ }
653
+ octokitResponse.data = parseSuccessResponseBody ? await getResponseData(fetchResponse) : fetchResponse.body;
654
+ return octokitResponse;
655
+ }
656
+ async function getResponseData(response) {
657
+ const contentType = response.headers.get("content-type");
658
+ if (/application\/json/.test(contentType)) {
659
+ return response.json().catch(() => response.text()).catch(() => "");
660
+ }
661
+ if (!contentType || /^text\/|charset=utf-8$/.test(contentType)) {
662
+ return response.text();
663
+ }
664
+ return response.arrayBuffer();
665
+ }
666
+ function toErrorMessage(data) {
667
+ if (typeof data === "string") {
668
+ return data;
669
+ }
670
+ if (data instanceof ArrayBuffer) {
671
+ return "Unknown error";
672
+ }
673
+ if ("message" in data) {
674
+ const suffix = "documentation_url" in data ? ` - ${data.documentation_url}` : "";
675
+ return Array.isArray(data.errors) ? `${data.message}: ${data.errors.map((v) => JSON.stringify(v)).join(", ")}${suffix}` : `${data.message}${suffix}`;
676
+ }
677
+ return `Unknown error: ${JSON.stringify(data)}`;
678
+ }
679
+ function withDefaults2(oldEndpoint, newDefaults) {
680
+ const endpoint2 = oldEndpoint.defaults(newDefaults);
681
+ const newApi = function(route, parameters) {
682
+ const endpointOptions = endpoint2.merge(route, parameters);
683
+ if (!endpointOptions.request || !endpointOptions.request.hook) {
684
+ return fetchWrapper(endpoint2.parse(endpointOptions));
685
+ }
686
+ const request2 = (route2, parameters2) => {
687
+ return fetchWrapper(
688
+ endpoint2.parse(endpoint2.merge(route2, parameters2))
689
+ );
690
+ };
691
+ Object.assign(request2, {
692
+ endpoint: endpoint2,
693
+ defaults: withDefaults2.bind(null, endpoint2)
694
+ });
695
+ return endpointOptions.request.hook(request2, endpointOptions);
696
+ };
697
+ return Object.assign(newApi, {
698
+ endpoint: endpoint2,
699
+ defaults: withDefaults2.bind(null, endpoint2)
700
+ });
701
+ }
702
+ var request = withDefaults2(endpoint, defaults_default);
703
+
704
+ // node_modules/@octokit/graphql/dist-bundle/index.js
705
+ var VERSION3 = "0.0.0-development";
706
+ function _buildMessageForResponseErrors(data) {
707
+ return `Request failed due to following response errors:
708
+ ` + data.errors.map((e) => ` - ${e.message}`).join("\n");
709
+ }
710
+ var GraphqlResponseError = class extends Error {
711
+ constructor(request2, headers, response) {
712
+ super(_buildMessageForResponseErrors(response));
713
+ this.request = request2;
714
+ this.headers = headers;
715
+ this.response = response;
716
+ this.errors = response.errors;
717
+ this.data = response.data;
718
+ if (Error.captureStackTrace) {
719
+ Error.captureStackTrace(this, this.constructor);
720
+ }
721
+ }
722
+ name = "GraphqlResponseError";
723
+ errors;
724
+ data;
725
+ };
726
+ var NON_VARIABLE_OPTIONS = [
727
+ "method",
728
+ "baseUrl",
729
+ "url",
730
+ "headers",
731
+ "request",
732
+ "query",
733
+ "mediaType"
734
+ ];
735
+ var FORBIDDEN_VARIABLE_OPTIONS = ["query", "method", "url"];
736
+ var GHES_V3_SUFFIX_REGEX = /\/api\/v3\/?$/;
737
+ function graphql(request2, query, options) {
738
+ if (options) {
739
+ if (typeof query === "string" && "query" in options) {
740
+ return Promise.reject(
741
+ new Error(`[@octokit/graphql] "query" cannot be used as variable name`)
742
+ );
743
+ }
744
+ for (const key in options) {
745
+ if (!FORBIDDEN_VARIABLE_OPTIONS.includes(key))
746
+ continue;
747
+ return Promise.reject(
748
+ new Error(
749
+ `[@octokit/graphql] "${key}" cannot be used as variable name`
750
+ )
751
+ );
752
+ }
753
+ }
754
+ const parsedOptions = typeof query === "string" ? Object.assign({ query }, options) : query;
755
+ const requestOptions = Object.keys(
756
+ parsedOptions
757
+ ).reduce((result, key) => {
758
+ if (NON_VARIABLE_OPTIONS.includes(key)) {
759
+ result[key] = parsedOptions[key];
760
+ return result;
761
+ }
762
+ if (!result.variables) {
763
+ result.variables = {};
764
+ }
765
+ result.variables[key] = parsedOptions[key];
766
+ return result;
767
+ }, {});
768
+ const baseUrl = parsedOptions.baseUrl || request2.endpoint.DEFAULTS.baseUrl;
769
+ if (GHES_V3_SUFFIX_REGEX.test(baseUrl)) {
770
+ requestOptions.url = baseUrl.replace(GHES_V3_SUFFIX_REGEX, "/api/graphql");
771
+ }
772
+ return request2(requestOptions).then((response) => {
773
+ if (response.data.errors) {
774
+ const headers = {};
775
+ for (const key of Object.keys(response.headers)) {
776
+ headers[key] = response.headers[key];
777
+ }
778
+ throw new GraphqlResponseError(
779
+ requestOptions,
780
+ headers,
781
+ response.data
782
+ );
783
+ }
784
+ return response.data.data;
785
+ });
786
+ }
787
+ function withDefaults3(request2, newDefaults) {
788
+ const newRequest = request2.defaults(newDefaults);
789
+ const newApi = (query, options) => {
790
+ return graphql(newRequest, query, options);
791
+ };
792
+ return Object.assign(newApi, {
793
+ defaults: withDefaults3.bind(null, newRequest),
794
+ endpoint: newRequest.endpoint
795
+ });
796
+ }
797
+ var graphql2 = withDefaults3(request, {
798
+ headers: {
799
+ "user-agent": `octokit-graphql.js/${VERSION3} ${getUserAgent()}`
800
+ },
801
+ method: "POST",
802
+ url: "/graphql"
803
+ });
804
+ function withCustomRequest(customRequest) {
805
+ return withDefaults3(customRequest, {
806
+ method: "POST",
807
+ url: "/graphql"
808
+ });
809
+ }
810
+
811
+ // node_modules/@octokit/auth-token/dist-bundle/index.js
812
+ var REGEX_IS_INSTALLATION_LEGACY = /^v1\./;
813
+ var REGEX_IS_INSTALLATION = /^ghs_/;
814
+ var REGEX_IS_USER_TO_SERVER = /^ghu_/;
815
+ async function auth(token) {
816
+ const isApp = token.split(/\./).length === 3;
817
+ const isInstallation = REGEX_IS_INSTALLATION_LEGACY.test(token) || REGEX_IS_INSTALLATION.test(token);
818
+ const isUserToServer = REGEX_IS_USER_TO_SERVER.test(token);
819
+ const tokenType = isApp ? "app" : isInstallation ? "installation" : isUserToServer ? "user-to-server" : "oauth";
820
+ return {
821
+ type: "token",
822
+ token,
823
+ tokenType
824
+ };
825
+ }
826
+ function withAuthorizationPrefix(token) {
827
+ if (token.split(/\./).length === 3) {
828
+ return `bearer ${token}`;
829
+ }
830
+ return `token ${token}`;
831
+ }
832
+ async function hook(token, request2, route, parameters) {
833
+ const endpoint2 = request2.endpoint.merge(
834
+ route,
835
+ parameters
836
+ );
837
+ endpoint2.headers.authorization = withAuthorizationPrefix(token);
838
+ return request2(endpoint2);
839
+ }
840
+ var createTokenAuth = function createTokenAuth2(token) {
841
+ if (!token) {
842
+ throw new Error("[@octokit/auth-token] No token passed to createTokenAuth");
843
+ }
844
+ if (typeof token !== "string") {
845
+ throw new Error(
846
+ "[@octokit/auth-token] Token passed to createTokenAuth is not a string"
847
+ );
848
+ }
849
+ token = token.replace(/^(token|bearer) +/i, "");
850
+ return Object.assign(auth.bind(null, token), {
851
+ hook: hook.bind(null, token)
852
+ });
853
+ };
854
+
855
+ // node_modules/@octokit/core/dist-src/version.js
856
+ var VERSION4 = "6.1.2";
857
+
858
+ // node_modules/@octokit/core/dist-src/index.js
859
+ var noop = () => {
860
+ };
861
+ var consoleWarn = console.warn.bind(console);
862
+ var consoleError = console.error.bind(console);
863
+ var userAgentTrail = `octokit-core.js/${VERSION4} ${getUserAgent()}`;
864
+ var Octokit = class {
865
+ static VERSION = VERSION4;
866
+ static defaults(defaults) {
867
+ const OctokitWithDefaults = class extends this {
868
+ constructor(...args) {
869
+ const options = args[0] || {};
870
+ if (typeof defaults === "function") {
871
+ super(defaults(options));
872
+ return;
873
+ }
874
+ super(
875
+ Object.assign(
876
+ {},
877
+ defaults,
878
+ options,
879
+ options.userAgent && defaults.userAgent ? {
880
+ userAgent: `${options.userAgent} ${defaults.userAgent}`
881
+ } : null
882
+ )
883
+ );
884
+ }
885
+ };
886
+ return OctokitWithDefaults;
887
+ }
888
+ static plugins = [];
889
+ /**
890
+ * Attach a plugin (or many) to your Octokit instance.
891
+ *
892
+ * @example
893
+ * const API = Octokit.plugin(plugin1, plugin2, plugin3, ...)
894
+ */
895
+ static plugin(...newPlugins) {
896
+ const currentPlugins = this.plugins;
897
+ const NewOctokit = class extends this {
898
+ static plugins = currentPlugins.concat(
899
+ newPlugins.filter((plugin) => !currentPlugins.includes(plugin))
900
+ );
901
+ };
902
+ return NewOctokit;
903
+ }
904
+ constructor(options = {}) {
905
+ const hook2 = new before_after_hook_default.Collection();
906
+ const requestDefaults = {
907
+ baseUrl: request.endpoint.DEFAULTS.baseUrl,
908
+ headers: {},
909
+ request: Object.assign({}, options.request, {
910
+ // @ts-ignore internal usage only, no need to type
911
+ hook: hook2.bind(null, "request")
912
+ }),
913
+ mediaType: {
914
+ previews: [],
915
+ format: ""
916
+ }
917
+ };
918
+ requestDefaults.headers["user-agent"] = options.userAgent ? `${options.userAgent} ${userAgentTrail}` : userAgentTrail;
919
+ if (options.baseUrl) {
920
+ requestDefaults.baseUrl = options.baseUrl;
921
+ }
922
+ if (options.previews) {
923
+ requestDefaults.mediaType.previews = options.previews;
924
+ }
925
+ if (options.timeZone) {
926
+ requestDefaults.headers["time-zone"] = options.timeZone;
927
+ }
928
+ this.request = request.defaults(requestDefaults);
929
+ this.graphql = withCustomRequest(this.request).defaults(requestDefaults);
930
+ this.log = Object.assign(
931
+ {
932
+ debug: noop,
933
+ info: noop,
934
+ warn: consoleWarn,
935
+ error: consoleError
936
+ },
937
+ options.log
938
+ );
939
+ this.hook = hook2;
940
+ if (!options.authStrategy) {
941
+ if (!options.auth) {
942
+ this.auth = async () => ({
943
+ type: "unauthenticated"
944
+ });
945
+ } else {
946
+ const auth2 = createTokenAuth(options.auth);
947
+ hook2.wrap("request", auth2.hook);
948
+ this.auth = auth2;
949
+ }
950
+ } else {
951
+ const { authStrategy, ...otherOptions } = options;
952
+ const auth2 = authStrategy(
953
+ Object.assign(
954
+ {
955
+ request: this.request,
956
+ log: this.log,
957
+ // we pass the current octokit instance as well as its constructor options
958
+ // to allow for authentication strategies that return a new octokit instance
959
+ // that shares the same internal state as the current one. The original
960
+ // requirement for this was the "event-octokit" authentication strategy
961
+ // of https://github.com/probot/octokit-auth-probot.
962
+ octokit: this,
963
+ octokitOptions: otherOptions
964
+ },
965
+ options.auth
966
+ )
967
+ );
968
+ hook2.wrap("request", auth2.hook);
969
+ this.auth = auth2;
970
+ }
971
+ const classConstructor = this.constructor;
972
+ for (let i = 0; i < classConstructor.plugins.length; ++i) {
973
+ Object.assign(this, classConstructor.plugins[i](this, options));
974
+ }
975
+ }
976
+ // assigned during constructor
977
+ request;
978
+ graphql;
979
+ log;
980
+ hook;
981
+ // TODO: type `octokit.auth` based on passed options.authStrategy
982
+ auth;
983
+ };
984
+
985
+ // node_modules/@octokit/plugin-paginate-rest/dist-bundle/index.js
986
+ var VERSION5 = "0.0.0-development";
987
+ function normalizePaginatedListResponse(response) {
988
+ if (!response.data) {
989
+ return {
990
+ ...response,
991
+ data: []
992
+ };
993
+ }
994
+ const responseNeedsNormalization = "total_count" in response.data && !("url" in response.data);
995
+ if (!responseNeedsNormalization) return response;
996
+ const incompleteResults = response.data.incomplete_results;
997
+ const repositorySelection = response.data.repository_selection;
998
+ const totalCount = response.data.total_count;
999
+ delete response.data.incomplete_results;
1000
+ delete response.data.repository_selection;
1001
+ delete response.data.total_count;
1002
+ const namespaceKey = Object.keys(response.data)[0];
1003
+ const data = response.data[namespaceKey];
1004
+ response.data = data;
1005
+ if (typeof incompleteResults !== "undefined") {
1006
+ response.data.incomplete_results = incompleteResults;
1007
+ }
1008
+ if (typeof repositorySelection !== "undefined") {
1009
+ response.data.repository_selection = repositorySelection;
1010
+ }
1011
+ response.data.total_count = totalCount;
1012
+ return response;
1013
+ }
1014
+ function iterator(octokit, route, parameters) {
1015
+ const options = typeof route === "function" ? route.endpoint(parameters) : octokit.request.endpoint(route, parameters);
1016
+ const requestMethod = typeof route === "function" ? route : octokit.request;
1017
+ const method = options.method;
1018
+ const headers = options.headers;
1019
+ let url = options.url;
1020
+ return {
1021
+ [Symbol.asyncIterator]: () => ({
1022
+ async next() {
1023
+ if (!url) return { done: true };
1024
+ try {
1025
+ const response = await requestMethod({ method, url, headers });
1026
+ const normalizedResponse = normalizePaginatedListResponse(response);
1027
+ url = ((normalizedResponse.headers.link || "").match(
1028
+ /<([^>]+)>;\s*rel="next"/
1029
+ ) || [])[1];
1030
+ return { value: normalizedResponse };
1031
+ } catch (error) {
1032
+ if (error.status !== 409) throw error;
1033
+ url = "";
1034
+ return {
1035
+ value: {
1036
+ status: 200,
1037
+ headers: {},
1038
+ data: []
1039
+ }
1040
+ };
1041
+ }
1042
+ }
1043
+ })
1044
+ };
1045
+ }
1046
+ function paginate(octokit, route, parameters, mapFn) {
1047
+ if (typeof parameters === "function") {
1048
+ mapFn = parameters;
1049
+ parameters = void 0;
1050
+ }
1051
+ return gather(
1052
+ octokit,
1053
+ [],
1054
+ iterator(octokit, route, parameters)[Symbol.asyncIterator](),
1055
+ mapFn
1056
+ );
1057
+ }
1058
+ function gather(octokit, results, iterator2, mapFn) {
1059
+ return iterator2.next().then((result) => {
1060
+ if (result.done) {
1061
+ return results;
1062
+ }
1063
+ let earlyExit = false;
1064
+ function done() {
1065
+ earlyExit = true;
1066
+ }
1067
+ results = results.concat(
1068
+ mapFn ? mapFn(result.value, done) : result.value.data
1069
+ );
1070
+ if (earlyExit) {
1071
+ return results;
1072
+ }
1073
+ return gather(octokit, results, iterator2, mapFn);
1074
+ });
1075
+ }
1076
+ var composePaginateRest = Object.assign(paginate, {
1077
+ iterator
1078
+ });
1079
+ function paginateRest(octokit) {
1080
+ return {
1081
+ paginate: Object.assign(paginate.bind(null, octokit), {
1082
+ iterator: iterator.bind(null, octokit)
1083
+ })
1084
+ };
1085
+ }
1086
+ paginateRest.VERSION = VERSION5;
1087
+
1088
+ // node_modules/@octokit/plugin-rest-endpoint-methods/dist-src/version.js
1089
+ var VERSION6 = "13.2.6";
1090
+
1091
+ // node_modules/@octokit/plugin-rest-endpoint-methods/dist-src/generated/endpoints.js
1092
+ var Endpoints = {
1093
+ actions: {
1094
+ addCustomLabelsToSelfHostedRunnerForOrg: [
1095
+ "POST /orgs/{org}/actions/runners/{runner_id}/labels"
1096
+ ],
1097
+ addCustomLabelsToSelfHostedRunnerForRepo: [
1098
+ "POST /repos/{owner}/{repo}/actions/runners/{runner_id}/labels"
1099
+ ],
1100
+ addSelectedRepoToOrgSecret: [
1101
+ "PUT /orgs/{org}/actions/secrets/{secret_name}/repositories/{repository_id}"
1102
+ ],
1103
+ addSelectedRepoToOrgVariable: [
1104
+ "PUT /orgs/{org}/actions/variables/{name}/repositories/{repository_id}"
1105
+ ],
1106
+ approveWorkflowRun: [
1107
+ "POST /repos/{owner}/{repo}/actions/runs/{run_id}/approve"
1108
+ ],
1109
+ cancelWorkflowRun: [
1110
+ "POST /repos/{owner}/{repo}/actions/runs/{run_id}/cancel"
1111
+ ],
1112
+ createEnvironmentVariable: [
1113
+ "POST /repos/{owner}/{repo}/environments/{environment_name}/variables"
1114
+ ],
1115
+ createOrUpdateEnvironmentSecret: [
1116
+ "PUT /repos/{owner}/{repo}/environments/{environment_name}/secrets/{secret_name}"
1117
+ ],
1118
+ createOrUpdateOrgSecret: ["PUT /orgs/{org}/actions/secrets/{secret_name}"],
1119
+ createOrUpdateRepoSecret: [
1120
+ "PUT /repos/{owner}/{repo}/actions/secrets/{secret_name}"
1121
+ ],
1122
+ createOrgVariable: ["POST /orgs/{org}/actions/variables"],
1123
+ createRegistrationTokenForOrg: [
1124
+ "POST /orgs/{org}/actions/runners/registration-token"
1125
+ ],
1126
+ createRegistrationTokenForRepo: [
1127
+ "POST /repos/{owner}/{repo}/actions/runners/registration-token"
1128
+ ],
1129
+ createRemoveTokenForOrg: ["POST /orgs/{org}/actions/runners/remove-token"],
1130
+ createRemoveTokenForRepo: [
1131
+ "POST /repos/{owner}/{repo}/actions/runners/remove-token"
1132
+ ],
1133
+ createRepoVariable: ["POST /repos/{owner}/{repo}/actions/variables"],
1134
+ createWorkflowDispatch: [
1135
+ "POST /repos/{owner}/{repo}/actions/workflows/{workflow_id}/dispatches"
1136
+ ],
1137
+ deleteActionsCacheById: [
1138
+ "DELETE /repos/{owner}/{repo}/actions/caches/{cache_id}"
1139
+ ],
1140
+ deleteActionsCacheByKey: [
1141
+ "DELETE /repos/{owner}/{repo}/actions/caches{?key,ref}"
1142
+ ],
1143
+ deleteArtifact: [
1144
+ "DELETE /repos/{owner}/{repo}/actions/artifacts/{artifact_id}"
1145
+ ],
1146
+ deleteEnvironmentSecret: [
1147
+ "DELETE /repos/{owner}/{repo}/environments/{environment_name}/secrets/{secret_name}"
1148
+ ],
1149
+ deleteEnvironmentVariable: [
1150
+ "DELETE /repos/{owner}/{repo}/environments/{environment_name}/variables/{name}"
1151
+ ],
1152
+ deleteOrgSecret: ["DELETE /orgs/{org}/actions/secrets/{secret_name}"],
1153
+ deleteOrgVariable: ["DELETE /orgs/{org}/actions/variables/{name}"],
1154
+ deleteRepoSecret: [
1155
+ "DELETE /repos/{owner}/{repo}/actions/secrets/{secret_name}"
1156
+ ],
1157
+ deleteRepoVariable: [
1158
+ "DELETE /repos/{owner}/{repo}/actions/variables/{name}"
1159
+ ],
1160
+ deleteSelfHostedRunnerFromOrg: [
1161
+ "DELETE /orgs/{org}/actions/runners/{runner_id}"
1162
+ ],
1163
+ deleteSelfHostedRunnerFromRepo: [
1164
+ "DELETE /repos/{owner}/{repo}/actions/runners/{runner_id}"
1165
+ ],
1166
+ deleteWorkflowRun: ["DELETE /repos/{owner}/{repo}/actions/runs/{run_id}"],
1167
+ deleteWorkflowRunLogs: [
1168
+ "DELETE /repos/{owner}/{repo}/actions/runs/{run_id}/logs"
1169
+ ],
1170
+ disableSelectedRepositoryGithubActionsOrganization: [
1171
+ "DELETE /orgs/{org}/actions/permissions/repositories/{repository_id}"
1172
+ ],
1173
+ disableWorkflow: [
1174
+ "PUT /repos/{owner}/{repo}/actions/workflows/{workflow_id}/disable"
1175
+ ],
1176
+ downloadArtifact: [
1177
+ "GET /repos/{owner}/{repo}/actions/artifacts/{artifact_id}/{archive_format}"
1178
+ ],
1179
+ downloadJobLogsForWorkflowRun: [
1180
+ "GET /repos/{owner}/{repo}/actions/jobs/{job_id}/logs"
1181
+ ],
1182
+ downloadWorkflowRunAttemptLogs: [
1183
+ "GET /repos/{owner}/{repo}/actions/runs/{run_id}/attempts/{attempt_number}/logs"
1184
+ ],
1185
+ downloadWorkflowRunLogs: [
1186
+ "GET /repos/{owner}/{repo}/actions/runs/{run_id}/logs"
1187
+ ],
1188
+ enableSelectedRepositoryGithubActionsOrganization: [
1189
+ "PUT /orgs/{org}/actions/permissions/repositories/{repository_id}"
1190
+ ],
1191
+ enableWorkflow: [
1192
+ "PUT /repos/{owner}/{repo}/actions/workflows/{workflow_id}/enable"
1193
+ ],
1194
+ forceCancelWorkflowRun: [
1195
+ "POST /repos/{owner}/{repo}/actions/runs/{run_id}/force-cancel"
1196
+ ],
1197
+ generateRunnerJitconfigForOrg: [
1198
+ "POST /orgs/{org}/actions/runners/generate-jitconfig"
1199
+ ],
1200
+ generateRunnerJitconfigForRepo: [
1201
+ "POST /repos/{owner}/{repo}/actions/runners/generate-jitconfig"
1202
+ ],
1203
+ getActionsCacheList: ["GET /repos/{owner}/{repo}/actions/caches"],
1204
+ getActionsCacheUsage: ["GET /repos/{owner}/{repo}/actions/cache/usage"],
1205
+ getActionsCacheUsageByRepoForOrg: [
1206
+ "GET /orgs/{org}/actions/cache/usage-by-repository"
1207
+ ],
1208
+ getActionsCacheUsageForOrg: ["GET /orgs/{org}/actions/cache/usage"],
1209
+ getAllowedActionsOrganization: [
1210
+ "GET /orgs/{org}/actions/permissions/selected-actions"
1211
+ ],
1212
+ getAllowedActionsRepository: [
1213
+ "GET /repos/{owner}/{repo}/actions/permissions/selected-actions"
1214
+ ],
1215
+ getArtifact: ["GET /repos/{owner}/{repo}/actions/artifacts/{artifact_id}"],
1216
+ getCustomOidcSubClaimForRepo: [
1217
+ "GET /repos/{owner}/{repo}/actions/oidc/customization/sub"
1218
+ ],
1219
+ getEnvironmentPublicKey: [
1220
+ "GET /repos/{owner}/{repo}/environments/{environment_name}/secrets/public-key"
1221
+ ],
1222
+ getEnvironmentSecret: [
1223
+ "GET /repos/{owner}/{repo}/environments/{environment_name}/secrets/{secret_name}"
1224
+ ],
1225
+ getEnvironmentVariable: [
1226
+ "GET /repos/{owner}/{repo}/environments/{environment_name}/variables/{name}"
1227
+ ],
1228
+ getGithubActionsDefaultWorkflowPermissionsOrganization: [
1229
+ "GET /orgs/{org}/actions/permissions/workflow"
1230
+ ],
1231
+ getGithubActionsDefaultWorkflowPermissionsRepository: [
1232
+ "GET /repos/{owner}/{repo}/actions/permissions/workflow"
1233
+ ],
1234
+ getGithubActionsPermissionsOrganization: [
1235
+ "GET /orgs/{org}/actions/permissions"
1236
+ ],
1237
+ getGithubActionsPermissionsRepository: [
1238
+ "GET /repos/{owner}/{repo}/actions/permissions"
1239
+ ],
1240
+ getJobForWorkflowRun: ["GET /repos/{owner}/{repo}/actions/jobs/{job_id}"],
1241
+ getOrgPublicKey: ["GET /orgs/{org}/actions/secrets/public-key"],
1242
+ getOrgSecret: ["GET /orgs/{org}/actions/secrets/{secret_name}"],
1243
+ getOrgVariable: ["GET /orgs/{org}/actions/variables/{name}"],
1244
+ getPendingDeploymentsForRun: [
1245
+ "GET /repos/{owner}/{repo}/actions/runs/{run_id}/pending_deployments"
1246
+ ],
1247
+ getRepoPermissions: [
1248
+ "GET /repos/{owner}/{repo}/actions/permissions",
1249
+ {},
1250
+ { renamed: ["actions", "getGithubActionsPermissionsRepository"] }
1251
+ ],
1252
+ getRepoPublicKey: ["GET /repos/{owner}/{repo}/actions/secrets/public-key"],
1253
+ getRepoSecret: ["GET /repos/{owner}/{repo}/actions/secrets/{secret_name}"],
1254
+ getRepoVariable: ["GET /repos/{owner}/{repo}/actions/variables/{name}"],
1255
+ getReviewsForRun: [
1256
+ "GET /repos/{owner}/{repo}/actions/runs/{run_id}/approvals"
1257
+ ],
1258
+ getSelfHostedRunnerForOrg: ["GET /orgs/{org}/actions/runners/{runner_id}"],
1259
+ getSelfHostedRunnerForRepo: [
1260
+ "GET /repos/{owner}/{repo}/actions/runners/{runner_id}"
1261
+ ],
1262
+ getWorkflow: ["GET /repos/{owner}/{repo}/actions/workflows/{workflow_id}"],
1263
+ getWorkflowAccessToRepository: [
1264
+ "GET /repos/{owner}/{repo}/actions/permissions/access"
1265
+ ],
1266
+ getWorkflowRun: ["GET /repos/{owner}/{repo}/actions/runs/{run_id}"],
1267
+ getWorkflowRunAttempt: [
1268
+ "GET /repos/{owner}/{repo}/actions/runs/{run_id}/attempts/{attempt_number}"
1269
+ ],
1270
+ getWorkflowRunUsage: [
1271
+ "GET /repos/{owner}/{repo}/actions/runs/{run_id}/timing"
1272
+ ],
1273
+ getWorkflowUsage: [
1274
+ "GET /repos/{owner}/{repo}/actions/workflows/{workflow_id}/timing"
1275
+ ],
1276
+ listArtifactsForRepo: ["GET /repos/{owner}/{repo}/actions/artifacts"],
1277
+ listEnvironmentSecrets: [
1278
+ "GET /repos/{owner}/{repo}/environments/{environment_name}/secrets"
1279
+ ],
1280
+ listEnvironmentVariables: [
1281
+ "GET /repos/{owner}/{repo}/environments/{environment_name}/variables"
1282
+ ],
1283
+ listJobsForWorkflowRun: [
1284
+ "GET /repos/{owner}/{repo}/actions/runs/{run_id}/jobs"
1285
+ ],
1286
+ listJobsForWorkflowRunAttempt: [
1287
+ "GET /repos/{owner}/{repo}/actions/runs/{run_id}/attempts/{attempt_number}/jobs"
1288
+ ],
1289
+ listLabelsForSelfHostedRunnerForOrg: [
1290
+ "GET /orgs/{org}/actions/runners/{runner_id}/labels"
1291
+ ],
1292
+ listLabelsForSelfHostedRunnerForRepo: [
1293
+ "GET /repos/{owner}/{repo}/actions/runners/{runner_id}/labels"
1294
+ ],
1295
+ listOrgSecrets: ["GET /orgs/{org}/actions/secrets"],
1296
+ listOrgVariables: ["GET /orgs/{org}/actions/variables"],
1297
+ listRepoOrganizationSecrets: [
1298
+ "GET /repos/{owner}/{repo}/actions/organization-secrets"
1299
+ ],
1300
+ listRepoOrganizationVariables: [
1301
+ "GET /repos/{owner}/{repo}/actions/organization-variables"
1302
+ ],
1303
+ listRepoSecrets: ["GET /repos/{owner}/{repo}/actions/secrets"],
1304
+ listRepoVariables: ["GET /repos/{owner}/{repo}/actions/variables"],
1305
+ listRepoWorkflows: ["GET /repos/{owner}/{repo}/actions/workflows"],
1306
+ listRunnerApplicationsForOrg: ["GET /orgs/{org}/actions/runners/downloads"],
1307
+ listRunnerApplicationsForRepo: [
1308
+ "GET /repos/{owner}/{repo}/actions/runners/downloads"
1309
+ ],
1310
+ listSelectedReposForOrgSecret: [
1311
+ "GET /orgs/{org}/actions/secrets/{secret_name}/repositories"
1312
+ ],
1313
+ listSelectedReposForOrgVariable: [
1314
+ "GET /orgs/{org}/actions/variables/{name}/repositories"
1315
+ ],
1316
+ listSelectedRepositoriesEnabledGithubActionsOrganization: [
1317
+ "GET /orgs/{org}/actions/permissions/repositories"
1318
+ ],
1319
+ listSelfHostedRunnersForOrg: ["GET /orgs/{org}/actions/runners"],
1320
+ listSelfHostedRunnersForRepo: ["GET /repos/{owner}/{repo}/actions/runners"],
1321
+ listWorkflowRunArtifacts: [
1322
+ "GET /repos/{owner}/{repo}/actions/runs/{run_id}/artifacts"
1323
+ ],
1324
+ listWorkflowRuns: [
1325
+ "GET /repos/{owner}/{repo}/actions/workflows/{workflow_id}/runs"
1326
+ ],
1327
+ listWorkflowRunsForRepo: ["GET /repos/{owner}/{repo}/actions/runs"],
1328
+ reRunJobForWorkflowRun: [
1329
+ "POST /repos/{owner}/{repo}/actions/jobs/{job_id}/rerun"
1330
+ ],
1331
+ reRunWorkflow: ["POST /repos/{owner}/{repo}/actions/runs/{run_id}/rerun"],
1332
+ reRunWorkflowFailedJobs: [
1333
+ "POST /repos/{owner}/{repo}/actions/runs/{run_id}/rerun-failed-jobs"
1334
+ ],
1335
+ removeAllCustomLabelsFromSelfHostedRunnerForOrg: [
1336
+ "DELETE /orgs/{org}/actions/runners/{runner_id}/labels"
1337
+ ],
1338
+ removeAllCustomLabelsFromSelfHostedRunnerForRepo: [
1339
+ "DELETE /repos/{owner}/{repo}/actions/runners/{runner_id}/labels"
1340
+ ],
1341
+ removeCustomLabelFromSelfHostedRunnerForOrg: [
1342
+ "DELETE /orgs/{org}/actions/runners/{runner_id}/labels/{name}"
1343
+ ],
1344
+ removeCustomLabelFromSelfHostedRunnerForRepo: [
1345
+ "DELETE /repos/{owner}/{repo}/actions/runners/{runner_id}/labels/{name}"
1346
+ ],
1347
+ removeSelectedRepoFromOrgSecret: [
1348
+ "DELETE /orgs/{org}/actions/secrets/{secret_name}/repositories/{repository_id}"
1349
+ ],
1350
+ removeSelectedRepoFromOrgVariable: [
1351
+ "DELETE /orgs/{org}/actions/variables/{name}/repositories/{repository_id}"
1352
+ ],
1353
+ reviewCustomGatesForRun: [
1354
+ "POST /repos/{owner}/{repo}/actions/runs/{run_id}/deployment_protection_rule"
1355
+ ],
1356
+ reviewPendingDeploymentsForRun: [
1357
+ "POST /repos/{owner}/{repo}/actions/runs/{run_id}/pending_deployments"
1358
+ ],
1359
+ setAllowedActionsOrganization: [
1360
+ "PUT /orgs/{org}/actions/permissions/selected-actions"
1361
+ ],
1362
+ setAllowedActionsRepository: [
1363
+ "PUT /repos/{owner}/{repo}/actions/permissions/selected-actions"
1364
+ ],
1365
+ setCustomLabelsForSelfHostedRunnerForOrg: [
1366
+ "PUT /orgs/{org}/actions/runners/{runner_id}/labels"
1367
+ ],
1368
+ setCustomLabelsForSelfHostedRunnerForRepo: [
1369
+ "PUT /repos/{owner}/{repo}/actions/runners/{runner_id}/labels"
1370
+ ],
1371
+ setCustomOidcSubClaimForRepo: [
1372
+ "PUT /repos/{owner}/{repo}/actions/oidc/customization/sub"
1373
+ ],
1374
+ setGithubActionsDefaultWorkflowPermissionsOrganization: [
1375
+ "PUT /orgs/{org}/actions/permissions/workflow"
1376
+ ],
1377
+ setGithubActionsDefaultWorkflowPermissionsRepository: [
1378
+ "PUT /repos/{owner}/{repo}/actions/permissions/workflow"
1379
+ ],
1380
+ setGithubActionsPermissionsOrganization: [
1381
+ "PUT /orgs/{org}/actions/permissions"
1382
+ ],
1383
+ setGithubActionsPermissionsRepository: [
1384
+ "PUT /repos/{owner}/{repo}/actions/permissions"
1385
+ ],
1386
+ setSelectedReposForOrgSecret: [
1387
+ "PUT /orgs/{org}/actions/secrets/{secret_name}/repositories"
1388
+ ],
1389
+ setSelectedReposForOrgVariable: [
1390
+ "PUT /orgs/{org}/actions/variables/{name}/repositories"
1391
+ ],
1392
+ setSelectedRepositoriesEnabledGithubActionsOrganization: [
1393
+ "PUT /orgs/{org}/actions/permissions/repositories"
1394
+ ],
1395
+ setWorkflowAccessToRepository: [
1396
+ "PUT /repos/{owner}/{repo}/actions/permissions/access"
1397
+ ],
1398
+ updateEnvironmentVariable: [
1399
+ "PATCH /repos/{owner}/{repo}/environments/{environment_name}/variables/{name}"
1400
+ ],
1401
+ updateOrgVariable: ["PATCH /orgs/{org}/actions/variables/{name}"],
1402
+ updateRepoVariable: [
1403
+ "PATCH /repos/{owner}/{repo}/actions/variables/{name}"
1404
+ ]
1405
+ },
1406
+ activity: {
1407
+ checkRepoIsStarredByAuthenticatedUser: ["GET /user/starred/{owner}/{repo}"],
1408
+ deleteRepoSubscription: ["DELETE /repos/{owner}/{repo}/subscription"],
1409
+ deleteThreadSubscription: [
1410
+ "DELETE /notifications/threads/{thread_id}/subscription"
1411
+ ],
1412
+ getFeeds: ["GET /feeds"],
1413
+ getRepoSubscription: ["GET /repos/{owner}/{repo}/subscription"],
1414
+ getThread: ["GET /notifications/threads/{thread_id}"],
1415
+ getThreadSubscriptionForAuthenticatedUser: [
1416
+ "GET /notifications/threads/{thread_id}/subscription"
1417
+ ],
1418
+ listEventsForAuthenticatedUser: ["GET /users/{username}/events"],
1419
+ listNotificationsForAuthenticatedUser: ["GET /notifications"],
1420
+ listOrgEventsForAuthenticatedUser: [
1421
+ "GET /users/{username}/events/orgs/{org}"
1422
+ ],
1423
+ listPublicEvents: ["GET /events"],
1424
+ listPublicEventsForRepoNetwork: ["GET /networks/{owner}/{repo}/events"],
1425
+ listPublicEventsForUser: ["GET /users/{username}/events/public"],
1426
+ listPublicOrgEvents: ["GET /orgs/{org}/events"],
1427
+ listReceivedEventsForUser: ["GET /users/{username}/received_events"],
1428
+ listReceivedPublicEventsForUser: [
1429
+ "GET /users/{username}/received_events/public"
1430
+ ],
1431
+ listRepoEvents: ["GET /repos/{owner}/{repo}/events"],
1432
+ listRepoNotificationsForAuthenticatedUser: [
1433
+ "GET /repos/{owner}/{repo}/notifications"
1434
+ ],
1435
+ listReposStarredByAuthenticatedUser: ["GET /user/starred"],
1436
+ listReposStarredByUser: ["GET /users/{username}/starred"],
1437
+ listReposWatchedByUser: ["GET /users/{username}/subscriptions"],
1438
+ listStargazersForRepo: ["GET /repos/{owner}/{repo}/stargazers"],
1439
+ listWatchedReposForAuthenticatedUser: ["GET /user/subscriptions"],
1440
+ listWatchersForRepo: ["GET /repos/{owner}/{repo}/subscribers"],
1441
+ markNotificationsAsRead: ["PUT /notifications"],
1442
+ markRepoNotificationsAsRead: ["PUT /repos/{owner}/{repo}/notifications"],
1443
+ markThreadAsDone: ["DELETE /notifications/threads/{thread_id}"],
1444
+ markThreadAsRead: ["PATCH /notifications/threads/{thread_id}"],
1445
+ setRepoSubscription: ["PUT /repos/{owner}/{repo}/subscription"],
1446
+ setThreadSubscription: [
1447
+ "PUT /notifications/threads/{thread_id}/subscription"
1448
+ ],
1449
+ starRepoForAuthenticatedUser: ["PUT /user/starred/{owner}/{repo}"],
1450
+ unstarRepoForAuthenticatedUser: ["DELETE /user/starred/{owner}/{repo}"]
1451
+ },
1452
+ apps: {
1453
+ addRepoToInstallation: [
1454
+ "PUT /user/installations/{installation_id}/repositories/{repository_id}",
1455
+ {},
1456
+ { renamed: ["apps", "addRepoToInstallationForAuthenticatedUser"] }
1457
+ ],
1458
+ addRepoToInstallationForAuthenticatedUser: [
1459
+ "PUT /user/installations/{installation_id}/repositories/{repository_id}"
1460
+ ],
1461
+ checkToken: ["POST /applications/{client_id}/token"],
1462
+ createFromManifest: ["POST /app-manifests/{code}/conversions"],
1463
+ createInstallationAccessToken: [
1464
+ "POST /app/installations/{installation_id}/access_tokens"
1465
+ ],
1466
+ deleteAuthorization: ["DELETE /applications/{client_id}/grant"],
1467
+ deleteInstallation: ["DELETE /app/installations/{installation_id}"],
1468
+ deleteToken: ["DELETE /applications/{client_id}/token"],
1469
+ getAuthenticated: ["GET /app"],
1470
+ getBySlug: ["GET /apps/{app_slug}"],
1471
+ getInstallation: ["GET /app/installations/{installation_id}"],
1472
+ getOrgInstallation: ["GET /orgs/{org}/installation"],
1473
+ getRepoInstallation: ["GET /repos/{owner}/{repo}/installation"],
1474
+ getSubscriptionPlanForAccount: [
1475
+ "GET /marketplace_listing/accounts/{account_id}"
1476
+ ],
1477
+ getSubscriptionPlanForAccountStubbed: [
1478
+ "GET /marketplace_listing/stubbed/accounts/{account_id}"
1479
+ ],
1480
+ getUserInstallation: ["GET /users/{username}/installation"],
1481
+ getWebhookConfigForApp: ["GET /app/hook/config"],
1482
+ getWebhookDelivery: ["GET /app/hook/deliveries/{delivery_id}"],
1483
+ listAccountsForPlan: ["GET /marketplace_listing/plans/{plan_id}/accounts"],
1484
+ listAccountsForPlanStubbed: [
1485
+ "GET /marketplace_listing/stubbed/plans/{plan_id}/accounts"
1486
+ ],
1487
+ listInstallationReposForAuthenticatedUser: [
1488
+ "GET /user/installations/{installation_id}/repositories"
1489
+ ],
1490
+ listInstallationRequestsForAuthenticatedApp: [
1491
+ "GET /app/installation-requests"
1492
+ ],
1493
+ listInstallations: ["GET /app/installations"],
1494
+ listInstallationsForAuthenticatedUser: ["GET /user/installations"],
1495
+ listPlans: ["GET /marketplace_listing/plans"],
1496
+ listPlansStubbed: ["GET /marketplace_listing/stubbed/plans"],
1497
+ listReposAccessibleToInstallation: ["GET /installation/repositories"],
1498
+ listSubscriptionsForAuthenticatedUser: ["GET /user/marketplace_purchases"],
1499
+ listSubscriptionsForAuthenticatedUserStubbed: [
1500
+ "GET /user/marketplace_purchases/stubbed"
1501
+ ],
1502
+ listWebhookDeliveries: ["GET /app/hook/deliveries"],
1503
+ redeliverWebhookDelivery: [
1504
+ "POST /app/hook/deliveries/{delivery_id}/attempts"
1505
+ ],
1506
+ removeRepoFromInstallation: [
1507
+ "DELETE /user/installations/{installation_id}/repositories/{repository_id}",
1508
+ {},
1509
+ { renamed: ["apps", "removeRepoFromInstallationForAuthenticatedUser"] }
1510
+ ],
1511
+ removeRepoFromInstallationForAuthenticatedUser: [
1512
+ "DELETE /user/installations/{installation_id}/repositories/{repository_id}"
1513
+ ],
1514
+ resetToken: ["PATCH /applications/{client_id}/token"],
1515
+ revokeInstallationAccessToken: ["DELETE /installation/token"],
1516
+ scopeToken: ["POST /applications/{client_id}/token/scoped"],
1517
+ suspendInstallation: ["PUT /app/installations/{installation_id}/suspended"],
1518
+ unsuspendInstallation: [
1519
+ "DELETE /app/installations/{installation_id}/suspended"
1520
+ ],
1521
+ updateWebhookConfigForApp: ["PATCH /app/hook/config"]
1522
+ },
1523
+ billing: {
1524
+ getGithubActionsBillingOrg: ["GET /orgs/{org}/settings/billing/actions"],
1525
+ getGithubActionsBillingUser: [
1526
+ "GET /users/{username}/settings/billing/actions"
1527
+ ],
1528
+ getGithubPackagesBillingOrg: ["GET /orgs/{org}/settings/billing/packages"],
1529
+ getGithubPackagesBillingUser: [
1530
+ "GET /users/{username}/settings/billing/packages"
1531
+ ],
1532
+ getSharedStorageBillingOrg: [
1533
+ "GET /orgs/{org}/settings/billing/shared-storage"
1534
+ ],
1535
+ getSharedStorageBillingUser: [
1536
+ "GET /users/{username}/settings/billing/shared-storage"
1537
+ ]
1538
+ },
1539
+ checks: {
1540
+ create: ["POST /repos/{owner}/{repo}/check-runs"],
1541
+ createSuite: ["POST /repos/{owner}/{repo}/check-suites"],
1542
+ get: ["GET /repos/{owner}/{repo}/check-runs/{check_run_id}"],
1543
+ getSuite: ["GET /repos/{owner}/{repo}/check-suites/{check_suite_id}"],
1544
+ listAnnotations: [
1545
+ "GET /repos/{owner}/{repo}/check-runs/{check_run_id}/annotations"
1546
+ ],
1547
+ listForRef: ["GET /repos/{owner}/{repo}/commits/{ref}/check-runs"],
1548
+ listForSuite: [
1549
+ "GET /repos/{owner}/{repo}/check-suites/{check_suite_id}/check-runs"
1550
+ ],
1551
+ listSuitesForRef: ["GET /repos/{owner}/{repo}/commits/{ref}/check-suites"],
1552
+ rerequestRun: [
1553
+ "POST /repos/{owner}/{repo}/check-runs/{check_run_id}/rerequest"
1554
+ ],
1555
+ rerequestSuite: [
1556
+ "POST /repos/{owner}/{repo}/check-suites/{check_suite_id}/rerequest"
1557
+ ],
1558
+ setSuitesPreferences: [
1559
+ "PATCH /repos/{owner}/{repo}/check-suites/preferences"
1560
+ ],
1561
+ update: ["PATCH /repos/{owner}/{repo}/check-runs/{check_run_id}"]
1562
+ },
1563
+ codeScanning: {
1564
+ deleteAnalysis: [
1565
+ "DELETE /repos/{owner}/{repo}/code-scanning/analyses/{analysis_id}{?confirm_delete}"
1566
+ ],
1567
+ getAlert: [
1568
+ "GET /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}",
1569
+ {},
1570
+ { renamedParameters: { alert_id: "alert_number" } }
1571
+ ],
1572
+ getAnalysis: [
1573
+ "GET /repos/{owner}/{repo}/code-scanning/analyses/{analysis_id}"
1574
+ ],
1575
+ getCodeqlDatabase: [
1576
+ "GET /repos/{owner}/{repo}/code-scanning/codeql/databases/{language}"
1577
+ ],
1578
+ getDefaultSetup: ["GET /repos/{owner}/{repo}/code-scanning/default-setup"],
1579
+ getSarif: ["GET /repos/{owner}/{repo}/code-scanning/sarifs/{sarif_id}"],
1580
+ listAlertInstances: [
1581
+ "GET /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}/instances"
1582
+ ],
1583
+ listAlertsForOrg: ["GET /orgs/{org}/code-scanning/alerts"],
1584
+ listAlertsForRepo: ["GET /repos/{owner}/{repo}/code-scanning/alerts"],
1585
+ listAlertsInstances: [
1586
+ "GET /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}/instances",
1587
+ {},
1588
+ { renamed: ["codeScanning", "listAlertInstances"] }
1589
+ ],
1590
+ listCodeqlDatabases: [
1591
+ "GET /repos/{owner}/{repo}/code-scanning/codeql/databases"
1592
+ ],
1593
+ listRecentAnalyses: ["GET /repos/{owner}/{repo}/code-scanning/analyses"],
1594
+ updateAlert: [
1595
+ "PATCH /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}"
1596
+ ],
1597
+ updateDefaultSetup: [
1598
+ "PATCH /repos/{owner}/{repo}/code-scanning/default-setup"
1599
+ ],
1600
+ uploadSarif: ["POST /repos/{owner}/{repo}/code-scanning/sarifs"]
1601
+ },
1602
+ codesOfConduct: {
1603
+ getAllCodesOfConduct: ["GET /codes_of_conduct"],
1604
+ getConductCode: ["GET /codes_of_conduct/{key}"]
1605
+ },
1606
+ codespaces: {
1607
+ addRepositoryForSecretForAuthenticatedUser: [
1608
+ "PUT /user/codespaces/secrets/{secret_name}/repositories/{repository_id}"
1609
+ ],
1610
+ addSelectedRepoToOrgSecret: [
1611
+ "PUT /orgs/{org}/codespaces/secrets/{secret_name}/repositories/{repository_id}"
1612
+ ],
1613
+ checkPermissionsForDevcontainer: [
1614
+ "GET /repos/{owner}/{repo}/codespaces/permissions_check"
1615
+ ],
1616
+ codespaceMachinesForAuthenticatedUser: [
1617
+ "GET /user/codespaces/{codespace_name}/machines"
1618
+ ],
1619
+ createForAuthenticatedUser: ["POST /user/codespaces"],
1620
+ createOrUpdateOrgSecret: [
1621
+ "PUT /orgs/{org}/codespaces/secrets/{secret_name}"
1622
+ ],
1623
+ createOrUpdateRepoSecret: [
1624
+ "PUT /repos/{owner}/{repo}/codespaces/secrets/{secret_name}"
1625
+ ],
1626
+ createOrUpdateSecretForAuthenticatedUser: [
1627
+ "PUT /user/codespaces/secrets/{secret_name}"
1628
+ ],
1629
+ createWithPrForAuthenticatedUser: [
1630
+ "POST /repos/{owner}/{repo}/pulls/{pull_number}/codespaces"
1631
+ ],
1632
+ createWithRepoForAuthenticatedUser: [
1633
+ "POST /repos/{owner}/{repo}/codespaces"
1634
+ ],
1635
+ deleteForAuthenticatedUser: ["DELETE /user/codespaces/{codespace_name}"],
1636
+ deleteFromOrganization: [
1637
+ "DELETE /orgs/{org}/members/{username}/codespaces/{codespace_name}"
1638
+ ],
1639
+ deleteOrgSecret: ["DELETE /orgs/{org}/codespaces/secrets/{secret_name}"],
1640
+ deleteRepoSecret: [
1641
+ "DELETE /repos/{owner}/{repo}/codespaces/secrets/{secret_name}"
1642
+ ],
1643
+ deleteSecretForAuthenticatedUser: [
1644
+ "DELETE /user/codespaces/secrets/{secret_name}"
1645
+ ],
1646
+ exportForAuthenticatedUser: [
1647
+ "POST /user/codespaces/{codespace_name}/exports"
1648
+ ],
1649
+ getCodespacesForUserInOrg: [
1650
+ "GET /orgs/{org}/members/{username}/codespaces"
1651
+ ],
1652
+ getExportDetailsForAuthenticatedUser: [
1653
+ "GET /user/codespaces/{codespace_name}/exports/{export_id}"
1654
+ ],
1655
+ getForAuthenticatedUser: ["GET /user/codespaces/{codespace_name}"],
1656
+ getOrgPublicKey: ["GET /orgs/{org}/codespaces/secrets/public-key"],
1657
+ getOrgSecret: ["GET /orgs/{org}/codespaces/secrets/{secret_name}"],
1658
+ getPublicKeyForAuthenticatedUser: [
1659
+ "GET /user/codespaces/secrets/public-key"
1660
+ ],
1661
+ getRepoPublicKey: [
1662
+ "GET /repos/{owner}/{repo}/codespaces/secrets/public-key"
1663
+ ],
1664
+ getRepoSecret: [
1665
+ "GET /repos/{owner}/{repo}/codespaces/secrets/{secret_name}"
1666
+ ],
1667
+ getSecretForAuthenticatedUser: [
1668
+ "GET /user/codespaces/secrets/{secret_name}"
1669
+ ],
1670
+ listDevcontainersInRepositoryForAuthenticatedUser: [
1671
+ "GET /repos/{owner}/{repo}/codespaces/devcontainers"
1672
+ ],
1673
+ listForAuthenticatedUser: ["GET /user/codespaces"],
1674
+ listInOrganization: [
1675
+ "GET /orgs/{org}/codespaces",
1676
+ {},
1677
+ { renamedParameters: { org_id: "org" } }
1678
+ ],
1679
+ listInRepositoryForAuthenticatedUser: [
1680
+ "GET /repos/{owner}/{repo}/codespaces"
1681
+ ],
1682
+ listOrgSecrets: ["GET /orgs/{org}/codespaces/secrets"],
1683
+ listRepoSecrets: ["GET /repos/{owner}/{repo}/codespaces/secrets"],
1684
+ listRepositoriesForSecretForAuthenticatedUser: [
1685
+ "GET /user/codespaces/secrets/{secret_name}/repositories"
1686
+ ],
1687
+ listSecretsForAuthenticatedUser: ["GET /user/codespaces/secrets"],
1688
+ listSelectedReposForOrgSecret: [
1689
+ "GET /orgs/{org}/codespaces/secrets/{secret_name}/repositories"
1690
+ ],
1691
+ preFlightWithRepoForAuthenticatedUser: [
1692
+ "GET /repos/{owner}/{repo}/codespaces/new"
1693
+ ],
1694
+ publishForAuthenticatedUser: [
1695
+ "POST /user/codespaces/{codespace_name}/publish"
1696
+ ],
1697
+ removeRepositoryForSecretForAuthenticatedUser: [
1698
+ "DELETE /user/codespaces/secrets/{secret_name}/repositories/{repository_id}"
1699
+ ],
1700
+ removeSelectedRepoFromOrgSecret: [
1701
+ "DELETE /orgs/{org}/codespaces/secrets/{secret_name}/repositories/{repository_id}"
1702
+ ],
1703
+ repoMachinesForAuthenticatedUser: [
1704
+ "GET /repos/{owner}/{repo}/codespaces/machines"
1705
+ ],
1706
+ setRepositoriesForSecretForAuthenticatedUser: [
1707
+ "PUT /user/codespaces/secrets/{secret_name}/repositories"
1708
+ ],
1709
+ setSelectedReposForOrgSecret: [
1710
+ "PUT /orgs/{org}/codespaces/secrets/{secret_name}/repositories"
1711
+ ],
1712
+ startForAuthenticatedUser: ["POST /user/codespaces/{codespace_name}/start"],
1713
+ stopForAuthenticatedUser: ["POST /user/codespaces/{codespace_name}/stop"],
1714
+ stopInOrganization: [
1715
+ "POST /orgs/{org}/members/{username}/codespaces/{codespace_name}/stop"
1716
+ ],
1717
+ updateForAuthenticatedUser: ["PATCH /user/codespaces/{codespace_name}"]
1718
+ },
1719
+ copilot: {
1720
+ addCopilotSeatsForTeams: [
1721
+ "POST /orgs/{org}/copilot/billing/selected_teams"
1722
+ ],
1723
+ addCopilotSeatsForUsers: [
1724
+ "POST /orgs/{org}/copilot/billing/selected_users"
1725
+ ],
1726
+ cancelCopilotSeatAssignmentForTeams: [
1727
+ "DELETE /orgs/{org}/copilot/billing/selected_teams"
1728
+ ],
1729
+ cancelCopilotSeatAssignmentForUsers: [
1730
+ "DELETE /orgs/{org}/copilot/billing/selected_users"
1731
+ ],
1732
+ getCopilotOrganizationDetails: ["GET /orgs/{org}/copilot/billing"],
1733
+ getCopilotSeatDetailsForUser: [
1734
+ "GET /orgs/{org}/members/{username}/copilot"
1735
+ ],
1736
+ listCopilotSeats: ["GET /orgs/{org}/copilot/billing/seats"],
1737
+ usageMetricsForEnterprise: ["GET /enterprises/{enterprise}/copilot/usage"],
1738
+ usageMetricsForOrg: ["GET /orgs/{org}/copilot/usage"],
1739
+ usageMetricsForTeam: ["GET /orgs/{org}/team/{team_slug}/copilot/usage"]
1740
+ },
1741
+ dependabot: {
1742
+ addSelectedRepoToOrgSecret: [
1743
+ "PUT /orgs/{org}/dependabot/secrets/{secret_name}/repositories/{repository_id}"
1744
+ ],
1745
+ createOrUpdateOrgSecret: [
1746
+ "PUT /orgs/{org}/dependabot/secrets/{secret_name}"
1747
+ ],
1748
+ createOrUpdateRepoSecret: [
1749
+ "PUT /repos/{owner}/{repo}/dependabot/secrets/{secret_name}"
1750
+ ],
1751
+ deleteOrgSecret: ["DELETE /orgs/{org}/dependabot/secrets/{secret_name}"],
1752
+ deleteRepoSecret: [
1753
+ "DELETE /repos/{owner}/{repo}/dependabot/secrets/{secret_name}"
1754
+ ],
1755
+ getAlert: ["GET /repos/{owner}/{repo}/dependabot/alerts/{alert_number}"],
1756
+ getOrgPublicKey: ["GET /orgs/{org}/dependabot/secrets/public-key"],
1757
+ getOrgSecret: ["GET /orgs/{org}/dependabot/secrets/{secret_name}"],
1758
+ getRepoPublicKey: [
1759
+ "GET /repos/{owner}/{repo}/dependabot/secrets/public-key"
1760
+ ],
1761
+ getRepoSecret: [
1762
+ "GET /repos/{owner}/{repo}/dependabot/secrets/{secret_name}"
1763
+ ],
1764
+ listAlertsForEnterprise: [
1765
+ "GET /enterprises/{enterprise}/dependabot/alerts"
1766
+ ],
1767
+ listAlertsForOrg: ["GET /orgs/{org}/dependabot/alerts"],
1768
+ listAlertsForRepo: ["GET /repos/{owner}/{repo}/dependabot/alerts"],
1769
+ listOrgSecrets: ["GET /orgs/{org}/dependabot/secrets"],
1770
+ listRepoSecrets: ["GET /repos/{owner}/{repo}/dependabot/secrets"],
1771
+ listSelectedReposForOrgSecret: [
1772
+ "GET /orgs/{org}/dependabot/secrets/{secret_name}/repositories"
1773
+ ],
1774
+ removeSelectedRepoFromOrgSecret: [
1775
+ "DELETE /orgs/{org}/dependabot/secrets/{secret_name}/repositories/{repository_id}"
1776
+ ],
1777
+ setSelectedReposForOrgSecret: [
1778
+ "PUT /orgs/{org}/dependabot/secrets/{secret_name}/repositories"
1779
+ ],
1780
+ updateAlert: [
1781
+ "PATCH /repos/{owner}/{repo}/dependabot/alerts/{alert_number}"
1782
+ ]
1783
+ },
1784
+ dependencyGraph: {
1785
+ createRepositorySnapshot: [
1786
+ "POST /repos/{owner}/{repo}/dependency-graph/snapshots"
1787
+ ],
1788
+ diffRange: [
1789
+ "GET /repos/{owner}/{repo}/dependency-graph/compare/{basehead}"
1790
+ ],
1791
+ exportSbom: ["GET /repos/{owner}/{repo}/dependency-graph/sbom"]
1792
+ },
1793
+ emojis: { get: ["GET /emojis"] },
1794
+ gists: {
1795
+ checkIsStarred: ["GET /gists/{gist_id}/star"],
1796
+ create: ["POST /gists"],
1797
+ createComment: ["POST /gists/{gist_id}/comments"],
1798
+ delete: ["DELETE /gists/{gist_id}"],
1799
+ deleteComment: ["DELETE /gists/{gist_id}/comments/{comment_id}"],
1800
+ fork: ["POST /gists/{gist_id}/forks"],
1801
+ get: ["GET /gists/{gist_id}"],
1802
+ getComment: ["GET /gists/{gist_id}/comments/{comment_id}"],
1803
+ getRevision: ["GET /gists/{gist_id}/{sha}"],
1804
+ list: ["GET /gists"],
1805
+ listComments: ["GET /gists/{gist_id}/comments"],
1806
+ listCommits: ["GET /gists/{gist_id}/commits"],
1807
+ listForUser: ["GET /users/{username}/gists"],
1808
+ listForks: ["GET /gists/{gist_id}/forks"],
1809
+ listPublic: ["GET /gists/public"],
1810
+ listStarred: ["GET /gists/starred"],
1811
+ star: ["PUT /gists/{gist_id}/star"],
1812
+ unstar: ["DELETE /gists/{gist_id}/star"],
1813
+ update: ["PATCH /gists/{gist_id}"],
1814
+ updateComment: ["PATCH /gists/{gist_id}/comments/{comment_id}"]
1815
+ },
1816
+ git: {
1817
+ createBlob: ["POST /repos/{owner}/{repo}/git/blobs"],
1818
+ createCommit: ["POST /repos/{owner}/{repo}/git/commits"],
1819
+ createRef: ["POST /repos/{owner}/{repo}/git/refs"],
1820
+ createTag: ["POST /repos/{owner}/{repo}/git/tags"],
1821
+ createTree: ["POST /repos/{owner}/{repo}/git/trees"],
1822
+ deleteRef: ["DELETE /repos/{owner}/{repo}/git/refs/{ref}"],
1823
+ getBlob: ["GET /repos/{owner}/{repo}/git/blobs/{file_sha}"],
1824
+ getCommit: ["GET /repos/{owner}/{repo}/git/commits/{commit_sha}"],
1825
+ getRef: ["GET /repos/{owner}/{repo}/git/ref/{ref}"],
1826
+ getTag: ["GET /repos/{owner}/{repo}/git/tags/{tag_sha}"],
1827
+ getTree: ["GET /repos/{owner}/{repo}/git/trees/{tree_sha}"],
1828
+ listMatchingRefs: ["GET /repos/{owner}/{repo}/git/matching-refs/{ref}"],
1829
+ updateRef: ["PATCH /repos/{owner}/{repo}/git/refs/{ref}"]
1830
+ },
1831
+ gitignore: {
1832
+ getAllTemplates: ["GET /gitignore/templates"],
1833
+ getTemplate: ["GET /gitignore/templates/{name}"]
1834
+ },
1835
+ interactions: {
1836
+ getRestrictionsForAuthenticatedUser: ["GET /user/interaction-limits"],
1837
+ getRestrictionsForOrg: ["GET /orgs/{org}/interaction-limits"],
1838
+ getRestrictionsForRepo: ["GET /repos/{owner}/{repo}/interaction-limits"],
1839
+ getRestrictionsForYourPublicRepos: [
1840
+ "GET /user/interaction-limits",
1841
+ {},
1842
+ { renamed: ["interactions", "getRestrictionsForAuthenticatedUser"] }
1843
+ ],
1844
+ removeRestrictionsForAuthenticatedUser: ["DELETE /user/interaction-limits"],
1845
+ removeRestrictionsForOrg: ["DELETE /orgs/{org}/interaction-limits"],
1846
+ removeRestrictionsForRepo: [
1847
+ "DELETE /repos/{owner}/{repo}/interaction-limits"
1848
+ ],
1849
+ removeRestrictionsForYourPublicRepos: [
1850
+ "DELETE /user/interaction-limits",
1851
+ {},
1852
+ { renamed: ["interactions", "removeRestrictionsForAuthenticatedUser"] }
1853
+ ],
1854
+ setRestrictionsForAuthenticatedUser: ["PUT /user/interaction-limits"],
1855
+ setRestrictionsForOrg: ["PUT /orgs/{org}/interaction-limits"],
1856
+ setRestrictionsForRepo: ["PUT /repos/{owner}/{repo}/interaction-limits"],
1857
+ setRestrictionsForYourPublicRepos: [
1858
+ "PUT /user/interaction-limits",
1859
+ {},
1860
+ { renamed: ["interactions", "setRestrictionsForAuthenticatedUser"] }
1861
+ ]
1862
+ },
1863
+ issues: {
1864
+ addAssignees: [
1865
+ "POST /repos/{owner}/{repo}/issues/{issue_number}/assignees"
1866
+ ],
1867
+ addLabels: ["POST /repos/{owner}/{repo}/issues/{issue_number}/labels"],
1868
+ checkUserCanBeAssigned: ["GET /repos/{owner}/{repo}/assignees/{assignee}"],
1869
+ checkUserCanBeAssignedToIssue: [
1870
+ "GET /repos/{owner}/{repo}/issues/{issue_number}/assignees/{assignee}"
1871
+ ],
1872
+ create: ["POST /repos/{owner}/{repo}/issues"],
1873
+ createComment: [
1874
+ "POST /repos/{owner}/{repo}/issues/{issue_number}/comments"
1875
+ ],
1876
+ createLabel: ["POST /repos/{owner}/{repo}/labels"],
1877
+ createMilestone: ["POST /repos/{owner}/{repo}/milestones"],
1878
+ deleteComment: [
1879
+ "DELETE /repos/{owner}/{repo}/issues/comments/{comment_id}"
1880
+ ],
1881
+ deleteLabel: ["DELETE /repos/{owner}/{repo}/labels/{name}"],
1882
+ deleteMilestone: [
1883
+ "DELETE /repos/{owner}/{repo}/milestones/{milestone_number}"
1884
+ ],
1885
+ get: ["GET /repos/{owner}/{repo}/issues/{issue_number}"],
1886
+ getComment: ["GET /repos/{owner}/{repo}/issues/comments/{comment_id}"],
1887
+ getEvent: ["GET /repos/{owner}/{repo}/issues/events/{event_id}"],
1888
+ getLabel: ["GET /repos/{owner}/{repo}/labels/{name}"],
1889
+ getMilestone: ["GET /repos/{owner}/{repo}/milestones/{milestone_number}"],
1890
+ list: ["GET /issues"],
1891
+ listAssignees: ["GET /repos/{owner}/{repo}/assignees"],
1892
+ listComments: ["GET /repos/{owner}/{repo}/issues/{issue_number}/comments"],
1893
+ listCommentsForRepo: ["GET /repos/{owner}/{repo}/issues/comments"],
1894
+ listEvents: ["GET /repos/{owner}/{repo}/issues/{issue_number}/events"],
1895
+ listEventsForRepo: ["GET /repos/{owner}/{repo}/issues/events"],
1896
+ listEventsForTimeline: [
1897
+ "GET /repos/{owner}/{repo}/issues/{issue_number}/timeline"
1898
+ ],
1899
+ listForAuthenticatedUser: ["GET /user/issues"],
1900
+ listForOrg: ["GET /orgs/{org}/issues"],
1901
+ listForRepo: ["GET /repos/{owner}/{repo}/issues"],
1902
+ listLabelsForMilestone: [
1903
+ "GET /repos/{owner}/{repo}/milestones/{milestone_number}/labels"
1904
+ ],
1905
+ listLabelsForRepo: ["GET /repos/{owner}/{repo}/labels"],
1906
+ listLabelsOnIssue: [
1907
+ "GET /repos/{owner}/{repo}/issues/{issue_number}/labels"
1908
+ ],
1909
+ listMilestones: ["GET /repos/{owner}/{repo}/milestones"],
1910
+ lock: ["PUT /repos/{owner}/{repo}/issues/{issue_number}/lock"],
1911
+ removeAllLabels: [
1912
+ "DELETE /repos/{owner}/{repo}/issues/{issue_number}/labels"
1913
+ ],
1914
+ removeAssignees: [
1915
+ "DELETE /repos/{owner}/{repo}/issues/{issue_number}/assignees"
1916
+ ],
1917
+ removeLabel: [
1918
+ "DELETE /repos/{owner}/{repo}/issues/{issue_number}/labels/{name}"
1919
+ ],
1920
+ setLabels: ["PUT /repos/{owner}/{repo}/issues/{issue_number}/labels"],
1921
+ unlock: ["DELETE /repos/{owner}/{repo}/issues/{issue_number}/lock"],
1922
+ update: ["PATCH /repos/{owner}/{repo}/issues/{issue_number}"],
1923
+ updateComment: ["PATCH /repos/{owner}/{repo}/issues/comments/{comment_id}"],
1924
+ updateLabel: ["PATCH /repos/{owner}/{repo}/labels/{name}"],
1925
+ updateMilestone: [
1926
+ "PATCH /repos/{owner}/{repo}/milestones/{milestone_number}"
1927
+ ]
1928
+ },
1929
+ licenses: {
1930
+ get: ["GET /licenses/{license}"],
1931
+ getAllCommonlyUsed: ["GET /licenses"],
1932
+ getForRepo: ["GET /repos/{owner}/{repo}/license"]
1933
+ },
1934
+ markdown: {
1935
+ render: ["POST /markdown"],
1936
+ renderRaw: [
1937
+ "POST /markdown/raw",
1938
+ { headers: { "content-type": "text/plain; charset=utf-8" } }
1939
+ ]
1940
+ },
1941
+ meta: {
1942
+ get: ["GET /meta"],
1943
+ getAllVersions: ["GET /versions"],
1944
+ getOctocat: ["GET /octocat"],
1945
+ getZen: ["GET /zen"],
1946
+ root: ["GET /"]
1947
+ },
1948
+ migrations: {
1949
+ deleteArchiveForAuthenticatedUser: [
1950
+ "DELETE /user/migrations/{migration_id}/archive"
1951
+ ],
1952
+ deleteArchiveForOrg: [
1953
+ "DELETE /orgs/{org}/migrations/{migration_id}/archive"
1954
+ ],
1955
+ downloadArchiveForOrg: [
1956
+ "GET /orgs/{org}/migrations/{migration_id}/archive"
1957
+ ],
1958
+ getArchiveForAuthenticatedUser: [
1959
+ "GET /user/migrations/{migration_id}/archive"
1960
+ ],
1961
+ getStatusForAuthenticatedUser: ["GET /user/migrations/{migration_id}"],
1962
+ getStatusForOrg: ["GET /orgs/{org}/migrations/{migration_id}"],
1963
+ listForAuthenticatedUser: ["GET /user/migrations"],
1964
+ listForOrg: ["GET /orgs/{org}/migrations"],
1965
+ listReposForAuthenticatedUser: [
1966
+ "GET /user/migrations/{migration_id}/repositories"
1967
+ ],
1968
+ listReposForOrg: ["GET /orgs/{org}/migrations/{migration_id}/repositories"],
1969
+ listReposForUser: [
1970
+ "GET /user/migrations/{migration_id}/repositories",
1971
+ {},
1972
+ { renamed: ["migrations", "listReposForAuthenticatedUser"] }
1973
+ ],
1974
+ startForAuthenticatedUser: ["POST /user/migrations"],
1975
+ startForOrg: ["POST /orgs/{org}/migrations"],
1976
+ unlockRepoForAuthenticatedUser: [
1977
+ "DELETE /user/migrations/{migration_id}/repos/{repo_name}/lock"
1978
+ ],
1979
+ unlockRepoForOrg: [
1980
+ "DELETE /orgs/{org}/migrations/{migration_id}/repos/{repo_name}/lock"
1981
+ ]
1982
+ },
1983
+ oidc: {
1984
+ getOidcCustomSubTemplateForOrg: [
1985
+ "GET /orgs/{org}/actions/oidc/customization/sub"
1986
+ ],
1987
+ updateOidcCustomSubTemplateForOrg: [
1988
+ "PUT /orgs/{org}/actions/oidc/customization/sub"
1989
+ ]
1990
+ },
1991
+ orgs: {
1992
+ addSecurityManagerTeam: [
1993
+ "PUT /orgs/{org}/security-managers/teams/{team_slug}"
1994
+ ],
1995
+ assignTeamToOrgRole: [
1996
+ "PUT /orgs/{org}/organization-roles/teams/{team_slug}/{role_id}"
1997
+ ],
1998
+ assignUserToOrgRole: [
1999
+ "PUT /orgs/{org}/organization-roles/users/{username}/{role_id}"
2000
+ ],
2001
+ blockUser: ["PUT /orgs/{org}/blocks/{username}"],
2002
+ cancelInvitation: ["DELETE /orgs/{org}/invitations/{invitation_id}"],
2003
+ checkBlockedUser: ["GET /orgs/{org}/blocks/{username}"],
2004
+ checkMembershipForUser: ["GET /orgs/{org}/members/{username}"],
2005
+ checkPublicMembershipForUser: ["GET /orgs/{org}/public_members/{username}"],
2006
+ convertMemberToOutsideCollaborator: [
2007
+ "PUT /orgs/{org}/outside_collaborators/{username}"
2008
+ ],
2009
+ createCustomOrganizationRole: ["POST /orgs/{org}/organization-roles"],
2010
+ createInvitation: ["POST /orgs/{org}/invitations"],
2011
+ createOrUpdateCustomProperties: ["PATCH /orgs/{org}/properties/schema"],
2012
+ createOrUpdateCustomPropertiesValuesForRepos: [
2013
+ "PATCH /orgs/{org}/properties/values"
2014
+ ],
2015
+ createOrUpdateCustomProperty: [
2016
+ "PUT /orgs/{org}/properties/schema/{custom_property_name}"
2017
+ ],
2018
+ createWebhook: ["POST /orgs/{org}/hooks"],
2019
+ delete: ["DELETE /orgs/{org}"],
2020
+ deleteCustomOrganizationRole: [
2021
+ "DELETE /orgs/{org}/organization-roles/{role_id}"
2022
+ ],
2023
+ deleteWebhook: ["DELETE /orgs/{org}/hooks/{hook_id}"],
2024
+ enableOrDisableSecurityProductOnAllOrgRepos: [
2025
+ "POST /orgs/{org}/{security_product}/{enablement}"
2026
+ ],
2027
+ get: ["GET /orgs/{org}"],
2028
+ getAllCustomProperties: ["GET /orgs/{org}/properties/schema"],
2029
+ getCustomProperty: [
2030
+ "GET /orgs/{org}/properties/schema/{custom_property_name}"
2031
+ ],
2032
+ getMembershipForAuthenticatedUser: ["GET /user/memberships/orgs/{org}"],
2033
+ getMembershipForUser: ["GET /orgs/{org}/memberships/{username}"],
2034
+ getOrgRole: ["GET /orgs/{org}/organization-roles/{role_id}"],
2035
+ getWebhook: ["GET /orgs/{org}/hooks/{hook_id}"],
2036
+ getWebhookConfigForOrg: ["GET /orgs/{org}/hooks/{hook_id}/config"],
2037
+ getWebhookDelivery: [
2038
+ "GET /orgs/{org}/hooks/{hook_id}/deliveries/{delivery_id}"
2039
+ ],
2040
+ list: ["GET /organizations"],
2041
+ listAppInstallations: ["GET /orgs/{org}/installations"],
2042
+ listBlockedUsers: ["GET /orgs/{org}/blocks"],
2043
+ listCustomPropertiesValuesForRepos: ["GET /orgs/{org}/properties/values"],
2044
+ listFailedInvitations: ["GET /orgs/{org}/failed_invitations"],
2045
+ listForAuthenticatedUser: ["GET /user/orgs"],
2046
+ listForUser: ["GET /users/{username}/orgs"],
2047
+ listInvitationTeams: ["GET /orgs/{org}/invitations/{invitation_id}/teams"],
2048
+ listMembers: ["GET /orgs/{org}/members"],
2049
+ listMembershipsForAuthenticatedUser: ["GET /user/memberships/orgs"],
2050
+ listOrgRoleTeams: ["GET /orgs/{org}/organization-roles/{role_id}/teams"],
2051
+ listOrgRoleUsers: ["GET /orgs/{org}/organization-roles/{role_id}/users"],
2052
+ listOrgRoles: ["GET /orgs/{org}/organization-roles"],
2053
+ listOrganizationFineGrainedPermissions: [
2054
+ "GET /orgs/{org}/organization-fine-grained-permissions"
2055
+ ],
2056
+ listOutsideCollaborators: ["GET /orgs/{org}/outside_collaborators"],
2057
+ listPatGrantRepositories: [
2058
+ "GET /orgs/{org}/personal-access-tokens/{pat_id}/repositories"
2059
+ ],
2060
+ listPatGrantRequestRepositories: [
2061
+ "GET /orgs/{org}/personal-access-token-requests/{pat_request_id}/repositories"
2062
+ ],
2063
+ listPatGrantRequests: ["GET /orgs/{org}/personal-access-token-requests"],
2064
+ listPatGrants: ["GET /orgs/{org}/personal-access-tokens"],
2065
+ listPendingInvitations: ["GET /orgs/{org}/invitations"],
2066
+ listPublicMembers: ["GET /orgs/{org}/public_members"],
2067
+ listSecurityManagerTeams: ["GET /orgs/{org}/security-managers"],
2068
+ listWebhookDeliveries: ["GET /orgs/{org}/hooks/{hook_id}/deliveries"],
2069
+ listWebhooks: ["GET /orgs/{org}/hooks"],
2070
+ patchCustomOrganizationRole: [
2071
+ "PATCH /orgs/{org}/organization-roles/{role_id}"
2072
+ ],
2073
+ pingWebhook: ["POST /orgs/{org}/hooks/{hook_id}/pings"],
2074
+ redeliverWebhookDelivery: [
2075
+ "POST /orgs/{org}/hooks/{hook_id}/deliveries/{delivery_id}/attempts"
2076
+ ],
2077
+ removeCustomProperty: [
2078
+ "DELETE /orgs/{org}/properties/schema/{custom_property_name}"
2079
+ ],
2080
+ removeMember: ["DELETE /orgs/{org}/members/{username}"],
2081
+ removeMembershipForUser: ["DELETE /orgs/{org}/memberships/{username}"],
2082
+ removeOutsideCollaborator: [
2083
+ "DELETE /orgs/{org}/outside_collaborators/{username}"
2084
+ ],
2085
+ removePublicMembershipForAuthenticatedUser: [
2086
+ "DELETE /orgs/{org}/public_members/{username}"
2087
+ ],
2088
+ removeSecurityManagerTeam: [
2089
+ "DELETE /orgs/{org}/security-managers/teams/{team_slug}"
2090
+ ],
2091
+ reviewPatGrantRequest: [
2092
+ "POST /orgs/{org}/personal-access-token-requests/{pat_request_id}"
2093
+ ],
2094
+ reviewPatGrantRequestsInBulk: [
2095
+ "POST /orgs/{org}/personal-access-token-requests"
2096
+ ],
2097
+ revokeAllOrgRolesTeam: [
2098
+ "DELETE /orgs/{org}/organization-roles/teams/{team_slug}"
2099
+ ],
2100
+ revokeAllOrgRolesUser: [
2101
+ "DELETE /orgs/{org}/organization-roles/users/{username}"
2102
+ ],
2103
+ revokeOrgRoleTeam: [
2104
+ "DELETE /orgs/{org}/organization-roles/teams/{team_slug}/{role_id}"
2105
+ ],
2106
+ revokeOrgRoleUser: [
2107
+ "DELETE /orgs/{org}/organization-roles/users/{username}/{role_id}"
2108
+ ],
2109
+ setMembershipForUser: ["PUT /orgs/{org}/memberships/{username}"],
2110
+ setPublicMembershipForAuthenticatedUser: [
2111
+ "PUT /orgs/{org}/public_members/{username}"
2112
+ ],
2113
+ unblockUser: ["DELETE /orgs/{org}/blocks/{username}"],
2114
+ update: ["PATCH /orgs/{org}"],
2115
+ updateMembershipForAuthenticatedUser: [
2116
+ "PATCH /user/memberships/orgs/{org}"
2117
+ ],
2118
+ updatePatAccess: ["POST /orgs/{org}/personal-access-tokens/{pat_id}"],
2119
+ updatePatAccesses: ["POST /orgs/{org}/personal-access-tokens"],
2120
+ updateWebhook: ["PATCH /orgs/{org}/hooks/{hook_id}"],
2121
+ updateWebhookConfigForOrg: ["PATCH /orgs/{org}/hooks/{hook_id}/config"]
2122
+ },
2123
+ packages: {
2124
+ deletePackageForAuthenticatedUser: [
2125
+ "DELETE /user/packages/{package_type}/{package_name}"
2126
+ ],
2127
+ deletePackageForOrg: [
2128
+ "DELETE /orgs/{org}/packages/{package_type}/{package_name}"
2129
+ ],
2130
+ deletePackageForUser: [
2131
+ "DELETE /users/{username}/packages/{package_type}/{package_name}"
2132
+ ],
2133
+ deletePackageVersionForAuthenticatedUser: [
2134
+ "DELETE /user/packages/{package_type}/{package_name}/versions/{package_version_id}"
2135
+ ],
2136
+ deletePackageVersionForOrg: [
2137
+ "DELETE /orgs/{org}/packages/{package_type}/{package_name}/versions/{package_version_id}"
2138
+ ],
2139
+ deletePackageVersionForUser: [
2140
+ "DELETE /users/{username}/packages/{package_type}/{package_name}/versions/{package_version_id}"
2141
+ ],
2142
+ getAllPackageVersionsForAPackageOwnedByAnOrg: [
2143
+ "GET /orgs/{org}/packages/{package_type}/{package_name}/versions",
2144
+ {},
2145
+ { renamed: ["packages", "getAllPackageVersionsForPackageOwnedByOrg"] }
2146
+ ],
2147
+ getAllPackageVersionsForAPackageOwnedByTheAuthenticatedUser: [
2148
+ "GET /user/packages/{package_type}/{package_name}/versions",
2149
+ {},
2150
+ {
2151
+ renamed: [
2152
+ "packages",
2153
+ "getAllPackageVersionsForPackageOwnedByAuthenticatedUser"
2154
+ ]
2155
+ }
2156
+ ],
2157
+ getAllPackageVersionsForPackageOwnedByAuthenticatedUser: [
2158
+ "GET /user/packages/{package_type}/{package_name}/versions"
2159
+ ],
2160
+ getAllPackageVersionsForPackageOwnedByOrg: [
2161
+ "GET /orgs/{org}/packages/{package_type}/{package_name}/versions"
2162
+ ],
2163
+ getAllPackageVersionsForPackageOwnedByUser: [
2164
+ "GET /users/{username}/packages/{package_type}/{package_name}/versions"
2165
+ ],
2166
+ getPackageForAuthenticatedUser: [
2167
+ "GET /user/packages/{package_type}/{package_name}"
2168
+ ],
2169
+ getPackageForOrganization: [
2170
+ "GET /orgs/{org}/packages/{package_type}/{package_name}"
2171
+ ],
2172
+ getPackageForUser: [
2173
+ "GET /users/{username}/packages/{package_type}/{package_name}"
2174
+ ],
2175
+ getPackageVersionForAuthenticatedUser: [
2176
+ "GET /user/packages/{package_type}/{package_name}/versions/{package_version_id}"
2177
+ ],
2178
+ getPackageVersionForOrganization: [
2179
+ "GET /orgs/{org}/packages/{package_type}/{package_name}/versions/{package_version_id}"
2180
+ ],
2181
+ getPackageVersionForUser: [
2182
+ "GET /users/{username}/packages/{package_type}/{package_name}/versions/{package_version_id}"
2183
+ ],
2184
+ listDockerMigrationConflictingPackagesForAuthenticatedUser: [
2185
+ "GET /user/docker/conflicts"
2186
+ ],
2187
+ listDockerMigrationConflictingPackagesForOrganization: [
2188
+ "GET /orgs/{org}/docker/conflicts"
2189
+ ],
2190
+ listDockerMigrationConflictingPackagesForUser: [
2191
+ "GET /users/{username}/docker/conflicts"
2192
+ ],
2193
+ listPackagesForAuthenticatedUser: ["GET /user/packages"],
2194
+ listPackagesForOrganization: ["GET /orgs/{org}/packages"],
2195
+ listPackagesForUser: ["GET /users/{username}/packages"],
2196
+ restorePackageForAuthenticatedUser: [
2197
+ "POST /user/packages/{package_type}/{package_name}/restore{?token}"
2198
+ ],
2199
+ restorePackageForOrg: [
2200
+ "POST /orgs/{org}/packages/{package_type}/{package_name}/restore{?token}"
2201
+ ],
2202
+ restorePackageForUser: [
2203
+ "POST /users/{username}/packages/{package_type}/{package_name}/restore{?token}"
2204
+ ],
2205
+ restorePackageVersionForAuthenticatedUser: [
2206
+ "POST /user/packages/{package_type}/{package_name}/versions/{package_version_id}/restore"
2207
+ ],
2208
+ restorePackageVersionForOrg: [
2209
+ "POST /orgs/{org}/packages/{package_type}/{package_name}/versions/{package_version_id}/restore"
2210
+ ],
2211
+ restorePackageVersionForUser: [
2212
+ "POST /users/{username}/packages/{package_type}/{package_name}/versions/{package_version_id}/restore"
2213
+ ]
2214
+ },
2215
+ projects: {
2216
+ addCollaborator: ["PUT /projects/{project_id}/collaborators/{username}"],
2217
+ createCard: ["POST /projects/columns/{column_id}/cards"],
2218
+ createColumn: ["POST /projects/{project_id}/columns"],
2219
+ createForAuthenticatedUser: ["POST /user/projects"],
2220
+ createForOrg: ["POST /orgs/{org}/projects"],
2221
+ createForRepo: ["POST /repos/{owner}/{repo}/projects"],
2222
+ delete: ["DELETE /projects/{project_id}"],
2223
+ deleteCard: ["DELETE /projects/columns/cards/{card_id}"],
2224
+ deleteColumn: ["DELETE /projects/columns/{column_id}"],
2225
+ get: ["GET /projects/{project_id}"],
2226
+ getCard: ["GET /projects/columns/cards/{card_id}"],
2227
+ getColumn: ["GET /projects/columns/{column_id}"],
2228
+ getPermissionForUser: [
2229
+ "GET /projects/{project_id}/collaborators/{username}/permission"
2230
+ ],
2231
+ listCards: ["GET /projects/columns/{column_id}/cards"],
2232
+ listCollaborators: ["GET /projects/{project_id}/collaborators"],
2233
+ listColumns: ["GET /projects/{project_id}/columns"],
2234
+ listForOrg: ["GET /orgs/{org}/projects"],
2235
+ listForRepo: ["GET /repos/{owner}/{repo}/projects"],
2236
+ listForUser: ["GET /users/{username}/projects"],
2237
+ moveCard: ["POST /projects/columns/cards/{card_id}/moves"],
2238
+ moveColumn: ["POST /projects/columns/{column_id}/moves"],
2239
+ removeCollaborator: [
2240
+ "DELETE /projects/{project_id}/collaborators/{username}"
2241
+ ],
2242
+ update: ["PATCH /projects/{project_id}"],
2243
+ updateCard: ["PATCH /projects/columns/cards/{card_id}"],
2244
+ updateColumn: ["PATCH /projects/columns/{column_id}"]
2245
+ },
2246
+ pulls: {
2247
+ checkIfMerged: ["GET /repos/{owner}/{repo}/pulls/{pull_number}/merge"],
2248
+ create: ["POST /repos/{owner}/{repo}/pulls"],
2249
+ createReplyForReviewComment: [
2250
+ "POST /repos/{owner}/{repo}/pulls/{pull_number}/comments/{comment_id}/replies"
2251
+ ],
2252
+ createReview: ["POST /repos/{owner}/{repo}/pulls/{pull_number}/reviews"],
2253
+ createReviewComment: [
2254
+ "POST /repos/{owner}/{repo}/pulls/{pull_number}/comments"
2255
+ ],
2256
+ deletePendingReview: [
2257
+ "DELETE /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}"
2258
+ ],
2259
+ deleteReviewComment: [
2260
+ "DELETE /repos/{owner}/{repo}/pulls/comments/{comment_id}"
2261
+ ],
2262
+ dismissReview: [
2263
+ "PUT /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}/dismissals"
2264
+ ],
2265
+ get: ["GET /repos/{owner}/{repo}/pulls/{pull_number}"],
2266
+ getReview: [
2267
+ "GET /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}"
2268
+ ],
2269
+ getReviewComment: ["GET /repos/{owner}/{repo}/pulls/comments/{comment_id}"],
2270
+ list: ["GET /repos/{owner}/{repo}/pulls"],
2271
+ listCommentsForReview: [
2272
+ "GET /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}/comments"
2273
+ ],
2274
+ listCommits: ["GET /repos/{owner}/{repo}/pulls/{pull_number}/commits"],
2275
+ listFiles: ["GET /repos/{owner}/{repo}/pulls/{pull_number}/files"],
2276
+ listRequestedReviewers: [
2277
+ "GET /repos/{owner}/{repo}/pulls/{pull_number}/requested_reviewers"
2278
+ ],
2279
+ listReviewComments: [
2280
+ "GET /repos/{owner}/{repo}/pulls/{pull_number}/comments"
2281
+ ],
2282
+ listReviewCommentsForRepo: ["GET /repos/{owner}/{repo}/pulls/comments"],
2283
+ listReviews: ["GET /repos/{owner}/{repo}/pulls/{pull_number}/reviews"],
2284
+ merge: ["PUT /repos/{owner}/{repo}/pulls/{pull_number}/merge"],
2285
+ removeRequestedReviewers: [
2286
+ "DELETE /repos/{owner}/{repo}/pulls/{pull_number}/requested_reviewers"
2287
+ ],
2288
+ requestReviewers: [
2289
+ "POST /repos/{owner}/{repo}/pulls/{pull_number}/requested_reviewers"
2290
+ ],
2291
+ submitReview: [
2292
+ "POST /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}/events"
2293
+ ],
2294
+ update: ["PATCH /repos/{owner}/{repo}/pulls/{pull_number}"],
2295
+ updateBranch: [
2296
+ "PUT /repos/{owner}/{repo}/pulls/{pull_number}/update-branch"
2297
+ ],
2298
+ updateReview: [
2299
+ "PUT /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}"
2300
+ ],
2301
+ updateReviewComment: [
2302
+ "PATCH /repos/{owner}/{repo}/pulls/comments/{comment_id}"
2303
+ ]
2304
+ },
2305
+ rateLimit: { get: ["GET /rate_limit"] },
2306
+ reactions: {
2307
+ createForCommitComment: [
2308
+ "POST /repos/{owner}/{repo}/comments/{comment_id}/reactions"
2309
+ ],
2310
+ createForIssue: [
2311
+ "POST /repos/{owner}/{repo}/issues/{issue_number}/reactions"
2312
+ ],
2313
+ createForIssueComment: [
2314
+ "POST /repos/{owner}/{repo}/issues/comments/{comment_id}/reactions"
2315
+ ],
2316
+ createForPullRequestReviewComment: [
2317
+ "POST /repos/{owner}/{repo}/pulls/comments/{comment_id}/reactions"
2318
+ ],
2319
+ createForRelease: [
2320
+ "POST /repos/{owner}/{repo}/releases/{release_id}/reactions"
2321
+ ],
2322
+ createForTeamDiscussionCommentInOrg: [
2323
+ "POST /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}/reactions"
2324
+ ],
2325
+ createForTeamDiscussionInOrg: [
2326
+ "POST /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/reactions"
2327
+ ],
2328
+ deleteForCommitComment: [
2329
+ "DELETE /repos/{owner}/{repo}/comments/{comment_id}/reactions/{reaction_id}"
2330
+ ],
2331
+ deleteForIssue: [
2332
+ "DELETE /repos/{owner}/{repo}/issues/{issue_number}/reactions/{reaction_id}"
2333
+ ],
2334
+ deleteForIssueComment: [
2335
+ "DELETE /repos/{owner}/{repo}/issues/comments/{comment_id}/reactions/{reaction_id}"
2336
+ ],
2337
+ deleteForPullRequestComment: [
2338
+ "DELETE /repos/{owner}/{repo}/pulls/comments/{comment_id}/reactions/{reaction_id}"
2339
+ ],
2340
+ deleteForRelease: [
2341
+ "DELETE /repos/{owner}/{repo}/releases/{release_id}/reactions/{reaction_id}"
2342
+ ],
2343
+ deleteForTeamDiscussion: [
2344
+ "DELETE /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/reactions/{reaction_id}"
2345
+ ],
2346
+ deleteForTeamDiscussionComment: [
2347
+ "DELETE /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}/reactions/{reaction_id}"
2348
+ ],
2349
+ listForCommitComment: [
2350
+ "GET /repos/{owner}/{repo}/comments/{comment_id}/reactions"
2351
+ ],
2352
+ listForIssue: ["GET /repos/{owner}/{repo}/issues/{issue_number}/reactions"],
2353
+ listForIssueComment: [
2354
+ "GET /repos/{owner}/{repo}/issues/comments/{comment_id}/reactions"
2355
+ ],
2356
+ listForPullRequestReviewComment: [
2357
+ "GET /repos/{owner}/{repo}/pulls/comments/{comment_id}/reactions"
2358
+ ],
2359
+ listForRelease: [
2360
+ "GET /repos/{owner}/{repo}/releases/{release_id}/reactions"
2361
+ ],
2362
+ listForTeamDiscussionCommentInOrg: [
2363
+ "GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}/reactions"
2364
+ ],
2365
+ listForTeamDiscussionInOrg: [
2366
+ "GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/reactions"
2367
+ ]
2368
+ },
2369
+ repos: {
2370
+ acceptInvitation: [
2371
+ "PATCH /user/repository_invitations/{invitation_id}",
2372
+ {},
2373
+ { renamed: ["repos", "acceptInvitationForAuthenticatedUser"] }
2374
+ ],
2375
+ acceptInvitationForAuthenticatedUser: [
2376
+ "PATCH /user/repository_invitations/{invitation_id}"
2377
+ ],
2378
+ addAppAccessRestrictions: [
2379
+ "POST /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps",
2380
+ {},
2381
+ { mapToData: "apps" }
2382
+ ],
2383
+ addCollaborator: ["PUT /repos/{owner}/{repo}/collaborators/{username}"],
2384
+ addStatusCheckContexts: [
2385
+ "POST /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts",
2386
+ {},
2387
+ { mapToData: "contexts" }
2388
+ ],
2389
+ addTeamAccessRestrictions: [
2390
+ "POST /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/teams",
2391
+ {},
2392
+ { mapToData: "teams" }
2393
+ ],
2394
+ addUserAccessRestrictions: [
2395
+ "POST /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users",
2396
+ {},
2397
+ { mapToData: "users" }
2398
+ ],
2399
+ cancelPagesDeployment: [
2400
+ "POST /repos/{owner}/{repo}/pages/deployments/{pages_deployment_id}/cancel"
2401
+ ],
2402
+ checkAutomatedSecurityFixes: [
2403
+ "GET /repos/{owner}/{repo}/automated-security-fixes"
2404
+ ],
2405
+ checkCollaborator: ["GET /repos/{owner}/{repo}/collaborators/{username}"],
2406
+ checkPrivateVulnerabilityReporting: [
2407
+ "GET /repos/{owner}/{repo}/private-vulnerability-reporting"
2408
+ ],
2409
+ checkVulnerabilityAlerts: [
2410
+ "GET /repos/{owner}/{repo}/vulnerability-alerts"
2411
+ ],
2412
+ codeownersErrors: ["GET /repos/{owner}/{repo}/codeowners/errors"],
2413
+ compareCommits: ["GET /repos/{owner}/{repo}/compare/{base}...{head}"],
2414
+ compareCommitsWithBasehead: [
2415
+ "GET /repos/{owner}/{repo}/compare/{basehead}"
2416
+ ],
2417
+ createAutolink: ["POST /repos/{owner}/{repo}/autolinks"],
2418
+ createCommitComment: [
2419
+ "POST /repos/{owner}/{repo}/commits/{commit_sha}/comments"
2420
+ ],
2421
+ createCommitSignatureProtection: [
2422
+ "POST /repos/{owner}/{repo}/branches/{branch}/protection/required_signatures"
2423
+ ],
2424
+ createCommitStatus: ["POST /repos/{owner}/{repo}/statuses/{sha}"],
2425
+ createDeployKey: ["POST /repos/{owner}/{repo}/keys"],
2426
+ createDeployment: ["POST /repos/{owner}/{repo}/deployments"],
2427
+ createDeploymentBranchPolicy: [
2428
+ "POST /repos/{owner}/{repo}/environments/{environment_name}/deployment-branch-policies"
2429
+ ],
2430
+ createDeploymentProtectionRule: [
2431
+ "POST /repos/{owner}/{repo}/environments/{environment_name}/deployment_protection_rules"
2432
+ ],
2433
+ createDeploymentStatus: [
2434
+ "POST /repos/{owner}/{repo}/deployments/{deployment_id}/statuses"
2435
+ ],
2436
+ createDispatchEvent: ["POST /repos/{owner}/{repo}/dispatches"],
2437
+ createForAuthenticatedUser: ["POST /user/repos"],
2438
+ createFork: ["POST /repos/{owner}/{repo}/forks"],
2439
+ createInOrg: ["POST /orgs/{org}/repos"],
2440
+ createOrUpdateCustomPropertiesValues: [
2441
+ "PATCH /repos/{owner}/{repo}/properties/values"
2442
+ ],
2443
+ createOrUpdateEnvironment: [
2444
+ "PUT /repos/{owner}/{repo}/environments/{environment_name}"
2445
+ ],
2446
+ createOrUpdateFileContents: ["PUT /repos/{owner}/{repo}/contents/{path}"],
2447
+ createOrgRuleset: ["POST /orgs/{org}/rulesets"],
2448
+ createPagesDeployment: ["POST /repos/{owner}/{repo}/pages/deployments"],
2449
+ createPagesSite: ["POST /repos/{owner}/{repo}/pages"],
2450
+ createRelease: ["POST /repos/{owner}/{repo}/releases"],
2451
+ createRepoRuleset: ["POST /repos/{owner}/{repo}/rulesets"],
2452
+ createTagProtection: ["POST /repos/{owner}/{repo}/tags/protection"],
2453
+ createUsingTemplate: [
2454
+ "POST /repos/{template_owner}/{template_repo}/generate"
2455
+ ],
2456
+ createWebhook: ["POST /repos/{owner}/{repo}/hooks"],
2457
+ declineInvitation: [
2458
+ "DELETE /user/repository_invitations/{invitation_id}",
2459
+ {},
2460
+ { renamed: ["repos", "declineInvitationForAuthenticatedUser"] }
2461
+ ],
2462
+ declineInvitationForAuthenticatedUser: [
2463
+ "DELETE /user/repository_invitations/{invitation_id}"
2464
+ ],
2465
+ delete: ["DELETE /repos/{owner}/{repo}"],
2466
+ deleteAccessRestrictions: [
2467
+ "DELETE /repos/{owner}/{repo}/branches/{branch}/protection/restrictions"
2468
+ ],
2469
+ deleteAdminBranchProtection: [
2470
+ "DELETE /repos/{owner}/{repo}/branches/{branch}/protection/enforce_admins"
2471
+ ],
2472
+ deleteAnEnvironment: [
2473
+ "DELETE /repos/{owner}/{repo}/environments/{environment_name}"
2474
+ ],
2475
+ deleteAutolink: ["DELETE /repos/{owner}/{repo}/autolinks/{autolink_id}"],
2476
+ deleteBranchProtection: [
2477
+ "DELETE /repos/{owner}/{repo}/branches/{branch}/protection"
2478
+ ],
2479
+ deleteCommitComment: ["DELETE /repos/{owner}/{repo}/comments/{comment_id}"],
2480
+ deleteCommitSignatureProtection: [
2481
+ "DELETE /repos/{owner}/{repo}/branches/{branch}/protection/required_signatures"
2482
+ ],
2483
+ deleteDeployKey: ["DELETE /repos/{owner}/{repo}/keys/{key_id}"],
2484
+ deleteDeployment: [
2485
+ "DELETE /repos/{owner}/{repo}/deployments/{deployment_id}"
2486
+ ],
2487
+ deleteDeploymentBranchPolicy: [
2488
+ "DELETE /repos/{owner}/{repo}/environments/{environment_name}/deployment-branch-policies/{branch_policy_id}"
2489
+ ],
2490
+ deleteFile: ["DELETE /repos/{owner}/{repo}/contents/{path}"],
2491
+ deleteInvitation: [
2492
+ "DELETE /repos/{owner}/{repo}/invitations/{invitation_id}"
2493
+ ],
2494
+ deleteOrgRuleset: ["DELETE /orgs/{org}/rulesets/{ruleset_id}"],
2495
+ deletePagesSite: ["DELETE /repos/{owner}/{repo}/pages"],
2496
+ deletePullRequestReviewProtection: [
2497
+ "DELETE /repos/{owner}/{repo}/branches/{branch}/protection/required_pull_request_reviews"
2498
+ ],
2499
+ deleteRelease: ["DELETE /repos/{owner}/{repo}/releases/{release_id}"],
2500
+ deleteReleaseAsset: [
2501
+ "DELETE /repos/{owner}/{repo}/releases/assets/{asset_id}"
2502
+ ],
2503
+ deleteRepoRuleset: ["DELETE /repos/{owner}/{repo}/rulesets/{ruleset_id}"],
2504
+ deleteTagProtection: [
2505
+ "DELETE /repos/{owner}/{repo}/tags/protection/{tag_protection_id}"
2506
+ ],
2507
+ deleteWebhook: ["DELETE /repos/{owner}/{repo}/hooks/{hook_id}"],
2508
+ disableAutomatedSecurityFixes: [
2509
+ "DELETE /repos/{owner}/{repo}/automated-security-fixes"
2510
+ ],
2511
+ disableDeploymentProtectionRule: [
2512
+ "DELETE /repos/{owner}/{repo}/environments/{environment_name}/deployment_protection_rules/{protection_rule_id}"
2513
+ ],
2514
+ disablePrivateVulnerabilityReporting: [
2515
+ "DELETE /repos/{owner}/{repo}/private-vulnerability-reporting"
2516
+ ],
2517
+ disableVulnerabilityAlerts: [
2518
+ "DELETE /repos/{owner}/{repo}/vulnerability-alerts"
2519
+ ],
2520
+ downloadArchive: [
2521
+ "GET /repos/{owner}/{repo}/zipball/{ref}",
2522
+ {},
2523
+ { renamed: ["repos", "downloadZipballArchive"] }
2524
+ ],
2525
+ downloadTarballArchive: ["GET /repos/{owner}/{repo}/tarball/{ref}"],
2526
+ downloadZipballArchive: ["GET /repos/{owner}/{repo}/zipball/{ref}"],
2527
+ enableAutomatedSecurityFixes: [
2528
+ "PUT /repos/{owner}/{repo}/automated-security-fixes"
2529
+ ],
2530
+ enablePrivateVulnerabilityReporting: [
2531
+ "PUT /repos/{owner}/{repo}/private-vulnerability-reporting"
2532
+ ],
2533
+ enableVulnerabilityAlerts: [
2534
+ "PUT /repos/{owner}/{repo}/vulnerability-alerts"
2535
+ ],
2536
+ generateReleaseNotes: [
2537
+ "POST /repos/{owner}/{repo}/releases/generate-notes"
2538
+ ],
2539
+ get: ["GET /repos/{owner}/{repo}"],
2540
+ getAccessRestrictions: [
2541
+ "GET /repos/{owner}/{repo}/branches/{branch}/protection/restrictions"
2542
+ ],
2543
+ getAdminBranchProtection: [
2544
+ "GET /repos/{owner}/{repo}/branches/{branch}/protection/enforce_admins"
2545
+ ],
2546
+ getAllDeploymentProtectionRules: [
2547
+ "GET /repos/{owner}/{repo}/environments/{environment_name}/deployment_protection_rules"
2548
+ ],
2549
+ getAllEnvironments: ["GET /repos/{owner}/{repo}/environments"],
2550
+ getAllStatusCheckContexts: [
2551
+ "GET /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts"
2552
+ ],
2553
+ getAllTopics: ["GET /repos/{owner}/{repo}/topics"],
2554
+ getAppsWithAccessToProtectedBranch: [
2555
+ "GET /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps"
2556
+ ],
2557
+ getAutolink: ["GET /repos/{owner}/{repo}/autolinks/{autolink_id}"],
2558
+ getBranch: ["GET /repos/{owner}/{repo}/branches/{branch}"],
2559
+ getBranchProtection: [
2560
+ "GET /repos/{owner}/{repo}/branches/{branch}/protection"
2561
+ ],
2562
+ getBranchRules: ["GET /repos/{owner}/{repo}/rules/branches/{branch}"],
2563
+ getClones: ["GET /repos/{owner}/{repo}/traffic/clones"],
2564
+ getCodeFrequencyStats: ["GET /repos/{owner}/{repo}/stats/code_frequency"],
2565
+ getCollaboratorPermissionLevel: [
2566
+ "GET /repos/{owner}/{repo}/collaborators/{username}/permission"
2567
+ ],
2568
+ getCombinedStatusForRef: ["GET /repos/{owner}/{repo}/commits/{ref}/status"],
2569
+ getCommit: ["GET /repos/{owner}/{repo}/commits/{ref}"],
2570
+ getCommitActivityStats: ["GET /repos/{owner}/{repo}/stats/commit_activity"],
2571
+ getCommitComment: ["GET /repos/{owner}/{repo}/comments/{comment_id}"],
2572
+ getCommitSignatureProtection: [
2573
+ "GET /repos/{owner}/{repo}/branches/{branch}/protection/required_signatures"
2574
+ ],
2575
+ getCommunityProfileMetrics: ["GET /repos/{owner}/{repo}/community/profile"],
2576
+ getContent: ["GET /repos/{owner}/{repo}/contents/{path}"],
2577
+ getContributorsStats: ["GET /repos/{owner}/{repo}/stats/contributors"],
2578
+ getCustomDeploymentProtectionRule: [
2579
+ "GET /repos/{owner}/{repo}/environments/{environment_name}/deployment_protection_rules/{protection_rule_id}"
2580
+ ],
2581
+ getCustomPropertiesValues: ["GET /repos/{owner}/{repo}/properties/values"],
2582
+ getDeployKey: ["GET /repos/{owner}/{repo}/keys/{key_id}"],
2583
+ getDeployment: ["GET /repos/{owner}/{repo}/deployments/{deployment_id}"],
2584
+ getDeploymentBranchPolicy: [
2585
+ "GET /repos/{owner}/{repo}/environments/{environment_name}/deployment-branch-policies/{branch_policy_id}"
2586
+ ],
2587
+ getDeploymentStatus: [
2588
+ "GET /repos/{owner}/{repo}/deployments/{deployment_id}/statuses/{status_id}"
2589
+ ],
2590
+ getEnvironment: [
2591
+ "GET /repos/{owner}/{repo}/environments/{environment_name}"
2592
+ ],
2593
+ getLatestPagesBuild: ["GET /repos/{owner}/{repo}/pages/builds/latest"],
2594
+ getLatestRelease: ["GET /repos/{owner}/{repo}/releases/latest"],
2595
+ getOrgRuleSuite: ["GET /orgs/{org}/rulesets/rule-suites/{rule_suite_id}"],
2596
+ getOrgRuleSuites: ["GET /orgs/{org}/rulesets/rule-suites"],
2597
+ getOrgRuleset: ["GET /orgs/{org}/rulesets/{ruleset_id}"],
2598
+ getOrgRulesets: ["GET /orgs/{org}/rulesets"],
2599
+ getPages: ["GET /repos/{owner}/{repo}/pages"],
2600
+ getPagesBuild: ["GET /repos/{owner}/{repo}/pages/builds/{build_id}"],
2601
+ getPagesDeployment: [
2602
+ "GET /repos/{owner}/{repo}/pages/deployments/{pages_deployment_id}"
2603
+ ],
2604
+ getPagesHealthCheck: ["GET /repos/{owner}/{repo}/pages/health"],
2605
+ getParticipationStats: ["GET /repos/{owner}/{repo}/stats/participation"],
2606
+ getPullRequestReviewProtection: [
2607
+ "GET /repos/{owner}/{repo}/branches/{branch}/protection/required_pull_request_reviews"
2608
+ ],
2609
+ getPunchCardStats: ["GET /repos/{owner}/{repo}/stats/punch_card"],
2610
+ getReadme: ["GET /repos/{owner}/{repo}/readme"],
2611
+ getReadmeInDirectory: ["GET /repos/{owner}/{repo}/readme/{dir}"],
2612
+ getRelease: ["GET /repos/{owner}/{repo}/releases/{release_id}"],
2613
+ getReleaseAsset: ["GET /repos/{owner}/{repo}/releases/assets/{asset_id}"],
2614
+ getReleaseByTag: ["GET /repos/{owner}/{repo}/releases/tags/{tag}"],
2615
+ getRepoRuleSuite: [
2616
+ "GET /repos/{owner}/{repo}/rulesets/rule-suites/{rule_suite_id}"
2617
+ ],
2618
+ getRepoRuleSuites: ["GET /repos/{owner}/{repo}/rulesets/rule-suites"],
2619
+ getRepoRuleset: ["GET /repos/{owner}/{repo}/rulesets/{ruleset_id}"],
2620
+ getRepoRulesets: ["GET /repos/{owner}/{repo}/rulesets"],
2621
+ getStatusChecksProtection: [
2622
+ "GET /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks"
2623
+ ],
2624
+ getTeamsWithAccessToProtectedBranch: [
2625
+ "GET /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/teams"
2626
+ ],
2627
+ getTopPaths: ["GET /repos/{owner}/{repo}/traffic/popular/paths"],
2628
+ getTopReferrers: ["GET /repos/{owner}/{repo}/traffic/popular/referrers"],
2629
+ getUsersWithAccessToProtectedBranch: [
2630
+ "GET /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users"
2631
+ ],
2632
+ getViews: ["GET /repos/{owner}/{repo}/traffic/views"],
2633
+ getWebhook: ["GET /repos/{owner}/{repo}/hooks/{hook_id}"],
2634
+ getWebhookConfigForRepo: [
2635
+ "GET /repos/{owner}/{repo}/hooks/{hook_id}/config"
2636
+ ],
2637
+ getWebhookDelivery: [
2638
+ "GET /repos/{owner}/{repo}/hooks/{hook_id}/deliveries/{delivery_id}"
2639
+ ],
2640
+ listActivities: ["GET /repos/{owner}/{repo}/activity"],
2641
+ listAutolinks: ["GET /repos/{owner}/{repo}/autolinks"],
2642
+ listBranches: ["GET /repos/{owner}/{repo}/branches"],
2643
+ listBranchesForHeadCommit: [
2644
+ "GET /repos/{owner}/{repo}/commits/{commit_sha}/branches-where-head"
2645
+ ],
2646
+ listCollaborators: ["GET /repos/{owner}/{repo}/collaborators"],
2647
+ listCommentsForCommit: [
2648
+ "GET /repos/{owner}/{repo}/commits/{commit_sha}/comments"
2649
+ ],
2650
+ listCommitCommentsForRepo: ["GET /repos/{owner}/{repo}/comments"],
2651
+ listCommitStatusesForRef: [
2652
+ "GET /repos/{owner}/{repo}/commits/{ref}/statuses"
2653
+ ],
2654
+ listCommits: ["GET /repos/{owner}/{repo}/commits"],
2655
+ listContributors: ["GET /repos/{owner}/{repo}/contributors"],
2656
+ listCustomDeploymentRuleIntegrations: [
2657
+ "GET /repos/{owner}/{repo}/environments/{environment_name}/deployment_protection_rules/apps"
2658
+ ],
2659
+ listDeployKeys: ["GET /repos/{owner}/{repo}/keys"],
2660
+ listDeploymentBranchPolicies: [
2661
+ "GET /repos/{owner}/{repo}/environments/{environment_name}/deployment-branch-policies"
2662
+ ],
2663
+ listDeploymentStatuses: [
2664
+ "GET /repos/{owner}/{repo}/deployments/{deployment_id}/statuses"
2665
+ ],
2666
+ listDeployments: ["GET /repos/{owner}/{repo}/deployments"],
2667
+ listForAuthenticatedUser: ["GET /user/repos"],
2668
+ listForOrg: ["GET /orgs/{org}/repos"],
2669
+ listForUser: ["GET /users/{username}/repos"],
2670
+ listForks: ["GET /repos/{owner}/{repo}/forks"],
2671
+ listInvitations: ["GET /repos/{owner}/{repo}/invitations"],
2672
+ listInvitationsForAuthenticatedUser: ["GET /user/repository_invitations"],
2673
+ listLanguages: ["GET /repos/{owner}/{repo}/languages"],
2674
+ listPagesBuilds: ["GET /repos/{owner}/{repo}/pages/builds"],
2675
+ listPublic: ["GET /repositories"],
2676
+ listPullRequestsAssociatedWithCommit: [
2677
+ "GET /repos/{owner}/{repo}/commits/{commit_sha}/pulls"
2678
+ ],
2679
+ listReleaseAssets: [
2680
+ "GET /repos/{owner}/{repo}/releases/{release_id}/assets"
2681
+ ],
2682
+ listReleases: ["GET /repos/{owner}/{repo}/releases"],
2683
+ listTagProtection: ["GET /repos/{owner}/{repo}/tags/protection"],
2684
+ listTags: ["GET /repos/{owner}/{repo}/tags"],
2685
+ listTeams: ["GET /repos/{owner}/{repo}/teams"],
2686
+ listWebhookDeliveries: [
2687
+ "GET /repos/{owner}/{repo}/hooks/{hook_id}/deliveries"
2688
+ ],
2689
+ listWebhooks: ["GET /repos/{owner}/{repo}/hooks"],
2690
+ merge: ["POST /repos/{owner}/{repo}/merges"],
2691
+ mergeUpstream: ["POST /repos/{owner}/{repo}/merge-upstream"],
2692
+ pingWebhook: ["POST /repos/{owner}/{repo}/hooks/{hook_id}/pings"],
2693
+ redeliverWebhookDelivery: [
2694
+ "POST /repos/{owner}/{repo}/hooks/{hook_id}/deliveries/{delivery_id}/attempts"
2695
+ ],
2696
+ removeAppAccessRestrictions: [
2697
+ "DELETE /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps",
2698
+ {},
2699
+ { mapToData: "apps" }
2700
+ ],
2701
+ removeCollaborator: [
2702
+ "DELETE /repos/{owner}/{repo}/collaborators/{username}"
2703
+ ],
2704
+ removeStatusCheckContexts: [
2705
+ "DELETE /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts",
2706
+ {},
2707
+ { mapToData: "contexts" }
2708
+ ],
2709
+ removeStatusCheckProtection: [
2710
+ "DELETE /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks"
2711
+ ],
2712
+ removeTeamAccessRestrictions: [
2713
+ "DELETE /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/teams",
2714
+ {},
2715
+ { mapToData: "teams" }
2716
+ ],
2717
+ removeUserAccessRestrictions: [
2718
+ "DELETE /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users",
2719
+ {},
2720
+ { mapToData: "users" }
2721
+ ],
2722
+ renameBranch: ["POST /repos/{owner}/{repo}/branches/{branch}/rename"],
2723
+ replaceAllTopics: ["PUT /repos/{owner}/{repo}/topics"],
2724
+ requestPagesBuild: ["POST /repos/{owner}/{repo}/pages/builds"],
2725
+ setAdminBranchProtection: [
2726
+ "POST /repos/{owner}/{repo}/branches/{branch}/protection/enforce_admins"
2727
+ ],
2728
+ setAppAccessRestrictions: [
2729
+ "PUT /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps",
2730
+ {},
2731
+ { mapToData: "apps" }
2732
+ ],
2733
+ setStatusCheckContexts: [
2734
+ "PUT /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts",
2735
+ {},
2736
+ { mapToData: "contexts" }
2737
+ ],
2738
+ setTeamAccessRestrictions: [
2739
+ "PUT /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/teams",
2740
+ {},
2741
+ { mapToData: "teams" }
2742
+ ],
2743
+ setUserAccessRestrictions: [
2744
+ "PUT /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users",
2745
+ {},
2746
+ { mapToData: "users" }
2747
+ ],
2748
+ testPushWebhook: ["POST /repos/{owner}/{repo}/hooks/{hook_id}/tests"],
2749
+ transfer: ["POST /repos/{owner}/{repo}/transfer"],
2750
+ update: ["PATCH /repos/{owner}/{repo}"],
2751
+ updateBranchProtection: [
2752
+ "PUT /repos/{owner}/{repo}/branches/{branch}/protection"
2753
+ ],
2754
+ updateCommitComment: ["PATCH /repos/{owner}/{repo}/comments/{comment_id}"],
2755
+ updateDeploymentBranchPolicy: [
2756
+ "PUT /repos/{owner}/{repo}/environments/{environment_name}/deployment-branch-policies/{branch_policy_id}"
2757
+ ],
2758
+ updateInformationAboutPagesSite: ["PUT /repos/{owner}/{repo}/pages"],
2759
+ updateInvitation: [
2760
+ "PATCH /repos/{owner}/{repo}/invitations/{invitation_id}"
2761
+ ],
2762
+ updateOrgRuleset: ["PUT /orgs/{org}/rulesets/{ruleset_id}"],
2763
+ updatePullRequestReviewProtection: [
2764
+ "PATCH /repos/{owner}/{repo}/branches/{branch}/protection/required_pull_request_reviews"
2765
+ ],
2766
+ updateRelease: ["PATCH /repos/{owner}/{repo}/releases/{release_id}"],
2767
+ updateReleaseAsset: [
2768
+ "PATCH /repos/{owner}/{repo}/releases/assets/{asset_id}"
2769
+ ],
2770
+ updateRepoRuleset: ["PUT /repos/{owner}/{repo}/rulesets/{ruleset_id}"],
2771
+ updateStatusCheckPotection: [
2772
+ "PATCH /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks",
2773
+ {},
2774
+ { renamed: ["repos", "updateStatusCheckProtection"] }
2775
+ ],
2776
+ updateStatusCheckProtection: [
2777
+ "PATCH /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks"
2778
+ ],
2779
+ updateWebhook: ["PATCH /repos/{owner}/{repo}/hooks/{hook_id}"],
2780
+ updateWebhookConfigForRepo: [
2781
+ "PATCH /repos/{owner}/{repo}/hooks/{hook_id}/config"
2782
+ ],
2783
+ uploadReleaseAsset: [
2784
+ "POST /repos/{owner}/{repo}/releases/{release_id}/assets{?name,label}",
2785
+ { baseUrl: "https://uploads.github.com" }
2786
+ ]
2787
+ },
2788
+ search: {
2789
+ code: ["GET /search/code"],
2790
+ commits: ["GET /search/commits"],
2791
+ issuesAndPullRequests: ["GET /search/issues"],
2792
+ labels: ["GET /search/labels"],
2793
+ repos: ["GET /search/repositories"],
2794
+ topics: ["GET /search/topics"],
2795
+ users: ["GET /search/users"]
2796
+ },
2797
+ secretScanning: {
2798
+ getAlert: [
2799
+ "GET /repos/{owner}/{repo}/secret-scanning/alerts/{alert_number}"
2800
+ ],
2801
+ listAlertsForEnterprise: [
2802
+ "GET /enterprises/{enterprise}/secret-scanning/alerts"
2803
+ ],
2804
+ listAlertsForOrg: ["GET /orgs/{org}/secret-scanning/alerts"],
2805
+ listAlertsForRepo: ["GET /repos/{owner}/{repo}/secret-scanning/alerts"],
2806
+ listLocationsForAlert: [
2807
+ "GET /repos/{owner}/{repo}/secret-scanning/alerts/{alert_number}/locations"
2808
+ ],
2809
+ updateAlert: [
2810
+ "PATCH /repos/{owner}/{repo}/secret-scanning/alerts/{alert_number}"
2811
+ ]
2812
+ },
2813
+ securityAdvisories: {
2814
+ createFork: [
2815
+ "POST /repos/{owner}/{repo}/security-advisories/{ghsa_id}/forks"
2816
+ ],
2817
+ createPrivateVulnerabilityReport: [
2818
+ "POST /repos/{owner}/{repo}/security-advisories/reports"
2819
+ ],
2820
+ createRepositoryAdvisory: [
2821
+ "POST /repos/{owner}/{repo}/security-advisories"
2822
+ ],
2823
+ createRepositoryAdvisoryCveRequest: [
2824
+ "POST /repos/{owner}/{repo}/security-advisories/{ghsa_id}/cve"
2825
+ ],
2826
+ getGlobalAdvisory: ["GET /advisories/{ghsa_id}"],
2827
+ getRepositoryAdvisory: [
2828
+ "GET /repos/{owner}/{repo}/security-advisories/{ghsa_id}"
2829
+ ],
2830
+ listGlobalAdvisories: ["GET /advisories"],
2831
+ listOrgRepositoryAdvisories: ["GET /orgs/{org}/security-advisories"],
2832
+ listRepositoryAdvisories: ["GET /repos/{owner}/{repo}/security-advisories"],
2833
+ updateRepositoryAdvisory: [
2834
+ "PATCH /repos/{owner}/{repo}/security-advisories/{ghsa_id}"
2835
+ ]
2836
+ },
2837
+ teams: {
2838
+ addOrUpdateMembershipForUserInOrg: [
2839
+ "PUT /orgs/{org}/teams/{team_slug}/memberships/{username}"
2840
+ ],
2841
+ addOrUpdateProjectPermissionsInOrg: [
2842
+ "PUT /orgs/{org}/teams/{team_slug}/projects/{project_id}"
2843
+ ],
2844
+ addOrUpdateRepoPermissionsInOrg: [
2845
+ "PUT /orgs/{org}/teams/{team_slug}/repos/{owner}/{repo}"
2846
+ ],
2847
+ checkPermissionsForProjectInOrg: [
2848
+ "GET /orgs/{org}/teams/{team_slug}/projects/{project_id}"
2849
+ ],
2850
+ checkPermissionsForRepoInOrg: [
2851
+ "GET /orgs/{org}/teams/{team_slug}/repos/{owner}/{repo}"
2852
+ ],
2853
+ create: ["POST /orgs/{org}/teams"],
2854
+ createDiscussionCommentInOrg: [
2855
+ "POST /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments"
2856
+ ],
2857
+ createDiscussionInOrg: ["POST /orgs/{org}/teams/{team_slug}/discussions"],
2858
+ deleteDiscussionCommentInOrg: [
2859
+ "DELETE /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}"
2860
+ ],
2861
+ deleteDiscussionInOrg: [
2862
+ "DELETE /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}"
2863
+ ],
2864
+ deleteInOrg: ["DELETE /orgs/{org}/teams/{team_slug}"],
2865
+ getByName: ["GET /orgs/{org}/teams/{team_slug}"],
2866
+ getDiscussionCommentInOrg: [
2867
+ "GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}"
2868
+ ],
2869
+ getDiscussionInOrg: [
2870
+ "GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}"
2871
+ ],
2872
+ getMembershipForUserInOrg: [
2873
+ "GET /orgs/{org}/teams/{team_slug}/memberships/{username}"
2874
+ ],
2875
+ list: ["GET /orgs/{org}/teams"],
2876
+ listChildInOrg: ["GET /orgs/{org}/teams/{team_slug}/teams"],
2877
+ listDiscussionCommentsInOrg: [
2878
+ "GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments"
2879
+ ],
2880
+ listDiscussionsInOrg: ["GET /orgs/{org}/teams/{team_slug}/discussions"],
2881
+ listForAuthenticatedUser: ["GET /user/teams"],
2882
+ listMembersInOrg: ["GET /orgs/{org}/teams/{team_slug}/members"],
2883
+ listPendingInvitationsInOrg: [
2884
+ "GET /orgs/{org}/teams/{team_slug}/invitations"
2885
+ ],
2886
+ listProjectsInOrg: ["GET /orgs/{org}/teams/{team_slug}/projects"],
2887
+ listReposInOrg: ["GET /orgs/{org}/teams/{team_slug}/repos"],
2888
+ removeMembershipForUserInOrg: [
2889
+ "DELETE /orgs/{org}/teams/{team_slug}/memberships/{username}"
2890
+ ],
2891
+ removeProjectInOrg: [
2892
+ "DELETE /orgs/{org}/teams/{team_slug}/projects/{project_id}"
2893
+ ],
2894
+ removeRepoInOrg: [
2895
+ "DELETE /orgs/{org}/teams/{team_slug}/repos/{owner}/{repo}"
2896
+ ],
2897
+ updateDiscussionCommentInOrg: [
2898
+ "PATCH /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}"
2899
+ ],
2900
+ updateDiscussionInOrg: [
2901
+ "PATCH /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}"
2902
+ ],
2903
+ updateInOrg: ["PATCH /orgs/{org}/teams/{team_slug}"]
2904
+ },
2905
+ users: {
2906
+ addEmailForAuthenticated: [
2907
+ "POST /user/emails",
2908
+ {},
2909
+ { renamed: ["users", "addEmailForAuthenticatedUser"] }
2910
+ ],
2911
+ addEmailForAuthenticatedUser: ["POST /user/emails"],
2912
+ addSocialAccountForAuthenticatedUser: ["POST /user/social_accounts"],
2913
+ block: ["PUT /user/blocks/{username}"],
2914
+ checkBlocked: ["GET /user/blocks/{username}"],
2915
+ checkFollowingForUser: ["GET /users/{username}/following/{target_user}"],
2916
+ checkPersonIsFollowedByAuthenticated: ["GET /user/following/{username}"],
2917
+ createGpgKeyForAuthenticated: [
2918
+ "POST /user/gpg_keys",
2919
+ {},
2920
+ { renamed: ["users", "createGpgKeyForAuthenticatedUser"] }
2921
+ ],
2922
+ createGpgKeyForAuthenticatedUser: ["POST /user/gpg_keys"],
2923
+ createPublicSshKeyForAuthenticated: [
2924
+ "POST /user/keys",
2925
+ {},
2926
+ { renamed: ["users", "createPublicSshKeyForAuthenticatedUser"] }
2927
+ ],
2928
+ createPublicSshKeyForAuthenticatedUser: ["POST /user/keys"],
2929
+ createSshSigningKeyForAuthenticatedUser: ["POST /user/ssh_signing_keys"],
2930
+ deleteEmailForAuthenticated: [
2931
+ "DELETE /user/emails",
2932
+ {},
2933
+ { renamed: ["users", "deleteEmailForAuthenticatedUser"] }
2934
+ ],
2935
+ deleteEmailForAuthenticatedUser: ["DELETE /user/emails"],
2936
+ deleteGpgKeyForAuthenticated: [
2937
+ "DELETE /user/gpg_keys/{gpg_key_id}",
2938
+ {},
2939
+ { renamed: ["users", "deleteGpgKeyForAuthenticatedUser"] }
2940
+ ],
2941
+ deleteGpgKeyForAuthenticatedUser: ["DELETE /user/gpg_keys/{gpg_key_id}"],
2942
+ deletePublicSshKeyForAuthenticated: [
2943
+ "DELETE /user/keys/{key_id}",
2944
+ {},
2945
+ { renamed: ["users", "deletePublicSshKeyForAuthenticatedUser"] }
2946
+ ],
2947
+ deletePublicSshKeyForAuthenticatedUser: ["DELETE /user/keys/{key_id}"],
2948
+ deleteSocialAccountForAuthenticatedUser: ["DELETE /user/social_accounts"],
2949
+ deleteSshSigningKeyForAuthenticatedUser: [
2950
+ "DELETE /user/ssh_signing_keys/{ssh_signing_key_id}"
2951
+ ],
2952
+ follow: ["PUT /user/following/{username}"],
2953
+ getAuthenticated: ["GET /user"],
2954
+ getByUsername: ["GET /users/{username}"],
2955
+ getContextForUser: ["GET /users/{username}/hovercard"],
2956
+ getGpgKeyForAuthenticated: [
2957
+ "GET /user/gpg_keys/{gpg_key_id}",
2958
+ {},
2959
+ { renamed: ["users", "getGpgKeyForAuthenticatedUser"] }
2960
+ ],
2961
+ getGpgKeyForAuthenticatedUser: ["GET /user/gpg_keys/{gpg_key_id}"],
2962
+ getPublicSshKeyForAuthenticated: [
2963
+ "GET /user/keys/{key_id}",
2964
+ {},
2965
+ { renamed: ["users", "getPublicSshKeyForAuthenticatedUser"] }
2966
+ ],
2967
+ getPublicSshKeyForAuthenticatedUser: ["GET /user/keys/{key_id}"],
2968
+ getSshSigningKeyForAuthenticatedUser: [
2969
+ "GET /user/ssh_signing_keys/{ssh_signing_key_id}"
2970
+ ],
2971
+ list: ["GET /users"],
2972
+ listBlockedByAuthenticated: [
2973
+ "GET /user/blocks",
2974
+ {},
2975
+ { renamed: ["users", "listBlockedByAuthenticatedUser"] }
2976
+ ],
2977
+ listBlockedByAuthenticatedUser: ["GET /user/blocks"],
2978
+ listEmailsForAuthenticated: [
2979
+ "GET /user/emails",
2980
+ {},
2981
+ { renamed: ["users", "listEmailsForAuthenticatedUser"] }
2982
+ ],
2983
+ listEmailsForAuthenticatedUser: ["GET /user/emails"],
2984
+ listFollowedByAuthenticated: [
2985
+ "GET /user/following",
2986
+ {},
2987
+ { renamed: ["users", "listFollowedByAuthenticatedUser"] }
2988
+ ],
2989
+ listFollowedByAuthenticatedUser: ["GET /user/following"],
2990
+ listFollowersForAuthenticatedUser: ["GET /user/followers"],
2991
+ listFollowersForUser: ["GET /users/{username}/followers"],
2992
+ listFollowingForUser: ["GET /users/{username}/following"],
2993
+ listGpgKeysForAuthenticated: [
2994
+ "GET /user/gpg_keys",
2995
+ {},
2996
+ { renamed: ["users", "listGpgKeysForAuthenticatedUser"] }
2997
+ ],
2998
+ listGpgKeysForAuthenticatedUser: ["GET /user/gpg_keys"],
2999
+ listGpgKeysForUser: ["GET /users/{username}/gpg_keys"],
3000
+ listPublicEmailsForAuthenticated: [
3001
+ "GET /user/public_emails",
3002
+ {},
3003
+ { renamed: ["users", "listPublicEmailsForAuthenticatedUser"] }
3004
+ ],
3005
+ listPublicEmailsForAuthenticatedUser: ["GET /user/public_emails"],
3006
+ listPublicKeysForUser: ["GET /users/{username}/keys"],
3007
+ listPublicSshKeysForAuthenticated: [
3008
+ "GET /user/keys",
3009
+ {},
3010
+ { renamed: ["users", "listPublicSshKeysForAuthenticatedUser"] }
3011
+ ],
3012
+ listPublicSshKeysForAuthenticatedUser: ["GET /user/keys"],
3013
+ listSocialAccountsForAuthenticatedUser: ["GET /user/social_accounts"],
3014
+ listSocialAccountsForUser: ["GET /users/{username}/social_accounts"],
3015
+ listSshSigningKeysForAuthenticatedUser: ["GET /user/ssh_signing_keys"],
3016
+ listSshSigningKeysForUser: ["GET /users/{username}/ssh_signing_keys"],
3017
+ setPrimaryEmailVisibilityForAuthenticated: [
3018
+ "PATCH /user/email/visibility",
3019
+ {},
3020
+ { renamed: ["users", "setPrimaryEmailVisibilityForAuthenticatedUser"] }
3021
+ ],
3022
+ setPrimaryEmailVisibilityForAuthenticatedUser: [
3023
+ "PATCH /user/email/visibility"
3024
+ ],
3025
+ unblock: ["DELETE /user/blocks/{username}"],
3026
+ unfollow: ["DELETE /user/following/{username}"],
3027
+ updateAuthenticated: ["PATCH /user"]
3028
+ }
3029
+ };
3030
+ var endpoints_default = Endpoints;
3031
+
3032
+ // node_modules/@octokit/plugin-rest-endpoint-methods/dist-src/endpoints-to-methods.js
3033
+ var endpointMethodsMap = /* @__PURE__ */ new Map();
3034
+ for (const [scope, endpoints] of Object.entries(endpoints_default)) {
3035
+ for (const [methodName, endpoint2] of Object.entries(endpoints)) {
3036
+ const [route, defaults, decorations] = endpoint2;
3037
+ const [method, url] = route.split(/ /);
3038
+ const endpointDefaults = Object.assign(
3039
+ {
3040
+ method,
3041
+ url
3042
+ },
3043
+ defaults
3044
+ );
3045
+ if (!endpointMethodsMap.has(scope)) {
3046
+ endpointMethodsMap.set(scope, /* @__PURE__ */ new Map());
3047
+ }
3048
+ endpointMethodsMap.get(scope).set(methodName, {
3049
+ scope,
3050
+ methodName,
3051
+ endpointDefaults,
3052
+ decorations
3053
+ });
3054
+ }
3055
+ }
3056
+ var handler = {
3057
+ has({ scope }, methodName) {
3058
+ return endpointMethodsMap.get(scope).has(methodName);
3059
+ },
3060
+ getOwnPropertyDescriptor(target, methodName) {
3061
+ return {
3062
+ value: this.get(target, methodName),
3063
+ // ensures method is in the cache
3064
+ configurable: true,
3065
+ writable: true,
3066
+ enumerable: true
3067
+ };
3068
+ },
3069
+ defineProperty(target, methodName, descriptor) {
3070
+ Object.defineProperty(target.cache, methodName, descriptor);
3071
+ return true;
3072
+ },
3073
+ deleteProperty(target, methodName) {
3074
+ delete target.cache[methodName];
3075
+ return true;
3076
+ },
3077
+ ownKeys({ scope }) {
3078
+ return [...endpointMethodsMap.get(scope).keys()];
3079
+ },
3080
+ set(target, methodName, value) {
3081
+ return target.cache[methodName] = value;
3082
+ },
3083
+ get({ octokit, scope, cache }, methodName) {
3084
+ if (cache[methodName]) {
3085
+ return cache[methodName];
3086
+ }
3087
+ const method = endpointMethodsMap.get(scope).get(methodName);
3088
+ if (!method) {
3089
+ return void 0;
3090
+ }
3091
+ const { endpointDefaults, decorations } = method;
3092
+ if (decorations) {
3093
+ cache[methodName] = decorate(
3094
+ octokit,
3095
+ scope,
3096
+ methodName,
3097
+ endpointDefaults,
3098
+ decorations
3099
+ );
3100
+ } else {
3101
+ cache[methodName] = octokit.request.defaults(endpointDefaults);
3102
+ }
3103
+ return cache[methodName];
3104
+ }
3105
+ };
3106
+ function endpointsToMethods(octokit) {
3107
+ const newMethods = {};
3108
+ for (const scope of endpointMethodsMap.keys()) {
3109
+ newMethods[scope] = new Proxy({ octokit, scope, cache: {} }, handler);
3110
+ }
3111
+ return newMethods;
3112
+ }
3113
+ function decorate(octokit, scope, methodName, defaults, decorations) {
3114
+ const requestWithDefaults = octokit.request.defaults(defaults);
3115
+ function withDecorations(...args) {
3116
+ let options = requestWithDefaults.endpoint.merge(...args);
3117
+ if (decorations.mapToData) {
3118
+ options = Object.assign({}, options, {
3119
+ data: options[decorations.mapToData],
3120
+ [decorations.mapToData]: void 0
3121
+ });
3122
+ return requestWithDefaults(options);
3123
+ }
3124
+ if (decorations.renamed) {
3125
+ const [newScope, newMethodName] = decorations.renamed;
3126
+ octokit.log.warn(
3127
+ `octokit.${scope}.${methodName}() has been renamed to octokit.${newScope}.${newMethodName}()`
3128
+ );
3129
+ }
3130
+ if (decorations.deprecated) {
3131
+ octokit.log.warn(decorations.deprecated);
3132
+ }
3133
+ if (decorations.renamedParameters) {
3134
+ const options2 = requestWithDefaults.endpoint.merge(...args);
3135
+ for (const [name, alias] of Object.entries(
3136
+ decorations.renamedParameters
3137
+ )) {
3138
+ if (name in options2) {
3139
+ octokit.log.warn(
3140
+ `"${name}" parameter is deprecated for "octokit.${scope}.${methodName}()". Use "${alias}" instead`
3141
+ );
3142
+ if (!(alias in options2)) {
3143
+ options2[alias] = options2[name];
3144
+ }
3145
+ delete options2[name];
3146
+ }
3147
+ }
3148
+ return requestWithDefaults(options2);
3149
+ }
3150
+ return requestWithDefaults(...args);
3151
+ }
3152
+ return Object.assign(withDecorations, requestWithDefaults);
3153
+ }
3154
+
3155
+ // node_modules/@octokit/plugin-rest-endpoint-methods/dist-src/index.js
3156
+ function restEndpointMethods(octokit) {
3157
+ const api = endpointsToMethods(octokit);
3158
+ return {
3159
+ rest: api
3160
+ };
3161
+ }
3162
+ restEndpointMethods.VERSION = VERSION6;
3163
+ function legacyRestEndpointMethods(octokit) {
3164
+ const api = endpointsToMethods(octokit);
3165
+ return {
3166
+ ...api,
3167
+ rest: api
3168
+ };
3169
+ }
3170
+ legacyRestEndpointMethods.VERSION = VERSION6;
3171
+
3172
+ // src/octokit.ts
3173
+ import { retry } from "@octokit/plugin-retry";
3174
+ import { throttling } from "@octokit/plugin-throttling";
3175
+ import { paginateGraphQL } from "@octokit/plugin-paginate-graphql";
3176
+ var defaultOptions = {
3177
+ throttle: {
3178
+ onAbuseLimit: (retryAfter, options, octokit) => {
3179
+ octokit.log.warn(`Abuse limit hit with "${options.method} ${options.url}", retrying in ${retryAfter} seconds.`);
3180
+ return true;
3181
+ },
3182
+ onRateLimit: (retryAfter, options, octokit) => {
3183
+ octokit.log.warn(`Rate limit hit with "${options.method} ${options.url}", retrying in ${retryAfter} seconds.`);
3184
+ return true;
3185
+ },
3186
+ onSecondaryRateLimit: (retryAfter, options, octokit) => {
3187
+ octokit.log.warn(`Secondary rate limit hit with "${options.method} ${options.url}", retrying in ${retryAfter} seconds.`);
3188
+ return true;
3189
+ }
3190
+ }
3191
+ };
3192
+ var customOctokit = Octokit.plugin(throttling, retry, paginateRest, restEndpointMethods, paginateGraphQL).defaults((instanceOptions) => {
3193
+ return Object.assign({}, defaultOptions, instanceOptions);
3194
+ });
3195
+
3196
+ // src/signature.ts
3197
+ async function verifySignature(publicKeyPem, inputs, signature) {
3198
+ try {
3199
+ const inputsOrdered = {
3200
+ stateId: inputs.stateId,
3201
+ eventName: inputs.eventName,
3202
+ eventPayload: inputs.eventPayload,
3203
+ settings: inputs.settings,
3204
+ authToken: inputs.authToken,
3205
+ ref: inputs.ref
3206
+ };
3207
+ const pemContents = publicKeyPem.replace("-----BEGIN PUBLIC KEY-----", "").replace("-----END PUBLIC KEY-----", "").trim();
3208
+ const binaryDer = Uint8Array.from(atob(pemContents), (c) => c.charCodeAt(0));
3209
+ const publicKey = await crypto.subtle.importKey(
3210
+ "spki",
3211
+ binaryDer,
3212
+ {
3213
+ name: "RSASSA-PKCS1-v1_5",
3214
+ hash: "SHA-256"
3215
+ },
3216
+ true,
3217
+ ["verify"]
3218
+ );
3219
+ const signatureArray = Uint8Array.from(atob(signature), (c) => c.charCodeAt(0));
3220
+ const dataArray = new TextEncoder().encode(JSON.stringify(inputsOrdered));
3221
+ return await crypto.subtle.verify("RSASSA-PKCS1-v1_5", publicKey, signatureArray, dataArray);
3222
+ } catch (error) {
3223
+ console.error(error);
3224
+ return false;
3225
+ }
3226
+ }
3227
+
3228
+ // src/server.ts
3229
+ var inputSchema = T.Object({
3230
+ stateId: T.String(),
3231
+ eventName: T.String(),
3232
+ eventPayload: T.Record(T.String(), T.Any()),
3233
+ authToken: T.String(),
3234
+ settings: T.Record(T.String(), T.Any()),
3235
+ ref: T.String(),
3236
+ signature: T.String()
3237
+ });
3238
+ function createPlugin(handler2, manifest, options) {
3239
+ const pluginOptions = {
3240
+ kernelPublicKey: options?.kernelPublicKey || KERNEL_PUBLIC_KEY,
3241
+ logLevel: options?.logLevel || LOG_LEVEL.INFO,
3242
+ postCommentOnError: options?.postCommentOnError || true,
3243
+ settingsSchema: options?.settingsSchema,
3244
+ envSchema: options?.envSchema
3245
+ };
3246
+ const app = new Hono();
3247
+ app.get("/manifest.json", (ctx) => {
3248
+ return ctx.json(manifest);
3249
+ });
3250
+ app.post("/", async (ctx) => {
3251
+ if (ctx.req.header("content-type") !== "application/json") {
3252
+ throw new HTTPException(400, { message: "Content-Type must be application/json" });
3253
+ }
3254
+ const body = await ctx.req.json();
3255
+ const inputSchemaErrors = [...Value.Errors(inputSchema, body)];
3256
+ if (inputSchemaErrors.length) {
3257
+ console.dir(inputSchemaErrors, { depth: null });
3258
+ throw new HTTPException(400, { message: "Invalid body" });
3259
+ }
3260
+ const inputs = Value.Decode(inputSchema, body);
3261
+ const signature = inputs.signature;
3262
+ if (!await verifySignature(pluginOptions.kernelPublicKey, inputs, signature)) {
3263
+ throw new HTTPException(400, { message: "Invalid signature" });
3264
+ }
3265
+ let config2;
3266
+ if (pluginOptions.settingsSchema) {
3267
+ try {
3268
+ config2 = Value.Decode(pluginOptions.settingsSchema, Value.Default(pluginOptions.settingsSchema, inputs.settings));
3269
+ } catch (e) {
3270
+ console.dir(...Value.Errors(pluginOptions.settingsSchema, inputs.settings), { depth: null });
3271
+ throw e;
3272
+ }
3273
+ } else {
3274
+ config2 = inputs.settings;
3275
+ }
3276
+ let env;
3277
+ const honoEnvironment = honoEnv(ctx);
3278
+ if (pluginOptions.envSchema) {
3279
+ try {
3280
+ env = Value.Decode(pluginOptions.envSchema, Value.Default(pluginOptions.envSchema, honoEnvironment));
3281
+ } catch (e) {
3282
+ console.dir(...Value.Errors(pluginOptions.envSchema, honoEnvironment), { depth: null });
3283
+ throw e;
3284
+ }
3285
+ } else {
3286
+ env = ctx.env;
3287
+ }
3288
+ const context2 = {
3289
+ eventName: inputs.eventName,
3290
+ payload: inputs.eventPayload,
3291
+ octokit: new customOctokit({ auth: inputs.authToken }),
3292
+ config: config2,
3293
+ env,
3294
+ logger: new Logs(pluginOptions.logLevel)
3295
+ };
3296
+ try {
3297
+ const result = await handler2(context2);
3298
+ return ctx.json({ stateId: inputs.stateId, output: result });
3299
+ } catch (error) {
3300
+ console.error(error);
3301
+ let loggerError;
3302
+ if (error instanceof Error) {
3303
+ loggerError = context2.logger.error(`Error: ${error}`, { error });
3304
+ } else if (error instanceof LogReturn) {
3305
+ loggerError = error;
3306
+ } else {
3307
+ loggerError = context2.logger.error(`Error: ${error}`);
3308
+ }
3309
+ if (pluginOptions.postCommentOnError && loggerError) {
3310
+ await postComment(context2, loggerError);
3311
+ }
3312
+ throw new HTTPException(500, { message: "Unexpected error" });
3313
+ }
3314
+ });
3315
+ return app;
3316
+ }
3317
+
3318
+ // src/actions.ts
3319
+ import * as core from "@actions/core";
3320
+ import * as github from "@actions/github";
3321
+ import { Type as T2 } from "@sinclair/typebox";
3322
+ import { Value as Value2 } from "@sinclair/typebox/value";
3323
+ import { LOG_LEVEL as LOG_LEVEL2, LogReturn as LogReturn2, Logs as Logs2 } from "@ubiquity-os/ubiquity-os-logger";
3324
+ import { config } from "dotenv";
3325
+ config();
3326
+ var inputSchema2 = T2.Object({
3327
+ stateId: T2.String(),
3328
+ eventName: T2.String(),
3329
+ eventPayload: T2.String(),
3330
+ authToken: T2.String(),
3331
+ settings: T2.String(),
3332
+ ref: T2.String(),
3333
+ signature: T2.String()
3334
+ });
3335
+ async function createActionsPlugin(handler2, options) {
3336
+ const pluginOptions = {
3337
+ logLevel: options?.logLevel || LOG_LEVEL2.INFO,
3338
+ postCommentOnError: options?.postCommentOnError || true,
3339
+ settingsSchema: options?.settingsSchema,
3340
+ envSchema: options?.envSchema,
3341
+ kernelPublicKey: options?.kernelPublicKey || KERNEL_PUBLIC_KEY
3342
+ };
3343
+ const pluginGithubToken = process.env.PLUGIN_GITHUB_TOKEN;
3344
+ if (!pluginGithubToken) {
3345
+ core.setFailed("Error: PLUGIN_GITHUB_TOKEN env is not set");
3346
+ return;
3347
+ }
3348
+ const inputs = Value2.Decode(inputSchema2, github.context.payload.inputs);
3349
+ const signature = inputs.signature;
3350
+ if (!await verifySignature(pluginOptions.kernelPublicKey, inputs, signature)) {
3351
+ core.setFailed(`Error: Invalid signature`);
3352
+ return;
3353
+ }
3354
+ let config2;
3355
+ if (pluginOptions.settingsSchema) {
3356
+ try {
3357
+ config2 = Value2.Decode(pluginOptions.settingsSchema, Value2.Default(pluginOptions.settingsSchema, JSON.parse(inputs.settings)));
3358
+ } catch (e) {
3359
+ console.dir(...Value2.Errors(pluginOptions.settingsSchema, JSON.parse(inputs.settings)), { depth: null });
3360
+ throw e;
3361
+ }
3362
+ } else {
3363
+ config2 = JSON.parse(inputs.settings);
3364
+ }
3365
+ let env;
3366
+ if (pluginOptions.envSchema) {
3367
+ try {
3368
+ env = Value2.Decode(pluginOptions.envSchema, Value2.Default(pluginOptions.envSchema, process.env));
3369
+ } catch (e) {
3370
+ console.dir(...Value2.Errors(pluginOptions.envSchema, process.env), { depth: null });
3371
+ throw e;
3372
+ }
3373
+ } else {
3374
+ env = process.env;
3375
+ }
3376
+ const context2 = {
3377
+ eventName: inputs.eventName,
3378
+ payload: JSON.parse(inputs.eventPayload),
3379
+ octokit: new customOctokit({ auth: inputs.authToken }),
3380
+ config: config2,
3381
+ env,
3382
+ logger: new Logs2(pluginOptions.logLevel)
3383
+ };
3384
+ try {
3385
+ const result = await handler2(context2);
3386
+ core.setOutput("result", result);
3387
+ await returnDataToKernel(pluginGithubToken, inputs.stateId, result);
3388
+ } catch (error) {
3389
+ console.error(error);
3390
+ let loggerError;
3391
+ if (error instanceof Error) {
3392
+ core.setFailed(error);
3393
+ loggerError = context2.logger.error(`Error: ${error}`, { error });
3394
+ } else if (error instanceof LogReturn2) {
3395
+ core.setFailed(error.logMessage.raw);
3396
+ loggerError = error;
3397
+ } else {
3398
+ core.setFailed(`Error: ${error}`);
3399
+ loggerError = context2.logger.error(`Error: ${error}`);
3400
+ }
3401
+ if (pluginOptions.postCommentOnError && loggerError) {
3402
+ await postErrorComment(context2, loggerError);
3403
+ }
3404
+ }
3405
+ }
3406
+ async function postErrorComment(context2, error) {
3407
+ if ("issue" in context2.payload && context2.payload.repository?.owner?.login) {
3408
+ await context2.octokit.rest.issues.createComment({
3409
+ owner: context2.payload.repository.owner.login,
3410
+ repo: context2.payload.repository.name,
3411
+ issue_number: context2.payload.issue.number,
3412
+ body: `${error.logMessage.diff}
3413
+ <!--
3414
+ ${getGithubWorkflowRunUrl()}
3415
+ ${sanitizeMetadata(error.metadata)}
3416
+ -->`
3417
+ });
3418
+ } else {
3419
+ context2.logger.info("Cannot post error comment because issue is not found in the payload");
3420
+ }
3421
+ }
3422
+ function getGithubWorkflowRunUrl() {
3423
+ return `${github.context.payload.repository?.html_url}/actions/runs/${github.context.runId}`;
3424
+ }
3425
+ async function returnDataToKernel(repoToken, stateId, output) {
3426
+ const octokit = new customOctokit({ auth: repoToken });
3427
+ await octokit.rest.repos.createDispatchEvent({
3428
+ owner: github.context.repo.owner,
3429
+ repo: github.context.repo.repo,
3430
+ event_type: "return-data-to-ubiquity-os-kernel",
3431
+ client_payload: {
3432
+ state_id: stateId,
3433
+ output: output ? JSON.stringify(output) : null
3434
+ }
3435
+ });
3436
+ }
3437
+ export {
3438
+ BOT_USER_ID,
3439
+ CONFIG_FULL_PATH,
3440
+ CONFIG_ORG_REPO,
3441
+ DEV_CONFIG_FULL_PATH,
3442
+ KERNEL_APP_ID,
3443
+ KERNEL_PUBLIC_KEY,
3444
+ createActionsPlugin,
3445
+ createPlugin,
3446
+ postComment
3447
+ };