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)
})
})
}
}