@shopify/graphql-client
Version:
Shopify GraphQL Client - A lightweight generic GraphQL JS client to interact with Shopify GraphQL APIs
1 lines • 4.44 kB
Source Map (JSON)
{"version":3,"file":"http-fetch.mjs","sources":["../../src/graphql-client/http-fetch.ts"],"sourcesContent":["import {CLIENT, RETRIABLE_STATUS_CODES, RETRY_WAIT_TIME} from './constants';\nimport {CustomFetchApi, GraphQLClient, Logger} from './types';\nimport {formatErrorMessage, getErrorMessage} from './utilities';\n\ninterface GenerateHttpFetchOptions {\n clientLogger: Logger;\n customFetchApi?: CustomFetchApi;\n client?: string;\n defaultRetryWaitTime?: number;\n retriableCodes?: number[];\n}\n\nexport function generateHttpFetch({\n clientLogger,\n customFetchApi = fetch,\n client = CLIENT,\n defaultRetryWaitTime = RETRY_WAIT_TIME,\n retriableCodes = RETRIABLE_STATUS_CODES,\n}: GenerateHttpFetchOptions) {\n const httpFetch = async (\n requestParams: Parameters<CustomFetchApi>,\n count: number,\n maxRetries: number,\n ): ReturnType<GraphQLClient['fetch']> => {\n const nextCount = count + 1;\n const maxTries = maxRetries + 1;\n let response: Response | undefined;\n\n try {\n response = await customFetchApi(...requestParams);\n\n clientLogger({\n type: 'HTTP-Response',\n content: {\n requestParams,\n response,\n },\n });\n\n if (\n !response.ok &&\n retriableCodes.includes(response.status) &&\n nextCount <= maxTries\n ) {\n throw new Error();\n }\n\n const deprecationNotice =\n response?.headers.get('X-Shopify-API-Deprecated-Reason') || '';\n if (deprecationNotice) {\n clientLogger({\n type: 'HTTP-Response-GraphQL-Deprecation-Notice',\n content: {\n requestParams,\n deprecationNotice,\n },\n });\n }\n\n return response;\n } catch (error) {\n if (nextCount <= maxTries) {\n const retryAfter = response?.headers.get('Retry-After');\n await sleep(\n retryAfter ? parseInt(retryAfter, 10) : defaultRetryWaitTime,\n );\n\n clientLogger({\n type: 'HTTP-Retry',\n content: {\n requestParams,\n lastResponse: response,\n retryAttempt: count,\n maxRetries,\n },\n });\n\n return httpFetch(requestParams, nextCount, maxRetries);\n }\n\n throw new Error(\n formatErrorMessage(\n `${\n maxRetries > 0\n ? `Attempted maximum number of ${maxRetries} network retries. Last message - `\n : ''\n }${getErrorMessage(error)}`,\n client,\n ),\n );\n }\n };\n\n return httpFetch;\n}\n\nasync function sleep(waitTime: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, waitTime));\n}\n"],"names":[],"mappings":";;;AAYM,SAAU,iBAAiB,CAAC,EAChC,YAAY,EACZ,cAAc,GAAG,KAAK,EACtB,MAAM,GAAG,MAAM,EACf,oBAAoB,GAAG,eAAe,EACtC,cAAc,GAAG,sBAAsB,GACd,EAAA;IACzB,MAAM,SAAS,GAAG,OAChB,aAAyC,EACzC,KAAa,EACb,UAAkB,KACoB;AACtC,QAAA,MAAM,SAAS,GAAG,KAAK,GAAG,CAAC;AAC3B,QAAA,MAAM,QAAQ,GAAG,UAAU,GAAG,CAAC;AAC/B,QAAA,IAAI,QAA8B;AAElC,QAAA,IAAI;AACF,YAAA,QAAQ,GAAG,MAAM,cAAc,CAAC,GAAG,aAAa,CAAC;AAEjD,YAAA,YAAY,CAAC;AACX,gBAAA,IAAI,EAAE,eAAe;AACrB,gBAAA,OAAO,EAAE;oBACP,aAAa;oBACb,QAAQ;AACT,iBAAA;AACF,aAAA,CAAC;YAEF,IACE,CAAC,QAAQ,CAAC,EAAE;AACZ,gBAAA,cAAc,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC;gBACxC,SAAS,IAAI,QAAQ,EACrB;gBACA,MAAM,IAAI,KAAK,EAAE;YACnB;AAEA,YAAA,MAAM,iBAAiB,GACrB,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAC,IAAI,EAAE;YAChE,IAAI,iBAAiB,EAAE;AACrB,gBAAA,YAAY,CAAC;AACX,oBAAA,IAAI,EAAE,0CAA0C;AAChD,oBAAA,OAAO,EAAE;wBACP,aAAa;wBACb,iBAAiB;AAClB,qBAAA;AACF,iBAAA,CAAC;YACJ;AAEA,YAAA,OAAO,QAAQ;QACjB;QAAE,OAAO,KAAK,EAAE;AACd,YAAA,IAAI,SAAS,IAAI,QAAQ,EAAE;gBACzB,MAAM,UAAU,GAAG,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC;AACvD,gBAAA,MAAM,KAAK,CACT,UAAU,GAAG,QAAQ,CAAC,UAAU,EAAE,EAAE,CAAC,GAAG,oBAAoB,CAC7D;AAED,gBAAA,YAAY,CAAC;AACX,oBAAA,IAAI,EAAE,YAAY;AAClB,oBAAA,OAAO,EAAE;wBACP,aAAa;AACb,wBAAA,YAAY,EAAE,QAAQ;AACtB,wBAAA,YAAY,EAAE,KAAK;wBACnB,UAAU;AACX,qBAAA;AACF,iBAAA,CAAC;gBAEF,OAAO,SAAS,CAAC,aAAa,EAAE,SAAS,EAAE,UAAU,CAAC;YACxD;YAEA,MAAM,IAAI,KAAK,CACb,kBAAkB,CAChB,CAAA,EACE,UAAU,GAAG;kBACT,CAAA,4BAAA,EAA+B,UAAU,CAAA,iCAAA;AAC3C,kBAAE,EACN,CAAA,EAAG,eAAe,CAAC,KAAK,CAAC,CAAA,CAAE,EAC3B,MAAM,CACP,CACF;QACH;AACF,IAAA,CAAC;AAED,IAAA,OAAO,SAAS;AAClB;AAEA,eAAe,KAAK,CAAC,QAAgB,EAAA;AACnC,IAAA,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,KAAK,UAAU,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;AAChE;;;;"}