Greasy Fork

来自缓存

berx

Codeberg extensions. Also works for other forgejo and gitea hosts.

当前为 2023-09-14 提交的版本,查看 最新版本

// ==UserScript==
// @name        berx
// @namespace   Taywee
// @description Codeberg extensions.  Also works for other forgejo and gitea hosts.
// @match       https://codeberg.org/*
// @version     1.0.0
// @author      Taylor C. Richberger
// @homepageURL https://codeberg.org/Taywee/berx
// @license     MPL-2.0
// ==/UserScript==

(function () {
'use strict';

function _setPrototypeOf(o, p) {
  _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) {
    o.__proto__ = p;
    return o;
  };
  return _setPrototypeOf(o, p);
}

function _inherits(subClass, superClass) {
  if (typeof superClass !== "function" && superClass !== null) {
    throw new TypeError("Super expression must either be null or a function");
  }
  subClass.prototype = Object.create(superClass && superClass.prototype, {
    constructor: {
      value: subClass,
      writable: true,
      configurable: true
    }
  });
  Object.defineProperty(subClass, "prototype", {
    writable: false
  });
  if (superClass) _setPrototypeOf(subClass, superClass);
}

function _extends() {
  _extends = Object.assign ? Object.assign.bind() : function (target) {
    for (var i = 1; i < arguments.length; i++) {
      var source = arguments[i];
      for (var key in source) {
        if (Object.prototype.hasOwnProperty.call(source, key)) {
          target[key] = source[key];
        }
      }
    }
    return target;
  };
  return _extends.apply(this, arguments);
}

/* tslint:disable */
/* eslint-disable */
/**
 * Gitea API.
 * This documentation describes the Gitea API.
 *
 * The version of the OpenAPI document: 1.20.4
 * 
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */

const BASE_PATH = "/api/v1".replace(/\/+$/, "");
class Configuration {
  constructor(configuration = {}) {
    this.configuration = configuration;
  }
  set config(configuration) {
    this.configuration = configuration;
  }
  get basePath() {
    return this.configuration.basePath != null ? this.configuration.basePath : BASE_PATH;
  }
  get fetchApi() {
    return this.configuration.fetchApi;
  }
  get middleware() {
    return this.configuration.middleware || [];
  }
  get queryParamsStringify() {
    return this.configuration.queryParamsStringify || querystring;
  }
  get username() {
    return this.configuration.username;
  }
  get password() {
    return this.configuration.password;
  }
  get apiKey() {
    const apiKey = this.configuration.apiKey;
    if (apiKey) {
      return typeof apiKey === 'function' ? apiKey : () => apiKey;
    }
    return undefined;
  }
  get accessToken() {
    const accessToken = this.configuration.accessToken;
    if (accessToken) {
      return typeof accessToken === 'function' ? accessToken : async () => accessToken;
    }
    return undefined;
  }
  get headers() {
    return this.configuration.headers;
  }
  get credentials() {
    return this.configuration.credentials;
  }
}
const DefaultConfig = new Configuration();

/**
 * This is the base class for all generated API classes.
 */
class BaseAPI {
  constructor(configuration = DefaultConfig) {
    this.fetchApi = async (url, init) => {
      let fetchParams = {
        url,
        init
      };
      for (const middleware of this.middleware) {
        if (middleware.pre) {
          fetchParams = (await middleware.pre(_extends({
            fetch: this.fetchApi
          }, fetchParams))) || fetchParams;
        }
      }
      let response = undefined;
      try {
        response = await (this.configuration.fetchApi || fetch)(fetchParams.url, fetchParams.init);
      } catch (e) {
        for (const middleware of this.middleware) {
          if (middleware.onError) {
            response = (await middleware.onError({
              fetch: this.fetchApi,
              url: fetchParams.url,
              init: fetchParams.init,
              error: e,
              response: response ? response.clone() : undefined
            })) || response;
          }
        }
        if (response === undefined) {
          if (e instanceof Error) {
            throw new FetchError(e, 'The request failed and the interceptors did not return an alternative response');
          } else {
            throw e;
          }
        }
      }
      for (const middleware of this.middleware) {
        if (middleware.post) {
          response = (await middleware.post({
            fetch: this.fetchApi,
            url: fetchParams.url,
            init: fetchParams.init,
            response: response.clone()
          })) || response;
        }
      }
      return response;
    };
    this.configuration = configuration;
    this.middleware = configuration.middleware;
  }
  withMiddleware(...middlewares) {
    const next = this.clone();
    next.middleware = next.middleware.concat(...middlewares);
    return next;
  }
  withPreMiddleware(...preMiddlewares) {
    const middlewares = preMiddlewares.map(pre => ({
      pre
    }));
    return this.withMiddleware(...middlewares);
  }
  withPostMiddleware(...postMiddlewares) {
    const middlewares = postMiddlewares.map(post => ({
      post
    }));
    return this.withMiddleware(...middlewares);
  }

  /**
   * Check if the given MIME is a JSON MIME.
   * JSON MIME examples:
   *   application/json
   *   application/json; charset=UTF8
   *   APPLICATION/JSON
   *   application/vnd.company+json
   * @param mime - MIME (Multipurpose Internet Mail Extensions)
   * @return True if the given MIME is JSON, false otherwise.
   */
  isJsonMime(mime) {
    if (!mime) {
      return false;
    }
    return BaseAPI.jsonRegex.test(mime);
  }
  async request(context, initOverrides) {
    const {
      url,
      init
    } = await this.createFetchParams(context, initOverrides);
    const response = await this.fetchApi(url, init);
    if (response && response.status >= 200 && response.status < 300) {
      return response;
    }
    throw new ResponseError(response, 'Response returned an error code');
  }
  async createFetchParams(context, initOverrides) {
    let url = this.configuration.basePath + context.path;
    if (context.query !== undefined && Object.keys(context.query).length !== 0) {
      // only add the querystring to the URL if there are query parameters.
      // this is done to avoid urls ending with a "?" character which buggy webservers
      // do not handle correctly sometimes.
      url += '?' + this.configuration.queryParamsStringify(context.query);
    }
    const headers = Object.assign({}, this.configuration.headers, context.headers);
    Object.keys(headers).forEach(key => headers[key] === undefined ? delete headers[key] : {});
    const initOverrideFn = typeof initOverrides === "function" ? initOverrides : async () => initOverrides;
    const initParams = {
      method: context.method,
      headers,
      body: context.body,
      credentials: this.configuration.credentials
    };
    const overriddenInit = _extends({}, initParams, await initOverrideFn({
      init: initParams,
      context
    }));
    let body;
    if (isFormData(overriddenInit.body) || overriddenInit.body instanceof URLSearchParams || isBlob(overriddenInit.body)) {
      body = overriddenInit.body;
    } else if (this.isJsonMime(headers['Content-Type'])) {
      body = JSON.stringify(overriddenInit.body);
    } else {
      body = overriddenInit.body;
    }
    const init = _extends({}, overriddenInit, {
      body
    });
    return {
      url,
      init
    };
  }
  /**
   * Create a shallow clone of `this` by constructing a new instance
   * and then shallow cloning data members.
   */
  clone() {
    const constructor = this.constructor;
    const next = new constructor(this.configuration);
    next.middleware = this.middleware.slice();
    return next;
  }
}
BaseAPI.jsonRegex = new RegExp('^(:?application\/json|[^;/ \t]+\/[^;/ \t]+[+]json)[ \t]*(:?;.*)?$', 'i');
function isBlob(value) {
  return typeof Blob !== 'undefined' && value instanceof Blob;
}
function isFormData(value) {
  return typeof FormData !== "undefined" && value instanceof FormData;
}
class ResponseError extends Error {
  constructor(response, msg) {
    super(msg);
    this.name = "ResponseError";
    this.response = response;
  }
}
class FetchError extends Error {
  constructor(cause, msg) {
    super(msg);
    this.name = "FetchError";
    this.cause = cause;
  }
}
class RequiredError extends Error {
  constructor(field, msg) {
    super(msg);
    this.name = "RequiredError";
    this.field = field;
  }
}
function exists(json, key) {
  const value = json[key];
  return value !== null && value !== undefined;
}
function querystring(params, prefix = '') {
  return Object.keys(params).map(key => querystringSingleKey(key, params[key], prefix)).filter(part => part.length > 0).join('&');
}
function querystringSingleKey(key, value, keyPrefix = '') {
  const fullKey = keyPrefix + (keyPrefix.length ? `[${key}]` : key);
  if (value instanceof Array) {
    const multiValue = value.map(singleValue => encodeURIComponent(String(singleValue))).join(`&${encodeURIComponent(fullKey)}=`);
    return `${encodeURIComponent(fullKey)}=${multiValue}`;
  }
  if (value instanceof Set) {
    const valueAsArray = Array.from(value);
    return querystringSingleKey(key, valueAsArray, keyPrefix);
  }
  if (value instanceof Date) {
    return `${encodeURIComponent(fullKey)}=${encodeURIComponent(value.toISOString())}`;
  }
  if (value instanceof Object) {
    return querystring(value, fullKey);
  }
  return `${encodeURIComponent(fullKey)}=${encodeURIComponent(String(value))}`;
}
function canConsumeForm(consumes) {
  for (const consume of consumes) {
    if ('multipart/form-data' === consume.contentType) {
      return true;
    }
  }
  return false;
}
class JSONApiResponse {
  constructor(raw, transformer = jsonValue => jsonValue) {
    this.raw = raw;
    this.transformer = transformer;
  }
  async value() {
    return this.transformer(await this.raw.json());
  }
}
class VoidApiResponse {
  constructor(raw) {
    this.raw = raw;
  }
  async value() {
    return undefined;
  }
}
class TextApiResponse {
  constructor(raw) {
    this.raw = raw;
  }
  async value() {
    return await this.raw.text();
  }
}

/* tslint:disable */
/* eslint-disable */
/**
 * Gitea API.
 * This documentation describes the Gitea API.
 *
 * The version of the OpenAPI document: 1.20.4
 * 
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */

function AttachmentFromJSON(json) {
  return AttachmentFromJSONTyped(json);
}
function AttachmentFromJSONTyped(json, ignoreDiscriminator) {
  if (json === undefined || json === null) {
    return json;
  }
  return {
    'browserDownloadUrl': !exists(json, 'browser_download_url') ? undefined : json['browser_download_url'],
    'createdAt': !exists(json, 'created_at') ? undefined : new Date(json['created_at']),
    'downloadCount': !exists(json, 'download_count') ? undefined : json['download_count'],
    'id': !exists(json, 'id') ? undefined : json['id'],
    'name': !exists(json, 'name') ? undefined : json['name'],
    'size': !exists(json, 'size') ? undefined : json['size'],
    'uuid': !exists(json, 'uuid') ? undefined : json['uuid']
  };
}

/* tslint:disable */
/* eslint-disable */
/**
 * Gitea API.
 * This documentation describes the Gitea API.
 *
 * The version of the OpenAPI document: 1.20.4
 * 
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */

function UserFromJSON(json) {
  return UserFromJSONTyped(json);
}
function UserFromJSONTyped(json, ignoreDiscriminator) {
  if (json === undefined || json === null) {
    return json;
  }
  return {
    'active': !exists(json, 'active') ? undefined : json['active'],
    'avatarUrl': !exists(json, 'avatar_url') ? undefined : json['avatar_url'],
    'created': !exists(json, 'created') ? undefined : new Date(json['created']),
    'description': !exists(json, 'description') ? undefined : json['description'],
    'email': !exists(json, 'email') ? undefined : json['email'],
    'followersCount': !exists(json, 'followers_count') ? undefined : json['followers_count'],
    'followingCount': !exists(json, 'following_count') ? undefined : json['following_count'],
    'fullName': !exists(json, 'full_name') ? undefined : json['full_name'],
    'id': !exists(json, 'id') ? undefined : json['id'],
    'isAdmin': !exists(json, 'is_admin') ? undefined : json['is_admin'],
    'language': !exists(json, 'language') ? undefined : json['language'],
    'lastLogin': !exists(json, 'last_login') ? undefined : new Date(json['last_login']),
    'location': !exists(json, 'location') ? undefined : json['location'],
    'login': !exists(json, 'login') ? undefined : json['login'],
    'loginName': !exists(json, 'login_name') ? undefined : json['login_name'],
    'prohibitLogin': !exists(json, 'prohibit_login') ? undefined : json['prohibit_login'],
    'restricted': !exists(json, 'restricted') ? undefined : json['restricted'],
    'starredReposCount': !exists(json, 'starred_repos_count') ? undefined : json['starred_repos_count'],
    'visibility': !exists(json, 'visibility') ? undefined : json['visibility'],
    'website': !exists(json, 'website') ? undefined : json['website']
  };
}

/* tslint:disable */
/* eslint-disable */
/**
 * Gitea API.
 * This documentation describes the Gitea API.
 *
 * The version of the OpenAPI document: 1.20.4
 * 
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */

function CommentFromJSON(json) {
  return CommentFromJSONTyped(json);
}
function CommentFromJSONTyped(json, ignoreDiscriminator) {
  if (json === undefined || json === null) {
    return json;
  }
  return {
    'assets': !exists(json, 'assets') ? undefined : json['assets'].map(AttachmentFromJSON),
    'body': !exists(json, 'body') ? undefined : json['body'],
    'createdAt': !exists(json, 'created_at') ? undefined : new Date(json['created_at']),
    'htmlUrl': !exists(json, 'html_url') ? undefined : json['html_url'],
    'id': !exists(json, 'id') ? undefined : json['id'],
    'issueUrl': !exists(json, 'issue_url') ? undefined : json['issue_url'],
    'originalAuthor': !exists(json, 'original_author') ? undefined : json['original_author'],
    'originalAuthorId': !exists(json, 'original_author_id') ? undefined : json['original_author_id'],
    'pullRequestUrl': !exists(json, 'pull_request_url') ? undefined : json['pull_request_url'],
    'updatedAt': !exists(json, 'updated_at') ? undefined : new Date(json['updated_at']),
    'user': !exists(json, 'user') ? undefined : UserFromJSON(json['user'])
  };
}

/* tslint:disable */
/* eslint-disable */
/**
 * Gitea API.
 * This documentation describes the Gitea API.
 *
 * The version of the OpenAPI document: 1.20.4
 * 
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */

function ExternalTrackerFromJSON(json) {
  return ExternalTrackerFromJSONTyped(json);
}
function ExternalTrackerFromJSONTyped(json, ignoreDiscriminator) {
  if (json === undefined || json === null) {
    return json;
  }
  return {
    'externalTrackerFormat': !exists(json, 'external_tracker_format') ? undefined : json['external_tracker_format'],
    'externalTrackerRegexpPattern': !exists(json, 'external_tracker_regexp_pattern') ? undefined : json['external_tracker_regexp_pattern'],
    'externalTrackerStyle': !exists(json, 'external_tracker_style') ? undefined : json['external_tracker_style'],
    'externalTrackerUrl': !exists(json, 'external_tracker_url') ? undefined : json['external_tracker_url']
  };
}
function ExternalTrackerToJSON(value) {
  if (value === undefined) {
    return undefined;
  }
  if (value === null) {
    return null;
  }
  return {
    'external_tracker_format': value.externalTrackerFormat,
    'external_tracker_regexp_pattern': value.externalTrackerRegexpPattern,
    'external_tracker_style': value.externalTrackerStyle,
    'external_tracker_url': value.externalTrackerUrl
  };
}

/* tslint:disable */
/* eslint-disable */
/**
 * Gitea API.
 * This documentation describes the Gitea API.
 *
 * The version of the OpenAPI document: 1.20.4
 * 
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */

function ExternalWikiFromJSON(json) {
  return ExternalWikiFromJSONTyped(json);
}
function ExternalWikiFromJSONTyped(json, ignoreDiscriminator) {
  if (json === undefined || json === null) {
    return json;
  }
  return {
    'externalWikiUrl': !exists(json, 'external_wiki_url') ? undefined : json['external_wiki_url']
  };
}
function ExternalWikiToJSON(value) {
  if (value === undefined) {
    return undefined;
  }
  if (value === null) {
    return null;
  }
  return {
    'external_wiki_url': value.externalWikiUrl
  };
}

/* tslint:disable */
/* eslint-disable */
/**
 * Gitea API.
 * This documentation describes the Gitea API.
 *
 * The version of the OpenAPI document: 1.20.4
 * 
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */

function InternalTrackerFromJSON(json) {
  return InternalTrackerFromJSONTyped(json);
}
function InternalTrackerFromJSONTyped(json, ignoreDiscriminator) {
  if (json === undefined || json === null) {
    return json;
  }
  return {
    'allowOnlyContributorsToTrackTime': !exists(json, 'allow_only_contributors_to_track_time') ? undefined : json['allow_only_contributors_to_track_time'],
    'enableIssueDependencies': !exists(json, 'enable_issue_dependencies') ? undefined : json['enable_issue_dependencies'],
    'enableTimeTracker': !exists(json, 'enable_time_tracker') ? undefined : json['enable_time_tracker']
  };
}
function InternalTrackerToJSON(value) {
  if (value === undefined) {
    return undefined;
  }
  if (value === null) {
    return null;
  }
  return {
    'allow_only_contributors_to_track_time': value.allowOnlyContributorsToTrackTime,
    'enable_issue_dependencies': value.enableIssueDependencies,
    'enable_time_tracker': value.enableTimeTracker
  };
}

/* tslint:disable */
/* eslint-disable */
/**
 * Gitea API.
 * This documentation describes the Gitea API.
 *
 * The version of the OpenAPI document: 1.20.4
 * 
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */

function PermissionFromJSON(json) {
  return PermissionFromJSONTyped(json);
}
function PermissionFromJSONTyped(json, ignoreDiscriminator) {
  if (json === undefined || json === null) {
    return json;
  }
  return {
    'admin': !exists(json, 'admin') ? undefined : json['admin'],
    'pull': !exists(json, 'pull') ? undefined : json['pull'],
    'push': !exists(json, 'push') ? undefined : json['push']
  };
}

/* tslint:disable */
/* eslint-disable */
/**
 * Gitea API.
 * This documentation describes the Gitea API.
 *
 * The version of the OpenAPI document: 1.20.4
 * 
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */

function OrganizationFromJSON(json) {
  return OrganizationFromJSONTyped(json);
}
function OrganizationFromJSONTyped(json, ignoreDiscriminator) {
  if (json === undefined || json === null) {
    return json;
  }
  return {
    'avatarUrl': !exists(json, 'avatar_url') ? undefined : json['avatar_url'],
    'description': !exists(json, 'description') ? undefined : json['description'],
    'fullName': !exists(json, 'full_name') ? undefined : json['full_name'],
    'id': !exists(json, 'id') ? undefined : json['id'],
    'location': !exists(json, 'location') ? undefined : json['location'],
    'name': !exists(json, 'name') ? undefined : json['name'],
    'repoAdminChangeTeamAccess': !exists(json, 'repo_admin_change_team_access') ? undefined : json['repo_admin_change_team_access'],
    'username': !exists(json, 'username') ? undefined : json['username'],
    'visibility': !exists(json, 'visibility') ? undefined : json['visibility'],
    'website': !exists(json, 'website') ? undefined : json['website']
  };
}

/* tslint:disable */
/* eslint-disable */
/**
 * Gitea API.
 * This documentation describes the Gitea API.
 *
 * The version of the OpenAPI document: 1.20.4
 * 
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */

function TeamFromJSON(json) {
  return TeamFromJSONTyped(json);
}
function TeamFromJSONTyped(json, ignoreDiscriminator) {
  if (json === undefined || json === null) {
    return json;
  }
  return {
    'canCreateOrgRepo': !exists(json, 'can_create_org_repo') ? undefined : json['can_create_org_repo'],
    'description': !exists(json, 'description') ? undefined : json['description'],
    'id': !exists(json, 'id') ? undefined : json['id'],
    'includesAllRepositories': !exists(json, 'includes_all_repositories') ? undefined : json['includes_all_repositories'],
    'name': !exists(json, 'name') ? undefined : json['name'],
    'organization': !exists(json, 'organization') ? undefined : OrganizationFromJSON(json['organization']),
    'permission': !exists(json, 'permission') ? undefined : json['permission'],
    'units': !exists(json, 'units') ? undefined : json['units'],
    'unitsMap': !exists(json, 'units_map') ? undefined : json['units_map']
  };
}

/* tslint:disable */
/* eslint-disable */
/**
 * Gitea API.
 * This documentation describes the Gitea API.
 *
 * The version of the OpenAPI document: 1.20.4
 * 
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */

function RepoTransferFromJSON(json) {
  return RepoTransferFromJSONTyped(json);
}
function RepoTransferFromJSONTyped(json, ignoreDiscriminator) {
  if (json === undefined || json === null) {
    return json;
  }
  return {
    'doer': !exists(json, 'doer') ? undefined : UserFromJSON(json['doer']),
    'recipient': !exists(json, 'recipient') ? undefined : UserFromJSON(json['recipient']),
    'teams': !exists(json, 'teams') ? undefined : json['teams'].map(TeamFromJSON)
  };
}

/* tslint:disable */
/* eslint-disable */
/**
 * Gitea API.
 * This documentation describes the Gitea API.
 *
 * The version of the OpenAPI document: 1.20.4
 * 
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */

function RepositoryFromJSON(json) {
  return RepositoryFromJSONTyped(json);
}
function RepositoryFromJSONTyped(json, ignoreDiscriminator) {
  if (json === undefined || json === null) {
    return json;
  }
  return {
    'allowMergeCommits': !exists(json, 'allow_merge_commits') ? undefined : json['allow_merge_commits'],
    'allowRebase': !exists(json, 'allow_rebase') ? undefined : json['allow_rebase'],
    'allowRebaseExplicit': !exists(json, 'allow_rebase_explicit') ? undefined : json['allow_rebase_explicit'],
    'allowRebaseUpdate': !exists(json, 'allow_rebase_update') ? undefined : json['allow_rebase_update'],
    'allowSquashMerge': !exists(json, 'allow_squash_merge') ? undefined : json['allow_squash_merge'],
    'archived': !exists(json, 'archived') ? undefined : json['archived'],
    'archivedAt': !exists(json, 'archived_at') ? undefined : new Date(json['archived_at']),
    'avatarUrl': !exists(json, 'avatar_url') ? undefined : json['avatar_url'],
    'cloneUrl': !exists(json, 'clone_url') ? undefined : json['clone_url'],
    'createdAt': !exists(json, 'created_at') ? undefined : new Date(json['created_at']),
    'defaultAllowMaintainerEdit': !exists(json, 'default_allow_maintainer_edit') ? undefined : json['default_allow_maintainer_edit'],
    'defaultBranch': !exists(json, 'default_branch') ? undefined : json['default_branch'],
    'defaultDeleteBranchAfterMerge': !exists(json, 'default_delete_branch_after_merge') ? undefined : json['default_delete_branch_after_merge'],
    'defaultMergeStyle': !exists(json, 'default_merge_style') ? undefined : json['default_merge_style'],
    'description': !exists(json, 'description') ? undefined : json['description'],
    'empty': !exists(json, 'empty') ? undefined : json['empty'],
    'externalTracker': !exists(json, 'external_tracker') ? undefined : ExternalTrackerFromJSON(json['external_tracker']),
    'externalWiki': !exists(json, 'external_wiki') ? undefined : ExternalWikiFromJSON(json['external_wiki']),
    'fork': !exists(json, 'fork') ? undefined : json['fork'],
    'forksCount': !exists(json, 'forks_count') ? undefined : json['forks_count'],
    'fullName': !exists(json, 'full_name') ? undefined : json['full_name'],
    'hasActions': !exists(json, 'has_actions') ? undefined : json['has_actions'],
    'hasIssues': !exists(json, 'has_issues') ? undefined : json['has_issues'],
    'hasPackages': !exists(json, 'has_packages') ? undefined : json['has_packages'],
    'hasProjects': !exists(json, 'has_projects') ? undefined : json['has_projects'],
    'hasPullRequests': !exists(json, 'has_pull_requests') ? undefined : json['has_pull_requests'],
    'hasReleases': !exists(json, 'has_releases') ? undefined : json['has_releases'],
    'hasWiki': !exists(json, 'has_wiki') ? undefined : json['has_wiki'],
    'htmlUrl': !exists(json, 'html_url') ? undefined : json['html_url'],
    'id': !exists(json, 'id') ? undefined : json['id'],
    'ignoreWhitespaceConflicts': !exists(json, 'ignore_whitespace_conflicts') ? undefined : json['ignore_whitespace_conflicts'],
    'internal': !exists(json, 'internal') ? undefined : json['internal'],
    'internalTracker': !exists(json, 'internal_tracker') ? undefined : InternalTrackerFromJSON(json['internal_tracker']),
    'language': !exists(json, 'language') ? undefined : json['language'],
    'languagesUrl': !exists(json, 'languages_url') ? undefined : json['languages_url'],
    'link': !exists(json, 'link') ? undefined : json['link'],
    'mirror': !exists(json, 'mirror') ? undefined : json['mirror'],
    'mirrorInterval': !exists(json, 'mirror_interval') ? undefined : json['mirror_interval'],
    'mirrorUpdated': !exists(json, 'mirror_updated') ? undefined : new Date(json['mirror_updated']),
    'name': !exists(json, 'name') ? undefined : json['name'],
    'openIssuesCount': !exists(json, 'open_issues_count') ? undefined : json['open_issues_count'],
    'openPrCounter': !exists(json, 'open_pr_counter') ? undefined : json['open_pr_counter'],
    'originalUrl': !exists(json, 'original_url') ? undefined : json['original_url'],
    'owner': !exists(json, 'owner') ? undefined : UserFromJSON(json['owner']),
    'parent': !exists(json, 'parent') ? undefined : RepositoryFromJSON(json['parent']),
    'permissions': !exists(json, 'permissions') ? undefined : PermissionFromJSON(json['permissions']),
    '_private': !exists(json, 'private') ? undefined : json['private'],
    'releaseCounter': !exists(json, 'release_counter') ? undefined : json['release_counter'],
    'repoTransfer': !exists(json, 'repo_transfer') ? undefined : RepoTransferFromJSON(json['repo_transfer']),
    'size': !exists(json, 'size') ? undefined : json['size'],
    'sshUrl': !exists(json, 'ssh_url') ? undefined : json['ssh_url'],
    'starsCount': !exists(json, 'stars_count') ? undefined : json['stars_count'],
    'template': !exists(json, 'template') ? undefined : json['template'],
    'updatedAt': !exists(json, 'updated_at') ? undefined : new Date(json['updated_at']),
    'watchersCount': !exists(json, 'watchers_count') ? undefined : json['watchers_count'],
    'website': !exists(json, 'website') ? undefined : json['website']
  };
}

/* tslint:disable */
/* eslint-disable */
/**
 * Gitea API.
 * This documentation describes the Gitea API.
 *
 * The version of the OpenAPI document: 1.20.4
 * 
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */

function ActivityFromJSON(json) {
  return ActivityFromJSONTyped(json);
}
function ActivityFromJSONTyped(json, ignoreDiscriminator) {
  if (json === undefined || json === null) {
    return json;
  }
  return {
    'actUser': !exists(json, 'act_user') ? undefined : UserFromJSON(json['act_user']),
    'actUserId': !exists(json, 'act_user_id') ? undefined : json['act_user_id'],
    'comment': !exists(json, 'comment') ? undefined : CommentFromJSON(json['comment']),
    'commentId': !exists(json, 'comment_id') ? undefined : json['comment_id'],
    'content': !exists(json, 'content') ? undefined : json['content'],
    'created': !exists(json, 'created') ? undefined : new Date(json['created']),
    'id': !exists(json, 'id') ? undefined : json['id'],
    'isPrivate': !exists(json, 'is_private') ? undefined : json['is_private'],
    'opType': !exists(json, 'op_type') ? undefined : json['op_type'],
    'refName': !exists(json, 'ref_name') ? undefined : json['ref_name'],
    'repo': !exists(json, 'repo') ? undefined : RepositoryFromJSON(json['repo']),
    'repoId': !exists(json, 'repo_id') ? undefined : json['repo_id'],
    'userId': !exists(json, 'user_id') ? undefined : json['user_id']
  };
}

/* tslint:disable */
/* eslint-disable */
/**
 * Gitea API.
 * This documentation describes the Gitea API.
 *
 * The version of the OpenAPI document: 1.20.4
 * 
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */

function AddCollaboratorOptionToJSON(value) {
  if (value === undefined) {
    return undefined;
  }
  if (value === null) {
    return null;
  }
  return {
    'permission': value.permission
  };
}

/* tslint:disable */
/* eslint-disable */
/**
 * Gitea API.
 * This documentation describes the Gitea API.
 *
 * The version of the OpenAPI document: 1.20.4
 * 
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */

function AddTimeOptionToJSON(value) {
  if (value === undefined) {
    return undefined;
  }
  if (value === null) {
    return null;
  }
  return {
    'created': value.created === undefined ? undefined : value.created.toISOString(),
    'time': value.time,
    'user_name': value.userName
  };
}

/* tslint:disable */
/* eslint-disable */
/**
 * Gitea API.
 * This documentation describes the Gitea API.
 *
 * The version of the OpenAPI document: 1.20.4
 * 
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */

function AnnotatedTagObjectFromJSON(json) {
  return AnnotatedTagObjectFromJSONTyped(json);
}
function AnnotatedTagObjectFromJSONTyped(json, ignoreDiscriminator) {
  if (json === undefined || json === null) {
    return json;
  }
  return {
    'sha': !exists(json, 'sha') ? undefined : json['sha'],
    'type': !exists(json, 'type') ? undefined : json['type'],
    'url': !exists(json, 'url') ? undefined : json['url']
  };
}

/* tslint:disable */
/* eslint-disable */
/**
 * Gitea API.
 * This documentation describes the Gitea API.
 *
 * The version of the OpenAPI document: 1.20.4
 * 
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */

function CommitUserFromJSON(json) {
  return CommitUserFromJSONTyped(json);
}
function CommitUserFromJSONTyped(json, ignoreDiscriminator) {
  if (json === undefined || json === null) {
    return json;
  }
  return {
    'date': !exists(json, 'date') ? undefined : json['date'],
    'email': !exists(json, 'email') ? undefined : json['email'],
    'name': !exists(json, 'name') ? undefined : json['name']
  };
}

/* tslint:disable */
/* eslint-disable */
/**
 * Gitea API.
 * This documentation describes the Gitea API.
 *
 * The version of the OpenAPI document: 1.20.4
 * 
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */

function PayloadUserFromJSON(json) {
  return PayloadUserFromJSONTyped(json);
}
function PayloadUserFromJSONTyped(json, ignoreDiscriminator) {
  if (json === undefined || json === null) {
    return json;
  }
  return {
    'email': !exists(json, 'email') ? undefined : json['email'],
    'name': !exists(json, 'name') ? undefined : json['name'],
    'username': !exists(json, 'username') ? undefined : json['username']
  };
}

/* tslint:disable */
/* eslint-disable */
/**
 * Gitea API.
 * This documentation describes the Gitea API.
 *
 * The version of the OpenAPI document: 1.20.4
 * 
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */

function PayloadCommitVerificationFromJSON(json) {
  return PayloadCommitVerificationFromJSONTyped(json);
}
function PayloadCommitVerificationFromJSONTyped(json, ignoreDiscriminator) {
  if (json === undefined || json === null) {
    return json;
  }
  return {
    'payload': !exists(json, 'payload') ? undefined : json['payload'],
    'reason': !exists(json, 'reason') ? undefined : json['reason'],
    'signature': !exists(json, 'signature') ? undefined : json['signature'],
    'signer': !exists(json, 'signer') ? undefined : PayloadUserFromJSON(json['signer']),
    'verified': !exists(json, 'verified') ? undefined : json['verified']
  };
}

/* tslint:disable */
/* eslint-disable */
/**
 * Gitea API.
 * This documentation describes the Gitea API.
 *
 * The version of the OpenAPI document: 1.20.4
 * 
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */

function AnnotatedTagFromJSON(json) {
  return AnnotatedTagFromJSONTyped(json);
}
function AnnotatedTagFromJSONTyped(json, ignoreDiscriminator) {
  if (json === undefined || json === null) {
    return json;
  }
  return {
    'message': !exists(json, 'message') ? undefined : json['message'],
    'object': !exists(json, 'object') ? undefined : AnnotatedTagObjectFromJSON(json['object']),
    'sha': !exists(json, 'sha') ? undefined : json['sha'],
    'tag': !exists(json, 'tag') ? undefined : json['tag'],
    'tagger': !exists(json, 'tagger') ? undefined : CommitUserFromJSON(json['tagger']),
    'url': !exists(json, 'url') ? undefined : json['url'],
    'verification': !exists(json, 'verification') ? undefined : PayloadCommitVerificationFromJSON(json['verification'])
  };
}

/* tslint:disable */
/* eslint-disable */
/**
 * Gitea API.
 * This documentation describes the Gitea API.
 *
 * The version of the OpenAPI document: 1.20.4
 * 
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */

function PayloadCommitFromJSON(json) {
  return PayloadCommitFromJSONTyped(json);
}
function PayloadCommitFromJSONTyped(json, ignoreDiscriminator) {
  if (json === undefined || json === null) {
    return json;
  }
  return {
    'added': !exists(json, 'added') ? undefined : json['added'],
    'author': !exists(json, 'author') ? undefined : PayloadUserFromJSON(json['author']),
    'committer': !exists(json, 'committer') ? undefined : PayloadUserFromJSON(json['committer']),
    'id': !exists(json, 'id') ? undefined : json['id'],
    'message': !exists(json, 'message') ? undefined : json['message'],
    'modified': !exists(json, 'modified') ? undefined : json['modified'],
    'removed': !exists(json, 'removed') ? undefined : json['removed'],
    'timestamp': !exists(json, 'timestamp') ? undefined : new Date(json['timestamp']),
    'url': !exists(json, 'url') ? undefined : json['url'],
    'verification': !exists(json, 'verification') ? undefined : PayloadCommitVerificationFromJSON(json['verification'])
  };
}

/* tslint:disable */
/* eslint-disable */
/**
 * Gitea API.
 * This documentation describes the Gitea API.
 *
 * The version of the OpenAPI document: 1.20.4
 * 
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */

function BranchFromJSON(json) {
  return BranchFromJSONTyped(json);
}
function BranchFromJSONTyped(json, ignoreDiscriminator) {
  if (json === undefined || json === null) {
    return json;
  }
  return {
    'commit': !exists(json, 'commit') ? undefined : PayloadCommitFromJSON(json['commit']),
    'effectiveBranchProtectionName': !exists(json, 'effective_branch_protection_name') ? undefined : json['effective_branch_protection_name'],
    'enableStatusCheck': !exists(json, 'enable_status_check') ? undefined : json['enable_status_check'],
    'name': !exists(json, 'name') ? undefined : json['name'],
    '_protected': !exists(json, 'protected') ? undefined : json['protected'],
    'requiredApprovals': !exists(json, 'required_approvals') ? undefined : json['required_approvals'],
    'statusCheckContexts': !exists(json, 'status_check_contexts') ? undefined : json['status_check_contexts'],
    'userCanMerge': !exists(json, 'user_can_merge') ? undefined : json['user_can_merge'],
    'userCanPush': !exists(json, 'user_can_push') ? undefined : json['user_can_push']
  };
}

/* tslint:disable */
/* eslint-disable */
/**
 * Gitea API.
 * This documentation describes the Gitea API.
 *
 * The version of the OpenAPI document: 1.20.4
 * 
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */

function BranchProtectionFromJSON(json) {
  return BranchProtectionFromJSONTyped(json);
}
function BranchProtectionFromJSONTyped(json, ignoreDiscriminator) {
  if (json === undefined || json === null) {
    return json;
  }
  return {
    'approvalsWhitelistTeams': !exists(json, 'approvals_whitelist_teams') ? undefined : json['approvals_whitelist_teams'],
    'approvalsWhitelistUsername': !exists(json, 'approvals_whitelist_username') ? undefined : json['approvals_whitelist_username'],
    'blockOnOfficialReviewRequests': !exists(json, 'block_on_official_review_requests') ? undefined : json['block_on_official_review_requests'],
    'blockOnOutdatedBranch': !exists(json, 'block_on_outdated_branch') ? undefined : json['block_on_outdated_branch'],
    'blockOnRejectedReviews': !exists(json, 'block_on_rejected_reviews') ? undefined : json['block_on_rejected_reviews'],
    'branchName': !exists(json, 'branch_name') ? undefined : json['branch_name'],
    'createdAt': !exists(json, 'created_at') ? undefined : new Date(json['created_at']),
    'dismissStaleApprovals': !exists(json, 'dismiss_stale_approvals') ? undefined : json['dismiss_stale_approvals'],
    'enableApprovalsWhitelist': !exists(json, 'enable_approvals_whitelist') ? undefined : json['enable_approvals_whitelist'],
    'enableMergeWhitelist': !exists(json, 'enable_merge_whitelist') ? undefined : json['enable_merge_whitelist'],
    'enablePush': !exists(json, 'enable_push') ? undefined : json['enable_push'],
    'enablePushWhitelist': !exists(json, 'enable_push_whitelist') ? undefined : json['enable_push_whitelist'],
    'enableStatusCheck': !exists(json, 'enable_status_check') ? undefined : json['enable_status_check'],
    'mergeWhitelistTeams': !exists(json, 'merge_whitelist_teams') ? undefined : json['merge_whitelist_teams'],
    'mergeWhitelistUsernames': !exists(json, 'merge_whitelist_usernames') ? undefined : json['merge_whitelist_usernames'],
    'protectedFilePatterns': !exists(json, 'protected_file_patterns') ? undefined : json['protected_file_patterns'],
    'pushWhitelistDeployKeys': !exists(json, 'push_whitelist_deploy_keys') ? undefined : json['push_whitelist_deploy_keys'],
    'pushWhitelistTeams': !exists(json, 'push_whitelist_teams') ? undefined : json['push_whitelist_teams'],
    'pushWhitelistUsernames': !exists(json, 'push_whitelist_usernames') ? undefined : json['push_whitelist_usernames'],
    'requireSignedCommits': !exists(json, 'require_signed_commits') ? undefined : json['require_signed_commits'],
    'requiredApprovals': !exists(json, 'required_approvals') ? undefined : json['required_approvals'],
    'ruleName': !exists(json, 'rule_name') ? undefined : json['rule_name'],
    'statusCheckContexts': !exists(json, 'status_check_contexts') ? undefined : json['status_check_contexts'],
    'unprotectedFilePatterns': !exists(json, 'unprotected_file_patterns') ? undefined : json['unprotected_file_patterns'],
    'updatedAt': !exists(json, 'updated_at') ? undefined : new Date(json['updated_at'])
  };
}

/* tslint:disable */
/* eslint-disable */
/**
 * Gitea API.
 * This documentation describes the Gitea API.
 *
 * The version of the OpenAPI document: 1.20.4
 * 
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */

function ChangeFileOperationToJSON(value) {
  if (value === undefined) {
    return undefined;
  }
  if (value === null) {
    return null;
  }
  return {
    'content': value.content,
    'from_path': value.fromPath,
    'operation': value.operation,
    'path': value.path,
    'sha': value.sha
  };
}

/* tslint:disable */
/* eslint-disable */
/**
 * Gitea API.
 * This documentation describes the Gitea API.
 *
 * The version of the OpenAPI document: 1.20.4
 * 
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */

function CommitDateOptionsToJSON(value) {
  if (value === undefined) {
    return undefined;
  }
  if (value === null) {
    return null;
  }
  return {
    'author': value.author === undefined ? undefined : value.author.toISOString(),
    'committer': value.committer === undefined ? undefined : value.committer.toISOString()
  };
}

/* tslint:disable */
/* eslint-disable */
/**
 * Gitea API.
 * This documentation describes the Gitea API.
 *
 * The version of the OpenAPI document: 1.20.4
 * 
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */

function IdentityToJSON(value) {
  if (value === undefined) {
    return undefined;
  }
  if (value === null) {
    return null;
  }
  return {
    'email': value.email,
    'name': value.name
  };
}

/* tslint:disable */
/* eslint-disable */
/**
 * Gitea API.
 * This documentation describes the Gitea API.
 *
 * The version of the OpenAPI document: 1.20.4
 * 
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */

function ChangeFilesOptionsToJSON(value) {
  if (value === undefined) {
    return undefined;
  }
  if (value === null) {
    return null;
  }
  return {
    'author': IdentityToJSON(value.author),
    'branch': value.branch,
    'committer': IdentityToJSON(value.committer),
    'dates': CommitDateOptionsToJSON(value.dates),
    'files': value.files.map(ChangeFileOperationToJSON),
    'message': value.message,
    'new_branch': value.newBranch,
    'signoff': value.signoff
  };
}

/* tslint:disable */
/* eslint-disable */
/**
 * Gitea API.
 * This documentation describes the Gitea API.
 *
 * The version of the OpenAPI document: 1.20.4
 * 
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */

function ChangedFileFromJSON(json) {
  return ChangedFileFromJSONTyped(json);
}
function ChangedFileFromJSONTyped(json, ignoreDiscriminator) {
  if (json === undefined || json === null) {
    return json;
  }
  return {
    'additions': !exists(json, 'additions') ? undefined : json['additions'],
    'changes': !exists(json, 'changes') ? undefined : json['changes'],
    'contentsUrl': !exists(json, 'contents_url') ? undefined : json['contents_url'],
    'deletions': !exists(json, 'deletions') ? undefined : json['deletions'],
    'filename': !exists(json, 'filename') ? undefined : json['filename'],
    'htmlUrl': !exists(json, 'html_url') ? undefined : json['html_url'],
    'previousFilename': !exists(json, 'previous_filename') ? undefined : json['previous_filename'],
    'rawUrl': !exists(json, 'raw_url') ? undefined : json['raw_url'],
    'status': !exists(json, 'status') ? undefined : json['status']
  };
}

/* tslint:disable */
/* eslint-disable */
/**
 * Gitea API.
 * This documentation describes the Gitea API.
 *
 * The version of the OpenAPI document: 1.20.4
 * 
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */

function CommitStatusFromJSON(json) {
  return CommitStatusFromJSONTyped(json);
}
function CommitStatusFromJSONTyped(json, ignoreDiscriminator) {
  if (json === undefined || json === null) {
    return json;
  }
  return {
    'context': !exists(json, 'context') ? undefined : json['context'],
    'createdAt': !exists(json, 'created_at') ? undefined : new Date(json['created_at']),
    'creator': !exists(json, 'creator') ? undefined : UserFromJSON(json['creator']),
    'description': !exists(json, 'description') ? undefined : json['description'],
    'id': !exists(json, 'id') ? undefined : json['id'],
    'status': !exists(json, 'status') ? undefined : json['status'],
    'targetUrl': !exists(json, 'target_url') ? undefined : json['target_url'],
    'updatedAt': !exists(json, 'updated_at') ? undefined : new Date(json['updated_at']),
    'url': !exists(json, 'url') ? undefined : json['url']
  };
}

/* tslint:disable */
/* eslint-disable */
/**
 * Gitea API.
 * This documentation describes the Gitea API.
 *
 * The version of the OpenAPI document: 1.20.4
 * 
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */

function CombinedStatusFromJSON(json) {
  return CombinedStatusFromJSONTyped(json);
}
function CombinedStatusFromJSONTyped(json, ignoreDiscriminator) {
  if (json === undefined || json === null) {
    return json;
  }
  return {
    'commitUrl': !exists(json, 'commit_url') ? undefined : json['commit_url'],
    'repository': !exists(json, 'repository') ? undefined : RepositoryFromJSON(json['repository']),
    'sha': !exists(json, 'sha') ? undefined : json['sha'],
    'state': !exists(json, 'state') ? undefined : json['state'],
    'statuses': !exists(json, 'statuses') ? undefined : json['statuses'].map(CommitStatusFromJSON),
    'totalCount': !exists(json, 'total_count') ? undefined : json['total_count'],
    'url': !exists(json, 'url') ? undefined : json['url']
  };
}

/* tslint:disable */
/* eslint-disable */
/**
 * Gitea API.
 * This documentation describes the Gitea API.
 *
 * The version of the OpenAPI document: 1.20.4
 * 
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */

function CommitAffectedFilesFromJSON(json) {
  return CommitAffectedFilesFromJSONTyped(json);
}
function CommitAffectedFilesFromJSONTyped(json, ignoreDiscriminator) {
  if (json === undefined || json === null) {
    return json;
  }
  return {
    'filename': !exists(json, 'filename') ? undefined : json['filename']
  };
}

/* tslint:disable */
/* eslint-disable */
/**
 * Gitea API.
 * This documentation describes the Gitea API.
 *
 * The version of the OpenAPI document: 1.20.4
 * 
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */

function CommitMetaFromJSON(json) {
  return CommitMetaFromJSONTyped(json);
}
function CommitMetaFromJSONTyped(json, ignoreDiscriminator) {
  if (json === undefined || json === null) {
    return json;
  }
  return {
    'created': !exists(json, 'created') ? undefined : new Date(json['created']),
    'sha': !exists(json, 'sha') ? undefined : json['sha'],
    'url': !exists(json, 'url') ? undefined : json['url']
  };
}

/* tslint:disable */
/* eslint-disable */
/**
 * Gitea API.
 * This documentation describes the Gitea API.
 *
 * The version of the OpenAPI document: 1.20.4
 * 
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */

function CommitStatsFromJSON(json) {
  return CommitStatsFromJSONTyped(json);
}
function CommitStatsFromJSONTyped(json, ignoreDiscriminator) {
  if (json === undefined || json === null) {
    return json;
  }
  return {
    'additions': !exists(json, 'additions') ? undefined : json['additions'],
    'deletions': !exists(json, 'deletions') ? undefined : json['deletions'],
    'total': !exists(json, 'total') ? undefined : json['total']
  };
}

/* tslint:disable */
/* eslint-disable */
/**
 * Gitea API.
 * This documentation describes the Gitea API.
 *
 * The version of the OpenAPI document: 1.20.4
 * 
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */

function RepoCommitFromJSON(json) {
  return RepoCommitFromJSONTyped(json);
}
function RepoCommitFromJSONTyped(json, ignoreDiscriminator) {
  if (json === undefined || json === null) {
    return json;
  }
  return {
    'author': !exists(json, 'author') ? undefined : CommitUserFromJSON(json['author']),
    'committer': !exists(json, 'committer') ? undefined : CommitUserFromJSON(json['committer']),
    'message': !exists(json, 'message') ? undefined : json['message'],
    'tree': !exists(json, 'tree') ? undefined : CommitMetaFromJSON(json['tree']),
    'url': !exists(json, 'url') ? undefined : json['url'],
    'verification': !exists(json, 'verification') ? undefined : PayloadCommitVerificationFromJSON(json['verification'])
  };
}

/* tslint:disable */
/* eslint-disable */
/**
 * Gitea API.
 * This documentation describes the Gitea API.
 *
 * The version of the OpenAPI document: 1.20.4
 * 
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */

function CommitFromJSON(json) {
  return CommitFromJSONTyped(json);
}
function CommitFromJSONTyped(json, ignoreDiscriminator) {
  if (json === undefined || json === null) {
    return json;
  }
  return {
    'author': !exists(json, 'author') ? undefined : UserFromJSON(json['author']),
    'commit': !exists(json, 'commit') ? undefined : RepoCommitFromJSON(json['commit']),
    'committer': !exists(json, 'committer') ? undefined : UserFromJSON(json['committer']),
    'created': !exists(json, 'created') ? undefined : new Date(json['created']),
    'files': !exists(json, 'files') ? undefined : json['files'].map(CommitAffectedFilesFromJSON),
    'htmlUrl': !exists(json, 'html_url') ? undefined : json['html_url'],
    'parents': !exists(json, 'parents') ? undefined : json['parents'].map(CommitMetaFromJSON),
    'sha': !exists(json, 'sha') ? undefined : json['sha'],
    'stats': !exists(json, 'stats') ? undefined : CommitStatsFromJSON(json['stats']),
    'url': !exists(json, 'url') ? undefined : json['url']
  };
}

/* tslint:disable */
/* eslint-disable */
/**
 * Gitea API.
 * This documentation describes the Gitea API.
 *
 * The version of the OpenAPI document: 1.20.4
 * 
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */

function FileLinksResponseFromJSON(json) {
  return FileLinksResponseFromJSONTyped(json);
}
function FileLinksResponseFromJSONTyped(json, ignoreDiscriminator) {
  if (json === undefined || json === null) {
    return json;
  }
  return {
    'git': !exists(json, 'git') ? undefined : json['git'],
    'html': !exists(json, 'html') ? undefined : json['html'],
    'self': !exists(json, 'self') ? undefined : json['self']
  };
}

/* tslint:disable */
/* eslint-disable */
/**
 * Gitea API.
 * This documentation describes the Gitea API.
 *
 * The version of the OpenAPI document: 1.20.4
 * 
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */

function ContentsResponseFromJSON(json) {
  return ContentsResponseFromJSONTyped(json);
}
function ContentsResponseFromJSONTyped(json, ignoreDiscriminator) {
  if (json === undefined || json === null) {
    return json;
  }
  return {
    'links': !exists(json, '_links') ? undefined : FileLinksResponseFromJSON(json['_links']),
    'content': !exists(json, 'content') ? undefined : json['content'],
    'downloadUrl': !exists(json, 'download_url') ? undefined : json['download_url'],
    'encoding': !exists(json, 'encoding') ? undefined : json['encoding'],
    'gitUrl': !exists(json, 'git_url') ? undefined : json['git_url'],
    'htmlUrl': !exists(json, 'html_url') ? undefined : json['html_url'],
    'lastCommitSha': !exists(json, 'last_commit_sha') ? undefined : json['last_commit_sha'],
    'name': !exists(json, 'name') ? undefined : json['name'],
    'path': !exists(json, 'path') ? undefined : json['path'],
    'sha': !exists(json, 'sha') ? undefined : json['sha'],
    'size': !exists(json, 'size') ? undefined : json['size'],
    'submoduleGitUrl': !exists(json, 'submodule_git_url') ? undefined : json['submodule_git_url'],
    'target': !exists(json, 'target') ? undefined : json['target'],
    'type': !exists(json, 'type') ? undefined : json['type'],
    'url': !exists(json, 'url') ? undefined : json['url']
  };
}

/* tslint:disable */
/* eslint-disable */
/**
 * Gitea API.
 * This documentation describes the Gitea API.
 *
 * The version of the OpenAPI document: 1.20.4
 * 
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */

function CreateBranchProtectionOptionToJSON(value) {
  if (value === undefined) {
    return undefined;
  }
  if (value === null) {
    return null;
  }
  return {
    'approvals_whitelist_teams': value.approvalsWhitelistTeams,
    'approvals_whitelist_username': value.approvalsWhitelistUsername,
    'block_on_official_review_requests': value.blockOnOfficialReviewRequests,
    'block_on_outdated_branch': value.blockOnOutdatedBranch,
    'block_on_rejected_reviews': value.blockOnRejectedReviews,
    'branch_name': value.branchName,
    'dismiss_stale_approvals': value.dismissStaleApprovals,
    'enable_approvals_whitelist': value.enableApprovalsWhitelist,
    'enable_merge_whitelist': value.enableMergeWhitelist,
    'enable_push': value.enablePush,
    'enable_push_whitelist': value.enablePushWhitelist,
    'enable_status_check': value.enableStatusCheck,
    'merge_whitelist_teams': value.mergeWhitelistTeams,
    'merge_whitelist_usernames': value.mergeWhitelistUsernames,
    'protected_file_patterns': value.protectedFilePatterns,
    'push_whitelist_deploy_keys': value.pushWhitelistDeployKeys,
    'push_whitelist_teams': value.pushWhitelistTeams,
    'push_whitelist_usernames': value.pushWhitelistUsernames,
    'require_signed_commits': value.requireSignedCommits,
    'required_approvals': value.requiredApprovals,
    'rule_name': value.ruleName,
    'status_check_contexts': value.statusCheckContexts,
    'unprotected_file_patterns': value.unprotectedFilePatterns
  };
}

/* tslint:disable */
/* eslint-disable */
/**
 * Gitea API.
 * This documentation describes the Gitea API.
 *
 * The version of the OpenAPI document: 1.20.4
 * 
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */

function CreateBranchRepoOptionToJSON(value) {
  if (value === undefined) {
    return undefined;
  }
  if (value === null) {
    return null;
  }
  return {
    'new_branch_name': value.newBranchName,
    'old_branch_name': value.oldBranchName,
    'old_ref_name': value.oldRefName
  };
}

/* tslint:disable */
/* eslint-disable */
/**
 * Gitea API.
 * This documentation describes the Gitea API.
 *
 * The version of the OpenAPI document: 1.20.4
 * 
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */

function CreateFileOptionsToJSON(value) {
  if (value === undefined) {
    return undefined;
  }
  if (value === null) {
    return null;
  }
  return {
    'author': IdentityToJSON(value.author),
    'branch': value.branch,
    'committer': IdentityToJSON(value.committer),
    'content': value.content,
    'dates': CommitDateOptionsToJSON(value.dates),
    'message': value.message,
    'new_branch': value.newBranch,
    'signoff': value.signoff
  };
}

/* tslint:disable */
/* eslint-disable */
/**
 * Gitea API.
 * This documentation describes the Gitea API.
 *
 * The version of the OpenAPI document: 1.20.4
 * 
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */

function CreateForkOptionToJSON(value) {
  if (value === undefined) {
    return undefined;
  }
  if (value === null) {
    return null;
  }
  return {
    'name': value.name,
    'organization': value.organization
  };
}

/* tslint:disable */
/* eslint-disable */
/**
 * Gitea API.
 * This documentation describes the Gitea API.
 *
 * The version of the OpenAPI document: 1.20.4
 * 
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */

function CreateHookOptionToJSON(value) {
  if (value === undefined) {
    return undefined;
  }
  if (value === null) {
    return null;
  }
  return {
    'active': value.active,
    'authorization_header': value.authorizationHeader,
    'branch_filter': value.branchFilter,
    'config': value.config,
    'events': value.events,
    'type': value.type
  };
}

/* tslint:disable */
/* eslint-disable */
/**
 * Gitea API.
 * This documentation describes the Gitea API.
 *
 * The version of the OpenAPI document: 1.20.4
 * 
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */

function CreateIssueCommentOptionToJSON(value) {
  if (value === undefined) {
    return undefined;
  }
  if (value === null) {
    return null;
  }
  return {
    'body': value.body
  };
}

/* tslint:disable */
/* eslint-disable */
/**
 * Gitea API.
 * This documentation describes the Gitea API.
 *
 * The version of the OpenAPI document: 1.20.4
 * 
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */

function CreateIssueOptionToJSON(value) {
  if (value === undefined) {
    return undefined;
  }
  if (value === null) {
    return null;
  }
  return {
    'assignee': value.assignee,
    'assignees': value.assignees,
    'body': value.body,
    'closed': value.closed,
    'due_date': value.dueDate === undefined ? undefined : value.dueDate.toISOString(),
    'labels': value.labels,
    'milestone': value.milestone,
    'ref': value.ref,
    'title': value.title
  };
}

/* tslint:disable */
/* eslint-disable */
/**
 * Gitea API.
 * This documentation describes the Gitea API.
 *
 * The version of the OpenAPI document: 1.20.4
 * 
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */

function CreateKeyOptionToJSON(value) {
  if (value === undefined) {
    return undefined;
  }
  if (value === null) {
    return null;
  }
  return {
    'key': value.key,
    'read_only': value.readOnly,
    'title': value.title
  };
}

/* tslint:disable */
/* eslint-disable */
/**
 * Gitea API.
 * This documentation describes the Gitea API.
 *
 * The version of the OpenAPI document: 1.20.4
 * 
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */

function CreateLabelOptionToJSON(value) {
  if (value === undefined) {
    return undefined;
  }
  if (value === null) {
    return null;
  }
  return {
    'color': value.color,
    'description': value.description,
    'exclusive': value.exclusive,
    'name': value.name
  };
}

/* tslint:disable */
/* eslint-disable */
/**
 * Gitea API.
 * This documentation describes the Gitea API.
 *
 * The version of the OpenAPI document: 1.20.4
 * 
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */

function CreateMilestoneOptionToJSON(value) {
  if (value === undefined) {
    return undefined;
  }
  if (value === null) {
    return null;
  }
  return {
    'description': value.description,
    'due_on': value.dueOn === undefined ? undefined : value.dueOn.toISOString(),
    'state': value.state,
    'title': value.title
  };
}

/* tslint:disable */
/* eslint-disable */
/**
 * Gitea API.
 * This documentation describes the Gitea API.
 *
 * The version of the OpenAPI document: 1.20.4
 * 
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */

function CreatePullRequestOptionToJSON(value) {
  if (value === undefined) {
    return undefined;
  }
  if (value === null) {
    return null;
  }
  return {
    'assignee': value.assignee,
    'assignees': value.assignees,
    'base': value.base,
    'body': value.body,
    'due_date': value.dueDate === undefined ? undefined : value.dueDate.toISOString(),
    'head': value.head,
    'labels': value.labels,
    'milestone': value.milestone,
    'title': value.title
  };
}

/* tslint:disable */
/* eslint-disable */
/**
 * Gitea API.
 * This documentation describes the Gitea API.
 *
 * The version of the OpenAPI document: 1.20.4
 * 
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */

function CreatePullReviewCommentToJSON(value) {
  if (value === undefined) {
    return undefined;
  }
  if (value === null) {
    return null;
  }
  return {
    'body': value.body,
    'new_position': value.newPosition,
    'old_position': value.oldPosition,
    'path': value.path
  };
}

/* tslint:disable */
/* eslint-disable */
/**
 * Gitea API.
 * This documentation describes the Gitea API.
 *
 * The version of the OpenAPI document: 1.20.4
 * 
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */

function CreatePullReviewOptionsToJSON(value) {
  if (value === undefined) {
    return undefined;
  }
  if (value === null) {
    return null;
  }
  return {
    'body': value.body,
    'comments': value.comments === undefined ? undefined : value.comments.map(CreatePullReviewCommentToJSON),
    'commit_id': value.commitId,
    'event': value.event
  };
}

/* tslint:disable */
/* eslint-disable */
/**
 * Gitea API.
 * This documentation describes the Gitea API.
 *
 * The version of the OpenAPI document: 1.20.4
 * 
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */

function CreatePushMirrorOptionToJSON(value) {
  if (value === undefined) {
    return undefined;
  }
  if (value === null) {
    return null;
  }
  return {
    'interval': value.interval,
    'remote_address': value.remoteAddress,
    'remote_password': value.remotePassword,
    'remote_username': value.remoteUsername,
    'sync_on_commit': value.syncOnCommit
  };
}

/* tslint:disable */
/* eslint-disable */
/**
 * Gitea API.
 * This documentation describes the Gitea API.
 *
 * The version of the OpenAPI document: 1.20.4
 * 
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */

function CreateReleaseOptionToJSON(value) {
  if (value === undefined) {
    return undefined;
  }
  if (value === null) {
    return null;
  }
  return {
    'body': value.body,
    'draft': value.draft,
    'name': value.name,
    'prerelease': value.prerelease,
    'tag_name': value.tagName,
    'target_commitish': value.targetCommitish
  };
}

/* tslint:disable */
/* eslint-disable */
/**
 * Gitea API.
 * This documentation describes the Gitea API.
 *
 * The version of the OpenAPI document: 1.20.4
 * 
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */

function CreateRepoOptionToJSON(value) {
  if (value === undefined) {
    return undefined;
  }
  if (value === null) {
    return null;
  }
  return {
    'auto_init': value.autoInit,
    'default_branch': value.defaultBranch,
    'description': value.description,
    'gitignores': value.gitignores,
    'issue_labels': value.issueLabels,
    'license': value.license,
    'name': value.name,
    'private': value._private,
    'readme': value.readme,
    'template': value.template,
    'trust_model': value.trustModel
  };
}

/* tslint:disable */
/* eslint-disable */
/**
 * Gitea API.
 * This documentation describes the Gitea API.
 *
 * The version of the OpenAPI document: 1.20.4
 * 
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */

function CreateStatusOptionToJSON(value) {
  if (value === undefined) {
    return undefined;
  }
  if (value === null) {
    return null;
  }
  return {
    'context': value.context,
    'description': value.description,
    'state': value.state,
    'target_url': value.targetUrl
  };
}

/* tslint:disable */
/* eslint-disable */
/**
 * Gitea API.
 * This documentation describes the Gitea API.
 *
 * The version of the OpenAPI document: 1.20.4
 * 
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */

function CreateTagOptionToJSON(value) {
  if (value === undefined) {
    return undefined;
  }
  if (value === null) {
    return null;
  }
  return {
    'message': value.message,
    'tag_name': value.tagName,
    'target': value.target
  };
}

/* tslint:disable */
/* eslint-disable */
/**
 * Gitea API.
 * This documentation describes the Gitea API.
 *
 * The version of the OpenAPI document: 1.20.4
 * 
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */

function CreateWikiPageOptionsToJSON(value) {
  if (value === undefined) {
    return undefined;
  }
  if (value === null) {
    return null;
  }
  return {
    'content_base64': value.contentBase64,
    'message': value.message,
    'title': value.title
  };
}

/* tslint:disable */
/* eslint-disable */
/**
 * Gitea API.
 * This documentation describes the Gitea API.
 *
 * The version of the OpenAPI document: 1.20.4
 * 
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */

function DeleteFileOptionsToJSON(value) {
  if (value === undefined) {
    return undefined;
  }
  if (value === null) {
    return null;
  }
  return {
    'author': IdentityToJSON(value.author),
    'branch': value.branch,
    'committer': IdentityToJSON(value.committer),
    'dates': CommitDateOptionsToJSON(value.dates),
    'message': value.message,
    'new_branch': value.newBranch,
    'sha': value.sha,
    'signoff': value.signoff
  };
}

/* tslint:disable */
/* eslint-disable */
/**
 * Gitea API.
 * This documentation describes the Gitea API.
 *
 * The version of the OpenAPI document: 1.20.4
 * 
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */

function DeployKeyFromJSON(json) {
  return DeployKeyFromJSONTyped(json);
}
function DeployKeyFromJSONTyped(json, ignoreDiscriminator) {
  if (json === undefined || json === null) {
    return json;
  }
  return {
    'createdAt': !exists(json, 'created_at') ? undefined : new Date(json['created_at']),
    'fingerprint': !exists(json, 'fingerprint') ? undefined : json['fingerprint'],
    'id': !exists(json, 'id') ? undefined : json['id'],
    'key': !exists(json, 'key') ? undefined : json['key'],
    'keyId': !exists(json, 'key_id') ? undefined : json['key_id'],
    'readOnly': !exists(json, 'read_only') ? undefined : json['read_only'],
    'repository': !exists(json, 'repository') ? undefined : RepositoryFromJSON(json['repository']),
    'title': !exists(json, 'title') ? undefined : json['title'],
    'url': !exists(json, 'url') ? undefined : json['url']
  };
}

/* tslint:disable */
/* eslint-disable */
/**
 * Gitea API.
 * This documentation describes the Gitea API.
 *
 * The version of the OpenAPI document: 1.20.4
 * 
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */

function DismissPullReviewOptionsToJSON(value) {
  if (value === undefined) {
    return undefined;
  }
  if (value === null) {
    return null;
  }
  return {
    'message': value.message,
    'priors': value.priors
  };
}

/* tslint:disable */
/* eslint-disable */
/**
 * Gitea API.
 * This documentation describes the Gitea API.
 *
 * The version of the OpenAPI document: 1.20.4
 * 
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */

function EditAttachmentOptionsToJSON(value) {
  if (value === undefined) {
    return undefined;
  }
  if (value === null) {
    return null;
  }
  return {
    'name': value.name
  };
}

/* tslint:disable */
/* eslint-disable */
/**
 * Gitea API.
 * This documentation describes the Gitea API.
 *
 * The version of the OpenAPI document: 1.20.4
 * 
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */

function EditBranchProtectionOptionToJSON(value) {
  if (value === undefined) {
    return undefined;
  }
  if (value === null) {
    return null;
  }
  return {
    'approvals_whitelist_teams': value.approvalsWhitelistTeams,
    'approvals_whitelist_username': value.approvalsWhitelistUsername,
    'block_on_official_review_requests': value.blockOnOfficialReviewRequests,
    'block_on_outdated_branch': value.blockOnOutdatedBranch,
    'block_on_rejected_reviews': value.blockOnRejectedReviews,
    'dismiss_stale_approvals': value.dismissStaleApprovals,
    'enable_approvals_whitelist': value.enableApprovalsWhitelist,
    'enable_merge_whitelist': value.enableMergeWhitelist,
    'enable_push': value.enablePush,
    'enable_push_whitelist': value.enablePushWhitelist,
    'enable_status_check': value.enableStatusCheck,
    'merge_whitelist_teams': value.mergeWhitelistTeams,
    'merge_whitelist_usernames': value.mergeWhitelistUsernames,
    'protected_file_patterns': value.protectedFilePatterns,
    'push_whitelist_deploy_keys': value.pushWhitelistDeployKeys,
    'push_whitelist_teams': value.pushWhitelistTeams,
    'push_whitelist_usernames': value.pushWhitelistUsernames,
    'require_signed_commits': value.requireSignedCommits,
    'required_approvals': value.requiredApprovals,
    'status_check_contexts': value.statusCheckContexts,
    'unprotected_file_patterns': value.unprotectedFilePatterns
  };
}

/* tslint:disable */
/* eslint-disable */
/**
 * Gitea API.
 * This documentation describes the Gitea API.
 *
 * The version of the OpenAPI document: 1.20.4
 * 
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */

function EditDeadlineOptionToJSON(value) {
  if (value === undefined) {
    return undefined;
  }
  if (value === null) {
    return null;
  }
  return {
    'due_date': value.dueDate.toISOString()
  };
}

/* tslint:disable */
/* eslint-disable */
/**
 * Gitea API.
 * This documentation describes the Gitea API.
 *
 * The version of the OpenAPI document: 1.20.4
 * 
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */

function EditGitHookOptionToJSON(value) {
  if (value === undefined) {
    return undefined;
  }
  if (value === null) {
    return null;
  }
  return {
    'content': value.content
  };
}

/* tslint:disable */
/* eslint-disable */
/**
 * Gitea API.
 * This documentation describes the Gitea API.
 *
 * The version of the OpenAPI document: 1.20.4
 * 
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */

function EditHookOptionToJSON(value) {
  if (value === undefined) {
    return undefined;
  }
  if (value === null) {
    return null;
  }
  return {
    'active': value.active,
    'authorization_header': value.authorizationHeader,
    'branch_filter': value.branchFilter,
    'config': value.config,
    'events': value.events
  };
}

/* tslint:disable */
/* eslint-disable */
/**
 * Gitea API.
 * This documentation describes the Gitea API.
 *
 * The version of the OpenAPI document: 1.20.4
 * 
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */

function EditIssueCommentOptionToJSON(value) {
  if (value === undefined) {
    return undefined;
  }
  if (value === null) {
    return null;
  }
  return {
    'body': value.body
  };
}

/* tslint:disable */
/* eslint-disable */
/**
 * Gitea API.
 * This documentation describes the Gitea API.
 *
 * The version of the OpenAPI document: 1.20.4
 * 
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */

function EditIssueOptionToJSON(value) {
  if (value === undefined) {
    return undefined;
  }
  if (value === null) {
    return null;
  }
  return {
    'assignee': value.assignee,
    'assignees': value.assignees,
    'body': value.body,
    'due_date': value.dueDate === undefined ? undefined : value.dueDate.toISOString(),
    'milestone': value.milestone,
    'ref': value.ref,
    'state': value.state,
    'title': value.title,
    'unset_due_date': value.unsetDueDate
  };
}

/* tslint:disable */
/* eslint-disable */
/**
 * Gitea API.
 * This documentation describes the Gitea API.
 *
 * The version of the OpenAPI document: 1.20.4
 * 
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */

function EditLabelOptionToJSON(value) {
  if (value === undefined) {
    return undefined;
  }
  if (value === null) {
    return null;
  }
  return {
    'color': value.color,
    'description': value.description,
    'exclusive': value.exclusive,
    'name': value.name
  };
}

/* tslint:disable */
/* eslint-disable */
/**
 * Gitea API.
 * This documentation describes the Gitea API.
 *
 * The version of the OpenAPI document: 1.20.4
 * 
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */

function EditMilestoneOptionToJSON(value) {
  if (value === undefined) {
    return undefined;
  }
  if (value === null) {
    return null;
  }
  return {
    'description': value.description,
    'due_on': value.dueOn === undefined ? undefined : value.dueOn.toISOString(),
    'state': value.state,
    'title': value.title
  };
}

/* tslint:disable */
/* eslint-disable */
/**
 * Gitea API.
 * This documentation describes the Gitea API.
 *
 * The version of the OpenAPI document: 1.20.4
 * 
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */

function EditPullRequestOptionToJSON(value) {
  if (value === undefined) {
    return undefined;
  }
  if (value === null) {
    return null;
  }
  return {
    'allow_maintainer_edit': value.allowMaintainerEdit,
    'assignee': value.assignee,
    'assignees': value.assignees,
    'base': value.base,
    'body': value.body,
    'due_date': value.dueDate === undefined ? undefined : value.dueDate.toISOString(),
    'labels': value.labels,
    'milestone': value.milestone,
    'state': value.state,
    'title': value.title,
    'unset_due_date': value.unsetDueDate
  };
}

/* tslint:disable */
/* eslint-disable */
/**
 * Gitea API.
 * This documentation describes the Gitea API.
 *
 * The version of the OpenAPI document: 1.20.4
 * 
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */

function EditReactionOptionToJSON(value) {
  if (value === undefined) {
    return undefined;
  }
  if (value === null) {
    return null;
  }
  return {
    'content': value.content
  };
}

/* tslint:disable */
/* eslint-disable */
/**
 * Gitea API.
 * This documentation describes the Gitea API.
 *
 * The version of the OpenAPI document: 1.20.4
 * 
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */

function EditReleaseOptionToJSON(value) {
  if (value === undefined) {
    return undefined;
  }
  if (value === null) {
    return null;
  }
  return {
    'body': value.body,
    'draft': value.draft,
    'name': value.name,
    'prerelease': value.prerelease,
    'tag_name': value.tagName,
    'target_commitish': value.targetCommitish
  };
}

/* tslint:disable */
/* eslint-disable */
/**
 * Gitea API.
 * This documentation describes the Gitea API.
 *
 * The version of the OpenAPI document: 1.20.4
 * 
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */

function EditRepoOptionToJSON(value) {
  if (value === undefined) {
    return undefined;
  }
  if (value === null) {
    return null;
  }
  return {
    'allow_manual_merge': value.allowManualMerge,
    'allow_merge_commits': value.allowMergeCommits,
    'allow_rebase': value.allowRebase,
    'allow_rebase_explicit': value.allowRebaseExplicit,
    'allow_rebase_update': value.allowRebaseUpdate,
    'allow_squash_merge': value.allowSquashMerge,
    'archived': value.archived,
    'autodetect_manual_merge': value.autodetectManualMerge,
    'default_allow_maintainer_edit': value.defaultAllowMaintainerEdit,
    'default_branch': value.defaultBranch,
    'default_delete_branch_after_merge': value.defaultDeleteBranchAfterMerge,
    'default_merge_style': value.defaultMergeStyle,
    'description': value.description,
    'enable_prune': value.enablePrune,
    'external_tracker': ExternalTrackerToJSON(value.externalTracker),
    'external_wiki': ExternalWikiToJSON(value.externalWiki),
    'has_actions': value.hasActions,
    'has_issues': value.hasIssues,
    'has_packages': value.hasPackages,
    'has_projects': value.hasProjects,
    'has_pull_requests': value.hasPullRequests,
    'has_releases': value.hasReleases,
    'has_wiki': value.hasWiki,
    'ignore_whitespace_conflicts': value.ignoreWhitespaceConflicts,
    'internal_tracker': InternalTrackerToJSON(value.internalTracker),
    'mirror_interval': value.mirrorInterval,
    'name': value.name,
    'private': value._private,
    'template': value.template,
    'website': value.website
  };
}

/* tslint:disable */
/* eslint-disable */
/**
 * Gitea API.
 * This documentation describes the Gitea API.
 *
 * The version of the OpenAPI document: 1.20.4
 * 
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */

function FileCommitResponseFromJSON(json) {
  return FileCommitResponseFromJSONTyped(json);
}
function FileCommitResponseFromJSONTyped(json, ignoreDiscriminator) {
  if (json === undefined || json === null) {
    return json;
  }
  return {
    'author': !exists(json, 'author') ? undefined : CommitUserFromJSON(json['author']),
    'committer': !exists(json, 'committer') ? undefined : CommitUserFromJSON(json['committer']),
    'created': !exists(json, 'created') ? undefined : new Date(json['created']),
    'htmlUrl': !exists(json, 'html_url') ? undefined : json['html_url'],
    'message': !exists(json, 'message') ? undefined : json['message'],
    'parents': !exists(json, 'parents') ? undefined : json['parents'].map(CommitMetaFromJSON),
    'sha': !exists(json, 'sha') ? undefined : json['sha'],
    'tree': !exists(json, 'tree') ? undefined : CommitMetaFromJSON(json['tree']),
    'url': !exists(json, 'url') ? undefined : json['url']
  };
}

/* tslint:disable */
/* eslint-disable */
/**
 * Gitea API.
 * This documentation describes the Gitea API.
 *
 * The version of the OpenAPI document: 1.20.4
 * 
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */

function FileDeleteResponseFromJSON(json) {
  return FileDeleteResponseFromJSONTyped(json);
}
function FileDeleteResponseFromJSONTyped(json, ignoreDiscriminator) {
  if (json === undefined || json === null) {
    return json;
  }
  return {
    'commit': !exists(json, 'commit') ? undefined : FileCommitResponseFromJSON(json['commit']),
    'content': !exists(json, 'content') ? undefined : json['content'],
    'verification': !exists(json, 'verification') ? undefined : PayloadCommitVerificationFromJSON(json['verification'])
  };
}

/* tslint:disable */
/* eslint-disable */
/**
 * Gitea API.
 * This documentation describes the Gitea API.
 *
 * The version of the OpenAPI document: 1.20.4
 * 
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */

function FileResponseFromJSON(json) {
  return FileResponseFromJSONTyped(json);
}
function FileResponseFromJSONTyped(json, ignoreDiscriminator) {
  if (json === undefined || json === null) {
    return json;
  }
  return {
    'commit': !exists(json, 'commit') ? undefined : FileCommitResponseFromJSON(json['commit']),
    'content': !exists(json, 'content') ? undefined : ContentsResponseFromJSON(json['content']),
    'verification': !exists(json, 'verification') ? undefined : PayloadCommitVerificationFromJSON(json['verification'])
  };
}

/* tslint:disable */
/* eslint-disable */
/**
 * Gitea API.
 * This documentation describes the Gitea API.
 *
 * The version of the OpenAPI document: 1.20.4
 * 
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */

function FilesResponseFromJSON(json) {
  return FilesResponseFromJSONTyped(json);
}
function FilesResponseFromJSONTyped(json, ignoreDiscriminator) {
  if (json === undefined || json === null) {
    return json;
  }
  return {
    'commit': !exists(json, 'commit') ? undefined : FileCommitResponseFromJSON(json['commit']),
    'files': !exists(json, 'files') ? undefined : json['files'].map(ContentsResponseFromJSON),
    'verification': !exists(json, 'verification') ? undefined : PayloadCommitVerificationFromJSON(json['verification'])
  };
}

/* tslint:disable */
/* eslint-disable */
/**
 * Gitea API.
 * This documentation describes the Gitea API.
 *
 * The version of the OpenAPI document: 1.20.4
 * 
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */

function GenerateRepoOptionToJSON(value) {
  if (value === undefined) {
    return undefined;
  }
  if (value === null) {
    return null;
  }
  return {
    'avatar': value.avatar,
    'default_branch': value.defaultBranch,
    'description': value.description,
    'git_content': value.gitContent,
    'git_hooks': value.gitHooks,
    'labels': value.labels,
    'name': value.name,
    'owner': value.owner,
    'private': value._private,
    'topics': value.topics,
    'webhooks': value.webhooks
  };
}

/* tslint:disable */
/* eslint-disable */
/**
 * Gitea API.
 * This documentation describes the Gitea API.
 *
 * The version of the OpenAPI document: 1.20.4
 * 
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */

function GitBlobResponseFromJSON(json) {
  return GitBlobResponseFromJSONTyped(json);
}
function GitBlobResponseFromJSONTyped(json, ignoreDiscriminator) {
  if (json === undefined || json === null) {
    return json;
  }
  return {
    'content': !exists(json, 'content') ? undefined : json['content'],
    'encoding': !exists(json, 'encoding') ? undefined : json['encoding'],
    'sha': !exists(json, 'sha') ? undefined : json['sha'],
    'size': !exists(json, 'size') ? undefined : json['size'],
    'url': !exists(json, 'url') ? undefined : json['url']
  };
}

/* tslint:disable */
/* eslint-disable */
/**
 * Gitea API.
 * This documentation describes the Gitea API.
 *
 * The version of the OpenAPI document: 1.20.4
 * 
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */

function GitEntryFromJSON(json) {
  return GitEntryFromJSONTyped(json);
}
function GitEntryFromJSONTyped(json, ignoreDiscriminator) {
  if (json === undefined || json === null) {
    return json;
  }
  return {
    'mode': !exists(json, 'mode') ? undefined : json['mode'],
    'path': !exists(json, 'path') ? undefined : json['path'],
    'sha': !exists(json, 'sha') ? undefined : json['sha'],
    'size': !exists(json, 'size') ? undefined : json['size'],
    'type': !exists(json, 'type') ? undefined : json['type'],
    'url': !exists(json, 'url') ? undefined : json['url']
  };
}

/* tslint:disable */
/* eslint-disable */
/**
 * Gitea API.
 * This documentation describes the Gitea API.
 *
 * The version of the OpenAPI document: 1.20.4
 * 
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */

function GitHookFromJSON(json) {
  return GitHookFromJSONTyped(json);
}
function GitHookFromJSONTyped(json, ignoreDiscriminator) {
  if (json === undefined || json === null) {
    return json;
  }
  return {
    'content': !exists(json, 'content') ? undefined : json['content'],
    'isActive': !exists(json, 'is_active') ? undefined : json['is_active'],
    'name': !exists(json, 'name') ? undefined : json['name']
  };
}

/* tslint:disable */
/* eslint-disable */
/**
 * Gitea API.
 * This documentation describes the Gitea API.
 *
 * The version of the OpenAPI document: 1.20.4
 * 
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */

function GitObjectFromJSON(json) {
  return GitObjectFromJSONTyped(json);
}
function GitObjectFromJSONTyped(json, ignoreDiscriminator) {
  if (json === undefined || json === null) {
    return json;
  }
  return {
    'sha': !exists(json, 'sha') ? undefined : json['sha'],
    'type': !exists(json, 'type') ? undefined : json['type'],
    'url': !exists(json, 'url') ? undefined : json['url']
  };
}

/* tslint:disable */
/* eslint-disable */
/**
 * Gitea API.
 * This documentation describes the Gitea API.
 *
 * The version of the OpenAPI document: 1.20.4
 * 
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */

function GitTreeResponseFromJSON(json) {
  return GitTreeResponseFromJSONTyped(json);
}
function GitTreeResponseFromJSONTyped(json, ignoreDiscriminator) {
  if (json === undefined || json === null) {
    return json;
  }
  return {
    'page': !exists(json, 'page') ? undefined : json['page'],
    'sha': !exists(json, 'sha') ? undefined : json['sha'],
    'totalCount': !exists(json, 'total_count') ? undefined : json['total_count'],
    'tree': !exists(json, 'tree') ? undefined : json['tree'].map(GitEntryFromJSON),
    'truncated': !exists(json, 'truncated') ? undefined : json['truncated'],
    'url': !exists(json, 'url') ? undefined : json['url']
  };
}

/* tslint:disable */
/* eslint-disable */
/**
 * Gitea API.
 * This documentation describes the Gitea API.
 *
 * The version of the OpenAPI document: 1.20.4
 * 
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */

function HookFromJSON(json) {
  return HookFromJSONTyped(json);
}
function HookFromJSONTyped(json, ignoreDiscriminator) {
  if (json === undefined || json === null) {
    return json;
  }
  return {
    'active': !exists(json, 'active') ? undefined : json['active'],
    'authorizationHeader': !exists(json, 'authorization_header') ? undefined : json['authorization_header'],
    'branchFilter': !exists(json, 'branch_filter') ? undefined : json['branch_filter'],
    'config': !exists(json, 'config') ? undefined : json['config'],
    'createdAt': !exists(json, 'created_at') ? undefined : new Date(json['created_at']),
    'events': !exists(json, 'events') ? undefined : json['events'],
    'id': !exists(json, 'id') ? undefined : json['id'],
    'type': !exists(json, 'type') ? undefined : json['type'],
    'updatedAt': !exists(json, 'updated_at') ? undefined : new Date(json['updated_at'])
  };
}

/* tslint:disable */
/* eslint-disable */
/**
 * Gitea API.
 * This documentation describes the Gitea API.
 *
 * The version of the OpenAPI document: 1.20.4
 * 
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */

function LabelFromJSON(json) {
  return LabelFromJSONTyped(json);
}
function LabelFromJSONTyped(json, ignoreDiscriminator) {
  if (json === undefined || json === null) {
    return json;
  }
  return {
    'color': !exists(json, 'color') ? undefined : json['color'],
    'description': !exists(json, 'description') ? undefined : json['description'],
    'exclusive': !exists(json, 'exclusive') ? undefined : json['exclusive'],
    'id': !exists(json, 'id') ? undefined : json['id'],
    'name': !exists(json, 'name') ? undefined : json['name'],
    'url': !exists(json, 'url') ? undefined : json['url']
  };
}

/* tslint:disable */
/* eslint-disable */
/**
 * Gitea API.
 * This documentation describes the Gitea API.
 *
 * The version of the OpenAPI document: 1.20.4
 * 
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */

function MilestoneFromJSON(json) {
  return MilestoneFromJSONTyped(json);
}
function MilestoneFromJSONTyped(json, ignoreDiscriminator) {
  if (json === undefined || json === null) {
    return json;
  }
  return {
    'closedAt': !exists(json, 'closed_at') ? undefined : new Date(json['closed_at']),
    'closedIssues': !exists(json, 'closed_issues') ? undefined : json['closed_issues'],
    'createdAt': !exists(json, 'created_at') ? undefined : new Date(json['created_at']),
    'description': !exists(json, 'description') ? undefined : json['description'],
    'dueOn': !exists(json, 'due_on') ? undefined : new Date(json['due_on']),
    'id': !exists(json, 'id') ? undefined : json['id'],
    'openIssues': !exists(json, 'open_issues') ? undefined : json['open_issues'],
    'state': !exists(json, 'state') ? undefined : json['state'],
    'title': !exists(json, 'title') ? undefined : json['title'],
    'updatedAt': !exists(json, 'updated_at') ? undefined : new Date(json['updated_at'])
  };
}

/* tslint:disable */
/* eslint-disable */
/**
 * Gitea API.
 * This documentation describes the Gitea API.
 *
 * The version of the OpenAPI document: 1.20.4
 * 
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */

function PullRequestMetaFromJSON(json) {
  return PullRequestMetaFromJSONTyped(json);
}
function PullRequestMetaFromJSONTyped(json, ignoreDiscriminator) {
  if (json === undefined || json === null) {
    return json;
  }
  return {
    'merged': !exists(json, 'merged') ? undefined : json['merged'],
    'mergedAt': !exists(json, 'merged_at') ? undefined : new Date(json['merged_at'])
  };
}

/* tslint:disable */
/* eslint-disable */
/**
 * Gitea API.
 * This documentation describes the Gitea API.
 *
 * The version of the OpenAPI document: 1.20.4
 * 
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */

function RepositoryMetaFromJSON(json) {
  return RepositoryMetaFromJSONTyped(json);
}
function RepositoryMetaFromJSONTyped(json, ignoreDiscriminator) {
  if (json === undefined || json === null) {
    return json;
  }
  return {
    'fullName': !exists(json, 'full_name') ? undefined : json['full_name'],
    'id': !exists(json, 'id') ? undefined : json['id'],
    'name': !exists(json, 'name') ? undefined : json['name'],
    'owner': !exists(json, 'owner') ? undefined : json['owner']
  };
}

/* tslint:disable */
/* eslint-disable */
/**
 * Gitea API.
 * This documentation describes the Gitea API.
 *
 * The version of the OpenAPI document: 1.20.4
 * 
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */

function IssueFromJSON(json) {
  return IssueFromJSONTyped(json);
}
function IssueFromJSONTyped(json, ignoreDiscriminator) {
  if (json === undefined || json === null) {
    return json;
  }
  return {
    'assets': !exists(json, 'assets') ? undefined : json['assets'].map(AttachmentFromJSON),
    'assignee': !exists(json, 'assignee') ? undefined : UserFromJSON(json['assignee']),
    'assignees': !exists(json, 'assignees') ? undefined : json['assignees'].map(UserFromJSON),
    'body': !exists(json, 'body') ? undefined : json['body'],
    'closedAt': !exists(json, 'closed_at') ? undefined : new Date(json['closed_at']),
    'comments': !exists(json, 'comments') ? undefined : json['comments'],
    'createdAt': !exists(json, 'created_at') ? undefined : new Date(json['created_at']),
    'dueDate': !exists(json, 'due_date') ? undefined : new Date(json['due_date']),
    'htmlUrl': !exists(json, 'html_url') ? undefined : json['html_url'],
    'id': !exists(json, 'id') ? undefined : json['id'],
    'isLocked': !exists(json, 'is_locked') ? undefined : json['is_locked'],
    'labels': !exists(json, 'labels') ? undefined : json['labels'].map(LabelFromJSON),
    'milestone': !exists(json, 'milestone') ? undefined : MilestoneFromJSON(json['milestone']),
    'number': !exists(json, 'number') ? undefined : json['number'],
    'originalAuthor': !exists(json, 'original_author') ? undefined : json['original_author'],
    'originalAuthorId': !exists(json, 'original_author_id') ? undefined : json['original_author_id'],
    'pinOrder': !exists(json, 'pin_order') ? undefined : json['pin_order'],
    'pullRequest': !exists(json, 'pull_request') ? undefined : PullRequestMetaFromJSON(json['pull_request']),
    'ref': !exists(json, 'ref') ? undefined : json['ref'],
    'repository': !exists(json, 'repository') ? undefined : RepositoryMetaFromJSON(json['repository']),
    'state': !exists(json, 'state') ? undefined : json['state'],
    'title': !exists(json, 'title') ? undefined : json['title'],
    'updatedAt': !exists(json, 'updated_at') ? undefined : new Date(json['updated_at']),
    'url': !exists(json, 'url') ? undefined : json['url'],
    'user': !exists(json, 'user') ? undefined : UserFromJSON(json['user'])
  };
}

/* tslint:disable */
/* eslint-disable */
/**
 * Gitea API.
 * This documentation describes the Gitea API.
 *
 * The version of the OpenAPI document: 1.20.4
 * 
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */

function IssueConfigContactLinkFromJSON(json) {
  return IssueConfigContactLinkFromJSONTyped(json);
}
function IssueConfigContactLinkFromJSONTyped(json, ignoreDiscriminator) {
  if (json === undefined || json === null) {
    return json;
  }
  return {
    'about': !exists(json, 'about') ? undefined : json['about'],
    'name': !exists(json, 'name') ? undefined : json['name'],
    'url': !exists(json, 'url') ? undefined : json['url']
  };
}

/* tslint:disable */
/* eslint-disable */
/**
 * Gitea API.
 * This documentation describes the Gitea API.
 *
 * The version of the OpenAPI document: 1.20.4
 * 
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */

function IssueConfigFromJSON(json) {
  return IssueConfigFromJSONTyped(json);
}
function IssueConfigFromJSONTyped(json, ignoreDiscriminator) {
  if (json === undefined || json === null) {
    return json;
  }
  return {
    'blankIssuesEnabled': !exists(json, 'blank_issues_enabled') ? undefined : json['blank_issues_enabled'],
    'contactLinks': !exists(json, 'contact_links') ? undefined : json['contact_links'].map(IssueConfigContactLinkFromJSON)
  };
}

/* tslint:disable */
/* eslint-disable */
/**
 * Gitea API.
 * This documentation describes the Gitea API.
 *
 * The version of the OpenAPI document: 1.20.4
 * 
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */

function IssueConfigValidationFromJSON(json) {
  return IssueConfigValidationFromJSONTyped(json);
}
function IssueConfigValidationFromJSONTyped(json, ignoreDiscriminator) {
  if (json === undefined || json === null) {
    return json;
  }
  return {
    'message': !exists(json, 'message') ? undefined : json['message'],
    'valid': !exists(json, 'valid') ? undefined : json['valid']
  };
}

/* tslint:disable */
/* eslint-disable */
/**
 * Gitea API.
 * This documentation describes the Gitea API.
 *
 * The version of the OpenAPI document: 1.20.4
 * 
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */

function IssueDeadlineFromJSON(json) {
  return IssueDeadlineFromJSONTyped(json);
}
function IssueDeadlineFromJSONTyped(json, ignoreDiscriminator) {
  if (json === undefined || json === null) {
    return json;
  }
  return {
    'dueDate': !exists(json, 'due_date') ? undefined : new Date(json['due_date'])
  };
}

/* tslint:disable */
/* eslint-disable */
/**
 * Gitea API.
 * This documentation describes the Gitea API.
 *
 * The version of the OpenAPI document: 1.20.4
 * 
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */

function IssueFormFieldFromJSON(json) {
  return IssueFormFieldFromJSONTyped(json);
}
function IssueFormFieldFromJSONTyped(json, ignoreDiscriminator) {
  if (json === undefined || json === null) {
    return json;
  }
  return {
    'attributes': !exists(json, 'attributes') ? undefined : json['attributes'],
    'id': !exists(json, 'id') ? undefined : json['id'],
    'type': !exists(json, 'type') ? undefined : json['type'],
    'validations': !exists(json, 'validations') ? undefined : json['validations']
  };
}

/* tslint:disable */
/* eslint-disable */
/**
 * Gitea API.
 * This documentation describes the Gitea API.
 *
 * The version of the OpenAPI document: 1.20.4
 * 
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */

function IssueLabelsOptionToJSON(value) {
  if (value === undefined) {
    return undefined;
  }
  if (value === null) {
    return null;
  }
  return {
    'labels': value.labels
  };
}

/* tslint:disable */
/* eslint-disable */
/**
 * Gitea API.
 * This documentation describes the Gitea API.
 *
 * The version of the OpenAPI document: 1.20.4
 * 
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */

function IssueMetaToJSON(value) {
  if (value === undefined) {
    return undefined;
  }
  if (value === null) {
    return null;
  }
  return {
    'index': value.index,
    'owner': value.owner,
    'repo': value.repo
  };
}

/* tslint:disable */
/* eslint-disable */
/**
 * Gitea API.
 * This documentation describes the Gitea API.
 *
 * The version of the OpenAPI document: 1.20.4
 * 
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */

function IssueTemplateFromJSON(json) {
  return IssueTemplateFromJSONTyped(json);
}
function IssueTemplateFromJSONTyped(json, ignoreDiscriminator) {
  if (json === undefined || json === null) {
    return json;
  }
  return {
    'about': !exists(json, 'about') ? undefined : json['about'],
    'body': !exists(json, 'body') ? undefined : json['body'].map(IssueFormFieldFromJSON),
    'content': !exists(json, 'content') ? undefined : json['content'],
    'fileName': !exists(json, 'file_name') ? undefined : json['file_name'],
    'labels': !exists(json, 'labels') ? undefined : json['labels'],
    'name': !exists(json, 'name') ? undefined : json['name'],
    'ref': !exists(json, 'ref') ? undefined : json['ref'],
    'title': !exists(json, 'title') ? undefined : json['title']
  };
}

/* tslint:disable */
/* eslint-disable */
/**
 * Gitea API.
 * This documentation describes the Gitea API.
 *
 * The version of the OpenAPI document: 1.20.4
 * 
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */

function MergePullRequestOptionToJSON(value) {
  if (value === undefined) {
    return undefined;
  }
  if (value === null) {
    return null;
  }
  return {
    'Do': value._do,
    'MergeCommitID': value.mergeCommitID,
    'MergeMessageField': value.mergeMessageField,
    'MergeTitleField': value.mergeTitleField,
    'delete_branch_after_merge': value.deleteBranchAfterMerge,
    'force_merge': value.forceMerge,
    'head_commit_id': value.headCommitId,
    'merge_when_checks_succeed': value.mergeWhenChecksSucceed
  };
}

/* tslint:disable */
/* eslint-disable */
/**
 * Gitea API.
 * This documentation describes the Gitea API.
 *
 * The version of the OpenAPI document: 1.20.4
 * 
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */

function MigrateRepoOptionsToJSON(value) {
  if (value === undefined) {
    return undefined;
  }
  if (value === null) {
    return null;
  }
  return {
    'auth_password': value.authPassword,
    'auth_token': value.authToken,
    'auth_username': value.authUsername,
    'clone_addr': value.cloneAddr,
    'description': value.description,
    'issues': value.issues,
    'labels': value.labels,
    'lfs': value.lfs,
    'lfs_endpoint': value.lfsEndpoint,
    'milestones': value.milestones,
    'mirror': value.mirror,
    'mirror_interval': value.mirrorInterval,
    'private': value._private,
    'pull_requests': value.pullRequests,
    'releases': value.releases,
    'repo_name': value.repoName,
    'repo_owner': value.repoOwner,
    'service': value.service,
    'uid': value.uid,
    'wiki': value.wiki
  };
}

/* tslint:disable */
/* eslint-disable */
/**
 * Gitea API.
 * This documentation describes the Gitea API.
 *
 * The version of the OpenAPI document: 1.20.4
 * 
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */

function NewIssuePinsAllowedFromJSON(json) {
  return NewIssuePinsAllowedFromJSONTyped(json);
}
function NewIssuePinsAllowedFromJSONTyped(json, ignoreDiscriminator) {
  if (json === undefined || json === null) {
    return json;
  }
  return {
    'issues': !exists(json, 'issues') ? undefined : json['issues'],
    'pullRequests': !exists(json, 'pull_requests') ? undefined : json['pull_requests']
  };
}

/* tslint:disable */
/* eslint-disable */
/**
 * Gitea API.
 * This documentation describes the Gitea API.
 *
 * The version of the OpenAPI document: 1.20.4
 * 
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */

function NoteFromJSON(json) {
  return NoteFromJSONTyped(json);
}
function NoteFromJSONTyped(json, ignoreDiscriminator) {
  if (json === undefined || json === null) {
    return json;
  }
  return {
    'commit': !exists(json, 'commit') ? undefined : CommitFromJSON(json['commit']),
    'message': !exists(json, 'message') ? undefined : json['message']
  };
}

/* tslint:disable */
/* eslint-disable */
/**
 * Gitea API.
 * This documentation describes the Gitea API.
 *
 * The version of the OpenAPI document: 1.20.4
 * 
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */

function PRBranchInfoFromJSON(json) {
  return PRBranchInfoFromJSONTyped(json);
}
function PRBranchInfoFromJSONTyped(json, ignoreDiscriminator) {
  if (json === undefined || json === null) {
    return json;
  }
  return {
    'label': !exists(json, 'label') ? undefined : json['label'],
    'ref': !exists(json, 'ref') ? undefined : json['ref'],
    'repo': !exists(json, 'repo') ? undefined : RepositoryFromJSON(json['repo']),
    'repoId': !exists(json, 'repo_id') ? undefined : json['repo_id'],
    'sha': !exists(json, 'sha') ? undefined : json['sha']
  };
}

/* tslint:disable */
/* eslint-disable */
/**
 * Gitea API.
 * This documentation describes the Gitea API.
 *
 * The version of the OpenAPI document: 1.20.4
 * 
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */

function PullRequestFromJSON(json) {
  return PullRequestFromJSONTyped(json);
}
function PullRequestFromJSONTyped(json, ignoreDiscriminator) {
  if (json === undefined || json === null) {
    return json;
  }
  return {
    'allowMaintainerEdit': !exists(json, 'allow_maintainer_edit') ? undefined : json['allow_maintainer_edit'],
    'assignee': !exists(json, 'assignee') ? undefined : UserFromJSON(json['assignee']),
    'assignees': !exists(json, 'assignees') ? undefined : json['assignees'].map(UserFromJSON),
    'base': !exists(json, 'base') ? undefined : PRBranchInfoFromJSON(json['base']),
    'body': !exists(json, 'body') ? undefined : json['body'],
    'closedAt': !exists(json, 'closed_at') ? undefined : new Date(json['closed_at']),
    'comments': !exists(json, 'comments') ? undefined : json['comments'],
    'createdAt': !exists(json, 'created_at') ? undefined : new Date(json['created_at']),
    'diffUrl': !exists(json, 'diff_url') ? undefined : json['diff_url'],
    'dueDate': !exists(json, 'due_date') ? undefined : new Date(json['due_date']),
    'head': !exists(json, 'head') ? undefined : PRBranchInfoFromJSON(json['head']),
    'htmlUrl': !exists(json, 'html_url') ? undefined : json['html_url'],
    'id': !exists(json, 'id') ? undefined : json['id'],
    'isLocked': !exists(json, 'is_locked') ? undefined : json['is_locked'],
    'labels': !exists(json, 'labels') ? undefined : json['labels'].map(LabelFromJSON),
    'mergeBase': !exists(json, 'merge_base') ? undefined : json['merge_base'],
    'mergeCommitSha': !exists(json, 'merge_commit_sha') ? undefined : json['merge_commit_sha'],
    'mergeable': !exists(json, 'mergeable') ? undefined : json['mergeable'],
    'merged': !exists(json, 'merged') ? undefined : json['merged'],
    'mergedAt': !exists(json, 'merged_at') ? undefined : new Date(json['merged_at']),
    'mergedBy': !exists(json, 'merged_by') ? undefined : UserFromJSON(json['merged_by']),
    'milestone': !exists(json, 'milestone') ? undefined : MilestoneFromJSON(json['milestone']),
    'number': !exists(json, 'number') ? undefined : json['number'],
    'patchUrl': !exists(json, 'patch_url') ? undefined : json['patch_url'],
    'pinOrder': !exists(json, 'pin_order') ? undefined : json['pin_order'],
    'requestedReviewers': !exists(json, 'requested_reviewers') ? undefined : json['requested_reviewers'].map(UserFromJSON),
    'state': !exists(json, 'state') ? undefined : json['state'],
    'title': !exists(json, 'title') ? undefined : json['title'],
    'updatedAt': !exists(json, 'updated_at') ? undefined : new Date(json['updated_at']),
    'url': !exists(json, 'url') ? undefined : json['url'],
    'user': !exists(json, 'user') ? undefined : UserFromJSON(json['user'])
  };
}

/* tslint:disable */
/* eslint-disable */
/**
 * Gitea API.
 * This documentation describes the Gitea API.
 *
 * The version of the OpenAPI document: 1.20.4
 * 
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */

function PullReviewFromJSON(json) {
  return PullReviewFromJSONTyped(json);
}
function PullReviewFromJSONTyped(json, ignoreDiscriminator) {
  if (json === undefined || json === null) {
    return json;
  }
  return {
    'body': !exists(json, 'body') ? undefined : json['body'],
    'commentsCount': !exists(json, 'comments_count') ? undefined : json['comments_count'],
    'commitId': !exists(json, 'commit_id') ? undefined : json['commit_id'],
    'dismissed': !exists(json, 'dismissed') ? undefined : json['dismissed'],
    'htmlUrl': !exists(json, 'html_url') ? undefined : json['html_url'],
    'id': !exists(json, 'id') ? undefined : json['id'],
    'official': !exists(json, 'official') ? undefined : json['official'],
    'pullRequestUrl': !exists(json, 'pull_request_url') ? undefined : json['pull_request_url'],
    'stale': !exists(json, 'stale') ? undefined : json['stale'],
    'state': !exists(json, 'state') ? undefined : json['state'],
    'submittedAt': !exists(json, 'submitted_at') ? undefined : new Date(json['submitted_at']),
    'team': !exists(json, 'team') ? undefined : TeamFromJSON(json['team']),
    'updatedAt': !exists(json, 'updated_at') ? undefined : new Date(json['updated_at']),
    'user': !exists(json, 'user') ? undefined : UserFromJSON(json['user'])
  };
}

/* tslint:disable */
/* eslint-disable */
/**
 * Gitea API.
 * This documentation describes the Gitea API.
 *
 * The version of the OpenAPI document: 1.20.4
 * 
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */

function PullReviewCommentFromJSON(json) {
  return PullReviewCommentFromJSONTyped(json);
}
function PullReviewCommentFromJSONTyped(json, ignoreDiscriminator) {
  if (json === undefined || json === null) {
    return json;
  }
  return {
    'body': !exists(json, 'body') ? undefined : json['body'],
    'commitId': !exists(json, 'commit_id') ? undefined : json['commit_id'],
    'createdAt': !exists(json, 'created_at') ? undefined : new Date(json['created_at']),
    'diffHunk': !exists(json, 'diff_hunk') ? undefined : json['diff_hunk'],
    'htmlUrl': !exists(json, 'html_url') ? undefined : json['html_url'],
    'id': !exists(json, 'id') ? undefined : json['id'],
    'originalCommitId': !exists(json, 'original_commit_id') ? undefined : json['original_commit_id'],
    'originalPosition': !exists(json, 'original_position') ? undefined : json['original_position'],
    'path': !exists(json, 'path') ? undefined : json['path'],
    'position': !exists(json, 'position') ? undefined : json['position'],
    'pullRequestReviewId': !exists(json, 'pull_request_review_id') ? undefined : json['pull_request_review_id'],
    'pullRequestUrl': !exists(json, 'pull_request_url') ? undefined : json['pull_request_url'],
    'resolver': !exists(json, 'resolver') ? undefined : UserFromJSON(json['resolver']),
    'updatedAt': !exists(json, 'updated_at') ? undefined : new Date(json['updated_at']),
    'user': !exists(json, 'user') ? undefined : UserFromJSON(json['user'])
  };
}

/* tslint:disable */
/* eslint-disable */
/**
 * Gitea API.
 * This documentation describes the Gitea API.
 *
 * The version of the OpenAPI document: 1.20.4
 * 
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */

function PullReviewRequestOptionsToJSON(value) {
  if (value === undefined) {
    return undefined;
  }
  if (value === null) {
    return null;
  }
  return {
    'reviewers': value.reviewers,
    'team_reviewers': value.teamReviewers
  };
}

/* tslint:disable */
/* eslint-disable */
/**
 * Gitea API.
 * This documentation describes the Gitea API.
 *
 * The version of the OpenAPI document: 1.20.4
 * 
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */

function PushMirrorFromJSON(json) {
  return PushMirrorFromJSONTyped(json);
}
function PushMirrorFromJSONTyped(json, ignoreDiscriminator) {
  if (json === undefined || json === null) {
    return json;
  }
  return {
    'created': !exists(json, 'created') ? undefined : json['created'],
    'interval': !exists(json, 'interval') ? undefined : json['interval'],
    'lastError': !exists(json, 'last_error') ? undefined : json['last_error'],
    'lastUpdate': !exists(json, 'last_update') ? undefined : json['last_update'],
    'remoteAddress': !exists(json, 'remote_address') ? undefined : json['remote_address'],
    'remoteName': !exists(json, 'remote_name') ? undefined : json['remote_name'],
    'repoName': !exists(json, 'repo_name') ? undefined : json['repo_name'],
    'syncOnCommit': !exists(json, 'sync_on_commit') ? undefined : json['sync_on_commit']
  };
}

/* tslint:disable */
/* eslint-disable */
/**
 * Gitea API.
 * This documentation describes the Gitea API.
 *
 * The version of the OpenAPI document: 1.20.4
 * 
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */

function ReactionFromJSON(json) {
  return ReactionFromJSONTyped(json);
}
function ReactionFromJSONTyped(json, ignoreDiscriminator) {
  if (json === undefined || json === null) {
    return json;
  }
  return {
    'content': !exists(json, 'content') ? undefined : json['content'],
    'createdAt': !exists(json, 'created_at') ? undefined : new Date(json['created_at']),
    'user': !exists(json, 'user') ? undefined : UserFromJSON(json['user'])
  };
}

/* tslint:disable */
/* eslint-disable */
/**
 * Gitea API.
 * This documentation describes the Gitea API.
 *
 * The version of the OpenAPI document: 1.20.4
 * 
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */

function ReferenceFromJSON(json) {
  return ReferenceFromJSONTyped(json);
}
function ReferenceFromJSONTyped(json, ignoreDiscriminator) {
  if (json === undefined || json === null) {
    return json;
  }
  return {
    'object': !exists(json, 'object') ? undefined : GitObjectFromJSON(json['object']),
    'ref': !exists(json, 'ref') ? undefined : json['ref'],
    'url': !exists(json, 'url') ? undefined : json['url']
  };
}

/* tslint:disable */
/* eslint-disable */
/**
 * Gitea API.
 * This documentation describes the Gitea API.
 *
 * The version of the OpenAPI document: 1.20.4
 * 
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */

function ReleaseFromJSON(json) {
  return ReleaseFromJSONTyped(json);
}
function ReleaseFromJSONTyped(json, ignoreDiscriminator) {
  if (json === undefined || json === null) {
    return json;
  }
  return {
    'assets': !exists(json, 'assets') ? undefined : json['assets'].map(AttachmentFromJSON),
    'author': !exists(json, 'author') ? undefined : UserFromJSON(json['author']),
    'body': !exists(json, 'body') ? undefined : json['body'],
    'createdAt': !exists(json, 'created_at') ? undefined : new Date(json['created_at']),
    'draft': !exists(json, 'draft') ? undefined : json['draft'],
    'htmlUrl': !exists(json, 'html_url') ? undefined : json['html_url'],
    'id': !exists(json, 'id') ? undefined : json['id'],
    'name': !exists(json, 'name') ? undefined : json['name'],
    'prerelease': !exists(json, 'prerelease') ? undefined : json['prerelease'],
    'publishedAt': !exists(json, 'published_at') ? undefined : new Date(json['published_at']),
    'tagName': !exists(json, 'tag_name') ? undefined : json['tag_name'],
    'tarballUrl': !exists(json, 'tarball_url') ? undefined : json['tarball_url'],
    'targetCommitish': !exists(json, 'target_commitish') ? undefined : json['target_commitish'],
    'url': !exists(json, 'url') ? undefined : json['url'],
    'zipballUrl': !exists(json, 'zipball_url') ? undefined : json['zipball_url']
  };
}

/* tslint:disable */
/* eslint-disable */
/**
 * Gitea API.
 * This documentation describes the Gitea API.
 *
 * The version of the OpenAPI document: 1.20.4
 * 
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */

function RepoCollaboratorPermissionFromJSON(json) {
  return RepoCollaboratorPermissionFromJSONTyped(json);
}
function RepoCollaboratorPermissionFromJSONTyped(json, ignoreDiscriminator) {
  if (json === undefined || json === null) {
    return json;
  }
  return {
    'permission': !exists(json, 'permission') ? undefined : json['permission'],
    'roleName': !exists(json, 'role_name') ? undefined : json['role_name'],
    'user': !exists(json, 'user') ? undefined : UserFromJSON(json['user'])
  };
}

/* tslint:disable */
/* eslint-disable */
/**
 * Gitea API.
 * This documentation describes the Gitea API.
 *
 * The version of the OpenAPI document: 1.20.4
 * 
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */

function RepoTopicOptionsToJSON(value) {
  if (value === undefined) {
    return undefined;
  }
  if (value === null) {
    return null;
  }
  return {
    'topics': value.topics
  };
}

/* tslint:disable */
/* eslint-disable */
/**
 * Gitea API.
 * This documentation describes the Gitea API.
 *
 * The version of the OpenAPI document: 1.20.4
 * 
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */

function SearchResultsFromJSON(json) {
  return SearchResultsFromJSONTyped(json);
}
function SearchResultsFromJSONTyped(json, ignoreDiscriminator) {
  if (json === undefined || json === null) {
    return json;
  }
  return {
    'data': !exists(json, 'data') ? undefined : json['data'].map(RepositoryFromJSON),
    'ok': !exists(json, 'ok') ? undefined : json['ok']
  };
}

/* tslint:disable */
/* eslint-disable */
/**
 * Gitea API.
 * This documentation describes the Gitea API.
 *
 * The version of the OpenAPI document: 1.20.4
 * 
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */

function SubmitPullReviewOptionsToJSON(value) {
  if (value === undefined) {
    return undefined;
  }
  if (value === null) {
    return null;
  }
  return {
    'body': value.body,
    'event': value.event
  };
}

/* tslint:disable */
/* eslint-disable */
/**
 * Gitea API.
 * This documentation describes the Gitea API.
 *
 * The version of the OpenAPI document: 1.20.4
 * 
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */

function TagFromJSON(json) {
  return TagFromJSONTyped(json);
}
function TagFromJSONTyped(json, ignoreDiscriminator) {
  if (json === undefined || json === null) {
    return json;
  }
  return {
    'commit': !exists(json, 'commit') ? undefined : CommitMetaFromJSON(json['commit']),
    'id': !exists(json, 'id') ? undefined : json['id'],
    'message': !exists(json, 'message') ? undefined : json['message'],
    'name': !exists(json, 'name') ? undefined : json['name'],
    'tarballUrl': !exists(json, 'tarball_url') ? undefined : json['tarball_url'],
    'zipballUrl': !exists(json, 'zipball_url') ? undefined : json['zipball_url']
  };
}

/* tslint:disable */
/* eslint-disable */
/**
 * Gitea API.
 * This documentation describes the Gitea API.
 *
 * The version of the OpenAPI document: 1.20.4
 * 
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */

function TrackedTimeFromJSON(json) {
  return TrackedTimeFromJSONTyped(json);
}
function TrackedTimeFromJSONTyped(json, ignoreDiscriminator) {
  if (json === undefined || json === null) {
    return json;
  }
  return {
    'created': !exists(json, 'created') ? undefined : new Date(json['created']),
    'id': !exists(json, 'id') ? undefined : json['id'],
    'issue': !exists(json, 'issue') ? undefined : IssueFromJSON(json['issue']),
    'issueId': !exists(json, 'issue_id') ? undefined : json['issue_id'],
    'time': !exists(json, 'time') ? undefined : json['time'],
    'userId': !exists(json, 'user_id') ? undefined : json['user_id'],
    'userName': !exists(json, 'user_name') ? undefined : json['user_name']
  };
}

/* tslint:disable */
/* eslint-disable */
/**
 * Gitea API.
 * This documentation describes the Gitea API.
 *
 * The version of the OpenAPI document: 1.20.4
 * 
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */

function TimelineCommentFromJSON(json) {
  return TimelineCommentFromJSONTyped(json);
}
function TimelineCommentFromJSONTyped(json, ignoreDiscriminator) {
  if (json === undefined || json === null) {
    return json;
  }
  return {
    'assignee': !exists(json, 'assignee') ? undefined : UserFromJSON(json['assignee']),
    'assigneeTeam': !exists(json, 'assignee_team') ? undefined : TeamFromJSON(json['assignee_team']),
    'body': !exists(json, 'body') ? undefined : json['body'],
    'createdAt': !exists(json, 'created_at') ? undefined : new Date(json['created_at']),
    'dependentIssue': !exists(json, 'dependent_issue') ? undefined : IssueFromJSON(json['dependent_issue']),
    'htmlUrl': !exists(json, 'html_url') ? undefined : json['html_url'],
    'id': !exists(json, 'id') ? undefined : json['id'],
    'issueUrl': !exists(json, 'issue_url') ? undefined : json['issue_url'],
    'label': !exists(json, 'label') ? undefined : LabelFromJSON(json['label']),
    'milestone': !exists(json, 'milestone') ? undefined : MilestoneFromJSON(json['milestone']),
    'newRef': !exists(json, 'new_ref') ? undefined : json['new_ref'],
    'newTitle': !exists(json, 'new_title') ? undefined : json['new_title'],
    'oldMilestone': !exists(json, 'old_milestone') ? undefined : MilestoneFromJSON(json['old_milestone']),
    'oldProjectId': !exists(json, 'old_project_id') ? undefined : json['old_project_id'],
    'oldRef': !exists(json, 'old_ref') ? undefined : json['old_ref'],
    'oldTitle': !exists(json, 'old_title') ? undefined : json['old_title'],
    'projectId': !exists(json, 'project_id') ? undefined : json['project_id'],
    'pullRequestUrl': !exists(json, 'pull_request_url') ? undefined : json['pull_request_url'],
    'refAction': !exists(json, 'ref_action') ? undefined : json['ref_action'],
    'refComment': !exists(json, 'ref_comment') ? undefined : CommentFromJSON(json['ref_comment']),
    'refCommitSha': !exists(json, 'ref_commit_sha') ? undefined : json['ref_commit_sha'],
    'refIssue': !exists(json, 'ref_issue') ? undefined : IssueFromJSON(json['ref_issue']),
    'removedAssignee': !exists(json, 'removed_assignee') ? undefined : json['removed_assignee'],
    'resolveDoer': !exists(json, 'resolve_doer') ? undefined : UserFromJSON(json['resolve_doer']),
    'reviewId': !exists(json, 'review_id') ? undefined : json['review_id'],
    'trackedTime': !exists(json, 'tracked_time') ? undefined : TrackedTimeFromJSON(json['tracked_time']),
    'type': !exists(json, 'type') ? undefined : json['type'],
    'updatedAt': !exists(json, 'updated_at') ? undefined : new Date(json['updated_at']),
    'user': !exists(json, 'user') ? undefined : UserFromJSON(json['user'])
  };
}

/* tslint:disable */
/* eslint-disable */
/**
 * Gitea API.
 * This documentation describes the Gitea API.
 *
 * The version of the OpenAPI document: 1.20.4
 * 
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */

function TopicNameFromJSON(json) {
  return TopicNameFromJSONTyped(json);
}
function TopicNameFromJSONTyped(json, ignoreDiscriminator) {
  if (json === undefined || json === null) {
    return json;
  }
  return {
    'topics': !exists(json, 'topics') ? undefined : json['topics']
  };
}

/* tslint:disable */
/* eslint-disable */
/**
 * Gitea API.
 * This documentation describes the Gitea API.
 *
 * The version of the OpenAPI document: 1.20.4
 * 
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */

function TopicResponseFromJSON(json) {
  return TopicResponseFromJSONTyped(json);
}
function TopicResponseFromJSONTyped(json, ignoreDiscriminator) {
  if (json === undefined || json === null) {
    return json;
  }
  return {
    'created': !exists(json, 'created') ? undefined : new Date(json['created']),
    'id': !exists(json, 'id') ? undefined : json['id'],
    'repoCount': !exists(json, 'repo_count') ? undefined : json['repo_count'],
    'topicName': !exists(json, 'topic_name') ? undefined : json['topic_name'],
    'updated': !exists(json, 'updated') ? undefined : new Date(json['updated'])
  };
}

/* tslint:disable */
/* eslint-disable */
/**
 * Gitea API.
 * This documentation describes the Gitea API.
 *
 * The version of the OpenAPI document: 1.20.4
 * 
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */

function TransferRepoOptionToJSON(value) {
  if (value === undefined) {
    return undefined;
  }
  if (value === null) {
    return null;
  }
  return {
    'new_owner': value.newOwner,
    'team_ids': value.teamIds
  };
}

/* tslint:disable */
/* eslint-disable */
/**
 * Gitea API.
 * This documentation describes the Gitea API.
 *
 * The version of the OpenAPI document: 1.20.4
 * 
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */

function UpdateFileOptionsToJSON(value) {
  if (value === undefined) {
    return undefined;
  }
  if (value === null) {
    return null;
  }
  return {
    'author': IdentityToJSON(value.author),
    'branch': value.branch,
    'committer': IdentityToJSON(value.committer),
    'content': value.content,
    'dates': CommitDateOptionsToJSON(value.dates),
    'from_path': value.fromPath,
    'message': value.message,
    'new_branch': value.newBranch,
    'sha': value.sha,
    'signoff': value.signoff
  };
}

/* tslint:disable */
/* eslint-disable */
/**
 * Gitea API.
 * This documentation describes the Gitea API.
 *
 * The version of the OpenAPI document: 1.20.4
 * 
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */

function WatchInfoFromJSON(json) {
  return WatchInfoFromJSONTyped(json);
}
function WatchInfoFromJSONTyped(json, ignoreDiscriminator) {
  if (json === undefined || json === null) {
    return json;
  }
  return {
    'createdAt': !exists(json, 'created_at') ? undefined : new Date(json['created_at']),
    'ignored': !exists(json, 'ignored') ? undefined : json['ignored'],
    'reason': !exists(json, 'reason') ? undefined : json['reason'],
    'repositoryUrl': !exists(json, 'repository_url') ? undefined : json['repository_url'],
    'subscribed': !exists(json, 'subscribed') ? undefined : json['subscribed'],
    'url': !exists(json, 'url') ? undefined : json['url']
  };
}

/* tslint:disable */
/* eslint-disable */
/**
 * Gitea API.
 * This documentation describes the Gitea API.
 *
 * The version of the OpenAPI document: 1.20.4
 * 
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */

function WikiCommitFromJSON(json) {
  return WikiCommitFromJSONTyped(json);
}
function WikiCommitFromJSONTyped(json, ignoreDiscriminator) {
  if (json === undefined || json === null) {
    return json;
  }
  return {
    'author': !exists(json, 'author') ? undefined : CommitUserFromJSON(json['author']),
    'commiter': !exists(json, 'commiter') ? undefined : CommitUserFromJSON(json['commiter']),
    'message': !exists(json, 'message') ? undefined : json['message'],
    'sha': !exists(json, 'sha') ? undefined : json['sha']
  };
}

/* tslint:disable */
/* eslint-disable */
/**
 * Gitea API.
 * This documentation describes the Gitea API.
 *
 * The version of the OpenAPI document: 1.20.4
 * 
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */

function WikiCommitListFromJSON(json) {
  return WikiCommitListFromJSONTyped(json);
}
function WikiCommitListFromJSONTyped(json, ignoreDiscriminator) {
  if (json === undefined || json === null) {
    return json;
  }
  return {
    'commits': !exists(json, 'commits') ? undefined : json['commits'].map(WikiCommitFromJSON),
    'count': !exists(json, 'count') ? undefined : json['count']
  };
}

/* tslint:disable */
/* eslint-disable */
/**
 * Gitea API.
 * This documentation describes the Gitea API.
 *
 * The version of the OpenAPI document: 1.20.4
 * 
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */

function WikiPageFromJSON(json) {
  return WikiPageFromJSONTyped(json);
}
function WikiPageFromJSONTyped(json, ignoreDiscriminator) {
  if (json === undefined || json === null) {
    return json;
  }
  return {
    'commitCount': !exists(json, 'commit_count') ? undefined : json['commit_count'],
    'contentBase64': !exists(json, 'content_base64') ? undefined : json['content_base64'],
    'footer': !exists(json, 'footer') ? undefined : json['footer'],
    'htmlUrl': !exists(json, 'html_url') ? undefined : json['html_url'],
    'lastCommit': !exists(json, 'last_commit') ? undefined : WikiCommitFromJSON(json['last_commit']),
    'sidebar': !exists(json, 'sidebar') ? undefined : json['sidebar'],
    'subUrl': !exists(json, 'sub_url') ? undefined : json['sub_url'],
    'title': !exists(json, 'title') ? undefined : json['title']
  };
}

/* tslint:disable */
/* eslint-disable */
/**
 * Gitea API.
 * This documentation describes the Gitea API.
 *
 * The version of the OpenAPI document: 1.20.4
 * 
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */

function WikiPageMetaDataFromJSON(json) {
  return WikiPageMetaDataFromJSONTyped(json);
}
function WikiPageMetaDataFromJSONTyped(json, ignoreDiscriminator) {
  if (json === undefined || json === null) {
    return json;
  }
  return {
    'htmlUrl': !exists(json, 'html_url') ? undefined : json['html_url'],
    'lastCommit': !exists(json, 'last_commit') ? undefined : WikiCommitFromJSON(json['last_commit']),
    'subUrl': !exists(json, 'sub_url') ? undefined : json['sub_url'],
    'title': !exists(json, 'title') ? undefined : json['title']
  };
}

/* tslint:disable */
/* eslint-disable */
/**
 * Gitea API.
 * This documentation describes the Gitea API.
 *
 * The version of the OpenAPI document: 1.20.4
 * 
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */

/**
 * 
 */
class IssueApi extends BaseAPI {
  /**
   * Add a label to an issue
   */
  async issueAddLabelRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling issueAddLabel.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling issueAddLabel.');
    }
    if (requestParameters.index === null || requestParameters.index === undefined) {
      throw new RequiredError('index', 'Required parameter requestParameters.index was null or undefined when calling issueAddLabel.');
    }
    const queryParameters = {};
    const headerParameters = {};
    headerParameters['Content-Type'] = 'application/json';
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/issues/{index}/labels`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))).replace(`{${"index"}}`, encodeURIComponent(String(requestParameters.index))),
      method: 'POST',
      headers: headerParameters,
      query: queryParameters,
      body: IssueLabelsOptionToJSON(requestParameters.body)
    }, initOverrides);
    return new JSONApiResponse(response, jsonValue => jsonValue.map(LabelFromJSON));
  }

  /**
   * Add a label to an issue
   */
  async issueAddLabel(requestParameters, initOverrides) {
    const response = await this.issueAddLabelRaw(requestParameters, initOverrides);
    return await response.value();
  }

  /**
   * Subscribe user to issue
   */
  async issueAddSubscriptionRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling issueAddSubscription.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling issueAddSubscription.');
    }
    if (requestParameters.index === null || requestParameters.index === undefined) {
      throw new RequiredError('index', 'Required parameter requestParameters.index was null or undefined when calling issueAddSubscription.');
    }
    if (requestParameters.user === null || requestParameters.user === undefined) {
      throw new RequiredError('user', 'Required parameter requestParameters.user was null or undefined when calling issueAddSubscription.');
    }
    const queryParameters = {};
    const headerParameters = {};
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/issues/{index}/subscriptions/{user}`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))).replace(`{${"index"}}`, encodeURIComponent(String(requestParameters.index))).replace(`{${"user"}}`, encodeURIComponent(String(requestParameters.user))),
      method: 'PUT',
      headers: headerParameters,
      query: queryParameters
    }, initOverrides);
    return new VoidApiResponse(response);
  }

  /**
   * Subscribe user to issue
   */
  async issueAddSubscription(requestParameters, initOverrides) {
    await this.issueAddSubscriptionRaw(requestParameters, initOverrides);
  }

  /**
   * Add tracked time to a issue
   */
  async issueAddTimeRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling issueAddTime.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling issueAddTime.');
    }
    if (requestParameters.index === null || requestParameters.index === undefined) {
      throw new RequiredError('index', 'Required parameter requestParameters.index was null or undefined when calling issueAddTime.');
    }
    const queryParameters = {};
    const headerParameters = {};
    headerParameters['Content-Type'] = 'application/json';
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/issues/{index}/times`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))).replace(`{${"index"}}`, encodeURIComponent(String(requestParameters.index))),
      method: 'POST',
      headers: headerParameters,
      query: queryParameters,
      body: AddTimeOptionToJSON(requestParameters.body)
    }, initOverrides);
    return new JSONApiResponse(response, jsonValue => TrackedTimeFromJSON(jsonValue));
  }

  /**
   * Add tracked time to a issue
   */
  async issueAddTime(requestParameters, initOverrides) {
    const response = await this.issueAddTimeRaw(requestParameters, initOverrides);
    return await response.value();
  }

  /**
   * Check if user is subscribed to an issue
   */
  async issueCheckSubscriptionRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling issueCheckSubscription.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling issueCheckSubscription.');
    }
    if (requestParameters.index === null || requestParameters.index === undefined) {
      throw new RequiredError('index', 'Required parameter requestParameters.index was null or undefined when calling issueCheckSubscription.');
    }
    const queryParameters = {};
    const headerParameters = {};
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/issues/{index}/subscriptions/check`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))).replace(`{${"index"}}`, encodeURIComponent(String(requestParameters.index))),
      method: 'GET',
      headers: headerParameters,
      query: queryParameters
    }, initOverrides);
    return new JSONApiResponse(response, jsonValue => WatchInfoFromJSON(jsonValue));
  }

  /**
   * Check if user is subscribed to an issue
   */
  async issueCheckSubscription(requestParameters, initOverrides) {
    const response = await this.issueCheckSubscriptionRaw(requestParameters, initOverrides);
    return await response.value();
  }

  /**
   * Remove all labels from an issue
   */
  async issueClearLabelsRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling issueClearLabels.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling issueClearLabels.');
    }
    if (requestParameters.index === null || requestParameters.index === undefined) {
      throw new RequiredError('index', 'Required parameter requestParameters.index was null or undefined when calling issueClearLabels.');
    }
    const queryParameters = {};
    const headerParameters = {};
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/issues/{index}/labels`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))).replace(`{${"index"}}`, encodeURIComponent(String(requestParameters.index))),
      method: 'DELETE',
      headers: headerParameters,
      query: queryParameters
    }, initOverrides);
    return new VoidApiResponse(response);
  }

  /**
   * Remove all labels from an issue
   */
  async issueClearLabels(requestParameters, initOverrides) {
    await this.issueClearLabelsRaw(requestParameters, initOverrides);
  }

  /**
   * Add a comment to an issue
   */
  async issueCreateCommentRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling issueCreateComment.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling issueCreateComment.');
    }
    if (requestParameters.index === null || requestParameters.index === undefined) {
      throw new RequiredError('index', 'Required parameter requestParameters.index was null or undefined when calling issueCreateComment.');
    }
    const queryParameters = {};
    const headerParameters = {};
    headerParameters['Content-Type'] = 'application/json';
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/issues/{index}/comments`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))).replace(`{${"index"}}`, encodeURIComponent(String(requestParameters.index))),
      method: 'POST',
      headers: headerParameters,
      query: queryParameters,
      body: CreateIssueCommentOptionToJSON(requestParameters.body)
    }, initOverrides);
    return new JSONApiResponse(response, jsonValue => CommentFromJSON(jsonValue));
  }

  /**
   * Add a comment to an issue
   */
  async issueCreateComment(requestParameters, initOverrides) {
    const response = await this.issueCreateCommentRaw(requestParameters, initOverrides);
    return await response.value();
  }

  /**
   * Create an issue. If using deadline only the date will be taken into account, and time of day ignored.
   */
  async issueCreateIssueRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling issueCreateIssue.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling issueCreateIssue.');
    }
    const queryParameters = {};
    const headerParameters = {};
    headerParameters['Content-Type'] = 'application/json';
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/issues`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))),
      method: 'POST',
      headers: headerParameters,
      query: queryParameters,
      body: CreateIssueOptionToJSON(requestParameters.body)
    }, initOverrides);
    return new JSONApiResponse(response, jsonValue => IssueFromJSON(jsonValue));
  }

  /**
   * Create an issue. If using deadline only the date will be taken into account, and time of day ignored.
   */
  async issueCreateIssue(requestParameters, initOverrides) {
    const response = await this.issueCreateIssueRaw(requestParameters, initOverrides);
    return await response.value();
  }

  /**
   * Create an issue attachment
   */
  async issueCreateIssueAttachmentRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling issueCreateIssueAttachment.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling issueCreateIssueAttachment.');
    }
    if (requestParameters.index === null || requestParameters.index === undefined) {
      throw new RequiredError('index', 'Required parameter requestParameters.index was null or undefined when calling issueCreateIssueAttachment.');
    }
    if (requestParameters.attachment === null || requestParameters.attachment === undefined) {
      throw new RequiredError('attachment', 'Required parameter requestParameters.attachment was null or undefined when calling issueCreateIssueAttachment.');
    }
    const queryParameters = {};
    if (requestParameters.name !== undefined) {
      queryParameters['name'] = requestParameters.name;
    }
    const headerParameters = {};
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const consumes = [{
      contentType: 'multipart/form-data'
    }];
    // @ts-ignore: canConsumeForm may be unused
    const canConsumeForm$1 = canConsumeForm(consumes);
    let formParams;
    let useForm = false;
    // use FormData to transmit files using content-type "multipart/form-data"
    useForm = canConsumeForm$1;
    if (useForm) {
      formParams = new FormData();
    } else {
      formParams = new URLSearchParams();
    }
    if (requestParameters.attachment !== undefined) {
      formParams.append('attachment', requestParameters.attachment);
    }
    const response = await this.request({
      path: `/repos/{owner}/{repo}/issues/{index}/assets`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))).replace(`{${"index"}}`, encodeURIComponent(String(requestParameters.index))),
      method: 'POST',
      headers: headerParameters,
      query: queryParameters,
      body: formParams
    }, initOverrides);
    return new JSONApiResponse(response, jsonValue => AttachmentFromJSON(jsonValue));
  }

  /**
   * Create an issue attachment
   */
  async issueCreateIssueAttachment(requestParameters, initOverrides) {
    const response = await this.issueCreateIssueAttachmentRaw(requestParameters, initOverrides);
    return await response.value();
  }

  /**
   * Block the issue given in the body by the issue in path
   */
  async issueCreateIssueBlockingRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling issueCreateIssueBlocking.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling issueCreateIssueBlocking.');
    }
    if (requestParameters.index === null || requestParameters.index === undefined) {
      throw new RequiredError('index', 'Required parameter requestParameters.index was null or undefined when calling issueCreateIssueBlocking.');
    }
    const queryParameters = {};
    const headerParameters = {};
    headerParameters['Content-Type'] = 'application/json';
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/issues/{index}/blocks`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))).replace(`{${"index"}}`, encodeURIComponent(String(requestParameters.index))),
      method: 'POST',
      headers: headerParameters,
      query: queryParameters,
      body: IssueMetaToJSON(requestParameters.body)
    }, initOverrides);
    return new JSONApiResponse(response, jsonValue => IssueFromJSON(jsonValue));
  }

  /**
   * Block the issue given in the body by the issue in path
   */
  async issueCreateIssueBlocking(requestParameters, initOverrides) {
    const response = await this.issueCreateIssueBlockingRaw(requestParameters, initOverrides);
    return await response.value();
  }

  /**
   * Create a comment attachment
   */
  async issueCreateIssueCommentAttachmentRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling issueCreateIssueCommentAttachment.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling issueCreateIssueCommentAttachment.');
    }
    if (requestParameters.id === null || requestParameters.id === undefined) {
      throw new RequiredError('id', 'Required parameter requestParameters.id was null or undefined when calling issueCreateIssueCommentAttachment.');
    }
    if (requestParameters.attachment === null || requestParameters.attachment === undefined) {
      throw new RequiredError('attachment', 'Required parameter requestParameters.attachment was null or undefined when calling issueCreateIssueCommentAttachment.');
    }
    const queryParameters = {};
    if (requestParameters.name !== undefined) {
      queryParameters['name'] = requestParameters.name;
    }
    const headerParameters = {};
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const consumes = [{
      contentType: 'multipart/form-data'
    }];
    // @ts-ignore: canConsumeForm may be unused
    const canConsumeForm$1 = canConsumeForm(consumes);
    let formParams;
    let useForm = false;
    // use FormData to transmit files using content-type "multipart/form-data"
    useForm = canConsumeForm$1;
    if (useForm) {
      formParams = new FormData();
    } else {
      formParams = new URLSearchParams();
    }
    if (requestParameters.attachment !== undefined) {
      formParams.append('attachment', requestParameters.attachment);
    }
    const response = await this.request({
      path: `/repos/{owner}/{repo}/issues/comments/{id}/assets`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))).replace(`{${"id"}}`, encodeURIComponent(String(requestParameters.id))),
      method: 'POST',
      headers: headerParameters,
      query: queryParameters,
      body: formParams
    }, initOverrides);
    return new JSONApiResponse(response, jsonValue => AttachmentFromJSON(jsonValue));
  }

  /**
   * Create a comment attachment
   */
  async issueCreateIssueCommentAttachment(requestParameters, initOverrides) {
    const response = await this.issueCreateIssueCommentAttachmentRaw(requestParameters, initOverrides);
    return await response.value();
  }

  /**
   * Make the issue in the url depend on the issue in the form.
   */
  async issueCreateIssueDependenciesRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling issueCreateIssueDependencies.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling issueCreateIssueDependencies.');
    }
    if (requestParameters.index === null || requestParameters.index === undefined) {
      throw new RequiredError('index', 'Required parameter requestParameters.index was null or undefined when calling issueCreateIssueDependencies.');
    }
    const queryParameters = {};
    const headerParameters = {};
    headerParameters['Content-Type'] = 'application/json';
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/issues/{index}/dependencies`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))).replace(`{${"index"}}`, encodeURIComponent(String(requestParameters.index))),
      method: 'POST',
      headers: headerParameters,
      query: queryParameters,
      body: IssueMetaToJSON(requestParameters.body)
    }, initOverrides);
    return new JSONApiResponse(response, jsonValue => IssueFromJSON(jsonValue));
  }

  /**
   * Make the issue in the url depend on the issue in the form.
   */
  async issueCreateIssueDependencies(requestParameters, initOverrides) {
    const response = await this.issueCreateIssueDependenciesRaw(requestParameters, initOverrides);
    return await response.value();
  }

  /**
   * Create a label
   */
  async issueCreateLabelRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling issueCreateLabel.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling issueCreateLabel.');
    }
    const queryParameters = {};
    const headerParameters = {};
    headerParameters['Content-Type'] = 'application/json';
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/labels`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))),
      method: 'POST',
      headers: headerParameters,
      query: queryParameters,
      body: CreateLabelOptionToJSON(requestParameters.body)
    }, initOverrides);
    return new JSONApiResponse(response, jsonValue => LabelFromJSON(jsonValue));
  }

  /**
   * Create a label
   */
  async issueCreateLabel(requestParameters, initOverrides) {
    const response = await this.issueCreateLabelRaw(requestParameters, initOverrides);
    return await response.value();
  }

  /**
   * Create a milestone
   */
  async issueCreateMilestoneRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling issueCreateMilestone.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling issueCreateMilestone.');
    }
    const queryParameters = {};
    const headerParameters = {};
    headerParameters['Content-Type'] = 'application/json';
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/milestones`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))),
      method: 'POST',
      headers: headerParameters,
      query: queryParameters,
      body: CreateMilestoneOptionToJSON(requestParameters.body)
    }, initOverrides);
    return new JSONApiResponse(response, jsonValue => MilestoneFromJSON(jsonValue));
  }

  /**
   * Create a milestone
   */
  async issueCreateMilestone(requestParameters, initOverrides) {
    const response = await this.issueCreateMilestoneRaw(requestParameters, initOverrides);
    return await response.value();
  }

  /**
   * Delete an issue
   */
  async issueDeleteRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling issueDelete.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling issueDelete.');
    }
    if (requestParameters.index === null || requestParameters.index === undefined) {
      throw new RequiredError('index', 'Required parameter requestParameters.index was null or undefined when calling issueDelete.');
    }
    const queryParameters = {};
    const headerParameters = {};
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/issues/{index}`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))).replace(`{${"index"}}`, encodeURIComponent(String(requestParameters.index))),
      method: 'DELETE',
      headers: headerParameters,
      query: queryParameters
    }, initOverrides);
    return new VoidApiResponse(response);
  }

  /**
   * Delete an issue
   */
  async issueDelete(requestParameters, initOverrides) {
    await this.issueDeleteRaw(requestParameters, initOverrides);
  }

  /**
   * Delete a comment
   */
  async issueDeleteCommentRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling issueDeleteComment.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling issueDeleteComment.');
    }
    if (requestParameters.id === null || requestParameters.id === undefined) {
      throw new RequiredError('id', 'Required parameter requestParameters.id was null or undefined when calling issueDeleteComment.');
    }
    const queryParameters = {};
    const headerParameters = {};
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/issues/comments/{id}`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))).replace(`{${"id"}}`, encodeURIComponent(String(requestParameters.id))),
      method: 'DELETE',
      headers: headerParameters,
      query: queryParameters
    }, initOverrides);
    return new VoidApiResponse(response);
  }

  /**
   * Delete a comment
   */
  async issueDeleteComment(requestParameters, initOverrides) {
    await this.issueDeleteCommentRaw(requestParameters, initOverrides);
  }

  /**
   * Delete a comment
   */
  async issueDeleteCommentDeprecatedRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling issueDeleteCommentDeprecated.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling issueDeleteCommentDeprecated.');
    }
    if (requestParameters.index === null || requestParameters.index === undefined) {
      throw new RequiredError('index', 'Required parameter requestParameters.index was null or undefined when calling issueDeleteCommentDeprecated.');
    }
    if (requestParameters.id === null || requestParameters.id === undefined) {
      throw new RequiredError('id', 'Required parameter requestParameters.id was null or undefined when calling issueDeleteCommentDeprecated.');
    }
    const queryParameters = {};
    const headerParameters = {};
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/issues/{index}/comments/{id}`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))).replace(`{${"index"}}`, encodeURIComponent(String(requestParameters.index))).replace(`{${"id"}}`, encodeURIComponent(String(requestParameters.id))),
      method: 'DELETE',
      headers: headerParameters,
      query: queryParameters
    }, initOverrides);
    return new VoidApiResponse(response);
  }

  /**
   * Delete a comment
   */
  async issueDeleteCommentDeprecated(requestParameters, initOverrides) {
    await this.issueDeleteCommentDeprecatedRaw(requestParameters, initOverrides);
  }

  /**
   * Remove a reaction from a comment of an issue
   */
  async issueDeleteCommentReactionRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling issueDeleteCommentReaction.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling issueDeleteCommentReaction.');
    }
    if (requestParameters.id === null || requestParameters.id === undefined) {
      throw new RequiredError('id', 'Required parameter requestParameters.id was null or undefined when calling issueDeleteCommentReaction.');
    }
    const queryParameters = {};
    const headerParameters = {};
    headerParameters['Content-Type'] = 'application/json';
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/issues/comments/{id}/reactions`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))).replace(`{${"id"}}`, encodeURIComponent(String(requestParameters.id))),
      method: 'DELETE',
      headers: headerParameters,
      query: queryParameters,
      body: EditReactionOptionToJSON(requestParameters.content)
    }, initOverrides);
    return new VoidApiResponse(response);
  }

  /**
   * Remove a reaction from a comment of an issue
   */
  async issueDeleteCommentReaction(requestParameters, initOverrides) {
    await this.issueDeleteCommentReactionRaw(requestParameters, initOverrides);
  }

  /**
   * Delete an issue attachment
   */
  async issueDeleteIssueAttachmentRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling issueDeleteIssueAttachment.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling issueDeleteIssueAttachment.');
    }
    if (requestParameters.index === null || requestParameters.index === undefined) {
      throw new RequiredError('index', 'Required parameter requestParameters.index was null or undefined when calling issueDeleteIssueAttachment.');
    }
    if (requestParameters.attachmentId === null || requestParameters.attachmentId === undefined) {
      throw new RequiredError('attachmentId', 'Required parameter requestParameters.attachmentId was null or undefined when calling issueDeleteIssueAttachment.');
    }
    const queryParameters = {};
    const headerParameters = {};
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/issues/{index}/assets/{attachment_id}`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))).replace(`{${"index"}}`, encodeURIComponent(String(requestParameters.index))).replace(`{${"attachment_id"}}`, encodeURIComponent(String(requestParameters.attachmentId))),
      method: 'DELETE',
      headers: headerParameters,
      query: queryParameters
    }, initOverrides);
    return new VoidApiResponse(response);
  }

  /**
   * Delete an issue attachment
   */
  async issueDeleteIssueAttachment(requestParameters, initOverrides) {
    await this.issueDeleteIssueAttachmentRaw(requestParameters, initOverrides);
  }

  /**
   * Delete a comment attachment
   */
  async issueDeleteIssueCommentAttachmentRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling issueDeleteIssueCommentAttachment.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling issueDeleteIssueCommentAttachment.');
    }
    if (requestParameters.id === null || requestParameters.id === undefined) {
      throw new RequiredError('id', 'Required parameter requestParameters.id was null or undefined when calling issueDeleteIssueCommentAttachment.');
    }
    if (requestParameters.attachmentId === null || requestParameters.attachmentId === undefined) {
      throw new RequiredError('attachmentId', 'Required parameter requestParameters.attachmentId was null or undefined when calling issueDeleteIssueCommentAttachment.');
    }
    const queryParameters = {};
    const headerParameters = {};
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/issues/comments/{id}/assets/{attachment_id}`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))).replace(`{${"id"}}`, encodeURIComponent(String(requestParameters.id))).replace(`{${"attachment_id"}}`, encodeURIComponent(String(requestParameters.attachmentId))),
      method: 'DELETE',
      headers: headerParameters,
      query: queryParameters
    }, initOverrides);
    return new VoidApiResponse(response);
  }

  /**
   * Delete a comment attachment
   */
  async issueDeleteIssueCommentAttachment(requestParameters, initOverrides) {
    await this.issueDeleteIssueCommentAttachmentRaw(requestParameters, initOverrides);
  }

  /**
   * Remove a reaction from an issue
   */
  async issueDeleteIssueReactionRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling issueDeleteIssueReaction.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling issueDeleteIssueReaction.');
    }
    if (requestParameters.index === null || requestParameters.index === undefined) {
      throw new RequiredError('index', 'Required parameter requestParameters.index was null or undefined when calling issueDeleteIssueReaction.');
    }
    const queryParameters = {};
    const headerParameters = {};
    headerParameters['Content-Type'] = 'application/json';
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/issues/{index}/reactions`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))).replace(`{${"index"}}`, encodeURIComponent(String(requestParameters.index))),
      method: 'DELETE',
      headers: headerParameters,
      query: queryParameters,
      body: EditReactionOptionToJSON(requestParameters.content)
    }, initOverrides);
    return new VoidApiResponse(response);
  }

  /**
   * Remove a reaction from an issue
   */
  async issueDeleteIssueReaction(requestParameters, initOverrides) {
    await this.issueDeleteIssueReactionRaw(requestParameters, initOverrides);
  }

  /**
   * Delete a label
   */
  async issueDeleteLabelRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling issueDeleteLabel.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling issueDeleteLabel.');
    }
    if (requestParameters.id === null || requestParameters.id === undefined) {
      throw new RequiredError('id', 'Required parameter requestParameters.id was null or undefined when calling issueDeleteLabel.');
    }
    const queryParameters = {};
    const headerParameters = {};
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/labels/{id}`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))).replace(`{${"id"}}`, encodeURIComponent(String(requestParameters.id))),
      method: 'DELETE',
      headers: headerParameters,
      query: queryParameters
    }, initOverrides);
    return new VoidApiResponse(response);
  }

  /**
   * Delete a label
   */
  async issueDeleteLabel(requestParameters, initOverrides) {
    await this.issueDeleteLabelRaw(requestParameters, initOverrides);
  }

  /**
   * Delete a milestone
   */
  async issueDeleteMilestoneRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling issueDeleteMilestone.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling issueDeleteMilestone.');
    }
    if (requestParameters.id === null || requestParameters.id === undefined) {
      throw new RequiredError('id', 'Required parameter requestParameters.id was null or undefined when calling issueDeleteMilestone.');
    }
    const queryParameters = {};
    const headerParameters = {};
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/milestones/{id}`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))).replace(`{${"id"}}`, encodeURIComponent(String(requestParameters.id))),
      method: 'DELETE',
      headers: headerParameters,
      query: queryParameters
    }, initOverrides);
    return new VoidApiResponse(response);
  }

  /**
   * Delete a milestone
   */
  async issueDeleteMilestone(requestParameters, initOverrides) {
    await this.issueDeleteMilestoneRaw(requestParameters, initOverrides);
  }

  /**
   * Delete an issue\'s existing stopwatch.
   */
  async issueDeleteStopWatchRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling issueDeleteStopWatch.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling issueDeleteStopWatch.');
    }
    if (requestParameters.index === null || requestParameters.index === undefined) {
      throw new RequiredError('index', 'Required parameter requestParameters.index was null or undefined when calling issueDeleteStopWatch.');
    }
    const queryParameters = {};
    const headerParameters = {};
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/issues/{index}/stopwatch/delete`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))).replace(`{${"index"}}`, encodeURIComponent(String(requestParameters.index))),
      method: 'DELETE',
      headers: headerParameters,
      query: queryParameters
    }, initOverrides);
    return new VoidApiResponse(response);
  }

  /**
   * Delete an issue\'s existing stopwatch.
   */
  async issueDeleteStopWatch(requestParameters, initOverrides) {
    await this.issueDeleteStopWatchRaw(requestParameters, initOverrides);
  }

  /**
   * Unsubscribe user from issue
   */
  async issueDeleteSubscriptionRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling issueDeleteSubscription.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling issueDeleteSubscription.');
    }
    if (requestParameters.index === null || requestParameters.index === undefined) {
      throw new RequiredError('index', 'Required parameter requestParameters.index was null or undefined when calling issueDeleteSubscription.');
    }
    if (requestParameters.user === null || requestParameters.user === undefined) {
      throw new RequiredError('user', 'Required parameter requestParameters.user was null or undefined when calling issueDeleteSubscription.');
    }
    const queryParameters = {};
    const headerParameters = {};
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/issues/{index}/subscriptions/{user}`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))).replace(`{${"index"}}`, encodeURIComponent(String(requestParameters.index))).replace(`{${"user"}}`, encodeURIComponent(String(requestParameters.user))),
      method: 'DELETE',
      headers: headerParameters,
      query: queryParameters
    }, initOverrides);
    return new VoidApiResponse(response);
  }

  /**
   * Unsubscribe user from issue
   */
  async issueDeleteSubscription(requestParameters, initOverrides) {
    await this.issueDeleteSubscriptionRaw(requestParameters, initOverrides);
  }

  /**
   * Delete specific tracked time
   */
  async issueDeleteTimeRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling issueDeleteTime.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling issueDeleteTime.');
    }
    if (requestParameters.index === null || requestParameters.index === undefined) {
      throw new RequiredError('index', 'Required parameter requestParameters.index was null or undefined when calling issueDeleteTime.');
    }
    if (requestParameters.id === null || requestParameters.id === undefined) {
      throw new RequiredError('id', 'Required parameter requestParameters.id was null or undefined when calling issueDeleteTime.');
    }
    const queryParameters = {};
    const headerParameters = {};
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/issues/{index}/times/{id}`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))).replace(`{${"index"}}`, encodeURIComponent(String(requestParameters.index))).replace(`{${"id"}}`, encodeURIComponent(String(requestParameters.id))),
      method: 'DELETE',
      headers: headerParameters,
      query: queryParameters
    }, initOverrides);
    return new VoidApiResponse(response);
  }

  /**
   * Delete specific tracked time
   */
  async issueDeleteTime(requestParameters, initOverrides) {
    await this.issueDeleteTimeRaw(requestParameters, initOverrides);
  }

  /**
   * Edit a comment
   */
  async issueEditCommentRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling issueEditComment.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling issueEditComment.');
    }
    if (requestParameters.id === null || requestParameters.id === undefined) {
      throw new RequiredError('id', 'Required parameter requestParameters.id was null or undefined when calling issueEditComment.');
    }
    const queryParameters = {};
    const headerParameters = {};
    headerParameters['Content-Type'] = 'application/json';
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/issues/comments/{id}`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))).replace(`{${"id"}}`, encodeURIComponent(String(requestParameters.id))),
      method: 'PATCH',
      headers: headerParameters,
      query: queryParameters,
      body: EditIssueCommentOptionToJSON(requestParameters.body)
    }, initOverrides);
    return new JSONApiResponse(response, jsonValue => CommentFromJSON(jsonValue));
  }

  /**
   * Edit a comment
   */
  async issueEditComment(requestParameters, initOverrides) {
    const response = await this.issueEditCommentRaw(requestParameters, initOverrides);
    return await response.value();
  }

  /**
   * Edit a comment
   */
  async issueEditCommentDeprecatedRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling issueEditCommentDeprecated.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling issueEditCommentDeprecated.');
    }
    if (requestParameters.index === null || requestParameters.index === undefined) {
      throw new RequiredError('index', 'Required parameter requestParameters.index was null or undefined when calling issueEditCommentDeprecated.');
    }
    if (requestParameters.id === null || requestParameters.id === undefined) {
      throw new RequiredError('id', 'Required parameter requestParameters.id was null or undefined when calling issueEditCommentDeprecated.');
    }
    const queryParameters = {};
    const headerParameters = {};
    headerParameters['Content-Type'] = 'application/json';
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/issues/{index}/comments/{id}`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))).replace(`{${"index"}}`, encodeURIComponent(String(requestParameters.index))).replace(`{${"id"}}`, encodeURIComponent(String(requestParameters.id))),
      method: 'PATCH',
      headers: headerParameters,
      query: queryParameters,
      body: EditIssueCommentOptionToJSON(requestParameters.body)
    }, initOverrides);
    return new JSONApiResponse(response, jsonValue => CommentFromJSON(jsonValue));
  }

  /**
   * Edit a comment
   */
  async issueEditCommentDeprecated(requestParameters, initOverrides) {
    const response = await this.issueEditCommentDeprecatedRaw(requestParameters, initOverrides);
    return await response.value();
  }

  /**
   * Edit an issue. If using deadline only the date will be taken into account, and time of day ignored.
   */
  async issueEditIssueRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling issueEditIssue.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling issueEditIssue.');
    }
    if (requestParameters.index === null || requestParameters.index === undefined) {
      throw new RequiredError('index', 'Required parameter requestParameters.index was null or undefined when calling issueEditIssue.');
    }
    const queryParameters = {};
    const headerParameters = {};
    headerParameters['Content-Type'] = 'application/json';
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/issues/{index}`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))).replace(`{${"index"}}`, encodeURIComponent(String(requestParameters.index))),
      method: 'PATCH',
      headers: headerParameters,
      query: queryParameters,
      body: EditIssueOptionToJSON(requestParameters.body)
    }, initOverrides);
    return new JSONApiResponse(response, jsonValue => IssueFromJSON(jsonValue));
  }

  /**
   * Edit an issue. If using deadline only the date will be taken into account, and time of day ignored.
   */
  async issueEditIssue(requestParameters, initOverrides) {
    const response = await this.issueEditIssueRaw(requestParameters, initOverrides);
    return await response.value();
  }

  /**
   * Edit an issue attachment
   */
  async issueEditIssueAttachmentRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling issueEditIssueAttachment.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling issueEditIssueAttachment.');
    }
    if (requestParameters.index === null || requestParameters.index === undefined) {
      throw new RequiredError('index', 'Required parameter requestParameters.index was null or undefined when calling issueEditIssueAttachment.');
    }
    if (requestParameters.attachmentId === null || requestParameters.attachmentId === undefined) {
      throw new RequiredError('attachmentId', 'Required parameter requestParameters.attachmentId was null or undefined when calling issueEditIssueAttachment.');
    }
    const queryParameters = {};
    const headerParameters = {};
    headerParameters['Content-Type'] = 'application/json';
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/issues/{index}/assets/{attachment_id}`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))).replace(`{${"index"}}`, encodeURIComponent(String(requestParameters.index))).replace(`{${"attachment_id"}}`, encodeURIComponent(String(requestParameters.attachmentId))),
      method: 'PATCH',
      headers: headerParameters,
      query: queryParameters,
      body: EditAttachmentOptionsToJSON(requestParameters.body)
    }, initOverrides);
    return new JSONApiResponse(response, jsonValue => AttachmentFromJSON(jsonValue));
  }

  /**
   * Edit an issue attachment
   */
  async issueEditIssueAttachment(requestParameters, initOverrides) {
    const response = await this.issueEditIssueAttachmentRaw(requestParameters, initOverrides);
    return await response.value();
  }

  /**
   * Edit a comment attachment
   */
  async issueEditIssueCommentAttachmentRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling issueEditIssueCommentAttachment.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling issueEditIssueCommentAttachment.');
    }
    if (requestParameters.id === null || requestParameters.id === undefined) {
      throw new RequiredError('id', 'Required parameter requestParameters.id was null or undefined when calling issueEditIssueCommentAttachment.');
    }
    if (requestParameters.attachmentId === null || requestParameters.attachmentId === undefined) {
      throw new RequiredError('attachmentId', 'Required parameter requestParameters.attachmentId was null or undefined when calling issueEditIssueCommentAttachment.');
    }
    const queryParameters = {};
    const headerParameters = {};
    headerParameters['Content-Type'] = 'application/json';
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/issues/comments/{id}/assets/{attachment_id}`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))).replace(`{${"id"}}`, encodeURIComponent(String(requestParameters.id))).replace(`{${"attachment_id"}}`, encodeURIComponent(String(requestParameters.attachmentId))),
      method: 'PATCH',
      headers: headerParameters,
      query: queryParameters,
      body: EditAttachmentOptionsToJSON(requestParameters.body)
    }, initOverrides);
    return new JSONApiResponse(response, jsonValue => AttachmentFromJSON(jsonValue));
  }

  /**
   * Edit a comment attachment
   */
  async issueEditIssueCommentAttachment(requestParameters, initOverrides) {
    const response = await this.issueEditIssueCommentAttachmentRaw(requestParameters, initOverrides);
    return await response.value();
  }

  /**
   * Set an issue deadline. If set to null, the deadline is deleted. If using deadline only the date will be taken into account, and time of day ignored.
   */
  async issueEditIssueDeadlineRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling issueEditIssueDeadline.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling issueEditIssueDeadline.');
    }
    if (requestParameters.index === null || requestParameters.index === undefined) {
      throw new RequiredError('index', 'Required parameter requestParameters.index was null or undefined when calling issueEditIssueDeadline.');
    }
    const queryParameters = {};
    const headerParameters = {};
    headerParameters['Content-Type'] = 'application/json';
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/issues/{index}/deadline`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))).replace(`{${"index"}}`, encodeURIComponent(String(requestParameters.index))),
      method: 'POST',
      headers: headerParameters,
      query: queryParameters,
      body: EditDeadlineOptionToJSON(requestParameters.body)
    }, initOverrides);
    return new JSONApiResponse(response, jsonValue => IssueDeadlineFromJSON(jsonValue));
  }

  /**
   * Set an issue deadline. If set to null, the deadline is deleted. If using deadline only the date will be taken into account, and time of day ignored.
   */
  async issueEditIssueDeadline(requestParameters, initOverrides) {
    const response = await this.issueEditIssueDeadlineRaw(requestParameters, initOverrides);
    return await response.value();
  }

  /**
   * Update a label
   */
  async issueEditLabelRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling issueEditLabel.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling issueEditLabel.');
    }
    if (requestParameters.id === null || requestParameters.id === undefined) {
      throw new RequiredError('id', 'Required parameter requestParameters.id was null or undefined when calling issueEditLabel.');
    }
    const queryParameters = {};
    const headerParameters = {};
    headerParameters['Content-Type'] = 'application/json';
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/labels/{id}`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))).replace(`{${"id"}}`, encodeURIComponent(String(requestParameters.id))),
      method: 'PATCH',
      headers: headerParameters,
      query: queryParameters,
      body: EditLabelOptionToJSON(requestParameters.body)
    }, initOverrides);
    return new JSONApiResponse(response, jsonValue => LabelFromJSON(jsonValue));
  }

  /**
   * Update a label
   */
  async issueEditLabel(requestParameters, initOverrides) {
    const response = await this.issueEditLabelRaw(requestParameters, initOverrides);
    return await response.value();
  }

  /**
   * Update a milestone
   */
  async issueEditMilestoneRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling issueEditMilestone.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling issueEditMilestone.');
    }
    if (requestParameters.id === null || requestParameters.id === undefined) {
      throw new RequiredError('id', 'Required parameter requestParameters.id was null or undefined when calling issueEditMilestone.');
    }
    const queryParameters = {};
    const headerParameters = {};
    headerParameters['Content-Type'] = 'application/json';
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/milestones/{id}`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))).replace(`{${"id"}}`, encodeURIComponent(String(requestParameters.id))),
      method: 'PATCH',
      headers: headerParameters,
      query: queryParameters,
      body: EditMilestoneOptionToJSON(requestParameters.body)
    }, initOverrides);
    return new JSONApiResponse(response, jsonValue => MilestoneFromJSON(jsonValue));
  }

  /**
   * Update a milestone
   */
  async issueEditMilestone(requestParameters, initOverrides) {
    const response = await this.issueEditMilestoneRaw(requestParameters, initOverrides);
    return await response.value();
  }

  /**
   * Get a comment
   */
  async issueGetCommentRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling issueGetComment.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling issueGetComment.');
    }
    if (requestParameters.id === null || requestParameters.id === undefined) {
      throw new RequiredError('id', 'Required parameter requestParameters.id was null or undefined when calling issueGetComment.');
    }
    const queryParameters = {};
    const headerParameters = {};
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/issues/comments/{id}`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))).replace(`{${"id"}}`, encodeURIComponent(String(requestParameters.id))),
      method: 'GET',
      headers: headerParameters,
      query: queryParameters
    }, initOverrides);
    return new JSONApiResponse(response, jsonValue => CommentFromJSON(jsonValue));
  }

  /**
   * Get a comment
   */
  async issueGetComment(requestParameters, initOverrides) {
    const response = await this.issueGetCommentRaw(requestParameters, initOverrides);
    return await response.value();
  }

  /**
   * Get a list of reactions from a comment of an issue
   */
  async issueGetCommentReactionsRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling issueGetCommentReactions.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling issueGetCommentReactions.');
    }
    if (requestParameters.id === null || requestParameters.id === undefined) {
      throw new RequiredError('id', 'Required parameter requestParameters.id was null or undefined when calling issueGetCommentReactions.');
    }
    const queryParameters = {};
    const headerParameters = {};
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/issues/comments/{id}/reactions`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))).replace(`{${"id"}}`, encodeURIComponent(String(requestParameters.id))),
      method: 'GET',
      headers: headerParameters,
      query: queryParameters
    }, initOverrides);
    return new JSONApiResponse(response, jsonValue => jsonValue.map(ReactionFromJSON));
  }

  /**
   * Get a list of reactions from a comment of an issue
   */
  async issueGetCommentReactions(requestParameters, initOverrides) {
    const response = await this.issueGetCommentReactionsRaw(requestParameters, initOverrides);
    return await response.value();
  }

  /**
   * List all comments on an issue
   */
  async issueGetCommentsRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling issueGetComments.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling issueGetComments.');
    }
    if (requestParameters.index === null || requestParameters.index === undefined) {
      throw new RequiredError('index', 'Required parameter requestParameters.index was null or undefined when calling issueGetComments.');
    }
    const queryParameters = {};
    if (requestParameters.since !== undefined) {
      queryParameters['since'] = requestParameters.since.toISOString();
    }
    if (requestParameters.before !== undefined) {
      queryParameters['before'] = requestParameters.before.toISOString();
    }
    const headerParameters = {};
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/issues/{index}/comments`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))).replace(`{${"index"}}`, encodeURIComponent(String(requestParameters.index))),
      method: 'GET',
      headers: headerParameters,
      query: queryParameters
    }, initOverrides);
    return new JSONApiResponse(response, jsonValue => jsonValue.map(CommentFromJSON));
  }

  /**
   * List all comments on an issue
   */
  async issueGetComments(requestParameters, initOverrides) {
    const response = await this.issueGetCommentsRaw(requestParameters, initOverrides);
    return await response.value();
  }

  /**
   * List all comments and events on an issue
   */
  async issueGetCommentsAndTimelineRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling issueGetCommentsAndTimeline.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling issueGetCommentsAndTimeline.');
    }
    if (requestParameters.index === null || requestParameters.index === undefined) {
      throw new RequiredError('index', 'Required parameter requestParameters.index was null or undefined when calling issueGetCommentsAndTimeline.');
    }
    const queryParameters = {};
    if (requestParameters.since !== undefined) {
      queryParameters['since'] = requestParameters.since.toISOString();
    }
    if (requestParameters.page !== undefined) {
      queryParameters['page'] = requestParameters.page;
    }
    if (requestParameters.limit !== undefined) {
      queryParameters['limit'] = requestParameters.limit;
    }
    if (requestParameters.before !== undefined) {
      queryParameters['before'] = requestParameters.before.toISOString();
    }
    const headerParameters = {};
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/issues/{index}/timeline`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))).replace(`{${"index"}}`, encodeURIComponent(String(requestParameters.index))),
      method: 'GET',
      headers: headerParameters,
      query: queryParameters
    }, initOverrides);
    return new JSONApiResponse(response, jsonValue => jsonValue.map(TimelineCommentFromJSON));
  }

  /**
   * List all comments and events on an issue
   */
  async issueGetCommentsAndTimeline(requestParameters, initOverrides) {
    const response = await this.issueGetCommentsAndTimelineRaw(requestParameters, initOverrides);
    return await response.value();
  }

  /**
   * Get an issue
   */
  async issueGetIssueRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling issueGetIssue.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling issueGetIssue.');
    }
    if (requestParameters.index === null || requestParameters.index === undefined) {
      throw new RequiredError('index', 'Required parameter requestParameters.index was null or undefined when calling issueGetIssue.');
    }
    const queryParameters = {};
    const headerParameters = {};
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/issues/{index}`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))).replace(`{${"index"}}`, encodeURIComponent(String(requestParameters.index))),
      method: 'GET',
      headers: headerParameters,
      query: queryParameters
    }, initOverrides);
    return new JSONApiResponse(response, jsonValue => IssueFromJSON(jsonValue));
  }

  /**
   * Get an issue
   */
  async issueGetIssue(requestParameters, initOverrides) {
    const response = await this.issueGetIssueRaw(requestParameters, initOverrides);
    return await response.value();
  }

  /**
   * Get an issue attachment
   */
  async issueGetIssueAttachmentRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling issueGetIssueAttachment.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling issueGetIssueAttachment.');
    }
    if (requestParameters.index === null || requestParameters.index === undefined) {
      throw new RequiredError('index', 'Required parameter requestParameters.index was null or undefined when calling issueGetIssueAttachment.');
    }
    if (requestParameters.attachmentId === null || requestParameters.attachmentId === undefined) {
      throw new RequiredError('attachmentId', 'Required parameter requestParameters.attachmentId was null or undefined when calling issueGetIssueAttachment.');
    }
    const queryParameters = {};
    const headerParameters = {};
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/issues/{index}/assets/{attachment_id}`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))).replace(`{${"index"}}`, encodeURIComponent(String(requestParameters.index))).replace(`{${"attachment_id"}}`, encodeURIComponent(String(requestParameters.attachmentId))),
      method: 'GET',
      headers: headerParameters,
      query: queryParameters
    }, initOverrides);
    return new JSONApiResponse(response, jsonValue => AttachmentFromJSON(jsonValue));
  }

  /**
   * Get an issue attachment
   */
  async issueGetIssueAttachment(requestParameters, initOverrides) {
    const response = await this.issueGetIssueAttachmentRaw(requestParameters, initOverrides);
    return await response.value();
  }

  /**
   * Get a comment attachment
   */
  async issueGetIssueCommentAttachmentRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling issueGetIssueCommentAttachment.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling issueGetIssueCommentAttachment.');
    }
    if (requestParameters.id === null || requestParameters.id === undefined) {
      throw new RequiredError('id', 'Required parameter requestParameters.id was null or undefined when calling issueGetIssueCommentAttachment.');
    }
    if (requestParameters.attachmentId === null || requestParameters.attachmentId === undefined) {
      throw new RequiredError('attachmentId', 'Required parameter requestParameters.attachmentId was null or undefined when calling issueGetIssueCommentAttachment.');
    }
    const queryParameters = {};
    const headerParameters = {};
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/issues/comments/{id}/assets/{attachment_id}`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))).replace(`{${"id"}}`, encodeURIComponent(String(requestParameters.id))).replace(`{${"attachment_id"}}`, encodeURIComponent(String(requestParameters.attachmentId))),
      method: 'GET',
      headers: headerParameters,
      query: queryParameters
    }, initOverrides);
    return new JSONApiResponse(response, jsonValue => AttachmentFromJSON(jsonValue));
  }

  /**
   * Get a comment attachment
   */
  async issueGetIssueCommentAttachment(requestParameters, initOverrides) {
    const response = await this.issueGetIssueCommentAttachmentRaw(requestParameters, initOverrides);
    return await response.value();
  }

  /**
   * Get a list reactions of an issue
   */
  async issueGetIssueReactionsRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling issueGetIssueReactions.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling issueGetIssueReactions.');
    }
    if (requestParameters.index === null || requestParameters.index === undefined) {
      throw new RequiredError('index', 'Required parameter requestParameters.index was null or undefined when calling issueGetIssueReactions.');
    }
    const queryParameters = {};
    if (requestParameters.page !== undefined) {
      queryParameters['page'] = requestParameters.page;
    }
    if (requestParameters.limit !== undefined) {
      queryParameters['limit'] = requestParameters.limit;
    }
    const headerParameters = {};
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/issues/{index}/reactions`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))).replace(`{${"index"}}`, encodeURIComponent(String(requestParameters.index))),
      method: 'GET',
      headers: headerParameters,
      query: queryParameters
    }, initOverrides);
    return new JSONApiResponse(response, jsonValue => jsonValue.map(ReactionFromJSON));
  }

  /**
   * Get a list reactions of an issue
   */
  async issueGetIssueReactions(requestParameters, initOverrides) {
    const response = await this.issueGetIssueReactionsRaw(requestParameters, initOverrides);
    return await response.value();
  }

  /**
   * Get a single label
   */
  async issueGetLabelRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling issueGetLabel.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling issueGetLabel.');
    }
    if (requestParameters.id === null || requestParameters.id === undefined) {
      throw new RequiredError('id', 'Required parameter requestParameters.id was null or undefined when calling issueGetLabel.');
    }
    const queryParameters = {};
    const headerParameters = {};
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/labels/{id}`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))).replace(`{${"id"}}`, encodeURIComponent(String(requestParameters.id))),
      method: 'GET',
      headers: headerParameters,
      query: queryParameters
    }, initOverrides);
    return new JSONApiResponse(response, jsonValue => LabelFromJSON(jsonValue));
  }

  /**
   * Get a single label
   */
  async issueGetLabel(requestParameters, initOverrides) {
    const response = await this.issueGetLabelRaw(requestParameters, initOverrides);
    return await response.value();
  }

  /**
   * Get an issue\'s labels
   */
  async issueGetLabelsRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling issueGetLabels.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling issueGetLabels.');
    }
    if (requestParameters.index === null || requestParameters.index === undefined) {
      throw new RequiredError('index', 'Required parameter requestParameters.index was null or undefined when calling issueGetLabels.');
    }
    const queryParameters = {};
    const headerParameters = {};
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/issues/{index}/labels`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))).replace(`{${"index"}}`, encodeURIComponent(String(requestParameters.index))),
      method: 'GET',
      headers: headerParameters,
      query: queryParameters
    }, initOverrides);
    return new JSONApiResponse(response, jsonValue => jsonValue.map(LabelFromJSON));
  }

  /**
   * Get an issue\'s labels
   */
  async issueGetLabels(requestParameters, initOverrides) {
    const response = await this.issueGetLabelsRaw(requestParameters, initOverrides);
    return await response.value();
  }

  /**
   * Get a milestone
   */
  async issueGetMilestoneRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling issueGetMilestone.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling issueGetMilestone.');
    }
    if (requestParameters.id === null || requestParameters.id === undefined) {
      throw new RequiredError('id', 'Required parameter requestParameters.id was null or undefined when calling issueGetMilestone.');
    }
    const queryParameters = {};
    const headerParameters = {};
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/milestones/{id}`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))).replace(`{${"id"}}`, encodeURIComponent(String(requestParameters.id))),
      method: 'GET',
      headers: headerParameters,
      query: queryParameters
    }, initOverrides);
    return new JSONApiResponse(response, jsonValue => MilestoneFromJSON(jsonValue));
  }

  /**
   * Get a milestone
   */
  async issueGetMilestone(requestParameters, initOverrides) {
    const response = await this.issueGetMilestoneRaw(requestParameters, initOverrides);
    return await response.value();
  }

  /**
   * Get all of a repository\'s opened milestones
   */
  async issueGetMilestonesListRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling issueGetMilestonesList.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling issueGetMilestonesList.');
    }
    const queryParameters = {};
    if (requestParameters.state !== undefined) {
      queryParameters['state'] = requestParameters.state;
    }
    if (requestParameters.name !== undefined) {
      queryParameters['name'] = requestParameters.name;
    }
    if (requestParameters.page !== undefined) {
      queryParameters['page'] = requestParameters.page;
    }
    if (requestParameters.limit !== undefined) {
      queryParameters['limit'] = requestParameters.limit;
    }
    const headerParameters = {};
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/milestones`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))),
      method: 'GET',
      headers: headerParameters,
      query: queryParameters
    }, initOverrides);
    return new JSONApiResponse(response, jsonValue => jsonValue.map(MilestoneFromJSON));
  }

  /**
   * Get all of a repository\'s opened milestones
   */
  async issueGetMilestonesList(requestParameters, initOverrides) {
    const response = await this.issueGetMilestonesListRaw(requestParameters, initOverrides);
    return await response.value();
  }

  /**
   * List all comments in a repository
   */
  async issueGetRepoCommentsRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling issueGetRepoComments.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling issueGetRepoComments.');
    }
    const queryParameters = {};
    if (requestParameters.since !== undefined) {
      queryParameters['since'] = requestParameters.since.toISOString();
    }
    if (requestParameters.before !== undefined) {
      queryParameters['before'] = requestParameters.before.toISOString();
    }
    if (requestParameters.page !== undefined) {
      queryParameters['page'] = requestParameters.page;
    }
    if (requestParameters.limit !== undefined) {
      queryParameters['limit'] = requestParameters.limit;
    }
    const headerParameters = {};
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/issues/comments`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))),
      method: 'GET',
      headers: headerParameters,
      query: queryParameters
    }, initOverrides);
    return new JSONApiResponse(response, jsonValue => jsonValue.map(CommentFromJSON));
  }

  /**
   * List all comments in a repository
   */
  async issueGetRepoComments(requestParameters, initOverrides) {
    const response = await this.issueGetRepoCommentsRaw(requestParameters, initOverrides);
    return await response.value();
  }

  /**
   * List issues that are blocked by this issue
   */
  async issueListBlocksRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling issueListBlocks.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling issueListBlocks.');
    }
    if (requestParameters.index === null || requestParameters.index === undefined) {
      throw new RequiredError('index', 'Required parameter requestParameters.index was null or undefined when calling issueListBlocks.');
    }
    const queryParameters = {};
    if (requestParameters.page !== undefined) {
      queryParameters['page'] = requestParameters.page;
    }
    if (requestParameters.limit !== undefined) {
      queryParameters['limit'] = requestParameters.limit;
    }
    const headerParameters = {};
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/issues/{index}/blocks`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))).replace(`{${"index"}}`, encodeURIComponent(String(requestParameters.index))),
      method: 'GET',
      headers: headerParameters,
      query: queryParameters
    }, initOverrides);
    return new JSONApiResponse(response, jsonValue => jsonValue.map(IssueFromJSON));
  }

  /**
   * List issues that are blocked by this issue
   */
  async issueListBlocks(requestParameters, initOverrides) {
    const response = await this.issueListBlocksRaw(requestParameters, initOverrides);
    return await response.value();
  }

  /**
   * List issue\'s attachments
   */
  async issueListIssueAttachmentsRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling issueListIssueAttachments.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling issueListIssueAttachments.');
    }
    if (requestParameters.index === null || requestParameters.index === undefined) {
      throw new RequiredError('index', 'Required parameter requestParameters.index was null or undefined when calling issueListIssueAttachments.');
    }
    const queryParameters = {};
    const headerParameters = {};
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/issues/{index}/assets`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))).replace(`{${"index"}}`, encodeURIComponent(String(requestParameters.index))),
      method: 'GET',
      headers: headerParameters,
      query: queryParameters
    }, initOverrides);
    return new JSONApiResponse(response, jsonValue => jsonValue.map(AttachmentFromJSON));
  }

  /**
   * List issue\'s attachments
   */
  async issueListIssueAttachments(requestParameters, initOverrides) {
    const response = await this.issueListIssueAttachmentsRaw(requestParameters, initOverrides);
    return await response.value();
  }

  /**
   * List comment\'s attachments
   */
  async issueListIssueCommentAttachmentsRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling issueListIssueCommentAttachments.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling issueListIssueCommentAttachments.');
    }
    if (requestParameters.id === null || requestParameters.id === undefined) {
      throw new RequiredError('id', 'Required parameter requestParameters.id was null or undefined when calling issueListIssueCommentAttachments.');
    }
    const queryParameters = {};
    const headerParameters = {};
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/issues/comments/{id}/assets`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))).replace(`{${"id"}}`, encodeURIComponent(String(requestParameters.id))),
      method: 'GET',
      headers: headerParameters,
      query: queryParameters
    }, initOverrides);
    return new JSONApiResponse(response, jsonValue => jsonValue.map(AttachmentFromJSON));
  }

  /**
   * List comment\'s attachments
   */
  async issueListIssueCommentAttachments(requestParameters, initOverrides) {
    const response = await this.issueListIssueCommentAttachmentsRaw(requestParameters, initOverrides);
    return await response.value();
  }

  /**
   * List an issue\'s dependencies, i.e all issues that block this issue.
   */
  async issueListIssueDependenciesRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling issueListIssueDependencies.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling issueListIssueDependencies.');
    }
    if (requestParameters.index === null || requestParameters.index === undefined) {
      throw new RequiredError('index', 'Required parameter requestParameters.index was null or undefined when calling issueListIssueDependencies.');
    }
    const queryParameters = {};
    if (requestParameters.page !== undefined) {
      queryParameters['page'] = requestParameters.page;
    }
    if (requestParameters.limit !== undefined) {
      queryParameters['limit'] = requestParameters.limit;
    }
    const headerParameters = {};
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/issues/{index}/dependencies`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))).replace(`{${"index"}}`, encodeURIComponent(String(requestParameters.index))),
      method: 'GET',
      headers: headerParameters,
      query: queryParameters
    }, initOverrides);
    return new JSONApiResponse(response, jsonValue => jsonValue.map(IssueFromJSON));
  }

  /**
   * List an issue\'s dependencies, i.e all issues that block this issue.
   */
  async issueListIssueDependencies(requestParameters, initOverrides) {
    const response = await this.issueListIssueDependenciesRaw(requestParameters, initOverrides);
    return await response.value();
  }

  /**
   * List a repository\'s issues
   */
  async issueListIssuesRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling issueListIssues.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling issueListIssues.');
    }
    const queryParameters = {};
    if (requestParameters.state !== undefined) {
      queryParameters['state'] = requestParameters.state;
    }
    if (requestParameters.labels !== undefined) {
      queryParameters['labels'] = requestParameters.labels;
    }
    if (requestParameters.q !== undefined) {
      queryParameters['q'] = requestParameters.q;
    }
    if (requestParameters.type !== undefined) {
      queryParameters['type'] = requestParameters.type;
    }
    if (requestParameters.milestones !== undefined) {
      queryParameters['milestones'] = requestParameters.milestones;
    }
    if (requestParameters.since !== undefined) {
      queryParameters['since'] = requestParameters.since.toISOString();
    }
    if (requestParameters.before !== undefined) {
      queryParameters['before'] = requestParameters.before.toISOString();
    }
    if (requestParameters.createdBy !== undefined) {
      queryParameters['created_by'] = requestParameters.createdBy;
    }
    if (requestParameters.assignedBy !== undefined) {
      queryParameters['assigned_by'] = requestParameters.assignedBy;
    }
    if (requestParameters.mentionedBy !== undefined) {
      queryParameters['mentioned_by'] = requestParameters.mentionedBy;
    }
    if (requestParameters.page !== undefined) {
      queryParameters['page'] = requestParameters.page;
    }
    if (requestParameters.limit !== undefined) {
      queryParameters['limit'] = requestParameters.limit;
    }
    const headerParameters = {};
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/issues`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))),
      method: 'GET',
      headers: headerParameters,
      query: queryParameters
    }, initOverrides);
    return new JSONApiResponse(response, jsonValue => jsonValue.map(IssueFromJSON));
  }

  /**
   * List a repository\'s issues
   */
  async issueListIssues(requestParameters, initOverrides) {
    const response = await this.issueListIssuesRaw(requestParameters, initOverrides);
    return await response.value();
  }

  /**
   * Get all of a repository\'s labels
   */
  async issueListLabelsRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling issueListLabels.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling issueListLabels.');
    }
    const queryParameters = {};
    if (requestParameters.page !== undefined) {
      queryParameters['page'] = requestParameters.page;
    }
    if (requestParameters.limit !== undefined) {
      queryParameters['limit'] = requestParameters.limit;
    }
    const headerParameters = {};
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/labels`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))),
      method: 'GET',
      headers: headerParameters,
      query: queryParameters
    }, initOverrides);
    return new JSONApiResponse(response, jsonValue => jsonValue.map(LabelFromJSON));
  }

  /**
   * Get all of a repository\'s labels
   */
  async issueListLabels(requestParameters, initOverrides) {
    const response = await this.issueListLabelsRaw(requestParameters, initOverrides);
    return await response.value();
  }

  /**
   * Add a reaction to a comment of an issue
   */
  async issuePostCommentReactionRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling issuePostCommentReaction.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling issuePostCommentReaction.');
    }
    if (requestParameters.id === null || requestParameters.id === undefined) {
      throw new RequiredError('id', 'Required parameter requestParameters.id was null or undefined when calling issuePostCommentReaction.');
    }
    const queryParameters = {};
    const headerParameters = {};
    headerParameters['Content-Type'] = 'application/json';
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/issues/comments/{id}/reactions`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))).replace(`{${"id"}}`, encodeURIComponent(String(requestParameters.id))),
      method: 'POST',
      headers: headerParameters,
      query: queryParameters,
      body: EditReactionOptionToJSON(requestParameters.content)
    }, initOverrides);
    return new JSONApiResponse(response, jsonValue => ReactionFromJSON(jsonValue));
  }

  /**
   * Add a reaction to a comment of an issue
   */
  async issuePostCommentReaction(requestParameters, initOverrides) {
    const response = await this.issuePostCommentReactionRaw(requestParameters, initOverrides);
    return await response.value();
  }

  /**
   * Add a reaction to an issue
   */
  async issuePostIssueReactionRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling issuePostIssueReaction.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling issuePostIssueReaction.');
    }
    if (requestParameters.index === null || requestParameters.index === undefined) {
      throw new RequiredError('index', 'Required parameter requestParameters.index was null or undefined when calling issuePostIssueReaction.');
    }
    const queryParameters = {};
    const headerParameters = {};
    headerParameters['Content-Type'] = 'application/json';
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/issues/{index}/reactions`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))).replace(`{${"index"}}`, encodeURIComponent(String(requestParameters.index))),
      method: 'POST',
      headers: headerParameters,
      query: queryParameters,
      body: EditReactionOptionToJSON(requestParameters.content)
    }, initOverrides);
    return new JSONApiResponse(response, jsonValue => ReactionFromJSON(jsonValue));
  }

  /**
   * Add a reaction to an issue
   */
  async issuePostIssueReaction(requestParameters, initOverrides) {
    const response = await this.issuePostIssueReactionRaw(requestParameters, initOverrides);
    return await response.value();
  }

  /**
   * Unblock the issue given in the body by the issue in path
   */
  async issueRemoveIssueBlockingRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling issueRemoveIssueBlocking.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling issueRemoveIssueBlocking.');
    }
    if (requestParameters.index === null || requestParameters.index === undefined) {
      throw new RequiredError('index', 'Required parameter requestParameters.index was null or undefined when calling issueRemoveIssueBlocking.');
    }
    const queryParameters = {};
    const headerParameters = {};
    headerParameters['Content-Type'] = 'application/json';
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/issues/{index}/blocks`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))).replace(`{${"index"}}`, encodeURIComponent(String(requestParameters.index))),
      method: 'DELETE',
      headers: headerParameters,
      query: queryParameters,
      body: IssueMetaToJSON(requestParameters.body)
    }, initOverrides);
    return new JSONApiResponse(response, jsonValue => IssueFromJSON(jsonValue));
  }

  /**
   * Unblock the issue given in the body by the issue in path
   */
  async issueRemoveIssueBlocking(requestParameters, initOverrides) {
    const response = await this.issueRemoveIssueBlockingRaw(requestParameters, initOverrides);
    return await response.value();
  }

  /**
   * Remove an issue dependency
   */
  async issueRemoveIssueDependenciesRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling issueRemoveIssueDependencies.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling issueRemoveIssueDependencies.');
    }
    if (requestParameters.index === null || requestParameters.index === undefined) {
      throw new RequiredError('index', 'Required parameter requestParameters.index was null or undefined when calling issueRemoveIssueDependencies.');
    }
    const queryParameters = {};
    const headerParameters = {};
    headerParameters['Content-Type'] = 'application/json';
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/issues/{index}/dependencies`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))).replace(`{${"index"}}`, encodeURIComponent(String(requestParameters.index))),
      method: 'DELETE',
      headers: headerParameters,
      query: queryParameters,
      body: IssueMetaToJSON(requestParameters.body)
    }, initOverrides);
    return new JSONApiResponse(response, jsonValue => IssueFromJSON(jsonValue));
  }

  /**
   * Remove an issue dependency
   */
  async issueRemoveIssueDependencies(requestParameters, initOverrides) {
    const response = await this.issueRemoveIssueDependenciesRaw(requestParameters, initOverrides);
    return await response.value();
  }

  /**
   * Remove a label from an issue
   */
  async issueRemoveLabelRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling issueRemoveLabel.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling issueRemoveLabel.');
    }
    if (requestParameters.index === null || requestParameters.index === undefined) {
      throw new RequiredError('index', 'Required parameter requestParameters.index was null or undefined when calling issueRemoveLabel.');
    }
    if (requestParameters.id === null || requestParameters.id === undefined) {
      throw new RequiredError('id', 'Required parameter requestParameters.id was null or undefined when calling issueRemoveLabel.');
    }
    const queryParameters = {};
    const headerParameters = {};
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/issues/{index}/labels/{id}`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))).replace(`{${"index"}}`, encodeURIComponent(String(requestParameters.index))).replace(`{${"id"}}`, encodeURIComponent(String(requestParameters.id))),
      method: 'DELETE',
      headers: headerParameters,
      query: queryParameters
    }, initOverrides);
    return new VoidApiResponse(response);
  }

  /**
   * Remove a label from an issue
   */
  async issueRemoveLabel(requestParameters, initOverrides) {
    await this.issueRemoveLabelRaw(requestParameters, initOverrides);
  }

  /**
   * Replace an issue\'s labels
   */
  async issueReplaceLabelsRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling issueReplaceLabels.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling issueReplaceLabels.');
    }
    if (requestParameters.index === null || requestParameters.index === undefined) {
      throw new RequiredError('index', 'Required parameter requestParameters.index was null or undefined when calling issueReplaceLabels.');
    }
    const queryParameters = {};
    const headerParameters = {};
    headerParameters['Content-Type'] = 'application/json';
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/issues/{index}/labels`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))).replace(`{${"index"}}`, encodeURIComponent(String(requestParameters.index))),
      method: 'PUT',
      headers: headerParameters,
      query: queryParameters,
      body: IssueLabelsOptionToJSON(requestParameters.body)
    }, initOverrides);
    return new JSONApiResponse(response, jsonValue => jsonValue.map(LabelFromJSON));
  }

  /**
   * Replace an issue\'s labels
   */
  async issueReplaceLabels(requestParameters, initOverrides) {
    const response = await this.issueReplaceLabelsRaw(requestParameters, initOverrides);
    return await response.value();
  }

  /**
   * Reset a tracked time of an issue
   */
  async issueResetTimeRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling issueResetTime.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling issueResetTime.');
    }
    if (requestParameters.index === null || requestParameters.index === undefined) {
      throw new RequiredError('index', 'Required parameter requestParameters.index was null or undefined when calling issueResetTime.');
    }
    const queryParameters = {};
    const headerParameters = {};
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/issues/{index}/times`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))).replace(`{${"index"}}`, encodeURIComponent(String(requestParameters.index))),
      method: 'DELETE',
      headers: headerParameters,
      query: queryParameters
    }, initOverrides);
    return new VoidApiResponse(response);
  }

  /**
   * Reset a tracked time of an issue
   */
  async issueResetTime(requestParameters, initOverrides) {
    await this.issueResetTimeRaw(requestParameters, initOverrides);
  }

  /**
   * Search for issues across the repositories that the user has access to
   */
  async issueSearchIssuesRaw(requestParameters, initOverrides) {
    const queryParameters = {};
    if (requestParameters.state !== undefined) {
      queryParameters['state'] = requestParameters.state;
    }
    if (requestParameters.labels !== undefined) {
      queryParameters['labels'] = requestParameters.labels;
    }
    if (requestParameters.milestones !== undefined) {
      queryParameters['milestones'] = requestParameters.milestones;
    }
    if (requestParameters.q !== undefined) {
      queryParameters['q'] = requestParameters.q;
    }
    if (requestParameters.priorityRepoId !== undefined) {
      queryParameters['priority_repo_id'] = requestParameters.priorityRepoId;
    }
    if (requestParameters.type !== undefined) {
      queryParameters['type'] = requestParameters.type;
    }
    if (requestParameters.since !== undefined) {
      queryParameters['since'] = requestParameters.since.toISOString();
    }
    if (requestParameters.before !== undefined) {
      queryParameters['before'] = requestParameters.before.toISOString();
    }
    if (requestParameters.assigned !== undefined) {
      queryParameters['assigned'] = requestParameters.assigned;
    }
    if (requestParameters.created !== undefined) {
      queryParameters['created'] = requestParameters.created;
    }
    if (requestParameters.mentioned !== undefined) {
      queryParameters['mentioned'] = requestParameters.mentioned;
    }
    if (requestParameters.reviewRequested !== undefined) {
      queryParameters['review_requested'] = requestParameters.reviewRequested;
    }
    if (requestParameters.reviewed !== undefined) {
      queryParameters['reviewed'] = requestParameters.reviewed;
    }
    if (requestParameters.owner !== undefined) {
      queryParameters['owner'] = requestParameters.owner;
    }
    if (requestParameters.team !== undefined) {
      queryParameters['team'] = requestParameters.team;
    }
    if (requestParameters.page !== undefined) {
      queryParameters['page'] = requestParameters.page;
    }
    if (requestParameters.limit !== undefined) {
      queryParameters['limit'] = requestParameters.limit;
    }
    const headerParameters = {};
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/issues/search`,
      method: 'GET',
      headers: headerParameters,
      query: queryParameters
    }, initOverrides);
    return new JSONApiResponse(response, jsonValue => jsonValue.map(IssueFromJSON));
  }

  /**
   * Search for issues across the repositories that the user has access to
   */
  async issueSearchIssues(requestParameters = {}, initOverrides) {
    const response = await this.issueSearchIssuesRaw(requestParameters, initOverrides);
    return await response.value();
  }

  /**
   * Start stopwatch on an issue.
   */
  async issueStartStopWatchRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling issueStartStopWatch.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling issueStartStopWatch.');
    }
    if (requestParameters.index === null || requestParameters.index === undefined) {
      throw new RequiredError('index', 'Required parameter requestParameters.index was null or undefined when calling issueStartStopWatch.');
    }
    const queryParameters = {};
    const headerParameters = {};
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/issues/{index}/stopwatch/start`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))).replace(`{${"index"}}`, encodeURIComponent(String(requestParameters.index))),
      method: 'POST',
      headers: headerParameters,
      query: queryParameters
    }, initOverrides);
    return new VoidApiResponse(response);
  }

  /**
   * Start stopwatch on an issue.
   */
  async issueStartStopWatch(requestParameters, initOverrides) {
    await this.issueStartStopWatchRaw(requestParameters, initOverrides);
  }

  /**
   * Stop an issue\'s existing stopwatch.
   */
  async issueStopStopWatchRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling issueStopStopWatch.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling issueStopStopWatch.');
    }
    if (requestParameters.index === null || requestParameters.index === undefined) {
      throw new RequiredError('index', 'Required parameter requestParameters.index was null or undefined when calling issueStopStopWatch.');
    }
    const queryParameters = {};
    const headerParameters = {};
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/issues/{index}/stopwatch/stop`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))).replace(`{${"index"}}`, encodeURIComponent(String(requestParameters.index))),
      method: 'POST',
      headers: headerParameters,
      query: queryParameters
    }, initOverrides);
    return new VoidApiResponse(response);
  }

  /**
   * Stop an issue\'s existing stopwatch.
   */
  async issueStopStopWatch(requestParameters, initOverrides) {
    await this.issueStopStopWatchRaw(requestParameters, initOverrides);
  }

  /**
   * Get users who subscribed on an issue.
   */
  async issueSubscriptionsRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling issueSubscriptions.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling issueSubscriptions.');
    }
    if (requestParameters.index === null || requestParameters.index === undefined) {
      throw new RequiredError('index', 'Required parameter requestParameters.index was null or undefined when calling issueSubscriptions.');
    }
    const queryParameters = {};
    if (requestParameters.page !== undefined) {
      queryParameters['page'] = requestParameters.page;
    }
    if (requestParameters.limit !== undefined) {
      queryParameters['limit'] = requestParameters.limit;
    }
    const headerParameters = {};
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/issues/{index}/subscriptions`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))).replace(`{${"index"}}`, encodeURIComponent(String(requestParameters.index))),
      method: 'GET',
      headers: headerParameters,
      query: queryParameters
    }, initOverrides);
    return new JSONApiResponse(response, jsonValue => jsonValue.map(UserFromJSON));
  }

  /**
   * Get users who subscribed on an issue.
   */
  async issueSubscriptions(requestParameters, initOverrides) {
    const response = await this.issueSubscriptionsRaw(requestParameters, initOverrides);
    return await response.value();
  }

  /**
   * List an issue\'s tracked times
   */
  async issueTrackedTimesRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling issueTrackedTimes.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling issueTrackedTimes.');
    }
    if (requestParameters.index === null || requestParameters.index === undefined) {
      throw new RequiredError('index', 'Required parameter requestParameters.index was null or undefined when calling issueTrackedTimes.');
    }
    const queryParameters = {};
    if (requestParameters.user !== undefined) {
      queryParameters['user'] = requestParameters.user;
    }
    if (requestParameters.since !== undefined) {
      queryParameters['since'] = requestParameters.since.toISOString();
    }
    if (requestParameters.before !== undefined) {
      queryParameters['before'] = requestParameters.before.toISOString();
    }
    if (requestParameters.page !== undefined) {
      queryParameters['page'] = requestParameters.page;
    }
    if (requestParameters.limit !== undefined) {
      queryParameters['limit'] = requestParameters.limit;
    }
    const headerParameters = {};
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/issues/{index}/times`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))).replace(`{${"index"}}`, encodeURIComponent(String(requestParameters.index))),
      method: 'GET',
      headers: headerParameters,
      query: queryParameters
    }, initOverrides);
    return new JSONApiResponse(response, jsonValue => jsonValue.map(TrackedTimeFromJSON));
  }

  /**
   * List an issue\'s tracked times
   */
  async issueTrackedTimes(requestParameters, initOverrides) {
    const response = await this.issueTrackedTimesRaw(requestParameters, initOverrides);
    return await response.value();
  }

  /**
   * Moves the Pin to the given Position
   */
  async moveIssuePinRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling moveIssuePin.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling moveIssuePin.');
    }
    if (requestParameters.index === null || requestParameters.index === undefined) {
      throw new RequiredError('index', 'Required parameter requestParameters.index was null or undefined when calling moveIssuePin.');
    }
    if (requestParameters.position === null || requestParameters.position === undefined) {
      throw new RequiredError('position', 'Required parameter requestParameters.position was null or undefined when calling moveIssuePin.');
    }
    const queryParameters = {};
    const headerParameters = {};
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/issues/{index}/pin/{position}`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))).replace(`{${"index"}}`, encodeURIComponent(String(requestParameters.index))).replace(`{${"position"}}`, encodeURIComponent(String(requestParameters.position))),
      method: 'PATCH',
      headers: headerParameters,
      query: queryParameters
    }, initOverrides);
    return new VoidApiResponse(response);
  }

  /**
   * Moves the Pin to the given Position
   */
  async moveIssuePin(requestParameters, initOverrides) {
    await this.moveIssuePinRaw(requestParameters, initOverrides);
  }

  /**
   * Pin an Issue
   */
  async pinIssueRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling pinIssue.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling pinIssue.');
    }
    if (requestParameters.index === null || requestParameters.index === undefined) {
      throw new RequiredError('index', 'Required parameter requestParameters.index was null or undefined when calling pinIssue.');
    }
    const queryParameters = {};
    const headerParameters = {};
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/issues/{index}/pin`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))).replace(`{${"index"}}`, encodeURIComponent(String(requestParameters.index))),
      method: 'POST',
      headers: headerParameters,
      query: queryParameters
    }, initOverrides);
    return new VoidApiResponse(response);
  }

  /**
   * Pin an Issue
   */
  async pinIssue(requestParameters, initOverrides) {
    await this.pinIssueRaw(requestParameters, initOverrides);
  }

  /**
   * Unpin an Issue
   */
  async unpinIssueRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling unpinIssue.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling unpinIssue.');
    }
    if (requestParameters.index === null || requestParameters.index === undefined) {
      throw new RequiredError('index', 'Required parameter requestParameters.index was null or undefined when calling unpinIssue.');
    }
    const queryParameters = {};
    const headerParameters = {};
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/issues/{index}/pin`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))).replace(`{${"index"}}`, encodeURIComponent(String(requestParameters.index))),
      method: 'DELETE',
      headers: headerParameters,
      query: queryParameters
    }, initOverrides);
    return new VoidApiResponse(response);
  }

  /**
   * Unpin an Issue
   */
  async unpinIssue(requestParameters, initOverrides) {
    await this.unpinIssueRaw(requestParameters, initOverrides);
  }
}

/* tslint:disable */
/* eslint-disable */
/**
 * Gitea API.
 * This documentation describes the Gitea API.
 *
 * The version of the OpenAPI document: 1.20.4
 * 
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */

/**
 * 
 */
class RepositoryApi extends BaseAPI {
  /**
   * Accept a repo transfer
   */
  async acceptRepoTransferRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling acceptRepoTransfer.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling acceptRepoTransfer.');
    }
    const queryParameters = {};
    const headerParameters = {};
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/transfer/accept`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))),
      method: 'POST',
      headers: headerParameters,
      query: queryParameters
    }, initOverrides);
    return new JSONApiResponse(response, jsonValue => RepositoryFromJSON(jsonValue));
  }

  /**
   * Accept a repo transfer
   */
  async acceptRepoTransfer(requestParameters, initOverrides) {
    const response = await this.acceptRepoTransferRaw(requestParameters, initOverrides);
    return await response.value();
  }

  /**
   * Create a repository
   */
  async createCurrentUserRepoRaw(requestParameters, initOverrides) {
    const queryParameters = {};
    const headerParameters = {};
    headerParameters['Content-Type'] = 'application/json';
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/user/repos`,
      method: 'POST',
      headers: headerParameters,
      query: queryParameters,
      body: CreateRepoOptionToJSON(requestParameters.body)
    }, initOverrides);
    return new JSONApiResponse(response, jsonValue => RepositoryFromJSON(jsonValue));
  }

  /**
   * Create a repository
   */
  async createCurrentUserRepo(requestParameters = {}, initOverrides) {
    const response = await this.createCurrentUserRepoRaw(requestParameters, initOverrides);
    return await response.value();
  }

  /**
   * Fork a repository
   */
  async createForkRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling createFork.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling createFork.');
    }
    const queryParameters = {};
    const headerParameters = {};
    headerParameters['Content-Type'] = 'application/json';
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/forks`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))),
      method: 'POST',
      headers: headerParameters,
      query: queryParameters,
      body: CreateForkOptionToJSON(requestParameters.body)
    }, initOverrides);
    return new JSONApiResponse(response, jsonValue => RepositoryFromJSON(jsonValue));
  }

  /**
   * Fork a repository
   */
  async createFork(requestParameters, initOverrides) {
    const response = await this.createForkRaw(requestParameters, initOverrides);
    return await response.value();
  }

  /**
   * Create a repository using a template
   */
  async generateRepoRaw(requestParameters, initOverrides) {
    if (requestParameters.templateOwner === null || requestParameters.templateOwner === undefined) {
      throw new RequiredError('templateOwner', 'Required parameter requestParameters.templateOwner was null or undefined when calling generateRepo.');
    }
    if (requestParameters.templateRepo === null || requestParameters.templateRepo === undefined) {
      throw new RequiredError('templateRepo', 'Required parameter requestParameters.templateRepo was null or undefined when calling generateRepo.');
    }
    const queryParameters = {};
    const headerParameters = {};
    headerParameters['Content-Type'] = 'application/json';
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{template_owner}/{template_repo}/generate`.replace(`{${"template_owner"}}`, encodeURIComponent(String(requestParameters.templateOwner))).replace(`{${"template_repo"}}`, encodeURIComponent(String(requestParameters.templateRepo))),
      method: 'POST',
      headers: headerParameters,
      query: queryParameters,
      body: GenerateRepoOptionToJSON(requestParameters.body)
    }, initOverrides);
    return new JSONApiResponse(response, jsonValue => RepositoryFromJSON(jsonValue));
  }

  /**
   * Create a repository using a template
   */
  async generateRepo(requestParameters, initOverrides) {
    const response = await this.generateRepoRaw(requestParameters, initOverrides);
    return await response.value();
  }

  /**
   * Gets the tag object of an annotated tag (not lightweight tags)
   */
  async getAnnotatedTagRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling getAnnotatedTag.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling getAnnotatedTag.');
    }
    if (requestParameters.sha === null || requestParameters.sha === undefined) {
      throw new RequiredError('sha', 'Required parameter requestParameters.sha was null or undefined when calling getAnnotatedTag.');
    }
    const queryParameters = {};
    const headerParameters = {};
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/git/tags/{sha}`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))).replace(`{${"sha"}}`, encodeURIComponent(String(requestParameters.sha))),
      method: 'GET',
      headers: headerParameters,
      query: queryParameters
    }, initOverrides);
    return new JSONApiResponse(response, jsonValue => AnnotatedTagFromJSON(jsonValue));
  }

  /**
   * Gets the tag object of an annotated tag (not lightweight tags)
   */
  async getAnnotatedTag(requestParameters, initOverrides) {
    const response = await this.getAnnotatedTagRaw(requestParameters, initOverrides);
    return await response.value();
  }

  /**
   * Gets the blob of a repository.
   */
  async getBlobRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling getBlob.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling getBlob.');
    }
    if (requestParameters.sha === null || requestParameters.sha === undefined) {
      throw new RequiredError('sha', 'Required parameter requestParameters.sha was null or undefined when calling getBlob.');
    }
    const queryParameters = {};
    const headerParameters = {};
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/git/blobs/{sha}`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))).replace(`{${"sha"}}`, encodeURIComponent(String(requestParameters.sha))),
      method: 'GET',
      headers: headerParameters,
      query: queryParameters
    }, initOverrides);
    return new JSONApiResponse(response, jsonValue => GitBlobResponseFromJSON(jsonValue));
  }

  /**
   * Gets the blob of a repository.
   */
  async getBlob(requestParameters, initOverrides) {
    const response = await this.getBlobRaw(requestParameters, initOverrides);
    return await response.value();
  }

  /**
   * Gets the tree of a repository.
   */
  async getTreeRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling getTree.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling getTree.');
    }
    if (requestParameters.sha === null || requestParameters.sha === undefined) {
      throw new RequiredError('sha', 'Required parameter requestParameters.sha was null or undefined when calling getTree.');
    }
    const queryParameters = {};
    if (requestParameters.recursive !== undefined) {
      queryParameters['recursive'] = requestParameters.recursive;
    }
    if (requestParameters.page !== undefined) {
      queryParameters['page'] = requestParameters.page;
    }
    if (requestParameters.perPage !== undefined) {
      queryParameters['per_page'] = requestParameters.perPage;
    }
    const headerParameters = {};
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/git/trees/{sha}`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))).replace(`{${"sha"}}`, encodeURIComponent(String(requestParameters.sha))),
      method: 'GET',
      headers: headerParameters,
      query: queryParameters
    }, initOverrides);
    return new JSONApiResponse(response, jsonValue => GitTreeResponseFromJSON(jsonValue));
  }

  /**
   * Gets the tree of a repository.
   */
  async getTree(requestParameters, initOverrides) {
    const response = await this.getTreeRaw(requestParameters, initOverrides);
    return await response.value();
  }

  /**
   * List a repository\'s forks
   */
  async listForksRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling listForks.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling listForks.');
    }
    const queryParameters = {};
    if (requestParameters.page !== undefined) {
      queryParameters['page'] = requestParameters.page;
    }
    if (requestParameters.limit !== undefined) {
      queryParameters['limit'] = requestParameters.limit;
    }
    const headerParameters = {};
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/forks`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))),
      method: 'GET',
      headers: headerParameters,
      query: queryParameters
    }, initOverrides);
    return new JSONApiResponse(response, jsonValue => jsonValue.map(RepositoryFromJSON));
  }

  /**
   * List a repository\'s forks
   */
  async listForks(requestParameters, initOverrides) {
    const response = await this.listForksRaw(requestParameters, initOverrides);
    return await response.value();
  }

  /**
   * Reject a repo transfer
   */
  async rejectRepoTransferRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling rejectRepoTransfer.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling rejectRepoTransfer.');
    }
    const queryParameters = {};
    const headerParameters = {};
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/transfer/reject`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))),
      method: 'POST',
      headers: headerParameters,
      query: queryParameters
    }, initOverrides);
    return new JSONApiResponse(response, jsonValue => RepositoryFromJSON(jsonValue));
  }

  /**
   * Reject a repo transfer
   */
  async rejectRepoTransfer(requestParameters, initOverrides) {
    const response = await this.rejectRepoTransferRaw(requestParameters, initOverrides);
    return await response.value();
  }

  /**
   * Add a collaborator to a repository
   */
  async repoAddCollaboratorRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling repoAddCollaborator.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling repoAddCollaborator.');
    }
    if (requestParameters.collaborator === null || requestParameters.collaborator === undefined) {
      throw new RequiredError('collaborator', 'Required parameter requestParameters.collaborator was null or undefined when calling repoAddCollaborator.');
    }
    const queryParameters = {};
    const headerParameters = {};
    headerParameters['Content-Type'] = 'application/json';
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/collaborators/{collaborator}`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))).replace(`{${"collaborator"}}`, encodeURIComponent(String(requestParameters.collaborator))),
      method: 'PUT',
      headers: headerParameters,
      query: queryParameters,
      body: AddCollaboratorOptionToJSON(requestParameters.body)
    }, initOverrides);
    return new VoidApiResponse(response);
  }

  /**
   * Add a collaborator to a repository
   */
  async repoAddCollaborator(requestParameters, initOverrides) {
    await this.repoAddCollaboratorRaw(requestParameters, initOverrides);
  }

  /**
   * add a push mirror to the repository
   */
  async repoAddPushMirrorRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling repoAddPushMirror.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling repoAddPushMirror.');
    }
    const queryParameters = {};
    const headerParameters = {};
    headerParameters['Content-Type'] = 'application/json';
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/push_mirrors`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))),
      method: 'POST',
      headers: headerParameters,
      query: queryParameters,
      body: CreatePushMirrorOptionToJSON(requestParameters.body)
    }, initOverrides);
    return new JSONApiResponse(response, jsonValue => PushMirrorFromJSON(jsonValue));
  }

  /**
   * add a push mirror to the repository
   */
  async repoAddPushMirror(requestParameters, initOverrides) {
    const response = await this.repoAddPushMirrorRaw(requestParameters, initOverrides);
    return await response.value();
  }

  /**
   * Add a team to a repository
   */
  async repoAddTeamRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling repoAddTeam.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling repoAddTeam.');
    }
    if (requestParameters.team === null || requestParameters.team === undefined) {
      throw new RequiredError('team', 'Required parameter requestParameters.team was null or undefined when calling repoAddTeam.');
    }
    const queryParameters = {};
    const headerParameters = {};
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/teams/{team}`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))).replace(`{${"team"}}`, encodeURIComponent(String(requestParameters.team))),
      method: 'PUT',
      headers: headerParameters,
      query: queryParameters
    }, initOverrides);
    return new VoidApiResponse(response);
  }

  /**
   * Add a team to a repository
   */
  async repoAddTeam(requestParameters, initOverrides) {
    await this.repoAddTeamRaw(requestParameters, initOverrides);
  }

  /**
   * Add a topic to a repository
   */
  async repoAddTopicRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling repoAddTopic.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling repoAddTopic.');
    }
    if (requestParameters.topic === null || requestParameters.topic === undefined) {
      throw new RequiredError('topic', 'Required parameter requestParameters.topic was null or undefined when calling repoAddTopic.');
    }
    const queryParameters = {};
    const headerParameters = {};
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/topics/{topic}`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))).replace(`{${"topic"}}`, encodeURIComponent(String(requestParameters.topic))),
      method: 'PUT',
      headers: headerParameters,
      query: queryParameters
    }, initOverrides);
    return new VoidApiResponse(response);
  }

  /**
   * Add a topic to a repository
   */
  async repoAddTopic(requestParameters, initOverrides) {
    await this.repoAddTopicRaw(requestParameters, initOverrides);
  }

  /**
   * Apply diff patch to repository
   */
  async repoApplyDiffPatchRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling repoApplyDiffPatch.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling repoApplyDiffPatch.');
    }
    if (requestParameters.body === null || requestParameters.body === undefined) {
      throw new RequiredError('body', 'Required parameter requestParameters.body was null or undefined when calling repoApplyDiffPatch.');
    }
    const queryParameters = {};
    const headerParameters = {};
    headerParameters['Content-Type'] = 'application/json';
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/diffpatch`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))),
      method: 'POST',
      headers: headerParameters,
      query: queryParameters,
      body: UpdateFileOptionsToJSON(requestParameters.body)
    }, initOverrides);
    return new JSONApiResponse(response, jsonValue => FileResponseFromJSON(jsonValue));
  }

  /**
   * Apply diff patch to repository
   */
  async repoApplyDiffPatch(requestParameters, initOverrides) {
    const response = await this.repoApplyDiffPatchRaw(requestParameters, initOverrides);
    return await response.value();
  }

  /**
   * Cancel the scheduled auto merge for the given pull request
   */
  async repoCancelScheduledAutoMergeRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling repoCancelScheduledAutoMerge.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling repoCancelScheduledAutoMerge.');
    }
    if (requestParameters.index === null || requestParameters.index === undefined) {
      throw new RequiredError('index', 'Required parameter requestParameters.index was null or undefined when calling repoCancelScheduledAutoMerge.');
    }
    const queryParameters = {};
    const headerParameters = {};
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/pulls/{index}/merge`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))).replace(`{${"index"}}`, encodeURIComponent(String(requestParameters.index))),
      method: 'DELETE',
      headers: headerParameters,
      query: queryParameters
    }, initOverrides);
    return new VoidApiResponse(response);
  }

  /**
   * Cancel the scheduled auto merge for the given pull request
   */
  async repoCancelScheduledAutoMerge(requestParameters, initOverrides) {
    await this.repoCancelScheduledAutoMergeRaw(requestParameters, initOverrides);
  }

  /**
   * Modify multiple files in a repository
   */
  async repoChangeFilesRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling repoChangeFiles.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling repoChangeFiles.');
    }
    if (requestParameters.body === null || requestParameters.body === undefined) {
      throw new RequiredError('body', 'Required parameter requestParameters.body was null or undefined when calling repoChangeFiles.');
    }
    const queryParameters = {};
    const headerParameters = {};
    headerParameters['Content-Type'] = 'application/json';
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/contents`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))),
      method: 'POST',
      headers: headerParameters,
      query: queryParameters,
      body: ChangeFilesOptionsToJSON(requestParameters.body)
    }, initOverrides);
    return new JSONApiResponse(response, jsonValue => FilesResponseFromJSON(jsonValue));
  }

  /**
   * Modify multiple files in a repository
   */
  async repoChangeFiles(requestParameters, initOverrides) {
    const response = await this.repoChangeFilesRaw(requestParameters, initOverrides);
    return await response.value();
  }

  /**
   * Check if a user is a collaborator of a repository
   */
  async repoCheckCollaboratorRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling repoCheckCollaborator.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling repoCheckCollaborator.');
    }
    if (requestParameters.collaborator === null || requestParameters.collaborator === undefined) {
      throw new RequiredError('collaborator', 'Required parameter requestParameters.collaborator was null or undefined when calling repoCheckCollaborator.');
    }
    const queryParameters = {};
    const headerParameters = {};
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/collaborators/{collaborator}`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))).replace(`{${"collaborator"}}`, encodeURIComponent(String(requestParameters.collaborator))),
      method: 'GET',
      headers: headerParameters,
      query: queryParameters
    }, initOverrides);
    return new VoidApiResponse(response);
  }

  /**
   * Check if a user is a collaborator of a repository
   */
  async repoCheckCollaborator(requestParameters, initOverrides) {
    await this.repoCheckCollaboratorRaw(requestParameters, initOverrides);
  }

  /**
   * Check if a team is assigned to a repository
   */
  async repoCheckTeamRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling repoCheckTeam.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling repoCheckTeam.');
    }
    if (requestParameters.team === null || requestParameters.team === undefined) {
      throw new RequiredError('team', 'Required parameter requestParameters.team was null or undefined when calling repoCheckTeam.');
    }
    const queryParameters = {};
    const headerParameters = {};
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/teams/{team}`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))).replace(`{${"team"}}`, encodeURIComponent(String(requestParameters.team))),
      method: 'GET',
      headers: headerParameters,
      query: queryParameters
    }, initOverrides);
    return new JSONApiResponse(response, jsonValue => TeamFromJSON(jsonValue));
  }

  /**
   * Check if a team is assigned to a repository
   */
  async repoCheckTeam(requestParameters, initOverrides) {
    const response = await this.repoCheckTeamRaw(requestParameters, initOverrides);
    return await response.value();
  }

  /**
   * Create a branch
   */
  async repoCreateBranchRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling repoCreateBranch.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling repoCreateBranch.');
    }
    const queryParameters = {};
    const headerParameters = {};
    headerParameters['Content-Type'] = 'application/json';
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/branches`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))),
      method: 'POST',
      headers: headerParameters,
      query: queryParameters,
      body: CreateBranchRepoOptionToJSON(requestParameters.body)
    }, initOverrides);
    return new JSONApiResponse(response, jsonValue => BranchFromJSON(jsonValue));
  }

  /**
   * Create a branch
   */
  async repoCreateBranch(requestParameters, initOverrides) {
    const response = await this.repoCreateBranchRaw(requestParameters, initOverrides);
    return await response.value();
  }

  /**
   * Create a branch protections for a repository
   */
  async repoCreateBranchProtectionRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling repoCreateBranchProtection.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling repoCreateBranchProtection.');
    }
    const queryParameters = {};
    const headerParameters = {};
    headerParameters['Content-Type'] = 'application/json';
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/branch_protections`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))),
      method: 'POST',
      headers: headerParameters,
      query: queryParameters,
      body: CreateBranchProtectionOptionToJSON(requestParameters.body)
    }, initOverrides);
    return new JSONApiResponse(response, jsonValue => BranchProtectionFromJSON(jsonValue));
  }

  /**
   * Create a branch protections for a repository
   */
  async repoCreateBranchProtection(requestParameters, initOverrides) {
    const response = await this.repoCreateBranchProtectionRaw(requestParameters, initOverrides);
    return await response.value();
  }

  /**
   * Create a file in a repository
   */
  async repoCreateFileRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling repoCreateFile.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling repoCreateFile.');
    }
    if (requestParameters.filepath === null || requestParameters.filepath === undefined) {
      throw new RequiredError('filepath', 'Required parameter requestParameters.filepath was null or undefined when calling repoCreateFile.');
    }
    if (requestParameters.body === null || requestParameters.body === undefined) {
      throw new RequiredError('body', 'Required parameter requestParameters.body was null or undefined when calling repoCreateFile.');
    }
    const queryParameters = {};
    const headerParameters = {};
    headerParameters['Content-Type'] = 'application/json';
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/contents/{filepath}`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))).replace(`{${"filepath"}}`, encodeURIComponent(String(requestParameters.filepath))),
      method: 'POST',
      headers: headerParameters,
      query: queryParameters,
      body: CreateFileOptionsToJSON(requestParameters.body)
    }, initOverrides);
    return new JSONApiResponse(response, jsonValue => FileResponseFromJSON(jsonValue));
  }

  /**
   * Create a file in a repository
   */
  async repoCreateFile(requestParameters, initOverrides) {
    const response = await this.repoCreateFileRaw(requestParameters, initOverrides);
    return await response.value();
  }

  /**
   * Create a hook
   */
  async repoCreateHookRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling repoCreateHook.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling repoCreateHook.');
    }
    const queryParameters = {};
    const headerParameters = {};
    headerParameters['Content-Type'] = 'application/json';
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/hooks`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))),
      method: 'POST',
      headers: headerParameters,
      query: queryParameters,
      body: CreateHookOptionToJSON(requestParameters.body)
    }, initOverrides);
    return new JSONApiResponse(response, jsonValue => HookFromJSON(jsonValue));
  }

  /**
   * Create a hook
   */
  async repoCreateHook(requestParameters, initOverrides) {
    const response = await this.repoCreateHookRaw(requestParameters, initOverrides);
    return await response.value();
  }

  /**
   * Add a key to a repository
   */
  async repoCreateKeyRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling repoCreateKey.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling repoCreateKey.');
    }
    const queryParameters = {};
    const headerParameters = {};
    headerParameters['Content-Type'] = 'application/json';
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/keys`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))),
      method: 'POST',
      headers: headerParameters,
      query: queryParameters,
      body: CreateKeyOptionToJSON(requestParameters.body)
    }, initOverrides);
    return new JSONApiResponse(response, jsonValue => DeployKeyFromJSON(jsonValue));
  }

  /**
   * Add a key to a repository
   */
  async repoCreateKey(requestParameters, initOverrides) {
    const response = await this.repoCreateKeyRaw(requestParameters, initOverrides);
    return await response.value();
  }

  /**
   * Create a pull request
   */
  async repoCreatePullRequestRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling repoCreatePullRequest.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling repoCreatePullRequest.');
    }
    const queryParameters = {};
    const headerParameters = {};
    headerParameters['Content-Type'] = 'application/json';
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/pulls`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))),
      method: 'POST',
      headers: headerParameters,
      query: queryParameters,
      body: CreatePullRequestOptionToJSON(requestParameters.body)
    }, initOverrides);
    return new JSONApiResponse(response, jsonValue => PullRequestFromJSON(jsonValue));
  }

  /**
   * Create a pull request
   */
  async repoCreatePullRequest(requestParameters, initOverrides) {
    const response = await this.repoCreatePullRequestRaw(requestParameters, initOverrides);
    return await response.value();
  }

  /**
   * Create a review to an pull request
   */
  async repoCreatePullReviewRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling repoCreatePullReview.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling repoCreatePullReview.');
    }
    if (requestParameters.index === null || requestParameters.index === undefined) {
      throw new RequiredError('index', 'Required parameter requestParameters.index was null or undefined when calling repoCreatePullReview.');
    }
    if (requestParameters.body === null || requestParameters.body === undefined) {
      throw new RequiredError('body', 'Required parameter requestParameters.body was null or undefined when calling repoCreatePullReview.');
    }
    const queryParameters = {};
    const headerParameters = {};
    headerParameters['Content-Type'] = 'application/json';
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/pulls/{index}/reviews`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))).replace(`{${"index"}}`, encodeURIComponent(String(requestParameters.index))),
      method: 'POST',
      headers: headerParameters,
      query: queryParameters,
      body: CreatePullReviewOptionsToJSON(requestParameters.body)
    }, initOverrides);
    return new JSONApiResponse(response, jsonValue => PullReviewFromJSON(jsonValue));
  }

  /**
   * Create a review to an pull request
   */
  async repoCreatePullReview(requestParameters, initOverrides) {
    const response = await this.repoCreatePullReviewRaw(requestParameters, initOverrides);
    return await response.value();
  }

  /**
   * create review requests for a pull request
   */
  async repoCreatePullReviewRequestsRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling repoCreatePullReviewRequests.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling repoCreatePullReviewRequests.');
    }
    if (requestParameters.index === null || requestParameters.index === undefined) {
      throw new RequiredError('index', 'Required parameter requestParameters.index was null or undefined when calling repoCreatePullReviewRequests.');
    }
    if (requestParameters.body === null || requestParameters.body === undefined) {
      throw new RequiredError('body', 'Required parameter requestParameters.body was null or undefined when calling repoCreatePullReviewRequests.');
    }
    const queryParameters = {};
    const headerParameters = {};
    headerParameters['Content-Type'] = 'application/json';
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/pulls/{index}/requested_reviewers`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))).replace(`{${"index"}}`, encodeURIComponent(String(requestParameters.index))),
      method: 'POST',
      headers: headerParameters,
      query: queryParameters,
      body: PullReviewRequestOptionsToJSON(requestParameters.body)
    }, initOverrides);
    return new JSONApiResponse(response, jsonValue => jsonValue.map(PullReviewFromJSON));
  }

  /**
   * create review requests for a pull request
   */
  async repoCreatePullReviewRequests(requestParameters, initOverrides) {
    const response = await this.repoCreatePullReviewRequestsRaw(requestParameters, initOverrides);
    return await response.value();
  }

  /**
   * Create a release
   */
  async repoCreateReleaseRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling repoCreateRelease.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling repoCreateRelease.');
    }
    const queryParameters = {};
    const headerParameters = {};
    headerParameters['Content-Type'] = 'application/json';
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/releases`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))),
      method: 'POST',
      headers: headerParameters,
      query: queryParameters,
      body: CreateReleaseOptionToJSON(requestParameters.body)
    }, initOverrides);
    return new JSONApiResponse(response, jsonValue => ReleaseFromJSON(jsonValue));
  }

  /**
   * Create a release
   */
  async repoCreateRelease(requestParameters, initOverrides) {
    const response = await this.repoCreateReleaseRaw(requestParameters, initOverrides);
    return await response.value();
  }

  /**
   * Create a release attachment
   */
  async repoCreateReleaseAttachmentRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling repoCreateReleaseAttachment.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling repoCreateReleaseAttachment.');
    }
    if (requestParameters.id === null || requestParameters.id === undefined) {
      throw new RequiredError('id', 'Required parameter requestParameters.id was null or undefined when calling repoCreateReleaseAttachment.');
    }
    if (requestParameters.attachment === null || requestParameters.attachment === undefined) {
      throw new RequiredError('attachment', 'Required parameter requestParameters.attachment was null or undefined when calling repoCreateReleaseAttachment.');
    }
    const queryParameters = {};
    if (requestParameters.name !== undefined) {
      queryParameters['name'] = requestParameters.name;
    }
    const headerParameters = {};
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const consumes = [{
      contentType: 'multipart/form-data'
    }];
    // @ts-ignore: canConsumeForm may be unused
    const canConsumeForm$1 = canConsumeForm(consumes);
    let formParams;
    let useForm = false;
    // use FormData to transmit files using content-type "multipart/form-data"
    useForm = canConsumeForm$1;
    if (useForm) {
      formParams = new FormData();
    } else {
      formParams = new URLSearchParams();
    }
    if (requestParameters.attachment !== undefined) {
      formParams.append('attachment', requestParameters.attachment);
    }
    const response = await this.request({
      path: `/repos/{owner}/{repo}/releases/{id}/assets`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))).replace(`{${"id"}}`, encodeURIComponent(String(requestParameters.id))),
      method: 'POST',
      headers: headerParameters,
      query: queryParameters,
      body: formParams
    }, initOverrides);
    return new JSONApiResponse(response, jsonValue => AttachmentFromJSON(jsonValue));
  }

  /**
   * Create a release attachment
   */
  async repoCreateReleaseAttachment(requestParameters, initOverrides) {
    const response = await this.repoCreateReleaseAttachmentRaw(requestParameters, initOverrides);
    return await response.value();
  }

  /**
   * Create a commit status
   */
  async repoCreateStatusRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling repoCreateStatus.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling repoCreateStatus.');
    }
    if (requestParameters.sha === null || requestParameters.sha === undefined) {
      throw new RequiredError('sha', 'Required parameter requestParameters.sha was null or undefined when calling repoCreateStatus.');
    }
    const queryParameters = {};
    const headerParameters = {};
    headerParameters['Content-Type'] = 'application/json';
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/statuses/{sha}`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))).replace(`{${"sha"}}`, encodeURIComponent(String(requestParameters.sha))),
      method: 'POST',
      headers: headerParameters,
      query: queryParameters,
      body: CreateStatusOptionToJSON(requestParameters.body)
    }, initOverrides);
    return new JSONApiResponse(response, jsonValue => CommitStatusFromJSON(jsonValue));
  }

  /**
   * Create a commit status
   */
  async repoCreateStatus(requestParameters, initOverrides) {
    const response = await this.repoCreateStatusRaw(requestParameters, initOverrides);
    return await response.value();
  }

  /**
   * Create a new git tag in a repository
   */
  async repoCreateTagRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling repoCreateTag.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling repoCreateTag.');
    }
    const queryParameters = {};
    const headerParameters = {};
    headerParameters['Content-Type'] = 'application/json';
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/tags`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))),
      method: 'POST',
      headers: headerParameters,
      query: queryParameters,
      body: CreateTagOptionToJSON(requestParameters.body)
    }, initOverrides);
    return new JSONApiResponse(response, jsonValue => TagFromJSON(jsonValue));
  }

  /**
   * Create a new git tag in a repository
   */
  async repoCreateTag(requestParameters, initOverrides) {
    const response = await this.repoCreateTagRaw(requestParameters, initOverrides);
    return await response.value();
  }

  /**
   * Create a wiki page
   */
  async repoCreateWikiPageRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling repoCreateWikiPage.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling repoCreateWikiPage.');
    }
    const queryParameters = {};
    const headerParameters = {};
    headerParameters['Content-Type'] = 'application/json';
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/wiki/new`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))),
      method: 'POST',
      headers: headerParameters,
      query: queryParameters,
      body: CreateWikiPageOptionsToJSON(requestParameters.body)
    }, initOverrides);
    return new JSONApiResponse(response, jsonValue => WikiPageFromJSON(jsonValue));
  }

  /**
   * Create a wiki page
   */
  async repoCreateWikiPage(requestParameters, initOverrides) {
    const response = await this.repoCreateWikiPageRaw(requestParameters, initOverrides);
    return await response.value();
  }

  /**
   * Delete a repository
   */
  async repoDeleteRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling repoDelete.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling repoDelete.');
    }
    const queryParameters = {};
    const headerParameters = {};
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))),
      method: 'DELETE',
      headers: headerParameters,
      query: queryParameters
    }, initOverrides);
    return new VoidApiResponse(response);
  }

  /**
   * Delete a repository
   */
  async repoDelete(requestParameters, initOverrides) {
    await this.repoDeleteRaw(requestParameters, initOverrides);
  }

  /**
   * Delete a specific branch from a repository
   */
  async repoDeleteBranchRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling repoDeleteBranch.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling repoDeleteBranch.');
    }
    if (requestParameters.branch === null || requestParameters.branch === undefined) {
      throw new RequiredError('branch', 'Required parameter requestParameters.branch was null or undefined when calling repoDeleteBranch.');
    }
    const queryParameters = {};
    const headerParameters = {};
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/branches/{branch}`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))).replace(`{${"branch"}}`, encodeURIComponent(String(requestParameters.branch))),
      method: 'DELETE',
      headers: headerParameters,
      query: queryParameters
    }, initOverrides);
    return new VoidApiResponse(response);
  }

  /**
   * Delete a specific branch from a repository
   */
  async repoDeleteBranch(requestParameters, initOverrides) {
    await this.repoDeleteBranchRaw(requestParameters, initOverrides);
  }

  /**
   * Delete a specific branch protection for the repository
   */
  async repoDeleteBranchProtectionRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling repoDeleteBranchProtection.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling repoDeleteBranchProtection.');
    }
    if (requestParameters.name === null || requestParameters.name === undefined) {
      throw new RequiredError('name', 'Required parameter requestParameters.name was null or undefined when calling repoDeleteBranchProtection.');
    }
    const queryParameters = {};
    const headerParameters = {};
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/branch_protections/{name}`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))).replace(`{${"name"}}`, encodeURIComponent(String(requestParameters.name))),
      method: 'DELETE',
      headers: headerParameters,
      query: queryParameters
    }, initOverrides);
    return new VoidApiResponse(response);
  }

  /**
   * Delete a specific branch protection for the repository
   */
  async repoDeleteBranchProtection(requestParameters, initOverrides) {
    await this.repoDeleteBranchProtectionRaw(requestParameters, initOverrides);
  }

  /**
   * Delete a collaborator from a repository
   */
  async repoDeleteCollaboratorRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling repoDeleteCollaborator.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling repoDeleteCollaborator.');
    }
    if (requestParameters.collaborator === null || requestParameters.collaborator === undefined) {
      throw new RequiredError('collaborator', 'Required parameter requestParameters.collaborator was null or undefined when calling repoDeleteCollaborator.');
    }
    const queryParameters = {};
    const headerParameters = {};
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/collaborators/{collaborator}`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))).replace(`{${"collaborator"}}`, encodeURIComponent(String(requestParameters.collaborator))),
      method: 'DELETE',
      headers: headerParameters,
      query: queryParameters
    }, initOverrides);
    return new VoidApiResponse(response);
  }

  /**
   * Delete a collaborator from a repository
   */
  async repoDeleteCollaborator(requestParameters, initOverrides) {
    await this.repoDeleteCollaboratorRaw(requestParameters, initOverrides);
  }

  /**
   * Delete a file in a repository
   */
  async repoDeleteFileRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling repoDeleteFile.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling repoDeleteFile.');
    }
    if (requestParameters.filepath === null || requestParameters.filepath === undefined) {
      throw new RequiredError('filepath', 'Required parameter requestParameters.filepath was null or undefined when calling repoDeleteFile.');
    }
    if (requestParameters.body === null || requestParameters.body === undefined) {
      throw new RequiredError('body', 'Required parameter requestParameters.body was null or undefined when calling repoDeleteFile.');
    }
    const queryParameters = {};
    const headerParameters = {};
    headerParameters['Content-Type'] = 'application/json';
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/contents/{filepath}`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))).replace(`{${"filepath"}}`, encodeURIComponent(String(requestParameters.filepath))),
      method: 'DELETE',
      headers: headerParameters,
      query: queryParameters,
      body: DeleteFileOptionsToJSON(requestParameters.body)
    }, initOverrides);
    return new JSONApiResponse(response, jsonValue => FileDeleteResponseFromJSON(jsonValue));
  }

  /**
   * Delete a file in a repository
   */
  async repoDeleteFile(requestParameters, initOverrides) {
    const response = await this.repoDeleteFileRaw(requestParameters, initOverrides);
    return await response.value();
  }

  /**
   * Delete a Git hook in a repository
   */
  async repoDeleteGitHookRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling repoDeleteGitHook.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling repoDeleteGitHook.');
    }
    if (requestParameters.id === null || requestParameters.id === undefined) {
      throw new RequiredError('id', 'Required parameter requestParameters.id was null or undefined when calling repoDeleteGitHook.');
    }
    const queryParameters = {};
    const headerParameters = {};
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/hooks/git/{id}`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))).replace(`{${"id"}}`, encodeURIComponent(String(requestParameters.id))),
      method: 'DELETE',
      headers: headerParameters,
      query: queryParameters
    }, initOverrides);
    return new VoidApiResponse(response);
  }

  /**
   * Delete a Git hook in a repository
   */
  async repoDeleteGitHook(requestParameters, initOverrides) {
    await this.repoDeleteGitHookRaw(requestParameters, initOverrides);
  }

  /**
   * Delete a hook in a repository
   */
  async repoDeleteHookRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling repoDeleteHook.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling repoDeleteHook.');
    }
    if (requestParameters.id === null || requestParameters.id === undefined) {
      throw new RequiredError('id', 'Required parameter requestParameters.id was null or undefined when calling repoDeleteHook.');
    }
    const queryParameters = {};
    const headerParameters = {};
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/hooks/{id}`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))).replace(`{${"id"}}`, encodeURIComponent(String(requestParameters.id))),
      method: 'DELETE',
      headers: headerParameters,
      query: queryParameters
    }, initOverrides);
    return new VoidApiResponse(response);
  }

  /**
   * Delete a hook in a repository
   */
  async repoDeleteHook(requestParameters, initOverrides) {
    await this.repoDeleteHookRaw(requestParameters, initOverrides);
  }

  /**
   * Delete a key from a repository
   */
  async repoDeleteKeyRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling repoDeleteKey.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling repoDeleteKey.');
    }
    if (requestParameters.id === null || requestParameters.id === undefined) {
      throw new RequiredError('id', 'Required parameter requestParameters.id was null or undefined when calling repoDeleteKey.');
    }
    const queryParameters = {};
    const headerParameters = {};
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/keys/{id}`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))).replace(`{${"id"}}`, encodeURIComponent(String(requestParameters.id))),
      method: 'DELETE',
      headers: headerParameters,
      query: queryParameters
    }, initOverrides);
    return new VoidApiResponse(response);
  }

  /**
   * Delete a key from a repository
   */
  async repoDeleteKey(requestParameters, initOverrides) {
    await this.repoDeleteKeyRaw(requestParameters, initOverrides);
  }

  /**
   * Delete a specific review from a pull request
   */
  async repoDeletePullReviewRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling repoDeletePullReview.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling repoDeletePullReview.');
    }
    if (requestParameters.index === null || requestParameters.index === undefined) {
      throw new RequiredError('index', 'Required parameter requestParameters.index was null or undefined when calling repoDeletePullReview.');
    }
    if (requestParameters.id === null || requestParameters.id === undefined) {
      throw new RequiredError('id', 'Required parameter requestParameters.id was null or undefined when calling repoDeletePullReview.');
    }
    const queryParameters = {};
    const headerParameters = {};
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/pulls/{index}/reviews/{id}`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))).replace(`{${"index"}}`, encodeURIComponent(String(requestParameters.index))).replace(`{${"id"}}`, encodeURIComponent(String(requestParameters.id))),
      method: 'DELETE',
      headers: headerParameters,
      query: queryParameters
    }, initOverrides);
    return new VoidApiResponse(response);
  }

  /**
   * Delete a specific review from a pull request
   */
  async repoDeletePullReview(requestParameters, initOverrides) {
    await this.repoDeletePullReviewRaw(requestParameters, initOverrides);
  }

  /**
   * cancel review requests for a pull request
   */
  async repoDeletePullReviewRequestsRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling repoDeletePullReviewRequests.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling repoDeletePullReviewRequests.');
    }
    if (requestParameters.index === null || requestParameters.index === undefined) {
      throw new RequiredError('index', 'Required parameter requestParameters.index was null or undefined when calling repoDeletePullReviewRequests.');
    }
    if (requestParameters.body === null || requestParameters.body === undefined) {
      throw new RequiredError('body', 'Required parameter requestParameters.body was null or undefined when calling repoDeletePullReviewRequests.');
    }
    const queryParameters = {};
    const headerParameters = {};
    headerParameters['Content-Type'] = 'application/json';
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/pulls/{index}/requested_reviewers`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))).replace(`{${"index"}}`, encodeURIComponent(String(requestParameters.index))),
      method: 'DELETE',
      headers: headerParameters,
      query: queryParameters,
      body: PullReviewRequestOptionsToJSON(requestParameters.body)
    }, initOverrides);
    return new VoidApiResponse(response);
  }

  /**
   * cancel review requests for a pull request
   */
  async repoDeletePullReviewRequests(requestParameters, initOverrides) {
    await this.repoDeletePullReviewRequestsRaw(requestParameters, initOverrides);
  }

  /**
   * deletes a push mirror from a repository by remoteName
   */
  async repoDeletePushMirrorRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling repoDeletePushMirror.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling repoDeletePushMirror.');
    }
    if (requestParameters.name === null || requestParameters.name === undefined) {
      throw new RequiredError('name', 'Required parameter requestParameters.name was null or undefined when calling repoDeletePushMirror.');
    }
    const queryParameters = {};
    const headerParameters = {};
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/push_mirrors/{name}`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))).replace(`{${"name"}}`, encodeURIComponent(String(requestParameters.name))),
      method: 'DELETE',
      headers: headerParameters,
      query: queryParameters
    }, initOverrides);
    return new VoidApiResponse(response);
  }

  /**
   * deletes a push mirror from a repository by remoteName
   */
  async repoDeletePushMirror(requestParameters, initOverrides) {
    await this.repoDeletePushMirrorRaw(requestParameters, initOverrides);
  }

  /**
   * Delete a release
   */
  async repoDeleteReleaseRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling repoDeleteRelease.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling repoDeleteRelease.');
    }
    if (requestParameters.id === null || requestParameters.id === undefined) {
      throw new RequiredError('id', 'Required parameter requestParameters.id was null or undefined when calling repoDeleteRelease.');
    }
    const queryParameters = {};
    const headerParameters = {};
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/releases/{id}`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))).replace(`{${"id"}}`, encodeURIComponent(String(requestParameters.id))),
      method: 'DELETE',
      headers: headerParameters,
      query: queryParameters
    }, initOverrides);
    return new VoidApiResponse(response);
  }

  /**
   * Delete a release
   */
  async repoDeleteRelease(requestParameters, initOverrides) {
    await this.repoDeleteReleaseRaw(requestParameters, initOverrides);
  }

  /**
   * Delete a release attachment
   */
  async repoDeleteReleaseAttachmentRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling repoDeleteReleaseAttachment.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling repoDeleteReleaseAttachment.');
    }
    if (requestParameters.id === null || requestParameters.id === undefined) {
      throw new RequiredError('id', 'Required parameter requestParameters.id was null or undefined when calling repoDeleteReleaseAttachment.');
    }
    if (requestParameters.attachmentId === null || requestParameters.attachmentId === undefined) {
      throw new RequiredError('attachmentId', 'Required parameter requestParameters.attachmentId was null or undefined when calling repoDeleteReleaseAttachment.');
    }
    const queryParameters = {};
    const headerParameters = {};
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/releases/{id}/assets/{attachment_id}`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))).replace(`{${"id"}}`, encodeURIComponent(String(requestParameters.id))).replace(`{${"attachment_id"}}`, encodeURIComponent(String(requestParameters.attachmentId))),
      method: 'DELETE',
      headers: headerParameters,
      query: queryParameters
    }, initOverrides);
    return new VoidApiResponse(response);
  }

  /**
   * Delete a release attachment
   */
  async repoDeleteReleaseAttachment(requestParameters, initOverrides) {
    await this.repoDeleteReleaseAttachmentRaw(requestParameters, initOverrides);
  }

  /**
   * Delete a release by tag name
   */
  async repoDeleteReleaseByTagRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling repoDeleteReleaseByTag.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling repoDeleteReleaseByTag.');
    }
    if (requestParameters.tag === null || requestParameters.tag === undefined) {
      throw new RequiredError('tag', 'Required parameter requestParameters.tag was null or undefined when calling repoDeleteReleaseByTag.');
    }
    const queryParameters = {};
    const headerParameters = {};
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/releases/tags/{tag}`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))).replace(`{${"tag"}}`, encodeURIComponent(String(requestParameters.tag))),
      method: 'DELETE',
      headers: headerParameters,
      query: queryParameters
    }, initOverrides);
    return new VoidApiResponse(response);
  }

  /**
   * Delete a release by tag name
   */
  async repoDeleteReleaseByTag(requestParameters, initOverrides) {
    await this.repoDeleteReleaseByTagRaw(requestParameters, initOverrides);
  }

  /**
   * Delete a repository\'s tag by name
   */
  async repoDeleteTagRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling repoDeleteTag.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling repoDeleteTag.');
    }
    if (requestParameters.tag === null || requestParameters.tag === undefined) {
      throw new RequiredError('tag', 'Required parameter requestParameters.tag was null or undefined when calling repoDeleteTag.');
    }
    const queryParameters = {};
    const headerParameters = {};
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/tags/{tag}`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))).replace(`{${"tag"}}`, encodeURIComponent(String(requestParameters.tag))),
      method: 'DELETE',
      headers: headerParameters,
      query: queryParameters
    }, initOverrides);
    return new VoidApiResponse(response);
  }

  /**
   * Delete a repository\'s tag by name
   */
  async repoDeleteTag(requestParameters, initOverrides) {
    await this.repoDeleteTagRaw(requestParameters, initOverrides);
  }

  /**
   * Delete a team from a repository
   */
  async repoDeleteTeamRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling repoDeleteTeam.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling repoDeleteTeam.');
    }
    if (requestParameters.team === null || requestParameters.team === undefined) {
      throw new RequiredError('team', 'Required parameter requestParameters.team was null or undefined when calling repoDeleteTeam.');
    }
    const queryParameters = {};
    const headerParameters = {};
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/teams/{team}`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))).replace(`{${"team"}}`, encodeURIComponent(String(requestParameters.team))),
      method: 'DELETE',
      headers: headerParameters,
      query: queryParameters
    }, initOverrides);
    return new VoidApiResponse(response);
  }

  /**
   * Delete a team from a repository
   */
  async repoDeleteTeam(requestParameters, initOverrides) {
    await this.repoDeleteTeamRaw(requestParameters, initOverrides);
  }

  /**
   * Delete a topic from a repository
   */
  async repoDeleteTopicRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling repoDeleteTopic.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling repoDeleteTopic.');
    }
    if (requestParameters.topic === null || requestParameters.topic === undefined) {
      throw new RequiredError('topic', 'Required parameter requestParameters.topic was null or undefined when calling repoDeleteTopic.');
    }
    const queryParameters = {};
    const headerParameters = {};
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/topics/{topic}`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))).replace(`{${"topic"}}`, encodeURIComponent(String(requestParameters.topic))),
      method: 'DELETE',
      headers: headerParameters,
      query: queryParameters
    }, initOverrides);
    return new VoidApiResponse(response);
  }

  /**
   * Delete a topic from a repository
   */
  async repoDeleteTopic(requestParameters, initOverrides) {
    await this.repoDeleteTopicRaw(requestParameters, initOverrides);
  }

  /**
   * Delete a wiki page
   */
  async repoDeleteWikiPageRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling repoDeleteWikiPage.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling repoDeleteWikiPage.');
    }
    if (requestParameters.pageName === null || requestParameters.pageName === undefined) {
      throw new RequiredError('pageName', 'Required parameter requestParameters.pageName was null or undefined when calling repoDeleteWikiPage.');
    }
    const queryParameters = {};
    const headerParameters = {};
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/wiki/page/{pageName}`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))).replace(`{${"pageName"}}`, encodeURIComponent(String(requestParameters.pageName))),
      method: 'DELETE',
      headers: headerParameters,
      query: queryParameters
    }, initOverrides);
    return new VoidApiResponse(response);
  }

  /**
   * Delete a wiki page
   */
  async repoDeleteWikiPage(requestParameters, initOverrides) {
    await this.repoDeleteWikiPageRaw(requestParameters, initOverrides);
  }

  /**
   * Dismiss a review for a pull request
   */
  async repoDismissPullReviewRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling repoDismissPullReview.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling repoDismissPullReview.');
    }
    if (requestParameters.index === null || requestParameters.index === undefined) {
      throw new RequiredError('index', 'Required parameter requestParameters.index was null or undefined when calling repoDismissPullReview.');
    }
    if (requestParameters.id === null || requestParameters.id === undefined) {
      throw new RequiredError('id', 'Required parameter requestParameters.id was null or undefined when calling repoDismissPullReview.');
    }
    if (requestParameters.body === null || requestParameters.body === undefined) {
      throw new RequiredError('body', 'Required parameter requestParameters.body was null or undefined when calling repoDismissPullReview.');
    }
    const queryParameters = {};
    const headerParameters = {};
    headerParameters['Content-Type'] = 'application/json';
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/pulls/{index}/reviews/{id}/dismissals`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))).replace(`{${"index"}}`, encodeURIComponent(String(requestParameters.index))).replace(`{${"id"}}`, encodeURIComponent(String(requestParameters.id))),
      method: 'POST',
      headers: headerParameters,
      query: queryParameters,
      body: DismissPullReviewOptionsToJSON(requestParameters.body)
    }, initOverrides);
    return new JSONApiResponse(response, jsonValue => PullReviewFromJSON(jsonValue));
  }

  /**
   * Dismiss a review for a pull request
   */
  async repoDismissPullReview(requestParameters, initOverrides) {
    const response = await this.repoDismissPullReviewRaw(requestParameters, initOverrides);
    return await response.value();
  }

  /**
   * Get a commit\'s diff or patch
   */
  async repoDownloadCommitDiffOrPatchRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling repoDownloadCommitDiffOrPatch.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling repoDownloadCommitDiffOrPatch.');
    }
    if (requestParameters.sha === null || requestParameters.sha === undefined) {
      throw new RequiredError('sha', 'Required parameter requestParameters.sha was null or undefined when calling repoDownloadCommitDiffOrPatch.');
    }
    if (requestParameters.diffType === null || requestParameters.diffType === undefined) {
      throw new RequiredError('diffType', 'Required parameter requestParameters.diffType was null or undefined when calling repoDownloadCommitDiffOrPatch.');
    }
    const queryParameters = {};
    const headerParameters = {};
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/git/commits/{sha}.{diffType}`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))).replace(`{${"sha"}}`, encodeURIComponent(String(requestParameters.sha))).replace(`{${"diffType"}}`, encodeURIComponent(String(requestParameters.diffType))),
      method: 'GET',
      headers: headerParameters,
      query: queryParameters
    }, initOverrides);
    if (this.isJsonMime(response.headers.get('content-type'))) {
      return new JSONApiResponse(response);
    } else {
      return new TextApiResponse(response);
    }
  }

  /**
   * Get a commit\'s diff or patch
   */
  async repoDownloadCommitDiffOrPatch(requestParameters, initOverrides) {
    const response = await this.repoDownloadCommitDiffOrPatchRaw(requestParameters, initOverrides);
    return await response.value();
  }

  /**
   * Get a pull request diff or patch
   */
  async repoDownloadPullDiffOrPatchRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling repoDownloadPullDiffOrPatch.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling repoDownloadPullDiffOrPatch.');
    }
    if (requestParameters.index === null || requestParameters.index === undefined) {
      throw new RequiredError('index', 'Required parameter requestParameters.index was null or undefined when calling repoDownloadPullDiffOrPatch.');
    }
    if (requestParameters.diffType === null || requestParameters.diffType === undefined) {
      throw new RequiredError('diffType', 'Required parameter requestParameters.diffType was null or undefined when calling repoDownloadPullDiffOrPatch.');
    }
    const queryParameters = {};
    if (requestParameters.binary !== undefined) {
      queryParameters['binary'] = requestParameters.binary;
    }
    const headerParameters = {};
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/pulls/{index}.{diffType}`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))).replace(`{${"index"}}`, encodeURIComponent(String(requestParameters.index))).replace(`{${"diffType"}}`, encodeURIComponent(String(requestParameters.diffType))),
      method: 'GET',
      headers: headerParameters,
      query: queryParameters
    }, initOverrides);
    if (this.isJsonMime(response.headers.get('content-type'))) {
      return new JSONApiResponse(response);
    } else {
      return new TextApiResponse(response);
    }
  }

  /**
   * Get a pull request diff or patch
   */
  async repoDownloadPullDiffOrPatch(requestParameters, initOverrides) {
    const response = await this.repoDownloadPullDiffOrPatchRaw(requestParameters, initOverrides);
    return await response.value();
  }

  /**
   * Edit a repository\'s properties. Only fields that are set will be changed.
   */
  async repoEditRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling repoEdit.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling repoEdit.');
    }
    const queryParameters = {};
    const headerParameters = {};
    headerParameters['Content-Type'] = 'application/json';
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))),
      method: 'PATCH',
      headers: headerParameters,
      query: queryParameters,
      body: EditRepoOptionToJSON(requestParameters.body)
    }, initOverrides);
    return new JSONApiResponse(response, jsonValue => RepositoryFromJSON(jsonValue));
  }

  /**
   * Edit a repository\'s properties. Only fields that are set will be changed.
   */
  async repoEdit(requestParameters, initOverrides) {
    const response = await this.repoEditRaw(requestParameters, initOverrides);
    return await response.value();
  }

  /**
   * Edit a branch protections for a repository. Only fields that are set will be changed
   */
  async repoEditBranchProtectionRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling repoEditBranchProtection.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling repoEditBranchProtection.');
    }
    if (requestParameters.name === null || requestParameters.name === undefined) {
      throw new RequiredError('name', 'Required parameter requestParameters.name was null or undefined when calling repoEditBranchProtection.');
    }
    const queryParameters = {};
    const headerParameters = {};
    headerParameters['Content-Type'] = 'application/json';
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/branch_protections/{name}`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))).replace(`{${"name"}}`, encodeURIComponent(String(requestParameters.name))),
      method: 'PATCH',
      headers: headerParameters,
      query: queryParameters,
      body: EditBranchProtectionOptionToJSON(requestParameters.body)
    }, initOverrides);
    return new JSONApiResponse(response, jsonValue => BranchProtectionFromJSON(jsonValue));
  }

  /**
   * Edit a branch protections for a repository. Only fields that are set will be changed
   */
  async repoEditBranchProtection(requestParameters, initOverrides) {
    const response = await this.repoEditBranchProtectionRaw(requestParameters, initOverrides);
    return await response.value();
  }

  /**
   * Edit a Git hook in a repository
   */
  async repoEditGitHookRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling repoEditGitHook.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling repoEditGitHook.');
    }
    if (requestParameters.id === null || requestParameters.id === undefined) {
      throw new RequiredError('id', 'Required parameter requestParameters.id was null or undefined when calling repoEditGitHook.');
    }
    const queryParameters = {};
    const headerParameters = {};
    headerParameters['Content-Type'] = 'application/json';
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/hooks/git/{id}`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))).replace(`{${"id"}}`, encodeURIComponent(String(requestParameters.id))),
      method: 'PATCH',
      headers: headerParameters,
      query: queryParameters,
      body: EditGitHookOptionToJSON(requestParameters.body)
    }, initOverrides);
    return new JSONApiResponse(response, jsonValue => GitHookFromJSON(jsonValue));
  }

  /**
   * Edit a Git hook in a repository
   */
  async repoEditGitHook(requestParameters, initOverrides) {
    const response = await this.repoEditGitHookRaw(requestParameters, initOverrides);
    return await response.value();
  }

  /**
   * Edit a hook in a repository
   */
  async repoEditHookRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling repoEditHook.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling repoEditHook.');
    }
    if (requestParameters.id === null || requestParameters.id === undefined) {
      throw new RequiredError('id', 'Required parameter requestParameters.id was null or undefined when calling repoEditHook.');
    }
    const queryParameters = {};
    const headerParameters = {};
    headerParameters['Content-Type'] = 'application/json';
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/hooks/{id}`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))).replace(`{${"id"}}`, encodeURIComponent(String(requestParameters.id))),
      method: 'PATCH',
      headers: headerParameters,
      query: queryParameters,
      body: EditHookOptionToJSON(requestParameters.body)
    }, initOverrides);
    return new JSONApiResponse(response, jsonValue => HookFromJSON(jsonValue));
  }

  /**
   * Edit a hook in a repository
   */
  async repoEditHook(requestParameters, initOverrides) {
    const response = await this.repoEditHookRaw(requestParameters, initOverrides);
    return await response.value();
  }

  /**
   * Update a pull request. If using deadline only the date will be taken into account, and time of day ignored.
   */
  async repoEditPullRequestRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling repoEditPullRequest.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling repoEditPullRequest.');
    }
    if (requestParameters.index === null || requestParameters.index === undefined) {
      throw new RequiredError('index', 'Required parameter requestParameters.index was null or undefined when calling repoEditPullRequest.');
    }
    const queryParameters = {};
    const headerParameters = {};
    headerParameters['Content-Type'] = 'application/json';
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/pulls/{index}`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))).replace(`{${"index"}}`, encodeURIComponent(String(requestParameters.index))),
      method: 'PATCH',
      headers: headerParameters,
      query: queryParameters,
      body: EditPullRequestOptionToJSON(requestParameters.body)
    }, initOverrides);
    return new JSONApiResponse(response, jsonValue => PullRequestFromJSON(jsonValue));
  }

  /**
   * Update a pull request. If using deadline only the date will be taken into account, and time of day ignored.
   */
  async repoEditPullRequest(requestParameters, initOverrides) {
    const response = await this.repoEditPullRequestRaw(requestParameters, initOverrides);
    return await response.value();
  }

  /**
   * Update a release
   */
  async repoEditReleaseRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling repoEditRelease.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling repoEditRelease.');
    }
    if (requestParameters.id === null || requestParameters.id === undefined) {
      throw new RequiredError('id', 'Required parameter requestParameters.id was null or undefined when calling repoEditRelease.');
    }
    const queryParameters = {};
    const headerParameters = {};
    headerParameters['Content-Type'] = 'application/json';
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/releases/{id}`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))).replace(`{${"id"}}`, encodeURIComponent(String(requestParameters.id))),
      method: 'PATCH',
      headers: headerParameters,
      query: queryParameters,
      body: EditReleaseOptionToJSON(requestParameters.body)
    }, initOverrides);
    return new JSONApiResponse(response, jsonValue => ReleaseFromJSON(jsonValue));
  }

  /**
   * Update a release
   */
  async repoEditRelease(requestParameters, initOverrides) {
    const response = await this.repoEditReleaseRaw(requestParameters, initOverrides);
    return await response.value();
  }

  /**
   * Edit a release attachment
   */
  async repoEditReleaseAttachmentRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling repoEditReleaseAttachment.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling repoEditReleaseAttachment.');
    }
    if (requestParameters.id === null || requestParameters.id === undefined) {
      throw new RequiredError('id', 'Required parameter requestParameters.id was null or undefined when calling repoEditReleaseAttachment.');
    }
    if (requestParameters.attachmentId === null || requestParameters.attachmentId === undefined) {
      throw new RequiredError('attachmentId', 'Required parameter requestParameters.attachmentId was null or undefined when calling repoEditReleaseAttachment.');
    }
    const queryParameters = {};
    const headerParameters = {};
    headerParameters['Content-Type'] = 'application/json';
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/releases/{id}/assets/{attachment_id}`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))).replace(`{${"id"}}`, encodeURIComponent(String(requestParameters.id))).replace(`{${"attachment_id"}}`, encodeURIComponent(String(requestParameters.attachmentId))),
      method: 'PATCH',
      headers: headerParameters,
      query: queryParameters,
      body: EditAttachmentOptionsToJSON(requestParameters.body)
    }, initOverrides);
    return new JSONApiResponse(response, jsonValue => AttachmentFromJSON(jsonValue));
  }

  /**
   * Edit a release attachment
   */
  async repoEditReleaseAttachment(requestParameters, initOverrides) {
    const response = await this.repoEditReleaseAttachmentRaw(requestParameters, initOverrides);
    return await response.value();
  }

  /**
   * Edit a wiki page
   */
  async repoEditWikiPageRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling repoEditWikiPage.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling repoEditWikiPage.');
    }
    if (requestParameters.pageName === null || requestParameters.pageName === undefined) {
      throw new RequiredError('pageName', 'Required parameter requestParameters.pageName was null or undefined when calling repoEditWikiPage.');
    }
    const queryParameters = {};
    const headerParameters = {};
    headerParameters['Content-Type'] = 'application/json';
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/wiki/page/{pageName}`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))).replace(`{${"pageName"}}`, encodeURIComponent(String(requestParameters.pageName))),
      method: 'PATCH',
      headers: headerParameters,
      query: queryParameters,
      body: CreateWikiPageOptionsToJSON(requestParameters.body)
    }, initOverrides);
    return new JSONApiResponse(response, jsonValue => WikiPageFromJSON(jsonValue));
  }

  /**
   * Edit a wiki page
   */
  async repoEditWikiPage(requestParameters, initOverrides) {
    const response = await this.repoEditWikiPageRaw(requestParameters, initOverrides);
    return await response.value();
  }

  /**
   * Get a repository
   */
  async repoGetRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling repoGet.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling repoGet.');
    }
    const queryParameters = {};
    const headerParameters = {};
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))),
      method: 'GET',
      headers: headerParameters,
      query: queryParameters
    }, initOverrides);
    return new JSONApiResponse(response, jsonValue => RepositoryFromJSON(jsonValue));
  }

  /**
   * Get a repository
   */
  async repoGet(requestParameters, initOverrides) {
    const response = await this.repoGetRaw(requestParameters, initOverrides);
    return await response.value();
  }

  /**
   * Get a list of all commits from a repository
   */
  async repoGetAllCommitsRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling repoGetAllCommits.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling repoGetAllCommits.');
    }
    const queryParameters = {};
    if (requestParameters.sha !== undefined) {
      queryParameters['sha'] = requestParameters.sha;
    }
    if (requestParameters.path !== undefined) {
      queryParameters['path'] = requestParameters.path;
    }
    if (requestParameters.stat !== undefined) {
      queryParameters['stat'] = requestParameters.stat;
    }
    if (requestParameters.verification !== undefined) {
      queryParameters['verification'] = requestParameters.verification;
    }
    if (requestParameters.files !== undefined) {
      queryParameters['files'] = requestParameters.files;
    }
    if (requestParameters.page !== undefined) {
      queryParameters['page'] = requestParameters.page;
    }
    if (requestParameters.limit !== undefined) {
      queryParameters['limit'] = requestParameters.limit;
    }
    if (requestParameters.not !== undefined) {
      queryParameters['not'] = requestParameters.not;
    }
    const headerParameters = {};
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/commits`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))),
      method: 'GET',
      headers: headerParameters,
      query: queryParameters
    }, initOverrides);
    return new JSONApiResponse(response, jsonValue => jsonValue.map(CommitFromJSON));
  }

  /**
   * Get a list of all commits from a repository
   */
  async repoGetAllCommits(requestParameters, initOverrides) {
    const response = await this.repoGetAllCommitsRaw(requestParameters, initOverrides);
    return await response.value();
  }

  /**
   * Get an archive of a repository
   */
  async repoGetArchiveRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling repoGetArchive.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling repoGetArchive.');
    }
    if (requestParameters.archive === null || requestParameters.archive === undefined) {
      throw new RequiredError('archive', 'Required parameter requestParameters.archive was null or undefined when calling repoGetArchive.');
    }
    const queryParameters = {};
    const headerParameters = {};
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/archive/{archive}`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))).replace(`{${"archive"}}`, encodeURIComponent(String(requestParameters.archive))),
      method: 'GET',
      headers: headerParameters,
      query: queryParameters
    }, initOverrides);
    return new VoidApiResponse(response);
  }

  /**
   * Get an archive of a repository
   */
  async repoGetArchive(requestParameters, initOverrides) {
    await this.repoGetArchiveRaw(requestParameters, initOverrides);
  }

  /**
   * Return all users that have write access and can be assigned to issues
   */
  async repoGetAssigneesRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling repoGetAssignees.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling repoGetAssignees.');
    }
    const queryParameters = {};
    const headerParameters = {};
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/assignees`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))),
      method: 'GET',
      headers: headerParameters,
      query: queryParameters
    }, initOverrides);
    return new JSONApiResponse(response, jsonValue => jsonValue.map(UserFromJSON));
  }

  /**
   * Return all users that have write access and can be assigned to issues
   */
  async repoGetAssignees(requestParameters, initOverrides) {
    const response = await this.repoGetAssigneesRaw(requestParameters, initOverrides);
    return await response.value();
  }

  /**
   * Retrieve a specific branch from a repository, including its effective branch protection
   */
  async repoGetBranchRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling repoGetBranch.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling repoGetBranch.');
    }
    if (requestParameters.branch === null || requestParameters.branch === undefined) {
      throw new RequiredError('branch', 'Required parameter requestParameters.branch was null or undefined when calling repoGetBranch.');
    }
    const queryParameters = {};
    const headerParameters = {};
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/branches/{branch}`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))).replace(`{${"branch"}}`, encodeURIComponent(String(requestParameters.branch))),
      method: 'GET',
      headers: headerParameters,
      query: queryParameters
    }, initOverrides);
    return new JSONApiResponse(response, jsonValue => BranchFromJSON(jsonValue));
  }

  /**
   * Retrieve a specific branch from a repository, including its effective branch protection
   */
  async repoGetBranch(requestParameters, initOverrides) {
    const response = await this.repoGetBranchRaw(requestParameters, initOverrides);
    return await response.value();
  }

  /**
   * Get a specific branch protection for the repository
   */
  async repoGetBranchProtectionRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling repoGetBranchProtection.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling repoGetBranchProtection.');
    }
    if (requestParameters.name === null || requestParameters.name === undefined) {
      throw new RequiredError('name', 'Required parameter requestParameters.name was null or undefined when calling repoGetBranchProtection.');
    }
    const queryParameters = {};
    const headerParameters = {};
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/branch_protections/{name}`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))).replace(`{${"name"}}`, encodeURIComponent(String(requestParameters.name))),
      method: 'GET',
      headers: headerParameters,
      query: queryParameters
    }, initOverrides);
    return new JSONApiResponse(response, jsonValue => BranchProtectionFromJSON(jsonValue));
  }

  /**
   * Get a specific branch protection for the repository
   */
  async repoGetBranchProtection(requestParameters, initOverrides) {
    const response = await this.repoGetBranchProtectionRaw(requestParameters, initOverrides);
    return await response.value();
  }

  /**
   * Get a repository by id
   */
  async repoGetByIDRaw(requestParameters, initOverrides) {
    if (requestParameters.id === null || requestParameters.id === undefined) {
      throw new RequiredError('id', 'Required parameter requestParameters.id was null or undefined when calling repoGetByID.');
    }
    const queryParameters = {};
    const headerParameters = {};
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repositories/{id}`.replace(`{${"id"}}`, encodeURIComponent(String(requestParameters.id))),
      method: 'GET',
      headers: headerParameters,
      query: queryParameters
    }, initOverrides);
    return new JSONApiResponse(response, jsonValue => RepositoryFromJSON(jsonValue));
  }

  /**
   * Get a repository by id
   */
  async repoGetByID(requestParameters, initOverrides) {
    const response = await this.repoGetByIDRaw(requestParameters, initOverrides);
    return await response.value();
  }

  /**
   * Get a commit\'s combined status, by branch/tag/commit reference
   */
  async repoGetCombinedStatusByRefRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling repoGetCombinedStatusByRef.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling repoGetCombinedStatusByRef.');
    }
    if (requestParameters.ref === null || requestParameters.ref === undefined) {
      throw new RequiredError('ref', 'Required parameter requestParameters.ref was null or undefined when calling repoGetCombinedStatusByRef.');
    }
    const queryParameters = {};
    if (requestParameters.page !== undefined) {
      queryParameters['page'] = requestParameters.page;
    }
    if (requestParameters.limit !== undefined) {
      queryParameters['limit'] = requestParameters.limit;
    }
    const headerParameters = {};
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/commits/{ref}/status`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))).replace(`{${"ref"}}`, encodeURIComponent(String(requestParameters.ref))),
      method: 'GET',
      headers: headerParameters,
      query: queryParameters
    }, initOverrides);
    return new JSONApiResponse(response, jsonValue => CombinedStatusFromJSON(jsonValue));
  }

  /**
   * Get a commit\'s combined status, by branch/tag/commit reference
   */
  async repoGetCombinedStatusByRef(requestParameters, initOverrides) {
    const response = await this.repoGetCombinedStatusByRefRaw(requestParameters, initOverrides);
    return await response.value();
  }

  /**
   * Gets the metadata and contents (if a file) of an entry in a repository, or a list of entries if a dir
   */
  async repoGetContentsRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling repoGetContents.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling repoGetContents.');
    }
    if (requestParameters.filepath === null || requestParameters.filepath === undefined) {
      throw new RequiredError('filepath', 'Required parameter requestParameters.filepath was null or undefined when calling repoGetContents.');
    }
    const queryParameters = {};
    if (requestParameters.ref !== undefined) {
      queryParameters['ref'] = requestParameters.ref;
    }
    const headerParameters = {};
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/contents/{filepath}`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))).replace(`{${"filepath"}}`, encodeURIComponent(String(requestParameters.filepath))),
      method: 'GET',
      headers: headerParameters,
      query: queryParameters
    }, initOverrides);
    return new JSONApiResponse(response, jsonValue => ContentsResponseFromJSON(jsonValue));
  }

  /**
   * Gets the metadata and contents (if a file) of an entry in a repository, or a list of entries if a dir
   */
  async repoGetContents(requestParameters, initOverrides) {
    const response = await this.repoGetContentsRaw(requestParameters, initOverrides);
    return await response.value();
  }

  /**
   * Gets the metadata of all the entries of the root dir
   */
  async repoGetContentsListRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling repoGetContentsList.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling repoGetContentsList.');
    }
    const queryParameters = {};
    if (requestParameters.ref !== undefined) {
      queryParameters['ref'] = requestParameters.ref;
    }
    const headerParameters = {};
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/contents`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))),
      method: 'GET',
      headers: headerParameters,
      query: queryParameters
    }, initOverrides);
    return new JSONApiResponse(response, jsonValue => jsonValue.map(ContentsResponseFromJSON));
  }

  /**
   * Gets the metadata of all the entries of the root dir
   */
  async repoGetContentsList(requestParameters, initOverrides) {
    const response = await this.repoGetContentsListRaw(requestParameters, initOverrides);
    return await response.value();
  }

  /**
   * Get the EditorConfig definitions of a file in a repository
   */
  async repoGetEditorConfigRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling repoGetEditorConfig.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling repoGetEditorConfig.');
    }
    if (requestParameters.filepath === null || requestParameters.filepath === undefined) {
      throw new RequiredError('filepath', 'Required parameter requestParameters.filepath was null or undefined when calling repoGetEditorConfig.');
    }
    const queryParameters = {};
    if (requestParameters.ref !== undefined) {
      queryParameters['ref'] = requestParameters.ref;
    }
    const headerParameters = {};
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/editorconfig/{filepath}`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))).replace(`{${"filepath"}}`, encodeURIComponent(String(requestParameters.filepath))),
      method: 'GET',
      headers: headerParameters,
      query: queryParameters
    }, initOverrides);
    return new VoidApiResponse(response);
  }

  /**
   * Get the EditorConfig definitions of a file in a repository
   */
  async repoGetEditorConfig(requestParameters, initOverrides) {
    await this.repoGetEditorConfigRaw(requestParameters, initOverrides);
  }

  /**
   * Get a Git hook
   */
  async repoGetGitHookRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling repoGetGitHook.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling repoGetGitHook.');
    }
    if (requestParameters.id === null || requestParameters.id === undefined) {
      throw new RequiredError('id', 'Required parameter requestParameters.id was null or undefined when calling repoGetGitHook.');
    }
    const queryParameters = {};
    const headerParameters = {};
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/hooks/git/{id}`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))).replace(`{${"id"}}`, encodeURIComponent(String(requestParameters.id))),
      method: 'GET',
      headers: headerParameters,
      query: queryParameters
    }, initOverrides);
    return new JSONApiResponse(response, jsonValue => GitHookFromJSON(jsonValue));
  }

  /**
   * Get a Git hook
   */
  async repoGetGitHook(requestParameters, initOverrides) {
    const response = await this.repoGetGitHookRaw(requestParameters, initOverrides);
    return await response.value();
  }

  /**
   * Get a hook
   */
  async repoGetHookRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling repoGetHook.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling repoGetHook.');
    }
    if (requestParameters.id === null || requestParameters.id === undefined) {
      throw new RequiredError('id', 'Required parameter requestParameters.id was null or undefined when calling repoGetHook.');
    }
    const queryParameters = {};
    const headerParameters = {};
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/hooks/{id}`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))).replace(`{${"id"}}`, encodeURIComponent(String(requestParameters.id))),
      method: 'GET',
      headers: headerParameters,
      query: queryParameters
    }, initOverrides);
    return new JSONApiResponse(response, jsonValue => HookFromJSON(jsonValue));
  }

  /**
   * Get a hook
   */
  async repoGetHook(requestParameters, initOverrides) {
    const response = await this.repoGetHookRaw(requestParameters, initOverrides);
    return await response.value();
  }

  /**
   * Returns the issue config for a repo
   */
  async repoGetIssueConfigRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling repoGetIssueConfig.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling repoGetIssueConfig.');
    }
    const queryParameters = {};
    const headerParameters = {};
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/issue_config`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))),
      method: 'GET',
      headers: headerParameters,
      query: queryParameters
    }, initOverrides);
    return new JSONApiResponse(response, jsonValue => IssueConfigFromJSON(jsonValue));
  }

  /**
   * Returns the issue config for a repo
   */
  async repoGetIssueConfig(requestParameters, initOverrides) {
    const response = await this.repoGetIssueConfigRaw(requestParameters, initOverrides);
    return await response.value();
  }

  /**
   * Get available issue templates for a repository
   */
  async repoGetIssueTemplatesRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling repoGetIssueTemplates.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling repoGetIssueTemplates.');
    }
    const queryParameters = {};
    const headerParameters = {};
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/issue_templates`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))),
      method: 'GET',
      headers: headerParameters,
      query: queryParameters
    }, initOverrides);
    return new JSONApiResponse(response, jsonValue => jsonValue.map(IssueTemplateFromJSON));
  }

  /**
   * Get available issue templates for a repository
   */
  async repoGetIssueTemplates(requestParameters, initOverrides) {
    const response = await this.repoGetIssueTemplatesRaw(requestParameters, initOverrides);
    return await response.value();
  }

  /**
   * Get a repository\'s key by id
   */
  async repoGetKeyRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling repoGetKey.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling repoGetKey.');
    }
    if (requestParameters.id === null || requestParameters.id === undefined) {
      throw new RequiredError('id', 'Required parameter requestParameters.id was null or undefined when calling repoGetKey.');
    }
    const queryParameters = {};
    const headerParameters = {};
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/keys/{id}`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))).replace(`{${"id"}}`, encodeURIComponent(String(requestParameters.id))),
      method: 'GET',
      headers: headerParameters,
      query: queryParameters
    }, initOverrides);
    return new JSONApiResponse(response, jsonValue => DeployKeyFromJSON(jsonValue));
  }

  /**
   * Get a repository\'s key by id
   */
  async repoGetKey(requestParameters, initOverrides) {
    const response = await this.repoGetKeyRaw(requestParameters, initOverrides);
    return await response.value();
  }

  /**
   * Get languages and number of bytes of code written
   */
  async repoGetLanguagesRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling repoGetLanguages.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling repoGetLanguages.');
    }
    const queryParameters = {};
    const headerParameters = {};
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/languages`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))),
      method: 'GET',
      headers: headerParameters,
      query: queryParameters
    }, initOverrides);
    return new JSONApiResponse(response);
  }

  /**
   * Get languages and number of bytes of code written
   */
  async repoGetLanguages(requestParameters, initOverrides) {
    const response = await this.repoGetLanguagesRaw(requestParameters, initOverrides);
    return await response.value();
  }

  /**
   * Gets the most recent non-prerelease, non-draft release of a repository, sorted by created_at
   */
  async repoGetLatestReleaseRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling repoGetLatestRelease.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling repoGetLatestRelease.');
    }
    const queryParameters = {};
    const headerParameters = {};
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/releases/latest`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))),
      method: 'GET',
      headers: headerParameters,
      query: queryParameters
    }, initOverrides);
    return new JSONApiResponse(response, jsonValue => ReleaseFromJSON(jsonValue));
  }

  /**
   * Gets the most recent non-prerelease, non-draft release of a repository, sorted by created_at
   */
  async repoGetLatestRelease(requestParameters, initOverrides) {
    const response = await this.repoGetLatestReleaseRaw(requestParameters, initOverrides);
    return await response.value();
  }

  /**
   * Get a note corresponding to a single commit from a repository
   */
  async repoGetNoteRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling repoGetNote.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling repoGetNote.');
    }
    if (requestParameters.sha === null || requestParameters.sha === undefined) {
      throw new RequiredError('sha', 'Required parameter requestParameters.sha was null or undefined when calling repoGetNote.');
    }
    const queryParameters = {};
    const headerParameters = {};
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/git/notes/{sha}`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))).replace(`{${"sha"}}`, encodeURIComponent(String(requestParameters.sha))),
      method: 'GET',
      headers: headerParameters,
      query: queryParameters
    }, initOverrides);
    return new JSONApiResponse(response, jsonValue => NoteFromJSON(jsonValue));
  }

  /**
   * Get a note corresponding to a single commit from a repository
   */
  async repoGetNote(requestParameters, initOverrides) {
    const response = await this.repoGetNoteRaw(requestParameters, initOverrides);
    return await response.value();
  }

  /**
   * Get a pull request
   */
  async repoGetPullRequestRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling repoGetPullRequest.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling repoGetPullRequest.');
    }
    if (requestParameters.index === null || requestParameters.index === undefined) {
      throw new RequiredError('index', 'Required parameter requestParameters.index was null or undefined when calling repoGetPullRequest.');
    }
    const queryParameters = {};
    const headerParameters = {};
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/pulls/{index}`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))).replace(`{${"index"}}`, encodeURIComponent(String(requestParameters.index))),
      method: 'GET',
      headers: headerParameters,
      query: queryParameters
    }, initOverrides);
    return new JSONApiResponse(response, jsonValue => PullRequestFromJSON(jsonValue));
  }

  /**
   * Get a pull request
   */
  async repoGetPullRequest(requestParameters, initOverrides) {
    const response = await this.repoGetPullRequestRaw(requestParameters, initOverrides);
    return await response.value();
  }

  /**
   * Get commits for a pull request
   */
  async repoGetPullRequestCommitsRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling repoGetPullRequestCommits.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling repoGetPullRequestCommits.');
    }
    if (requestParameters.index === null || requestParameters.index === undefined) {
      throw new RequiredError('index', 'Required parameter requestParameters.index was null or undefined when calling repoGetPullRequestCommits.');
    }
    const queryParameters = {};
    if (requestParameters.page !== undefined) {
      queryParameters['page'] = requestParameters.page;
    }
    if (requestParameters.limit !== undefined) {
      queryParameters['limit'] = requestParameters.limit;
    }
    const headerParameters = {};
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/pulls/{index}/commits`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))).replace(`{${"index"}}`, encodeURIComponent(String(requestParameters.index))),
      method: 'GET',
      headers: headerParameters,
      query: queryParameters
    }, initOverrides);
    return new JSONApiResponse(response, jsonValue => jsonValue.map(CommitFromJSON));
  }

  /**
   * Get commits for a pull request
   */
  async repoGetPullRequestCommits(requestParameters, initOverrides) {
    const response = await this.repoGetPullRequestCommitsRaw(requestParameters, initOverrides);
    return await response.value();
  }

  /**
   * Get changed files for a pull request
   */
  async repoGetPullRequestFilesRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling repoGetPullRequestFiles.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling repoGetPullRequestFiles.');
    }
    if (requestParameters.index === null || requestParameters.index === undefined) {
      throw new RequiredError('index', 'Required parameter requestParameters.index was null or undefined when calling repoGetPullRequestFiles.');
    }
    const queryParameters = {};
    if (requestParameters.skipTo !== undefined) {
      queryParameters['skip-to'] = requestParameters.skipTo;
    }
    if (requestParameters.whitespace !== undefined) {
      queryParameters['whitespace'] = requestParameters.whitespace;
    }
    if (requestParameters.page !== undefined) {
      queryParameters['page'] = requestParameters.page;
    }
    if (requestParameters.limit !== undefined) {
      queryParameters['limit'] = requestParameters.limit;
    }
    const headerParameters = {};
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/pulls/{index}/files`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))).replace(`{${"index"}}`, encodeURIComponent(String(requestParameters.index))),
      method: 'GET',
      headers: headerParameters,
      query: queryParameters
    }, initOverrides);
    return new JSONApiResponse(response, jsonValue => jsonValue.map(ChangedFileFromJSON));
  }

  /**
   * Get changed files for a pull request
   */
  async repoGetPullRequestFiles(requestParameters, initOverrides) {
    const response = await this.repoGetPullRequestFilesRaw(requestParameters, initOverrides);
    return await response.value();
  }

  /**
   * Get a specific review for a pull request
   */
  async repoGetPullReviewRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling repoGetPullReview.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling repoGetPullReview.');
    }
    if (requestParameters.index === null || requestParameters.index === undefined) {
      throw new RequiredError('index', 'Required parameter requestParameters.index was null or undefined when calling repoGetPullReview.');
    }
    if (requestParameters.id === null || requestParameters.id === undefined) {
      throw new RequiredError('id', 'Required parameter requestParameters.id was null or undefined when calling repoGetPullReview.');
    }
    const queryParameters = {};
    const headerParameters = {};
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/pulls/{index}/reviews/{id}`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))).replace(`{${"index"}}`, encodeURIComponent(String(requestParameters.index))).replace(`{${"id"}}`, encodeURIComponent(String(requestParameters.id))),
      method: 'GET',
      headers: headerParameters,
      query: queryParameters
    }, initOverrides);
    return new JSONApiResponse(response, jsonValue => PullReviewFromJSON(jsonValue));
  }

  /**
   * Get a specific review for a pull request
   */
  async repoGetPullReview(requestParameters, initOverrides) {
    const response = await this.repoGetPullReviewRaw(requestParameters, initOverrides);
    return await response.value();
  }

  /**
   * Get a specific review for a pull request
   */
  async repoGetPullReviewCommentsRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling repoGetPullReviewComments.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling repoGetPullReviewComments.');
    }
    if (requestParameters.index === null || requestParameters.index === undefined) {
      throw new RequiredError('index', 'Required parameter requestParameters.index was null or undefined when calling repoGetPullReviewComments.');
    }
    if (requestParameters.id === null || requestParameters.id === undefined) {
      throw new RequiredError('id', 'Required parameter requestParameters.id was null or undefined when calling repoGetPullReviewComments.');
    }
    const queryParameters = {};
    const headerParameters = {};
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/pulls/{index}/reviews/{id}/comments`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))).replace(`{${"index"}}`, encodeURIComponent(String(requestParameters.index))).replace(`{${"id"}}`, encodeURIComponent(String(requestParameters.id))),
      method: 'GET',
      headers: headerParameters,
      query: queryParameters
    }, initOverrides);
    return new JSONApiResponse(response, jsonValue => jsonValue.map(PullReviewCommentFromJSON));
  }

  /**
   * Get a specific review for a pull request
   */
  async repoGetPullReviewComments(requestParameters, initOverrides) {
    const response = await this.repoGetPullReviewCommentsRaw(requestParameters, initOverrides);
    return await response.value();
  }

  /**
   * Get push mirror of the repository by remoteName
   */
  async repoGetPushMirrorByRemoteNameRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling repoGetPushMirrorByRemoteName.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling repoGetPushMirrorByRemoteName.');
    }
    if (requestParameters.name === null || requestParameters.name === undefined) {
      throw new RequiredError('name', 'Required parameter requestParameters.name was null or undefined when calling repoGetPushMirrorByRemoteName.');
    }
    const queryParameters = {};
    const headerParameters = {};
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/push_mirrors/{name}`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))).replace(`{${"name"}}`, encodeURIComponent(String(requestParameters.name))),
      method: 'GET',
      headers: headerParameters,
      query: queryParameters
    }, initOverrides);
    return new JSONApiResponse(response, jsonValue => PushMirrorFromJSON(jsonValue));
  }

  /**
   * Get push mirror of the repository by remoteName
   */
  async repoGetPushMirrorByRemoteName(requestParameters, initOverrides) {
    const response = await this.repoGetPushMirrorByRemoteNameRaw(requestParameters, initOverrides);
    return await response.value();
  }

  /**
   * Get a file from a repository
   */
  async repoGetRawFileRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling repoGetRawFile.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling repoGetRawFile.');
    }
    if (requestParameters.filepath === null || requestParameters.filepath === undefined) {
      throw new RequiredError('filepath', 'Required parameter requestParameters.filepath was null or undefined when calling repoGetRawFile.');
    }
    const queryParameters = {};
    if (requestParameters.ref !== undefined) {
      queryParameters['ref'] = requestParameters.ref;
    }
    const headerParameters = {};
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/raw/{filepath}`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))).replace(`{${"filepath"}}`, encodeURIComponent(String(requestParameters.filepath))),
      method: 'GET',
      headers: headerParameters,
      query: queryParameters
    }, initOverrides);
    return new VoidApiResponse(response);
  }

  /**
   * Get a file from a repository
   */
  async repoGetRawFile(requestParameters, initOverrides) {
    await this.repoGetRawFileRaw(requestParameters, initOverrides);
  }

  /**
   * Get a file or it\'s LFS object from a repository
   */
  async repoGetRawFileOrLFSRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling repoGetRawFileOrLFS.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling repoGetRawFileOrLFS.');
    }
    if (requestParameters.filepath === null || requestParameters.filepath === undefined) {
      throw new RequiredError('filepath', 'Required parameter requestParameters.filepath was null or undefined when calling repoGetRawFileOrLFS.');
    }
    const queryParameters = {};
    if (requestParameters.ref !== undefined) {
      queryParameters['ref'] = requestParameters.ref;
    }
    const headerParameters = {};
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/media/{filepath}`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))).replace(`{${"filepath"}}`, encodeURIComponent(String(requestParameters.filepath))),
      method: 'GET',
      headers: headerParameters,
      query: queryParameters
    }, initOverrides);
    return new VoidApiResponse(response);
  }

  /**
   * Get a file or it\'s LFS object from a repository
   */
  async repoGetRawFileOrLFS(requestParameters, initOverrides) {
    await this.repoGetRawFileOrLFSRaw(requestParameters, initOverrides);
  }

  /**
   * Get a release
   */
  async repoGetReleaseRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling repoGetRelease.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling repoGetRelease.');
    }
    if (requestParameters.id === null || requestParameters.id === undefined) {
      throw new RequiredError('id', 'Required parameter requestParameters.id was null or undefined when calling repoGetRelease.');
    }
    const queryParameters = {};
    const headerParameters = {};
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/releases/{id}`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))).replace(`{${"id"}}`, encodeURIComponent(String(requestParameters.id))),
      method: 'GET',
      headers: headerParameters,
      query: queryParameters
    }, initOverrides);
    return new JSONApiResponse(response, jsonValue => ReleaseFromJSON(jsonValue));
  }

  /**
   * Get a release
   */
  async repoGetRelease(requestParameters, initOverrides) {
    const response = await this.repoGetReleaseRaw(requestParameters, initOverrides);
    return await response.value();
  }

  /**
   * Get a release attachment
   */
  async repoGetReleaseAttachmentRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling repoGetReleaseAttachment.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling repoGetReleaseAttachment.');
    }
    if (requestParameters.id === null || requestParameters.id === undefined) {
      throw new RequiredError('id', 'Required parameter requestParameters.id was null or undefined when calling repoGetReleaseAttachment.');
    }
    if (requestParameters.attachmentId === null || requestParameters.attachmentId === undefined) {
      throw new RequiredError('attachmentId', 'Required parameter requestParameters.attachmentId was null or undefined when calling repoGetReleaseAttachment.');
    }
    const queryParameters = {};
    const headerParameters = {};
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/releases/{id}/assets/{attachment_id}`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))).replace(`{${"id"}}`, encodeURIComponent(String(requestParameters.id))).replace(`{${"attachment_id"}}`, encodeURIComponent(String(requestParameters.attachmentId))),
      method: 'GET',
      headers: headerParameters,
      query: queryParameters
    }, initOverrides);
    return new JSONApiResponse(response, jsonValue => AttachmentFromJSON(jsonValue));
  }

  /**
   * Get a release attachment
   */
  async repoGetReleaseAttachment(requestParameters, initOverrides) {
    const response = await this.repoGetReleaseAttachmentRaw(requestParameters, initOverrides);
    return await response.value();
  }

  /**
   * Get a release by tag name
   */
  async repoGetReleaseByTagRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling repoGetReleaseByTag.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling repoGetReleaseByTag.');
    }
    if (requestParameters.tag === null || requestParameters.tag === undefined) {
      throw new RequiredError('tag', 'Required parameter requestParameters.tag was null or undefined when calling repoGetReleaseByTag.');
    }
    const queryParameters = {};
    const headerParameters = {};
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/releases/tags/{tag}`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))).replace(`{${"tag"}}`, encodeURIComponent(String(requestParameters.tag))),
      method: 'GET',
      headers: headerParameters,
      query: queryParameters
    }, initOverrides);
    return new JSONApiResponse(response, jsonValue => ReleaseFromJSON(jsonValue));
  }

  /**
   * Get a release by tag name
   */
  async repoGetReleaseByTag(requestParameters, initOverrides) {
    const response = await this.repoGetReleaseByTagRaw(requestParameters, initOverrides);
    return await response.value();
  }

  /**
   * Get repository permissions for a user
   */
  async repoGetRepoPermissionsRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling repoGetRepoPermissions.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling repoGetRepoPermissions.');
    }
    if (requestParameters.collaborator === null || requestParameters.collaborator === undefined) {
      throw new RequiredError('collaborator', 'Required parameter requestParameters.collaborator was null or undefined when calling repoGetRepoPermissions.');
    }
    const queryParameters = {};
    const headerParameters = {};
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/collaborators/{collaborator}/permission`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))).replace(`{${"collaborator"}}`, encodeURIComponent(String(requestParameters.collaborator))),
      method: 'GET',
      headers: headerParameters,
      query: queryParameters
    }, initOverrides);
    return new JSONApiResponse(response, jsonValue => RepoCollaboratorPermissionFromJSON(jsonValue));
  }

  /**
   * Get repository permissions for a user
   */
  async repoGetRepoPermissions(requestParameters, initOverrides) {
    const response = await this.repoGetRepoPermissionsRaw(requestParameters, initOverrides);
    return await response.value();
  }

  /**
   * Return all users that can be requested to review in this repo
   */
  async repoGetReviewersRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling repoGetReviewers.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling repoGetReviewers.');
    }
    const queryParameters = {};
    const headerParameters = {};
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/reviewers`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))),
      method: 'GET',
      headers: headerParameters,
      query: queryParameters
    }, initOverrides);
    return new JSONApiResponse(response, jsonValue => jsonValue.map(UserFromJSON));
  }

  /**
   * Return all users that can be requested to review in this repo
   */
  async repoGetReviewers(requestParameters, initOverrides) {
    const response = await this.repoGetReviewersRaw(requestParameters, initOverrides);
    return await response.value();
  }

  /**
   * Get a single commit from a repository
   */
  async repoGetSingleCommitRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling repoGetSingleCommit.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling repoGetSingleCommit.');
    }
    if (requestParameters.sha === null || requestParameters.sha === undefined) {
      throw new RequiredError('sha', 'Required parameter requestParameters.sha was null or undefined when calling repoGetSingleCommit.');
    }
    const queryParameters = {};
    if (requestParameters.stat !== undefined) {
      queryParameters['stat'] = requestParameters.stat;
    }
    if (requestParameters.verification !== undefined) {
      queryParameters['verification'] = requestParameters.verification;
    }
    if (requestParameters.files !== undefined) {
      queryParameters['files'] = requestParameters.files;
    }
    const headerParameters = {};
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/git/commits/{sha}`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))).replace(`{${"sha"}}`, encodeURIComponent(String(requestParameters.sha))),
      method: 'GET',
      headers: headerParameters,
      query: queryParameters
    }, initOverrides);
    return new JSONApiResponse(response, jsonValue => CommitFromJSON(jsonValue));
  }

  /**
   * Get a single commit from a repository
   */
  async repoGetSingleCommit(requestParameters, initOverrides) {
    const response = await this.repoGetSingleCommitRaw(requestParameters, initOverrides);
    return await response.value();
  }

  /**
   * Get the tag of a repository by tag name
   */
  async repoGetTagRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling repoGetTag.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling repoGetTag.');
    }
    if (requestParameters.tag === null || requestParameters.tag === undefined) {
      throw new RequiredError('tag', 'Required parameter requestParameters.tag was null or undefined when calling repoGetTag.');
    }
    const queryParameters = {};
    const headerParameters = {};
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/tags/{tag}`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))).replace(`{${"tag"}}`, encodeURIComponent(String(requestParameters.tag))),
      method: 'GET',
      headers: headerParameters,
      query: queryParameters
    }, initOverrides);
    return new JSONApiResponse(response, jsonValue => TagFromJSON(jsonValue));
  }

  /**
   * Get the tag of a repository by tag name
   */
  async repoGetTag(requestParameters, initOverrides) {
    const response = await this.repoGetTagRaw(requestParameters, initOverrides);
    return await response.value();
  }

  /**
   * Get a wiki page
   */
  async repoGetWikiPageRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling repoGetWikiPage.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling repoGetWikiPage.');
    }
    if (requestParameters.pageName === null || requestParameters.pageName === undefined) {
      throw new RequiredError('pageName', 'Required parameter requestParameters.pageName was null or undefined when calling repoGetWikiPage.');
    }
    const queryParameters = {};
    const headerParameters = {};
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/wiki/page/{pageName}`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))).replace(`{${"pageName"}}`, encodeURIComponent(String(requestParameters.pageName))),
      method: 'GET',
      headers: headerParameters,
      query: queryParameters
    }, initOverrides);
    return new JSONApiResponse(response, jsonValue => WikiPageFromJSON(jsonValue));
  }

  /**
   * Get a wiki page
   */
  async repoGetWikiPage(requestParameters, initOverrides) {
    const response = await this.repoGetWikiPageRaw(requestParameters, initOverrides);
    return await response.value();
  }

  /**
   * Get revisions of a wiki page
   */
  async repoGetWikiPageRevisionsRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling repoGetWikiPageRevisions.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling repoGetWikiPageRevisions.');
    }
    if (requestParameters.pageName === null || requestParameters.pageName === undefined) {
      throw new RequiredError('pageName', 'Required parameter requestParameters.pageName was null or undefined when calling repoGetWikiPageRevisions.');
    }
    const queryParameters = {};
    if (requestParameters.page !== undefined) {
      queryParameters['page'] = requestParameters.page;
    }
    const headerParameters = {};
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/wiki/revisions/{pageName}`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))).replace(`{${"pageName"}}`, encodeURIComponent(String(requestParameters.pageName))),
      method: 'GET',
      headers: headerParameters,
      query: queryParameters
    }, initOverrides);
    return new JSONApiResponse(response, jsonValue => WikiCommitListFromJSON(jsonValue));
  }

  /**
   * Get revisions of a wiki page
   */
  async repoGetWikiPageRevisions(requestParameters, initOverrides) {
    const response = await this.repoGetWikiPageRevisionsRaw(requestParameters, initOverrides);
    return await response.value();
  }

  /**
   * Get all wiki pages
   */
  async repoGetWikiPagesRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling repoGetWikiPages.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling repoGetWikiPages.');
    }
    const queryParameters = {};
    if (requestParameters.page !== undefined) {
      queryParameters['page'] = requestParameters.page;
    }
    if (requestParameters.limit !== undefined) {
      queryParameters['limit'] = requestParameters.limit;
    }
    const headerParameters = {};
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/wiki/pages`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))),
      method: 'GET',
      headers: headerParameters,
      query: queryParameters
    }, initOverrides);
    return new JSONApiResponse(response, jsonValue => jsonValue.map(WikiPageMetaDataFromJSON));
  }

  /**
   * Get all wiki pages
   */
  async repoGetWikiPages(requestParameters, initOverrides) {
    const response = await this.repoGetWikiPagesRaw(requestParameters, initOverrides);
    return await response.value();
  }

  /**
   * List a repository\'s activity feeds
   */
  async repoListActivityFeedsRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling repoListActivityFeeds.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling repoListActivityFeeds.');
    }
    const queryParameters = {};
    if (requestParameters.date !== undefined) {
      queryParameters['date'] = requestParameters.date.toISOString().substring(0, 10);
    }
    if (requestParameters.page !== undefined) {
      queryParameters['page'] = requestParameters.page;
    }
    if (requestParameters.limit !== undefined) {
      queryParameters['limit'] = requestParameters.limit;
    }
    const headerParameters = {};
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/activities/feeds`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))),
      method: 'GET',
      headers: headerParameters,
      query: queryParameters
    }, initOverrides);
    return new JSONApiResponse(response, jsonValue => jsonValue.map(ActivityFromJSON));
  }

  /**
   * List a repository\'s activity feeds
   */
  async repoListActivityFeeds(requestParameters, initOverrides) {
    const response = await this.repoListActivityFeedsRaw(requestParameters, initOverrides);
    return await response.value();
  }

  /**
   * Get specified ref or filtered repository\'s refs
   */
  async repoListAllGitRefsRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling repoListAllGitRefs.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling repoListAllGitRefs.');
    }
    const queryParameters = {};
    const headerParameters = {};
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/git/refs`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))),
      method: 'GET',
      headers: headerParameters,
      query: queryParameters
    }, initOverrides);
    return new JSONApiResponse(response, jsonValue => jsonValue.map(ReferenceFromJSON));
  }

  /**
   * Get specified ref or filtered repository\'s refs
   */
  async repoListAllGitRefs(requestParameters, initOverrides) {
    const response = await this.repoListAllGitRefsRaw(requestParameters, initOverrides);
    return await response.value();
  }

  /**
   * List branch protections for a repository
   */
  async repoListBranchProtectionRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling repoListBranchProtection.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling repoListBranchProtection.');
    }
    const queryParameters = {};
    const headerParameters = {};
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/branch_protections`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))),
      method: 'GET',
      headers: headerParameters,
      query: queryParameters
    }, initOverrides);
    return new JSONApiResponse(response, jsonValue => jsonValue.map(BranchProtectionFromJSON));
  }

  /**
   * List branch protections for a repository
   */
  async repoListBranchProtection(requestParameters, initOverrides) {
    const response = await this.repoListBranchProtectionRaw(requestParameters, initOverrides);
    return await response.value();
  }

  /**
   * List a repository\'s branches
   */
  async repoListBranchesRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling repoListBranches.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling repoListBranches.');
    }
    const queryParameters = {};
    if (requestParameters.page !== undefined) {
      queryParameters['page'] = requestParameters.page;
    }
    if (requestParameters.limit !== undefined) {
      queryParameters['limit'] = requestParameters.limit;
    }
    const headerParameters = {};
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/branches`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))),
      method: 'GET',
      headers: headerParameters,
      query: queryParameters
    }, initOverrides);
    return new JSONApiResponse(response, jsonValue => jsonValue.map(BranchFromJSON));
  }

  /**
   * List a repository\'s branches
   */
  async repoListBranches(requestParameters, initOverrides) {
    const response = await this.repoListBranchesRaw(requestParameters, initOverrides);
    return await response.value();
  }

  /**
   * List a repository\'s collaborators
   */
  async repoListCollaboratorsRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling repoListCollaborators.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling repoListCollaborators.');
    }
    const queryParameters = {};
    if (requestParameters.page !== undefined) {
      queryParameters['page'] = requestParameters.page;
    }
    if (requestParameters.limit !== undefined) {
      queryParameters['limit'] = requestParameters.limit;
    }
    const headerParameters = {};
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/collaborators`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))),
      method: 'GET',
      headers: headerParameters,
      query: queryParameters
    }, initOverrides);
    return new JSONApiResponse(response, jsonValue => jsonValue.map(UserFromJSON));
  }

  /**
   * List a repository\'s collaborators
   */
  async repoListCollaborators(requestParameters, initOverrides) {
    const response = await this.repoListCollaboratorsRaw(requestParameters, initOverrides);
    return await response.value();
  }

  /**
   * List the Git hooks in a repository
   */
  async repoListGitHooksRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling repoListGitHooks.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling repoListGitHooks.');
    }
    const queryParameters = {};
    const headerParameters = {};
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/hooks/git`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))),
      method: 'GET',
      headers: headerParameters,
      query: queryParameters
    }, initOverrides);
    return new JSONApiResponse(response, jsonValue => jsonValue.map(GitHookFromJSON));
  }

  /**
   * List the Git hooks in a repository
   */
  async repoListGitHooks(requestParameters, initOverrides) {
    const response = await this.repoListGitHooksRaw(requestParameters, initOverrides);
    return await response.value();
  }

  /**
   * Get specified ref or filtered repository\'s refs
   */
  async repoListGitRefsRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling repoListGitRefs.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling repoListGitRefs.');
    }
    if (requestParameters.ref === null || requestParameters.ref === undefined) {
      throw new RequiredError('ref', 'Required parameter requestParameters.ref was null or undefined when calling repoListGitRefs.');
    }
    const queryParameters = {};
    const headerParameters = {};
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/git/refs/{ref}`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))).replace(`{${"ref"}}`, encodeURIComponent(String(requestParameters.ref))),
      method: 'GET',
      headers: headerParameters,
      query: queryParameters
    }, initOverrides);
    return new JSONApiResponse(response, jsonValue => jsonValue.map(ReferenceFromJSON));
  }

  /**
   * Get specified ref or filtered repository\'s refs
   */
  async repoListGitRefs(requestParameters, initOverrides) {
    const response = await this.repoListGitRefsRaw(requestParameters, initOverrides);
    return await response.value();
  }

  /**
   * List the hooks in a repository
   */
  async repoListHooksRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling repoListHooks.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling repoListHooks.');
    }
    const queryParameters = {};
    if (requestParameters.page !== undefined) {
      queryParameters['page'] = requestParameters.page;
    }
    if (requestParameters.limit !== undefined) {
      queryParameters['limit'] = requestParameters.limit;
    }
    const headerParameters = {};
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/hooks`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))),
      method: 'GET',
      headers: headerParameters,
      query: queryParameters
    }, initOverrides);
    return new JSONApiResponse(response, jsonValue => jsonValue.map(HookFromJSON));
  }

  /**
   * List the hooks in a repository
   */
  async repoListHooks(requestParameters, initOverrides) {
    const response = await this.repoListHooksRaw(requestParameters, initOverrides);
    return await response.value();
  }

  /**
   * List a repository\'s keys
   */
  async repoListKeysRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling repoListKeys.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling repoListKeys.');
    }
    const queryParameters = {};
    if (requestParameters.keyId !== undefined) {
      queryParameters['key_id'] = requestParameters.keyId;
    }
    if (requestParameters.fingerprint !== undefined) {
      queryParameters['fingerprint'] = requestParameters.fingerprint;
    }
    if (requestParameters.page !== undefined) {
      queryParameters['page'] = requestParameters.page;
    }
    if (requestParameters.limit !== undefined) {
      queryParameters['limit'] = requestParameters.limit;
    }
    const headerParameters = {};
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/keys`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))),
      method: 'GET',
      headers: headerParameters,
      query: queryParameters
    }, initOverrides);
    return new JSONApiResponse(response, jsonValue => jsonValue.map(DeployKeyFromJSON));
  }

  /**
   * List a repository\'s keys
   */
  async repoListKeys(requestParameters, initOverrides) {
    const response = await this.repoListKeysRaw(requestParameters, initOverrides);
    return await response.value();
  }

  /**
   * List a repo\'s pinned issues
   */
  async repoListPinnedIssuesRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling repoListPinnedIssues.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling repoListPinnedIssues.');
    }
    const queryParameters = {};
    const headerParameters = {};
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/issues/pinned`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))),
      method: 'GET',
      headers: headerParameters,
      query: queryParameters
    }, initOverrides);
    return new JSONApiResponse(response, jsonValue => jsonValue.map(IssueFromJSON));
  }

  /**
   * List a repo\'s pinned issues
   */
  async repoListPinnedIssues(requestParameters, initOverrides) {
    const response = await this.repoListPinnedIssuesRaw(requestParameters, initOverrides);
    return await response.value();
  }

  /**
   * List a repo\'s pinned pull requests
   */
  async repoListPinnedPullRequestsRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling repoListPinnedPullRequests.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling repoListPinnedPullRequests.');
    }
    const queryParameters = {};
    const headerParameters = {};
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/pulls/pinned`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))),
      method: 'GET',
      headers: headerParameters,
      query: queryParameters
    }, initOverrides);
    return new JSONApiResponse(response, jsonValue => jsonValue.map(PullRequestFromJSON));
  }

  /**
   * List a repo\'s pinned pull requests
   */
  async repoListPinnedPullRequests(requestParameters, initOverrides) {
    const response = await this.repoListPinnedPullRequestsRaw(requestParameters, initOverrides);
    return await response.value();
  }

  /**
   * List a repo\'s pull requests
   */
  async repoListPullRequestsRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling repoListPullRequests.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling repoListPullRequests.');
    }
    const queryParameters = {};
    if (requestParameters.state !== undefined) {
      queryParameters['state'] = requestParameters.state;
    }
    if (requestParameters.sort !== undefined) {
      queryParameters['sort'] = requestParameters.sort;
    }
    if (requestParameters.milestone !== undefined) {
      queryParameters['milestone'] = requestParameters.milestone;
    }
    if (requestParameters.labels) {
      queryParameters['labels'] = requestParameters.labels;
    }
    if (requestParameters.page !== undefined) {
      queryParameters['page'] = requestParameters.page;
    }
    if (requestParameters.limit !== undefined) {
      queryParameters['limit'] = requestParameters.limit;
    }
    const headerParameters = {};
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/pulls`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))),
      method: 'GET',
      headers: headerParameters,
      query: queryParameters
    }, initOverrides);
    return new JSONApiResponse(response, jsonValue => jsonValue.map(PullRequestFromJSON));
  }

  /**
   * List a repo\'s pull requests
   */
  async repoListPullRequests(requestParameters, initOverrides) {
    const response = await this.repoListPullRequestsRaw(requestParameters, initOverrides);
    return await response.value();
  }

  /**
   * List all reviews for a pull request
   */
  async repoListPullReviewsRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling repoListPullReviews.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling repoListPullReviews.');
    }
    if (requestParameters.index === null || requestParameters.index === undefined) {
      throw new RequiredError('index', 'Required parameter requestParameters.index was null or undefined when calling repoListPullReviews.');
    }
    const queryParameters = {};
    if (requestParameters.page !== undefined) {
      queryParameters['page'] = requestParameters.page;
    }
    if (requestParameters.limit !== undefined) {
      queryParameters['limit'] = requestParameters.limit;
    }
    const headerParameters = {};
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/pulls/{index}/reviews`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))).replace(`{${"index"}}`, encodeURIComponent(String(requestParameters.index))),
      method: 'GET',
      headers: headerParameters,
      query: queryParameters
    }, initOverrides);
    return new JSONApiResponse(response, jsonValue => jsonValue.map(PullReviewFromJSON));
  }

  /**
   * List all reviews for a pull request
   */
  async repoListPullReviews(requestParameters, initOverrides) {
    const response = await this.repoListPullReviewsRaw(requestParameters, initOverrides);
    return await response.value();
  }

  /**
   * Get all push mirrors of the repository
   */
  async repoListPushMirrorsRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling repoListPushMirrors.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling repoListPushMirrors.');
    }
    const queryParameters = {};
    if (requestParameters.page !== undefined) {
      queryParameters['page'] = requestParameters.page;
    }
    if (requestParameters.limit !== undefined) {
      queryParameters['limit'] = requestParameters.limit;
    }
    const headerParameters = {};
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/push_mirrors`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))),
      method: 'GET',
      headers: headerParameters,
      query: queryParameters
    }, initOverrides);
    return new JSONApiResponse(response, jsonValue => jsonValue.map(PushMirrorFromJSON));
  }

  /**
   * Get all push mirrors of the repository
   */
  async repoListPushMirrors(requestParameters, initOverrides) {
    const response = await this.repoListPushMirrorsRaw(requestParameters, initOverrides);
    return await response.value();
  }

  /**
   * List release\'s attachments
   */
  async repoListReleaseAttachmentsRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling repoListReleaseAttachments.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling repoListReleaseAttachments.');
    }
    if (requestParameters.id === null || requestParameters.id === undefined) {
      throw new RequiredError('id', 'Required parameter requestParameters.id was null or undefined when calling repoListReleaseAttachments.');
    }
    const queryParameters = {};
    const headerParameters = {};
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/releases/{id}/assets`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))).replace(`{${"id"}}`, encodeURIComponent(String(requestParameters.id))),
      method: 'GET',
      headers: headerParameters,
      query: queryParameters
    }, initOverrides);
    return new JSONApiResponse(response, jsonValue => jsonValue.map(AttachmentFromJSON));
  }

  /**
   * List release\'s attachments
   */
  async repoListReleaseAttachments(requestParameters, initOverrides) {
    const response = await this.repoListReleaseAttachmentsRaw(requestParameters, initOverrides);
    return await response.value();
  }

  /**
   * List a repo\'s releases
   */
  async repoListReleasesRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling repoListReleases.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling repoListReleases.');
    }
    const queryParameters = {};
    if (requestParameters.draft !== undefined) {
      queryParameters['draft'] = requestParameters.draft;
    }
    if (requestParameters.preRelease !== undefined) {
      queryParameters['pre-release'] = requestParameters.preRelease;
    }
    if (requestParameters.perPage !== undefined) {
      queryParameters['per_page'] = requestParameters.perPage;
    }
    if (requestParameters.page !== undefined) {
      queryParameters['page'] = requestParameters.page;
    }
    if (requestParameters.limit !== undefined) {
      queryParameters['limit'] = requestParameters.limit;
    }
    const headerParameters = {};
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/releases`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))),
      method: 'GET',
      headers: headerParameters,
      query: queryParameters
    }, initOverrides);
    return new JSONApiResponse(response, jsonValue => jsonValue.map(ReleaseFromJSON));
  }

  /**
   * List a repo\'s releases
   */
  async repoListReleases(requestParameters, initOverrides) {
    const response = await this.repoListReleasesRaw(requestParameters, initOverrides);
    return await response.value();
  }

  /**
   * List a repo\'s stargazers
   */
  async repoListStargazersRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling repoListStargazers.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling repoListStargazers.');
    }
    const queryParameters = {};
    if (requestParameters.page !== undefined) {
      queryParameters['page'] = requestParameters.page;
    }
    if (requestParameters.limit !== undefined) {
      queryParameters['limit'] = requestParameters.limit;
    }
    const headerParameters = {};
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/stargazers`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))),
      method: 'GET',
      headers: headerParameters,
      query: queryParameters
    }, initOverrides);
    return new JSONApiResponse(response, jsonValue => jsonValue.map(UserFromJSON));
  }

  /**
   * List a repo\'s stargazers
   */
  async repoListStargazers(requestParameters, initOverrides) {
    const response = await this.repoListStargazersRaw(requestParameters, initOverrides);
    return await response.value();
  }

  /**
   * Get a commit\'s statuses
   */
  async repoListStatusesRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling repoListStatuses.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling repoListStatuses.');
    }
    if (requestParameters.sha === null || requestParameters.sha === undefined) {
      throw new RequiredError('sha', 'Required parameter requestParameters.sha was null or undefined when calling repoListStatuses.');
    }
    const queryParameters = {};
    if (requestParameters.sort !== undefined) {
      queryParameters['sort'] = requestParameters.sort;
    }
    if (requestParameters.state !== undefined) {
      queryParameters['state'] = requestParameters.state;
    }
    if (requestParameters.page !== undefined) {
      queryParameters['page'] = requestParameters.page;
    }
    if (requestParameters.limit !== undefined) {
      queryParameters['limit'] = requestParameters.limit;
    }
    const headerParameters = {};
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/statuses/{sha}`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))).replace(`{${"sha"}}`, encodeURIComponent(String(requestParameters.sha))),
      method: 'GET',
      headers: headerParameters,
      query: queryParameters
    }, initOverrides);
    return new JSONApiResponse(response, jsonValue => jsonValue.map(CommitStatusFromJSON));
  }

  /**
   * Get a commit\'s statuses
   */
  async repoListStatuses(requestParameters, initOverrides) {
    const response = await this.repoListStatusesRaw(requestParameters, initOverrides);
    return await response.value();
  }

  /**
   * Get a commit\'s statuses, by branch/tag/commit reference
   */
  async repoListStatusesByRefRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling repoListStatusesByRef.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling repoListStatusesByRef.');
    }
    if (requestParameters.ref === null || requestParameters.ref === undefined) {
      throw new RequiredError('ref', 'Required parameter requestParameters.ref was null or undefined when calling repoListStatusesByRef.');
    }
    const queryParameters = {};
    if (requestParameters.sort !== undefined) {
      queryParameters['sort'] = requestParameters.sort;
    }
    if (requestParameters.state !== undefined) {
      queryParameters['state'] = requestParameters.state;
    }
    if (requestParameters.page !== undefined) {
      queryParameters['page'] = requestParameters.page;
    }
    if (requestParameters.limit !== undefined) {
      queryParameters['limit'] = requestParameters.limit;
    }
    const headerParameters = {};
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/commits/{ref}/statuses`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))).replace(`{${"ref"}}`, encodeURIComponent(String(requestParameters.ref))),
      method: 'GET',
      headers: headerParameters,
      query: queryParameters
    }, initOverrides);
    return new JSONApiResponse(response, jsonValue => jsonValue.map(CommitStatusFromJSON));
  }

  /**
   * Get a commit\'s statuses, by branch/tag/commit reference
   */
  async repoListStatusesByRef(requestParameters, initOverrides) {
    const response = await this.repoListStatusesByRefRaw(requestParameters, initOverrides);
    return await response.value();
  }

  /**
   * List a repo\'s watchers
   */
  async repoListSubscribersRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling repoListSubscribers.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling repoListSubscribers.');
    }
    const queryParameters = {};
    if (requestParameters.page !== undefined) {
      queryParameters['page'] = requestParameters.page;
    }
    if (requestParameters.limit !== undefined) {
      queryParameters['limit'] = requestParameters.limit;
    }
    const headerParameters = {};
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/subscribers`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))),
      method: 'GET',
      headers: headerParameters,
      query: queryParameters
    }, initOverrides);
    return new JSONApiResponse(response, jsonValue => jsonValue.map(UserFromJSON));
  }

  /**
   * List a repo\'s watchers
   */
  async repoListSubscribers(requestParameters, initOverrides) {
    const response = await this.repoListSubscribersRaw(requestParameters, initOverrides);
    return await response.value();
  }

  /**
   * List a repository\'s tags
   */
  async repoListTagsRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling repoListTags.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling repoListTags.');
    }
    const queryParameters = {};
    if (requestParameters.page !== undefined) {
      queryParameters['page'] = requestParameters.page;
    }
    if (requestParameters.limit !== undefined) {
      queryParameters['limit'] = requestParameters.limit;
    }
    const headerParameters = {};
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/tags`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))),
      method: 'GET',
      headers: headerParameters,
      query: queryParameters
    }, initOverrides);
    return new JSONApiResponse(response, jsonValue => jsonValue.map(TagFromJSON));
  }

  /**
   * List a repository\'s tags
   */
  async repoListTags(requestParameters, initOverrides) {
    const response = await this.repoListTagsRaw(requestParameters, initOverrides);
    return await response.value();
  }

  /**
   * List a repository\'s teams
   */
  async repoListTeamsRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling repoListTeams.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling repoListTeams.');
    }
    const queryParameters = {};
    const headerParameters = {};
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/teams`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))),
      method: 'GET',
      headers: headerParameters,
      query: queryParameters
    }, initOverrides);
    return new JSONApiResponse(response, jsonValue => jsonValue.map(TeamFromJSON));
  }

  /**
   * List a repository\'s teams
   */
  async repoListTeams(requestParameters, initOverrides) {
    const response = await this.repoListTeamsRaw(requestParameters, initOverrides);
    return await response.value();
  }

  /**
   * Get list of topics that a repository has
   */
  async repoListTopicsRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling repoListTopics.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling repoListTopics.');
    }
    const queryParameters = {};
    if (requestParameters.page !== undefined) {
      queryParameters['page'] = requestParameters.page;
    }
    if (requestParameters.limit !== undefined) {
      queryParameters['limit'] = requestParameters.limit;
    }
    const headerParameters = {};
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/topics`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))),
      method: 'GET',
      headers: headerParameters,
      query: queryParameters
    }, initOverrides);
    return new JSONApiResponse(response, jsonValue => TopicNameFromJSON(jsonValue));
  }

  /**
   * Get list of topics that a repository has
   */
  async repoListTopics(requestParameters, initOverrides) {
    const response = await this.repoListTopicsRaw(requestParameters, initOverrides);
    return await response.value();
  }

  /**
   * Merge a pull request
   */
  async repoMergePullRequestRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling repoMergePullRequest.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling repoMergePullRequest.');
    }
    if (requestParameters.index === null || requestParameters.index === undefined) {
      throw new RequiredError('index', 'Required parameter requestParameters.index was null or undefined when calling repoMergePullRequest.');
    }
    const queryParameters = {};
    const headerParameters = {};
    headerParameters['Content-Type'] = 'application/json';
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/pulls/{index}/merge`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))).replace(`{${"index"}}`, encodeURIComponent(String(requestParameters.index))),
      method: 'POST',
      headers: headerParameters,
      query: queryParameters,
      body: MergePullRequestOptionToJSON(requestParameters.body)
    }, initOverrides);
    return new VoidApiResponse(response);
  }

  /**
   * Merge a pull request
   */
  async repoMergePullRequest(requestParameters, initOverrides) {
    await this.repoMergePullRequestRaw(requestParameters, initOverrides);
  }

  /**
   * Migrate a remote git repository
   */
  async repoMigrateRaw(requestParameters, initOverrides) {
    const queryParameters = {};
    const headerParameters = {};
    headerParameters['Content-Type'] = 'application/json';
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/migrate`,
      method: 'POST',
      headers: headerParameters,
      query: queryParameters,
      body: MigrateRepoOptionsToJSON(requestParameters.body)
    }, initOverrides);
    return new JSONApiResponse(response, jsonValue => RepositoryFromJSON(jsonValue));
  }

  /**
   * Migrate a remote git repository
   */
  async repoMigrate(requestParameters = {}, initOverrides) {
    const response = await this.repoMigrateRaw(requestParameters, initOverrides);
    return await response.value();
  }

  /**
   * Sync a mirrored repository
   */
  async repoMirrorSyncRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling repoMirrorSync.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling repoMirrorSync.');
    }
    const queryParameters = {};
    const headerParameters = {};
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/mirror-sync`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))),
      method: 'POST',
      headers: headerParameters,
      query: queryParameters
    }, initOverrides);
    return new VoidApiResponse(response);
  }

  /**
   * Sync a mirrored repository
   */
  async repoMirrorSync(requestParameters, initOverrides) {
    await this.repoMirrorSyncRaw(requestParameters, initOverrides);
  }

  /**
   * Returns if new Issue Pins are allowed
   */
  async repoNewPinAllowedRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling repoNewPinAllowed.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling repoNewPinAllowed.');
    }
    const queryParameters = {};
    const headerParameters = {};
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/new_pin_allowed`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))),
      method: 'GET',
      headers: headerParameters,
      query: queryParameters
    }, initOverrides);
    return new JSONApiResponse(response, jsonValue => NewIssuePinsAllowedFromJSON(jsonValue));
  }

  /**
   * Returns if new Issue Pins are allowed
   */
  async repoNewPinAllowed(requestParameters, initOverrides) {
    const response = await this.repoNewPinAllowedRaw(requestParameters, initOverrides);
    return await response.value();
  }

  /**
   * Check if a pull request has been merged
   */
  async repoPullRequestIsMergedRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling repoPullRequestIsMerged.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling repoPullRequestIsMerged.');
    }
    if (requestParameters.index === null || requestParameters.index === undefined) {
      throw new RequiredError('index', 'Required parameter requestParameters.index was null or undefined when calling repoPullRequestIsMerged.');
    }
    const queryParameters = {};
    const headerParameters = {};
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/pulls/{index}/merge`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))).replace(`{${"index"}}`, encodeURIComponent(String(requestParameters.index))),
      method: 'GET',
      headers: headerParameters,
      query: queryParameters
    }, initOverrides);
    return new VoidApiResponse(response);
  }

  /**
   * Check if a pull request has been merged
   */
  async repoPullRequestIsMerged(requestParameters, initOverrides) {
    await this.repoPullRequestIsMergedRaw(requestParameters, initOverrides);
  }

  /**
   * Sync all push mirrored repository
   */
  async repoPushMirrorSyncRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling repoPushMirrorSync.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling repoPushMirrorSync.');
    }
    const queryParameters = {};
    const headerParameters = {};
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/push_mirrors-sync`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))),
      method: 'POST',
      headers: headerParameters,
      query: queryParameters
    }, initOverrides);
    return new VoidApiResponse(response);
  }

  /**
   * Sync all push mirrored repository
   */
  async repoPushMirrorSync(requestParameters, initOverrides) {
    await this.repoPushMirrorSyncRaw(requestParameters, initOverrides);
  }

  /**
   * Search for repositories
   */
  async repoSearchRaw(requestParameters, initOverrides) {
    const queryParameters = {};
    if (requestParameters.q !== undefined) {
      queryParameters['q'] = requestParameters.q;
    }
    if (requestParameters.topic !== undefined) {
      queryParameters['topic'] = requestParameters.topic;
    }
    if (requestParameters.includeDesc !== undefined) {
      queryParameters['includeDesc'] = requestParameters.includeDesc;
    }
    if (requestParameters.uid !== undefined) {
      queryParameters['uid'] = requestParameters.uid;
    }
    if (requestParameters.priorityOwnerId !== undefined) {
      queryParameters['priority_owner_id'] = requestParameters.priorityOwnerId;
    }
    if (requestParameters.teamId !== undefined) {
      queryParameters['team_id'] = requestParameters.teamId;
    }
    if (requestParameters.starredBy !== undefined) {
      queryParameters['starredBy'] = requestParameters.starredBy;
    }
    if (requestParameters._private !== undefined) {
      queryParameters['private'] = requestParameters._private;
    }
    if (requestParameters.isPrivate !== undefined) {
      queryParameters['is_private'] = requestParameters.isPrivate;
    }
    if (requestParameters.template !== undefined) {
      queryParameters['template'] = requestParameters.template;
    }
    if (requestParameters.archived !== undefined) {
      queryParameters['archived'] = requestParameters.archived;
    }
    if (requestParameters.mode !== undefined) {
      queryParameters['mode'] = requestParameters.mode;
    }
    if (requestParameters.exclusive !== undefined) {
      queryParameters['exclusive'] = requestParameters.exclusive;
    }
    if (requestParameters.sort !== undefined) {
      queryParameters['sort'] = requestParameters.sort;
    }
    if (requestParameters.order !== undefined) {
      queryParameters['order'] = requestParameters.order;
    }
    if (requestParameters.page !== undefined) {
      queryParameters['page'] = requestParameters.page;
    }
    if (requestParameters.limit !== undefined) {
      queryParameters['limit'] = requestParameters.limit;
    }
    const headerParameters = {};
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/search`,
      method: 'GET',
      headers: headerParameters,
      query: queryParameters
    }, initOverrides);
    return new JSONApiResponse(response, jsonValue => SearchResultsFromJSON(jsonValue));
  }

  /**
   * Search for repositories
   */
  async repoSearch(requestParameters = {}, initOverrides) {
    const response = await this.repoSearchRaw(requestParameters, initOverrides);
    return await response.value();
  }

  /**
   * Get signing-key.gpg for given repository
   */
  async repoSigningKeyRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling repoSigningKey.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling repoSigningKey.');
    }
    const queryParameters = {};
    const headerParameters = {};
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/signing-key.gpg`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))),
      method: 'GET',
      headers: headerParameters,
      query: queryParameters
    }, initOverrides);
    if (this.isJsonMime(response.headers.get('content-type'))) {
      return new JSONApiResponse(response);
    } else {
      return new TextApiResponse(response);
    }
  }

  /**
   * Get signing-key.gpg for given repository
   */
  async repoSigningKey(requestParameters, initOverrides) {
    const response = await this.repoSigningKeyRaw(requestParameters, initOverrides);
    return await response.value();
  }

  /**
   * Submit a pending review to an pull request
   */
  async repoSubmitPullReviewRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling repoSubmitPullReview.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling repoSubmitPullReview.');
    }
    if (requestParameters.index === null || requestParameters.index === undefined) {
      throw new RequiredError('index', 'Required parameter requestParameters.index was null or undefined when calling repoSubmitPullReview.');
    }
    if (requestParameters.id === null || requestParameters.id === undefined) {
      throw new RequiredError('id', 'Required parameter requestParameters.id was null or undefined when calling repoSubmitPullReview.');
    }
    if (requestParameters.body === null || requestParameters.body === undefined) {
      throw new RequiredError('body', 'Required parameter requestParameters.body was null or undefined when calling repoSubmitPullReview.');
    }
    const queryParameters = {};
    const headerParameters = {};
    headerParameters['Content-Type'] = 'application/json';
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/pulls/{index}/reviews/{id}`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))).replace(`{${"index"}}`, encodeURIComponent(String(requestParameters.index))).replace(`{${"id"}}`, encodeURIComponent(String(requestParameters.id))),
      method: 'POST',
      headers: headerParameters,
      query: queryParameters,
      body: SubmitPullReviewOptionsToJSON(requestParameters.body)
    }, initOverrides);
    return new JSONApiResponse(response, jsonValue => PullReviewFromJSON(jsonValue));
  }

  /**
   * Submit a pending review to an pull request
   */
  async repoSubmitPullReview(requestParameters, initOverrides) {
    const response = await this.repoSubmitPullReviewRaw(requestParameters, initOverrides);
    return await response.value();
  }

  /**
   * Test a push webhook
   */
  async repoTestHookRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling repoTestHook.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling repoTestHook.');
    }
    if (requestParameters.id === null || requestParameters.id === undefined) {
      throw new RequiredError('id', 'Required parameter requestParameters.id was null or undefined when calling repoTestHook.');
    }
    const queryParameters = {};
    if (requestParameters.ref !== undefined) {
      queryParameters['ref'] = requestParameters.ref;
    }
    const headerParameters = {};
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/hooks/{id}/tests`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))).replace(`{${"id"}}`, encodeURIComponent(String(requestParameters.id))),
      method: 'POST',
      headers: headerParameters,
      query: queryParameters
    }, initOverrides);
    return new VoidApiResponse(response);
  }

  /**
   * Test a push webhook
   */
  async repoTestHook(requestParameters, initOverrides) {
    await this.repoTestHookRaw(requestParameters, initOverrides);
  }

  /**
   * List a repo\'s tracked times
   */
  async repoTrackedTimesRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling repoTrackedTimes.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling repoTrackedTimes.');
    }
    const queryParameters = {};
    if (requestParameters.user !== undefined) {
      queryParameters['user'] = requestParameters.user;
    }
    if (requestParameters.since !== undefined) {
      queryParameters['since'] = requestParameters.since.toISOString();
    }
    if (requestParameters.before !== undefined) {
      queryParameters['before'] = requestParameters.before.toISOString();
    }
    if (requestParameters.page !== undefined) {
      queryParameters['page'] = requestParameters.page;
    }
    if (requestParameters.limit !== undefined) {
      queryParameters['limit'] = requestParameters.limit;
    }
    const headerParameters = {};
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/times`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))),
      method: 'GET',
      headers: headerParameters,
      query: queryParameters
    }, initOverrides);
    return new JSONApiResponse(response, jsonValue => jsonValue.map(TrackedTimeFromJSON));
  }

  /**
   * List a repo\'s tracked times
   */
  async repoTrackedTimes(requestParameters, initOverrides) {
    const response = await this.repoTrackedTimesRaw(requestParameters, initOverrides);
    return await response.value();
  }

  /**
   * Transfer a repo ownership
   */
  async repoTransferRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling repoTransfer.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling repoTransfer.');
    }
    if (requestParameters.body === null || requestParameters.body === undefined) {
      throw new RequiredError('body', 'Required parameter requestParameters.body was null or undefined when calling repoTransfer.');
    }
    const queryParameters = {};
    const headerParameters = {};
    headerParameters['Content-Type'] = 'application/json';
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/transfer`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))),
      method: 'POST',
      headers: headerParameters,
      query: queryParameters,
      body: TransferRepoOptionToJSON(requestParameters.body)
    }, initOverrides);
    return new JSONApiResponse(response, jsonValue => RepositoryFromJSON(jsonValue));
  }

  /**
   * Transfer a repo ownership
   */
  async repoTransfer(requestParameters, initOverrides) {
    const response = await this.repoTransferRaw(requestParameters, initOverrides);
    return await response.value();
  }

  /**
   * Cancel to dismiss a review for a pull request
   */
  async repoUnDismissPullReviewRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling repoUnDismissPullReview.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling repoUnDismissPullReview.');
    }
    if (requestParameters.index === null || requestParameters.index === undefined) {
      throw new RequiredError('index', 'Required parameter requestParameters.index was null or undefined when calling repoUnDismissPullReview.');
    }
    if (requestParameters.id === null || requestParameters.id === undefined) {
      throw new RequiredError('id', 'Required parameter requestParameters.id was null or undefined when calling repoUnDismissPullReview.');
    }
    const queryParameters = {};
    const headerParameters = {};
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/pulls/{index}/reviews/{id}/undismissals`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))).replace(`{${"index"}}`, encodeURIComponent(String(requestParameters.index))).replace(`{${"id"}}`, encodeURIComponent(String(requestParameters.id))),
      method: 'POST',
      headers: headerParameters,
      query: queryParameters
    }, initOverrides);
    return new JSONApiResponse(response, jsonValue => PullReviewFromJSON(jsonValue));
  }

  /**
   * Cancel to dismiss a review for a pull request
   */
  async repoUnDismissPullReview(requestParameters, initOverrides) {
    const response = await this.repoUnDismissPullReviewRaw(requestParameters, initOverrides);
    return await response.value();
  }

  /**
   * Update a file in a repository
   */
  async repoUpdateFileRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling repoUpdateFile.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling repoUpdateFile.');
    }
    if (requestParameters.filepath === null || requestParameters.filepath === undefined) {
      throw new RequiredError('filepath', 'Required parameter requestParameters.filepath was null or undefined when calling repoUpdateFile.');
    }
    if (requestParameters.body === null || requestParameters.body === undefined) {
      throw new RequiredError('body', 'Required parameter requestParameters.body was null or undefined when calling repoUpdateFile.');
    }
    const queryParameters = {};
    const headerParameters = {};
    headerParameters['Content-Type'] = 'application/json';
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/contents/{filepath}`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))).replace(`{${"filepath"}}`, encodeURIComponent(String(requestParameters.filepath))),
      method: 'PUT',
      headers: headerParameters,
      query: queryParameters,
      body: UpdateFileOptionsToJSON(requestParameters.body)
    }, initOverrides);
    return new JSONApiResponse(response, jsonValue => FileResponseFromJSON(jsonValue));
  }

  /**
   * Update a file in a repository
   */
  async repoUpdateFile(requestParameters, initOverrides) {
    const response = await this.repoUpdateFileRaw(requestParameters, initOverrides);
    return await response.value();
  }

  /**
   * Merge PR\'s baseBranch into headBranch
   */
  async repoUpdatePullRequestRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling repoUpdatePullRequest.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling repoUpdatePullRequest.');
    }
    if (requestParameters.index === null || requestParameters.index === undefined) {
      throw new RequiredError('index', 'Required parameter requestParameters.index was null or undefined when calling repoUpdatePullRequest.');
    }
    const queryParameters = {};
    if (requestParameters.style !== undefined) {
      queryParameters['style'] = requestParameters.style;
    }
    const headerParameters = {};
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/pulls/{index}/update`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))).replace(`{${"index"}}`, encodeURIComponent(String(requestParameters.index))),
      method: 'POST',
      headers: headerParameters,
      query: queryParameters
    }, initOverrides);
    return new VoidApiResponse(response);
  }

  /**
   * Merge PR\'s baseBranch into headBranch
   */
  async repoUpdatePullRequest(requestParameters, initOverrides) {
    await this.repoUpdatePullRequestRaw(requestParameters, initOverrides);
  }

  /**
   * Replace list of topics for a repository
   */
  async repoUpdateTopicsRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling repoUpdateTopics.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling repoUpdateTopics.');
    }
    const queryParameters = {};
    const headerParameters = {};
    headerParameters['Content-Type'] = 'application/json';
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/topics`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))),
      method: 'PUT',
      headers: headerParameters,
      query: queryParameters,
      body: RepoTopicOptionsToJSON(requestParameters.body)
    }, initOverrides);
    return new VoidApiResponse(response);
  }

  /**
   * Replace list of topics for a repository
   */
  async repoUpdateTopics(requestParameters, initOverrides) {
    await this.repoUpdateTopicsRaw(requestParameters, initOverrides);
  }

  /**
   * Returns the validation information for a issue config
   */
  async repoValidateIssueConfigRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling repoValidateIssueConfig.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling repoValidateIssueConfig.');
    }
    const queryParameters = {};
    const headerParameters = {};
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/issue_config/validate`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))),
      method: 'GET',
      headers: headerParameters,
      query: queryParameters
    }, initOverrides);
    return new JSONApiResponse(response, jsonValue => IssueConfigValidationFromJSON(jsonValue));
  }

  /**
   * Returns the validation information for a issue config
   */
  async repoValidateIssueConfig(requestParameters, initOverrides) {
    const response = await this.repoValidateIssueConfigRaw(requestParameters, initOverrides);
    return await response.value();
  }

  /**
   * search topics via keyword
   */
  async topicSearchRaw(requestParameters, initOverrides) {
    if (requestParameters.q === null || requestParameters.q === undefined) {
      throw new RequiredError('q', 'Required parameter requestParameters.q was null or undefined when calling topicSearch.');
    }
    const queryParameters = {};
    if (requestParameters.q !== undefined) {
      queryParameters['q'] = requestParameters.q;
    }
    if (requestParameters.page !== undefined) {
      queryParameters['page'] = requestParameters.page;
    }
    if (requestParameters.limit !== undefined) {
      queryParameters['limit'] = requestParameters.limit;
    }
    const headerParameters = {};
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/topics/search`,
      method: 'GET',
      headers: headerParameters,
      query: queryParameters
    }, initOverrides);
    return new JSONApiResponse(response, jsonValue => jsonValue.map(TopicResponseFromJSON));
  }

  /**
   * search topics via keyword
   */
  async topicSearch(requestParameters, initOverrides) {
    const response = await this.topicSearchRaw(requestParameters, initOverrides);
    return await response.value();
  }

  /**
   * Check if the current user is watching a repo
   */
  async userCurrentCheckSubscriptionRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling userCurrentCheckSubscription.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling userCurrentCheckSubscription.');
    }
    const queryParameters = {};
    const headerParameters = {};
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/subscription`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))),
      method: 'GET',
      headers: headerParameters,
      query: queryParameters
    }, initOverrides);
    return new JSONApiResponse(response, jsonValue => WatchInfoFromJSON(jsonValue));
  }

  /**
   * Check if the current user is watching a repo
   */
  async userCurrentCheckSubscription(requestParameters, initOverrides) {
    const response = await this.userCurrentCheckSubscriptionRaw(requestParameters, initOverrides);
    return await response.value();
  }

  /**
   * Unwatch a repo
   */
  async userCurrentDeleteSubscriptionRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling userCurrentDeleteSubscription.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling userCurrentDeleteSubscription.');
    }
    const queryParameters = {};
    const headerParameters = {};
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/subscription`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))),
      method: 'DELETE',
      headers: headerParameters,
      query: queryParameters
    }, initOverrides);
    return new VoidApiResponse(response);
  }

  /**
   * Unwatch a repo
   */
  async userCurrentDeleteSubscription(requestParameters, initOverrides) {
    await this.userCurrentDeleteSubscriptionRaw(requestParameters, initOverrides);
  }

  /**
   * Watch a repo
   */
  async userCurrentPutSubscriptionRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling userCurrentPutSubscription.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling userCurrentPutSubscription.');
    }
    const queryParameters = {};
    const headerParameters = {};
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/subscription`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))),
      method: 'PUT',
      headers: headerParameters,
      query: queryParameters
    }, initOverrides);
    return new JSONApiResponse(response, jsonValue => WatchInfoFromJSON(jsonValue));
  }

  /**
   * Watch a repo
   */
  async userCurrentPutSubscription(requestParameters, initOverrides) {
    const response = await this.userCurrentPutSubscriptionRaw(requestParameters, initOverrides);
    return await response.value();
  }

  /**
   * List a user\'s tracked times in a repo
   */
  async userTrackedTimesRaw(requestParameters, initOverrides) {
    if (requestParameters.owner === null || requestParameters.owner === undefined) {
      throw new RequiredError('owner', 'Required parameter requestParameters.owner was null or undefined when calling userTrackedTimes.');
    }
    if (requestParameters.repo === null || requestParameters.repo === undefined) {
      throw new RequiredError('repo', 'Required parameter requestParameters.repo was null or undefined when calling userTrackedTimes.');
    }
    if (requestParameters.user === null || requestParameters.user === undefined) {
      throw new RequiredError('user', 'Required parameter requestParameters.user was null or undefined when calling userTrackedTimes.');
    }
    const queryParameters = {};
    const headerParameters = {};
    if (this.configuration && this.configuration.apiKey) {
      headerParameters["Authorization"] = this.configuration.apiKey("Authorization"); // AuthorizationHeaderToken authentication
    }

    const response = await this.request({
      path: `/repos/{owner}/{repo}/times/{user}`.replace(`{${"owner"}}`, encodeURIComponent(String(requestParameters.owner))).replace(`{${"repo"}}`, encodeURIComponent(String(requestParameters.repo))).replace(`{${"user"}}`, encodeURIComponent(String(requestParameters.user))),
      method: 'GET',
      headers: headerParameters,
      query: queryParameters
    }, initOverrides);
    return new JSONApiResponse(response, jsonValue => jsonValue.map(TrackedTimeFromJSON));
  }

  /**
   * List a user\'s tracked times in a repo
   */
  async userTrackedTimes(requestParameters, initOverrides) {
    const response = await this.userTrackedTimesRaw(requestParameters, initOverrides);
    return await response.value();
  }
}

const settings_path = '/user/settings/applications';
const storage_key = 'berx-access-key';
function auth_header() {
  const key = localStorage.getItem(storage_key);
  if (!key) {
    throw new Error('Key must be set');
  }
  return `token ${key}`;
}
function setup_token_settings() {
  const document_fragment = document.createDocumentFragment();
  if (localStorage.getItem(storage_key) === null) {
    const form = document_fragment.appendChild(document.createElement('form'));
    form.classList.add('ui', 'form', 'ignore-dirty');
    const field = form.appendChild(document.createElement('div'));
    field.classList.add('field');
    const label = field.appendChild(document.createElement('label'));
    label.setAttribute('for', 'berx-token');
    label.textContent = 'Token';
    const input = field.appendChild(document.createElement('input'));
    input.id = 'berx-token';
    input.name = 'berx-token';
    const flash_key = document.querySelector('.flash-info.flash-message p');
    if (flash_key !== null) {
      input.value = flash_key.textContent;
    }
    const button = form.appendChild(document.createElement('button'));
    button.classList.add('button', 'ui', 'green');
    button.textContent = 'Submit';
    button.type = 'button';
    button.addEventListener('click', () => {
      localStorage.setItem(storage_key, input.value);
      setup_token_settings();
    });
  } else {
    const right_float = document_fragment.appendChild(document.createElement('div'));
    right_float.classList.add('right', 'floated', 'content');
    const button = right_float.appendChild(document.createElement('button'));
    button.type = 'button';
    button.classList.add('ui', 'red', 'tiny', 'button', 'delete-button');
    button.textContent = 'Delete';
    const p = document_fragment.appendChild(document.createElement('p'));
    p.textContent = 'An Access Token is set.';
    button.addEventListener('click', () => {
      localStorage.removeItem(storage_key);
      setup_token_settings();
    });
  }
  const token_item = document.getElementById('berx-token-item');
  token_item.replaceChildren(document_fragment);
}
if (window.location.pathname === settings_path) {
  const user_setting_content = document.querySelector('.user-setting-content');
  const header = document.createElement('h4');
  header.classList.add('ui', 'top', 'attached', 'header');
  header.textContent = 'berx Access Token';
  const body = document.createElement('div');
  body.classList.add('ui', 'attached', 'segment', 'bottom');
  const key_list = body.appendChild(document.createElement('div'));
  key_list.classList.add('ui', 'key', 'list');
  const description = key_list.appendChild(document.createElement('div'));
  description.classList.add('item');
  description.textContent = 'To function, berx needs an Access Token with write:issue and write:repository.';
  const token_item = key_list.appendChild(document.createElement('div'));
  token_item.classList.add('item');
  token_item.id = 'berx-token-item';
  const document_fragment = document.createDocumentFragment();
  document_fragment.appendChild(header);
  document_fragment.appendChild(body);
  user_setting_content.children[0].before(document_fragment);
  setup_token_settings();
}

function _wrapRegExp() { _wrapRegExp = function (e, r) { return new BabelRegExp(e, void 0, r); }; var e = RegExp.prototype, r = new WeakMap(); function BabelRegExp(e, t, p) { var o = new RegExp(e, t); return r.set(o, p || r.get(e)), _setPrototypeOf(o, BabelRegExp.prototype); } function buildGroups(e, t) { var p = r.get(t); return Object.keys(p).reduce(function (r, t) { var o = p[t]; if ("number" == typeof o) r[t] = e[o];else { for (var i = 0; void 0 === e[o[i]] && i + 1 < o.length;) i++; r[t] = e[o[i]]; } return r; }, Object.create(null)); } return _inherits(BabelRegExp, RegExp), BabelRegExp.prototype.exec = function (r) { var t = e.exec.call(this, r); if (t) { t.groups = buildGroups(t, this); var p = t.indices; p && (p.groups = buildGroups(p, this)); } return t; }, BabelRegExp.prototype[Symbol.replace] = function (t, p) { if ("string" == typeof p) { var o = r.get(this); return e[Symbol.replace].call(this, t, p.replace(/\$<([^>]+)>/g, function (e, r) { var t = o[r]; return "$" + (Array.isArray(t) ? t.join("$") : t); })); } if ("function" == typeof p) { var i = this; return e[Symbol.replace].call(this, t, function () { var e = arguments; return "object" != typeof e[e.length - 1] && (e = [].slice.call(e)).push(buildGroups(e, i)), p.apply(this, e); }); } return e[Symbol.replace].call(this, t, p); }, _wrapRegExp.apply(this, arguments); }
const issue_regex = /*#__PURE__*/_wrapRegExp(/^\/([^/]+)\/([^/]+)\/issues\/(\d+)$/, {
  owner: 1,
  repo: 2,
  index: 3
});
const whitespace_regex = /\s+/g;
const refs_heads = /^refs\/heads\//;
const path = window.location.pathname;
const match = issue_regex.exec(path);
const configuration = new Configuration({
  apiKey: auth_header()
});
async function setup_issue_pr() {
  const owner = match.groups.owner;
  const repo = match.groups.repo;
  const index = parseInt(match.groups.index, 10);
  const issue_api = new IssueApi(configuration);
  const repository_api = new RepositoryApi(configuration);
  const [issue, repository] = await Promise.all([issue_api.issueGetIssue({
    repo,
    owner,
    index
  }), await repository_api.repoGet({
    repo,
    owner
  })]);
  let branch;
  if (issue.ref) {
    branch = await repository_api.repoGetBranch({
      repo,
      owner,
      branch: issue.ref.replace(refs_heads, '')
    });
  } else {
    const branch_title = issue.title.toLowerCase().replaceAll(whitespace_regex, '-');
    const branch_name = `issues/${index}-${branch_title}`;
    try {
      branch = await repository_api.repoGetBranch({
        repo,
        owner,
        branch: branch_name
      });
    } catch (_) {
      branch = await repository_api.repoCreateBranch({
        repo: repo,
        owner: owner,
        body: {
          newBranchName: branch_name,
          oldRefName: `heads/${repository.defaultBranch}`
        }
      });
    }
    await issue_api.issueEditIssue({
      repo,
      owner,
      index,
      body: {
        ref: branch_name
      }
    });
  }
  const pull_requests = await repository_api.repoListPullRequests({
    repo,
    owner
  });
  let pull_request = pull_requests.find(each => each.head.ref === branch.name);
  if (pull_request == null) {
    var _issue$assignees, _issue$labels, _issue$milestone;
    pull_request = await repository_api.repoCreatePullRequest({
      repo,
      owner,
      body: {
        assignees: (_issue$assignees = issue.assignees) == null ? void 0 : _issue$assignees.map(user => user.login).filter(e => e != null),
        base: repository.defaultBranch,
        body: issue.body ? `${issue.body}\n\ncloses #${issue.number}` : `closes #${issue.number}`,
        dueDate: issue.dueDate,
        head: branch.name,
        labels: (_issue$labels = issue.labels) == null ? void 0 : _issue$labels.map(label => label.id).filter(e => e != null),
        milestone: (_issue$milestone = issue.milestone) == null ? void 0 : _issue$milestone.id,
        title: issue.title ? `WIP: ${issue.title}` : undefined
      }
    });
  }
  window.location.href = `/${owner}/${repo}/pulls/${pull_request.number}`;
}
if (match !== null) {
  const button = document.createElement('button');
  button.classList.add('ui', 'green', 'icon', 'button');
  button.textContent = 'Add branch and PR';
  const select_branch = document.querySelector('.select-branch');
  select_branch.insertAdjacentElement('afterend', button);
  button.addEventListener('click', setup_issue_pr);
}

})();