{
  "version": 3,
  "sources": ["../../../../src/packages/fetch/fetch.ts"],
  "sourcesContent": ["import assert from 'node:assert';\nimport util from 'node:util';\nimport { requestRetryLogger } from '../core-loggers/index.ts';\nimport { operation, type RetryTimeoutOptions } from '@zkochan/retry';\nimport nodeFetch, {\n  type Request,\n  type RequestInit as NodeRequestInit,\n  Response,\n} from 'node-fetch';\n\nexport { isRedirect } from 'node-fetch';\n\nexport { Response, type RetryTimeoutOptions };\n\ntype URLLike = {\n  href: string;\n};\n\nconst NO_RETRY_ERROR_CODES = new Set([\n  'SELF_SIGNED_CERT_IN_CHAIN',\n  'ERR_OSSL_PEM_NO_START_LINE',\n]);\n\nexport type RequestInfo = string | URLLike | Request;\n\nexport interface RequestInit extends NodeRequestInit {\n  retry?: RetryTimeoutOptions | undefined;\n  timeout?: number | undefined;\n}\n\nexport async function fetch(\n  url: RequestInfo,\n  opts: RequestInit = {}\n): Promise<Response> {\n  const retryOpts = opts.retry ?? {};\n  const maxRetries = retryOpts.retries ?? 2;\n\n  const op = operation({\n    factor: retryOpts.factor ?? 10,\n    maxTimeout: retryOpts.maxTimeout ?? 60_000,\n    minTimeout: retryOpts.minTimeout ?? 10_000,\n    randomize: false,\n    retries: maxRetries,\n  });\n\n  try {\n    return await new Promise((resolve, reject): void => {\n      op.attempt(async (attempt: number): Promise<void> => {\n        try {\n          // this will be retried\n          const res = await nodeFetch(url.toString(), opts);\n          // A retry on 409 sometimes helps when making requests to the Bit registry.\n          if (\n            (res.status >= 500 && res.status < 600) ||\n            [408, 409, 420, 429].includes(res.status)\n          ) {\n            throw new ResponseError(res);\n          }\n\n          resolve(res);\n        } catch (error: unknown) {\n          assert(util.types.isNativeError(error));\n\n          if (\n            'code' in error &&\n            typeof error.code === 'string' &&\n            NO_RETRY_ERROR_CODES.has(error.code)\n          ) {\n            throw error;\n          }\n\n          const timeout = op.retry(error);\n\n          if (timeout === false) {\n            reject(op.mainError());\n\n            return;\n          }\n\n          requestRetryLogger.debug({\n            attempt,\n            error,\n            maxRetries,\n            method: opts.method ?? 'GET',\n            timeout,\n            url: url.toString(),\n          });\n        }\n      });\n    });\n  } catch (err: unknown) {\n    if (err instanceof ResponseError) {\n      return err.res;\n    }\n\n    throw err;\n  }\n}\n\nexport class ResponseError extends Error {\n  res: Response;\n  code: number;\n  status: number;\n  statusCode: number;\n  url: string;\n\n  constructor(res: Response) {\n    super(res.statusText);\n\n    if (typeof Error.captureStackTrace === 'function') {\n      Error.captureStackTrace(this, ResponseError);\n    }\n\n    this.name = this.constructor.name;\n    this.res = res;\n\n    // backward compat\n    this.code = this.status = this.statusCode = res.status;\n    this.url = res.url;\n  }\n}\n"],
  "mappings": "AAAA,OAAO,YAAY;AACnB,OAAO,UAAU;AACjB,SAAS,0BAA0B;AACnC,SAAS,iBAA2C;AACpD,OAAO;AAAA,EAGL;AAAA,OACK;AAEP,SAAS,kBAAkB;AAQ3B,MAAM,uBAAuB,oBAAI,IAAI;AAAA,EACnC;AAAA,EACA;AACF,CAAC;AASD,eAAsB,MACpB,KACA,OAAoB,CAAC,GACF;AACnB,QAAM,YAAY,KAAK,SAAS,CAAC;AACjC,QAAM,aAAa,UAAU,WAAW;AAExC,QAAM,KAAK,UAAU;AAAA,IACnB,QAAQ,UAAU,UAAU;AAAA,IAC5B,YAAY,UAAU,cAAc;AAAA,IACpC,YAAY,UAAU,cAAc;AAAA,IACpC,WAAW;AAAA,IACX,SAAS;AAAA,EACX,CAAC;AAED,MAAI;AACF,WAAO,MAAM,IAAI,QAAQ,CAAC,SAAS,WAAiB;AAClD,SAAG,QAAQ,OAAO,YAAmC;AACnD,YAAI;AAEF,gBAAM,MAAM,MAAM,UAAU,IAAI,SAAS,GAAG,IAAI;AAEhD,cACG,IAAI,UAAU,OAAO,IAAI,SAAS,OACnC,CAAC,KAAK,KAAK,KAAK,GAAG,EAAE,SAAS,IAAI,MAAM,GACxC;AACA,kBAAM,IAAI,cAAc,GAAG;AAAA,UAC7B;AAEA,kBAAQ,GAAG;AAAA,QACb,SAAS,OAAgB;AACvB,iBAAO,KAAK,MAAM,cAAc,KAAK,CAAC;AAEtC,cACE,UAAU,SACV,OAAO,MAAM,SAAS,YACtB,qBAAqB,IAAI,MAAM,IAAI,GACnC;AACA,kBAAM;AAAA,UACR;AAEA,gBAAM,UAAU,GAAG,MAAM,KAAK;AAE9B,cAAI,YAAY,OAAO;AACrB,mBAAO,GAAG,UAAU,CAAC;AAErB;AAAA,UACF;AAEA,6BAAmB,MAAM;AAAA,YACvB;AAAA,YACA;AAAA,YACA;AAAA,YACA,QAAQ,KAAK,UAAU;AAAA,YACvB;AAAA,YACA,KAAK,IAAI,SAAS;AAAA,UACpB,CAAC;AAAA,QACH;AAAA,MACF,CAAC;AAAA,IACH,CAAC;AAAA,EACH,SAAS,KAAc;AACrB,QAAI,eAAe,eAAe;AAChC,aAAO,IAAI;AAAA,IACb;AAEA,UAAM;AAAA,EACR;AACF;AAEO,MAAM,sBAAsB,MAAM;AAAA,EACvC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA,YAAY,KAAe;AACzB,UAAM,IAAI,UAAU;AAEpB,QAAI,OAAO,MAAM,sBAAsB,YAAY;AACjD,YAAM,kBAAkB,MAAM,aAAa;AAAA,IAC7C;AAEA,SAAK,OAAO,KAAK,YAAY;AAC7B,SAAK,MAAM;AAGX,SAAK,OAAO,KAAK,SAAS,KAAK,aAAa,IAAI;AAChD,SAAK,MAAM,IAAI;AAAA,EACjB;AACF;",
  "names": []
}
