{"tags":[{"tagId":"487101b8-7f6f-4927-b5d2-0d9a13468748","tagTypeId":"custom_tag_type","name":"LEADERBOARD_GAMETILE_CSS","description":"Updating the CSS because of leaderboard game tile issue","config":{"beforeEndHead":"<style>\n.GameLabels__label--2e4:last-of-type {\n display: none !important;\n}\n</style>","beforeEndBody":""},"conditionIds":["20d65c93-a18d-40f0-bb20-6c2053c29822","2069bef2-303b-40f0-82c4-5b0178ce78ea"]},{"tagId":"8809bde3-5ee0-434e-a84b-256bff07f6cb","tagTypeId":"custom_tag_type","name":"HIDE_SHADOW_LEADERBOARD_TILE","description":"Hides the Hero Banner top Shadow Gradient","config":{"beforeEndHead":"<style>\n [class*=RaceListCard__mediaContent--1Xv] [class*=RaceListCard__mediaContent--1Xv]::before {\n background: none!important;\n }\n </style>","beforeEndBody":""},"conditionIds":["4c81598f-2592-452e-b680-3c1eed17cba1","2069bef2-303b-40f0-82c4-5b0178ce78ea"]},{"tagId":"1197bbb9-78ae-48f1-be75-43b338dbe995","tagTypeId":"custom_tag_type","name":"DepositMonthlyLimitHideZero","description":"HC-12430 Hide zero from onboarding deposit limit while pending","config":{"beforeEndHead":"","beforeEndBody":"<style>\r\n .hide-zero-monthly-limit input[name=\"monthly\"] {\r\n font-size: 0!important;\r\n }\r\n</style>\r\n<script>\r\n (() => {\r\n const adminConfigurationTagName =\r\n \"portal/regulation/adminConfirmation_admin_action_needed\";\r\n const requireBoundaryTagName = \"portal/regulation/requireBoundary\";\r\n\r\n let isBoundaryRequired = false;\r\n let monthlyLimitInputElement = null;\r\n let monthlyLimitListener = null;\r\n\r\n function log() {\r\n if (localStorage.getItem(\"isLoggerEnabled\") === \"true\") {\r\n console.log.apply(\r\n console,\r\n [\"[Deposit Monthly Limit Hide Zero] \"].concat(Array.from(arguments))\r\n );\r\n }\r\n }\r\n\r\n function getPopupModalElement() {\r\n const hasStepsCounter = document.querySelector(\r\n \"[class*='StepsCounter__stepCounter']\"\r\n );\r\n\r\n if (hasStepsCounter) {\r\n log(\"StepsCounter element found, getting form element\");\r\n return hasStepsCounter.parentNode;\r\n } else {\r\n log(\"StepsCounter element not found\");\r\n return null;\r\n }\r\n }\r\n\r\n function createMonthlyLimitListener() {\r\n if (!monthlyLimitInputElement) {\r\n return null;\r\n }\r\n\r\n const focusHandler = () => {\r\n toggleClass(false);\r\n monthlyLimitInputElement.removeEventListener(\"focus\", focusHandler);\r\n monthlyLimitListener = null;\r\n };\r\n\r\n monthlyLimitInputElement.addEventListener(\"focus\", focusHandler);\r\n return focusHandler;\r\n }\r\n\r\n function getMonthlyLimitInputElement() {\r\n const popupModalElement = getPopupModalElement();\r\n\r\n if (!popupModalElement) {\r\n return null;\r\n }\r\n\r\n monthlyLimitInputElement = popupModalElement.querySelector(\r\n \"[class*=Control__content] [name='monthly']\"\r\n );\r\n return monthlyLimitInputElement;\r\n }\r\n\r\n function setupMonthlyLimitListener() {\r\n if (getMonthlyLimitInputElement()) {\r\n monthlyLimitListener = createMonthlyLimitListener();\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n function waitForMonthlyLimitElement() {\r\n const intervalId = setInterval(() => {\r\n if (setupMonthlyLimitListener()) {\r\n clearInterval(intervalId);\r\n }\r\n }, 1000);\r\n }\r\n\r\n function toggleClass(isAddClass) {\r\n const popupModalElement = getPopupModalElement();\r\n\r\n if (!popupModalElement) {\r\n return;\r\n }\r\n\r\n popupModalElement.classList.toggle(\"hide-zero-monthly-limit\", isAddClass);\r\n\r\n if (isAddClass && !monthlyLimitListener) {\r\n if (!setupMonthlyLimitListener()) {\r\n waitForMonthlyLimitElement();\r\n }\r\n }\r\n }\r\n\r\n function handleChangePlayerTag(e) {\r\n const { tag, value, removed } = e?.detail || {};\r\n\r\n if (tag === requireBoundaryTagName) {\r\n log(\"Require Boundary Tag change\", { tag, value, removed });\r\n if (removed || value !== \"true\") {\r\n isBoundaryRequired = false;\r\n toggleClass(false);\r\n return;\r\n }\r\n isBoundaryRequired = true;\r\n }\r\n\r\n if (tag === adminConfigurationTagName) {\r\n log(\"Admin Configuration Tag change\", { tag, value, removed });\r\n if (removed || isBoundaryRequired) {\r\n toggleClass(false);\r\n return;\r\n }\r\n\r\n toggleClass(true);\r\n }\r\n }\r\n\r\n function checkRegulationTags(tags) {\r\n if (!tags?.length) {\r\n log(\"No regulation tags found\");\r\n return false;\r\n }\r\n\r\n isBoundaryRequired = tags.some(\r\n (tag) => tag.name === requireBoundaryTagName && tag.value === \"true\"\r\n );\r\n\r\n if (isBoundaryRequired) {\r\n log(\"Require Boundary tag is true\");\r\n return false;\r\n }\r\n\r\n const isAdminConfigurationTag = tags.some(\r\n (tag) => tag.name === adminConfigurationTagName\r\n );\r\n\r\n log(\"Admin Configuration Tag found:\", isAdminConfigurationTag);\r\n return isAdminConfigurationTag;\r\n }\r\n\r\n function getPlayerTags() {\r\n return Playtech.API.user\r\n .getPlayerTags()\r\n .then(function ({ data }) {\r\n const { tags = [] } = data;\r\n return checkRegulationTags(tags);\r\n })\r\n .catch((error) => {\r\n log(\"Error fetching player tags:\", error);\r\n return false;\r\n });\r\n }\r\n\r\n Playtech.on(Playtech.Events.LOGGED_IN, function () {\r\n setTimeout(() => {\r\n getPlayerTags().then(toggleClass);\r\n }, 2000);\r\n });\r\n\r\n Playtech.API.events.addEventListener(\r\n \"player-tag-change\",\r\n handleChangePlayerTag\r\n );\r\n\r\n if (Playtech.API.auth.isLoggedIn) {\r\n getPlayerTags().then(toggleClass);\r\n }\r\n })();\r\n</script>\r\n"},"conditionIds":["bc0b6529-9f7a-4f6b-8c4d-15194d057ee8"]},{"tagId":"38537e43-3a0e-4896-bf84-392ad93f0916","tagTypeId":"custom_logo","name":" Custom logo","description":"new logo","config":{"customDarkSiteLogo":"/library/static/custom_hc_logo/HCO-winter-logo-w.svg","customLightSiteLogo":"/library/static/custom_hc_logo/HCO-winter-logo-b.svg"},"conditionIds":["2069bef2-303b-40f0-82c4-5b0178ce78ea"]},{"tagId":"ad22010b-b5a9-44d0-bd4b-fb5133e12864","tagTypeId":"custom_tag_type","name":"<3> GTM and CookieBot","description":"HC-12311 Reconfigure GTM and Cookiebot on STG2","config":{"beforeEndHead":"<!-- Google Tag Manager -->\n<script data-cookieconsent=\"ignore\">\n(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':\nnew Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],\nj=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=\n'https://sgtm.hollandcasino.nl/hctm.js?id='+i+dl;f.parentNode.insertBefore(j,f);\n})(window,document,'script','dataLayer','GTM-KGF9BMX');\n</script>\n\n<!-- Cookiebot CMP -->\n<!--<script id=\"Cookiebot\" src=\"https://consent.cookiebot.com/uc.js\" data-cbid=\"74529192-6709-483c-a1c9-c9b9c22221b3\" type=\"text/javascript\" async></script>-->","beforeEndBody":""},"conditionIds":["bc0b6529-9f7a-4f6b-8c4d-15194d057ee8"]},{"tagId":"97ad24bd-f426-4ad9-8dcd-d69f700068ce","tagTypeId":"custom_tag_type","name":"<10> - New Checkin","description":"<10> - New Checkin","config":{"beforeEndHead":"<style>\r\n /* start HC-11301 */\r\n :root {\r\n --biggestPossibleInt: 2147483647;\r\n }\r\n\r\n :root:has(.checkinFlow) {\r\n --help-button-z-index: calc(var(--biggestPossibleInt)) !important;\r\n --chat-z-index: calc(var(--biggestPossibleInt)) !important;\r\n }\r\n\r\n :root:has(.checkinFlow) #ada-chat-frame {\r\n z-index: calc(var(--biggestPossibleInt)) !important;\r\n }\r\n /* end HC-11301 */\r\n\r\n .checkinError {\r\n text-align: center;\r\n margin: 1rem 0;\r\n color: var(--hc-red);\r\n }\r\n /* HC-12293 - start */\r\n body:has(.btnDeclineCheckinPopup)\r\n [class*=\"PopupManager__layout\"]\r\n [class*=\"FlexButtonsBlock__flexButtonsBlock\"] {\r\n display: none;\r\n }\r\n /* HC-12293 - end */\r\n</style>\r\n<script>\r\n var checkinLoaded = Promise.withResolvers();\r\n\r\n function onCheckinLoad(checkin) {\r\n console.log(\"[CHECKIN] Checkin loaded\", checkin);\r\n checkinLoaded.resolve(checkin);\r\n }\r\n\r\n (() => {\r\n var isInitialized = false;\r\n\r\n // HC-11856 - start\r\n const pageDocUploadTagName = \"portal/registration/PageDocUpload\";\r\n const pageExternalServiceTagName =\r\n \"portal/registration/PageExternalService\";\r\n const bodyElement = document.querySelector(\"body\");\r\n const checkinFlowClassName = \"checkinFlow\";\r\n // HC-11856 - end\r\n\r\n function log() {\r\n if (localStorage.getItem(\"isLoggerEnabled\") === \"true\") {\r\n console.log.apply(\r\n console,\r\n [\"[CHECKIN] \"].concat(Array.from(arguments))\r\n );\r\n }\r\n }\r\n\r\n function translate(tKey) {\r\n try {\r\n return Playtech.API.translation.translate(tKey);\r\n } catch (err) {\r\n log(\"Error getting translation\", err);\r\n return \"Something went wrong...\";\r\n }\r\n }\r\n\r\n function createError() {\r\n var errorElement = document.createElement(\"div\");\r\n errorElement.classList.add(\"checkinError\");\r\n errorElement.innerHTML = translate(\r\n \"playtech.mobile.system.error.default\"\r\n );\r\n\r\n return errorElement;\r\n }\r\n\r\n function getAwsRequestData() {\r\n var awsApiUrl = Playtech.Variables.dynamicTags.find(\r\n (tag) => tag.name === \"AWS_API_URL\"\r\n ).value;\r\n var regBsnXApiKey = Playtech.Variables.dynamicTags.find(\r\n (tag) => tag.name === \"REG_BSN_X_API_KEY\"\r\n ).value;\r\n\r\n if (!awsApiUrl) {\r\n log(\"No api url provided\");\r\n return;\r\n }\r\n\r\n if (!regBsnXApiKey) {\r\n log(\"BsnXApiKey not set\");\r\n return;\r\n }\r\n\r\n return {\r\n awsApiUrl,\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n \"x-api-key\": regBsnXApiKey,\r\n },\r\n };\r\n }\r\n\r\n // HC-11102 - start\r\n async function sendErrorDataToAWS(error, checkinData) {\r\n try {\r\n var awsRequestData = getAwsRequestData();\r\n\r\n if (awsRequestData) {\r\n var { awsApiUrl, headers } = awsRequestData;\r\n var email = Playtech.fetchUserDetails().email;\r\n\r\n var options = {\r\n method: \"POST\",\r\n headers,\r\n body: JSON.stringify({\r\n email,\r\n error,\r\n checkinData,\r\n }),\r\n };\r\n\r\n var response = await window.fetch(\r\n `${awsApiUrl}/BSNOnboarding/Public/Anonymous/Data`,\r\n options\r\n );\r\n\r\n log(\"AWS response to error case\", response); // qa can check response status\r\n }\r\n } catch (err) {\r\n log(\"Could not submit error data to AWS\", err);\r\n }\r\n }\r\n // HC-11102 - end\r\n\r\n async function processCheckinData({ data, completeData }) {\r\n try {\r\n log(\"data, completeData\", data, completeData);\r\n await Playtech.API.server.send({\r\n ID: 33045,\r\n description: \"Update player info\",\r\n responses: [33006, 31008],\r\n changeTimestamp: new Date()\r\n .toISOString()\r\n .replace(/[TZ]/g, \" \")\r\n .trim(),\r\n // HC-11238 - send only custom11\r\n dataMap: {\r\n custom11: completeData.mapped.ocrData.userData.dataMap.custom11,\r\n },\r\n });\r\n\r\n await Playtech.API.server.checkInDotComListenerRequest({\r\n // HC-11269\r\n requestContent: btoa(\r\n JSON.stringify({\r\n ocrData: { signed: completeData.mapped.ocrData.signed },\r\n })\r\n ),\r\n });\r\n } catch (error) {\r\n log(\"Error submitting checking data: \", error);\r\n var placeholderText = document.querySelector(\".docUploadPlaceholder\");\r\n if (placeholderText) {\r\n placeholderText.parentNode.append(createError());\r\n placeholderText.style.display = \"none\";\r\n }\r\n sendErrorDataToAWS(error, {\r\n data,\r\n completeData,\r\n });\r\n }\r\n }\r\n\r\n // HC-10924 - start\r\n async function sendBSN(bsn) {\r\n try {\r\n var awsRequestData = getAwsRequestData();\r\n var userId = Playtech.fetchUserDetails().userId;\r\n var temporaryToken =\r\n await Playtech.API.auth.getTemporaryAuthenticationToken();\r\n\r\n if (awsRequestData && temporaryToken && userId) {\r\n var { awsApiUrl, headers } = awsRequestData;\r\n var bsnEndpoint = `${awsApiUrl}/BSNOnboarding/Public/Authenticated/BSN?userId=${encodeURIComponent(\r\n userId\r\n )}&source=checkin`;\r\n var options = {\r\n method: \"POST\",\r\n headers: {\r\n ...headers,\r\n sessiontoken: temporaryToken,\r\n },\r\n body: JSON.stringify({ BSN: bsn }),\r\n };\r\n\r\n var response = await window.fetch(bsnEndpoint, options);\r\n log(\"AWS BSN response\", response); // qa can check response status\r\n }\r\n } catch (e) {\r\n log(`Error sending BSN: ${e}`);\r\n }\r\n }\r\n\r\n function handleBSN(data, diff) {\r\n log(\">> onUpdate diff\", {\r\n diff,\r\n data,\r\n });\r\n if (diff.user && diff.user.bsn) {\r\n sendBSN(diff.user.bsn);\r\n }\r\n }\r\n\r\n // HC-10924 - end\r\n\r\n function initCheckin() {\r\n if (localStorage.getItem(\"isLoggerEnabled\") === \"true\") {\r\n checkin.settings.enableConsoleLog();\r\n }\r\n\r\n checkin.dataFlow.setOnComplete(processCheckinData); // checkin will send user data in this cb in the end of the flow\r\n checkin.dataFlow.setOnUpdate(handleBSN); // checkin will send user data in this cb when there's any new data\r\n isInitialized = true;\r\n }\r\n\r\n function startCheckinFlow(tags, checkin) {\r\n if (!isInitialized) {\r\n initCheckin(checkin);\r\n }\r\n // HC-11856 - start\r\n bodyElement.classList.add(checkinFlowClassName);\r\n // HC-11856 - end\r\n var playerData = Playtech.fetchUserDetails();\r\n\r\n checkin.settings.setLang(\r\n Playtech.API.language.getCurrentLanguage() === \"en_US\" ? \"en\" : \"nl\"\r\n );\r\n // HC-12160\r\n checkin.settings.setVariant(\"fullflow\");\r\n const recoveryAppId = getRecoveryAppId(tags);\r\n const user = { externalId: playerData.username };\r\n if (recoveryAppId != null) {\r\n user.recoveryAppId = recoveryAppId;\r\n }\r\n log(\"Pass user data to checkin\", user);\r\n checkin.dataFlow.setKnownData({\r\n idscan: {\r\n variants: [\"fullflow\"],\r\n user: user,\r\n },\r\n }); // HC-11268\r\n checkin.signUp.open(); // open Checkin popup\r\n }\r\n\r\n async function handlePageDocUpload() {\r\n const checkin = await checkinLoaded.promise;\r\n const response = await Playtech.API.user.getPlayerTags(\"\", true);\r\n log(\"Player tags response\", response);\r\n try {\r\n var tags = response.data.tags;\r\n var isCheckinFlow =\r\n tags.some(function (tag) {\r\n return tag.name === pageDocUploadTagName; // if it's a 2nd step of reg\r\n }) &&\r\n tags.some(function (tag) {\r\n return (\r\n tag.name === pageExternalServiceTagName &&\r\n tag.value &&\r\n tag.value.toLowerCase() === \"checkin\"\r\n );\r\n });\r\n\r\n if (isCheckinFlow) {\r\n startCheckinFlow(tags, checkin);\r\n }\r\n } catch (err) {\r\n throw {\r\n error: err,\r\n code: 1,\r\n };\r\n }\r\n }\r\n\r\n // HC-12160\r\n function getRecoveryAppId(tags) {\r\n const processidTagName = \"checkin/processid\";\r\n const processidTag = tags.filter(function (tag) {\r\n return tag.name === processidTagName;\r\n });\r\n\r\n return (processidTag[0] && processidTag[0].value) || null;\r\n }\r\n\r\n // HC-11856 - start\r\n function handleRemoveClass(isRemovedORModifiedTag) {\r\n if (isRemovedORModifiedTag) {\r\n log(\"Remove class\");\r\n bodyElement.classList.remove(checkinFlowClassName);\r\n }\r\n }\r\n\r\n function handleChangePlayerTag(e) {\r\n const { tag, value, removed } = e?.detail || {};\r\n\r\n if (tag === pageDocUploadTagName || tag === pageExternalServiceTagName) {\r\n const isRemovedORModifiedTag =\r\n removed ||\r\n (tag === pageExternalServiceTagName &&\r\n value?.toLowerCase() !== \"checkin\");\r\n handleRemoveClass(isRemovedORModifiedTag);\r\n }\r\n }\r\n\r\n Playtech.API.events.addEventListener(\r\n \"player-tag-change\",\r\n handleChangePlayerTag\r\n );\r\n\r\n // HC-11856 - end\r\n\r\n // entry point\r\n if (Playtech.API.auth.isLoggedIn) {\r\n handlePageDocUpload();\r\n }\r\n\r\n // entry point\r\n Playtech.on(Playtech.Events.LOGGED_IN, function () {\r\n // HC-12276. setTimeout - temporary fix for LOGGED_IN. After we find a solution, we need to remove setTimeout\r\n setTimeout(handlePageDocUpload, 2000);\r\n });\r\n\r\n Playtech.on(Playtech.Events.LOGGED_OUT, function () {\r\n window.checkin?.signUp.close();\r\n });\r\n\r\n // the function is called by Checkin itself\r\n })();\r\n</script>\r\n<script\r\n src=\"https://hollandcasino-fullflow.regily.com/50fcba4f77b326fe0e1f4db038d206f9.js\"\r\n async\r\n></script>","beforeEndBody":""},"conditionIds":["2e8f68c0-2d83-4009-bf0e-9507529535dc","bc0b6529-9f7a-4f6b-8c4d-15194d057ee8"]},{"tagId":"d021aa71-c72c-4144-be1d-77880b9dafa0","tagTypeId":"custom_js","name":"Game Launch Event Tracker","description":"Only for test purpouses","config":{"code":"Playtech.on(Playtech.Events.GAME_LAUNCH, (args) => console.log('>>> GAME_LAUNCH', args));\nPlaytech.on(Playtech.Events.GAME_FAVORITES_HANDLER, (args) => console.log('>>> GAME_FAVORITES_HANDLER', args))"},"conditionIds":["10c6a1bf-bd4b-4c65-9256-45b166858b9d"]},{"tagId":"3772972c-9037-4fbf-aeeb-6d8073d6470b","tagTypeId":"page_styling","name":"Premium Style","description":"Premium Style","config":{"displayStyle":"premium"},"conditionIds":["b8cd6255-5275-430e-b4b3-34917ce3e157","2069bef2-303b-40f0-82c4-5b0178ce78ea"]},{"tagId":"ad5d2463-92a7-41aa-bb67-9d0f75a3c0a7","tagTypeId":"custom_tag_type","name":"ADVERTISING_PREFERENCES_FORM_EXTENSION","description":"HC-12332","config":{"beforeEndHead":"<style>\n input:-webkit-autofill,\n input:-webkit-autofill:hover, \n input:-webkit-autofill:focus, \n input:-webkit-autofill:active{\n -webkit-text-fill-color: var(--input-font-color) !important;\n }\n</style>\n<script>\n // HC-12332\n(function () {\n const API_BASE_URL = Playtech.Variables.dynamicTags.find(tag => tag.name === 'ACQ_API_BASE_URL')?.value;\n const API_KEY = Playtech.Variables.dynamicTags.find(tag => tag.name === 'ACQ_API_KEY')?.value;\n const TOKEN_ENDPOINT = '/v1/acqoptout/tokens';\n const CONFIRM_ENDPOINT = '/v1/acqoptout/tokens/confirm'; function waitForElement(selector, callback, interval = 300, timeout = 10000) {\n const start = Date.now();\n const check = () => {\n const element = document.querySelector(selector);\n if (element && element.querySelectorAll('button[type=\"button\"]')?.length >= 2) {\n callback(element);\n } else if (Date.now() - start < timeout) {\n setTimeout(check, interval);\n }\n };\n check();\n } waitForElement('form[data-form-name=\"Advertising Preferences\"]', function (form) {\n const buttons = form.querySelectorAll('button[type=\"button\"]'); const send2FAMailButton = buttons[0];\n const confirm2FAButton = buttons[1]; const twoFAInput = form.querySelector('input[name=\"promoExclusion2FAField\"]');\n const phoneInput = form.querySelector('input[name=\"promoExclusionPhoneField\"]');\n const emailInput = form.querySelector('input[name=\"promoExclusionEmailField\"]'); const twoFAInputContainer = twoFAInput?.closest('[class*=Control__control]');\n const phoneInputContainer = phoneInput?.closest('[class*=Control__control]');\n const confirm2FAButtonContainer = confirm2FAButton.closest('.cms-form-field-name-promoExclusionConfirm2FACodeButton'); const phoneLabel = form.querySelector('label[for^=\"promoExclusionPhoneField\"]');\n if (phoneLabel) phoneLabel.style.display = 'none'; const explanationText = form.querySelector('[class*=PlainText__text]');\n if (explanationText) {\n explanationText.style.display = 'none';\n } if (twoFAInputContainer) twoFAInputContainer.style.display = 'none';\n if (phoneInputContainer) phoneInputContainer.style.display = 'none';\n if (confirm2FAButtonContainer) confirm2FAButtonContainer.style.display = 'none'; let isSubmitting = false;\n let storedEmail = ''; send2FAMailButton.addEventListener('click', function () {\n document.getElementById('form-output')?.remove();\n document.getElementById('form-error')?.remove(); const email = emailInput?.value.trim() || '';\n const selectedRadio = form.querySelector('input[name=\"formType\"]:checked');\n const selectedOption = selectedRadio?.value || ''; const hasEmail = email.length > 0;\n const hasRadio = !!selectedOption;\n const errorFields = form.querySelectorAll('[class*=\"Control__invalid\"], [class*=\"ErrorMessage\"]');\n const hasVisualErrors = errorFields.length > 0; if (!hasEmail || !hasRadio || hasVisualErrors) {\n const error = document.createElement('div');\n error.id = 'form-error';\n error.style.color = 'red';\n error.style.marginTop = '1rem';\n error.textContent = Playtech.API.translation.translate('playtech.mobile.system.promo-exclusion.tooltip.required'); // 'Vul alle vereiste velden in';\n form.parentNode.insertBefore(error, form.nextSibling);\n return;\n } if (isSubmitting) return;\n isSubmitting = true;\n send2FAMailButton.disabled = true;\n const currentLang = Playtech.API.language.getCurrentLanguage()?.substring(0, 2); const queryParams = new URLSearchParams({\n type: selectedOption,\n email: email,\n language_code: currentLang\n }).toString(); fetch(`${API_BASE_URL}${TOKEN_ENDPOINT}?${queryParams}`, {\n method: 'POST',\n headers: { 'x-api-key': API_KEY }\n })\n .then(response => {\n isSubmitting = false;\n send2FAMailButton.disabled = false; if (!response.ok) {\n return response.json().then(data => {\n const error = document.createElement('div');\n error.id = 'form-error';\n error.style.color = 'red';\n error.style.marginTop = '1rem';\n error.textContent = data.message || Playtech.API.translation.translate('playtech.mobile.system.promo-exclusion.tooltip.response.error'); // 'Kon het formulier niet verzenden. Controleer jouw code en probeer opnieuw';\n form.parentNode.insertBefore(error, form.nextSibling);\n throw new Error(data.message || 'Submission error');\n });\n } storedEmail = email; send2FAMailButton.style.display = 'none';\n if (twoFAInputContainer) twoFAInputContainer.style.display = '';\n if (phoneInputContainer) phoneInputContainer.style.display = '';\n if (confirm2FAButtonContainer) confirm2FAButtonContainer.style.display = ''; if (explanationText) explanationText.style.display = '';\n })\n .catch(err => {\n isSubmitting = false;\n send2FAMailButton.disabled = false;\n console.error(err);\n });\n }); confirm2FAButton.addEventListener('click', function () {\n document.getElementById('form-output')?.remove();\n document.getElementById('form-error')?.remove(); const phone = phoneInput?.value.trim() || '';\n const token = twoFAInput?.value.trim() || '';\n const email = storedEmail; if (!phone || !token || !email) {\n const error = document.createElement('div');\n error.id = 'form-error';\n error.style.color = 'red';\n error.style.marginTop = '1rem';\n error.textContent = Playtech.API.translation.translate('playtech.mobile.system.promo-exclusion.tooltip.required'); //'Vul alle vereiste velden in'\n form.parentNode.insertBefore(error, form.nextSibling);\n return;\n } confirm2FAButton.disabled = true; const queryParams = new URLSearchParams({\n phone: phone,\n token: token,\n email: email\n }).toString(); fetch(`${API_BASE_URL}${CONFIRM_ENDPOINT}?${queryParams}`, {\n method: 'POST',\n headers: { 'x-api-key': API_KEY }\n })\n .then(response => {\n confirm2FAButton.disabled = false; if (!response.ok) {\n return response.json().then(data => {\n const error = document.createElement('div');\n error.id = 'form-error';\n error.style.color = 'red';\n error.style.marginTop = '1rem';\n error.textContent = data.message || Playtech.API.translation.translate('playtech.mobile.system.promo-exclusion.tooltip.code.error'); // 'Fout bij versturen. Controleer de ingevoerde code';\n form.parentNode.insertBefore(error, form.nextSibling);\n throw new Error(data.message || 'Confirmation error');\n });\n } // form.style.display = 'none';\n //\n // const successDiv = document.createElement('div');\n // successDiv.id = 'form-output';\n // successDiv.style.paddingTop = '20vh';\n // successDiv.style.paddingBottom = '20vh';\n // successDiv.style.textAlign = 'center';\n //\n // const header = document.createElement('h2');\n // header.textContent = Playtech.API.translation.translate('playtech.mobile.system.promo-exclusion.successTitle'); // 'Het is gelukt!';\n // header.style.marginBottom = '1rem';\n //\n // const paragraph = document.createElement('p');\n // paragraph.innerHTML = Playtech.API.translation.translate('playtech.mobile.system.promo-exclusion.successMessage'); // 'We hebben je voorkeur opgeslagen en zorgen ervoor dat je er geen omkijken meer naar hebt. Toch iets wijzigen? Vul dan het formulier opnieuw in.<br><br>Let op: het kan een paar dagen duren voordat je aan- of afmelding volledig verwerkt is. In de tussentijd kun je nog advertenties van ons tegenkomen. Bedankt voor je geduld!';\n // paragraph.style.margin = '0 auto';\n // paragraph.style.maxWidth = '100%';\n // paragraph.style.lineHeight = '1.6';\n // paragraph.style.padding = '0 1rem';\n //\n //\n // successDiv.appendChild(header);\n // successDiv.appendChild(paragraph);\n //\n // form.parentNode.insertBefore(successDiv, form.nextSibling); Playtech.API.common.navigate('/');\n Playtech.API.popup.showPopup({\n title: Playtech.API.translation.translate('playtech.mobile.system.promo-exclusion.successTitle'),\n content: Playtech.API.translation.translate('playtech.mobile.system.promo-exclusion.successMessage')\n });\n })\n .catch(err => {\n confirm2FAButton.disabled = false;\n console.error(err);\n });\n });\n });\n})();\n</script>","beforeEndBody":""},"conditionIds":["5dfa5ec7-2f60-4ec3-a4b2-2a26294bd859","2069bef2-303b-40f0-82c4-5b0178ce78ea"]},{"tagId":"cb99428a-c858-4e73-b339-628ea4e3cf89","tagTypeId":"custom_tag_type","name":"<4> - BlockingModalPopup","description":"popup that blocks the entire site (HC-11939). HC-12276 - temporary fix for LOGGED_IN","config":{"beforeEndHead":"","beforeEndBody":"<style>\r\n :root {\r\n --biggestPossibleInt: 2147483647;\r\n }\r\n #blockingModalPopup .hideBtn {\r\n display: none;\r\n }\r\n [class*=\"PopupManager__popups\"]:has(#blockingModalPopup) {\r\n z-index: calc(var(--biggestPossibleInt) - 1);\r\n position: relative; /* HC-11379 */\r\n }\r\n :root:has(#blockingModalPopup) {\r\n --help-button-z-index: calc(var(--biggestPossibleInt)) !important;\r\n --chat-z-index: calc(var(--biggestPossibleInt)) !important;\r\n }\r\n body:has(#blockingModalPopup) #ada-chat-frame {\r\n z-index: calc(var(--biggestPossibleInt)) !important;\r\n }\r\n\r\n /* start HC-11939 */\r\n .regily-module {\r\n z-index: calc(var(--biggestPossibleInt) - 2);\r\n }\r\n /* end HC-11939 */\r\n</style>\r\n\r\n<script>\r\n (function () {\r\n let isPopupOpened = false;\r\n const popupID = \"blockingModalPopup\";\r\n const pageHoldTagName = \"portal/registration/pageHold\";\r\n\r\n function log() {\r\n if (localStorage.getItem(\"isLoggerEnabled\") === \"true\") {\r\n console.log.apply(\r\n console,\r\n [\"[Blocking Modal Popup] \"].concat(Array.from(arguments))\r\n );\r\n }\r\n }\r\n\r\n function showPopup(webContent) {\r\n if (isPopupOpened) {\r\n return;\r\n }\r\n\r\n Playtech.API.popup.showPopup({\r\n id: popupID,\r\n layer: \"VERY_HIGH_PRIORITY\",\r\n classNames: { actionButtons: \"hideBtn\" },\r\n articleId: webContent,\r\n isModal: true,\r\n });\r\n log(\"Show Popup\");\r\n isPopupOpened = true;\r\n }\r\n\r\n function closePopup() {\r\n if (!isPopupOpened) {\r\n return;\r\n }\r\n\r\n log(\"Close Popup\");\r\n Playtech.API.popup.closePopups(popupID);\r\n isPopupOpened = false;\r\n }\r\n\r\n function handleLoggedIn({ value } = {}) {\r\n log(\"Web Content ID\", value);\r\n\r\n if (value) {\r\n showPopup(value);\r\n }\r\n }\r\n\r\n function handleChangePlayerTag(e) {\r\n const { tag, value, removed } = e?.detail || {};\r\n\r\n if (tag === pageHoldTagName) {\r\n log(\"Player tag change\");\r\n // HC-12296 - start\r\n closePopup();\r\n // HC-12296 - end\r\n if (removed) {\r\n log(\"Close Popup\");\r\n return;\r\n }\r\n\r\n if (value) {\r\n log(\"Open Popup with new WC\");\r\n showPopup(value);\r\n }\r\n }\r\n }\r\n\r\n function getPageHoldTagValue() {\r\n return Playtech.API.user\r\n .getPlayerTags(pageHoldTagName)\r\n .then(function ({ data }) {\r\n log(\"Get page hold tag value\", data);\r\n if (data.tags[0]) {\r\n return {\r\n value: data.tags[0].value,\r\n };\r\n }\r\n return {};\r\n });\r\n }\r\n\r\n Playtech.on(Playtech.Events.LOGGED_IN, function () {\r\n // HC-12276. setTimeout - temporary fix for LOGGED_IN. After we find a solution, we need to remove setTimeout\r\n setTimeout(()=>getPageHoldTagValue().then(handleLoggedIn), 1000);\r\n });\r\n Playtech.on(Playtech.Events.LOGGED_OUT, function () {\r\n closePopup();\r\n });\r\n Playtech.API.events.addEventListener(\r\n \"player-tag-change\",\r\n handleChangePlayerTag\r\n );\r\n if (Playtech.API.auth.isLoggedIn) {\r\n getPageHoldTagValue().then(handleLoggedIn);\r\n }\r\n })();\r\n</script>"},"conditionIds":["bc0b6529-9f7a-4f6b-8c4d-15194d057ee8"]},{"tagId":"f43f9c7f-49c4-41b7-b2a2-77088092d6f7","tagTypeId":"custom_tag_type","name":"<3> [Regulation] - MessagePopupWithTimer","description":"HC-11601 [STC] 30s popup should be shown every time until user has confirmed deposit limits. HC-12276 - temporary fix for LOGGED_IN","config":{"beforeEndHead":"<!-- Tag start -->\r\n<style>\r\n #regulationMessagePopupWithTimer .regulationBtnContainer {\r\n display: none;\r\n }\r\n</style>\r\n\r\n<script>\r\n (function () {\r\n let playerTags = [];\r\n const POPUP_ID = \"regulationMessagePopupWithTimer\";\r\n const WEB_CONTENT = \"REGULATIONS_MESSAGE_WITH_TIMER\";\r\n const REQUIRE_CONFIRMATION_PLAYER_TAG_NAME =\r\n \"portal/regulation/requireConfirmation\";\r\n const BTN_CONTAINER_CLASS_NAME = \"regulationBtnContainer\";\r\n\r\n function log() {\r\n if (localStorage.getItem(\"isLoggerEnabled\") === \"true\") {\r\n console.log.apply(\r\n console,\r\n [\"[Regulation Message Popup With Timer] \"].concat(\r\n Array.from(arguments)\r\n )\r\n );\r\n }\r\n }\r\n\r\n function shouldShowBlockingPopup() {\r\n try {\r\n return playerTags.some(function (tag) {\r\n return (\r\n tag.name === REQUIRE_CONFIRMATION_PLAYER_TAG_NAME &&\r\n tag.value === \"true\"\r\n );\r\n });\r\n } catch (err) {\r\n throw { error: err, code: 1 };\r\n }\r\n }\r\n\r\n function showRegulationPopup() {\r\n try {\r\n if (shouldShowBlockingPopup()) {\r\n log(\"Show Popup\");\r\n Playtech.API.popup.showPopup({\r\n articleId: WEB_CONTENT,\r\n layer: \"VERY_HIGH_PRIORITY\",\r\n classNames: { actionButtons: BTN_CONTAINER_CLASS_NAME },\r\n id: POPUP_ID,\r\n onClose: function () {\r\n Playtech.API.auth.logout();\r\n log(\"Logout user\");\r\n },\r\n });\r\n }\r\n } catch (err) {\r\n log(\"Error\", err);\r\n }\r\n }\r\n\r\n function getPlayerTags() {\r\n return Playtech.API.user.getPlayerTags().then(function (response) {\r\n playerTags = response.data.tags;\r\n });\r\n }\r\n\r\n Playtech.on(Playtech.Events.LOGGED_IN, function () {\r\n // HC-12276. setTimeout - temporary fix for LOGGED_IN. After we find a solution, we need to remove setTimeout\r\n setTimeout(() => getPlayerTags().then(showRegulationPopup), 1000);\r\n });\r\n\r\n Playtech.on(Playtech.Events.LOGGED_OUT, function () {\r\n playerTags = [];\r\n });\r\n\r\n if (Playtech.API.auth.isLoggedIn) {\r\n getPlayerTags().then(showRegulationPopup);\r\n }\r\n })();\r\n</script>\r\n<!-- Tag end -->\r\n","beforeEndBody":""},"conditionIds":["2e8f68c0-2d83-4009-bf0e-9507529535dc","bc0b6529-9f7a-4f6b-8c4d-15194d057ee8"]},{"tagId":"c61be776-0e12-4d6e-899f-0a8f25809e84","tagTypeId":"custom_tag_type","name":"<7> Onboarding - TN custom START Button","description":"HC-12276 - temporary fix for LOGGED_IN","config":{"beforeEndHead":"","beforeEndBody":"<style>\r\n [class*=\"StepsCounter__stepCounter\"] + [class*=\"Iframe__\"],\r\n .docUploadContainer + [class*=\"Iframe__\"] {\r\n display: none;\r\n }\r\n\r\n .docUploadContainer {\r\n display: flex;\r\n flex-direction: column;\r\n align-items: center;\r\n justify-content: center;\r\n }\r\n\r\n .docUploadContainer > * {\r\n margin: 1rem 0;\r\n }\r\n\r\n .docUploadButton.inactive {\r\n pointer-events: none;\r\n }\r\n\r\n .docUploadError {\r\n font-size: 80%;\r\n text-align: center;\r\n margin: 1rem 0;\r\n color: var(--hc-red);\r\n }\r\n</style>\r\n<script>\r\n (function () {\r\n var playerTags = [];\r\n var tKeys = {\r\n captureTooltip:\r\n \"playtech.mobile.system.step2.onboarding.docs.capture.tooltip\",\r\n startBtnText: \"system.step2.onboarding.docs.start\",\r\n startTooltip: \"system.step2.onboarding.docs.start.tooltip\",\r\n };\r\n const customDocUploadProvider = Playtech.Variables.dynamicTags.find(\r\n ({ name }) => name === \"CUSTOM_DOC_UPLOAD_PROVIDER\"\r\n )?.value;\r\n // console.log('>>> customDocUploadProvider', customDocUploadProvider)\r\n function translate(tKey) {\r\n try {\r\n return Playtech.API.translation.translate(tKey);\r\n } catch (err) {\r\n throw { error: err, code: 3 };\r\n }\r\n }\r\n\r\n // start HC-11285\r\n function isTruNarrativeFlow() {\r\n try {\r\n return (\r\n playerTags.some(function (tag) {\r\n return tag.name === \"portal/registration/PageDocUpload\";\r\n }) &&\r\n !playerTags.some(function (tag) {\r\n return (\r\n tag.name === \"portal/registration/PageExternalService\" &&\r\n tag.value &&\r\n tag.value.toLowerCase() === customDocUploadProvider\r\n );\r\n })\r\n );\r\n } catch (err) {\r\n throw { error: err, code: 1 };\r\n }\r\n }\r\n // end HC-11285\r\n\r\n function observeIframe() {\r\n return new Promise(function (resolve, reject) {\r\n try {\r\n var wrapper = document.querySelector(\r\n \"[class*=Iframe__iframeWrapper]\"\r\n );\r\n\r\n if (\r\n wrapper &&\r\n wrapper.querySelector(\"iframe\") &&\r\n wrapper.querySelector(\"iframe\").src\r\n ) {\r\n resolve(wrapper.querySelector(\"iframe\"));\r\n return;\r\n }\r\n\r\n var popupEl = getPopupContentContainer();\r\n\r\n new MutationObserver(function (mutationList, observer) {\r\n try {\r\n for (var mutation of mutationList) {\r\n if (\r\n mutation.target.querySelector(\"iframe\") &&\r\n mutation.target.querySelector(\"iframe\").src\r\n ) {\r\n resolve(mutation.target.querySelector(\"iframe\"));\r\n observer.disconnect();\r\n break;\r\n }\r\n }\r\n } catch (err) {\r\n reject(err);\r\n }\r\n }).observe(popupEl, {\r\n childList: true,\r\n subtree: true,\r\n attributes: true,\r\n });\r\n } catch (err) {\r\n reject(err);\r\n }\r\n });\r\n }\r\n\r\n function getRedirectURL() {\r\n return observeIframe()\r\n .then(function (iframe) {\r\n var src = iframe.src;\r\n iframe.src = \"about:blank\";\r\n\r\n return src;\r\n })\r\n .catch(function (err) {\r\n return Promise.reject({ error: err, code: 4 });\r\n });\r\n }\r\n\r\n function getPopupContentContainer() {\r\n try {\r\n return document.querySelector(\"[class*=StepsCounter__stepCounter]\")\r\n .parentNode;\r\n } catch (err) {\r\n throw { error: err, code: 5 };\r\n }\r\n }\r\n\r\n function createDocUploadContainer() {\r\n var div = document.createElement(\"div\");\r\n div.classList.add(\"docUploadContainer\");\r\n\r\n return div;\r\n }\r\n\r\n function createDocUploadCaptureTooltip() {\r\n var div = document.createElement(\"div\");\r\n div.innerHTML = translate(tKeys.captureTooltip);\r\n\r\n return div;\r\n }\r\n\r\n function createDocUploadLink(src) {\r\n var link = document.createElement(\"a\");\r\n link.href = src;\r\n link.target = \"_blank\";\r\n link.classList.add(\"docUploadButton\");\r\n link.classList.add(\"inactive\");\r\n\r\n var btn = document.createElement(\"button\");\r\n btn.type = \"button\";\r\n btn.classList.add(\"btn\");\r\n btn.innerHTML = translate(tKeys.startBtnText);\r\n btn.disabled = true;\r\n\r\n var disable = function (isDisabled) {\r\n if (isDisabled) {\r\n btn.setAttribute(\"disabled\", \"disabled\");\r\n link.classList.add(\"inactive\");\r\n } else {\r\n btn.removeAttribute(\"disabled\");\r\n link.classList.remove(\"inactive\");\r\n }\r\n };\r\n\r\n btn.addEventListener(\"click\", function () {\r\n disable(true);\r\n });\r\n\r\n link.append(btn);\r\n\r\n return [link, disable];\r\n }\r\n\r\n function createError(err) {\r\n var div = document.createElement(\"div\");\r\n var error = err.error || err;\r\n var prefix = \"Error \" + (err.code || -1) + \": \";\r\n\r\n div.classList.add(\"docUploadError\");\r\n div.innerHTML =\r\n prefix +\r\n ((error.response && (error.response.data.errorMessage || err.reason)) ||\r\n error.message);\r\n\r\n return div;\r\n }\r\n\r\n function createDocUploadLinkTooltip() {\r\n var text = document.createElement(\"p\");\r\n text.innerHTML = translate(tKeys.startTooltip);\r\n\r\n return text;\r\n }\r\n\r\n function main() {\r\n try {\r\n if (isTruNarrativeFlow()) {\r\n var docUploadContainer = createDocUploadContainer();\r\n var capture = createDocUploadCaptureTooltip();\r\n var [uploadLink, disable] = createDocUploadLink();\r\n var uploadLinkTooltip = createDocUploadLinkTooltip();\r\n\r\n docUploadContainer.append(capture);\r\n docUploadContainer.append(uploadLink);\r\n docUploadContainer.append(uploadLinkTooltip);\r\n getPopupContentContainer().append(docUploadContainer);\r\n\r\n getRedirectURL()\r\n .then(function (url) {\r\n uploadLink.href = url;\r\n disable(false);\r\n })\r\n .catch(function (err) {\r\n docUploadContainer.append(createError(err));\r\n });\r\n }\r\n } catch (err) {\r\n getPopupContentContainer().append(createError(err));\r\n }\r\n }\r\n\r\n function getPlayerTags() {\r\n return Playtech.API.user.getPlayerTags().then(function (response) {\r\n playerTags = response.data.tags;\r\n });\r\n }\r\n\r\n Playtech.on(Playtech.Events.LOGGED_IN, function () {\r\n // HC-12276. setTimeout - temporary fix for LOGGED_IN. After we find a solution, we need to remove setTimeout\r\n setTimeout(() => getPlayerTags().then(main), 1000);\r\n });\r\n\r\n Playtech.on(Playtech.Events.LOGGED_OUT, function () {\r\n playerTags = [];\r\n });\r\n\r\n if (Playtech.API.auth.isLoggedIn) {\r\n getPlayerTags().then(main);\r\n }\r\n })();\r\n</script>\r\n"},"conditionIds":["bc0b6529-9f7a-4f6b-8c4d-15194d057ee8"]},{"tagId":"66a336a0-8055-482b-bc26-5dcabdc66f08","tagTypeId":"custom_tag_type","name":"<6> - ADA Integration","description":"ADA Integration. HC-12276 - temporary fix for LOGGED_IN","config":{"beforeEndHead":"<style>\r\n iframe#ada-button-frame {\r\n display: none !important;\r\n }\r\n</style>\r\n<script>\r\n (function () {\r\n let isAdaReady = false;\r\n let isStarted = false;\r\n let isToggled = false;\r\n let isProactive = false;\r\n let playerTags = [];\r\n\r\n const proactiveTagName = \"adachatbot/proactive\";\r\n const proactiveBubblesTagName = \"adachatbot/proactive_bubbles\";\r\n const proactiveCampaignName = \"Holland_Casino_proactive\";\r\n\r\n function log() {\r\n if (localStorage.getItem(\"isLoggerEnabled\") === \"true\") {\r\n console.log.apply(console, [\"[ADA] \"].concat(Array.from(arguments)));\r\n }\r\n }\r\n\r\n function getJWTToken() {\r\n log(\"get JWT\");\r\n\r\n return Playtech.API.server.getJWTToken().then(function ({ data }) {\r\n return data.jwtToken;\r\n });\r\n }\r\n\r\n function toggleCallback(isDrawerOpen) {\r\n isToggled = isDrawerOpen;\r\n\r\n log(\"toggleCallback received\", isToggled);\r\n\r\n Playtech.API.events.dispatchEvent(\r\n new CustomEvent(Playtech.Events.CHAT_WINDOW_STATUS, {\r\n detail: {\r\n chat: \"ada\",\r\n isOpened: isDrawerOpen,\r\n },\r\n })\r\n );\r\n }\r\n\r\n function onAdaEmbedLoaded() {\r\n log(\"onAdaEmbedLoaded received\");\r\n }\r\n\r\n function adaReadyCallback({ isRolledOut }) {\r\n isAdaReady = isRolledOut;\r\n log(\"adaReadyCallback received\", isAdaReady);\r\n\r\n if (hasProactiveBubblesTag(playerTags)) {\r\n log(\"triggerCampaign in the starting\");\r\n window.adaEmbed.triggerCampaign(proactiveCampaignName);\r\n }\r\n\r\n if (isProactive && !isToggled) {\r\n toggleBot([{ chat: \"ada\" }]);\r\n }\r\n }\r\n\r\n function getSensitiveMetaFields(token) {\r\n return token\r\n ? {\r\n jwt_token: token,\r\n }\r\n : {};\r\n }\r\n\r\n function getMetaFields(extraFields) {\r\n return {\r\n // list of predefined vars here,\r\n // which must be specified with empty value,\r\n // even if they are not ready right now\r\n userId: Playtech.fetchUserDetails().userId,\r\n ...extraFields,\r\n };\r\n }\r\n\r\n function getAdaSettings({ token, metaFields }) {\r\n return {\r\n cluster: \"eu\",\r\n toggleCallback,\r\n hideMask: false,\r\n //language: \"NL\",\r\n adaReadyCallback,\r\n onAdaEmbedLoaded,\r\n mobileOverlay: true,\r\n handle: \"hollandcasino\",\r\n metaFields: getMetaFields(metaFields),\r\n greeting: \"6372813824417240bce71f1a\",\r\n sensitiveMetaFields: getSensitiveMetaFields(token),\r\n };\r\n }\r\n\r\n // for further usage\r\n function openAnswer(answerId) {\r\n if (!isAdaReady) {\r\n return;\r\n }\r\n\r\n if (isToggled) {\r\n log(\"triggering specific answer\", answerId);\r\n window.adaEmbed.triggerAnswer(answerId);\r\n } else {\r\n log(\"toggling\");\r\n window.adaEmbed.toggle();\r\n }\r\n }\r\n\r\n async function startBot() {\r\n if (isStarted) {\r\n return;\r\n }\r\n\r\n const token = await getJWTToken();\r\n log(\"starting\");\r\n\r\n const metaFields = await getNextAnswerToRun();\r\n log(\"meta fields\", { metaFields });\r\n\r\n window.adaEmbed.start(getAdaSettings({ token, metaFields }));\r\n isStarted = true;\r\n\r\n if (!hasProactiveBubblesTag(playerTags)) {\r\n isProactive = Boolean(metaFields);\r\n }\r\n }\r\n\r\n // for further usage\r\n async function resetBot(metaFields) {\r\n if (!isAdaReady) {\r\n return;\r\n }\r\n\r\n const token = await getJWTToken();\r\n log(\"reset\", { metaFields });\r\n window.adaEmbed.reset(getAdaSettings({ token, metaFields }));\r\n isStarted = true;\r\n }\r\n\r\n function stopBot() {\r\n if (!isStarted) {\r\n return;\r\n }\r\n\r\n log(\"stopping\");\r\n window.adaEmbed.stop();\r\n isStarted = false;\r\n isProactive = false;\r\n }\r\n\r\n function toggleBot(e) {\r\n if (!isAdaReady || !isStarted) {\r\n return;\r\n }\r\n\r\n if (e && e.length > 0 && e[0].chat === \"ada\") {\r\n log(\"toggling\");\r\n window.adaEmbed.toggle();\r\n }\r\n }\r\n\r\n // HC-10930\r\n async function adaChatBotProactive(e) {\r\n const metaFields = await getNextAnswerToRun(e);\r\n\r\n if (metaFields) {\r\n await resetBot(metaFields);\r\n\r\n if (!isToggled) {\r\n toggleBot([{ chat: \"ada\" }]);\r\n }\r\n }\r\n }\r\n\r\n // HC-11188 start\r\n async function adaChatBotProactiveBubbles(e) {\r\n const metaFields = await getNextAnswerToRun(e);\r\n\r\n if (metaFields) {\r\n window.adaEmbed.setMetaFields(metaFields);\r\n log(\"setMetaFields\", { metaFields });\r\n\r\n window.adaEmbed.triggerCampaign(proactiveCampaignName);\r\n log(\"triggerCampaign in the updating\");\r\n }\r\n }\r\n\r\n function hasProactiveBubblesTag(tags) {\r\n if (Array.isArray(tags)) {\r\n return tags.some(({ name }) => name === proactiveBubblesTagName);\r\n }\r\n return false;\r\n }\r\n\r\n function handleProactiveTags(e) {\r\n if (hasProactiveBubblesTag([{ name: e.detail?.tag }])) {\r\n return adaChatBotProactiveBubbles(e);\r\n }\r\n adaChatBotProactive(e);\r\n }\r\n // HC-11188 end\r\n\r\n function getSessionData() {\r\n try {\r\n return JSON.parse(sessionStorage.userModel);\r\n } catch (e) {\r\n return {};\r\n }\r\n }\r\n\r\n // HC-11004\r\n async function getNextAnswerToRun(e) {\r\n const proactiveTagNames = [proactiveTagName, proactiveBubblesTagName];\r\n\r\n const { authType } = getSessionData();\r\n\r\n if (e) {\r\n const { tag, value, removed } = e.detail;\r\n\r\n if (proactiveTagNames.includes(tag) && !removed) {\r\n return {\r\n NextAnswerToRun: value,\r\n };\r\n }\r\n\r\n return;\r\n }\r\n\r\n // HC-11020 - task to add authType to sessionStorage\r\n if (authType === \"credentials\") {\r\n ({\r\n data: { tags: playerTags },\r\n } = await Playtech.API.user.getPlayerTags(proactiveTagNames.join(\",\")));\r\n log(\"Player tags response\", playerTags);\r\n if (Array.isArray(playerTags)) {\r\n // HC-11188 changed\r\n if (playerTags.length > 1) {\r\n return {\r\n NextAnswerToRun: playerTags.find(\r\n ({ name }) => name === proactiveBubblesTagName\r\n )?.value,\r\n };\r\n }\r\n if (playerTags.length === 1) {\r\n return {\r\n NextAnswerToRun: playerTags[0].value,\r\n };\r\n }\r\n }\r\n }\r\n }\r\n\r\n function onLoadBot() {\r\n if (Playtech.API.auth.isLoggedIn) {\r\n startBot();\r\n }\r\n\r\n Playtech.on(Playtech.Events.LOGGED_IN, function () {\r\n // HC-12276. setTimeout - temporary fix for LOGGED_IN. After we find a solution, we need to remove setTimeout\r\n setTimeout(startBot, 1000);\r\n });\r\n Playtech.on(Playtech.Events.LOGGED_OUT, stopBot);\r\n Playtech.on(Playtech.Events.CHAT_TOGGLE, toggleBot);\r\n Playtech.API.events.addEventListener(\r\n \"player-tag-change\",\r\n handleProactiveTags\r\n );\r\n }\r\n\r\n window.onLoadBot = onLoadBot;\r\n })();\r\n</script>\r\n<script\r\n async\r\n id=\"__ada\"\r\n data-lazy\r\n onload=\"onLoadBot()\"\r\n src=\"https://static.ada.support/embed2.js\"\r\n></script>\r\n","beforeEndBody":""},"conditionIds":["bc0b6529-9f7a-4f6b-8c4d-15194d057ee8"]},{"tagId":"949cb65e-cafe-4b5d-9565-205148726b40","tagTypeId":"custom_tag_type","name":"<2> IDIN Native","description":"Custom onClick handler for LaunchIDIN btn in native (PageIDINAddress). HC-12276 - temporary fix for LOGGED_IN","config":{"beforeEndHead":"<style>\r\n button[class*=IDINAddress__btnLaunch] {\r\n display: none !important;\r\n }\r\n\r\n .idinError {\r\n font-size: 80%;\r\n text-align: center;\r\n margin: 1rem 0;\r\n color: var(--hc-red);\r\n }\r\n\r\n .btn {\r\n display: block;\r\n margin: 5rem auto 3rem;\r\n }\r\n</style>\r\n<script>\r\n (function () {\r\n\r\n var playerTags = [];\r\n\r\n function translate(tKey) {\r\n try {\r\n return Playtech.API.translation.translate(tKey);\r\n } catch (err) {\r\n throw {error: err, code: 5};\r\n }\r\n }\r\n\r\n function isPageIDINAddress() {\r\n try {\r\n return playerTags.some(function (tag) {\r\n return tag.name === 'portal/registration/PageIDINAddress';\r\n });\r\n } catch (err) {\r\n throw {error: err, code: 1};\r\n }\r\n }\r\n\r\n function getPopupContentContainer() {\r\n try {\r\n return document.querySelector('[class*=StepsCounter__stepCounter]').parentNode;\r\n } catch (err) {\r\n throw {error: err, code: 5};\r\n }\r\n }\r\n\r\n function createContainer() {\r\n var div = document.createElement('div');\r\n div.classList.add('idinContainer')\r\n\r\n return div;\r\n }\r\n\r\n function createError(err) {\r\n var div = document.createElement('div');\r\n var error = err.error || err;\r\n var prefix = 'Error ' + (err.code || -1) + ': ';\r\n\r\n div.classList.add('idinError');\r\n div.innerHTML = prefix +\r\n (error.response && (error.response.data.errorMessage || err.reason) || error.message);\r\n\r\n return div;\r\n }\r\n\r\n function appendError(err) {\r\n var containerEl = document.querySelector('.idinContainer') || getPopupContentContainer();\r\n if (containerEl) {\r\n containerEl.append(createError(err));\r\n }\r\n }\r\n\r\n function createNewLaunchBtn() {\r\n var btn = document.createElement('button');\r\n btn.type = 'button';\r\n btn.classList.add('btn');\r\n btn.innerHTML = translate('playtech.mobile.system.hc-registration.IDINAddress.button.launchIDIN');\r\n\r\n btn.addEventListener('click', function () {\r\n btn.setAttribute('disabled', 'disabled');\r\n\r\n var docType = playerTags && playerTags.find(tag => tag.name === 'portal/registration/PageExternalService')?.value;\r\n if (docType) {\r\n Playtech.API.server.initiateDocumentUpload({\r\n documentType: docType,\r\n service: 'trunarrative'\r\n }).then((response) => {\r\n var redirectURL = response.data && response.data.redirectURL;\r\n btn.removeAttribute('disabled');\r\n\r\n Playtech.API.htcmd.sendMessage('openCustomTab', {\r\n path: redirectURL\r\n });\r\n }).catch((err) => {\r\n btn.removeAttribute('disabled');\r\n appendError({error: err, code: 2});\r\n });\r\n } else {\r\n btn.removeAttribute('disabled');\r\n appendError({error: 'Cannot find document type', code: 3});\r\n }\r\n });\r\n\r\n return btn;\r\n }\r\n\r\n function main() {\r\n try {\r\n if (isPageIDINAddress()) {\r\n var containerEl = createContainer();\r\n var newLaunchBtn = createNewLaunchBtn();\r\n\r\n containerEl.append(newLaunchBtn);\r\n getPopupContentContainer().append(containerEl);\r\n }\r\n } catch (err) {\r\n getPopupContentContainer().append(createError(err));\r\n }\r\n }\r\n\r\n function getPlayerTags() {\r\n return Playtech.API.user.getPlayerTags().then(function (response) {\r\n playerTags = response.data.tags;\r\n });\r\n }\r\n\r\n Playtech.on(Playtech.Events.LOGGED_IN, function () {\r\n // HC-12276. setTimeout - temporary fix for LOGGED_IN. After we find a solution, we need to remove setTimeout\r\n setTimeout(() => getPlayerTags().then(main), 1000);\r\n });\r\n\r\n Playtech.on(Playtech.Events.LOGGED_OUT, function () {\r\n playerTags = [];\r\n });\r\n\r\n if (Playtech.API.auth.isLoggedIn) {\r\n getPlayerTags().then(main);\r\n }\r\n\r\n })();\r\n</script>\r\n","beforeEndBody":""},"conditionIds":["109b8f48-da23-4e5d-8f62-b1371cf41a08","bc0b6529-9f7a-4f6b-8c4d-15194d057ee8"]},{"tagId":"ec6abb72-f9db-4c0e-b880-640fc35f3f63","tagTypeId":"custom_js","name":"<2> Pre-cache IDIN url","description":"Pre-cache IDIN url. HC-12276 - temporary fix for LOGGED_IN","config":{"code":"(function () {\r\n let wasCached = false;\r\n\r\n async function initiateDocumentUpload(docType) {\r\n await Playtech.API.server.initiateDocumentUpload({\r\n documentType: docType,\r\n service: \"trunarrative\",\r\n });\r\n\r\n wasCached = true;\r\n }\r\n\r\n async function fetchDocumentType() {\r\n const {\r\n data: { tags },\r\n } = await Playtech.API.user.getPlayerTags(\r\n \"portal/registration/PageExternalService\"\r\n );\r\n console.log('>>> fetchDocumentType tags:', tags);\r\n return tags[0]?.value;\r\n }\r\n\r\n async function initiateDocumentUploadIfIDIN() {\r\n if (wasCached) {\r\n return;\r\n }\r\n\r\n const docType = await fetchDocumentType();\r\n\r\n if (docType === \"IDIN\") {\r\n initiateDocumentUpload(docType);\r\n }\r\n }\r\n\r\n function playerTagChangeListener(e) {\r\n const { tag, value, removed } = e.detail;\r\n\r\n if (\r\n !wasCached &&\r\n tag === \"portal/registration/PageExternalService\" &&\r\n !removed &&\r\n value === \"IDIN\"\r\n ) {\r\n initiateDocumentUpload(value);\r\n }\r\n }\r\n\r\n function subscribeOnTagChange() {\r\n initiateDocumentUploadIfIDIN();\r\n\r\n Playtech.API.events.addEventListener(\r\n \"player-tag-change\",\r\n playerTagChangeListener\r\n );\r\n }\r\n\r\n function unsubscribeOnTagChange() {\r\n Playtech.API.events.removeEventListener(\r\n \"player-tag-change\",\r\n playerTagChangeListener\r\n );\r\n }\r\n\r\n Playtech.on(Playtech.Events.LOGGED_IN, function () {\r\n // HC-12276. setTimeout - temporary fix for LOGGED_IN. After we find a solution, we need to remove setTimeout\r\n setTimeout(subscribeOnTagChange, 1000);\r\n });\r\n\r\n Playtech.on(Playtech.Events.LOGGED_OUT, unsubscribeOnTagChange);\r\n\r\n if (Playtech.API.auth.isLoggedIn) {\r\n subscribeOnTagChange();\r\n }\r\n})();\r\n"},"conditionIds":["bc0b6529-9f7a-4f6b-8c4d-15194d057ee8"]},{"tagId":"562972a3-58b7-479d-9dd4-7f9ea54d4fe3","tagTypeId":"custom_tag_type","name":"Premium theme","description":"Premium theme","config":{"beforeEndHead":"<style>\r\n /* HC-12256 Premium lounge stylings - START */\r\n :root {\r\n --hc-premium-premium-btn-bg: linear-gradient(\r\n 130deg,\r\n #a96b45 5.13%,\r\n #e3a455 11.65%,\r\n #f6dba6 27.03%,\r\n #ffebc4 44.03%,\r\n #f0be79 57.2%,\r\n #ffebc3 67.74%,\r\n #eebc70 82.38%,\r\n #ca8846 92.1%,\r\n #ba7f3b 92.87%,\r\n #a96b45 94.56%\r\n );\r\n --hc-premium-primary-btn-border: linear-gradient(\r\n 130deg,\r\n #a96b45 5.13%,\r\n #e3a455 11.65%,\r\n #f6dba6 27.03%,\r\n #ffebc4 44.03%,\r\n #f0be79 57.2%,\r\n #ffebc3 67.74%,\r\n #eebc70 82.38%,\r\n #ca8846 92.1%,\r\n #ba7f3b 92.87%,\r\n #a96b45 94.56%\r\n )\r\n 1;\r\n --hc-premium-secondary-btn-border: conic-gradient(\r\n from 180deg at 48.5% 50%,\r\n #3f1f0f -28.12deg,\r\n #e3a455 26.25deg,\r\n #f6dba6 88.12deg,\r\n #ffebc4 156.58deg,\r\n #f0be79 191.74deg,\r\n #8f653b 213.59deg,\r\n #673d22 225.95deg,\r\n #ba7f3b 255.19deg,\r\n #eebc70 278.6deg,\r\n #3f1f0f 331.88deg,\r\n #e3a455 386.25deg\r\n )\r\n 1;\r\n --hc-premium-secondary-btn-border-alt: conic-gradient(\r\n from 270deg at 48.5% 50%,\r\n #3f1f0f -28.12deg,\r\n #e3a455 26.25deg,\r\n #f6dba6 88.12deg,\r\n #ffebc4 156.58deg,\r\n #f0be79 191.74deg,\r\n #8f653b 213.59deg,\r\n #673d22 225.95deg,\r\n #ba7f3b 255.19deg,\r\n #eebc70 278.6deg,\r\n #3f1f0f 331.88deg,\r\n #e3a455 386.25deg\r\n )\r\n 1;\r\n\r\n --hc-premium-primary-btn-disabled-bg: linear-gradient(\r\n 129.84deg,\r\n #7f786f 6.18%,\r\n #b9b6ad 32.41%,\r\n #b9b6ad 69.38%,\r\n #7f786f 88.86%\r\n );\r\n --hc-gold-gradient-alt: linear-gradient(\r\n 130deg,\r\n #fde5b8 6.18%,\r\n #eebd71 26.65%,\r\n #a86b45 46.32%,\r\n #dda55d 69.38%,\r\n #fde5b8 88.86%\r\n );\r\n }\r\n\r\n body {\r\n --hc-primary-btn-background: var(--hc-premium-premium-btn-bg);\r\n --disabled-btn-bg-color: var(--hc-premium-primary-btn-disabled-bg);\r\n }\r\n\r\n /* button primary and button from BB in MyHc */\r\n body .my-hc-sidebar .btn,\r\n body [class*=\"Button__primary\"][class*=\"Button__success\"] {\r\n color: var(--hc-black) !important;\r\n position: relative;\r\n border-radius: var(--hc-border-radius);\r\n }\r\n\r\n body .my-hc-sidebar .btn {\r\n background: var(--hc-primary-btn-background) !important;\r\n }\r\n\r\n body .my-hc-sidebar .btn::before,\r\n body [class*=\"Button__primary\"][class*=\"Button__success\"]::before {\r\n content: \"\";\r\n position: absolute;\r\n inset: 0;\r\n z-index: 0;\r\n border-radius: 2px;\r\n padding: 0;\r\n pointer-events: none;\r\n border: 1px solid transparent;\r\n border-image: var(--hc-premium-primary-btn-border);\r\n box-sizing: border-box;\r\n }\r\n\r\n body .my-hc-sidebar .btn::disabled,\r\n body [class*=\"Button__primary\"][class*=\"Button__success\"]:disabled {\r\n color: var(--hc-gray-transparent-60) !important;\r\n }\r\n\r\n /* button secondary start */\r\n body [class*=\"JoinButton__join\"]:not([class*=\"Button__primary\"]),\r\n body [class*=\"Button__quicklink\"],\r\n body [class*=\"Button__quicklink\"][class*=\"Button__success\"],\r\n body [class*=\"Button__negative\"],\r\n body [class*=\"Button__info\"],\r\n body [class*=\"Button__generic\"],\r\n body [class*=\"Button__revert\"],\r\n body [class*=\"Button__secondary\"][class*=\"Button__success\"] {\r\n position: relative;\r\n border: 1px solid transparent !important;\r\n border-radius: 2px;\r\n background: var(--hc-gold-gradient) !important;\r\n background-clip: text !important;\r\n -webkit-text-fill-color: #0000;\r\n box-shadow: 0px 8px 16px 0px var(--hc-black-transparent-10);\r\n }\r\n\r\n body [class*=\"JoinButton__join\"]:not([class*=\"Button__primary\"])::before,\r\n body [class*=\"Button__quicklink\"]::before,\r\n body [class*=\"Button__quicklink\"][class*=\"Button__success\"]::before,\r\n body [class*=\"Button__negative\"]::before,\r\n body [class*=\"Button__info\"]::before,\r\n body [class*=\"Button__generic\"]::before,\r\n body [class*=\"Button__revert\"]::before,\r\n body [class*=\"Button__secondary\"][class*=\"Button__success\"]::before {\r\n content: \"\";\r\n position: absolute;\r\n inset: 0;\r\n z-index: 0;\r\n border-radius: 2px;\r\n padding: 0;\r\n pointer-events: none;\r\n border: 1px solid transparent;\r\n border-image: var(--hc-premium-secondary-btn-border);\r\n box-sizing: border-box;\r\n transition: border-image 0.3s;\r\n }\r\n\r\n body\r\n [class*=\"JoinButton__join\"]:not(\r\n [class*=\"Button__primary\"]\r\n )[class*=\"Button__light\"],\r\n body [class*=\"Button__quicklink\"][class*=\"Button__light\"],\r\n body\r\n [class*=\"Button__quicklink\"][class*=\"Button__success\"][class*=\"Button__light\"],\r\n body [class*=\"Button__negative\"][class*=\"Button__light\"],\r\n body [class*=\"Button__info\"][class*=\"Button__light\"],\r\n body [class*=\"Button__generic\"][class*=\"Button__light\"],\r\n body [class*=\"Button__revert\"][class*=\"Button__light\"],\r\n body\r\n [class*=\"Button__secondary\"][class*=\"Button__success\"][class*=\"Button__light\"] {\r\n border-radius: 2px;\r\n background: var(--hc-gold-gradient-alt) !important;\r\n background-clip: text !important;\r\n -webkit-text-fill-color: #0000;\r\n }\r\n\r\n body\r\n [class*=\"JoinButton__join\"]:not(\r\n [class*=\"Button__primary\"]\r\n )[class*=\"Button__light\"]::after,\r\n body [class*=\"Button__quicklink\"][class*=\"Button__light\"]::after,\r\n body\r\n [class*=\"Button__quicklink\"][class*=\"Button__success\"][class*=\"Button__light\"]::after,\r\n body [class*=\"Button__negative\"][class*=\"Button__light\"]::after,\r\n body [class*=\"Button__info\"][class*=\"Button__light\"]::after,\r\n body [class*=\"Button__generic\"][class*=\"Button__light\"]::after,\r\n body [class*=\"Button__revert\"][class*=\"Button__light\"]::after,\r\n body\r\n [class*=\"Button__secondary\"][class*=\"Button__success\"][class*=\"Button__light\"]::after {\r\n content: \"\";\r\n position: absolute;\r\n left: 0;\r\n right: 0;\r\n top: 0;\r\n bottom: 0;\r\n box-shadow: inset 0px 0px 32px 0px #ffebc4;\r\n }\r\n\r\n /* button secondary hover, active */\r\n body [class*=\"Button__quicklink\"]:hover,\r\n body [class*=\"Button__quicklink\"][class*=\"Button__success\"]:hover,\r\n body [class*=\"Button__negative\"]:hover,\r\n body [class*=\"Button__info\"]:hover,\r\n body [class*=\"Button__generic\"]:hover,\r\n body [class*=\"Button__revert\"]:hover,\r\n body [class*=\"Button__secondary\"][class*=\"Button__success\"]:hover {\r\n background: var(--hc-gold-gradient-alt) !important;\r\n background-clip: text !important;\r\n -webkit-text-fill-color: #0000;\r\n }\r\n\r\n body [class*=\"Button__quicklink\"]:hover::before,\r\n body [class*=\"Button__quicklink\"][class*=\"Button__success\"]:hover::before,\r\n body [class*=\"Button__negative\"]:hover::before,\r\n body [class*=\"Button__info\"]:hover::before,\r\n body [class*=\"Button__generic\"]:hover::before,\r\n body [class*=\"Button__revert\"]:hover::before,\r\n body [class*=\"Button__secondary\"][class*=\"Button__success\"]:hover::before {\r\n border-image: var(--hc-premium-secondary-btn-border-alt);\r\n }\r\n\r\n body [class*=\"Button__quicklink\"][class*=\"Button__active\"],\r\n body\r\n [class*=\"Button__quicklink\"][class*=\"Button__success\"][class*=\"Button__active\"],\r\n body [class*=\"Button__negative\"][class*=\"Button__active\"],\r\n body [class*=\"Button__info\"][class*=\"Button__active\"],\r\n body [class*=\"Button__generic\"][class*=\"Button__active\"],\r\n body [class*=\"Button__revert\"][class*=\"Button__active\"],\r\n body\r\n [class*=\"Button__secondary\"][class*=\"Button__success\"][class*=\"Button__active\"] {\r\n background: var(--hc-gold-gradient-alt) !important;\r\n background-clip: text !important;\r\n -webkit-text-fill-color: #0000;\r\n }\r\n\r\n body [class*=\"Button__quicklink\"][class*=\"Button__active\"]::before,\r\n body\r\n [class*=\"Button__quicklink\"][class*=\"Button__success\"][class*=\"Button__active\"]::before,\r\n body [class*=\"Button__negative\"][class*=\"Button__active\"]::before,\r\n body [class*=\"Button__info\"][class*=\"Button__active\"]::before,\r\n body [class*=\"Button__generic\"][class*=\"Button__active\"]::before,\r\n body [class*=\"Button__revert\"][class*=\"Button__active\"]::before,\r\n body\r\n [class*=\"Button__secondary\"][class*=\"Button__success\"][class*=\"Button__active\"]::before {\r\n border-image: var(--hc-premium-secondary-btn-border-alt);\r\n }\r\n\r\n /* button secondary disabled */\r\n body [class*=\"JoinButton__join\"]:not([class*=\"Button__primary\"]):disabled,\r\n body [class*=\"Button__quicklink\"]:disabled,\r\n body [class*=\"Button__quicklink\"][class*=\"Button__success\"]:disabled,\r\n body [class*=\"Button__negative\"]:disabled,\r\n body [class*=\"Button__info\"]:disabled,\r\n body [class*=\"Button__generic\"]:disabled,\r\n body [class*=\"Button__revert\"]:disabled,\r\n body [class*=\"Button__secondary\"][class*=\"Button__success\"]:disabled {\r\n border: 1px solid transparent !important;\r\n }\r\n\r\n body\r\n [class*=\"JoinButton__join\"]:not([class*=\"Button__primary\"]):disabled::after,\r\n body [class*=\"Button__quicklink\"]:disabled::after,\r\n body [class*=\"Button__quicklink\"][class*=\"Button__success\"]:disabled::after,\r\n body [class*=\"Button__negative\"]:disabled::after,\r\n body [class*=\"Button__info\"]:disabled::after,\r\n body [class*=\"Button__generic\"]:disabled::after,\r\n body [class*=\"Button__revert\"]:disabled::after,\r\n body [class*=\"Button__secondary\"][class*=\"Button__success\"]:disabled::after {\r\n content: \"\";\r\n position: absolute;\r\n left: 0;\r\n top: 0;\r\n background: var(--hc-blue-transparent-60);\r\n right: 0;\r\n bottom: 0;\r\n }\r\n\r\n body\r\n [class*=\"JoinButton__join\"]:not(\r\n [class*=\"Button__primary\"]\r\n )[class*=\"Button__light\"]:disabled::after,\r\n body [class*=\"Button__quicklink\"][class*=\"Button__light\"]:disabled::after,\r\n body\r\n [class*=\"Button__quicklink\"][class*=\"Button__success\"][class*=\"Button__light\"]:disabled::after,\r\n body [class*=\"Button__negative\"][class*=\"Button__light\"]:disabled::after,\r\n body [class*=\"Button__info\"][class*=\"Button__light\"]:disabled::after,\r\n body [class*=\"Button__generic\"][class*=\"Button__light\"]:disabled::after,\r\n body [class*=\"Button__revert\"][class*=\"Button__light\"]:disabled::after,\r\n body\r\n [class*=\"Button__secondary\"][class*=\"Button__success\"][class*=\"Button__light\"]:disabled::after {\r\n background: var(--hc-gray-transparent-40);\r\n box-shadow: none;\r\n }\r\n\r\n /* button secondary end*/\r\n\r\n /* styling for preferences title */\r\n /* styling for game info popup title */\r\n body .cms-games-grid-info-game-name,\r\n body [class*=\"PortletTitle__title\"] {\r\n background: var(--hc-gold-gradient);\r\n background-clip: text;\r\n -webkit-text-fill-color: #0000;\r\n text-align: center;\r\n }\r\n\r\n /* HC-12256 Premium lounge stylings - END */\r\n\r\n /* ******\r\n HC-12248: Premium lounge Games Grid - START\r\n ****** */\r\n\r\n /* category title & view more text */\r\n body [class*=\"GamesHeader__categoryName\"],\r\n body [class*=\"GamesHeader__viewMore\"] {\r\n background: var(--hc-gold-gradient);\r\n background-clip: text;\r\n text-align: center;\r\n -webkit-text-fill-color: #0000;\r\n }\r\n\r\n /* arrow buttons - active */\r\n body [class*=\"GamesSliderView__leftArrow\"]:focus,\r\n body [class*=\"GamesSliderView__rightArrow\"]:focus,\r\n body [class*=\"GamesSliderView__leftArrow\"],\r\n body [class*=\"GamesSliderView__rightArrow\"] {\r\n background: url(\"/library/Premium lounge/Games Grid/arrows/forward.svg\")\r\n center no-repeat;\r\n }\r\n\r\n /* arrow buttons - hover */\r\n body [class*=\"GamesSliderView__leftArrow\"]:hover,\r\n body [class*=\"GamesSliderView__rightArrow\"]:hover {\r\n background: url(\"/library/Premium lounge/Games Grid/arrows/forward.svg\")\r\n center no-repeat;\r\n }\r\n\r\n /* arrow buttons - inactive */\r\n body [class*=\"GamesSliderView__leftArrow\"][class*=\"Slider__disabledArrow\"],\r\n body [class*=\"GamesSliderView__rightArrow\"][class*=\"Slider__disabledArrow\"] {\r\n opacity: 1;\r\n background: url(\"/library/Premium lounge/Games Grid/arrows/forward-disabled.svg\")\r\n center no-repeat !important;\r\n }\r\n\r\n /* tiles border gradient */\r\n body [class*=\"Game__gameTile\"] {\r\n position: relative;\r\n padding: 1px;\r\n }\r\n\r\n body [class*=\"Game__gameTile\"]:before {\r\n background: linear-gradient(\r\n 130deg,\r\n #7c4e19 6.18%,\r\n #eec84d 32.41%,\r\n #eec84d 69.38%,\r\n #7c4e19 88.86%\r\n );\r\n border-radius: inherit;\r\n box-sizing: border-box;\r\n content: \"\";\r\n inset: 0;\r\n -webkit-mask: linear-gradient(#fff 0 0) content-box,\r\n linear-gradient(#fff 0 0);\r\n mask-composite: exclude;\r\n padding: inherit;\r\n position: absolute;\r\n z-index: 0;\r\n }\r\n\r\n body [class*=\"Game__gameTile\"] [class*=\"Game__container\"] {\r\n overflow: hidden;\r\n border-radius: inherit;\r\n }\r\n /* ******\r\n HC-12248: Premium lounge Games Grid - END\r\n ****** */\r\n\r\n /* HC-12265 [STC] Leaderboards Premium restyle Start*/\r\n body [class*=\"RaceListCard__card\"] [class*=\"Card__text\"],\r\n body [class*=\"RaceListCard__card\"] [class*=\"Card__value\"],\r\n body [class*=\"RaceListCard__card\"] [class*=\"CountDownBadge__value\"] {\r\n background: var(--hc-gold-gradient);\r\n background-clip: text;\r\n text-align: center;\r\n -webkit-text-fill-color: #0000;\r\n }\r\n /* HC-12265 [STC] Leaderboards Premium restyle End*/\r\n\r\n /* Promotion premium styles - START */\r\n /* arrow buttons - active */\r\n body [class*=\"CarouselControls__prevControl\"]:focus,\r\n body [class*=\"CarouselControls__nextControl\"]:focus,\r\n body [class*=\"CarouselControls__prevControl\"],\r\n body [class*=\"CarouselControls__nextControl\"] {\r\n background: url(\"/library/Premium lounge/Games Grid/arrows/forward.svg\")\r\n center no-repeat;\r\n }\r\n\r\n /* arrow buttons - hover */\r\n body [class*=\"CarouselControls__prevControl\"]:hover,\r\n body [class*=\"CarouselControls__nextControl\"]:hover {\r\n background: url(\"/library/Premium lounge/Games Grid/arrows/forward.svg\")\r\n center no-repeat;\r\n }\r\n\r\n /* arrow buttons - inactive */\r\n body [class*=\"CarouselControls__prevControl\"][class*=\"Slider__disabledArrow\"],\r\n body\r\n [class*=\"CarouselControls__nextControl\"][class*=\"Slider__disabledArrow\"] {\r\n opacity: 1;\r\n background: url(\"/library/Premium lounge/Games Grid/arrows/forward-disabled.svg\")\r\n center no-repeat !important;\r\n }\r\n /* Status Badge active */\r\n body\r\n [class*=\"StartStatusBadge__container\"]\r\n [class*=\"StartStatusBadge__active\"] {\r\n background: var(--hc-gold-gradient);\r\n color: var(--hc-black);\r\n }\r\n\r\n /* Status Badge completed, pendingReview */\r\n body\r\n [class*=\"StartStatusBadge__container\"]\r\n [class*=\"StartStatusBadge__completed\"],\r\n body\r\n [class*=\"StartStatusBadge__container\"]\r\n [class*=\"StartStatusBadge__pendingReview\"] {\r\n position: relative;\r\n border: 1px solid transparent !important;\r\n border-radius: 2px;\r\n background: var(--hc-gold-gradient) !important;\r\n background-clip: text !important;\r\n -webkit-text-fill-color: #0000;\r\n }\r\n\r\n body\r\n [class*=\"StartStatusBadge__container\"]\r\n [class*=\"StartStatusBadge__completed\"]::before,\r\n body\r\n [class*=\"StartStatusBadge__container\"]\r\n [class*=\"StartStatusBadge__pendingReview\"]::before {\r\n content: \"\";\r\n position: absolute;\r\n inset: 0;\r\n z-index: 0;\r\n border-radius: 2px;\r\n padding: 0;\r\n pointer-events: none;\r\n border: 1px solid transparent;\r\n border-image: var(--hc-premium-secondary-btn-border);\r\n box-sizing: border-box;\r\n transition: border-image 0.3s;\r\n }\r\n\r\n /* Status Badge notStarted, cancelledByAdmin */\r\n\r\n body\r\n [class*=\"StartStatusBadge__container\"]\r\n [class*=\"StartStatusBadge__cancelledByAdmin\"],\r\n body\r\n [class*=\"StartStatusBadge__container\"]\r\n [class*=\"StartStatusBadge__notStarted\"] {\r\n position: relative;\r\n border: 1px solid transparent !important;\r\n border-radius: 2px;\r\n background: var(--hc-gold-gradient) !important;\r\n background-clip: text !important;\r\n -webkit-text-fill-color: #0000;\r\n }\r\n body\r\n [class*=\"StartStatusBadge__container\"]\r\n [class*=\"StartStatusBadge__cancelledByAdmin\"]::before,\r\n body\r\n [class*=\"StartStatusBadge__container\"]\r\n [class*=\"StartStatusBadge__notStarted\"]::before {\r\n content: \"\";\r\n position: absolute;\r\n inset: 0;\r\n z-index: 0;\r\n border-radius: 2px;\r\n padding: 0;\r\n pointer-events: none;\r\n border: 1px solid transparent;\r\n border-image: var(--hc-premium-secondary-btn-border);\r\n box-sizing: border-box;\r\n transition: border-image 0.3s;\r\n }\r\n body\r\n [class*=\"StartStatusBadge__container\"]\r\n [class*=\"StartStatusBadge__cancelledByAdmin\"]::after,\r\n body\r\n [class*=\"StartStatusBadge__container\"]\r\n [class*=\"StartStatusBadge__notStarted\"]::after {\r\n content: \"\";\r\n position: absolute;\r\n left: 0;\r\n top: 0;\r\n background: var(--hc-blue-transparent-60);\r\n right: 0;\r\n bottom: 0;\r\n }\r\n\r\n /* Promotion premium styles - END */\r\n</style>","beforeEndBody":""},"conditionIds":["b8cd6255-5275-430e-b4b3-34917ce3e157","2069bef2-303b-40f0-82c4-5b0178ce78ea"]},{"tagId":"2bf293bd-336d-4de2-8d33-57fa1df1c317","tagTypeId":"custom_tag_type","name":"SportsSlideGamesStyle","description":"Sports side games config","config":{"beforeEndHead":"<style>\r\n :root {\r\n --card-control-height: 2.5rem;\r\n --sport-footer-height: 3rem;\r\n --card-popup-minimized-margin: calc(\r\n 100dvh -\r\n (\r\n var(--header-height) + var(--sport-footer-height) +\r\n var(--card-control-height)\r\n )\r\n );\r\n /* 152px is the height sport-footer-height + card-control-height + header-height. card-popup-minimized-margin: calc(100dvh - 140px) - it is default core value */\r\n }\r\n\r\n #sportsbook-side-games {\r\n padding: 0;\r\n margin: 0 auto;\r\n }\r\n\r\n .mobile-layout #sportsbook-side-games {\r\n bottom: auto;\r\n top: var(--header-height);\r\n max-height: calc(\r\n 100dvh - var(--header-height) - var(--sport-footer-height)\r\n );\r\n }\r\n #sportsbook-side-games [class*=\"CardPopup__category\"],\r\n #sportsbook-side-games [class*=\"contentContainer\"] {\r\n margin: 0;\r\n padding: 0;\r\n }\r\n\r\n #sportsbook-side-games [class*=\"CardPopup__buttons\"] {\r\n width: 100%;\r\n text-align: right;\r\n background: var(--light-theme-bg-color);\r\n height: var(--card-control-height);\r\n }\r\n\r\n #sportsbook-side-games .game-iframe {\r\n height: calc(\r\n 100dvh - var(--header-height) - var(--card-control-height) -\r\n var(--sport-footer-height)\r\n );\r\n }\r\n\r\n .mobile-layout\r\n #sportsbook-side-games\r\n [class*=\"GamesView__grid\"]\r\n [class*=\"GamesView__slide\"]:first-child,\r\n .tablet\r\n #sportsbook-side-games\r\n [class*=\"GamesView__grid\"]\r\n [class*=\"GamesView__slide\"]:first-child {\r\n padding: 0;\r\n }\r\n /* I use class \"tablet\" because the \"desktop-layout\" class is used for the iPad Pro*/\r\n\r\n #sportsbook-side-games [class*=\"CloseButton__close\"] {\r\n display: none;\r\n }\r\n\r\n @media (max-width: 400px) {\r\n .mobile-layout #sportsbook-side-games .col-mob-4 {\r\n width: calc(100vw - 0.5rem);\r\n }\r\n }\r\n</style>","beforeEndBody":""},"conditionIds":["1a66cab4-39b1-4092-a5cb-81887c12ee83","10c6a1bf-bd4b-4c65-9256-45b166858b9d"]},{"tagId":"2f8c08e0-cfd1-4da9-8ae1-9e2d86701048","tagTypeId":"custom_js","name":"Page time counter for specific RG pages","description":"HC-11165","config":{"code":"// HC-11165\n(function() {\n if (!Playtech.API.user.isLoggedIn()) {\n return;\n }\n\n var FIFTEEN_SECONDS = 15000;\n var ONE_MINUTE = 60000;\n var clearUrl = Playtech.API.common.getCleanUrl();\n var notificationSession = Date.now();\n\n setPlayerTag(clearUrl, notificationSession, 0);\n\n var timeout = setTimeout(() => {\n setPlayerTag(clearUrl, notificationSession, 1);\n }, FIFTEEN_SECONDS);\n\n let i = 2;\n var interval = setInterval(() => {\n if (i === 11) {\n clearInterval(interval);\n }\n\n setPlayerTag(clearUrl, notificationSession, i++);\n\n }, ONE_MINUTE);\n\n function setPlayerTag(pageName, sessionId, increment) {\n var currentPage = Playtech.API.common.getCleanUrl();\n if (currentPage !== pageName) {\n clearInterval(interval);\n clearTimeout(timeout);\n return;\n }\n\n var tagValue = { pageName, notificationSession: sessionId, timestampCount: increment };\n\n Playtech.API.user.setPlayerTags([\n {\n name: 'Portal/SafeBet/ResponsibleGamingPage',\n value: JSON.stringify(tagValue),\n type: 'text'\n }\n ]);\n }\n})();"},"conditionIds":["10c6a1bf-bd4b-4c65-9256-45b166858b9d"]},{"tagId":"2f9347a2-7cc0-4494-b31b-a07c5ea3b13b","tagTypeId":"custom_tag_type","name":"Sportsbook Styles","description":"HC-11970 Sportsbook max page width","config":{"beforeEndHead":"<style>\n /* HC-11970 */\n :root {\n --layout-max-width: 1440px;\n }\n</style>","beforeEndBody":""},"conditionIds":["1a66cab4-39b1-4092-a5cb-81887c12ee83","2069bef2-303b-40f0-82c4-5b0178ce78ea"]},{"tagId":"a5557c0e-b2f1-466e-b8e3-d171b0254ac3","tagTypeId":"custom_js","name":"<3> Push User Data to DataLayer","description":"HC-11951,HC-11898 ( push userId, email and ageGroup to dataLayer)","config":{"code":" (function () {\r\n const loginEvent = \"login\";\r\n const registrationCompletedEvent = \"Registration:online:first_login\";\r\n\r\n async function sha256Hash(email) {\r\n const encoder = new TextEncoder();\r\n const emailBuffer = encoder.encode(email);\r\n const hashBuffer = await crypto.subtle.digest(\"SHA-256\", emailBuffer);\r\n const hashArray = Array.from(new Uint8Array(hashBuffer));\r\n const hashHex = hashArray\r\n .map((byte) => byte.toString(16).padStart(2, \"0\"))\r\n .join(\"\");\r\n return hashHex;\r\n }\r\n\r\n function calculateUserAge(date) {\r\n if (!date) return 0;\r\n\r\n return Math.abs(\r\n new Date(new Date() - new Date(date)).getFullYear() - 1970\r\n );\r\n }\r\n\r\n function getAgeGroup(age) {\r\n const ageGroups = [\r\n { min: 18, max: 23, group: 1 },\r\n { min: 24, max: 29, group: 2 },\r\n { min: 30, max: 34, group: 3 },\r\n { min: 35, max: 39, group: 4 },\r\n { min: 40, max: 44, group: 5 },\r\n { min: 45, max: 49, group: 6 },\r\n { min: 50, max: 54, group: 7 },\r\n { min: 55, max: 60, group: 8 },\r\n { min: 61, max: Infinity, group: 9 },\r\n ];\r\n\r\n for (const ageGroup of ageGroups) {\r\n if (age >= ageGroup.min && age <= ageGroup.max) {\r\n return ageGroup.group;\r\n }\r\n }\r\n\r\n return \"\";\r\n }\r\n\r\n const setUserData = (event) => {\r\n let userDetails = {};\r\n const user = {};\r\n\r\n if (event === registrationCompletedEvent) {\r\n userDetails = JSON.parse(sessionStorage.getItem(\"userModel\"));\r\n }\r\n\r\n const { userId, email, birthDate } =\r\n event === loginEvent\r\n ? Playtech.fetchUserDetails()\r\n : {\r\n ...userDetails,\r\n ...userDetails?.formData,\r\n birthDate: userDetails?.formData?.birthdate,\r\n };\r\n\r\n const userAge = calculateUserAge(birthDate);\r\n const ageGroup = getAgeGroup(userAge);\r\n\r\n user.userId = userId;\r\n if (ageGroup) {\r\n user.ageGroup = ageGroup;\r\n }\r\n\r\n sha256Hash(email)\r\n .then((hash) => {\r\n user.hash = hash;\r\n })\r\n .catch((err) => {\r\n console.error(\"HC-11898 Error hashing email:\", err);\r\n })\r\n .finally((err) => {\r\n window.dataLayer = window.dataLayer || [];\r\n\r\n const dataLayerObject = {\r\n event: event,\r\n user: user,\r\n };\r\n\r\n if (event === registrationCompletedEvent) {\r\n dataLayerObject.new_customer = true;\r\n }\r\n window.dataLayer.push(dataLayerObject);\r\n });\r\n };\r\n\r\n if (Playtech.API.auth.isLoggedIn) {\r\n setUserData(loginEvent);\r\n }\r\n\r\n Playtech.on(Playtech.Events.LOGGED_IN, () => {\r\n setUserData(loginEvent);\r\n });\r\n\r\n Playtech.on(Playtech.Events.REGISTRATION_COMPLETED, () => {\r\n setUserData(registrationCompletedEvent);\r\n });\r\n })();"},"conditionIds":["bc0b6529-9f7a-4f6b-8c4d-15194d057ee8"]},{"tagId":"32950625-cb76-43b7-b3e7-4c5e24f0ea64","tagTypeId":"custom_js","name":"Game launch","description":"game launch","config":{"code":"(function () {\n if (\n Playtech.API.common.getCleanUrl() !== '/gamelaunch' ||\n Playtech.Variables.isAdminLoggedIn\n ) {\n return;\n }\n\n var searchParams = new URLSearchParams(window.location.search);\n var gameCodeValue = searchParams.get('gameCode');\n\n function waitForGamesConfiguration() {\n var delay = 1000;\n var timeout = -1;\n var times = 0;\n var callback = function (res, rej) {\n if (Playtech.Variables.games) {\n res({ times });\n return;\n }\n\n if (times >= 30) {\n rej({ times });\n return;\n }\n\n times += 1;\n\n timeout = setTimeout(function () {\n callback(res, rej);\n }, delay);\n };\n\n return new Promise(function (resolve, reject) {\n timeout = setTimeout(function () {\n callback(resolve, reject);\n }, delay);\n });\n }\n\n function launchGame(code) {\n if (Playtech.API.auth.isLoggedIn) {\n Playtech.API.popup.showPopup({\n content:\n 'playtech.mobile.system.games.popup-blocker-with-confirm',\n buttons: [\n {\n text: 'playtech.mobile.system.button.realPlay',\n\n onClick() {\n Playtech.API.game.open({ code: code });\n }\n }\n ],\n layer: 'HIGH_PRIORITY'\n // closeAll: true\n });\n } else {\n Playtech.API.game.open({ code: code });\n }\n }\n\n if (gameCodeValue) {\n waitForGamesConfiguration().then(function () {\n Playtech?.API.common.navigate(\n '/',\n { replace: true },\n { removeParams: ['gameCode'] }\n );\n\n launchGame(gameCodeValue);\n });\n } else {\n Playtech.API.common.navigate('/error-page');\n }\n})();\n"},"conditionIds":["f47bb07f-0e1a-4901-b766-673d8728d2dd","2069bef2-303b-40f0-82c4-5b0178ce78ea"]},{"tagId":"590a37aa-25d0-42ac-93ec-1f21f5804a7b","tagTypeId":"custom_tag_type","name":"[Regulation] - BlockAccessOnNativeApps","description":"HC-11575 - Block access on Native Apps","config":{"beforeEndHead":"<style>\n #blockAccessOnNativeAppsPopup .hideBtn {\n display: none;\n }\n</style>\n<script>\n (function () {\n const WEB_CONTENT = \"BLOCK_ACCESS_ON_NATIVE_APPS\";\n const POPUP_ID = \"blockAccessOnNativeAppsPopup\";\n const REQUIRE_CONFIRMATION_PLAYER_TAG_NAME =\n \"portal/regulation/requireConfirmation\";\n\n function log() {\n if (localStorage.getItem(\"isLoggerEnabled\") === \"true\") {\n console.log.apply(\n console,\n [\"[Block Access On Native Apps] \"].concat(Array.from(arguments))\n );\n }\n }\n\n function shouldShowBlockingPopup(tags) {\n try {\n return Boolean(\n tags[0]?.name === REQUIRE_CONFIRMATION_PLAYER_TAG_NAME &&\n tags[0]?.value === \"true\"\n );\n } catch (err) {\n throw { error: err, code: 1 };\n }\n }\n\n function showBlockingPopup(tags) {\n try {\n if (shouldShowBlockingPopup(tags)) {\n log(\"show Popup\");\n Playtech.API.popup.showPopup({\n articleId: WEB_CONTENT,\n layer: \"VERY_HIGH_PRIORITY\",\n classNames: { actionButtons: \"hideBtn\" },\n isModal: true,\n id: POPUP_ID,\n });\n }\n } catch (err) {\n log(\"error\", err);\n }\n }\n\n function getPlayerTags() {\n return Playtech.API.user\n .getPlayerTags(REQUIRE_CONFIRMATION_PLAYER_TAG_NAME)\n .then(function (response) {\n return response?.data?.tags || [];\n });\n }\n\n Playtech.on(Playtech.Events.LOGGED_IN, function () {\n getPlayerTags().then(showBlockingPopup);\n });\n\n if (Playtech.API.auth.isLoggedIn) {\n getPlayerTags().then(showBlockingPopup);\n }\n })();\n</script>","beforeEndBody":""},"conditionIds":["109b8f48-da23-4e5d-8f62-b1371cf41a08","bc0b6529-9f7a-4f6b-8c4d-15194d057ee8"]},{"tagId":"44fb0671-95f8-4991-b22c-8a14227c68c6","tagTypeId":"custom_js","name":"Hide games for sportsbook native app","description":"Hide games for sportsbook native app","config":{"code":"(function() {\n var params = new URLSearchParams(location.search);\n if (params.has('additionalContext') && params.has('isNative')) {\n var games = document.querySelectorAll('[data-portlet-type=\"responsivegames\"]');\n if (games.length > 0) {\n Array.from(games).forEach(function(el) {\n el.classList.add('hidden');\n })\n }\n }\n\n})();"},"conditionIds":["1a66cab4-39b1-4092-a5cb-81887c12ee83","2069bef2-303b-40f0-82c4-5b0178ce78ea"]},{"tagId":"7da1d382-a9c6-4904-a45b-82981b7797a0","tagTypeId":"custom_tag_type","name":"Native disable reg","description":"HC-10828 - Show a popup hiding registration for native users","config":{"beforeEndHead":"<style>\n #disableRegPopup button {\n display: none !important;\n }\n</style>\n<script>\n (function () {\n\n var playerTags = [];\n\n function isRegInProgress() {\n try {\n return playerTags.some(function (tag) {\n return tag.name === 'portal/registration/InProgress' && tag.value === 'true';\n });\n } catch (err) {\n throw {error: err, code: 1};\n }\n }\n\n function main() {\n try {\n if (isRegInProgress()) {\n Playtech.API.popup.showPopup({\n articleId: 'NATIVE_REG_DISABLED',\n layer: 'VERY_HIGH_PRIORITY',\n isModal: true,\n id: 'disableRegPopup'\n });\n }\n } catch (err) {\n console.log('disable reg error >>>', err);\n }\n }\n\n function getPlayerTags() {\n return Playtech.API.user.getPlayerTags().then(function (response) {\n playerTags = response.data.tags;\n });\n }\n\n Playtech.on(Playtech.Events.LOGGED_IN, function () {\n getPlayerTags().then(main);\n });\n\n Playtech.on(Playtech.Events.LOGGED_OUT, function () {\n playerTags = [];\n });\n\n if (Playtech.API.auth.isLoggedIn) {\n getPlayerTags().then(main);\n }\n\n })();\n</script>\n","beforeEndBody":""},"conditionIds":["109b8f48-da23-4e5d-8f62-b1371cf41a08","bc0b6529-9f7a-4f6b-8c4d-15194d057ee8"]},{"tagId":"8d3e1d2d-058d-4aba-8717-75317d98ac9a","tagTypeId":"hc_ticket_counter","name":"TicketCounterTest","description":"Ticket Counter Test","config":{"playerTagName":"Player Journey/Raffleticketcount","webContentId":"TICKETCOUNTERTEST_BRIAN","vipLevelEqual":"3-20","vipLevelNotEqual":"1, 24"},"conditionIds":["01e72e94-c3b4-4182-ba14-bf084569e3b4","2069bef2-303b-40f0-82c4-5b0178ce78ea"]},{"tagId":"11d2bc52-84c6-443e-926f-6a71b3c13c4c","tagTypeId":"custom_js","name":"Add VIP Level as class","description":"Add VIP Level as class","config":{"code":"(() => {\r\n // html tag to attach CSS classes to\r\n // needs to be #applicaion, because otherwise classes will get overwritten by Portal\r\n const root = document.querySelector('#application');\r\n const handler = () => {\r\n if (!Playtech.API.auth.isLoggedIn) {\r\n // if player is not logged in, do nothing\r\n return;\r\n }\r\n\r\n const getPlayersLevel = Playtech.fetchUserDetails();\r\n const vipLevel = getPlayersLevel.vipLevel; //get vip status\r\n // add viplevel1\r\n root.classList.add(`viplevel${vipLevel}`);\r\n };\r\n // subscribe to login event\r\n Playtech.on(Playtech.Events.LOGGED_IN, handler);\r\n // subscribe to logout event\r\n Playtech.on(Playtech.Events.LOGGED_OUT, () => {\r\n Array.from(root.classList)\r\n .filter((name) => name.startsWith('vipl'))\r\n .forEach((name) => root.classList.remove(name));\r\n });\r\n // check on app init\r\n handler();\r\n})();"},"conditionIds":["bc0b6529-9f7a-4f6b-8c4d-15194d057ee8"]},{"tagId":"85cfa0d5-b430-444a-a8de-51002beb1948","tagTypeId":"custom_tag_type","name":"TN Native","description":"custom flow for Native (PageDocUpload step of reg flow)","config":{"beforeEndHead":"<style>\n [class*=StepsCounter__stepCounter] + [class*=Iframe__] {\n display: none;\n }\n\n .docUploadContainer {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n }\n\n .docUploadContainer > * {\n margin: 1rem 0;\n }\n\n .docUploadButton.inactive {\n pointer-events: none;\n }\n\n .docUploadError {\n font-size: 80%;\n text-align: center;\n margin: 1rem 0;\n color: var(--hc-red);\n }\n</style>\n<script>\n (function () {\n\n var playerTags = [];\n var docUploadUrl;\n var tKeys = {\n captureTooltip: 'playtech.mobile.system.step2.onboarding.docs.capture.tooltip.native',\n startBtnText: 'playtech.mobile.system.step2.onboarding.docs.start.native',\n startTooltip: 'playtech.mobile.system.step2.onboarding.docs.start.tooltip.native'\n }\n\n function translate(tKey) {\n try {\n return Playtech.API.translation.translate(tKey);\n } catch (err) {\n throw {error: err, code: 3};\n }\n }\n\n function isDocUploadPresent() {\n try {\n return playerTags.some(function (tag) {\n return tag.name === 'portal/registration/PageDocUpload';\n });\n } catch (err) {\n throw {error: err, code: 1};\n }\n }\n\n function observeIframe() {\n return new Promise(function (resolve, reject) {\n try {\n var wrapper = document.querySelector('[class*=Iframe__iframeWrapper]');\n\n if (wrapper && wrapper.querySelector('iframe') && wrapper.querySelector('iframe').src) {\n resolve(wrapper.querySelector('iframe'));\n return;\n }\n\n var popupEl = document.querySelector('[class*=popup-modal__inner-content]')\n\n new MutationObserver(function (mutationList, observer) {\n try {\n for (var mutation of mutationList) {\n if (mutation.target.querySelector('iframe') && mutation.target.querySelector('iframe').src) {\n resolve(mutation.target.querySelector('iframe'));\n observer.disconnect();\n break;\n }\n }\n } catch (err) {\n reject(err);\n }\n }).observe(popupEl, {childList: true, subtree: true, attributes: true});\n } catch (err) {\n reject(err);\n }\n });\n }\n\n function getRedirectURL() {\n return observeIframe()\n .then(function (iframe) {\n var src = iframe.src;\n iframe.src = 'about:blank';\n\n return src;\n }).catch(function (err) {\n return Promise.reject({error: err, code: 4})\n })\n }\n\n function getPopupContentContainer() {\n try {\n return document.querySelector('[class*=StepsCounter__stepCounter]').parentNode;\n } catch (err) {\n throw {error: err, code: 5};\n }\n }\n\n function createDocUploadContainer() {\n var div = document.createElement('div');\n div.classList.add('docUploadContainer')\n\n return div;\n }\n\n function createDocUploadCaptureTooltip() {\n var div = document.createElement('div');\n div.innerHTML = translate(tKeys.captureTooltip);\n\n return div;\n }\n\n function createDocUploadBtn() {\n var btn = document.createElement('button');\n btn.type = 'button';\n btn.classList.add('btn');\n btn.innerHTML = translate(tKeys.startBtnText);\n btn.disabled = true;\n\n var disable = function (isDisabled) {\n if (isDisabled) {\n btn.setAttribute('disabled', 'disabled');\n } else {\n btn.removeAttribute('disabled');\n }\n };\n\n btn.addEventListener('click', function () {\n Playtech.API.htcmd.sendMessage('openCustomTab', {\n path: docUploadUrl\n })\n });\n\n return [btn, disable];\n }\n\n function createError(err) {\n var div = document.createElement('div');\n var error = err.error || err;\n var prefix = 'Error ' + (err.code || -1) + ': ';\n\n div.classList.add('docUploadError');\n div.innerHTML = prefix +\n (error.response && (error.response.data.errorMessage || err.reason) || error.message);\n\n return div;\n }\n\n function createDocUploadLinkTooltip() {\n var text = document.createElement('p');\n text.innerHTML = translate(tKeys.startTooltip);\n\n return text;\n }\n\n function main() {\n try {\n if (isDocUploadPresent()) {\n var docUploadContainer = createDocUploadContainer();\n var capture = createDocUploadCaptureTooltip();\n var [uploadBtn, disable] = createDocUploadBtn();\n var uploadLinkTooltip = createDocUploadLinkTooltip();\n\n docUploadContainer.append(capture);\n docUploadContainer.append(uploadBtn);\n docUploadContainer.append(uploadLinkTooltip);\n getPopupContentContainer().append(docUploadContainer);\n\n getRedirectURL().then(function (url) {\n docUploadUrl = url;\n disable(false);\n }).catch(function (err) {\n docUploadContainer.append(createError(err));\n });\n }\n } catch (err) {\n getPopupContentContainer().append(createError(err));\n }\n }\n\n function getPlayerTags() {\n return Playtech.API.user.getPlayerTags().then(function (response) {\n playerTags = response.data.tags;\n });\n }\n\n Playtech.on(Playtech.Events.LOGGED_IN, function () {\n getPlayerTags().then(main);\n });\n\n Playtech.on(Playtech.Events.LOGGED_OUT, function () {\n playerTags = [];\n });\n\n if (Playtech.API.auth.isLoggedIn) {\n getPlayerTags().then(main);\n }\n\n })();\n</script>\n","beforeEndBody":""},"conditionIds":["109b8f48-da23-4e5d-8f62-b1371cf41a08","bc0b6529-9f7a-4f6b-8c4d-15194d057ee8"]},{"tagId":"eee46cd0-5594-4ac6-a4bd-72feb3ea09d6","tagTypeId":"custom_tag_type","name":"HideBtnInIDINOption","description":"Hide the \"Verify my account with IDIN\" button in IDINOption registration","config":{"beforeEndHead":"<style>\r\n button[class*=IDINOption__btn] {\r\n display: none !important;\r\n }\r\n a[class*=IDINOption__btn] [class*=PlainText__text] {\r\n font-size: 1.2rem;\r\n }\r\n</style>","beforeEndBody":""},"conditionIds":["109b8f48-da23-4e5d-8f62-b1371cf41a08","ffa107aa-bb77-47e8-86d3-caad97cbbf82"]},{"tagId":"372aa339-83a2-4102-aa11-e4f4e9de8759","tagTypeId":"custom_tag_type","name":"AVENT_CALENDAR_STYLES_DEC23","description":"Advent calendar styles","config":{"beforeEndHead":"<style>\r\n .bannerAdventCalendar [class*=\"AdventCalendar__adventCalendarWrapper\"] {\r\n max-width: 63.875rem;\r\n margin: 0 auto;\r\n background-size: contain;\r\n width: 100%;\r\n background-repeat: no-repeat;\r\n aspect-ratio: 2.2 / 1;\r\n }\r\n\r\n .bannerAdventCalendar [class*=\"col-mob-4 col-dsk-10 AdventCalendar__adventCalendar\"] {\r\n width: 100% !important;\r\n min-width: auto !important;\r\n padding: 0;\r\n display: grid;\r\n grid-template: repeat(5, 1fr) / repeat(7, 1fr);\r\n grid-gap: 0.5rem;\r\n margin: 5% 9.5%;\r\n }\r\n\r\n [class*=\"AdventItem__adventItemWrapper\"] {\r\n width: 100% !important;\r\n display: block;\r\n }\r\n\r\n [class*=\"AdventItem__adventItemWrapper\"] [class*=\"Overlay__overlay\"] {\r\n height: 200vh;\r\n top: -50vh;\r\n }\r\n\r\n [class*=\"Button__success\"][class*=\"Button__dark\"][class*=\"AdventItem__adventItem\"] {\r\n margin: 0;\r\n width: 100%;\r\n height: 100%;\r\n text-shadow: none;\r\n box-shadow: none;\r\n border: 0 !important;\r\n transform: none !important;\r\n font-size: 3rem;\r\n font-weight: 800;\r\n line-height: 0.2rem;\r\n background-color: #18042c !important;\r\n color: #524361;\r\n }\r\n\r\n [class*=\"Button__success\"][class*=\"Button__dark\"][class*=\"AdventItem__future\"] {\r\n background-color: var(--hc-white) !important;\r\n color: #fb258d;\r\n }\r\n\r\n [class*=\"Button__success\"][class*=\"Button__dark\"][class*=\"AdventItem__active\"] {\r\n background-color: #fb258d !important;\r\n color: var(--hc-white);\r\n background-image: none;\r\n }\r\n\r\n .mobile-layout .bannerAdventCalendar [class*=\"AdventCalendar__adventCalendarWrapper\"] {\r\n width: 74vw;\r\n }\r\n\r\n .mobile-layout\r\n [class*=\"col-mob-4 col-dsk-10 AdventCalendar__adventCalendar\"] {\r\n grid-gap: 0.188rem;\r\n margin: 0;\r\n }\r\n\r\n .mobile-layout\r\n [class*=\"Button__success\"][class*=\"Button__dark\"][class*=\"AdventItem__adventItem\"] {\r\n font-size: 1.7rem;\r\n line-height: 0.2rem;\r\n }\r\n\r\n @media (min-width: 1183px) {\r\n .bannerAdventCalendar [class*=\"AdventCalendar__adventCalendarWrapper\"] {\r\n height: 51vh;\r\n background-position: center;\r\n max-height: 462px;\r\n width: auto;\r\n }\r\n }\r\n\r\n @media (max-width: 1182px) and (min-width: 1000px) {\r\n .bannerAdventCalendar [class*=\"AdventCalendar__adventCalendarWrapper\"] {\r\n max-width: 100%;\r\n }\r\n\r\n .bannerAdventCalendar [class*=\"col-mob-4 col-dsk-10 AdventCalendar__adventCalendar\"] {\r\n margin: 8% 16%;\r\n }\r\n }\r\n\r\n @media (max-width: 500px) {\r\n .mobile-layout\r\n [class*=\"Button__success\"][class*=\"Button__dark\"][class*=\"AdventItem__adventItem\"] {\r\n font-size: 1.2rem;\r\n }\r\n }\r\n\r\n @media screen and (orientation: landscape) {\r\n .mobile-layout .bannerAdventCalendar [class*=\"AdventCalendar__adventCalendarWrapper\"] {\r\n max-width: 65vh;\r\n }\r\n }\r\n\r\n /* hero banner */\r\n .bannerAdventCalendar [class*=\"withHollandLayouts__wrapper\"] {\r\n --content-height: 60vh;\r\n }\r\n .bannerAdventCalendar [class*=\"Banner__sliderContainer\"],\r\n .bannerAdventCalendar [class*=\"Banner__slider\"] {\r\n flex: 1 0 100%;\r\n }\r\n\r\n .bannerAdventCalendar [class*=\"Slide__wc\"][class*=\"withHollandLayouts__wc\"] {\r\n top: 50%;\r\n transform: translateY(-50%);\r\n height: auto;\r\n display: block;\r\n }\r\n\r\n /* popup */\r\n .application-root [class*=\"AdventItemPopup__popup\"] {\r\n overflow: hidden;\r\n }\r\n\r\n [class*=\"AdventItemPopup__popup\"] .popup-modal__inner-content {\r\n overflow-y: auto;\r\n height: 100%;\r\n padding: 0 1rem;\r\n white-space: initial;\r\n }\r\n\r\n .mobile-layout .bannerAdventCalendar [class*=\"Popup__close\"] {\r\n top: 1.5rem !important;\r\n right: 1rem !important;\r\n }\r\n\r\n @media (max-width: 1000px) {\r\n .bannerAdventCalendar [class*=\"Popup__container\"] {\r\n top: -20vh;\r\n }\r\n\r\n .mobile.landscape\r\n .application-root\r\n .bannerAdventCalendar\r\n [class*=\"AdventItemPopup__popup\"] {\r\n height: calc(71vh - 2rem);\r\n }\r\n\r\n [class*=\"AdventItemPopup__popup\"] .popup-modal__inner-content {\r\n padding: 0 1rem 3rem;\r\n }\r\n }\r\n</style>\r\n","beforeEndBody":""},"conditionIds":["2069bef2-303b-40f0-82c4-5b0178ce78ea"]},{"tagId":"217da009-6c1b-467b-9ed0-2b3c716a4eaa","tagTypeId":"custom_tag_type","name":"Promotions Main Page - Remove Shadow Gradient on image","description":"Promotions Main Page - Remove Shadow Gradient on image","config":{"beforeEndHead":"<style>\n [class*=Promo__mediaWrapper--]:after {\n content: none !important;\n }\n</style>\n<style>\n [class*=Promo__mediaWrapper--]:before {\n content: none !important;\n }\n</style>","beforeEndBody":""},"conditionIds":["4c81598f-2592-452e-b680-3c1eed17cba1","345f5466-1ecb-41f0-a758-0aa6b96e7697","2069bef2-303b-40f0-82c4-5b0178ce78ea"]},{"tagId":"3579f170-18b0-4c6b-8c79-73371d5d1041","tagTypeId":"custom_js","name":"Refresh page by player tag","description":"Refresh page by player tag","config":{"code":"(function () {\n function removePlayerTags(tags) {\n Playtech.API.server.send({\n ID: 35553,\n tags: [...tags],\n responses: [35554, 35555],\n description: 'Remove Player Tags Request'\n })\n }\n\n function playerTagChangeListener(e) {\n const { tag, removed } = e.detail;\n\n if (tag === 'CRM/refresh' && !removed) {\n removePlayerTags([{name: tag}])\n window.location.reload();\n }\n }\n\n function subscribeOnTagChange() {\n Playtech.API.events.addEventListener(\n 'player-tag-change',\n playerTagChangeListener\n );\n }\n\n function unsubscribeOnTagChange() {\n Playtech.API.events.removeEventListener(\n 'player-tag-change',\n playerTagChangeListener\n );\n }\n\n Playtech.on(Playtech.Events.LOGGED_IN, subscribeOnTagChange);\n\n Playtech.on(Playtech.Events.LOGGED_OUT, unsubscribeOnTagChange);\n\n if (Playtech.API.auth.isLoggedIn) {\n subscribeOnTagChange();\n }\n})();\n"},"conditionIds":["bc0b6529-9f7a-4f6b-8c4d-15194d057ee8"]},{"tagId":"5df800d8-4757-4c99-8f7e-4fc034847b88","tagTypeId":"vip_icons","name":"VIP Icons","description":"Configuration of avatar images by vip levels","config":{"vipIconsConfig":[{"vipLevel":"30","icon":"/library/VIP/icons/vip-premium-icon.png"},{"vipLevel":"29","icon":"/library/VIP/icons/vip-premium-icon.png"},{"vipLevel":"28","icon":"/library/VIP/icons/vip-platinum-icon.png"},{"vipLevel":"27","icon":"/library/VIP/icons/vip-gold-icon.png"},{"vipLevel":"26","icon":"/library/VIP/icons/vip-silver-icon.png"},{"vipLevel":"20","icon":"/library/VIP/icons/vip-platinum-icon.png"},{"vipLevel":"19","icon":"/library/VIP/icons/vip-premium-icon.png"},{"vipLevel":"18","icon":"/library/VIP/icons/vip-platinum-icon.png"},{"vipLevel":"17","icon":"/library/VIP/icons/vip-gold-icon.png"},{"vipLevel":"16","icon":"/library/VIP/icons/vip-silver-icon.png"}]},"conditionIds":["bc0b6529-9f7a-4f6b-8c4d-15194d057ee8"]},{"tagId":"63f9918d-fde8-43ba-9680-f9505189168b","tagTypeId":"custom_js","name":"Hide unlimited for login limits","description":"Hide unlimited for login limits","config":{"code":"(function() {\n const btnTexts = [\n 'Set Unlimited Period',\n 'Onbeperkt'\n ];\n \n const config = {\n childList: true,\n subtree: true\n };\n \n if ('MutationObserver' in window) {\n const observer = new MutationObserver(() => {\n const unlimitedBtn = document.querySelector('[class*=DateSpanPicker__unlimitedBtn]');\n \n if (unlimitedBtn && btnTexts.includes(unlimitedBtn.innerText)) {\n unlimitedBtn.style.display = 'none';\n }\n });\n \n observer.observe(document.body, config);\n }\n})();"},"conditionIds":["bc0b6529-9f7a-4f6b-8c4d-15194d057ee8"]},{"tagId":"9efcb0e5-d71d-4c22-945b-92bb6260a95d","tagTypeId":"custom_js","name":" EzPush","description":" EzPush integration","config":{"code":"(function() {\n var startEzPush = function() {\n if (window.EzPush) {\n return;\n }\n\n Playtech.API.common.getScript('https://ezpush.techonlinecorp.com/SDK/v2/ezpush-client.js').then(function() {\n EzPush.init({\n applicationId: '610154bd5853fced6dad05e2', // ID of application from ezpush admin\n subscribeOnInit: true, // true by default\n language: 'en', // taken from from window.navigator.language by default\n logEnabled: true, // false by default\n serviceWorkerUrl: '/library/EzPush/ezpush-sw.js'// optional, 'ezpush-sw.js' by default, Service-Worker-Allowed HTTP\n // header required\n }).then(function() {\n console.log('[EzPush] You are subscribed to push notifications.');\n\n if (window.EzPush && window.EzPush.pushToken) {\n var pushId = window.EzPush.pushToken;\n var deviceType = Playtech.API.device.browserName;\n var correlationId = String(Math.random()).slice(2);\n\n Playtech.API.server.send({\n ID: 35613,\n application: 'hollandcasino',\n deviceId: EzPush.hwid,\n pushId: pushId,\n deviceType: deviceType,\n correlationId: correlationId\n });\n }\n\n }).catch(function(error) {\n console.log('[EzPush] Failed to subscribe to push notifications: ', error);\n });\n });\n };\n\n Playtech.on(Playtech.Events.LOGGED_IN, startEzPush);\n\n if (Playtech.API.user.isLoggedIn()) {\n startEzPush();\n }\n})();"},"conditionIds":["bc0b6529-9f7a-4f6b-8c4d-15194d057ee8"]},{"tagId":"974b3a3f-5b73-4edc-b702-ab6ddaa1df0a","tagTypeId":"custom_js","name":"PJ Initial Offer Tag Setter","description":"Impl for tag setter","config":{"code":"document.body.addEventListener('click', (event) => {\n if (event.target.id === 'sports-offer') {\n Playtech.API.user.setPlayerTags([{ name: 'sports-tag' }]);\n } else if (event.target.id === 'casino-offer') {\n Playtech.API.user.setPlayerTags([{ name: 'casino-tag' }]);\n }\n});"},"conditionIds":["bc0b6529-9f7a-4f6b-8c4d-15194d057ee8"]},{"tagId":"8a61e0fa-a242-47af-b0f5-ab2a9ac236ea","tagTypeId":"custom_js","name":"reg_birthday_105","description":"reg_birthday_105","config":{"code":"(function() {\n try {\n var yearEl = document.querySelector('#year_birthdate');\n var lastOption = Array.from(yearEl.children)[yearEl.length - 1];\n var lastOptionValue = lastOption.value;\n var fragment = document.createDocumentFragment();\n\n for (var i = 1; i <= 5; i++) {\n var option = document.createElement('option');\n option.value = lastOptionValue - i;\n option.innerHTML = option.value;\n fragment.appendChild(option);\n }\n\n yearEl.appendChild(fragment);\n\n } catch(e) {\n console.error(e);\n }\n}())"},"conditionIds":["10c6a1bf-bd4b-4c65-9256-45b166858b9d","07120f96-4ad3-430d-a64c-231bd2dda580"]}],"conditions":[{"conditionId":"20d65c93-a18d-40f0-bb20-6c2053c29822","conditionTypeId":"page_condition","name":"Leaderboard-page","description":"Leaderboard-pages","config":{"onPageLaunch":"/leaderboard-page","onPageNotLaunch":""}},{"conditionId":"b8cd6255-5275-430e-b4b3-34917ce3e157","conditionTypeId":"page_condition","name":"Premium pages","description":"list of premium pages","config":{"onPageLaunch":"/test-premium-components, /test-premium-components2, /test-premium-components/test-home, /premium-lounge, /premium-lounge/home, /premium-lounge/promoties, /premium-lounge/events, /test-premium-components-code","onPageNotLaunch":""}},{"conditionId":"60352a4d-5190-4f6f-8ddd-22780680eed3","conditionTypeId":"page_condition","name":"/live-casino","description":"live-casino","config":{"onPageLaunch":"/live-casino","onPageNotLaunch":""}},{"conditionId":"5dfa5ec7-2f60-4ec3-a4b2-2a26294bd859","conditionTypeId":"page_condition","name":"afmelden-advertenties/formulier","description":"afmelden-advertenties/formulier","config":{"onPageLaunch":"/afmelden-advertenties/formulier","onPageNotLaunch":""}},{"conditionId":"3a3b7ebd-924c-4201-9b64-c60367a4f411","conditionTypeId":"page_condition","name":"on poker page","description":"on poker page","config":{"onPageLaunch":"/poker","onPageNotLaunch":""}},{"conditionId":"9f733509-bbb6-4048-8901-85533034314c","conditionTypeId":"page_condition","name":"structured-data-test","description":"structured-data-test","config":{"onPageLaunch":"/structured-data-test","onPageNotLaunch":""}},{"conditionId":"2e8f68c0-2d83-4009-bf0e-9507529535dc","conditionTypeId":"native_app_condition","name":"excludeFromNative","description":"will not run in native apps","config":{"nativeAppRule":"0"}},{"conditionId":"01e72e94-c3b4-4182-ba14-bf084569e3b4","conditionTypeId":"page_condition","name":"WhiteBlackListTCount","description":"WhiteBlackListTCount","config":{"onPageLaunch":"","onPageNotLaunch":"/sportsbook"}},{"conditionId":"4c81598f-2592-452e-b680-3c1eed17cba1","conditionTypeId":"page_condition","name":"General pages","description":"Main URLs for use with custom CSS changes","config":{"onPageLaunch":"/home , /casino , /live-casino , /promoties ,/bingo , /sportsbook , /poker , /online/casino/premium , /online/casino/exclusief , /online/casino/tablegames , /online/casino/slotmachines , /online/casino/jackpots , /en/online/casino/all-games-casino , /online/veilig-en-verantwoord-spelen , /promoties/poker-welcome-2022 , /promoties/poker-welcome-offer , /live/exclusive , /live/tafelspelen , /live/roulette , /live/gameshows , /live/highroller , /live/ander, /promoties/casino/niet-normaal-novemberprijs, /promoties/poker-mcop-2022, /promoties/sports/HCSPBGSRV-nov22, /promoties/sports/HCSPBGSR-nov22, /promoties/sports/HCSPXmasSpecial-dec22, /TEst-Xenia-Engagement_NORMAL, /promoties/poker-irish-open, /promoties/sports/football-combo-boost, /promoties/sports/tennis-combo-boost, /promoties/sports/basketball-combi-boost, /promoties/sports/darts-combo-boost, /promoties/sports/bet-watch, /promoties/sports/cash-out, /promoties/sports/Chineesnieuwjaar, /promoties/sports/ChineesnieuwjaarV, /promoties/wpt-prime-qualifiers, /promoties/poker-leaderboard, /promoties/sports/FEBRUARIFREEBET, /promoties/sports/FebruariCombi, /promoties/sports/FebruariCombiV, /leaderboards, /inloggen, /registreren, /promoties/vip, /promoties/, /promoties/casino, /promoties/sportsbook, /promoties/poker, /promoties/bingo","onPageNotLaunch":""}},{"conditionId":"345f5466-1ecb-41f0-a758-0aa6b96e7697","conditionTypeId":"page_condition","name":"Main promo page only","description":"Main promo page only","config":{"onPageLaunch":"/promoties,/Promogrid-test-final,/promoties/casino,/promoties/sportsbook,/promoties/poker,/promoties/bingo,/promoties/vip,/prev.hollandcasino.nl/en/promoties, /prev.hollandcasino.nl/promoties","onPageNotLaunch":""}},{"conditionId":"109b8f48-da23-4e5d-8f62-b1371cf41a08","conditionTypeId":"native_app_condition","name":"inNative","description":"the tag will run only if url has param ?isNative=1","config":{"nativeAppRule":"1"}},{"conditionId":"eff80154-dd28-44c2-8dcd-9d0bc83ef6b3","conditionTypeId":"page_condition","name":"/cookie-settings","description":"/cookie-settings","config":{"onPageLaunch":"/cookie-settings","onPageNotLaunch":""}},{"conditionId":"ffa107aa-bb77-47e8-86d3-caad97cbbf82","conditionTypeId":"basic_condition","name":"OnPreloader","description":"OnPreloader","config":{"launch":"onPreloader"}},{"conditionId":"8059f1cb-fd6e-4142-8071-26a5376abe4c","conditionTypeId":"page_condition","name":"PenaltyShootout page","description":"/promoties/sports/PenaltySpel","config":{"onPageLaunch":"/promoties/sports/PenaltySpel","onPageNotLaunch":""}},{"conditionId":"00496ce8-f9cc-44f7-95cc-11d9faef1d0c","conditionTypeId":"page_condition","name":"TN docs upload page","description":"TN docs upload page","config":{"onPageLaunch":"/mijnhc/account-verificatie","onPageNotLaunch":""}},{"conditionId":"f47bb07f-0e1a-4901-b766-673d8728d2dd","conditionTypeId":"page_condition","name":"/gamelaunch","description":"/gamelaunch","config":{"onPageLaunch":"/gamelaunch","onPageNotLaunch":""}},{"conditionId":"5a613a7e-8cb1-4ad7-b227-581f8b0a392d","conditionTypeId":"page_condition","name":"Test - Brian test","description":"test page ","config":{"onPageLaunch":"/briantest","onPageNotLaunch":""}},{"conditionId":"bc0b6529-9f7a-4f6b-8c4d-15194d057ee8","conditionTypeId":"basic_condition","name":"onAppInit","description":"Application initialisation","config":{"launch":"onAppInit"}},{"conditionId":"5d6c9f1d-245e-415b-a164-2a5752005ef1","conditionTypeId":"page_condition","name":"/ada","description":"/ada","config":{"onPageLaunch":"/ada","onPageNotLaunch":""}},{"conditionId":"a7c25c7b-c02c-4d63-bd9a-4cb9c6993006","conditionTypeId":"page_condition","name":"/bingo","description":"/bingo","config":{"onPageLaunch":"/bingo","onPageNotLaunch":""}},{"conditionId":"54ecef8c-410a-4aae-935a-ae7b66a2be91","conditionTypeId":"page_condition","name":"/home_page_trigger","description":"when user visits the /home page","config":{"onPageLaunch":"/home","onPageNotLaunch":""}},{"conditionId":"3b190ea9-16dc-4436-aa2e-4e2ba3cbb820","conditionTypeId":"page_condition","name":"/casino","description":"/casino","config":{"onPageLaunch":"/casino","onPageNotLaunch":""}},{"conditionId":"1a66cab4-39b1-4092-a5cb-81887c12ee83","conditionTypeId":"page_condition","name":"/sportsbook","description":"/sportsbook","config":{"onPageLaunch":"/sportsbook","onPageNotLaunch":""}},{"conditionId":"f74d4594-d23a-483d-8da4-916549a7fe7f","conditionTypeId":"page_condition","name":"/inloggen","description":"/inloggen","config":{"onPageLaunch":"/inloggen","onPageNotLaunch":""}},{"conditionId":"2069bef2-303b-40f0-82c4-5b0178ce78ea","conditionTypeId":"basic_condition","name":"Before page rendered","description":"Before page rendered","config":{"launch":"beforePageRendered"}},{"conditionId":"d37e588d-0329-4469-8cfa-4159ff363d48","conditionTypeId":"page_condition","name":"Game results","description":"Game results","config":{"onPageLaunch":"/mijnhc/game-resultaten-hidden","onPageNotLaunch":""}},{"conditionId":"07120f96-4ad3-430d-a64c-231bd2dda580","conditionTypeId":"page_condition","name":"/registreren","description":"/registreren","config":{"onPageLaunch":"/registreren","onPageNotLaunch":""}},{"conditionId":"10c6a1bf-bd4b-4c65-9256-45b166858b9d","conditionTypeId":"basic_condition","name":"afterPageRendered","description":"afterPageRendered","config":{"launch":"afterPageRendered"}}]}