{
  "version": 3,
  "sources": ["../../src/modern/redux/middleware/callAPI.js", "../../src/modern/redux/actions/messages.js", "../../src/modern/redux/actions/api.js"],
  "sourcesContent": ["import { internalErrorMessage } from '../actions/messages.js'\nimport { unAuthorizedAPIError, forbiddenAPIError } from '../actions/api.js'\n\nexport const callAPIMiddleware = store => next => action => {\n  const { dispatch } = store\n\n  if (!action || Object.prototype.toString.call(action) !== '[object Object]') {\n    throw new Error('Expected an object \u2019action\u2019')\n  }\n\n  const { promise, types, ...rest } = action\n\n  // simple action\n  if (!promise) {\n    return next(action)\n  }\n\n  if (!types || !Array.isArray(types) || types.length !== 3 || !types.every(type => typeof type === 'string')) {\n    throw new Error('Expected an array of three string types')\n  }\n\n  if (typeof promise !== 'function') {\n    throw new Error(\"Expected a function 'promise'\")\n  }\n\n  const [REQUEST_TYPE, SUCCESS_TYPE, FAILURE_TYPE] = types\n\n  // dispatch start request\n  next({ ...rest, type: REQUEST_TYPE })\n\n  return promise(dispatch)\n    .then(response => next({ ...rest, response, type: SUCCESS_TYPE, status: { isSuccess: true, isFailure: false } })) // dispatch success event\n    .catch(({ statusCode, error, url = '' } = {}) => {\n      // internal errors\n      if (statusCode && (statusCode > 422 || statusCode === 405)) {\n        return next(internalErrorMessage())\n      }\n\n      if (statusCode && statusCode === 403) {\n        return next(\n          forbiddenAPIError({\n            ...rest,\n            statusCode,\n            error,\n            type: FAILURE_TYPE,\n            status: { isSuccess: false, isFailure: true }\n          })\n        )\n      }\n\n      if (statusCode && statusCode === 401) {\n        return next(\n          unAuthorizedAPIError({\n            ...rest,\n            statusCode,\n            error,\n            url,\n            type: FAILURE_TYPE,\n            status: { isSuccess: false, isFailure: true }\n          })\n        )\n      }\n\n      // dispatch failure event\n      return next({ ...rest, statusCode, error, type: FAILURE_TYPE, status: { isSuccess: false, isFailure: true } })\n    })\n}\n", "import { t } from '@ulule/localize'\n\nexport const ERROR_MESSAGE = 'ERROR_MESSAGE'\nexport const SUCCESS_MESSAGE = 'SUCCESS_MESSAGE'\nexport const INFO_MESSAGE = 'INFO_MESSAGE'\nexport const CLEAN_MESSAGE = 'CLEAN_MESSAGE'\n\nconst createMessage = (type = '', status = '', messages = [], id) => {\n  let message = { type, status, messages }\n\n  if (id !== undefined) {\n    message = {\n      ...message,\n      id\n    }\n  }\n\n  return message\n}\n\nexport const errorMessage = createMessage.bind(null, ERROR_MESSAGE, 'error')\n\nexport const internalErrorMessage = () =>\n  errorMessage([{ message: t('Oops, an internal error has occurred... Please retry!') }], 'internal_error')\n\nexport const successMessage = createMessage.bind(null, SUCCESS_MESSAGE, 'success')\n\nexport const infoMessage = createMessage.bind(null, INFO_MESSAGE, 'info')\n\nexport const cleanMessage = param => ({\n  type: CLEAN_MESSAGE,\n  param\n})\n", "import { api } from '$utils/apiRequester'\nimport config from '$utils/config'\n\n/**\n *  unprotectedUrls: all urls that should not be protected with the accessToken.\n *  If api return a 401, we do not redirect to the register view\n */\nconst getUnprotectedUrls = () => {\n  const ululeMe = config.get('api').ulule.url + '/me'\n  return [ululeMe]\n}\n\n/**\n * unAuthorizedAPIError: redirect to ulule connect when api return a 401\n * @param  {object} action redux action\n * @return {object}        redux action\n */\nexport const unAuthorizedAPIError = action => {\n  const next = encodeURIComponent(window.location.href)\n  const lang = config.get('locale')\n  const unprotectedUrls = getUnprotectedUrls()\n\n  if (unprotectedUrls.indexOf(action.url) === -1) {\n    const url = config.get('urls').signin + `?next=${next}&lang=${lang}`\n\n    window.location = url\n  }\n\n  return action\n}\n\nexport const forbiddenAPIError = action => {\n  const next = encodeURIComponent(window.location.href)\n  const lang = config.get('locale')\n\n  window.location = config.get('urls').forbidden + `?next=${next}&lang=${lang}`\n\n  return action\n}\n"],
  "mappings": "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",
  "names": ["init_define_process_env", "init_sentry_release_injection_stub", "init_define_process_env", "init_sentry_release_injection_stub", "import_localize", "ERROR_MESSAGE", "SUCCESS_MESSAGE", "INFO_MESSAGE", "CLEAN_MESSAGE", "createMessage", "type", "status", "messages", "id", "message", "__spreadProps", "__spreadValues", "errorMessage", "internalErrorMessage", "successMessage", "infoMessage", "cleanMessage", "param", "init_define_process_env", "init_sentry_release_injection_stub", "getUnprotectedUrls", "config_default", "unAuthorizedAPIError", "action", "next", "lang", "url", "forbiddenAPIError", "callAPIMiddleware", "store", "next", "action", "dispatch", "_a", "promise", "types", "rest", "__objRest", "type", "REQUEST_TYPE", "SUCCESS_TYPE", "FAILURE_TYPE", "__spreadProps", "__spreadValues", "response", "statusCode", "error", "url", "internalErrorMessage", "forbiddenAPIError", "unAuthorizedAPIError"]
}