{"version":3,"file":"helper.e8b7adfa.js","sources":["../../../node_modules/json-stringify-safe/stringify.js","../../../frontend/api/rest/helper.js"],"sourcesContent":["exports = module.exports = stringify\nexports.getSerialize = serializer\n\nfunction stringify(obj, replacer, spaces, cycleReplacer) {\n  return JSON.stringify(obj, serializer(replacer, cycleReplacer), spaces)\n}\n\nfunction serializer(replacer, cycleReplacer) {\n  var stack = [], keys = []\n\n  if (cycleReplacer == null) cycleReplacer = function(key, value) {\n    if (stack[0] === value) return \"[Circular ~]\"\n    return \"[Circular ~.\" + keys.slice(0, stack.indexOf(value)).join(\".\") + \"]\"\n  }\n\n  return function(key, value) {\n    if (stack.length > 0) {\n      var thisPos = stack.indexOf(this)\n      ~thisPos ? stack.splice(thisPos + 1) : stack.push(this)\n      ~thisPos ? keys.splice(thisPos, Infinity, key) : keys.push(key)\n      if (~stack.indexOf(value)) value = cycleReplacer.call(this, key, value)\n    }\n    else stack.push(value)\n\n    return replacer == null ? value : replacer.call(this, key, value)\n  }\n}\n","// Libraries\nimport stringify from 'json-stringify-safe';\n\n// Utils\nimport { currentLanguage } from 'i18n';\nimport { jsonaDeserialize } from 'common/utils/helpers';\n\n// Errors\nimport { logError } from 'common/utils/errors';\n\nconst API_BASE_URL = '/api/v1';\n\nfunction generateHeaders() {\n  return {\n    'X-CSRF-Token': document.querySelector('meta[name=\"csrf-token\"]').getAttribute('content'),\n    'Content-Type': 'application/vnd.api+json',\n  };\n}\n\nexport function createQueryString(params = {}) {\n  const queryParams = new URLSearchParams();\n  Object.entries(params).forEach(([key, value]) => {\n    if (Array.isArray(value)) {\n      if (value.length) {\n        value.map((v) => queryParams.append(`${key}[]`, v));\n      } else {\n        queryParams.append(`${key}[]`, value);\n      }\n    } else {\n      queryParams.append(encodeURIComponent(key), encodeURIComponent(value));\n    }\n  });\n\n  return queryParams.toString();\n}\n\n// eslint-disable-next-line default-param-last\nexport async function apiCall(url, method = 'GET', body, retries = 0) {\n  try {\n    const response = await fetch(API_BASE_URL + url, {\n      headers: generateHeaders(),\n      method,\n      body,\n    });\n\n    if (!response.ok) {\n      const error = new Error(response.statusText);\n      try {\n        error.details = await response.json();\n      } catch {\n        throw error;\n      }\n      throw error;\n    }\n\n    return response.json();\n  } catch (e) {\n    logError(e);\n    if (retries < 3) {\n      const backoffDelay = 100 * 2 ** retries;\n      await new Promise((resolve) => {\n        setTimeout(resolve, backoffDelay);\n      });\n      console.warn(`Retrying request in ${backoffDelay}ms to ${url} after error: ${e}`);\n      return apiCall(url, method, body, retries + 1);\n    }\n    throw e;\n  }\n}\n\nexport function createResponseBody(question, submission, response) {\n  return JSON.stringify({\n    data: {\n      type: 'response',\n      attributes: {\n        answer: stringify(response),\n        locale: currentLanguage,\n      },\n      relationships: {\n        submission: {\n          data: { type: 'submission', id: submission.id, guid: submission.guid },\n        },\n        question: {\n          data: { type: 'question', id: question.id },\n        },\n      },\n    },\n  });\n}\n\nexport async function fetcher(requestFn, ...args) {\n  const response = await requestFn(...args);\n  if (response.data) return jsonaDeserialize(response);\n  return response;\n}\n"],"names":["exports","module","stringify","serializer","obj","replacer","spaces","cycleReplacer","stack","keys","key","value","thisPos","API_BASE_URL","generateHeaders","createQueryString","params","queryParams","v","apiCall","url","method","body","retries","response","error","e","logError","backoffDelay","resolve","createResponseBody","question","submission","currentLanguage","fetcher","requestFn","args","jsonaDeserialize"],"mappings":"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"}