{"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;;;;"}