{"version":3,"file":"graphql-client.mjs","sources":["../../src/graphql-client/graphql-client.ts"],"sourcesContent":["import {generateHttpFetch} from './http-fetch';\nimport {\n  ClientOptions,\n  CustomFetchApi,\n  GraphQLClient,\n  ClientResponse,\n  ClientConfig,\n  Logger,\n  LogContentTypes,\n  DataChunk,\n} from './types';\nimport {\n  CLIENT,\n  GQL_API_ERROR,\n  UNEXPECTED_CONTENT_TYPE_ERROR,\n  NO_DATA_OR_ERRORS_ERROR,\n  CONTENT_TYPES,\n  RETRY_WAIT_TIME,\n  HEADER_SEPARATOR,\n  DEFER_OPERATION_REGEX,\n  BOUNDARY_HEADER_REGEX,\n  SDK_VARIANT_HEADER,\n  SDK_VERSION_HEADER,\n  DEFAULT_SDK_VARIANT,\n  DEFAULT_CLIENT_VERSION,\n} from './constants';\nimport {\n  formatErrorMessage,\n  getErrorMessage,\n  validateRetries,\n  getKeyValueIfValid,\n  buildDataObjectByPath,\n  buildCombinedDataObject,\n  getErrorCause,\n  combineErrors,\n} from './utilities';\n\nexport function createGraphQLClient({\n  headers,\n  url,\n  customFetchApi = fetch,\n  retries = 0,\n  logger,\n}: ClientOptions): GraphQLClient {\n  validateRetries({client: CLIENT, retries});\n\n  const config: ClientConfig = {\n    headers,\n    url,\n    retries,\n  };\n\n  const clientLogger = generateClientLogger(logger);\n  const httpFetch = generateHttpFetch({\n    customFetchApi,\n    clientLogger,\n    defaultRetryWaitTime: RETRY_WAIT_TIME,\n  });\n  const fetchFn = generateFetch(httpFetch, config);\n  const request = generateRequest(fetchFn);\n  const requestStream = generateRequestStream(fetchFn);\n\n  return {\n    config,\n    fetch: fetchFn,\n    request,\n    requestStream,\n  };\n}\n\nexport function generateClientLogger(logger?: Logger): Logger {\n  return (logContent: LogContentTypes) => {\n    if (logger) {\n      logger(logContent);\n    }\n  };\n}\n\nasync function processJSONResponse<TData = any>(\n  response: Response,\n): Promise<ClientResponse<TData>> {\n  const {errors, data, extensions} = await response.json<any>();\n\n  return {\n    ...getKeyValueIfValid('data', data),\n    ...getKeyValueIfValid('extensions', extensions),\n    headers: response.headers,\n\n    ...(errors || !data\n      ? {\n          errors: {\n            networkStatusCode: response.status,\n            message: formatErrorMessage(\n              errors ? GQL_API_ERROR : NO_DATA_OR_ERRORS_ERROR,\n            ),\n            ...getKeyValueIfValid('graphQLErrors', errors),\n            response,\n          },\n        }\n      : {}),\n  };\n}\n\nfunction generateFetch(\n  httpFetch: ReturnType<typeof generateHttpFetch>,\n  {url, headers, retries}: ClientConfig,\n): GraphQLClient['fetch'] {\n  return async (operation, options = {}) => {\n    const {\n      variables,\n      headers: overrideHeaders,\n      url: overrideUrl,\n      retries: overrideRetries,\n      keepalive,\n      signal,\n    } = options;\n\n    const body = JSON.stringify({\n      query: operation,\n      variables,\n    });\n\n    validateRetries({client: CLIENT, retries: overrideRetries});\n\n    const flatHeaders = Object.entries({\n      ...headers,\n      ...overrideHeaders,\n    }).reduce((headers: Record<string, string>, [key, value]) => {\n      headers[key] = Array.isArray(value) ? value.join(', ') : value.toString();\n      return headers;\n    }, {});\n\n    if (!flatHeaders[SDK_VARIANT_HEADER] && !flatHeaders[SDK_VERSION_HEADER]) {\n      flatHeaders[SDK_VARIANT_HEADER] = DEFAULT_SDK_VARIANT;\n      flatHeaders[SDK_VERSION_HEADER] = DEFAULT_CLIENT_VERSION;\n    }\n\n    const fetchParams: Parameters<CustomFetchApi> = [\n      overrideUrl ?? url,\n      {\n        method: 'POST',\n        headers: flatHeaders,\n        body,\n        signal,\n        keepalive,\n      },\n    ];\n\n    return httpFetch(fetchParams, 1, overrideRetries ?? retries);\n  };\n}\n\nfunction generateRequest(\n  fetchFn: ReturnType<typeof generateFetch>,\n): GraphQLClient['request'] {\n  return async (...props) => {\n    if (DEFER_OPERATION_REGEX.test(props[0])) {\n      throw new Error(\n        formatErrorMessage(\n          'This operation will result in a streamable response - use requestStream() instead.',\n        ),\n      );\n    }\n\n    let response: Response | null = null;\n    try {\n      response = await fetchFn(...props);\n      const {status, statusText} = response;\n      const contentType = response.headers.get('content-type') || '';\n\n      if (!response.ok) {\n        return {\n          errors: {\n            networkStatusCode: status,\n            message: formatErrorMessage(statusText),\n            response,\n          },\n        };\n      }\n\n      if (!contentType.includes(CONTENT_TYPES.json)) {\n        return {\n          errors: {\n            networkStatusCode: status,\n            message: formatErrorMessage(\n              `${UNEXPECTED_CONTENT_TYPE_ERROR} ${contentType}`,\n            ),\n            response,\n          },\n        };\n      }\n\n      return await processJSONResponse(response);\n    } catch (error) {\n      return {\n        errors: {\n          message: getErrorMessage(error),\n          ...(response == null\n            ? {}\n            : {\n                networkStatusCode: response.status,\n                response,\n              }),\n        },\n      };\n    }\n  };\n}\n\nasync function* getStreamBodyIterator(\n  response: Response,\n): AsyncIterableIterator<string> {\n  const decoder = new TextDecoder();\n\n  // Response body is an async iterator\n  if ((response.body as any)![Symbol.asyncIterator]) {\n    for await (const chunk of response.body! as any) {\n      yield decoder.decode(chunk);\n    }\n  } else {\n    const reader = response.body!.getReader();\n\n    let readResult: ReadableStreamReadResult<DataChunk>;\n    try {\n      while (!(readResult = await reader.read()).done) {\n        yield decoder.decode(readResult.value);\n      }\n    } finally {\n      reader.cancel();\n    }\n  }\n}\n\nfunction readStreamChunk(\n  streamBodyIterator: AsyncIterableIterator<string>,\n  boundary: string,\n) {\n  return {\n    async *[Symbol.asyncIterator]() {\n      try {\n        let buffer = '';\n\n        for await (const textChunk of streamBodyIterator) {\n          buffer += textChunk;\n\n          if (buffer.indexOf(boundary) > -1) {\n            const lastBoundaryIndex = buffer.lastIndexOf(boundary);\n            const fullResponses = buffer.slice(0, lastBoundaryIndex);\n\n            const chunkBodies = fullResponses\n              .split(boundary)\n              .filter((chunk) => chunk.trim().length > 0)\n              .map((chunk) => {\n                const body = chunk\n                  .slice(\n                    chunk.indexOf(HEADER_SEPARATOR) + HEADER_SEPARATOR.length,\n                  )\n                  .trim();\n                return body;\n              });\n\n            if (chunkBodies.length > 0) {\n              yield chunkBodies;\n            }\n\n            buffer = buffer.slice(lastBoundaryIndex + boundary.length);\n\n            if (buffer.trim() === `--`) {\n              buffer = '';\n            }\n          }\n        }\n      } catch (error) {\n        throw new Error(\n          `Error occured while processing stream payload - ${getErrorMessage(\n            error,\n          )}`,\n        );\n      }\n    },\n  };\n}\n\nfunction createJsonResponseAsyncIterator(response: Response) {\n  return {\n    async *[Symbol.asyncIterator]() {\n      try {\n        const processedResponse = await processJSONResponse(response);\n\n        yield {\n          ...processedResponse,\n          hasNext: false,\n        };\n      } catch (error) {\n        yield {\n          errors: {\n            message: formatErrorMessage(getErrorMessage(error)),\n            networkStatusCode: response.status,\n            response,\n          },\n          hasNext: false,\n        };\n      }\n    },\n  };\n}\n\nfunction getResponseDataFromChunkBodies(chunkBodies: string[]): {\n  data: any;\n  errors?: any;\n  extensions?: any;\n  hasNext: boolean;\n}[] {\n  return chunkBodies\n    .map((value) => {\n      try {\n        return JSON.parse(value);\n      } catch (error) {\n        throw new Error(\n          `Error in parsing multipart response - ${getErrorMessage(error)}`,\n        );\n      }\n    })\n    .map((payload) => {\n      const {data, incremental, hasNext, extensions, errors} = payload;\n\n      // initial data chunk\n      if (!incremental) {\n        return {\n          data: data || {},\n          ...getKeyValueIfValid('errors', errors),\n          ...getKeyValueIfValid('extensions', extensions),\n          hasNext,\n        };\n      }\n\n      // subsequent data chunks\n      const incrementalArray: {data: any; errors?: any}[] = incremental.map(\n        ({data, path, errors}: any) => {\n          return {\n            data: data && path ? buildDataObjectByPath(path, data) : {},\n            ...getKeyValueIfValid('errors', errors),\n          };\n        },\n      );\n\n      return {\n        data:\n          incrementalArray.length === 1\n            ? incrementalArray[0].data\n            : buildCombinedDataObject([\n                ...incrementalArray.map(({data}) => data),\n              ]),\n        ...getKeyValueIfValid('errors', combineErrors(incrementalArray)),\n        hasNext,\n      };\n    });\n}\n\nfunction validateResponseData(\n  responseErrors: any[],\n  combinedData: ReturnType<typeof buildCombinedDataObject>,\n) {\n  if (responseErrors.length > 0) {\n    throw new Error(GQL_API_ERROR, {\n      cause: {\n        graphQLErrors: responseErrors,\n      },\n    });\n  }\n\n  if (Object.keys(combinedData).length === 0) {\n    throw new Error(NO_DATA_OR_ERRORS_ERROR);\n  }\n}\n\nfunction createMultipartResponseAsyncInterator(\n  response: Response,\n  responseContentType: string,\n) {\n  const boundaryHeader = (responseContentType ?? '').match(\n    BOUNDARY_HEADER_REGEX,\n  );\n  const boundary = `--${boundaryHeader ? boundaryHeader[1] : '-'}`;\n\n  if (\n    !response.body?.getReader &&\n    !(response.body as any)?.[Symbol.asyncIterator]\n  ) {\n    throw new Error('API multipart response did not return an iterable body', {\n      cause: response,\n    });\n  }\n\n  const streamBodyIterator = getStreamBodyIterator(response);\n\n  let combinedData: Record<string, any> = {};\n  let responseExtensions: Record<string, any> | undefined;\n\n  return {\n    async *[Symbol.asyncIterator]() {\n      try {\n        let streamHasNext = true;\n\n        for await (const chunkBodies of readStreamChunk(\n          streamBodyIterator,\n          boundary,\n        )) {\n          const responseData = getResponseDataFromChunkBodies(chunkBodies);\n\n          responseExtensions =\n            responseData.find((datum) => datum.extensions)?.extensions ??\n            responseExtensions;\n\n          const responseErrors = combineErrors(responseData);\n\n          combinedData = buildCombinedDataObject([\n            combinedData,\n            ...responseData.map(({data}) => data),\n          ]);\n\n          streamHasNext = responseData.slice(-1)[0].hasNext;\n\n          validateResponseData(responseErrors, combinedData);\n\n          yield {\n            ...getKeyValueIfValid('data', combinedData),\n            ...getKeyValueIfValid('extensions', responseExtensions),\n            hasNext: streamHasNext,\n          };\n        }\n\n        if (streamHasNext) {\n          throw new Error(`Response stream terminated unexpectedly`);\n        }\n      } catch (error) {\n        const cause = getErrorCause(error);\n\n        yield {\n          ...getKeyValueIfValid('data', combinedData),\n          ...getKeyValueIfValid('extensions', responseExtensions),\n          errors: {\n            message: formatErrorMessage(getErrorMessage(error)),\n            networkStatusCode: response.status,\n            ...getKeyValueIfValid('graphQLErrors', cause?.graphQLErrors),\n            response,\n          },\n          hasNext: false,\n        };\n      }\n    },\n  };\n}\n\nfunction generateRequestStream(\n  fetchFn: ReturnType<typeof generateFetch>,\n): GraphQLClient['requestStream'] {\n  return async (...props) => {\n    if (!DEFER_OPERATION_REGEX.test(props[0])) {\n      throw new Error(\n        formatErrorMessage(\n          'This operation does not result in a streamable response - use request() instead.',\n        ),\n      );\n    }\n\n    try {\n      const response = await fetchFn(...props);\n\n      const {statusText} = response;\n\n      if (!response.ok) {\n        throw new Error(statusText, {cause: response});\n      }\n\n      const responseContentType = response.headers.get('content-type') || '';\n\n      switch (true) {\n        case responseContentType.includes(CONTENT_TYPES.json):\n          return createJsonResponseAsyncIterator(response);\n        case responseContentType.includes(CONTENT_TYPES.multipart):\n          return createMultipartResponseAsyncInterator(\n            response,\n            responseContentType,\n          );\n        default:\n          throw new Error(\n            `${UNEXPECTED_CONTENT_TYPE_ERROR} ${responseContentType}`,\n            {cause: response},\n          );\n      }\n    } catch (error) {\n      return {\n        async *[Symbol.asyncIterator]() {\n          const response = getErrorCause(error);\n\n          yield {\n            errors: {\n              message: formatErrorMessage(getErrorMessage(error)),\n              ...getKeyValueIfValid('networkStatusCode', response?.status),\n              ...getKeyValueIfValid('response', response),\n            },\n            hasNext: false,\n          };\n        },\n      };\n    }\n  };\n}\n"],"names":[],"mappings":"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"}