import fetchRetry from "fetch-retry" import { DocumentNode } from "graphql" import { GraphQLClient } from "graphql-request" import { cache } from "react" import { env } from "@/env/server" import { request as _request } from "./_request" import { Data } from "@/types/request" const client = new GraphQLClient(env.CMS_URL, { fetch: cache(async function ( url: URL | RequestInfo, params: RequestInit | undefined ) { const wrappedFetch = fetchRetry(fetch, { retries: 3, retryDelay: function (attempt, error, response) { return Math.pow(2, attempt) * 150 // 150, 300, 600 }, }) return wrappedFetch(url, params) }), }) export async function request( query: string | DocumentNode, variables?: {}, params?: RequestInit ): Promise> { return _request(client, query, variables, params) }