auth/token.js

import decodeJwt from 'jwt-decode'
import get from 'lodash/get'
import { toCamelCaseDeep } from '../utils/case_converter'

/**
 * User's token.
 */
export class Token {
  /**
   * Parse token from a JWT token.
   *
   * @param {string} jwtToken JWT token.
   */
  constructor (jwtToken) {
    this._token = jwtToken
    this._payload = toCamelCaseDeep(decodeJwt(jwtToken))
  }

  /**
   * Encoded JWT token.
   *
   * @type {string}
   */
  get rawJWT () {
    return this._token
  }

  /**
   * User's account ID.
   *
   * @type {string}
   */
  get accountId () {
    return get(this._payload, 'accountId')
  }

  /**
   * User's account type.
   *
   * @type {string}
   */
  get accountType () {
    return get(this._payload, 'accountType')
  }

  /**
   * User's platform ID.
   *
   * @type {string}
   */
  get platformId () {
    return get(this._payload, 'platformId')
  }

  /**
   * Token payload.
   *
   * @type {string}
   */
  get payload () {
    return this._payload
  }
}