{"version":3,"file":"helper.982a1271.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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"}