{"version":3,"file":"refer-redirect-min.js","mappings":"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","sources":["webpack://waves/webpack/bootstrap","webpack://waves/webpack/runtime/compat get default export","webpack://waves/webpack/runtime/define property getters","webpack://waves/webpack/runtime/hasOwnProperty shorthand","webpack://waves/external var \"ReactDOM\"","webpack://waves/external var \"React\"","webpack://waves/./src/ui/svg/common/preloader.tsx","webpack://waves/./src/projects/refer/refer-friend/enums/channel.ts","webpack://waves/./src/projects/refer/refer-friend/domain/refer-friend-provider.ts","webpack://waves/./src/projects/refer/refer-redirect/dal/data-service.ts","webpack://waves/./src/DAL/data-provider.ts","webpack://waves/./src/projects/refer/refer-redirect/ui/page.tsx","webpack://waves/./src/DAL/storage-provider.ts","webpack://waves/./src/projects/refer/refer-redirect/index.tsx"],"sourcesContent":["// The require scope\nvar __webpack_require__ = {};\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","const __WEBPACK_NAMESPACE_OBJECT__ = ReactDOM;","const __WEBPACK_NAMESPACE_OBJECT__ = React;","import React from 'react';\r\nimport { IIconProps } from '../interfaces';\r\n\r\nconst Preloader = (props : IIconProps) => {\r\n return (\r\n \r\n Loading...\r\n \r\n \r\n )\r\n};\r\n\r\nexport default Preloader;\r\n","export enum Channel {\r\n purl = 1,\r\n facebook = 2,\r\n twitter = 3,\r\n email = 4,\r\n}","import { Channel } from '../enums/channel';\r\n\r\nexport const getShareURL = (shortUrl: string) => {\r\n // const hostname = window.location.hostname.endsWith('waves.com') ? window.location.hostname : 'www.waves.com';\r\n return `https://www.waves.com/r/${ shortUrl }`;\r\n};\r\n\r\nexport const parseReferUrl = () => {\r\n // https://dev.waves.com/r/yl6wb1tw\r\n if(window.location.pathname.indexOf('/r/') === -1) return null;\r\n\r\n const part = window.location.pathname.replace('/r/', '');\r\n const shortURL = (part.endsWith('fb') || part.endsWith('tw') || part.endsWith('em')) ? part.substring(0, part.length - 2) : part;\r\n\r\n const suffix = part.replace(shortURL, '');\r\n let channelName = 'purl';\r\n let channelID = Channel.purl;\r\n\r\n switch (suffix) {\r\n case 'fb': {\r\n channelName = 'facebook';\r\n channelID = Channel.facebook;\r\n break;\r\n }\r\n\r\n case 'tw': {\r\n channelName = 'twitter';\r\n channelID = Channel.twitter;\r\n break;\r\n }\r\n\r\n case 'em': {\r\n channelName = 'email';\r\n channelID = Channel.email;\r\n break;\r\n }\r\n }\r\n\r\n return {\r\n shortURL,\r\n channelName,\r\n channelID,\r\n };\r\n};","import { get } from '../../../../DAL/data-provider';\r\n\r\nexport const getRedirectData = async (shortURL: string, channelID: number) => {\r\n\r\n return get('/api/referfriend/refer-redirect', {\r\n shortURL,\r\n channelID\r\n });\r\n};\r\n","import { IResponse } from '../interfaces/common-interfaces';\r\n\r\nexport const DEFAULT_ERROR = 'An error has occurred.';\r\n\r\n/**\r\n * encode and format the data\r\n */\r\nexport const encodeData = (data: any) => {\r\n\r\n const params = [];\r\n\r\n for(let key in data) {\r\n if (data.hasOwnProperty(key)) {\r\n params.push(key + '=' + window.encodeURIComponent(data[key]));\r\n }\r\n }\r\n\r\n return params.join('&');\r\n};\r\n\r\n/**\r\n * Returns true if access is denied.\r\n */\r\nconst ifShouldDenyOnReadOnly = async (response: Response|null) => {\r\n if(response?.status !== 999) return false;\r\n window.location.href = '/maintenance';\r\n\r\n /*\r\n let isLoggedIn = false;\r\n\r\n try{\r\n // {\"message\":\"Waves.com is undergoing maintenance.\",\"isLoggedIn\":false}\r\n const text = await response.text();\r\n const parsed = JSON.parse(text);\r\n isLoggedIn = parsed.isLoggedIn;\r\n if(isLoggedIn){\r\n window.location.href = '/maintenance';\r\n }\r\n }\r\n catch(ex){\r\n console.log(ex);\r\n }*/\r\n\r\n return true;\r\n};\r\n\r\n/**\r\n * get request\r\n */\r\nexport const get = async (url: string, data: any = null) : Promise => {\r\n\r\n if(data){\r\n\r\n const qs = encodeData(data);\r\n url += `?${qs}`;\r\n }\r\n\r\n const headers = new Headers();\r\n headers.append('pragma', 'no-cache');\r\n headers.append('cache-control', 'no-cache');\r\n headers.append('Content-Type', 'application/json');\r\n\r\n const response = await fetch(url, {\r\n method: 'GET',\r\n headers,\r\n credentials: 'same-origin' //'include', 'omit'\r\n });\r\n\r\n if(await ifShouldDenyOnReadOnly(response)){\r\n throw new Error('Waves.com is undergoing maintenance.');\r\n }\r\n\r\n return {\r\n data: await response.json(),\r\n statusCode: response.status\r\n }\r\n};\r\n\r\n/**\r\n * post request\r\n */\r\nexport const post = async (url: string, data: any) : Promise => {\r\n\r\n const response = await fetch(url, {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json'\r\n },\r\n body: JSON.stringify(data)\r\n });\r\n\r\n if(await ifShouldDenyOnReadOnly(response)){\r\n throw new Error('Waves.com is undergoing maintenance.');\r\n }\r\n\r\n return {\r\n data: await response.json(),\r\n statusCode: response.status\r\n }\r\n};\r\n\r\nexport const del = async (url: string, data: any) : Promise => {\r\n\r\n const response = await fetch(url, {\r\n method: 'DELETE',\r\n headers: {\r\n 'Content-Type': 'application/json'\r\n },\r\n body: JSON.stringify(data)\r\n });\r\n\r\n if(await ifShouldDenyOnReadOnly(response)){\r\n throw new Error('Waves.com is undergoing maintenance.');\r\n }\r\n\r\n return {\r\n data: await response.json(),\r\n statusCode: response.status\r\n }\r\n};\r\n\r\nexport const put = async (url: string, data: any) : Promise => {\r\n\r\n const response = await fetch(url, {\r\n method: 'PUT',\r\n headers: {\r\n 'Content-Type': 'application/json'\r\n },\r\n body: JSON.stringify(data)\r\n });\r\n\r\n if(await ifShouldDenyOnReadOnly(response)){\r\n throw new Error('Waves.com is undergoing maintenance.');\r\n }\r\n\r\n return {\r\n data: await response.json(),\r\n statusCode: response.status\r\n }\r\n};\r\n\r\n/**\r\n * upload file\r\n */\r\nexport const upload = async (url: string, data: FormData, headers?: any) => {\r\n\r\n let response: Response | null = null;\r\n const config: RequestInit = {\r\n method: 'POST',\r\n body: data\r\n };\r\n\r\n if(headers){\r\n config.headers = headers;\r\n }\r\n\r\n try{\r\n response = await fetch(url, config);\r\n }\r\n catch(ex){\r\n console.log('Error:', ex);\r\n }\r\n\r\n if(await ifShouldDenyOnReadOnly(response)){\r\n throw new Error('Waves.com is undergoing maintenance.');\r\n }\r\n\r\n return {\r\n data: await response?.json(),\r\n statusCode: response?.status\r\n }\r\n};\r\n\r\nexport const download = (fileName: string, blob: Blob) => {\r\n const url = window.URL.createObjectURL(blob);\r\n const $a = document.createElement('a');\r\n $a.style.display = 'none';\r\n $a.href = url;\r\n // the filename you want\r\n $a.download = fileName;\r\n document.body.appendChild($a);\r\n $a.click();\r\n window.URL.revokeObjectURL(url);\r\n};\r\n\r\nexport const getDownload = async (fileName: string, url: string, data: any = null) => {\r\n\r\n if(data){\r\n\r\n const qs = encodeData(data);\r\n url += `?${qs}`;\r\n }\r\n\r\n const headers = new Headers();\r\n headers.append('pragma', 'no-cache');\r\n headers.append('cache-control', 'no-cache');\r\n headers.append('Content-Type', 'application/json');\r\n\r\n const response = await fetch(url, {\r\n method: 'GET',\r\n headers,\r\n credentials: 'same-origin' //'include', 'omit'\r\n });\r\n\r\n if(await ifShouldDenyOnReadOnly(response)){\r\n throw new Error('Waves.com is undergoing maintenance.');\r\n }\r\n\r\n const blob = await response.blob();\r\n download(fileName, blob);\r\n};\r\n\r\nexport const postDownload = async (fileName: string, url: string, data: any = null) => {\r\n\r\n const response = await fetch(url, {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json'\r\n },\r\n body: JSON.stringify(data)\r\n });\r\n\r\n if(await ifShouldDenyOnReadOnly(response)){\r\n throw new Error('Waves.com is undergoing maintenance.');\r\n }\r\n\r\n const blob = await response.blob();\r\n download(fileName, blob);\r\n};\r\n\r\n\r\n","import Preloader from '../../../../ui/svg/common/preloader';\r\nimport React, { useEffect } from 'react';\r\nimport { parseReferUrl } from '../../refer-friend/domain/refer-friend-provider';\r\nimport { getRedirectData } from '../dal/data-service';\r\nimport { setCookie } from '../../../../DAL/storage-provider';\r\n\r\nconst Page = () => {\r\n\r\n useEffect(() => {\r\n (async () => {\r\n\r\n // href.startsWith('/cmsctx/')\r\n const DEFAULT_REDIRECT = '/specials';\r\n\r\n const parsed = parseReferUrl();\r\n if(!parsed) {\r\n window.location.href = DEFAULT_REDIRECT;\r\n return;\r\n }\r\n\r\n //console.log('parsed.shortURL', parsed.shortURL)\r\n const response = await getRedirectData(parsed.shortURL, parsed.channelID);\r\n //console.log('response', response)\r\n\r\n if(!response || response.statusCode !== 200 || !response.data.isValid || !response.data.relatedData){\r\n window.location.href = DEFAULT_REDIRECT;\r\n return;\r\n }\r\n\r\n const data = response.data.relatedData;\r\n if(!data.clickGUID || !data.redirectURL) {\r\n window.location.href = DEFAULT_REDIRECT;\r\n return;\r\n }\r\n\r\n // save the cookie “waves_rfr“ with the value of ClickGUID and the expiration of CookieExpiration\r\n setCookie(\r\n 'waves_rfr',\r\n data.clickGUID,\r\n data.cookieExpiration * 24 * 60,\r\n false,\r\n undefined,\r\n true\r\n );\r\n\r\n window.location.href = data.redirectURL || DEFAULT_REDIRECT;\r\n })();\r\n }, []);\r\n\r\n return (\r\n
\r\n \r\n
\r\n )\r\n};\r\n\r\nexport default Page;","export const COOKIES = 'cookies';\r\nexport const SESSION_STORAGE = 'session-storage';\r\nexport const LOCAL_STORAGE = 'local-storage';\r\n\r\n/**\r\n * check if storage type is enabled\r\n * storageType - 'local-storage', 'session-storage', or 'cookies'\r\n */\r\nexport const isStorageEnabled = (storageType: string) => {\r\n\r\n if(storageType === COOKIES) return true;\r\n\r\n if(storageType === LOCAL_STORAGE){\r\n\r\n const temp = 'test';\r\n\r\n try {\r\n window.localStorage.setItem(temp, temp);\r\n window.localStorage.removeItem(temp);\r\n return true;\r\n }\r\n catch(e) {\r\n return false;\r\n }\r\n }\r\n\r\n if(storageType === SESSION_STORAGE){\r\n\r\n const temp = 'test';\r\n\r\n try {\r\n window.sessionStorage.setItem(temp, temp);\r\n window.sessionStorage.removeItem(temp);\r\n return true;\r\n }\r\n catch(e) {\r\n return false;\r\n }\r\n }\r\n\r\n return false;\r\n};\r\n\r\n/**\r\n * set cookie\r\n * expiration - cookie expiration in minutes (-1 = cookie expires when browser is closed)\r\n * samesite - strict or lax\r\n */\r\nexport const setCookie = (\r\n name: string,\r\n value: any,\r\n expiration: number = -1,\r\n secure: boolean = false,\r\n samesite: string|undefined = undefined,\r\n preventStringify: boolean = false,\r\n domain?: string, // .waves.com\r\n) => {\r\n\r\n const escapedValue = encodeURIComponent(preventStringify ? value : JSON.stringify(value));\r\n const exp = Number(expiration) || -1;\r\n let cookieString = '';\r\n\r\n const domainValue = domain ? `domain=${ domain };` : '';\r\n\r\n if(exp === -1) {\r\n\r\n // cookie expires when browser is closed\r\n // If neither expires nor max-age specified the cookie will expire at the end of session.\r\n cookieString = `${ name }=${ escapedValue };path=/;${ domainValue }`;\r\n }\r\n else{\r\n const date = new Date();\r\n date.setMinutes(date.getMinutes() + expiration);\r\n\r\n // option to set expiration in days:\r\n //864e5 = 86400000 = 1000*60*60*24 represents the number of milliseconds in a 24 hour day.\r\n //date.setTime(date.getTime() + (days * 864e5));\r\n\r\n const expires = date.toUTCString();\r\n cookieString = `${ name }=${ escapedValue };path=/;${ domainValue }expires=${ expires }`;\r\n }\r\n\r\n if(samesite){\r\n // The strict value will prevent the cookie from being sent by the browser to the target site in all cross-site browsing context, even when following a regular link.\r\n // The lax value will only send cookies for TOP LEVEL navigation GET requests. This is sufficient for user tracking, but it will prevent many CSRF attacks.\r\n cookieString += `;samesite=${samesite}`;\r\n }\r\n\r\n if(secure){\r\n // Cookie to only be transmitted over secure protocol as https. Before Chrome 52, this flag could appear with cookies from http domains.\r\n cookieString += ';secure';\r\n }\r\n\r\n document.cookie = cookieString;\r\n};\r\n\r\n/**\r\n * Get cookie by name\r\n */\r\nexport const getCookie = (name: string) => {\r\n\r\n const cookies = document.cookie.split(';');\r\n\r\n for (let i=0; i {\r\n const escapedValue = encodeURIComponent(JSON.stringify(value));\r\n window.localStorage.setItem(storageName, escapedValue);\r\n};\r\n\r\n/**\r\n * get a value to the local storage\r\n */\r\nexport const getLocalStorageItem = (storageName: string) => {\r\n const value = window.localStorage.getItem(storageName) as string;\r\n return decodeURIComponent(value);\r\n};\r\n\r\n/**\r\n * save a value to the session storage\r\n */\r\nexport const setSessionStorageItem = (storageName: string, value: any) => {\r\n const escapedValue = encodeURIComponent(JSON.stringify(value));\r\n window.sessionStorage.setItem(storageName, escapedValue);\r\n};\r\n\r\n/**\r\n * get a value to the session storage\r\n */\r\nexport const getSessionStorageItem = (storageName: string) => {\r\n const value = window.sessionStorage.getItem(storageName) as string;\r\n return decodeURIComponent(value);\r\n};\r\n\r\n/**\r\n * save to web storage or cookies\r\n * storageType - 'local-storage', 'session-storage', or 'cookies'\r\n * cookiesExpiration - cookies expiration in minutes (-1 = cookies expire when browser is closed)\r\n */\r\nexport const saveToStorage = (storageType: string, storageName: any, value: any, cookiesExpiration: number = -1) => {\r\n\r\n // if this storage type is not supported -> do nothing\r\n if(!isStorageEnabled(storageType)) return;\r\n\r\n if(storageType === COOKIES) {\r\n setCookie(storageName, value, cookiesExpiration);\r\n }\r\n\r\n if(storageType === LOCAL_STORAGE) {\r\n setLocalStorageItem(storageName, value);\r\n }\r\n\r\n if(storageType === SESSION_STORAGE) {\r\n setSessionStorageItem(storageName, value);\r\n }\r\n};\r\n\r\n/**\r\n * get value from storage\r\n * storageType - 'local-storage', 'session-storage', or 'cookies'\r\n */\r\nexport const getFromStorage = (storageType: string, storageName: string) : string|null => {\r\n\r\n // if this storage type is not supported -> do nothing\r\n if(!isStorageEnabled(storageType)) return null;\r\n\r\n if(storageType === COOKIES) {\r\n return getCookie(storageName);\r\n }\r\n\r\n if(storageType === LOCAL_STORAGE) {\r\n return getLocalStorageItem(storageName);\r\n }\r\n\r\n if(storageType === SESSION_STORAGE) {\r\n return getSessionStorageItem(storageName);\r\n }\r\n\r\n return null;\r\n};\r\n\r\n/**\r\n * if storage already exists, append to it, otherwise create a new one\r\n * storageType - 'local-storage', 'session-storage', or 'cookies'\r\n * storageName - it is used like key name in web storage, or like cookie name\r\n * this is a property name that is used to store the value inside the general widgets object\r\n * value - the value that should be stored\r\n * cookiesExpiration - cookies expiration in minutes (-1 = cookies expire when browser is closed)\r\n */\r\nexport const appendToStorage = (storageType: string, storageName: string, key: string, value: any, cookiesExpiration: number = -1) => {\r\n\r\n let data = getFromStorage(storageType, storageName) as any;\r\n\r\n try{\r\n data = JSON.parse(data);\r\n }\r\n catch(err){}\r\n\r\n if(!data) {\r\n\r\n // create new entry\r\n data = {\r\n [key]: value\r\n };\r\n }\r\n else{\r\n // append the entry\r\n data[key] = value;\r\n }\r\n\r\n // overwrite the storage\r\n saveToStorage(storageType, storageName, data, cookiesExpiration = -1);\r\n};","import ReactDOM from 'react-dom';\r\nimport React from 'react';\r\nimport Page from './ui/page';\r\n\r\n/**\r\n * entry point\r\n * https://dev.waves.com/r/yl6wb1tw\r\n * https://wavesaudio.atlassian.net/browse/DSWEB-3172\r\n */\r\nconst init = () => {\r\n const $root = document.getElementById('refer-redirect-app');\r\n if (!$root) return;\r\n\r\n ReactDOM.render(\r\n \r\n \r\n ,\r\n $root\r\n );\r\n};\r\n\r\ndocument.addEventListener('DOMContentLoaded', () => {\r\n init();\r\n});\r\n\r\nexport {}"],"names":["__webpack_require__","module","getter","__esModule","d","a","exports","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","ReactDOM","React","props","role","className","classes","xmlns","width","height","viewBox","style","fill","color","Channel","getRedirectData","async","shortURL","channelID","url","data","qs","params","push","window","encodeURIComponent","join","encodeData","headers","Headers","append","response","fetch","method","credentials","status","location","href","ifShouldDenyOnReadOnly","Error","json","statusCode","useEffect","DEFAULT_REDIRECT","parsed","pathname","indexOf","part","replace","endsWith","substring","length","suffix","channelName","purl","facebook","twitter","email","parseReferUrl","isValid","relatedData","clickGUID","redirectURL","name","value","expiration","secure","samesite","undefined","domain","escapedValue","JSON","stringify","exp","Number","cookieString","domainValue","date","Date","setMinutes","getMinutes","expires","toUTCString","document","cookie","setCookie","cookieExpiration","addEventListener","$root","getElementById","init"],"sourceRoot":""}