{"version":3,"file":"chunks/gdpr.5620.14682190bed0d5de3acd.chunk.js","mappings":"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","sources":["webpack://gdprPackage/./src/configuredAPI.ts","webpack://gdprPackage/./src/controllers/API/index.ts","webpack://gdprPackage/./src/controllers/cookie/CookieController.ts","webpack://gdprPackage/./src/controllers/cookie/index.ts","webpack://gdprPackage/./src/controllers/announcementManager/userAnnouncementsRequests.ts","webpack://gdprPackage/./src/controllers/notification/NotificationController.js","webpack://gdprPackage/./src/controllers/notification/index.js","webpack://gdprPackage/./src/promiseAllWithConcurrency.ts"],"sourcesContent":["import TransportControllerForPrivateAPI from 'controllers/API';\n\nexport const API = new TransportControllerForPrivateAPI('/rest/actonic-gdpr/2');\n","import axios from 'axios';\n\nclass TransportControllerForPrivateAPI {\n // FIXME: Fix types\n transport: any;\n\n [key: string]: any;\n\n constructor(addonPath = '/rest/actonic-tb/1.0/api') {\n this.transport = axios.create({\n baseURL: (() => {\n if (window.AJS) {\n return `${window.AJS.contextPath()}${addonPath}`;\n }\n })(),\n timeout: 900000,\n });\n\n this.transport.interceptors;\n\n this.transport.interceptors.request.use(async (config: any) => config);\n\n // eslint-disable-next-line @typescript-eslint/unbound-method\n this.transport.interceptors.response.use(this.successHandler, this.errorHandler);\n\n return this.transport; // eslint-disable-line no-constructor-return\n }\n\n successHandler(response: any) {\n return response;\n }\n\n errorHandler = (err: any) => Promise.reject(err);\n}\n\nexport default TransportControllerForPrivateAPI;\n","class CookieController {\n save = (name: string, value: string) => {\n // TODO: check if we need accumulation functionality here (adding every new value to existing key)\n const updatedCookie = encodeURIComponent(name) + '=' + encodeURIComponent(value);\n\n document.cookie = updatedCookie;\n };\n\n read = async (name: string) => {\n if (!name) return;\n\n const matches = document.cookie.match(new RegExp(\n '(?:^|; )' + name.replace(/([\\.$?*|{}\\(\\)\\[\\]\\\\\\/\\+^])/g, '\\\\$1') + '=([^;]*)', // eslint-disable-line\n ));\n\n return matches ? decodeURIComponent(matches[1]) : undefined;\n };\n}\n\nconst cookie = new CookieController();\nexport { cookie as CookieController, CookieController as CookieControllerClass };\n","import { CookieController } from './CookieController';\n\nexport default CookieController;\n","import { API } from 'configuredAPI';\nimport CookieController from 'controllers/cookie';\n\nconst GDPR_ANONYMOUS_COOKIE = 'gdpr-anonymous-announcing';\nconst COOKIE_SEPARATOR = '-';\nconst COOKIE_EXPIRE_DAYS = 999;\n\nexport const getAppSettings = async () => {\n try {\n const data = await window.AJS.$.ajax({\n url: `${window.AJS.contextPath()}/rest/actonic-gdpr/1.0/plugin-settings/for-user`,\n type: 'get',\n dataType: 'json',\n async: true,\n });\n\n return data;\n } catch (error) {\n console.error('[announcementManager][getAppSettings] Error while getting app settings', error);\n }\n};\n\nexport const getUserAnnouncements = async (type: string, parentContentKey?: string) => {\n try {\n const url = `/announcements-for-user?type=${type}`;\n const urlWithProjectKey = parentContentKey\n ? `${url}&parentContentKey=${parentContentKey}`\n : url;\n\n const response = await API.get(urlWithProjectKey);\n\n const { data } = response || {};\n\n return data;\n } catch (error) {\n console.error('[announcementManager][getUserAnnouncements] Error while getting announcements', error);\n }\n};\n\nexport const getAnnouncement = async (id: string | number) => {\n const url = `/announcements/${id}`;\n\n const response = await API.get(url);\n\n const { data } = response || {};\n\n return data;\n};\n\nexport const getAnnouncementDraft = async (id: string | number) => {\n const url = `/announcements/${id}/draft`;\n\n const response = await API.get(url);\n\n const { data } = response || {};\n\n return data;\n};\n\nexport const getTemplateAnnouncementDraft = async (id: string | number) => {\n const url = `/announcements/from-template/${id}/preview`;\n\n const response = await API.get(url);\n\n const { data } = response || {};\n\n return data;\n};\n\n// TODO: remove after changes in Cookie controller\nconst setCookie = (name: any, value: any, days = 7, path = '/') => {\n const expires = new Date(Date.now() + days * 864e5).toUTCString();\n\n document.cookie = name + '=' + encodeURIComponent(value) + '; expires=' + expires + '; path=' + path;\n};\n\nconst addAnnouncementToCookie = async (announcementId: any) => {\n // TODO: change Cookie controller, add functionality to set expire\n // For now it will be used only for get, but after changes should be refactored\n const gdprAnonymousCookie = await CookieController.read(GDPR_ANONYMOUS_COOKIE);\n\n const oldAnnouncements = gdprAnonymousCookie\n ? gdprAnonymousCookie.split(COOKIE_SEPARATOR)\n : [];\n\n const newAnnouncements = [...oldAnnouncements, announcementId].join(COOKIE_SEPARATOR);\n\n setCookie(GDPR_ANONYMOUS_COOKIE, newAnnouncements, COOKIE_EXPIRE_DAYS);\n};\n\nexport const sendUserAnswer = async (announcementData: any, isAccepted: boolean, userFeedback: any) => {\n const { id, anonymous, questionnaire } = announcementData;\n\n try {\n const dataObject: {\n answer: string;\n questionnaire?: any;\n } = {\n answer: isAccepted ? 'accepted' : 'declined',\n };\n\n if (questionnaire) {\n dataObject.questionnaire = userFeedback;\n }\n\n await API.put(\n `/announcements-for-user/${id}`,\n dataObject,\n );\n\n if (anonymous) {\n await addAnnouncementToCookie(id);\n }\n } catch (error) {\n console.error('[announcementManager][sendUserAnswer] Error while accept/decline announcement', error);\n }\n};\n","class NotificationController {\n create = (data) => {\n // eslint-disable-next-line no-undef\n AJS.flag(data);\n };\n}\n\nconst notification = new NotificationController();\nexport { notification as NotificationController };\n","import { NotificationController } from './NotificationController';\n\nexport default NotificationController;\n","// FIXME: add types\n\n// collection is array of functions that return promise\n// each function will fire when it will be in thread\n\n// @ts-ignore\nexport const promiseAllWithConcurrency = (collection, n = 6) => {\n let i = 0;\n let jobsList = collection.length;\n\n // @ts-expect-error\n const resultData = [];\n let rejected = false;\n\n // create a new promise and capture reference to resolve and reject to avoid nesting of code\n // @ts-expect-error\n let resolve;\n // @ts-expect-error\n let reject;\n\n const resultPromise = new Promise((res, rej) => {\n resolve = res;\n reject = rej;\n });\n\n if (collection.length === 0) {\n // @ts-expect-error\n resolve([]);\n\n return [];\n }\n\n // @ts-expect-error\n const runJob = (j) => {\n collection[j]()\n // @ts-expect-error\n .then((result) => {\n if (rejected) {\n return;\n }\n\n jobsList--;\n resultData[j] = result;\n\n if (jobsList <= 0) {\n // @ts-expect-error\n resolve(resultData);\n } else if (i < collection.length) {\n runJob(i);\n i++;\n }\n })\n .catch((e: Error) => {\n console.error(`[promiseAllWithConcurrency][runJob] Error: ${e}`);\n if (rejected) {\n return;\n }\n\n rejected = true;\n // @ts-expect-error\n reject(e);\n });\n };\n\n while (i < Math.min(collection.length, n)) {\n runJob(i);\n i++;\n }\n\n return resultPromise;\n};\n"],"names":["API","TransportControllerForPrivateAPI","addonPath","err","config","response","CookieController","name","value","updatedCookie","matches","GDPR_ANONYMOUS_COOKIE","COOKIE_SEPARATOR","COOKIE_EXPIRE_DAYS","getAppSettings","error","getUserAnnouncements","type","parentContentKey","url","urlWithProjectKey","data","getAnnouncement","id","getAnnouncementDraft","getTemplateAnnouncementDraft","setCookie","days","path","expires","addAnnouncementToCookie","announcementId","gdprAnonymousCookie","newAnnouncements","sendUserAnswer","announcementData","isAccepted","userFeedback","anonymous","questionnaire","dataObject","NotificationController","promiseAllWithConcurrency","collection","n","i","jobsList","resultData","rejected","resolve","reject","resultPromise","res","rej","runJob","j","result","e"],"sourceRoot":""}