github.com/jfrog/frogbot@v1.1.1-0.20231221090046-821a26f50338/action/node_modules/@octokit/core/dist-src/index.js (about) 1 import { getUserAgent } from "universal-user-agent"; 2 import { Collection } from "before-after-hook"; 3 import { request } from "@octokit/request"; 4 import { withCustomRequest } from "@octokit/graphql"; 5 import { createTokenAuth } from "@octokit/auth-token"; 6 import { VERSION } from "./version"; 7 export class Octokit { 8 constructor(options = {}) { 9 const hook = new Collection(); 10 const requestDefaults = { 11 baseUrl: request.endpoint.DEFAULTS.baseUrl, 12 headers: {}, 13 request: Object.assign({}, options.request, { 14 // @ts-ignore internal usage only, no need to type 15 hook: hook.bind(null, "request"), 16 }), 17 mediaType: { 18 previews: [], 19 format: "", 20 }, 21 }; 22 // prepend default user agent with `options.userAgent` if set 23 requestDefaults.headers["user-agent"] = [ 24 options.userAgent, 25 `octokit-core.js/${VERSION} ${getUserAgent()}`, 26 ] 27 .filter(Boolean) 28 .join(" "); 29 if (options.baseUrl) { 30 requestDefaults.baseUrl = options.baseUrl; 31 } 32 if (options.previews) { 33 requestDefaults.mediaType.previews = options.previews; 34 } 35 if (options.timeZone) { 36 requestDefaults.headers["time-zone"] = options.timeZone; 37 } 38 this.request = request.defaults(requestDefaults); 39 this.graphql = withCustomRequest(this.request).defaults(requestDefaults); 40 this.log = Object.assign({ 41 debug: () => { }, 42 info: () => { }, 43 warn: console.warn.bind(console), 44 error: console.error.bind(console), 45 }, options.log); 46 this.hook = hook; 47 // (1) If neither `options.authStrategy` nor `options.auth` are set, the `octokit` instance 48 // is unauthenticated. The `this.auth()` method is a no-op and no request hook is registered. 49 // (2) If only `options.auth` is set, use the default token authentication strategy. 50 // (3) If `options.authStrategy` is set then use it and pass in `options.auth`. Always pass own request as many strategies accept a custom request instance. 51 // TODO: type `options.auth` based on `options.authStrategy`. 52 if (!options.authStrategy) { 53 if (!options.auth) { 54 // (1) 55 this.auth = async () => ({ 56 type: "unauthenticated", 57 }); 58 } 59 else { 60 // (2) 61 const auth = createTokenAuth(options.auth); 62 // @ts-ignore ¯\_(ツ)_/¯ 63 hook.wrap("request", auth.hook); 64 this.auth = auth; 65 } 66 } 67 else { 68 const { authStrategy, ...otherOptions } = options; 69 const auth = authStrategy(Object.assign({ 70 request: this.request, 71 log: this.log, 72 // we pass the current octokit instance as well as its constructor options 73 // to allow for authentication strategies that return a new octokit instance 74 // that shares the same internal state as the current one. The original 75 // requirement for this was the "event-octokit" authentication strategy 76 // of https://github.com/probot/octokit-auth-probot. 77 octokit: this, 78 octokitOptions: otherOptions, 79 }, options.auth)); 80 // @ts-ignore ¯\_(ツ)_/¯ 81 hook.wrap("request", auth.hook); 82 this.auth = auth; 83 } 84 // apply plugins 85 // https://stackoverflow.com/a/16345172 86 const classConstructor = this.constructor; 87 classConstructor.plugins.forEach((plugin) => { 88 Object.assign(this, plugin(this, options)); 89 }); 90 } 91 static defaults(defaults) { 92 const OctokitWithDefaults = class extends this { 93 constructor(...args) { 94 const options = args[0] || {}; 95 if (typeof defaults === "function") { 96 super(defaults(options)); 97 return; 98 } 99 super(Object.assign({}, defaults, options, options.userAgent && defaults.userAgent 100 ? { 101 userAgent: `${options.userAgent} ${defaults.userAgent}`, 102 } 103 : null)); 104 } 105 }; 106 return OctokitWithDefaults; 107 } 108 /** 109 * Attach a plugin (or many) to your Octokit instance. 110 * 111 * @example 112 * const API = Octokit.plugin(plugin1, plugin2, plugin3, ...) 113 */ 114 static plugin(...newPlugins) { 115 var _a; 116 const currentPlugins = this.plugins; 117 const NewOctokit = (_a = class extends this { 118 }, 119 _a.plugins = currentPlugins.concat(newPlugins.filter((plugin) => !currentPlugins.includes(plugin))), 120 _a); 121 return NewOctokit; 122 } 123 } 124 Octokit.VERSION = VERSION; 125 Octokit.plugins = [];