const fetch = require("isomorphic-fetch") const config = require("../config") const compressQuery = require("graphql-query-compress") /** * Run a GraphQL query against the rpdata backend * * @param {string} query The query to run * @param {{[x:string]: any}} variables * @param {{operationName:string, token: string, permissions: string[]}} options */ function query(query, variables = {}, options = {}) { return fetch(config.graphqlEndpoint, { method: "POST", headers: { "Content-Type": "application/json", "Authorization": options.token ? `Bearer ${options.token}` : null, "X-Permissions": options.permissions ? options.permissions.join(",") : null, }, body: JSON.stringify({query: query.length > 256 ? compressQuery(query || "") : query, variables, operationName: options.operationName}), credentials: "include", }).then(res => { if (!res.ok) { return Promise.reject([{ message: `HTTP: ${res.statusText}`, location: null, }]) } return res.json() }).then(json => { if (json.errors != null && json.errors.length > 0) { return Promise.reject(json.errors) } return json.data }) } module.exports = { query }