entities/personal-access-token.js

/**
 * Personal access token
 * @namespace PersonalAccessToken
 * */

import cloneDeep from 'lodash/cloneDeep'
import { freezeSys, toPlainObject } from 'contentful-sdk-core'
import enhanceWithMethods from '../enhance-with-methods'
import errorHandler from '../error-handler'

function createPersonalAccessToken (http) {
  return {
    /**
     * Revokes a personal access token
     * @memberof PersonalAccessToken
     * @func revoke
     * @return {Promise<PersonalAccessToken>} Object the revoked personal access token
     * @example
     * const contentful = require('contentful-management')
     *
     * const client = contentful.createClient({
     *  accessToken: <content_management_api_key>
     * })
     *
     * client.getPersonalAccessToken('<token-id>')
     *  .then((personalAccessToken) => {
     *    return personalAccessToken.revoke()
     *  })
     *  .catch(console.error)
     */
    revoke: function () {
      const baseURL = http.defaults.baseURL.replace('/spaces/', '/users/me/access_tokens')
      return http.put(`${this.sys.id}/revoked`, null, {
        baseURL
      })
        .then((response) => response.data, errorHandler)
    }
  }
}

/**
 * @private
 * @param {Object} http - HTTP client instance
 * @param {Object} data - Raw  personal access token data
 * @return {PersonalAccessToken} Wrapped personal access token
 */
export function wrapPersonalAccessToken (http, data) {
  const personalAccessToken = toPlainObject(cloneDeep(data))
  enhanceWithMethods(personalAccessToken, createPersonalAccessToken(http))
  return freezeSys(personalAccessToken)
}

/**
 * @private
 * @param {Object} http - HTTP client instance
 * @param {Object} data - Raw personal access collection data
 * @return {PersonalAccessTokenCollection} Wrapped personal access token collection data
 */
export function wrapPersonalAccessTokenCollection (http, data) {
  const personalAccessTokens = toPlainObject(cloneDeep(data))
  personalAccessTokens.items = personalAccessTokens.items.map((entity) => wrapPersonalAccessToken(http, entity))
  return freezeSys(personalAccessTokens)
}