klummy
4/18/2018 - 8:52 AM

Request Client Sample.js

import axios from 'axios'

import config from '../config'
import {getUserIdToken} from './auth'

const axiosInstance = axios.create({
  baseURL: config.api[process.env.NODE_ENV].base + config.api[process.env.NODE_ENV].graphqlEndpoint,
  timeout: 5000
})

axiosInstance.defaults.headers.post['Content-Type'] = 'application/json'

export default class RequestClient {
  static combineQueries (args) {
    const queries = Array.from(args).map(q => q.trim().slice(1, -1))
    const queryString = `{ ${queries.join('')} }`

    return queryString
  }

  static async mutate () {
    axiosInstance.defaults.headers.common['012-User-Token'] = await this.setAuthorization()

    return axiosInstance.post('', {
      query: `mutation ${this.combineQueries(arguments)}`
    })
  }

  static async query () {
    axiosInstance.defaults.headers.common[config.auth.headerName] = await this.setAuthorization()

    return axiosInstance.post('', {
      query: `query ${this.combineQueries(arguments)}`
    })
  }

  static setAuthorization () {
    return new Promise((resolve, reject) => {
      getUserIdToken()
        .then(token => {
          resolve(token)
        })
        .catch(error => {
          console.log('Error retrieving token - ', error)
          reject(error)
        })
    })
  }
}