{"version":3,"file":"error-handler.js","sources":["../src/error-handler.ts"],"sourcesContent":["import isPlainObject from 'lodash/isPlainObject.js'\nimport type { ContentfulErrorData } from './types.js'\n\nfunction obscureHeaders(config: any) {\n  // Management, Delivery and Preview API tokens\n  if (config?.headers?.['Authorization']) {\n    const token = `...${config.headers['Authorization'].toString().substr(-5)}`\n    config.headers['Authorization'] = `Bearer ${token}`\n  }\n  // Encoded Delivery or Preview token map for Cross-Space References\n  if (config?.headers?.['X-Contentful-Resource-Resolution']) {\n    const token = `...${config.headers['X-Contentful-Resource-Resolution'].toString().substr(-5)}`\n    config.headers['X-Contentful-Resource-Resolution'] = token\n  }\n}\n\n/**\n * Handles errors received from the server. Parses the error into a more useful\n * format, places it in an exception and throws it.\n * See https://www.contentful.com/developers/docs/references/errors/\n * for more details on the data received on the errorResponse.data property\n * and the expected error codes.\n * @private\n */\nexport default function errorHandler(errorResponse: any): never {\n  const { config, response } = errorResponse\n  let errorName\n\n  obscureHeaders(config)\n\n  if (!isPlainObject(response) || !isPlainObject(config)) {\n    throw errorResponse\n  }\n\n  const data = response?.data\n\n  const errorData: ContentfulErrorData = {\n    status: response?.status,\n    statusText: response?.statusText,\n    message: '',\n    details: {},\n  }\n\n  if (config && isPlainObject(config)) {\n    errorData.request = {\n      url: config.url,\n      headers: config.headers,\n      method: config.method,\n      payloadData: config.data,\n    }\n  }\n  if (data && typeof data === 'object') {\n    if ('requestId' in data) {\n      errorData.requestId = data.requestId || 'UNKNOWN'\n    }\n    if ('message' in data) {\n      errorData.message = data.message || ''\n    }\n    if ('details' in data) {\n      errorData.details = data.details || {}\n    }\n    errorName = data.sys?.id\n  }\n\n  const error = new Error()\n  error.name =\n    errorName && errorName !== 'Unknown' ? errorName : `${response?.status} ${response?.statusText}`\n\n  try {\n    error.message = JSON.stringify(errorData, null, '  ')\n  } catch {\n    error.message = errorData?.message ?? ''\n  }\n  throw error\n}\n"],"names":[],"mappings":";;AAGA,SAAS,cAAc,CAAC,MAAW,EAAA;;IAEjC,IAAI,MAAM,EAAE,OAAO,GAAG,eAAe,CAAC,EAAE;AACtC,QAAA,MAAM,KAAK,GAAG,CAAA,GAAA,EAAM,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,QAAQ,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE;QAC3E,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,GAAG,CAAA,OAAA,EAAU,KAAK,CAAA,CAAE;IACrD;;IAEA,IAAI,MAAM,EAAE,OAAO,GAAG,kCAAkC,CAAC,EAAE;AACzD,QAAA,MAAM,KAAK,GAAG,CAAA,GAAA,EAAM,MAAM,CAAC,OAAO,CAAC,kCAAkC,CAAC,CAAC,QAAQ,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE;AAC9F,QAAA,MAAM,CAAC,OAAO,CAAC,kCAAkC,CAAC,GAAG,KAAK;IAC5D;AACF;AAEA;;;;;;;AAOG;AACW,SAAU,YAAY,CAAC,aAAkB,EAAA;AACrD,IAAA,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,aAAa;AAC1C,IAAA,IAAI,SAAS;IAEb,cAAc,CAAC,MAAM,CAAC;AAEtB,IAAA,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE;AACtD,QAAA,MAAM,aAAa;IACrB;AAEA,IAAA,MAAM,IAAI,GAAG,QAAQ,EAAE,IAAI;AAE3B,IAAA,MAAM,SAAS,GAAwB;QACrC,MAAM,EAAE,QAAQ,EAAE,MAAM;QACxB,UAAU,EAAE,QAAQ,EAAE,UAAU;AAChC,QAAA,OAAO,EAAE,EAAE;AACX,QAAA,OAAO,EAAE,EAAE;KACZ;AAED,IAAA,IAAI,MAAM,IAAI,aAAa,CAAC,MAAM,CAAC,EAAE;QACnC,SAAS,CAAC,OAAO,GAAG;YAClB,GAAG,EAAE,MAAM,CAAC,GAAG;YACf,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,WAAW,EAAE,MAAM,CAAC,IAAI;SACzB;IACH;AACA,IAAA,IAAI,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;AACpC,QAAA,IAAI,WAAW,IAAI,IAAI,EAAE;YACvB,SAAS,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,SAAS;QACnD;AACA,QAAA,IAAI,SAAS,IAAI,IAAI,EAAE;YACrB,SAAS,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,EAAE;QACxC;AACA,QAAA,IAAI,SAAS,IAAI,IAAI,EAAE;YACrB,SAAS,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,EAAE;QACxC;AACA,QAAA,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,EAAE;IAC1B;AAEA,IAAA,MAAM,KAAK,GAAG,IAAI,KAAK,EAAE;AACzB,IAAA,KAAK,CAAC,IAAI;QACR,SAAS,IAAI,SAAS,KAAK,SAAS,GAAG,SAAS,GAAG,CAAA,EAAG,QAAQ,EAAE,MAAM,CAAA,CAAA,EAAI,QAAQ,EAAE,UAAU,EAAE;AAElG,IAAA,IAAI;AACF,QAAA,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,CAAC;IACvD;AAAE,IAAA,MAAM;QACN,KAAK,CAAC,OAAO,GAAG,SAAS,EAAE,OAAO,IAAI,EAAE;IAC1C;AACA,IAAA,MAAM,KAAK;AACb;;;;"}