Source: scripts/auth.js

/*
 * Copyright (c) 2016-2017, Michael A. Updike All rights reserved.
 * Licensed under Apache 2.0
 * https://opensource.org/licenses/Apache-2.0
 * https://github.com/opus1269/chrome-extension-utils/blob/master/LICENSE.md
 */
window.Chrome = window.Chrome || {};

/**
 * Google authorization utilities
 * @see https://developer.chrome.com/apps/identity
 * @namespace
 */
Chrome.Auth = (function() {
  'use strict';

  new ExceptionHandler();

  const chromep = new ChromePromise();

  return {
    /**
     * Get our OAuth2.0 token
     * @param {boolean} interactive - if true may block
     * @returns {Promise<string>} An access token
     * @memberOf Chrome.Auth
     */
    getToken: function(interactive = false) {
      return chromep.identity.getAuthToken({
        'interactive': interactive,
      }).then((token) => {
        return Promise.resolve(token);
      });
    },

    /**
     * Remove our cached auth token
     * @param {string|null} [curToken=null] token to remove
     * @returns {Promise.<string>} the old token
     * @memberOf Chrome.Auth
     */
    removeCachedToken: function(curToken = null) {
      let oldToken = null;
      if (curToken === null) {
        return this.getToken(false).then((token) => {
          oldToken = token;
          return chromep.identity.removeCachedAuthToken({'token': token});
        }).then(() => {
          return Promise.resolve(oldToken);
        });
      } else {
        oldToken = curToken;
        return chromep.identity.removeCachedAuthToken({
          'token': curToken,
        }).then(() => {
          return Promise.resolve(oldToken);
        });
      }
    },
  };
})();