{"version":3,"file":"helpers.a7d5f363.js","sources":["../../../node_modules/cookie/index.js","../../../node_modules/universal-cookie/es6/utils.js","../../../node_modules/universal-cookie/es6/Cookies.js","../../../frontend/features/ideation/utils/userAuthenticate.js","../../../frontend/api/v3/helpers.js"],"sourcesContent":["/*!\n * cookie\n * Copyright(c) 2012-2014 Roman Shtylman\n * Copyright(c) 2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module exports.\n * @public\n */\n\nexports.parse = parse;\nexports.serialize = serialize;\n\n/**\n * Module variables.\n * @private\n */\n\nvar decode = decodeURIComponent;\nvar encode = encodeURIComponent;\n\n/**\n * RegExp to match field-content in RFC 7230 sec 3.2\n *\n * field-content = field-vchar [ 1*( SP / HTAB ) field-vchar ]\n * field-vchar   = VCHAR / obs-text\n * obs-text      = %x80-FF\n */\n\nvar fieldContentRegExp = /^[\\u0009\\u0020-\\u007e\\u0080-\\u00ff]+$/;\n\n/**\n * Parse a cookie header.\n *\n * Parse the given cookie header string into an object\n * The object has the various cookies as keys(names) => values\n *\n * @param {string} str\n * @param {object} [options]\n * @return {object}\n * @public\n */\n\nfunction parse(str, options) {\n  if (typeof str !== 'string') {\n    throw new TypeError('argument str must be a string');\n  }\n\n  var obj = {}\n  var opt = options || {};\n  var pairs = str.split(';')\n  var dec = opt.decode || decode;\n\n  for (var i = 0; i < pairs.length; i++) {\n    var pair = pairs[i];\n    var index = pair.indexOf('=')\n\n    // skip things that don't look like key=value\n    if (index < 0) {\n      continue;\n    }\n\n    var key = pair.substring(0, index).trim()\n\n    // only assign once\n    if (undefined == obj[key]) {\n      var val = pair.substring(index + 1, pair.length).trim()\n\n      // quoted values\n      if (val[0] === '\"') {\n        val = val.slice(1, -1)\n      }\n\n      obj[key] = tryDecode(val, dec);\n    }\n  }\n\n  return obj;\n}\n\n/**\n * Serialize data into a cookie header.\n *\n * Serialize the a name value pair into a cookie string suitable for\n * http headers. An optional options object specified cookie parameters.\n *\n * serialize('foo', 'bar', { httpOnly: true })\n *   => \"foo=bar; httpOnly\"\n *\n * @param {string} name\n * @param {string} val\n * @param {object} [options]\n * @return {string}\n * @public\n */\n\nfunction serialize(name, val, options) {\n  var opt = options || {};\n  var enc = opt.encode || encode;\n\n  if (typeof enc !== 'function') {\n    throw new TypeError('option encode is invalid');\n  }\n\n  if (!fieldContentRegExp.test(name)) {\n    throw new TypeError('argument name is invalid');\n  }\n\n  var value = enc(val);\n\n  if (value && !fieldContentRegExp.test(value)) {\n    throw new TypeError('argument val is invalid');\n  }\n\n  var str = name + '=' + value;\n\n  if (null != opt.maxAge) {\n    var maxAge = opt.maxAge - 0;\n\n    if (isNaN(maxAge) || !isFinite(maxAge)) {\n      throw new TypeError('option maxAge is invalid')\n    }\n\n    str += '; Max-Age=' + Math.floor(maxAge);\n  }\n\n  if (opt.domain) {\n    if (!fieldContentRegExp.test(opt.domain)) {\n      throw new TypeError('option domain is invalid');\n    }\n\n    str += '; Domain=' + opt.domain;\n  }\n\n  if (opt.path) {\n    if (!fieldContentRegExp.test(opt.path)) {\n      throw new TypeError('option path is invalid');\n    }\n\n    str += '; Path=' + opt.path;\n  }\n\n  if (opt.expires) {\n    if (typeof opt.expires.toUTCString !== 'function') {\n      throw new TypeError('option expires is invalid');\n    }\n\n    str += '; Expires=' + opt.expires.toUTCString();\n  }\n\n  if (opt.httpOnly) {\n    str += '; HttpOnly';\n  }\n\n  if (opt.secure) {\n    str += '; Secure';\n  }\n\n  if (opt.sameSite) {\n    var sameSite = typeof opt.sameSite === 'string'\n      ? opt.sameSite.toLowerCase() : opt.sameSite;\n\n    switch (sameSite) {\n      case true:\n        str += '; SameSite=Strict';\n        break;\n      case 'lax':\n        str += '; SameSite=Lax';\n        break;\n      case 'strict':\n        str += '; SameSite=Strict';\n        break;\n      case 'none':\n        str += '; SameSite=None';\n        break;\n      default:\n        throw new TypeError('option sameSite is invalid');\n    }\n  }\n\n  return str;\n}\n\n/**\n * Try decoding a string using a decoding function.\n *\n * @param {string} str\n * @param {function} decode\n * @private\n */\n\nfunction tryDecode(str, decode) {\n  try {\n    return decode(str);\n  } catch (e) {\n    return str;\n  }\n}\n","import * as cookie from 'cookie';\r\nexport function hasDocumentCookie() {\r\n    // Can we get/set cookies on document.cookie?\r\n    return typeof document === 'object' && typeof document.cookie === 'string';\r\n}\r\nexport function cleanCookies() {\r\n    document.cookie.split(';').forEach(function (c) {\r\n        document.cookie = c\r\n            .replace(/^ +/, '')\r\n            .replace(/=.*/, '=;expires=' + new Date().toUTCString() + ';path=/');\r\n    });\r\n}\r\nexport function parseCookies(cookies, options) {\r\n    if (typeof cookies === 'string') {\r\n        return cookie.parse(cookies, options);\r\n    }\r\n    else if (typeof cookies === 'object' && cookies !== null) {\r\n        return cookies;\r\n    }\r\n    else {\r\n        return {};\r\n    }\r\n}\r\nexport function isParsingCookie(value, doNotParse) {\r\n    if (typeof doNotParse === 'undefined') {\r\n        // We guess if the cookie start with { or [, it has been serialized\r\n        doNotParse =\r\n            !value || (value[0] !== '{' && value[0] !== '[' && value[0] !== '\"');\r\n    }\r\n    return !doNotParse;\r\n}\r\nexport function readCookie(value, options) {\r\n    if (options === void 0) { options = {}; }\r\n    var cleanValue = cleanupCookieValue(value);\r\n    if (isParsingCookie(cleanValue, options.doNotParse)) {\r\n        try {\r\n            return JSON.parse(cleanValue);\r\n        }\r\n        catch (e) {\r\n            // At least we tried\r\n        }\r\n    }\r\n    // Ignore clean value if we failed the deserialization\r\n    // It is not relevant anymore to trim those values\r\n    return value;\r\n}\r\nfunction cleanupCookieValue(value) {\r\n    // express prepend j: before serializing a cookie\r\n    if (value && value[0] === 'j' && value[1] === ':') {\r\n        return value.substr(2);\r\n    }\r\n    return value;\r\n}\r\n","var __assign = (this && this.__assign) || function () {\r\n    __assign = Object.assign || function(t) {\r\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n            s = arguments[i];\r\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\r\n                t[p] = s[p];\r\n        }\r\n        return t;\r\n    };\r\n    return __assign.apply(this, arguments);\r\n};\r\nimport * as cookie from 'cookie';\r\nimport { hasDocumentCookie, parseCookies, readCookie } from './utils';\r\nvar Cookies = /** @class */ (function () {\r\n    function Cookies(cookies, options) {\r\n        var _this = this;\r\n        this.changeListeners = [];\r\n        this.HAS_DOCUMENT_COOKIE = false;\r\n        this.cookies = parseCookies(cookies, options);\r\n        new Promise(function () {\r\n            _this.HAS_DOCUMENT_COOKIE = hasDocumentCookie();\r\n        }).catch(function () { });\r\n    }\r\n    Cookies.prototype._updateBrowserValues = function (parseOptions) {\r\n        if (!this.HAS_DOCUMENT_COOKIE) {\r\n            return;\r\n        }\r\n        this.cookies = cookie.parse(document.cookie, parseOptions);\r\n    };\r\n    Cookies.prototype._emitChange = function (params) {\r\n        for (var i = 0; i < this.changeListeners.length; ++i) {\r\n            this.changeListeners[i](params);\r\n        }\r\n    };\r\n    Cookies.prototype.get = function (name, options, parseOptions) {\r\n        if (options === void 0) { options = {}; }\r\n        this._updateBrowserValues(parseOptions);\r\n        return readCookie(this.cookies[name], options);\r\n    };\r\n    Cookies.prototype.getAll = function (options, parseOptions) {\r\n        if (options === void 0) { options = {}; }\r\n        this._updateBrowserValues(parseOptions);\r\n        var result = {};\r\n        for (var name_1 in this.cookies) {\r\n            result[name_1] = readCookie(this.cookies[name_1], options);\r\n        }\r\n        return result;\r\n    };\r\n    Cookies.prototype.set = function (name, value, options) {\r\n        var _a;\r\n        if (typeof value === 'object') {\r\n            value = JSON.stringify(value);\r\n        }\r\n        this.cookies = __assign(__assign({}, this.cookies), (_a = {}, _a[name] = value, _a));\r\n        if (this.HAS_DOCUMENT_COOKIE) {\r\n            document.cookie = cookie.serialize(name, value, options);\r\n        }\r\n        this._emitChange({ name: name, value: value, options: options });\r\n    };\r\n    Cookies.prototype.remove = function (name, options) {\r\n        var finalOptions = (options = __assign(__assign({}, options), { expires: new Date(1970, 1, 1, 0, 0, 1), maxAge: 0 }));\r\n        this.cookies = __assign({}, this.cookies);\r\n        delete this.cookies[name];\r\n        if (this.HAS_DOCUMENT_COOKIE) {\r\n            document.cookie = cookie.serialize(name, '', finalOptions);\r\n        }\r\n        this._emitChange({ name: name, value: undefined, options: options });\r\n    };\r\n    Cookies.prototype.addChangeListener = function (callback) {\r\n        this.changeListeners.push(callback);\r\n    };\r\n    Cookies.prototype.removeChangeListener = function (callback) {\r\n        var idx = this.changeListeners.indexOf(callback);\r\n        if (idx >= 0) {\r\n            this.changeListeners.splice(idx, 1);\r\n        }\r\n    };\r\n    return Cookies;\r\n}());\r\nexport default Cookies;\r\n","// Libraries\nimport Cookies from 'universal-cookie';\n\nconst cookies = new Cookies();\n\nexport const getUserToken = () => {\n  return cookies.get(gon.jwtCookieName) || '';\n};\n\nexport const userAuthenticated = () => {\n  return Boolean(getUserToken());\n};\n","// Libraries\nimport camelcaseKeys from 'camelcase-keys';\nimport { isArray, isNumber, isObject } from 'underscore';\nimport { currentLanguage } from 'i18n';\n\n// Errors\nimport { logError } from 'common/utils/errors';\nimport { jsonaDeserialize } from 'common/utils/helpers';\n\n// Utils\nimport { getUserToken, userAuthenticated } from 'ideation/utils/userAuthenticate';\n\nconst API_BASE_URL = '/api/v3';\nconst JSON_API_MEDIA = 'application/vnd.api+json';\nconst DEFAULT_HEADERS = {\n  'X-CSRF-Token': document.querySelector('meta[name=\"csrf-token\"]')?.getAttribute('content'),\n  'Content-Language': currentLanguage,\n  accept: JSON_API_MEDIA,\n};\n\nexport class FetchError extends Error {\n  constructor(message, status, statusText) {\n    super(message);\n    this.name = 'FetchError';\n    this.status = status;\n    this.statusText = statusText;\n  }\n}\n\nfunction defaultHeaders() {\n  if (userAuthenticated()) {\n    return { ...DEFAULT_HEADERS, authorization: `bearer ${getUserToken()}` };\n  }\n\n  return DEFAULT_HEADERS;\n}\n\nfunction queryString(originalParams) {\n  const params = new URLSearchParams();\n\n  for (const [paramKey, paramValue] of Object.entries(originalParams)) {\n    if (!paramValue && !isNumber(paramValue)) continue;\n\n    if (isObject(paramValue) && !isArray(paramValue)) {\n      for (const [key, value] of Object.entries(paramValue)) {\n        params.append(`${paramKey}[${key}]`, value);\n      }\n    } else {\n      params.append(paramKey, paramValue);\n    }\n  }\n\n  return params.toString();\n}\n\nexport function privateApiUrl(endpoint, params = {}) {\n  let url = `${API_BASE_URL}/private/${endpoint}`;\n\n  if (Object.keys.length) {\n    url += `?${queryString(params)}`;\n  }\n\n  return url;\n}\n\nexport function publicApiUrl(endpoint, params = {}) {\n  return `${API_BASE_URL}/public/${endpoint}?${queryString(params)}`;\n}\n\n//  eslint-disable-next-line\nasync function request(url, method = 'GET', headers = {}, body) {\n  try {\n    const response = await fetch(url, {\n      headers: { ...defaultHeaders(), ...headers },\n      method,\n      body,\n    });\n\n    if (response.ok) {\n      if (response.status === 204) {\n        return '';\n      }\n\n      const json = await response.json();\n\n      if (json.data) {\n        const deserialized = jsonaDeserialize(json);\n        const links = json.links && camelcaseKeys(json.links, { deep: true });\n        const meta = json.meta && camelcaseKeys(json.meta, { deep: true });\n\n        return { deserialized, links, meta };\n      }\n\n      return json;\n    }\n\n    const error = new FetchError(\n      `${response.status} code returned for ${method} ${url}`,\n      response.status,\n      response.statusText\n    );\n\n    try {\n      error.body = await response.json();\n      throw error;\n    } catch {\n      throw error;\n    }\n  } catch (error) {\n    logError(error);\n    throw error;\n  }\n}\n\nexport function getRequest(url) {\n  return request(url, 'GET');\n}\n\nexport function postRequest(url, body) {\n  return request(url, 'POST', { 'content-type': JSON_API_MEDIA }, JSON.stringify(body));\n}\n\nexport function putRequest(url, body) {\n  return request(url, 'PUT', { 'content-type': JSON_API_MEDIA }, JSON.stringify(body));\n}\n\nexport function deleteRequest(url, body) {\n  return request(url, 'DELETE', { 'content-type': JSON_API_MEDIA }, JSON.stringify(body));\n}\n"],"names":["parse_1","parse","serialize_1","serialize","decode","encode","fieldContentRegExp","str","options","obj","opt","pairs","dec","i","pair","index","key","val","tryDecode","name","enc","value","maxAge","sameSite","hasDocumentCookie","parseCookies","cookies","cookie.parse","isParsingCookie","doNotParse","readCookie","cleanValue","cleanupCookieValue","__assign","this","s","p","Cookies","_this","parseOptions","params","result","name_1","_a","cookie.serialize","finalOptions","callback","idx","Cookies$1","getUserToken","userAuthenticated","API_BASE_URL","JSON_API_MEDIA","DEFAULT_HEADERS","currentLanguage","FetchError","message","status","statusText","defaultHeaders","queryString","originalParams","paramKey","paramValue","isNumber","isObject","isArray","privateApiUrl","endpoint","url","publicApiUrl","request","method","headers","body","response","json","deserialized","jsonaDeserialize","links","camelcaseKeys","meta","error","logError","getRequest","postRequest","putRequest","deleteRequest"],"mappings":"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"}