| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
|
| import Logger from '@/common/logger/Logger';
|
| import {
|
| CacheConfig,
|
| GraphQLResponse,
|
| RequestParameters,
|
| UploadableMap,
|
| Variables,
|
| } from 'relay-runtime';
|
|
|
| |
| |
|
|
| export default async function fetchGraphQL(
|
| endpoint: string,
|
| request: RequestParameters,
|
| variables: Variables,
|
| cacheConfig: CacheConfig,
|
| uploadables?: UploadableMap | null,
|
| ): Promise<GraphQLResponse> {
|
| const url = `${endpoint}/graphql`;
|
|
|
| const headers: {[name: string]: string} = {};
|
| const requestInit: RequestInit = {
|
| method: 'POST',
|
| headers,
|
| credentials: 'include',
|
| };
|
|
|
| const customHeaders = (cacheConfig?.metadata?.headers ?? {}) as {
|
| [key: string]: string;
|
| };
|
|
|
| requestInit.headers = Object.assign(customHeaders, requestInit.headers);
|
|
|
| if (uploadables != null) {
|
| const formData = new FormData();
|
| formData.append(
|
| 'operations',
|
| JSON.stringify({
|
| query: request.text,
|
| variables,
|
| }),
|
| );
|
|
|
| const uploadableMap: {
|
| [key: string]: string[];
|
| } = {};
|
|
|
| Object.keys(uploadables).forEach(key => {
|
| uploadableMap[key] = [`variables.${key}`];
|
| });
|
|
|
| formData.append('map', JSON.stringify(uploadableMap));
|
|
|
| Object.keys(uploadables).forEach(key => {
|
| formData.append(key, uploadables[key]);
|
| });
|
|
|
| requestInit.body = formData;
|
| } else {
|
| requestInit.headers = Object.assign(
|
| {'Content-Type': 'application/json'},
|
| requestInit.headers,
|
| );
|
|
|
| requestInit.body = JSON.stringify({
|
| query: request.text,
|
| variables,
|
| });
|
| }
|
|
|
| try {
|
| const response = await fetch(url, requestInit);
|
| const result = await response.json();
|
|
|
|
|
|
|
| if ('errors' in result) {
|
| for (const error of result.errors) {
|
| Logger.error(error);
|
| }
|
| }
|
|
|
| return result;
|
| } catch (error) {
|
| Logger.error(`Could not connect to GraphQL endpoint ${url}`, error);
|
| throw error;
|
| }
|
| }
|
|
|