text: import { API as GithubAPI } from 'netlify-cms-backend-github';
  import { APIError } from 'netlify-cms-lib-util';
  
  export default class API extends GithubAPI {
    constructor(config) {
      super(config);
      this.api_root = config.api_root;
      this.tokenPromise = config.tokenPromise;
      this.commitAuthor = config.commitAuthor;
      this.repoURL = '';
      this.originRepoURL = '';
    }
  
    hasWriteAccess() {
      return this.getDefaultBranch()
        .then(() => true)
        .catch(error => {
          if (error.status === 401) {
            if (error.message === 'Bad credentials') {
              throw new APIError(
                'Git Gateway Error: Please ask your site administrator to reissue the Git Gateway token.',
                error.status,
                'Git Gateway',
              );
            } else {
              return false;
            }
          } else if (
            error.status === 404 &&
            (error.message === undefined || error.message === 'Unable to locate site configuration')
          ) {
            throw new APIError(
              `Git Gateway Error: Please make sure Git Gateway is enabled on your site.`,
              error.status,
              'Git Gateway',
            );
          } else {
            console.error('Problem fetching repo data from Git Gateway');
            throw error;
          }
        });
    }
  
    requestHeaders(headers = {}) {
      return this.tokenPromise().then(jwtToken => {
        const baseHeader = {
          Authorization: `Bearer ${jwtToken}`,
          'Content-Type': 'application/json; charset=utf-8',
          ...headers,
        };
  
        return baseHeader;
      });
    }
  
    handleRequestError(error, responseStatus) {
      throw new APIError(error.message || error.msg, responseStatus, 'Git Gateway');
    }
  
    user() {
      return Promise.resolve(this.commitAuthor);
    }
  
    commit(message, changeTree) {
      const commitParams = {
        message,
        tree: changeTree.sha,
        parents: changeTree.parentSha ? [changeTree.parentSha] : [],
      };
  
      if (this.commitAuthor) {
        commitParams.author = {
          ...this.commitAuthor,
          date: new Date().toISOString(),
        };
      }
  
      return this.request('/git/commits', {
        method: 'POST',
        body: JSON.stringify(commitParams),
      });
    }
  }
  