{"version":3,"file":"game-launcher.js","mappings":"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","sources":["webpack://game_launcher/./node_modules/@888holdings/acme/dist/logger/contracts.js","webpack://game_launcher/./node_modules/@888holdings/acme/dist/logger/consoleLogger.js","webpack://game_launcher/./src/tracking/consoleLogger.ts","webpack://game_launcher/./src/utils.ts","webpack://game_launcher/./src/urlService.ts","webpack://game_launcher/./src/config.ts","webpack://game_launcher/./src/tracking/logstashService/logstashService.ts","webpack://game_launcher/./node_modules/uuid/dist/esm-browser/native.js","webpack://game_launcher/./node_modules/uuid/dist/esm-browser/rng.js","webpack://game_launcher/./node_modules/uuid/dist/esm-browser/stringify.js","webpack://game_launcher/./src/flowId.ts","webpack://game_launcher/./src/tracking/elasticLogger.ts","webpack://game_launcher/./node_modules/uuid/dist/esm-browser/v4.js","webpack://game_launcher/./src/tracking/logger.ts","webpack://game_launcher/./src/grsService.ts","webpack://game_launcher/./src/clientCommunication.ts","webpack://game_launcher/./src/urlBuilder.ts","webpack://game_launcher/./src/messages/message.ts","webpack://game_launcher/./src/messages/basicError.ts","webpack://game_launcher/./src/messages/texts.ts","webpack://game_launcher/./src/parametersHandler/contracts.ts","webpack://game_launcher/./src/parametersHandler/v1Params.ts","webpack://game_launcher/./src/parametersHandler/v2Params.ts","webpack://game_launcher/./src/parametersHandler/factory.ts","webpack://game_launcher/./src/urlServiceBuilder.ts","webpack://game_launcher/./node_modules/@888holdings/acme/dist/logger/stylish.js","webpack://game_launcher/./src/engine.ts","webpack://game_launcher/./src/index.ts"],"sourcesContent":["var LEVEL;\n(function (LEVEL) {\n LEVEL[LEVEL[\"ERROR\"] = 0] = \"ERROR\";\n LEVEL[LEVEL[\"WARN\"] = 1] = \"WARN\";\n LEVEL[LEVEL[\"INFO\"] = 2] = \"INFO\";\n LEVEL[LEVEL[\"DEBUG\"] = 3] = \"DEBUG\";\n})(LEVEL || (LEVEL = {}));\n\nexport { LEVEL };\n//# sourceMappingURL=contracts.js.map\n","import { LEVEL } from './contracts.js';\n\nvar ConsoleLogger = /** @class */ (function () {\n function ConsoleLogger(level) {\n if (level === void 0) { level = LEVEL.DEBUG; }\n this._level = level;\n }\n ConsoleLogger.buildData = function (message, payload) {\n var data = [ConsoleLogger.buildLogHead(message)];\n if (payload) {\n data.push(JSON.stringify(payload));\n }\n return data;\n };\n ConsoleLogger.buildLogHead = function (message) {\n return \"[\".concat(new Date().toISOString().replace(/[TZ]/g, \"\"), \"] \").concat(message);\n };\n ConsoleLogger.prototype.log = function (message, payload) {\n this.info(message, payload);\n };\n ConsoleLogger.prototype.info = function (message, payload) {\n this.send(LEVEL.INFO, console.info, message, payload);\n };\n ConsoleLogger.prototype.debug = function (message, payload) {\n this.sendWithStackTrace(LEVEL.DEBUG, console.debug, message, payload);\n };\n ConsoleLogger.prototype.warn = function (message, payload) {\n this.sendWithStackTrace(LEVEL.WARN, console.warn, message, payload);\n };\n ConsoleLogger.prototype.error = function (message, payload) {\n this.sendWithStackTrace(LEVEL.ERROR, console.error, message, payload);\n };\n ConsoleLogger.prototype.send = function (level, callback, message, payload) {\n if (level > this._level)\n return;\n var data = ConsoleLogger.buildData(message, payload);\n callback.apply(void 0, data);\n };\n ConsoleLogger.prototype.sendWithStackTrace = function (level, callback, message, payload) {\n this.send(level, function () {\n var data = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n data[_i] = arguments[_i];\n }\n data.push(new Error());\n callback.apply(void 0, data);\n }, message, payload);\n };\n return ConsoleLogger;\n}());\n\nexport { ConsoleLogger };\n//# sourceMappingURL=consoleLogger.js.map\n","import { ConsoleLogger } from \"@888holdings/acme\";\n\nexport const consoleLogger = new ConsoleLogger();","import { consoleLogger } from \"./tracking/consoleLogger\";\n\ntype NavigatorIE = Navigator & {\n browserLanguage: string;\n userLanguage: string;\n};\n\nexport class Utils {\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n protected constructor() {\n }\n\n public static getBrowserLanguageMacroTag(): string {\n let lang: string = window.navigator.languages ? window.navigator.languages[0] : \"\";\n lang = lang || window.navigator.language || (window.navigator).browserLanguage || (window.navigator).userLanguage;\n if (!lang.includes(\"-\")) {\n lang = lang.split(\"-\")[0];\n }\n\n return lang;\n }\n\n public static setProtocol(href: string): string {\n href = href.split(\"//\").reverse()[0];\n return location.protocol + \"//\" + href;\n }\n\n public static async checkUrl(url: URL): Promise {\n const response = await fetch(url.href);\n\n if (!response.ok) {\n return Promise.reject(new Error(`Ping to url failed! ${response.status}`));\n }\n\n return url;\n }\n\n public static toBool(value: unknown): boolean {\n return value === \"true\" || value === true;\n }\n\n public static searchParamsToJSON(searchParams: URLSearchParams): Record {\n const output = {} as Record;\n\n try {\n searchParams.forEach((value, key) => {\n output[key] = value.charAt(0) === \"{\" ? JSON.parse(value) : value;\n });\n } catch (err) {\n consoleLogger.error(\"Error while parsing URLSearchParams to JSON!\", {\n error: err\n });\n }\n return output;\n }\n}\n\nexport function findInData(name: string, data: IterableIterator<[string, string]>): string | null {\n for (const [key, value] of data) {\n if (key.toLowerCase() === name.toLowerCase()) {\n return value;\n }\n }\n\n return null;\n}","/* eslint-disable @typescript-eslint/no-unused-vars */\nimport { findInData } from \"./utils\";\nimport { GAMELAUNCHER_PARAM, ILaunchParams, OVERWRITE_PARAM } from \"./parametersHandler/contracts\";\n/* eslint-enable @typescript-eslint/no-unused-vars */\n\nexport class UrlService {\n public static launch: ILaunchParams;\n public static launchSettings: GAMELAUNCHER_PARAM | null;\n public static other: URLSearchParams;\n\n private static url: URL;\n\n static {\n this.url = new URL(window.location.href);\n this.other = new URLSearchParams(window.location.search);\n }\n\n public static get useGrsGamePathAsCustomGameResourcesPath(): boolean {\n return Boolean(this.launchSettings?.useGrsGamePathAsCustomGameResourcesPath);\n }\n\n public static get bypassPreloader(): boolean {\n return Boolean(this.launchSettings?.bypassPreloader);\n }\n\n public static get overwrite(): OVERWRITE_PARAM | undefined {\n return this.launchSettings?.overwrite;\n }\n\n public static get(key: string): string | null {\n return findInData(key, this.url.searchParams.entries());\n }\n}","import { logger } from \"./tracking/logger\";\n\ntype TConfig = {\n grsApiPath: string;\n logstashUrl: string;\n};\n\nexport class Config {\n\n private static _values: TConfig;\n\n public static get values(): TConfig {\n return this._values;\n }\n\n public static async init(): Promise {\n if (!this._values) {\n await this.loadConfig();\n }\n }\n\n private static async loadConfig(): Promise {\n const path = \"./env.json\";\n const response = await fetch(path);\n\n if (!response.ok) {\n logger.error(\"Error on getting config file!\", {\n status: response.status,\n statusText: response.statusText,\n url: response.url\n });\n throw new Error(`Error on getting config file! ${response.status}`);\n }\n\n const json = await response.json() as Record;\n\n this._values = {\n grsApiPath: String(json[\"grsApiPath\"]),\n logstashUrl: String(json[\"logstashUrl\"])\n };\n }\n\n}","import { Config } from \"../../config\";\n\nexport class LogstashService {\n public static log(payload: string): void {\n const logstashUrl = Config.values.logstashUrl;\n if (!logstashUrl || logstashUrl.trim() === \"\") {\n return;\n }\n\n /* eslint-disable @typescript-eslint/naming-convention */\n void fetch(logstashUrl, {\n method: \"POST\",\n body: payload,\n headers: {\n \"Content-Type\": \"application/json\"\n },\n mode: \"cors\"\n });\n /* eslint-enable @typescript-eslint/naming-convention */\n }\n}\n","const randomUUID = typeof crypto !== 'undefined' && crypto.randomUUID && crypto.randomUUID.bind(crypto);\nexport default {\n randomUUID\n};","// Unique ID creation requires a high quality random # generator. In the browser we therefore\n// require the crypto API and do not support built-in fallback to lower quality random number\n// generators (like Math.random()).\nlet getRandomValues;\nconst rnds8 = new Uint8Array(16);\nexport default function rng() {\n // lazy load so that environments that need to polyfill have a chance to do so\n if (!getRandomValues) {\n // getRandomValues needs to be invoked in a context where \"this\" is a Crypto implementation.\n getRandomValues = typeof crypto !== 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto);\n\n if (!getRandomValues) {\n throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');\n }\n }\n\n return getRandomValues(rnds8);\n}","import validate from './validate.js';\n/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\n\nconst byteToHex = [];\n\nfor (let i = 0; i < 256; ++i) {\n byteToHex.push((i + 0x100).toString(16).slice(1));\n}\n\nexport function unsafeStringify(arr, offset = 0) {\n // Note: Be careful editing this code! It's been tuned for performance\n // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434\n return (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase();\n}\n\nfunction stringify(arr, offset = 0) {\n const uuid = unsafeStringify(arr, offset); // Consistency check for valid UUID. If this throws, it's likely due to one\n // of the following:\n // - One or more input array values don't map to a hex octet (leading to\n // \"undefined\" in the uuid)\n // - Invalid input values for the RFC `version` or `variant` fields\n\n if (!validate(uuid)) {\n throw TypeError('Stringified UUID is invalid');\n }\n\n return uuid;\n}\n\nexport default stringify;","import { v4 as uuidv4 } from \"uuid\";\n\nexport const flowId: string = uuidv4();\n","import { UrlService } from \"../urlService\";\nimport { LogstashService } from \"./logstashService/logstashService\";\nimport { Utils } from \"../utils\";\nimport { flowId } from \"../flowId\";\n\nlet referrerForLog: string;\n\ntry {\n referrerForLog = new URL(document.referrer).pathname;\n} catch (e) {\n referrerForLog = \"\";\n}\n\nconst paramsForLog: Record = Utils.searchParamsToJSON(new URLSearchParams(window.location.search));\ndelete paramsForLog[\"gameData\"];\n\nfunction buildRequestBody(payload: Record): string {\n return JSON.stringify({\n \"eventData\": payload,\n \"eventHeader\": {\n \"eventDateTime\": new Date().toISOString(),\n \"level\": \"information\",\n //\"environment\": \"Mirage\", //TODO activate when configuration is implemented. Read value from configuration.\n \"target\": \"casino-game-launcher\",\n \"sender\": {\n \"versionNumber\": String(APP_VERSION)\n },\n \"eventType\": {\n \"name\": \"game-launcher\",\n \"type\": [\n \"Log\"\n ]\n },\n \"userData\": {\n \"cid\": UrlService.launch.cid\n },\n \"configuration\": {\n \"referrer\": referrerForLog,\n \"params\": {\n \"flowId\": flowId,\n ...paramsForLog\n }\n }\n }\n });\n}\n\nexport const elasticLogger = {\n log: (message: string, payload?: Record): void => {\n LogstashService.log(buildRequestBody({\n \"message\": message,\n \"additionalInfo\": payload ?? {}\n }));\n }\n};","import native from './native.js';\nimport rng from './rng.js';\nimport { unsafeStringify } from './stringify.js';\n\nfunction v4(options, buf, offset) {\n if (native.randomUUID && !buf && !options) {\n return native.randomUUID();\n }\n\n options = options || {};\n const rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n\n rnds[6] = rnds[6] & 0x0f | 0x40;\n rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided\n\n if (buf) {\n offset = offset || 0;\n\n for (let i = 0; i < 16; ++i) {\n buf[offset + i] = rnds[i];\n }\n\n return buf;\n }\n\n return unsafeStringify(rnds);\n}\n\nexport default v4;","import { elasticLogger } from \"./elasticLogger\";\nimport { consoleLogger } from \"./consoleLogger\";\n\nclass Logger {\n public error(message: string, payload?: Record): void {\n elasticLogger.log(message, payload);\n consoleLogger.error(message, payload);\n }\n\n public log(message: string, payload?: Record): void {\n consoleLogger.log(message, payload);\n }\n}\n\nexport const logger = new Logger();","import { UrlService } from \"./urlService\";\nimport { logger } from \"./tracking/logger\";\nimport { Utils } from \"./utils\";\nimport { Config } from \"./config\";\n\n/* eslint-disable @typescript-eslint/naming-convention */\nexport type GrsResponseModel = {\n GrsData: string;\n Error: {\n Description: string;\n Keys: GrsSearchKey[];\n Name: string;\n };\n Key: string;\n Values: {\n AdditionalParams: {\n [key: string]: string;\n TestId: string;\n TestCaseId: string;\n };\n AdditionalRecordId: string; // number\n ChillBaseUrl: string; // url eg \"mirage-ndl.888sport.com/games/html5games/games/gibraltar/\"\n ChillUrl: string; // path eg \"chill-1.246.2.0/\"\n FileName: string; // file name eg \"index.html\"\n GameBaseUrl: string; // url ?\n GameUrl: string; // ?\n HTML5BaseUrl: string; // url eg \"mirage-ndl.888sport.com/games/html5games/games_pc/gibraltar/\"\n HTML5Url: string; // path eg \"130017-0.48.0.0/\"\n WrapperBaseUrl: string; // url ?\n WrapperUrl: string; // url ?\n PreloaderBaseUrl: string;\n PreloaderUrl: string;\n };\n};\n\ntype GrsSearchKey = {\n Key: string;\n Value: string;\n};\n/* eslint-enable @typescript-eslint/naming-convention */\n\nexport class GrsService {\n private readonly api: string;\n\n public constructor() {\n this.api = Utils.setProtocol(this.concat(Config.values.grsApiPath));\n }\n\n public static hasRequiredData(): Response {\n const statusText = UrlService.launch.validationStatusText;\n\n if (statusText.length > 0) {\n return new Response(\"\", {\n status: 400,\n statusText: statusText.join(\"/n\")\n });\n } else {\n return new Response(\"\", {\n status: 200\n });\n }\n }\n\n private static getProperState(state: string | null): string {\n state = state ? state.toUpperCase() : state;\n switch (state) {\n case \"APPROVED\":\n case \"LATEST\":\n case \"PRODUCTION\":\n return state;\n default:\n return \"APPROVED\";\n }\n }\n\n private static buildRequestData(): string {\n /* eslint-disable @typescript-eslint/naming-convention */\n return JSON.stringify({\n \"CID\": UrlService.launch.cid || 0,\n \"GameTypeID\": UrlService.launch.gameType,\n \"RegulationID\": UrlService.launch.regulation,\n \"State\": GrsService.getProperState(UrlService.launch.gameState),\n \"AdditionalState\": GrsService.getProperState(UrlService.launch.additionalState),\n \"PreloaderState\": GrsService.getProperState(UrlService.launch.preloaderState),\n \"HTML5\": \"TRUE\",\n \"HTML5_PC\": UrlService.launch.isDesktop,\n \"HTML5_Mobile\": UrlService.launch.isMobile\n });\n /* eslint-enable @typescript-eslint/naming-convention */\n }\n\n public async request(): Promise {\n const data = GrsService.buildRequestData();\n const url = new URL(this.api);\n url.searchParams.append(\"value\", data);\n\n const response = await fetch(url.href);\n\n if (!response.ok) {\n logger.error(\"GRS request error!\", {\n status: response.status,\n statusText: response.statusText,\n url: response.url,\n data: data\n });\n\n throw new Error(`GRS request error! ${response.status}`);\n }\n\n return await this.validate(await response.json() as GrsResponseModel);\n }\n\n private async validate(response: GrsResponseModel): Promise {\n return new Promise((resolve: (response: GrsResponseModel) => void, reject: (error: Error) => void) => {\n try {\n if (response[\"Error\"]) {\n reject(new Error(response[\"Error\"][\"Description\"]));\n }\n\n if (!response[\"Values\"]\n || !response[\"Values\"][\"HTML5BaseUrl\"]\n || !response[\"Values\"][\"HTML5Url\"]\n || !response[\"Values\"][\"FileName\"]) {\n reject(new Error(`Missing GRS mandatory values! ${JSON.stringify(response)}`));\n }\n\n resolve(response);\n } catch (err) {\n reject(err as Error);\n }\n })\n .catch(err => {\n logger.error(\"Error while validating GRS parameters\", {\n error: err\n });\n throw err;\n });\n }\n\n private concat(path: string): string {\n return `${path}/GetGamePath`;\n }\n}","const PAYLOAD_SUCCESS = {\n \"method\": \"gameLauncherReady\"\n};\n\nconst PAYLOAD_ERROR = {\n \"method\": \"gameLauncherGameError\"\n};\n\nexport class ClientCommunication {\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n protected constructor() {\n }\n\n public static notifyClientSuccess(url: string): void {\n this.sendToClient(Object.assign(PAYLOAD_SUCCESS, { \"data\": { \"gameUrl\": url } }));\n }\n\n public static notifyClientError(error: unknown): void {\n this.sendToClient(Object.assign(PAYLOAD_ERROR, { \"data\": error }));\n }\n\n private static sendToClient(payload: { method: string }): void {\n window.parent.postMessage(payload, \"*\");\n }\n}","import { GrsResponseModel } from \"./grsService\";\nimport { UrlService } from \"./urlService\";\nimport { Utils } from \"./utils\";\nimport { logger } from \"./tracking/logger\";\nimport { flowId } from \"./flowId\";\n\nexport class UrlBuilder {\n private readonly grsResponse: GrsResponseModel;\n\n public constructor(grsData: GrsResponseModel) {\n this.grsResponse = grsData;\n }\n\n public get chill(): string {\n const base = UrlService.overwrite?.grsResponse?.ChillBaseUrl || this.grsResponse.Values.ChillBaseUrl;\n const path = UrlService.overwrite?.grsResponse?.ChillUrl || this.grsResponse.Values.ChillUrl;\n\n return `//${base}${path}`;\n }\n\n public get game(): string {\n if (UrlService.launch.gameUrl) {\n return UrlService.launch.gameUrl;\n }\n\n const base = UrlService.overwrite?.grsResponse?.HTML5BaseUrl || this.grsResponse.Values.HTML5BaseUrl;\n const path = UrlService.overwrite?.grsResponse?.HTML5Url || this.grsResponse.Values.HTML5Url;\n\n return `//${base}${path}`;\n }\n\n public get gameWithFile(): string {\n return `${this.game}${this.grsResponse.Values.FileName}`;\n }\n\n public get preloader(): string {\n const base = UrlService.overwrite?.grsResponse?.PreloaderBaseUrl || this.grsResponse.Values.PreloaderBaseUrl;\n const path = UrlService.overwrite?.grsResponse?.PreloaderUrl || this.grsResponse.Values.PreloaderUrl;\n\n return `//${base}${path}`;\n }\n\n public get redirect(): URL {\n try {\n if (UrlService.bypassPreloader) {\n return this.appendParams(this.gameWithFile);\n }\n\n return this.appendParams(this.preloader);\n } catch (err) {\n //TODO discuss if try/catch block should not be part of this.appendParams\n logger.error(\"Error forming the redirect URL!\", {\n error: err\n });\n\n throw err;\n }\n }\n\n private appendParams(target: string): URL {\n const url = new URL(target, Utils.setProtocol(target));\n url.searchParams.set(\"preloaderData\", JSON.stringify({\n \"gameUrl\": this.gameWithFile,\n \"chillUrl\": this.chill\n }));\n\n const otherParams = UrlService.other;\n const gameDataParamValue = otherParams.get(\"gameData\");\n\n url.searchParams.set(\"gameData\", this.populateGameData(gameDataParamValue));\n url.searchParams.set(\"flowId\", flowId);\n\n otherParams.delete(\"gameData\");\n otherParams.forEach((value, key) => {\n url.searchParams.set(key, value);\n });\n\n return url;\n }\n\n private populateGameData(gameData: string | null): string {\n const data: Record = JSON.parse(gameData || \"{}\") as Record;\n\n // Check if a chillUrl is provided by OrbitLauncher and leave it as it is if any\n if (!data.hasOwnProperty(\"chillUrl\")) {\n data[\"chillUrl\"] = this.chill;\n }\n\n if (UrlService.useGrsGamePathAsCustomGameResourcesPath) {\n data[\"customGameResourcesPath\"] = this.game;\n }\n\n return JSON.stringify(data);\n }\n}","export class Message {\n private readonly $element: HTMLElement;\n\n public constructor() {\n this.$element = document.createElement(\"div\");\n this.$element.id = \"message-wrapper\";\n this.$element.innerHTML =\n `
\n
\n
\n
\n
`;\n }\n\n public set text(value: string) {\n (this.$element.querySelector(\".message .content\") as HTMLElement).innerHTML = value;\n }\n\n public addButton(label: string, callback: (event: TouchEvent | MouseEvent) => void): void {\n const $button = document.createElement(\"div\");\n $button.className = \"btn\";\n $button.innerText = label;\n $button.onclick = $button.ontouchend = callback;\n (this.$element.querySelector(\".message .footer\") as HTMLElement).appendChild($button);\n }\n\n public show(parent: HTMLElement): void {\n parent.appendChild(this.$element);\n }\n\n public remove(): void {\n if (this.$element.parentElement) {\n this.$element.parentElement.removeChild(this.$element);\n }\n }\n}","import { iso2to3, texts } from \"./texts\";\nimport { Utils } from \"../utils\";\nimport { Message } from \"./message\";\n\nconst language = iso2to3[Utils.getBrowserLanguageMacroTag()] || \"eng\";\n\nconst message = new Message();\nmessage.text = `

${texts[language]}

`;\nmessage.addButton(\"Ok\", (event: TouchEvent | MouseEvent) => {\n event.preventDefault();\n message.remove();\n});\n\n// TODO: import from acme\nexport const showBasicError = (): void => {\n message.show(document.body);\n};","export const texts: { [key: string]: string } = {\n \"eng\": \"Sorry, an error has occurred.\",\n \"ita\": \"Spiacenti, si è verificato un errore.\",\n \"spa\": \"Lo sentimos, ha ocurrido un error.\",\n \"dan\": \"Beklager, der opstod en fejl.\",\n \"rum\": \"Scuze, o eroare a aparut.\",\n \"fre\": \"Désolé, une erreur s\\\"est produite.\",\n \"dut\": \"Sorry er was een fout.\",\n \"ger\": \"Sorry, an error has occured\",\n \"swe\": \"Ursäkta, ett fel har uppstått.\",\n \"nor\": \"Beklager, det har oppstått en feil.\",\n \"fin\": \"Valitettavasti tapahtui virhe.\",\n \"por\": \"Desculpe, ocorreu um erro.\",\n \"rus\": \"Произошла ошибка.\"\n};\n\nexport const iso2to3: { [key: string]: string } = {\n \"da\": \"dan\",\n \"de\": \"ger\",\n \"en\": \"eng\",\n \"es\": \"spa\",\n \"fi\": \"fin\",\n \"fr\": \"fre\",\n \"it\": \"ita\",\n \"nl\": \"dut\",\n \"no\": \"nor\",\n \"nb\": \"nor\",\n \"nn\": \"nor\",\n \"pt\": \"por\",\n \"ro\": \"rum\",\n \"sv\": \"swe\"\n};\n\n// notes ( https://www.metamodpro.com/browser-language-codes )\n// mdn navigator.language ( https://developer.mozilla.org/en-US/docs/Web/API/NavigatorLanguage/language )\n// sends us to the standard ( http://www.ietf.org/rfc/bcp/bcp47.txt ) but the standard can\"t be found in the document\n// iso2 reported by browser may contain the subtag of the language\n// dan - da\n// ger - de, de-at, de-de, de-li, de-lu, de-ch\n// eng - en, en-au, en-bz, en-ca, en-ie, en-jm, en-nz, en-ph, en-za, en-tt, en-gb, en-us, en-zw\n// spa - es, es-ar, es-bo, es-cl, es-co, es-cr, es-do, es-ec, es-sv, es-gt, es-hn, es-mx, es-ni, es-pa, es-py, es-pe, es-pr, es-es, es-uy, es-ve\n// fin - fi\n// fre - fr, fr-be, fr-ca, fr-fr, fr-lu, fr-mc, fr-ch\n// ita - it, it-ch\n// dut - nl, nl-be\n// nor - no, nb, nn\n// por - pt, pt-br\n// rum - ro, ro-mo\n// swe - sv, sv-fi, sv-sv","export interface ILaunchParams {\n get gameType(): number | null;\n get regulation(): number | null;\n get isDesktop(): string | null;\n get isMobile(): string | null;\n get cid(): number | null;\n get gameState(): string | null;\n get additionalState(): string | null;\n get preloaderState(): string | null;\n get gameUrl(): string | null;\n get paramsKeys(): Array;\n get validationStatusText(): Array;\n}\n\nexport enum GL_SPECIFIC_PARAMS {\n CID = \"CID\",\n GAME_STATE = \"GameState\",\n ADDITIONAL_STATE = \"AdditionalState\",\n PRELOADER_STATE = \"PreloaderState\",\n GAME_LAUNCHER = \"gameLauncher\",\n PARAMS_VERSION = \"paramsVersion\",\n GAME_URL = \"gameUrl\"\n}\n\n/* eslint-disable @typescript-eslint/naming-convention */\nexport type GAMELAUNCHER_PARAM = {\n useGrsGamePathAsCustomGameResourcesPath?: boolean;\n bypassPreloader?: boolean;\n overwrite?: OVERWRITE_PARAM;\n};\n\nexport type OVERWRITE_PARAM = {\n grsResponse?: GRSRESPONSE_PARAM;\n};\n\nexport type GRSRESPONSE_PARAM = {\n ChillBaseUrl?: string;\n ChillUrl?: string;\n HTML5BaseUrl?: string;\n HTML5Url?: string;\n PreloaderBaseUrl?: string;\n PreloaderUrl?: string;\n};\n/* eslint-enable @typescript-eslint/naming-convention */\n","import { UrlService } from \"../urlService\";\nimport { GL_SPECIFIC_PARAMS, ILaunchParams } from \"./contracts\";\n\nconst v1Params = {\n ...GL_SPECIFIC_PARAMS,\n GAME_TYPE: \"GameType\",\n REGULATION_MODE: \"RegulationMode\",\n HTML5_PC: \"HTML5_PC\",\n HTML5_MOBILE: \"HTML5_Mobile\"\n};\n\nexport class V1Params implements ILaunchParams {\n protected url: typeof UrlService;\n\n public constructor(url: typeof UrlService) {\n this.url = url;\n }\n\n public get gameUrl(): string | null {\n return this.url.get(v1Params.GAME_URL);\n }\n\n public get gameType(): number | null {\n const value = this.url.get(v1Params.GAME_TYPE);\n if (value) {\n return Number(value);\n } else {\n return null;\n }\n }\n\n public get isMobile(): string | null {\n return this.url.get(v1Params.HTML5_MOBILE);\n }\n\n public get isDesktop(): string | null {\n return this.url.get(v1Params.HTML5_PC);\n }\n\n public get regulation(): number | null {\n const value = this.url.get(v1Params.REGULATION_MODE);\n if (value) {\n return Number(value);\n } else {\n return null;\n }\n }\n\n public get cid(): number | null {\n const value = this.url.get(GL_SPECIFIC_PARAMS.CID);\n if (value) {\n return Number(value);\n } else {\n return null;\n }\n }\n\n public get gameState(): string | null {\n return this.url.get(GL_SPECIFIC_PARAMS.GAME_STATE);\n }\n\n public get additionalState(): string | null {\n return this.url.get(GL_SPECIFIC_PARAMS.ADDITIONAL_STATE);\n }\n\n public get preloaderState(): string | null {\n return this.url.get(GL_SPECIFIC_PARAMS.PRELOADER_STATE);\n }\n\n public get paramsKeys(): Array {\n return Object.keys(v1Params);\n }\n\n public get validationStatusText(): Array {\n const statusText = new Array();\n\n if (this.gameType === null) {\n statusText.push(`Please specify ${v1Params.GAME_TYPE}!`);\n }\n if (this.regulation === null) {\n statusText.push(`Please specify ${v1Params.REGULATION_MODE}`);\n }\n if (this.isDesktop === null) {\n statusText.push(`Please specify ${v1Params.HTML5_PC}`);\n }\n if (this.isMobile === null) {\n statusText.push(`Please specify ${v1Params.HTML5_MOBILE}`);\n }\n\n return statusText;\n }\n}","import { V1Params } from \"./v1Params\";\nimport { GL_SPECIFIC_PARAMS } from \"./contracts\";\n\nconst v2Params = {\n ...GL_SPECIFIC_PARAMS,\n GAME_ID: \"gameTypeId\",\n REGULATION_ID: \"regulationId\",\n GAME_DEVICE: \"gameDevice\"\n};\n\nexport class V2Params extends V1Params {\n\n public get gameType(): number | null {\n const value = this.url.get(v2Params.GAME_ID);\n if (value) {\n return Number(value);\n } else {\n return null;\n }\n }\n\n public get isMobile(): string | null {\n return this.getValue(\"mobile\");\n }\n\n public get isDesktop(): string | null {\n return this.getValue(\"desktop\");\n }\n\n public get regulation(): number | null {\n const value = this.url.get(v2Params.REGULATION_ID);\n if (value) {\n return Number(value);\n } else {\n return null;\n }\n }\n public get paramsKeys(): Array {\n return Object.keys(v2Params);\n }\n\n public get validationStatusText(): Array {\n const statusText = new Array();\n\n if (this.gameType === null) {\n statusText.push(`Please specify ${v2Params.GAME_ID}!`);\n }\n if (this.regulation === null) {\n statusText.push(`Please specify ${v2Params.REGULATION_ID}!`);\n }\n if (this.isDesktop === null) {\n statusText.push(`Please specify ${v2Params.GAME_DEVICE}!`);\n }\n if (this.isMobile === null) {\n statusText.push(`Please specify ${v2Params.GAME_DEVICE}!`);\n }\n\n return statusText;\n }\n\n private getValue(identifier: string): string | null {\n const gameDevice = this.url.get(v2Params.GAME_DEVICE);\n\n if (!gameDevice) {\n return null;\n }\n\n if (gameDevice === identifier) {\n return \"True\";\n }\n\n return \"False\";\n }\n}","import { GL_SPECIFIC_PARAMS, ILaunchParams } from \"./contracts\";\nimport { V2Params } from \"./v2Params\";\nimport { V1Params } from \"./v1Params\";\nimport { UrlService } from \"../urlService\";\n\nexport class FactoryParams {\n public static get(url: typeof UrlService): ILaunchParams {\n const paramVersion = url.get(GL_SPECIFIC_PARAMS.PARAMS_VERSION);\n\n switch (paramVersion) {\n case \"2\":\n return new V2Params(url);\n default:\n return new V1Params(url);\n }\n }\n}","import { GAMELAUNCHER_PARAM, GL_SPECIFIC_PARAMS, GRSRESPONSE_PARAM, OVERWRITE_PARAM } from \"./parametersHandler/contracts\";\nimport { FactoryParams } from \"./parametersHandler/factory\";\nimport { UrlService } from \"./urlService\";\nimport { Utils } from \"./utils\";\n\nexport class UrlServiceBuilder {\n\n public static build(): void {\n this.setLaunchParams();\n this.setGameLauncherParam();\n this.removeGameLauncherSpecificParams();\n }\n\n private static setLaunchParams(): void {\n UrlService.launch = FactoryParams.get(UrlService);\n }\n\n private static removeGameLauncherSpecificParams(): void {\n UrlService.launch.paramsKeys.forEach(key => {\n UrlService.other.delete(key);\n });\n }\n\n private static setGameLauncherParam(): void {\n const gameLauncherParams = UrlService.get(GL_SPECIFIC_PARAMS.GAME_LAUNCHER);\n\n if (!gameLauncherParams) return;\n\n UrlService.launchSettings = gameLauncherParamAdapter(JSON.parse(gameLauncherParams) as GAMELAUNCHER_PARAM);\n }\n}\n\nfunction gameLauncherParamAdapter(data: GAMELAUNCHER_PARAM): GAMELAUNCHER_PARAM {\n return {\n useGrsGamePathAsCustomGameResourcesPath: Utils.toBool(data[\"useGrsGamePathAsCustomGameResourcesPath\"]),\n bypassPreloader: Utils.toBool(data[\"bypassPreloader\"]),\n overwrite: data[\"overwrite\"] ? overwriteParamsAdapter(data[\"overwrite\"]) : undefined\n };\n}\n\nfunction overwriteParamsAdapter(data: OVERWRITE_PARAM): OVERWRITE_PARAM {\n return {\n grsResponse: data[\"grsResponse\"] ? grsResponseAdapter(data[\"grsResponse\"]) : undefined\n };\n}\n\n/* eslint-disable @typescript-eslint/naming-convention */\nfunction grsResponseAdapter(data: GRSRESPONSE_PARAM): GRSRESPONSE_PARAM {\n return {\n ChillBaseUrl: data[\"ChillBaseUrl\"] || undefined,\n ChillUrl: data[\"ChillUrl\"] || undefined,\n HTML5BaseUrl: data[\"HTML5BaseUrl\"] || undefined,\n HTML5Url: data[\"HTML5Url\"] || undefined,\n PreloaderBaseUrl: data[\"PreloaderBaseUrl\"] || undefined,\n PreloaderUrl: data[\"PreloaderUrl\"] || undefined\n };\n}\n/* eslint-enable @typescript-eslint/naming-convention */","function logWithVersionStyle(text) {\n console.log(\"%c\".concat(text), \"background-color:black; color:#7ff800; padding:2px 10px; border-left:4px solid #7ff800\");\n}\n\nexport { logWithVersionStyle };\n//# sourceMappingURL=stylish.js.map\n","import { GrsResponseModel, GrsService } from \"./grsService\";\nimport { Utils } from \"./utils\";\nimport { ClientCommunication } from \"./clientCommunication\";\nimport { UrlBuilder } from \"./urlBuilder\";\nimport { showBasicError } from \"./messages/basicError\";\nimport { logger } from \"./tracking/logger\";\nimport { UrlServiceBuilder } from \"./urlServiceBuilder\";\n\nexport class Engine {\n public constructor() {\n this.boot();\n this.start();\n }\n\n private boot(): void {\n UrlServiceBuilder.build();\n }\n\n private start(): void {\n const grsRequired = GrsService.hasRequiredData();\n\n if (!grsRequired.ok) {\n logger.error(\"Missing required data for a valid GRS request!\", {\n statusText: grsRequired.statusText\n });\n ClientCommunication.notifyClientError(\"Invalid required data\");\n showBasicError();\n\n return;\n }\n\n const grsService = new GrsService();\n grsService.request()\n .then(async (grsResponse: GrsResponseModel) => {\n const urlBuilder = new UrlBuilder(grsResponse);\n return Utils.checkUrl(urlBuilder.redirect);\n })\n .then((url: URL) => {\n ClientCommunication.notifyClientSuccess(url.href);\n location.href = url.href;\n return;\n })\n .catch((e) => {\n ClientCommunication.notifyClientError(e);\n showBasicError();\n return;\n });\n }\n}","import { Engine } from \"./engine\";\nimport { logWithVersionStyle } from \"@888holdings/acme\";\nimport { Config } from \"./config\";\n\nlogWithVersionStyle(`Using Game Launcher v${APP_VERSION}`);\n\ndocument.onreadystatechange = async (): Promise => {\n if (document.readyState === \"complete\") {\n await Config.init();\n new Engine();\n }\n};\n"],"names":["LEVEL","ConsoleLogger","level","DEBUG","this","_level","buildData","message","payload","data","buildLogHead","push","JSON","stringify","concat","Date","toISOString","replace","prototype","log","info","send","INFO","console","debug","sendWithStackTrace","warn","WARN","error","ERROR","callback","apply","_i","arguments","length","Error","consoleLogger","getBrowserLanguageMacroTag","lang","window","navigator","languages","language","browserLanguage","userLanguage","includes","split","setProtocol","href","reverse","location","protocol","checkUrl","url","fetch","response","ok","Promise","reject","status","toBool","value","searchParamsToJSON","searchParams","output","forEach","key","charAt","parse","err","Boolean","launchSettings","useGrsGamePathAsCustomGameResourcesPath","bypassPreloader","overwrite","get","name","toLowerCase","findInData","entries","URL","other","URLSearchParams","search","_values","init","loadConfig","logger","statusText","json","grsApiPath","String","logstashUrl","Config","values","trim","method","body","headers","mode","randomUUID","crypto","bind","getRandomValues","rnds8","Uint8Array","rng","byteToHex","i","toString","slice","referrerForLog","flowId","options","buf","offset","rnds","random","arr","unsafeStringify","document","referrer","pathname","e","paramsForLog","Utils","LogstashService","UrlService","launch","cid","buildRequestBody","elasticLogger","Logger","api","hasRequiredData","validationStatusText","Response","join","getProperState","state","toUpperCase","buildRequestData","gameType","regulation","GrsService","gameState","additionalState","preloaderState","isDesktop","isMobile","request","append","validate","resolve","catch","path","PAYLOAD_SUCCESS","PAYLOAD_ERROR","notifyClientSuccess","sendToClient","Object","assign","notifyClientError","parent","postMessage","grsData","grsResponse","base","ChillBaseUrl","Values","ChillUrl","gameUrl","HTML5BaseUrl","HTML5Url","game","FileName","PreloaderBaseUrl","PreloaderUrl","appendParams","gameWithFile","preloader","target","set","chill","otherParams","gameDataParamValue","populateGameData","delete","gameData","hasOwnProperty","$element","createElement","id","innerHTML","querySelector","addButton","label","$button","className","innerText","onclick","ontouchend","appendChild","show","remove","parentElement","removeChild","Message","text","event","preventDefault","GL_SPECIFIC_PARAMS","showBasicError","v1Params","GAME_TYPE","REGULATION_MODE","HTML5_PC","HTML5_MOBILE","GAME_URL","Number","CID","GAME_STATE","ADDITIONAL_STATE","PRELOADER_STATE","keys","Array","v2Params","GAME_ID","REGULATION_ID","GAME_DEVICE","getValue","identifier","gameDevice","V1Params","PARAMS_VERSION","V2Params","build","setLaunchParams","setGameLauncherParam","removeGameLauncherSpecificParams","FactoryParams","paramsKeys","gameLauncherParams","GAME_LAUNCHER","overwriteParamsAdapter","undefined","grsResponseAdapter","boot","start","UrlServiceBuilder","grsRequired","ClientCommunication","then","urlBuilder","UrlBuilder","redirect","onreadystatechange","readyState","Engine"],"sourceRoot":""}