UNPKG

sovendus-integration-react

Version:
1 lines 68.2 kB
{"version":3,"file":"index.mjs","sources":["../../node_modules/sovendus-integration-scripts/dist/scripts/react/index.mjs","../../src/package/constants.ts","../../src/package/sovendus-landing-page.tsx","../../src/package/sovendus-thankyou-page.tsx"],"sourcesContent":["var __defProp = Object.defineProperty;\nvar __defProps = Object.defineProperties;\nvar __getOwnPropDescs = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols = Object.getOwnPropertySymbols;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __propIsEnum = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n if (__getOwnPropSymbols)\n for (var prop of __getOwnPropSymbols(b)) {\n if (__propIsEnum.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n }\n return a;\n};\nvar __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));\nvar __objRest = (source, exclude) => {\n var target = {};\n for (var prop in source)\n if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0)\n target[prop] = source[prop];\n if (source != null && __getOwnPropSymbols)\n for (var prop of __getOwnPropSymbols(source)) {\n if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop))\n target[prop] = source[prop];\n }\n return target;\n};\nvar __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\nvar __async = (__this, __arguments, generator) => {\n return new Promise((resolve, reject) => {\n var fulfilled = (value) => {\n try {\n step(generator.next(value));\n } catch (e) {\n reject(e);\n }\n };\n var rejected = (value) => {\n try {\n step(generator.throw(value));\n } catch (e) {\n reject(e);\n }\n };\n var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);\n step((generator = generator.apply(__this, __arguments)).next());\n });\n};\nimport { jsx, Fragment } from \"react/jsx-runtime\";\nimport { useMemo, useEffect } from \"react\";\nvar CountryCodes = /* @__PURE__ */ ((CountryCodes2) => {\n CountryCodes2[\"AT\"] = \"AT\";\n CountryCodes2[\"BE\"] = \"BE\";\n CountryCodes2[\"DK\"] = \"DK\";\n CountryCodes2[\"FR\"] = \"FR\";\n CountryCodes2[\"DE\"] = \"DE\";\n CountryCodes2[\"IE\"] = \"IE\";\n CountryCodes2[\"IT\"] = \"IT\";\n CountryCodes2[\"NL\"] = \"NL\";\n CountryCodes2[\"NO\"] = \"NO\";\n CountryCodes2[\"PL\"] = \"PL\";\n CountryCodes2[\"ES\"] = \"ES\";\n CountryCodes2[\"SE\"] = \"SE\";\n CountryCodes2[\"CH\"] = \"CH\";\n CountryCodes2[\"GB\"] = \"GB\";\n return CountryCodes2;\n})(CountryCodes || {});\nconst LANGUAGES_BY_COUNTRIES = {\n [\n \"AT\"\n /* AT */\n ]: { [\n \"DE\"\n /* DE */\n ]: \"Austria\" },\n [\n \"BE\"\n /* BE */\n ]: {\n [\n \"FR\"\n /* FR */\n ]: \"Belgium French\",\n [\n \"NL\"\n /* NL */\n ]: \"Belgium Dutch\"\n },\n [\n \"DK\"\n /* DK */\n ]: { [\n \"DA\"\n /* DA */\n ]: \"Denmark\" },\n // [CountryCodes.FI]: { [LanguageCodes.FI]: \"Finland\" },\n [\n \"FR\"\n /* FR */\n ]: { [\n \"FR\"\n /* FR */\n ]: \"France\" },\n [\n \"DE\"\n /* DE */\n ]: { [\n \"DE\"\n /* DE */\n ]: \"Germany\" },\n [\n \"IE\"\n /* IE */\n ]: { [\n \"EN\"\n /* EN */\n ]: \"Ireland\" },\n [\n \"IT\"\n /* IT */\n ]: { [\n \"IT\"\n /* IT */\n ]: \"Italy\" },\n [\n \"NL\"\n /* NL */\n ]: { [\n \"NL\"\n /* NL */\n ]: \"Netherlands\" },\n [\n \"NO\"\n /* NO */\n ]: { [\n \"NB\"\n /* NB */\n ]: \"Norway\" },\n [\n \"PL\"\n /* PL */\n ]: { [\n \"PL\"\n /* PL */\n ]: \"Poland\" },\n // [CountryCodes.PT]: { [LanguageCodes.PT]: \"Portugal\" },\n [\n \"ES\"\n /* ES */\n ]: { [\n \"ES\"\n /* ES */\n ]: \"Spain\" },\n [\n \"SE\"\n /* SE */\n ]: { [\n \"SV\"\n /* SV */\n ]: \"Sweden\" },\n [\n \"CH\"\n /* CH */\n ]: {\n [\n \"FR\"\n /* FR */\n ]: \"Switzerland French\",\n [\n \"DE\"\n /* DE */\n ]: \"Switzerland German\",\n [\n \"IT\"\n /* IT */\n ]: \"Switzerland Italian\"\n },\n [\n \"GB\"\n /* GB */\n ]: { [\n \"EN\"\n /* EN */\n ]: \"United Kingdom\" }\n};\nconst defaultIframeContainerQuerySelector = { selector: \"#sovendus-container\", where: \"none\" };\nvar SettingsType = /* @__PURE__ */ ((SettingsType2) => {\n SettingsType2[\"SIMPLE\"] = \"simple\";\n SettingsType2[\"COUNTRY\"] = \"country\";\n return SettingsType2;\n})(SettingsType || {});\nconst sovendusPageApis = {\n // this only gets called when a optimize id is set\n // you don't have to whitelist this domain if you don't want to use Sovendus Optimize\n optimize: \"https://www.sovopt.com/\"\n};\nconst sovLoaderScriptId = \"sovloader-script\";\nfunction getPerformanceTime() {\n var _a, _b;\n throwErrorInNonBrowserContext({\n methodName: \"getPerformanceTime\",\n pageType: \"LandingPage\",\n requiresWindow: true\n });\n return ((_b = (_a = window.performance) == null ? void 0 : _a.now) == null ? void 0 : _b.call(_a)) || 0;\n}\nfunction detectCountryCode() {\n return getCountryCodeFromHtmlTag() || getCountryFromDomain() || getCountryFromPagePath();\n}\nfunction getOptimizeId(settings, country) {\n var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l;\n if (((_a = settings == null ? void 0 : settings.optimize) == null ? void 0 : _a.settingsType) === SettingsType.SIMPLE) {\n if (((_c = (_b = settings == null ? void 0 : settings.optimize) == null ? void 0 : _b.simple) == null ? void 0 : _c.isEnabled) !== false && ((_e = (_d = settings == null ? void 0 : settings.optimize) == null ? void 0 : _d.simple) == null ? void 0 : _e.optimizeId)) {\n return settings.optimize.simple.optimizeId;\n }\n } else {\n if ((_g = (_f = settings.optimize) == null ? void 0 : _f.countries) == null ? void 0 : _g.ids) {\n const uncleanedCountryCode = country;\n const countryCode = uncleanedCountryCode === \"UK\" ? CountryCodes.GB : uncleanedCountryCode;\n if (countryCode) {\n const countryElement = (_i = (_h = settings.optimize.countries) == null ? void 0 : _h.ids) == null ? void 0 : _i[countryCode];\n return (countryElement == null ? void 0 : countryElement.isEnabled) ? countryElement == null ? void 0 : countryElement.optimizeId : void 0;\n }\n const fallbackId = (_k = (_j = settings == null ? void 0 : settings.optimize) == null ? void 0 : _j.countries) == null ? void 0 : _k.fallBackId;\n if (((_l = settings.optimize) == null ? void 0 : _l.countries.fallBackEnabled) && fallbackId) {\n return fallbackId;\n }\n }\n }\n return void 0;\n}\nfunction throwErrorInNonBrowserContext({\n methodName,\n requiresWindow,\n requiresDocument,\n pageType\n}) {\n if ((requiresDocument ? typeof document === \"undefined\" : false) || (requiresWindow ? typeof window === \"undefined\" : false)) {\n throw new Error(\n `Sovendus App [${pageType}] - ${methodName}: ${requiresWindow ? \"window\" : \"\"} ${requiresDocument ? \"document\" : \"\"} is not available in your context, you can override this method`\n );\n }\n}\nfunction loggerError(message, pageType, ...other) {\n console.error(`Sovendus App [${pageType}] - ${message}`, ...other);\n}\nfunction getCountryCodeFromHtmlTag() {\n throwErrorInNonBrowserContext({\n methodName: \"getCountryCodeFromHtmlTag\",\n pageType: \"LandingPage\",\n requiresDocument: true\n });\n const lang = document.documentElement.lang;\n const countryCode = lang.split(\"-\")[1];\n return countryCode ? castToCountry(countryCode.toUpperCase()) : void 0;\n}\nfunction getCountryFromDomain() {\n throwErrorInNonBrowserContext({\n methodName: \"getCountryFromDomain\",\n pageType: \"LandingPage\",\n requiresWindow: true\n });\n const domainToCountry = {\n \"de\": \"DE\",\n \"at\": \"AT\",\n \"ch\": \"CH\",\n \"uk\": \"GB\",\n \"co.uk\": \"GB\",\n \"com\": void 0,\n \"se\": \"SE\",\n \"no\": \"NO\",\n \"dk\": \"DK\",\n \"fi\": \"FI\",\n \"fr\": \"FR\",\n \"be\": \"BE\",\n \"nl\": \"NL\",\n \"it\": \"IT\",\n \"es\": \"ES\",\n \"pt\": \"PT\",\n \"pl\": \"PL\",\n \"cz\": \"CZ\",\n \"sk\": \"SK\",\n \"hu\": \"HU\"\n };\n const domain = window.location.hostname;\n const domainParts = domain.split(\".\");\n const domainPart = domainParts[domainParts.length - 1];\n return domainPart ? domainToCountry[domainPart] : void 0;\n}\nfunction getCountryFromPagePath() {\n throwErrorInNonBrowserContext({\n methodName: \"getCountryFromDomain\",\n pageType: \"LandingPage\",\n requiresWindow: true\n });\n const path = window.location.pathname;\n const pathParts = path.split(\"/\");\n const country = pathParts[1];\n return castToCountry(country == null ? void 0 : country.toUpperCase());\n}\nfunction castToCountry(value) {\n if (value && Object.values(CountryCodes).includes(value)) {\n return value;\n }\n return void 0;\n}\nfunction makeNumber(value) {\n if (value === void 0) {\n return void 0;\n }\n if (typeof value === \"number\") {\n return value;\n }\n if (typeof value === \"string\") {\n const number = Number(value);\n if (!Number.isNaN(number)) {\n return number;\n }\n }\n return void 0;\n}\nfunction unmount$2() {\n try {\n const optimizeScript = document.getElementById(this.optimizeScriptId);\n if (optimizeScript) {\n optimizeScript.remove();\n }\n if (window.sovPageConfig) {\n delete window.sovPageConfig;\n }\n if (window.sovPageStatus) {\n delete window.sovPageStatus;\n }\n if (window.sovPageInitialized) {\n delete window.sovPageInitialized;\n }\n } catch (error) {\n loggerError(\"Error during cleanup in unmount:\", \"LandingPage\", error);\n }\n}\nconst integrationScriptVersion = \"3.11.4\";\nconst urlParamAndCookieKeys = [\n // These are the keys that Sovendus uses to store the url params as cookies\n // for simplicity we store all supported url params as cookies\n // as without the url params the cookies would not be set anyway\n // each url param requires separate opt in on Sovendus side, so this is safe to use\n //\n // key only passed on in Switzerland Voucher Network\n \"puid\",\n // Optional link based conversion tracking for Sovendus Voucher Network\n \"sovCouponCode\",\n // Key used for Sovendus Checkout Products\n \"sovReqToken\",\n // used to enable debug mode for the testing process.\n \"sovDebugLevel\"\n];\nfunction sovendusPageMain(sovPageConfig, onDone) {\n return __async(this, null, function* () {\n const sovPageStatus = this.initializeStatus();\n this.processConfig(sovPageConfig, sovPageStatus);\n try {\n if (!sovPageConfig) {\n sovPageStatus.status.sovPageConfigFound = true;\n onDone({ sovPageStatus, sovPageConfig });\n loggerError(\"sovPageConfig is not defined\", \"LandingPage\");\n return;\n }\n sovPageStatus.urlData = yield this.lookForUrlParamsToStore(sovPageStatus);\n this.sovendusOptimize(sovPageConfig, sovPageStatus);\n sovPageStatus.times.integrationLoaderDone = this.getPerformanceTime();\n } catch (error) {\n loggerError(\"Crash in SovendusPage.main\", \"LandingPage\", error);\n }\n onDone({ sovPageStatus, sovPageConfig });\n });\n}\nfunction initializePageStatus() {\n return {\n integrationScriptVersion,\n urlData: {\n sovCouponCode: void 0,\n sovReqToken: void 0,\n puid: void 0,\n sovDebugLevel: void 0\n },\n status: {\n sovPageConfigFound: false,\n loadedOptimize: false,\n storedCookies: false,\n countryCodePassedOnByPlugin: false\n },\n times: {\n integrationLoaderStart: this.getPerformanceTime()\n }\n };\n}\nfunction getSovendusUrlParameters() {\n return __async(this, null, function* () {\n const pageViewData = {\n sovCouponCode: void 0,\n sovReqToken: void 0,\n puid: void 0,\n sovDebugLevel: void 0\n };\n const urlParams = yield this.getSearchParams();\n urlParamAndCookieKeys.forEach((dataKey) => {\n const paramValue = urlParams == null ? void 0 : urlParams.get(dataKey);\n if (paramValue) {\n if (dataKey === \"sovDebugLevel\") {\n if (paramValue === \"debug\" || paramValue === \"silent\") {\n pageViewData[dataKey] = paramValue;\n }\n } else {\n pageViewData[dataKey] = paramValue;\n }\n }\n });\n return pageViewData;\n });\n}\nfunction lookForUrlParamsToStore(sovPageStatus) {\n return __async(this, null, function* () {\n try {\n const pageViewData = yield this.getSovendusUrlParameters();\n yield Promise.all(\n Object.entries(pageViewData).map((_0) => __async(this, [_0], function* ([cookieKey, cookieValue]) {\n if (cookieValue) {\n yield this.setCookie(cookieKey, cookieValue);\n sovPageStatus.status.storedCookies = true;\n }\n }))\n );\n return pageViewData;\n } catch (error) {\n loggerError(\"Error while storing url params\", \"LandingPage\", error);\n }\n return {\n sovCouponCode: void 0,\n sovReqToken: void 0,\n puid: void 0,\n sovDebugLevel: void 0\n };\n });\n}\nfunction processPageConfig(sovPageConfig, sovPageStatus) {\n this.handleCountryCode(sovPageConfig, sovPageStatus);\n}\nfunction handlePageCountryCode(sovPageConfig, sovPageStatus) {\n if (sovPageConfig.country === \"UK\") {\n sovPageConfig.country = CountryCodes.GB;\n }\n if (!sovPageConfig.country) {\n sovPageStatus.status.countryCodePassedOnByPlugin = false;\n sovPageConfig.country = sovPageConfig.country || this.detectCountryCode();\n }\n}\nfunction sovendusOptimize(sovPageConfig, sovPageStatus) {\n const optimizeId = getOptimizeId(\n sovPageConfig.settings,\n sovPageConfig.country\n );\n if (!optimizeId) {\n return;\n }\n this.handleOptimizeScript(optimizeId, sovPageConfig, sovPageStatus);\n sovPageStatus.status.loadedOptimize = true;\n}\nconst optimizeScriptId = \"sovendus-optimize-script\";\nclass SovendusPage {\n constructor() {\n // Standard implementation of the Sovendus page script\n // You can extend this class and override the methods to customize the behavior\n // You can find example overrides in any of our Sovendus plugins\n // Also make sure to check out our docs for more information\n __publicField(this, \"urlParamAndCookieKeys\", urlParamAndCookieKeys);\n __publicField(this, \"main\", sovendusPageMain);\n __publicField(this, \"initializeStatus\", initializePageStatus);\n // allow non async as some context might not require it\n __publicField(this, \"getSovendusUrlParameters\", getSovendusUrlParameters);\n __publicField(this, \"lookForUrlParamsToStore\", lookForUrlParamsToStore);\n __publicField(this, \"sovendusOptimize\", sovendusOptimize);\n __publicField(this, \"optimizeScriptId\", optimizeScriptId);\n __publicField(this, \"processConfig\", processPageConfig);\n __publicField(this, \"handleCountryCode\", handlePageCountryCode);\n __publicField(this, \"getPerformanceTime\", getPerformanceTime);\n __publicField(this, \"detectCountryCode\", detectCountryCode);\n __publicField(this, \"unmount\", unmount$2);\n }\n // make it async as some context might require it\n getSearchParams() {\n throwErrorInNonBrowserContext({\n methodName: \"getSearchParams\",\n pageType: \"LandingPage\",\n requiresWindow: true\n });\n return new URLSearchParams(window.location.search);\n }\n // make it async as some context might require it\n setCookie(cookieName, value) {\n throwErrorInNonBrowserContext({\n methodName: \"setCookie\",\n pageType: \"LandingPage\",\n requiresDocument: true,\n requiresWindow: true\n });\n const path = \"/\";\n const expireDate = /* @__PURE__ */ new Date();\n expireDate.setTime(expireDate.getTime() + 24 * 60 * 60 * 1e3 * 30);\n const domain = window.location.hostname;\n const cookieString = `${cookieName}=${value};secure;samesite=strict;expires=${expireDate.toUTCString()};domain=${domain};path=${path}`;\n document.cookie = cookieString;\n }\n handleOptimizeScript(optimizeId, _sovPageConfig, _sovPageStatus) {\n throwErrorInNonBrowserContext({\n methodName: \"sovendusOptimize\",\n pageType: \"LandingPage\",\n requiresDocument: true\n });\n const script = document.createElement(\"script\");\n script.async = true;\n script.id = this.optimizeScriptId;\n script.type = \"application/javascript\";\n script.src = `${sovendusPageApis.optimize}${optimizeId}`;\n document.head.appendChild(script);\n }\n}\nfunction SovendusLandingPageReact(props) {\n return useMemo(() => {\n return /* @__PURE__ */ jsx(Handler, __spreadValues({}, props));\n }, []);\n}\nconst sovendusPage$1 = new SovendusPage();\nfunction Handler(_a) {\n var _b = _a, {\n onDone\n } = _b, sovPageConfig = __objRest(_b, [\n \"onDone\"\n ]);\n useEffect(() => {\n if (typeof window === \"undefined\") {\n return;\n }\n if (window.sovendusPageInitialized && Date.now() - window.sovendusPageInitialized < 1e3) {\n return unmount$1;\n }\n window.sovendusPageInitialized = Date.now();\n window.sovPageConfig = sovPageConfig;\n const _onDone = ({ sovPageStatus }) => {\n window.sovPageStatus = sovPageStatus;\n void (onDone == null ? void 0 : onDone(sovPageStatus, window.sovPageConfig));\n };\n void sovendusPage$1.main(window.sovPageConfig, _onDone);\n return unmount$1;\n }, []);\n return /* @__PURE__ */ jsx(Fragment, {});\n}\nfunction unmount$1() {\n if (window.sovendusPageInitialized && Date.now() - window.sovendusPageInitialized < 1e3) {\n return;\n }\n sovendusPage$1.unmount();\n}\nfunction sovendusThankyouMain(sovThankyouConfig, onDone) {\n return __async(this, null, function* () {\n const sovThankyouStatus = this.initializeStatus();\n try {\n if (!sovThankyouConfig) {\n sovThankyouStatus.status.sovThankyouConfigFound = false;\n loggerError(\"sovThankyouConfig is not defined\", \"ThankyouPage\");\n onDone({ sovThankyouStatus, sovThankyouConfig });\n return;\n }\n sovThankyouStatus.status.sovThankyouConfigFound = true;\n yield this.processConfig(sovThankyouConfig, sovThankyouStatus);\n this.handleVoucherNetwork(sovThankyouConfig, sovThankyouStatus);\n yield this.handleCheckoutProductsConversion(\n sovThankyouConfig,\n sovThankyouStatus\n );\n yield this.handleOptimizeConversion(sovThankyouConfig, sovThankyouStatus);\n sovThankyouStatus.times.integrationLoaderDone = this.getPerformanceTime();\n sovThankyouStatus.status.integrationLoaderDone = true;\n } catch (error) {\n loggerError(\"Error in SovendusThankyouPage.main\", \"ThankyouPage\", error);\n }\n onDone({ sovThankyouConfig, sovThankyouStatus });\n });\n}\nfunction processConfig(sovThankyouConfig, sovThankyouStatus) {\n return __async(this, null, function* () {\n yield this.handleVoucherCode(sovThankyouConfig);\n this.handleStreet(sovThankyouConfig);\n this.handleCountryCode(sovThankyouConfig, sovThankyouStatus);\n this.handleOrderValue(sovThankyouConfig);\n });\n}\nfunction handleCountryCode(sovThankyouConfig, sovThankyouStatus) {\n if (sovThankyouConfig.customerData.consumerCountry === \"UK\") {\n sovThankyouConfig.customerData.consumerCountry = CountryCodes.GB;\n }\n if (!sovThankyouConfig.customerData.consumerCountry) {\n sovThankyouStatus.status.countryCodePassedOnByPlugin = false;\n sovThankyouConfig.customerData.consumerCountry = sovThankyouConfig.customerData.consumerCountry || this.detectCountryCode();\n } else {\n sovThankyouStatus.status.countryCodePassedOnByPlugin = true;\n }\n}\nfunction handleOptimizeConversion(sovThankyouConfig, sovThankyouStatus) {\n return __async(this, null, function* () {\n var _a;\n const optimizeId = getOptimizeId(\n sovThankyouConfig.settings,\n sovThankyouConfig.customerData.consumerCountry\n );\n if (!optimizeId) {\n return;\n }\n const couponCode = (_a = sovThankyouConfig.orderData.usedCouponCodes) == null ? void 0 : _a[0];\n yield this.handleOptimizeConversionScript(\n optimizeId,\n couponCode,\n sovThankyouConfig,\n sovThankyouStatus\n );\n });\n}\nfunction handleStreet(sovThankyouConfig) {\n if (sovThankyouConfig.customerData.consumerStreetWithNumber) {\n const [street, streetNumber] = this.splitStreetAndStreetNumber(\n sovThankyouConfig.customerData.consumerStreetWithNumber\n );\n sovThankyouConfig.customerData.consumerStreet = street;\n sovThankyouConfig.customerData.consumerStreetNumber = streetNumber;\n }\n}\nfunction handleOrderValue(sovThankyouConfig) {\n const orderValueData = sovThankyouConfig.orderData.orderValue;\n if (!orderValueData) {\n return;\n }\n if (orderValueData.netOrderValue) {\n orderValueData.netOrderValue = makeNumber(orderValueData.netOrderValue);\n } else {\n orderValueData.netOrderValue = calculateNetValue(orderValueData);\n }\n}\nfunction calculateNetValue(orderValueData) {\n const grossOrderValue = makeNumber(orderValueData.grossOrderValue);\n if (typeof grossOrderValue === \"undefined\") {\n return void 0;\n } else {\n const shippingValue = makeNumber(orderValueData.shippingValue);\n if (typeof shippingValue === \"undefined\") {\n loggerError(\n \"shippingValue is not defined in SovendusThankyouPage.calculateOrderValue\",\n \"ThankyouPage\"\n );\n }\n const taxValue = calculateTaxValue(orderValueData, grossOrderValue);\n return Math.max(0, grossOrderValue - taxValue - (shippingValue || 0));\n }\n}\nfunction calculateTaxValue(orderValueData, grossOrderValue) {\n const taxValue = makeNumber(orderValueData.taxValue);\n if (typeof taxValue === \"undefined\") {\n const taxPercent = makeNumber(orderValueData.taxPercent);\n if (typeof taxPercent === \"undefined\") {\n loggerError(\n \"Either taxPercent or taxValue has to be defined in SovendusThankyouPage.calculateOrderValue\",\n \"ThankyouPage\"\n );\n } else {\n return grossOrderValue / (1 + taxPercent / 100) * (taxPercent / 100);\n }\n } else {\n return taxValue;\n }\n return 0;\n}\nfunction splitStreetAndStreetNumber(street) {\n if (!street) {\n return [\"\", \"\"];\n }\n const trimmedStreet = street.trim();\n const apartmentComplexMatch = trimmedStreet.match(\n /^(.*?),\\s*(\\d+[A-Za-z]?)\\s+(.+)$/\n );\n if (apartmentComplexMatch && apartmentComplexMatch[1] && apartmentComplexMatch[2] && apartmentComplexMatch[3]) {\n const apartmentPart = apartmentComplexMatch[1].trim();\n const streetNumber = apartmentComplexMatch[2].trim();\n const streetName = apartmentComplexMatch[3].trim();\n return [`${apartmentPart}, ${streetName}`, streetNumber];\n }\n const angleSaxonMatch = trimmedStreet.match(/^(\\d+[A-Za-z]?)\\s+(.+)$/);\n if (angleSaxonMatch && angleSaxonMatch[1] && angleSaxonMatch[2]) {\n const streetNumber = angleSaxonMatch[1].trim();\n const streetName = angleSaxonMatch[2].trim();\n if (streetName.split(/\\s+/).length >= 2) {\n const possiblePostalCode = streetNumber.match(/^\\d{4,5}$/);\n if (possiblePostalCode) {\n return [trimmedStreet, \"\"];\n }\n }\n return [streetName, streetNumber];\n }\n const europeanMatch = trimmedStreet.match(\n /^(.*?)\\s+(\\d+(?:[\\s/-]*\\d*)(?:[A-Za-z])?(?:\\s+[A-Za-z])?)$/\n );\n if (europeanMatch && europeanMatch[1] && europeanMatch[2]) {\n const streetName = europeanMatch[1].trim();\n const streetNumber = europeanMatch[2].trim();\n return [streetName, streetNumber];\n }\n return [trimmedStreet, \"\"];\n}\nfunction handleVoucherCode(sovThankyouConfig) {\n return __async(this, null, function* () {\n const couponCodes = new Set(\n sovThankyouConfig.orderData.usedCouponCodes\n );\n const couponFromCookie = yield this.getCookie(\"sovCouponCode\");\n if (couponFromCookie) {\n this.clearCookie(\"sovCouponCode\");\n sovThankyouConfig.orderData.usedCouponCodes = [couponFromCookie];\n return;\n }\n if (sovThankyouConfig.orderData.usedCouponCode) {\n couponCodes.add(sovThankyouConfig.orderData.usedCouponCode);\n }\n sovThankyouConfig.orderData.usedCouponCodes = Array.from(couponCodes);\n });\n}\nfunction initializeStatus() {\n const sovThankyouStatus = {\n integrationScriptVersion,\n status: {\n sovThankyouConfigFound: false,\n integrationLoaderStarted: false,\n integrationParametersLoaded: false,\n checkoutProductsPixelFired: false,\n loadedOptimize: false,\n voucherNetworkLinkTrackingSuccess: false,\n integrationLoaderVnCbStarted: false,\n integrationLoaderDone: false,\n voucherNetworkIframeContainerIdFound: false,\n voucherNetworkIframeContainerFound: false,\n countryCodePassedOnByPlugin: false\n },\n data: {\n orderValue: void 0,\n orderCurrency: void 0,\n orderId: void 0,\n sovCouponCode: void 0,\n sovReqToken: void 0,\n puid: void 0,\n sovDebugLevel: void 0\n },\n times: {\n integrationLoaderStart: this.getPerformanceTime()\n }\n };\n return sovThankyouStatus;\n}\nfunction handleCheckoutProductsConversion(sovThankyouConfig, sovThankyouStatus) {\n return __async(this, null, function* () {\n const { checkoutProducts } = sovThankyouConfig.settings;\n if (checkoutProducts) {\n const sovReqToken = yield this.getCookie(\"sovReqToken\");\n if (sovReqToken) {\n this.clearCookie(\"sovReqToken\");\n const pixelUrl = `https://press-order-api.sovendus.com/ext/image?sovReqToken=${decodeURIComponent(sovReqToken)}`;\n yield fetch(pixelUrl);\n sovThankyouStatus.status.checkoutProductsPixelFired = true;\n }\n }\n return false;\n });\n}\nfunction getVoucherNetworkConfig(sovThankyouConfig) {\n var _a, _b, _c, _d, _e, _f;\n if (((_b = (_a = sovThankyouConfig.settings) == null ? void 0 : _a.voucherNetwork) == null ? void 0 : _b.settingType) === SettingsType.SIMPLE) {\n return (_d = (_c = sovThankyouConfig.settings) == null ? void 0 : _c.voucherNetwork) == null ? void 0 : _d.simple;\n }\n if (((_f = (_e = sovThankyouConfig.settings) == null ? void 0 : _e.voucherNetwork) == null ? void 0 : _f.settingType) === SettingsType.COUNTRY) {\n return this.getVoucherNetworkCountryBasedSettings(sovThankyouConfig);\n }\n return void 0;\n}\nfunction getVoucherNetworkCountryBasedSettings(sovThankyouConfig) {\n var _a, _b, _c, _d, _e, _f, _g, _h, _i;\n const country = sovThankyouConfig.customerData.consumerCountry;\n if (!sovThankyouConfig.customerData.consumerCountry) {\n return void 0;\n }\n const countrySettings = (_d = (_c = (_b = (_a = sovThankyouConfig.settings) == null ? void 0 : _a.voucherNetwork) == null ? void 0 : _b.countries) == null ? void 0 : _c.ids) == null ? void 0 : _d[country];\n const languagesSettings = countrySettings == null ? void 0 : countrySettings.languages;\n if (!languagesSettings) {\n return void 0;\n }\n const languagesAvailable = Object.keys(LANGUAGES_BY_COUNTRIES[country]);\n if ((languagesAvailable == null ? void 0 : languagesAvailable.length) === 1) {\n const language = languagesAvailable[0];\n const languageSettings = languagesSettings[language];\n return __spreadProps(__spreadValues({\n isEnabled: (languageSettings == null ? void 0 : languageSettings.isEnabled) || false,\n trafficSourceNumber: (languageSettings == null ? void 0 : languageSettings.trafficSourceNumber) || \"\",\n trafficMediumNumber: (languageSettings == null ? void 0 : languageSettings.trafficMediumNumber) || \"\"\n }, languageSettings), {\n iframeContainerQuerySelector: ((_g = (_f = (_e = sovThankyouConfig.settings) == null ? void 0 : _e.voucherNetwork) == null ? void 0 : _f.countries) == null ? void 0 : _g.iframeContainerQuerySelector) || (languageSettings == null ? void 0 : languageSettings.iframeContainerQuerySelector)\n });\n }\n if ((languagesAvailable == null ? void 0 : languagesAvailable.length) > 1) {\n const languageKey = sovThankyouConfig.customerData.consumerLanguage || this.detectLanguageCode();\n const languageSettings = languageKey && languagesSettings[languageKey];\n if (!languageSettings) {\n return void 0;\n }\n return __spreadProps(__spreadValues({}, languageSettings), {\n iframeContainerQuerySelector: ((_i = (_h = sovThankyouConfig.settings.voucherNetwork) == null ? void 0 : _h.countries) == null ? void 0 : _i.iframeContainerQuerySelector) || (languageSettings == null ? void 0 : languageSettings.iframeContainerQuerySelector)\n });\n }\n return void 0;\n}\nfunction handleCouponCodes(orderData, trafficSourceNumber) {\n return __async(this, null, function* () {\n var _a;\n const couponCodes = (_a = orderData.usedCouponCodes) == null ? void 0 : _a.slice(1);\n if (couponCodes) {\n yield Promise.all(\n couponCodes.map((coupon) => __async(this, null, function* () {\n var _a2, _b;\n yield sendCouponCode({\n trafficSourceNumber,\n couponCode: coupon,\n orderValue: ((_a2 = orderData.orderValue) == null ? void 0 : _a2.netOrderValue) ? Number((_b = orderData.orderValue) == null ? void 0 : _b.netOrderValue) : void 0,\n orderCurrency: orderData.orderCurrency,\n orderId: orderData.orderId,\n sessionId: orderData.sessionId\n });\n }))\n );\n }\n });\n}\nfunction sendCouponCode(redemptionData) {\n return __async(this, null, function* () {\n const endpoint = `https://integration-api.sovendus.com/coupon/code-transmitted/${encodeURIComponent(\n btoa(JSON.stringify(redemptionData))\n )}`;\n yield fetch(endpoint, {\n method: \"POST\",\n body: JSON.stringify(redemptionData)\n });\n });\n}\nconst flexibleIframeScriptId = \"sovendus-iframe-script\";\nfunction cleanUp() {\n var _a, _b, _c, _d, _e, _f;\n (_b = (_a = window.sovApplication) == null ? void 0 : _a.instances) == null ? void 0 : _b.forEach((instance) => {\n var _a2, _b2, _c2, _d2, _e2, _f2, _g, _h;\n if (instance.isCollapsableOverlay) {\n (_b2 = (_a2 = window.sovApplication) == null ? void 0 : _a2.collapsableOverlay) == null ? void 0 : _b2.closeInstance(instance, false);\n (_d2 = (_c2 = window.sovApplication) == null ? void 0 : _c2.sovCollector) == null ? void 0 : _d2.clearProperties();\n }\n if (instance.isStickyBanner) {\n (_f2 = (_e2 = window.sovApplication) == null ? void 0 : _e2.stickyBanner) == null ? void 0 : _f2.closeInstance(instance);\n (_h = (_g = window.sovApplication) == null ? void 0 : _g.sovCollector) == null ? void 0 : _h.clearProperties();\n }\n });\n if ((_c = window.sovApplication) == null ? void 0 : _c.messageListener) {\n window.removeEventListener(\n \"message\",\n (_d = window.sovApplication) == null ? void 0 : _d.messageListener,\n true\n );\n window.sovApplication.resizeListenerAdded = false;\n }\n if (window.sovThankyouConfig) {\n delete window.sovThankyouConfig;\n }\n if (window.sovThankyouStatus) {\n delete window.sovThankyouStatus;\n }\n if (window.sovConsumer) {\n delete window.sovConsumer;\n }\n if (window.sovIframes) {\n delete window.sovIframes;\n }\n if (window.sovApplication) {\n delete window.sovApplication;\n }\n (_e = document.getElementById(sovLoaderScriptId)) == null ? void 0 : _e.remove();\n (_f = document.getElementById(flexibleIframeScriptId)) == null ? void 0 : _f.remove();\n}\nclass SovendusThankyouPage {\n constructor() {\n // Standard implementation of the Sovendus thankyou page script\n // You can extend this class and override the methods to customize the behavior\n // You can find example overrides in any of our Sovendus plugins\n // Also make sure to check out our docs for more information\n __publicField(this, \"main\", sovendusThankyouMain);\n __publicField(this, \"processConfig\", processConfig);\n __publicField(this, \"handleCountryCode\", handleCountryCode);\n __publicField(this, \"handleOptimizeConversion\", handleOptimizeConversion);\n __publicField(this, \"handleStreet\", handleStreet);\n __publicField(this, \"splitStreetAndStreetNumber\", splitStreetAndStreetNumber);\n __publicField(this, \"handleVoucherCode\", handleVoucherCode);\n __publicField(this, \"initializeStatus\", initializeStatus);\n __publicField(this, \"handleOrderValue\", handleOrderValue);\n __publicField(this, \"handleCheckoutProductsConversion\", handleCheckoutProductsConversion);\n __publicField(this, \"getVoucherNetworkConfig\", getVoucherNetworkConfig);\n __publicField(this, \"getVoucherNetworkCountryBasedSettings\", getVoucherNetworkCountryBasedSettings);\n __publicField(this, \"getPerformanceTime\", getPerformanceTime);\n __publicField(this, \"detectCountryCode\", detectCountryCode);\n }\n // Is async in case the plugin needs to wait for the script to load\n handleOptimizeConversionScript(optimizeId, couponCode, sovThankyouConfig, sovThankyouStatus) {\n var _a;\n throwErrorInNonBrowserContext({\n methodName: \"handleOptimizeConversionScript\",\n pageType: \"ThankyouPage\",\n requiresDocument: true\n });\n const script = document.createElement(\"script\");\n script.type = \"text/javascript\";\n script.async = true;\n script.src = `https://www.sovopt.com/${optimizeId}/conversion/?ordervalue=${(_a = sovThankyouConfig.orderData.orderValue) == null ? void 0 : _a.netOrderValue}&ordernumber=${sovThankyouConfig.orderData.orderId}&vouchercode=${couponCode}&email=${sovThankyouConfig.customerData.consumerEmail}`;\n document.body.appendChild(script);\n sovThankyouStatus.status.loadedOptimize = true;\n }\n handleVoucherNetwork(sovThankyouConfig, sovThankyouStatus) {\n var _a, _b;\n throwErrorInNonBrowserContext({\n methodName: \"handleVoucherNetwork\",\n pageType: \"ThankyouPage\",\n requiresDocument: true,\n requiresWindow: true\n });\n const voucherNetworkConfig = this.getVoucherNetworkConfig(sovThankyouConfig);\n if ((voucherNetworkConfig == null ? void 0 : voucherNetworkConfig.trafficSourceNumber) && (voucherNetworkConfig == null ? void 0 : voucherNetworkConfig.trafficMediumNumber) && (voucherNetworkConfig == null ? void 0 : voucherNetworkConfig.isEnabled)) {\n const iframeContainerId = this.handleSovendusVoucherNetworkDivContainer(\n voucherNetworkConfig,\n sovThankyouConfig,\n sovThankyouStatus\n );\n window.sovIframes = window.sovIframes || [];\n window.sovIframes.push({\n trafficSourceNumber: voucherNetworkConfig.trafficSourceNumber,\n trafficMediumNumber: voucherNetworkConfig.trafficMediumNumber,\n sessionId: sovThankyouConfig.orderData.sessionId,\n orderId: sovThankyouConfig.orderData.orderId,\n orderValue: (_a = sovThankyouConfig.orderData.orderValue) == null ? void 0 : _a.netOrderValue,\n orderCurrency: sovThankyouConfig.orderData.orderCurrency,\n // TODO Handle Coupon Codes in FlexibleIFrame\n // Transmit first Coupon Code and handle all other Coupon Codes in handleCouponCodes()\n usedCouponCode: (_b = sovThankyouConfig.orderData.usedCouponCodes) == null ? void 0 : _b[0],\n iframeContainerId,\n integrationType: sovThankyouConfig.integrationType\n });\n window.sovConsumer = {\n consumerFirstName: sovThankyouConfig.customerData.consumerFirstName,\n consumerLastName: sovThankyouConfig.customerData.consumerLastName,\n consumerEmail: sovThankyouConfig.customerData.consumerEmail,\n consumerStreet: sovThankyouConfig.customerData.consumerStreet,\n consumerStreetNumber: sovThankyouConfig.customerData.consumerStreetNumber,\n consumerZipcode: sovThankyouConfig.customerData.consumerZipcode,\n consumerCity: sovThankyouConfig.customerData.consumerCity,\n consumerCountry: sovThankyouConfig.customerData.consumerCountry,\n consumerPhone: sovThankyouConfig.customerData.consumerPhone,\n consumerDateOfBirth: sovThankyouConfig.customerData.consumerDateOfBirth,\n consumerYearOfBirth: sovThankyouConfig.customerData.consumerYearOfBirth,\n consumerEmailHash: sovThankyouConfig.customerData.consumerEmailHash,\n consumerSalutation: sovThankyouConfig.customerData.consumerSalutation,\n consumerStreetWithNumber: sovThankyouConfig.customerData.consumerStreetWithNumber,\n consumerLanguage: sovThankyouConfig.customerData.consumerLanguage\n };\n const script = document.createElement(\"script\");\n script.type = \"text/javascript\";\n script.async = true;\n script.id = flexibleIframeScriptId;\n script.src = \"https://api.sovendus.com/sovabo/common/js/flexibleIframe.js\";\n document.body.appendChild(script);\n void handleCouponCodes(\n sovThankyouConfig.orderData,\n voucherNetworkConfig.trafficSourceNumber\n );\n sovThankyouStatus.status.integrationLoaderVnCbStarted = true;\n sovThankyouStatus.times.integrationLoaderVnCbStart = this.getPerformanceTime();\n }\n }\n handleSovendusVoucherNetworkDivContainer(voucherNetworkConfig, sovThankyouConfig, sovThankyouStatus) {\n throwErrorInNonBrowserContext({\n methodName: \"handleSovendusVoucherNetworkDivContainer\",\n pageType: \"ThankyouPage\",\n requiresDocument: true,\n requiresWindow: true\n });\n const iframeContainerSettings = this.getIframeQuerySelector(\n voucherNetworkConfig,\n sovThankyouConfig\n );\n const rootElement = document.querySelector(\n iframeContainerSettings.selector\n );\n if (rootElement) {\n if (iframeContainerSettings.where === \"none\") {\n return rootElement.id;\n }\n const sovendusDiv = document.createElement(\"div\");\n sovendusDiv.id = \"sovendus-container\";\n rootElement.insertAdjacentElement(\n iframeContainerSettings.where,\n sovendusDiv\n );\n sovThankyouStatus.status.voucherNetworkIframeContainerFound = true;\n return sovendusDiv.id;\n } else {\n sovThankyouStatus.status.voucherNetworkIframeContainerFound = false;\n loggerError(\n `Voucher Network container query selector ${iframeContainerSettings.selector} not found`,\n \"ThankyouPage\"\n );\n return \"\";\n }\n }\n getIframeQuerySelector(voucherNetworkConfig, sovThankyouConfig) {\n if (voucherNetworkConfig.iframeContainerQuerySelector) {\n return voucherNetworkConfig.iframeContainerQuerySelector;\n }\n if (sovThankyouConfig.iframeContainerQuerySelector) {\n return sovThankyouConfig.iframeContainerQuerySelector;\n }\n loggerError(\n \"No iframeContainerQuerySelector found in SovendusThankYouPageConfig, trying default\",\n \"ThankyouPage\"\n );\n return defaultIframeContainerQuerySelector;\n }\n // make it async as some platforms might need to wait for the cookies\n getCookie(name) {\n var _a;\n throwErrorInNonBrowserContext({\n methodName: \"getCookie\",\n pageType: \"ThankyouPage\",\n requiresDocument: true\n });\n const value = `; ${document.cookie}`;\n const parts = value.split(`; ${name}=`);\n if (parts.length === 2) {\n return (_a = parts.pop()) == null ? void 0 : _a.split(\";\").shift();\n }\n return void 0;\n }\n clearCookie(name) {\n throwErrorInNonBrowserContext({\n methodName: \"clearCookie\",\n pageType: \"ThankyouPage\",\n requiresDocument: true,\n requiresWindow: true\n });\n const path = \"/\";\n const domain = window.location.hostname;\n const cookieString = `${name}=;secure;samesite=strict;expires=Thu, 01 Jan 1970 00:00:00 UTC;domain=${domain};path=${path}`;\n document.cookie = cookieString;\n }\n detectLanguageCode() {\n var _a;\n throwErrorInNonBrowserContext({\n methodName: \"getCookie\",\n pageType: \"ThankyouPage\",\n requiresDocument: true\n });\n const htmlLang = document.documentElement.lang.split(\"-\")[0];\n if (htmlLang) {\n return htmlLang.toUpperCase();\n }\n return (_a = navigator.language.split(\"-\")[0]) == null ? void 0 : _a.toUpperCase();\n }\n unmount() {\n cleanUp();\n }\n}\nconst sovendusPage = new SovendusThankyouPage();\nfunction SovendusThankyouPageReact(_c) {\n var _d = _c, {\n onDone\n } = _d, sovThankyouConfig = __objRest(_d, [\n \"onDone\"\n ]);\n const containerId = \"sovendus-thankyou-container\";\n const containerSelector = `#${containerId}`;\n const iframeContainerQuerySelector = {\n selector: containerSelector,\n where: \"none\"\n };\n const config = __spreadProps(__spreadValues({}, sovThankyouConfig), {\n iframeContainerQuerySelector\n });\n useEffect(() => {\n if (typeof window === \"undefined\") {\n return;\n }\n if (window.sovendusThankyouPageInitialized && Date.now() - window.sovendusThankyouPageInitialized < 1e3) {\n return unmount;\n }\n window.sovendusThankyouPageInitialized = Date.now();\n window.sovThankyouConfig = config;\n const _onDone = ({ sovThankyouStatus }) => {\n window.sovThankyouStatus = sovThankyouStatus;\n void (onDone == null ? void 0 : onDone(sovThankyouStatus, config));\n };\n void sovendusPage.main(config, _onDone);\n return unmount;\n }, []);\n return useMemo(() => /* @__PURE__ */ jsx(\"div\", { id: containerId }), []);\n}\nfunction unmount() {\n if (window.sovendusThankyouPageInitialized && Date.now() - window.sovendusThankyouPageInitialized < 1e3) {\n return;\n }\n sovendusPage.unmount();\n}\nexport {\n SovendusLandingPageReact,\n SovendusThankyouPageReact\n};\n//# sourceMappingURL=index.mjs.map\n","export const version = \"2.0.7\";\nexport const integrationType = `react-${version}`;\n","\"use client\";\n\nimport type { JSX } from \"react\";\nimport type { SovendusLandingPageReactProps as _SovendusLandingPageReactProps } from \"sovendus-integration-scripts/react\";\nimport { SovendusLandingPageReact as _SovendusLandingPageReact } from \"sovendus-integration-scripts/react\";\n\nimport { integrationType } from \"./constants\";\n\nexport type SovendusLandingPageReactProps = Omit<\n _SovendusLandingPageReactProps,\n \"integrationType\"\n>;\n\nexport function SovendusLandingPageReact(\n props: SovendusLandingPageReactProps,\n): JSX.Element {\n return (\n <_SovendusLandingPageReact {...props} integrationType={integrationType} />\n );\n}\n","\"use client\";\n\nimport type { JSX } from \"react\";\nimport type { SovendusThankyouPageReactProps as _SovendusThankyouPageReactProps } from \"sovendus-integration-scripts/react\";\nimport { SovendusThankyouPageReact as _SovendusThankyouPageReact } from \"sovendus-integration-scripts/react\";\n\nimport { integrationType } from \"./constants\";\n\nexport type SovendusThankyouPageReactProps = Omit<\n _SovendusThankyouPageReactProps,\n \"integrationType\" | \"sovDebugLevel\"\n>;\n\nexport function SovendusThankyouPageReact(\n props: SovendusThankyouPageReactProps,\n): JSX.Element {\n return (\n <_SovendusThankyouPageReact\n {...props}\n sovDebugLevel={undefined}\n integrationType={integrationType}\n />\n );\n}\n"],"names":["__defProp","__defProps","__getOwnPropDescs","__getOwnPropSymbols","__hasOwnProp","__propIsEnum","__defNormalProp","__spreadValues","__spreadProps","SovendusLandingPageReact","SovendusThankyouPageReact","_SovendusLandingPageReact","_SovendusThankyouPageReact"],"mappings":"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