{"version":3,"file":"bootstrap.a2a1a94d.chunk.js","mappings":"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,gBACA,aACA,yBACA,eACA,eACA,gBACA,wBACA,qBACA,eACA,aACA,cACA,eACA,eACA,aACA,iBACA,cACA,iBACA,gBACA,cACA,qBACA,oBACA,eACA,eACA,YACA,YACA,eACA,mBACA,cACA,aACA,sCACA,cACA,aACA,cACA,kBACA,aACA,+CACA,2BACA,cACA,kBACA,cACA,eACA,eACA,eACA,aACA,qBACA,iBACA,kBACA,iBACA,kBACA,cACA,YACA,aACA,kBACA,iBACA,eACA,eACA,cACA,kBACA,eACA,kBACA,eACA,mBACA,aACA,eACA,cACA,YACA,iBACA,cACA,gBACA,aACA,eACA,eACA,cACA,cACA,oBACA,kBACA,6BACA,oBACA,eACA,cACA,kBACA,oBACA,gBACA,gBACA,eACA,oBACA,oDACA,aACA,aACA,gBACA,iBACA,cACA,mBACA,aACA,gBACA,YACA,eACA,cACA,cACA,kBACA,gBACA,oBACA,cACA,kBACA,eACA,4BACA,sBACA,sBACA,aACA,cACA,gBAEA,iBACA,mBACA,sBACA,oBACA,YACA,qCACA,YACA,gBACA,wBACA,gCACA,qBACA,sBACA,aACA,YACA,wBACA,wBACA,gBACA,aACA,uBACA,eACA,aACA,cACA,4CACA,eACA,yBACA,aAEA,aAEA,aACH,CAzOD,CAAYA,IAAAA,EAAO,KA2OZ,MAAMC,EAAwB,CACjC,CAAElM,KAAM,cAAetH,KAAM,KAAMyT,UAAW,GAAI1B,OAAQuB,EAAgBtB,MAC1E,CAAE1K,KAAM,gBAAiBtH,KAAM,KAAMyT,UAAW,GAAI1B,OAAQuB,EAAgBtB,MAC5E,CAAE1K,KAAM,UAAWtH,KAAM,KAAMyT,UAAW,GAAI1B,OAAQuB,EAAgBtB,MACtE,CAAE1K,KAAM,UAAWtH,KAAM,KAAMyT,UAAW,GAAI1B,OAAQuB,EAAgBtB,MACtE,CAAE1K,KAAM,UAAWtH,KAAM,KAAMyT,UAAW,GAAI1B,OAAQuB,EAAgBtB,MACtE,CAAE1K,KAAM,SAAUtH,KAAM,KAAMyT,UAAW,GAAI1B,OAAQuB,EAAgBtB,MACrE,CAAE1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","sources":["webpack://SiteGen.CoreLoader.2.22.3/../../node_modules/moment/locale/ sync ^\\.\\/.*$","webpack://SiteGen.CoreLoader.2.22.3/../sitegen-common/classes/friends-referral-api/friends-referral-api.constants.ts","webpack://SiteGen.CoreLoader.2.22.3/../sitegen-common/classes/friends-referral-api/friends-referral-api.service.ts","webpack://SiteGen.CoreLoader.2.22.3/../sitegen-common/classes/friends-referral-api/friends-referral-api.utils.ts","webpack://SiteGen.CoreLoader.2.22.3/../sitegen-common/constants/config.ts","webpack://SiteGen.CoreLoader.2.22.3/../sitegen-common/constants/environments.ts","webpack://SiteGen.CoreLoader.2.22.3/../sitegen-common/constants/platforms.ts","webpack://SiteGen.CoreLoader.2.22.3/../sitegen-common/constants/website-flow.ts","webpack://SiteGen.CoreLoader.2.22.3/../sitegen-common/constants/website.domains.ts","webpack://SiteGen.CoreLoader.2.22.3/../sitegen-common/constants/website.ts","webpack://SiteGen.CoreLoader.2.22.3/../sitegen-common/localization/moment.ts","webpack://SiteGen.CoreLoader.2.22.3/../sitegen-common/localization/index.ts","webpack://SiteGen.CoreLoader.2.22.3/../sitegen-common/localization/language-regions.ts","webpack://SiteGen.CoreLoader.2.22.3/../sitegen-common/localization/locales.ts","webpack://SiteGen.CoreLoader.2.22.3/../sitegen-common/localization/locations.ts","webpack://SiteGen.CoreLoader.2.22.3/../sitegen-common/utils/timer.ts","webpack://SiteGen.CoreLoader.2.22.3/../sitegen-common/constants/ubi-services.constants.ts","webpack://SiteGen.CoreLoader.2.22.3/../sitegen-common/utils/ubi-services.ts","webpack://SiteGen.CoreLoader.2.22.3/../sitegen-common/utils/widgets.ts","webpack://SiteGen.CoreLoader.2.22.3/./src/bootstrap/reducers/config.reducer.ts","webpack://SiteGen.CoreLoader.2.22.3/./src/bootstrap/reducers/dictionaries.reducer.ts","webpack://SiteGen.CoreLoader.2.22.3/./src/bootstrap/reducers/optional-config.reducer.ts","webpack://SiteGen.CoreLoader.2.22.3/./src/bootstrap/store-config/store.config.ts","webpack://SiteGen.CoreLoader.2.22.3/./src/bootstrap/bootstrap-api.service.tsx","webpack://SiteGen.CoreLoader.2.22.3/./src/bootstrap/bootstrap-configure.ts","webpack://SiteGen.CoreLoader.2.22.3/./src/bootstrap/bootstrap.tsx","webpack://SiteGen.CoreLoader.2.22.3/./src/bootstrap/index.ts","webpack://SiteGen.CoreLoader.2.22.3/./src/components/translate-hoc/translate-hoc.constants.ts","webpack://SiteGen.CoreLoader.2.22.3/./src/components/translate-hoc/translate-hoc.utils.ts","webpack://SiteGen.CoreLoader.2.22.3/./src/components/translate-hoc/translate.hoc.tsx","webpack://SiteGen.CoreLoader.2.22.3/./src/constants/app.constants.ts","webpack://SiteGen.CoreLoader.2.22.3/./src/constants/locales.ts","webpack://SiteGen.CoreLoader.2.22.3/./src/constants/platform.ts","webpack://SiteGen.CoreLoader.2.22.3/./src/constants/platforms-display-props.ts","webpack://SiteGen.CoreLoader.2.22.3/./src/modules/__mocks__/login-session.mock.ts","webpack://SiteGen.CoreLoader.2.22.3/./src/modules/additional-info-common/fields/dropdown.component.tsx","webpack://SiteGen.CoreLoader.2.22.3/./src/modules/additional-info-common/fields/string.component.tsx","webpack://SiteGen.CoreLoader.2.22.3/./src/modules/additional-info-common/fields/int.component.tsx","webpack://SiteGen.CoreLoader.2.22.3/./src/modules/additional-info-common/fields/fields.constants.ts","webpack://SiteGen.CoreLoader.2.22.3/./src/modules/additional-info-common/fields/date.component.tsx","webpack://SiteGen.CoreLoader.2.22.3/./src/modules/additional-info-common/additional-info.constants.ts","webpack://SiteGen.CoreLoader.2.22.3/./src/modules/analytics-provider/analytics-provider.constants.ts","webpack://SiteGen.CoreLoader.2.22.3/./src/modules/analytics-provider/analytics-provider.epic.ts","webpack://SiteGen.CoreLoader.2.22.3/./src/modules/analytics-provider/analytics-provider.service.ts","webpack://SiteGen.CoreLoader.2.22.3/./src/modules/analytics-provider/analytics-provider.component.tsx","webpack://SiteGen.CoreLoader.2.22.3/./src/modules/analytics-provider/index.ts","webpack://SiteGen.CoreLoader.2.22.3/./src/modules/language-provider/i18n.constants.ts","webpack://SiteGen.CoreLoader.2.22.3/./src/modules/language-provider/i18n.service.ts","webpack://SiteGen.CoreLoader.2.22.3/./src/modules/language-provider/language-provider.utils.ts","webpack://SiteGen.CoreLoader.2.22.3/./src/modules/language-provider/locale/locale.constants.ts","webpack://SiteGen.CoreLoader.2.22.3/./src/modules/language-provider/locale/locale.service.ts","webpack://SiteGen.CoreLoader.2.22.3/./src/modules/language-provider/locale/locale.utils.ts","webpack://SiteGen.CoreLoader.2.22.3/./src/modules/login/login.constants.ts","webpack://SiteGen.CoreLoader.2.22.3/./src/modules/ubisoft-api/ubisoft-api.service.ts","webpack://SiteGen.CoreLoader.2.22.3/./src/modules/ubisoft-api/ubisoft-api.constants.ts","webpack://SiteGen.CoreLoader.2.22.3/./src/modules/ubisoft-connect-service/constants.ts","webpack://SiteGen.CoreLoader.2.22.3/./src/modules/ubisoft-connect-service/service.ts","webpack://SiteGen.CoreLoader.2.22.3/./src/modules/ubisoft-connect-service/utils.ts","webpack://SiteGen.CoreLoader.2.22.3/./src/modules/ubisoft-overlay-service/constants.ts","webpack://SiteGen.CoreLoader.2.22.3/./src/modules/ubisoft-overlay-service/index.ts","webpack://SiteGen.CoreLoader.2.22.3/./src/modules/ubisoft-overlay-service/utils.ts","webpack://SiteGen.CoreLoader.2.22.3/./src/modules/ubisoft-overlay-service/service.mock.ts","webpack://SiteGen.CoreLoader.2.22.3/./src/modules/ubisoft-overlay-service/service.ts","webpack://SiteGen.CoreLoader.2.22.3/./src/utils/css.ts","webpack://SiteGen.CoreLoader.2.22.3/./src/utils/localizeTime.ts","webpack://SiteGen.CoreLoader.2.22.3/./src/utils/url-params.ts","webpack://SiteGen.CoreLoader.2.22.3/./src/utils/window-history.service.ts","webpack://SiteGen.CoreLoader.2.22.3/./src/widgets/beta-registration/modules/beta-manager/beta-manager-api/beta-manager-api.constants.ts","webpack://SiteGen.CoreLoader.2.22.3/./src/widgets/beta-registration/modules/beta-manager/beta-manager-api/beta-custom-fields.adapter.ts","webpack://SiteGen.CoreLoader.2.22.3/./src/widgets/beta-registration/modules/beta-manager/beta-manager-api/beta-manager-api.service.ts","webpack://SiteGen.CoreLoader.2.22.3/../sitegen-build/config/env/dev-tools.js","webpack://SiteGen.CoreLoader.2.22.3/../sitegen-build/config/env/sitegen.js","webpack://SiteGen.CoreLoader.2.22.3/./src/widgets/ lazy ^\\.\\/.*\\/root\\/index$ exclude: promotab chunkName: [request] namespace object"],"sourcesContent":["var map = {\n\t\"./af\": 95191,\n\t\"./af.js\": 95191,\n\t\"./ar\": 54358,\n\t\"./ar-dz\": 71727,\n\t\"./ar-dz.js\": 71727,\n\t\"./ar-kw\": 98279,\n\t\"./ar-kw.js\": 98279,\n\t\"./ar-ly\": 87895,\n\t\"./ar-ly.js\": 87895,\n\t\"./ar-ma\": 11987,\n\t\"./ar-ma.js\": 11987,\n\t\"./ar-sa\": 52796,\n\t\"./ar-sa.js\": 52796,\n\t\"./ar-tn\": 12386,\n\t\"./ar-tn.js\": 12386,\n\t\"./ar.js\": 54358,\n\t\"./az\": 57452,\n\t\"./az.js\": 57452,\n\t\"./be\": 79053,\n\t\"./be.js\": 79053,\n\t\"./bg\": 65428,\n\t\"./bg.js\": 65428,\n\t\"./bm\": 21569,\n\t\"./bm.js\": 21569,\n\t\"./bn\": 56212,\n\t\"./bn-bd\": 24635,\n\t\"./bn-bd.js\": 24635,\n\t\"./bn.js\": 56212,\n\t\"./bo\": 13667,\n\t\"./bo.js\": 13667,\n\t\"./br\": 192,\n\t\"./br.js\": 192,\n\t\"./bs\": 51802,\n\t\"./bs.js\": 51802,\n\t\"./ca\": 19118,\n\t\"./ca.js\": 19118,\n\t\"./cs\": 39990,\n\t\"./cs.js\": 39990,\n\t\"./cv\": 30557,\n\t\"./cv.js\": 30557,\n\t\"./cy\": 4227,\n\t\"./cy.js\": 4227,\n\t\"./da\": 95406,\n\t\"./da.js\": 95406,\n\t\"./de\": 87994,\n\t\"./de-at\": 44139,\n\t\"./de-at.js\": 44139,\n\t\"./de-ch\": 86591,\n\t\"./de-ch.js\": 86591,\n\t\"./de.js\": 87994,\n\t\"./dv\": 94649,\n\t\"./dv.js\": 94649,\n\t\"./el\": 14453,\n\t\"./el.js\": 14453,\n\t\"./en-au\": 48428,\n\t\"./en-au.js\": 48428,\n\t\"./en-ca\": 36972,\n\t\"./en-ca.js\": 36972,\n\t\"./en-gb\": 13224,\n\t\"./en-gb.js\": 13224,\n\t\"./en-ie\": 18843,\n\t\"./en-ie.js\": 18843,\n\t\"./en-il\": 32732,\n\t\"./en-il.js\": 32732,\n\t\"./en-in\": 76579,\n\t\"./en-in.js\": 76579,\n\t\"./en-nz\": 29851,\n\t\"./en-nz.js\": 29851,\n\t\"./en-sg\": 70442,\n\t\"./en-sg.js\": 70442,\n\t\"./eo\": 10654,\n\t\"./eo.js\": 10654,\n\t\"./es\": 63621,\n\t\"./es-do\": 68791,\n\t\"./es-do.js\": 68791,\n\t\"./es-mx\": 67278,\n\t\"./es-mx.js\": 67278,\n\t\"./es-us\": 60717,\n\t\"./es-us.js\": 60717,\n\t\"./es.js\": 63621,\n\t\"./et\": 72404,\n\t\"./et.js\": 72404,\n\t\"./eu\": 62944,\n\t\"./eu.js\": 62944,\n\t\"./fa\": 30496,\n\t\"./fa.js\": 30496,\n\t\"./fi\": 98137,\n\t\"./fi.js\": 98137,\n\t\"./fil\": 32872,\n\t\"./fil.js\": 32872,\n\t\"./fo\": 6545,\n\t\"./fo.js\": 6545,\n\t\"./fr\": 49090,\n\t\"./fr-ca\": 13049,\n\t\"./fr-ca.js\": 13049,\n\t\"./fr-ch\": 12338,\n\t\"./fr-ch.js\": 12338,\n\t\"./fr.js\": 49090,\n\t\"./fy\": 95088,\n\t\"./fy.js\": 95088,\n\t\"./ga\": 77812,\n\t\"./ga.js\": 77812,\n\t\"./gd\": 8374,\n\t\"./gd.js\": 8374,\n\t\"./gl\": 63649,\n\t\"./gl.js\": 63649,\n\t\"./gom-deva\": 52674,\n\t\"./gom-deva.js\": 52674,\n\t\"./gom-latn\": 44948,\n\t\"./gom-latn.js\": 44948,\n\t\"./gu\": 24033,\n\t\"./gu.js\": 24033,\n\t\"./he\": 10175,\n\t\"./he.js\": 10175,\n\t\"./hi\": 58055,\n\t\"./hi.js\": 58055,\n\t\"./hr\": 41678,\n\t\"./hr.js\": 41678,\n\t\"./hu\": 85111,\n\t\"./hu.js\": 85111,\n\t\"./hy-am\": 26530,\n\t\"./hy-am.js\": 26530,\n\t\"./id\": 19126,\n\t\"./id.js\": 19126,\n\t\"./is\": 11696,\n\t\"./is.js\": 11696,\n\t\"./it\": 98710,\n\t\"./it-ch\": 38821,\n\t\"./it-ch.js\": 38821,\n\t\"./it.js\": 98710,\n\t\"./ja\": 93974,\n\t\"./ja.js\": 93974,\n\t\"./jv\": 70648,\n\t\"./jv.js\": 70648,\n\t\"./ka\": 54731,\n\t\"./ka.js\": 54731,\n\t\"./kk\": 43501,\n\t\"./kk.js\": 43501,\n\t\"./km\": 84398,\n\t\"./km.js\": 84398,\n\t\"./kn\": 91825,\n\t\"./kn.js\": 91825,\n\t\"./ko\": 13729,\n\t\"./ko.js\": 13729,\n\t\"./ku\": 19670,\n\t\"./ku.js\": 19670,\n\t\"./ky\": 78797,\n\t\"./ky.js\": 78797,\n\t\"./lb\": 50627,\n\t\"./lb.js\": 50627,\n\t\"./lo\": 65859,\n\t\"./lo.js\": 65859,\n\t\"./lt\": 80355,\n\t\"./lt.js\": 80355,\n\t\"./lv\": 16594,\n\t\"./lv.js\": 16594,\n\t\"./me\": 45324,\n\t\"./me.js\": 45324,\n\t\"./mi\": 11689,\n\t\"./mi.js\": 11689,\n\t\"./mk\": 61308,\n\t\"./mk.js\": 61308,\n\t\"./ml\": 85241,\n\t\"./ml.js\": 85241,\n\t\"./mn\": 76320,\n\t\"./mn.js\": 76320,\n\t\"./mr\": 96771,\n\t\"./mr.js\": 96771,\n\t\"./ms\": 20503,\n\t\"./ms-my\": 77748,\n\t\"./ms-my.js\": 77748,\n\t\"./ms.js\": 20503,\n\t\"./mt\": 55534,\n\t\"./mt.js\": 55534,\n\t\"./my\": 62727,\n\t\"./my.js\": 62727,\n\t\"./nb\": 7550,\n\t\"./nb.js\": 7550,\n\t\"./ne\": 49899,\n\t\"./ne.js\": 49899,\n\t\"./nl\": 41228,\n\t\"./nl-be\": 31225,\n\t\"./nl-be.js\": 31225,\n\t\"./nl.js\": 41228,\n\t\"./nn\": 97130,\n\t\"./nn.js\": 97130,\n\t\"./oc-lnc\": 93130,\n\t\"./oc-lnc.js\": 93130,\n\t\"./pa-in\": 91282,\n\t\"./pa-in.js\": 91282,\n\t\"./pl\": 28190,\n\t\"./pl.js\": 28190,\n\t\"./pt\": 41549,\n\t\"./pt-br\": 78135,\n\t\"./pt-br.js\": 78135,\n\t\"./pt.js\": 41549,\n\t\"./ro\": 307,\n\t\"./ro.js\": 307,\n\t\"./ru\": 89272,\n\t\"./ru.js\": 89272,\n\t\"./sd\": 79248,\n\t\"./sd.js\": 79248,\n\t\"./se\": 74969,\n\t\"./se.js\": 74969,\n\t\"./si\": 65522,\n\t\"./si.js\": 65522,\n\t\"./sk\": 61581,\n\t\"./sk.js\": 61581,\n\t\"./sl\": 56428,\n\t\"./sl.js\": 56428,\n\t\"./sq\": 34611,\n\t\"./sq.js\": 34611,\n\t\"./sr\": 19821,\n\t\"./sr-cyrl\": 20185,\n\t\"./sr-cyrl.js\": 20185,\n\t\"./sr.js\": 19821,\n\t\"./ss\": 35029,\n\t\"./ss.js\": 35029,\n\t\"./sv\": 80939,\n\t\"./sv.js\": 80939,\n\t\"./sw\": 73107,\n\t\"./sw.js\": 73107,\n\t\"./ta\": 72304,\n\t\"./ta.js\": 72304,\n\t\"./te\": 72550,\n\t\"./te.js\": 72550,\n\t\"./tet\": 99717,\n\t\"./tet.js\": 99717,\n\t\"./tg\": 87669,\n\t\"./tg.js\": 87669,\n\t\"./th\": 94959,\n\t\"./th.js\": 94959,\n\t\"./tk\": 92661,\n\t\"./tk.js\": 92661,\n\t\"./tl-ph\": 52234,\n\t\"./tl-ph.js\": 52234,\n\t\"./tlh\": 94120,\n\t\"./tlh.js\": 94120,\n\t\"./tr\": 81111,\n\t\"./tr.js\": 81111,\n\t\"./tzl\": 53080,\n\t\"./tzl.js\": 53080,\n\t\"./tzm\": 88246,\n\t\"./tzm-latn\": 25385,\n\t\"./tzm-latn.js\": 25385,\n\t\"./tzm.js\": 88246,\n\t\"./ug-cn\": 48777,\n\t\"./ug-cn.js\": 48777,\n\t\"./uk\": 2014,\n\t\"./uk.js\": 2014,\n\t\"./ur\": 45953,\n\t\"./ur.js\": 45953,\n\t\"./uz\": 89716,\n\t\"./uz-latn\": 87791,\n\t\"./uz-latn.js\": 87791,\n\t\"./uz.js\": 89716,\n\t\"./vi\": 99816,\n\t\"./vi.js\": 99816,\n\t\"./x-pseudo\": 94450,\n\t\"./x-pseudo.js\": 94450,\n\t\"./yo\": 22556,\n\t\"./yo.js\": 22556,\n\t\"./zh-cn\": 7414,\n\t\"./zh-cn.js\": 7414,\n\t\"./zh-hk\": 50824,\n\t\"./zh-hk.js\": 50824,\n\t\"./zh-mo\": 88589,\n\t\"./zh-mo.js\": 88589,\n\t\"./zh-tw\": 63285,\n\t\"./zh-tw.js\": 63285\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 96616;","import { invert } from 'lodash';\nimport { PLATFORM_TYPES } from '../../constants/platforms';\n\nexport const CHECK_REFERRER_ELIGIBILITY_URL = '/api/v1/{campaignId}/players/{userId}/referrer_eligibility';\nexport const FRIEND_INVITEES_URL = '/api/v1/{campaignId}/players/{userId}/invitees';\nexport const REGISTER_PLAYER_URL = '/api/v1/{campaignId}/players/{userId}/{platformId}';\nexport const GET_CAMPAIGN_INFO_URL = '/api/v1/{campaignId}';\nexport const GET_INVITE_INFO_URL = '/api/v1/{campaignId}/players/{userId}/invite_info';\nexport const ACCEPT_INVITATION_URL = '/api/v1/{campaignId}/players/{userId}/accept_invite';\nexport const GET_REWARDS_INFO_URL = '/api/v1/{campaignId}/rewards';\nexport const GET_CAMPAIGN_STATUS_URL = '/api/v1/{campaignId}/status';\nexport const GET_PLAYERS_ELIGIBILITY_URL = '/api/v1/{campaignId}/players/invitee_eligibility';\nexport const GET_PLAYERS_URL = '/api/v1/{campaignId}/players';\nexport const GET_INVITEE_CONVERSION_STATUS: string = '/api/v1/{campaignId}/players/{userId}/conversion_status';\n\nexport enum GRANT_TYPES {\n BOTH = 'both',\n REFERRER = 'referrer',\n INVITEE = 'invitee',\n}\n\nexport enum TYPES {\n TRIAL = 'trial',\n RETENTION = 'retention',\n}\n\nexport enum CONJUNCTION_TYPES {\n AND = 'AND',\n OR = 'OR'\n}\n\nexport enum CONVERSION_RULES_TYPES {\n STAT_NOTIFICATION = 'STAT_NOTIFICATION',\n STAT_MATCH_NOTIFICATION = 'STAT_MATCH_NOTIFICATION',\n STAT_API_CALL = 'STAT_API_CALL'\n}\n\nexport const CONVERSION_RULES_TYPES_ID: { readonly [key: string]: number } = {\n [CONVERSION_RULES_TYPES.STAT_API_CALL]: 1,\n [CONVERSION_RULES_TYPES.STAT_NOTIFICATION]: 3,\n [CONVERSION_RULES_TYPES.STAT_MATCH_NOTIFICATION]: 5,\n};\n\nexport const CONVERSION_RULES_ID_TO_TYPES: { readonly [key: string]: CONVERSION_RULES_TYPES }\n = invert(CONVERSION_RULES_TYPES_ID) as { readonly [key: string]: CONVERSION_RULES_TYPES };\n\nexport const CONJUNCTION_TYPES_ID: { readonly [key: string]: number } = {\n [CONJUNCTION_TYPES.AND]: 1,\n [CONJUNCTION_TYPES.OR]: 2\n};\n\nexport const CONJUNCTION_ID_TO_TYPES: { readonly [key: string]: CONJUNCTION_TYPES }\n = invert(CONJUNCTION_TYPES_ID) as { readonly [key: string]: CONJUNCTION_TYPES };\n\nexport const GRANT_TYPES_ID: { readonly [key: string]: number } = {\n [GRANT_TYPES.BOTH]: 1,\n [GRANT_TYPES.REFERRER]: 2,\n [GRANT_TYPES.INVITEE]: 3,\n};\n\nexport const TYPES_ID: { readonly [key: string]: number } = {\n [TYPES.TRIAL]: 1,\n [TYPES.RETENTION]: 3,\n};\n\nexport enum ERROR_TYPE {\n NETWORK_ERROR,\n API_ERROR\n}\n\nexport const PLAYER_ERRORS_CODES = {\n PLAYER_IS_NOT_REGISTERED: 2004\n};\n\nexport const PLATFORM_TO_REFERRAL_PLATFORM_ID: { readonly [key: string]: number } = {\n [PLATFORM_TYPES.PC]: 1,\n [PLATFORM_TYPES.PS4]: 2,\n [PLATFORM_TYPES.XONE]: 3,\n [PLATFORM_TYPES.XSX]: 4,\n [PLATFORM_TYPES.PS5]: 5,\n [PLATFORM_TYPES.SWITCH]: 6,\n [PLATFORM_TYPES.STADIA]: 7\n};\n\nexport const REFERRAL_PLATFORM_ID_TO_PLATFORM: { readonly [key: string]: PLATFORM_TYPES }\n = invert(PLATFORM_TO_REFERRAL_PLATFORM_ID) as { readonly [key: string]: PLATFORM_TYPES };\n","import axios, { AxiosError, AxiosInstance, AxiosRequestConfig, AxiosResponse } from 'axios';\nimport URI from 'urijs';\nimport 'urijs/src/URITemplate';\nimport { isEmpty, chunk } from 'lodash';\n\nimport { getFriendsReferralEndpoint } from '../../utils/ubi-services';\n\nimport {\n ACCEPT_INVITATION_URL,\n ERROR_TYPE,\n FRIEND_INVITEES_URL,\n GET_CAMPAIGN_INFO_URL,\n GET_CAMPAIGN_STATUS_URL,\n GET_INVITE_INFO_URL,\n GET_PLAYERS_URL,\n GET_REWARDS_INFO_URL,\n PLATFORM_TO_REFERRAL_PLATFORM_ID,\n PLAYER_ERRORS_CODES,\n REFERRAL_PLATFORM_ID_TO_PLATFORM,\n REGISTER_PLAYER_URL,\n GET_PLAYERS_ELIGIBILITY_URL,\n CHECK_REFERRER_ELIGIBILITY_URL,\n CONVERSION_RULES_ID_TO_TYPES,\n GET_INVITEE_CONVERSION_STATUS\n} from './friends-referral-api.constants';\n\nimport {\n ICampaignStatus,\n ICampaignInfo,\n ICampaignInfoResponse,\n IConfigureFriendsReferralServiceApiOptions,\n IConfigureFriendsReferralServiceSessionOptions,\n IFriendsReferralAPIError,\n IFriendsReferralError,\n IFriendsReferralResponse,\n IFRInviteeData,\n IGetInviteInfo,\n IGetPlayerInfo,\n IGetRewardsResponseItem,\n IRewardsResponseList,\n IGetInviteesResponse,\n IRegisterReferrerResult,\n IPlayersEligibilityResponse,\n IPlatformsEligibility,\n IGetEligibilityResponse,\n IGetConversionStatus\n} from './friends-referral-api.types';\nimport { PLATFORM_TYPES } from '../../constants/platforms';\nimport { isBeforeExpiration, checkRewardEligible } from './friends-referral-api.utils';\n\nconst FR_API_QUERY_LIMIT = 50;\n\nexport class FriendsReferralApiService {\n private static AXIOS_INSTANCE: AxiosInstance;\n private static ENV: string;\n private static CAMPAIGN_ID: string;\n private static USER_ID: string;\n\n private static API_CONFIGURED = false;\n private static SESSION_CONFIGURED = false;\n\n /** Provide headers and other options to each request */\n public static configureSession(options: IConfigureFriendsReferralServiceSessionOptions) {\n this.AXIOS_INSTANCE.defaults.headers = {\n 'Authorization': `Bearer ${options.ticket}`\n };\n this.USER_ID = options.userId;\n\n this.SESSION_CONFIGURED = true;\n }\n\n public static configureAPI(options: IConfigureFriendsReferralServiceApiOptions) {\n this.AXIOS_INSTANCE = axios.create();\n this.ENV = options.env;\n this.CAMPAIGN_ID = options.campaignId;\n\n this.API_CONFIGURED = true;\n }\n\n public static configureFakeAPI(): Promise {\n /* eslint-disable-next-line*/\n return import('./__mocks__/friend-referral-api.service.mocks').then((module: any): void => {\n this.getInvitees = module.getInvitees;\n this.inviteFriends = (): Promise => Promise.resolve();\n this.getRewardsInfo = module.getRewardsInfo;\n });\n }\n\n public static request(options: AxiosRequestConfig): Promise {\n this.checkIfApiConfigured();\n\n return this.AXIOS_INSTANCE.request({ ...options, responseType: 'json' })\n .then((response: AxiosResponse): T => {\n const error = !response.data.isSuccessful;\n if (error) {\n throw response.data;\n }\n return response.data.success!;\n }).catch((error: AxiosError | IFriendsReferralResponse): never => {\n if ((error as AxiosError).response) {\n throw this.getNetworkErrorFromResponse(error as AxiosError);\n } else {\n throw this.getFriendsReferralErrorFromResponse((error as IFriendsReferralResponse).failure!);\n }\n });\n }\n\n public static register(platform: PLATFORM_TYPES): Promise {\n const url: string = this.getRegisterURL(PLATFORM_TO_REFERRAL_PLATFORM_ID[platform]).href();\n\n return this.request({ url, method: 'POST' });\n }\n\n public static getPrivateKey(key: string) {\n return this[key];\n }\n\n public static acceptInvitation(options: { invitationId: string }): Promise {\n const url: string = this.getAcceptInvitationUrl().setQuery({ invitationId: options.invitationId }).href();\n return this.request({ url, method: 'POST' }).then();\n }\n\n public static getEligibilityInfo(): Promise {\n const url: string = this.getReferrerEligibilityURL().href();\n\n return this.request({ url, method: 'GET' }).then(eligibilityResponse => {\n return eligibilityResponse.platformEligibility.reduce(\n (result, item) => {\n const platformType = REFERRAL_PLATFORM_ID_TO_PLATFORM[item.platformId];\n result[platformType] = item.isEligible;\n return result;\n },\n {});\n });\n }\n\n public static getPlayersEligibility(ids: string[]): Promise {\n this.checkIfSessionConfigured();\n\n const url = this.getPlayersEligibilityUrl().href();\n\n return this.request({\n url,\n method: 'POST',\n headers: {\n ...this.AXIOS_INSTANCE.defaults.headers,\n 'Ubi-UserId': this.USER_ID\n },\n data: ids\n });\n }\n\n public static getPlayers(ids: string[]): Promise {\n this.checkIfSessionConfigured();\n\n const url = this.getPlayersUrl().href();\n\n return this.request({\n url,\n method: 'POST',\n headers: {\n ...this.AXIOS_INSTANCE.defaults.headers,\n 'Ubi-UserId': this.USER_ID\n },\n data: ids\n });\n }\n\n public static getCampaignInfo(): Promise {\n const url: string = this.getCampaignInfoURL().href();\n return this.request({ url, method: 'GET' })\n .then(({\n campaignSpaces,\n conversionConfig: { conjunction, rules },\n name,\n crossPlatform,\n softClosingDate,\n endDate,\n platformLock\n }: ICampaignInfoResponse) => {\n const spaces = campaignSpaces.reduce((acc, space) => {\n acc[REFERRAL_PLATFORM_ID_TO_PLATFORM[space.platformId]] = space.spaceIdStats;\n return acc;\n }, {});\n const availableRules = rules.filter(rule => CONVERSION_RULES_ID_TO_TYPES[rule.type]);\n\n return {\n spaces,\n conversion: { conjunction, rules: availableRules },\n name,\n crossPlatform,\n endDate,\n platformLock,\n softCloseMode: !isBeforeExpiration(softClosingDate)\n } as ICampaignInfo;\n });\n }\n\n public static getPlayerInfo(userId: string): Promise {\n return this.getPlayers([userId])\n .then(playerInfos => {\n if (isEmpty(playerInfos)) {\n return {\n isReferrer: false // is always 'false' if API responds with 'PLAYER_IS_NOT_REGISTERED' error\n };\n }\n\n const [{\n invitationId,\n referrerUbiAccountId,\n referrerId,\n platformId,\n isConverted\n }] = playerInfos;\n\n return {\n isReferrer: true, // is always 'true' if API responds with any info\n invitationId,\n referrerUbiAccountId,\n referrerId,\n isConverted,\n platformId: platformId ? REFERRAL_PLATFORM_ID_TO_PLATFORM[platformId] : null\n };\n })\n .catch(error => {\n if (\n ERROR_TYPE.API_ERROR === error.type\n && PLAYER_ERRORS_CODES.PLAYER_IS_NOT_REGISTERED === error.code\n ) {\n return {\n isReferrer: false // is always 'false' if API responds with 'PLAYER_IS_NOT_REGISTERED' error\n };\n }\n return error;\n });\n }\n\n public static getInvitees(options: { page: number, size?: number }): Promise {\n const url: string = this.getInviteesURL(options).href();\n return this.request({ url, method: 'GET' });\n }\n\n public static inviteFriends(ubiIdList: string[]): Promise {\n const url: string = this.getInviteesURL({}).href();\n\n if (ubiIdList.length <= FR_API_QUERY_LIMIT) {\n return this.request({ url, method: 'POST', data: ubiIdList }).then((): void => undefined);\n }\n\n // Split into multiple calls if id list exceeds API query limit\n const chunkedIds = chunk(ubiIdList, FR_API_QUERY_LIMIT);\n const requests = chunkedIds.map(idsChunk => this.request({\n url,\n method: 'POST',\n data: idsChunk\n }));\n\n return Promise.all(requests).then((): void => undefined);\n }\n\n public static getRewardsInfo(): Promise {\n const url: string = this.getRewardsInfoURL().href();\n return this.request({\n url,\n headers: {\n 'Authorization': null\n },\n method: 'GET'\n }).then(rewardsResponse => {\n /* We group all rewards into tiers by 'levelNumber' which become an 'id' of tier */\n return rewardsResponse.reduce((result, rewardItem) => {\n const isEligibleReward = checkRewardEligible(rewardItem);\n\n if (!isEligibleReward) {\n return result;\n }\n\n if (isEmpty(result[rewardItem.levelNumber])) {\n result[rewardItem.levelNumber] = { rewardsIds: [] };\n } else {\n if (result[rewardItem.levelNumber].levelLimit !== rewardItem.levelLimit) {\n throw 'Misconfiguration: items with different \"levelNumbers\" can\\'t be grouped';\n }\n }\n result[rewardItem.levelNumber].levelLimit = rewardItem.levelLimit;\n result[rewardItem.levelNumber].rewardsIds.push(rewardItem.id);\n result[rewardItem.levelNumber].levelRepeat = rewardItem.levelRepeat;\n return result;\n }, {});\n });\n }\n\n public static async getCampaignStatus(): Promise {\n this.checkIfApiConfigured();\n const url = this.getCampaignStatusUrl().href();\n const options = {\n url,\n headers: {\n 'Authorization': null\n },\n method: 'GET',\n responseType: 'json'\n };\n\n try {\n const response = await this.AXIOS_INSTANCE.request(options);\n return (response.data as ICampaignStatus);\n } catch (error) {\n throw this.getNetworkErrorFromResponse(error as AxiosError);\n }\n }\n\n public static getInviteInfo(options: { invitationId: string }): Promise {\n const url: string = this.getInviteInfoUrl()\n .setQuery({ invitationId: options.invitationId }).href();\n return this.request({ url, method: 'GET' })\n .then(invitationInfo => ({\n ...invitationInfo,\n platformId: REFERRAL_PLATFORM_ID_TO_PLATFORM[invitationInfo.platformId]\n }));\n }\n\n public static async getInviteeConversionStatus(options: {\n readonly campaignId: string,\n readonly userId: string\n }): Promise {\n const host: string = getFriendsReferralEndpoint(this.ENV);\n const template: string = URI.expand!(GET_INVITEE_CONVERSION_STATUS, options).toString();\n const url: string = new URI(host)\n .segment(template)\n .href();\n return await this.request({ url, method: 'GET' });\n }\n\n private static getRegisterURL(platformId: number): URI {\n this.checkIfSessionConfigured();\n\n const host: string = getFriendsReferralEndpoint(this.ENV);\n const values: object = { campaignId: this.CAMPAIGN_ID, userId: this.USER_ID, platformId };\n const template: string = URI.expand!(REGISTER_PLAYER_URL, values).toString();\n return new URI(host).segment(template);\n }\n\n private static getInviteesURL(options: { page?: number, size?: number }): URI {\n this.checkIfSessionConfigured();\n\n const host: string = getFriendsReferralEndpoint(this.ENV);\n const values: object = { campaignId: this.CAMPAIGN_ID, userId: this.USER_ID };\n const template: string = URI.expand!(FRIEND_INVITEES_URL, values).toString();\n return new URI(host)\n .segment(template)\n .setQuery({ pageIndex: options.page, pageSize: options.size });\n }\n\n private static getReferrerEligibilityURL(): URI {\n this.checkIfSessionConfigured();\n\n const host: string = getFriendsReferralEndpoint(this.ENV);\n const values: object = { campaignId: this.CAMPAIGN_ID, userId: this.USER_ID };\n const template: string = URI.expand!(CHECK_REFERRER_ELIGIBILITY_URL, values).toString();\n return new URI(host).segment(template);\n }\n\n private static getRewardsInfoURL(): URI {\n const host: string = getFriendsReferralEndpoint(this.ENV);\n const values: object = { campaignId: this.CAMPAIGN_ID };\n const template: string = URI.expand!(GET_REWARDS_INFO_URL, values).toString();\n return new URI(host).segment(template);\n }\n\n private static getCampaignInfoURL(): URI {\n const host: string = getFriendsReferralEndpoint(this.ENV);\n const values: object = { campaignId: this.CAMPAIGN_ID };\n const template: string = URI.expand!(GET_CAMPAIGN_INFO_URL, values).toString();\n return new URI(host).segment(template);\n }\n\n private static getInviteInfoUrl(): URI {\n const host: string = getFriendsReferralEndpoint(this.ENV);\n const values: object = { campaignId: this.CAMPAIGN_ID, userId: this.USER_ID };\n const template: string = URI.expand!(GET_INVITE_INFO_URL, values).toString();\n return new URI(host).segment(template);\n }\n\n private static getAcceptInvitationUrl(): URI {\n const host: string = getFriendsReferralEndpoint(this.ENV);\n const values: object = { campaignId: this.CAMPAIGN_ID, userId: this.USER_ID };\n const template: string = URI.expand!(ACCEPT_INVITATION_URL, values).toString();\n return new URI(host).segment(template);\n }\n\n private static getPlayersEligibilityUrl(): URI {\n const host = getFriendsReferralEndpoint(this.ENV);\n const values = { campaignId: this.CAMPAIGN_ID };\n const template = URI.expand!(GET_PLAYERS_ELIGIBILITY_URL, values).toString();\n\n return new URI(host).segment(template);\n }\n\n private static getPlayersUrl(): URI {\n const host = getFriendsReferralEndpoint(this.ENV);\n const values = { campaignId: this.CAMPAIGN_ID };\n const template = URI.expand!(GET_PLAYERS_URL, values).toString();\n\n return new URI(host).segment(template);\n }\n\n private static getCampaignStatusUrl(): URI {\n const host = getFriendsReferralEndpoint(this.ENV);\n const values = { campaignId: this.CAMPAIGN_ID };\n const template = URI.expand!(GET_CAMPAIGN_STATUS_URL, values).toString();\n\n return new URI(host).segment(template);\n }\n\n /** Convert Friends Referral API error to application-specific error */\n private static getFriendsReferralErrorFromResponse(error: IFriendsReferralAPIError): IFriendsReferralError {\n return {\n code: parseInt(error.errorCode, 10),\n message: error.errorMessage,\n type: ERROR_TYPE.API_ERROR\n };\n }\n\n /** Convert network error to application-specific error */\n private static getNetworkErrorFromResponse(error: AxiosError): IFriendsReferralError {\n return {\n code: error.response!.status,\n message: error.message,\n type: ERROR_TYPE.NETWORK_ERROR\n };\n }\n\n private static checkIfApiConfigured() {\n if (!this.API_CONFIGURED) {\n throw new Error('API configuration is required, please check if config method is executed');\n }\n }\n\n private static checkIfSessionConfigured() {\n if (!this.SESSION_CONFIGURED) {\n throw new Error('Session configuration is required, please check if config methods is executed');\n }\n }\n}\n","import moment from 'moment';\n\nimport { GRANT_TYPES, GRANT_TYPES_ID, TYPES, TYPES_ID } from './friends-referral-api.constants';\nimport { IGetRewardsResponseItem } from './friends-referral-api.types';\n\nexport const checkRewardEligible = (rewardItem: IGetRewardsResponseItem) => {\n /* we only want to display referrer/both and not the invitee reward */\n const isInviteeGrantType = rewardItem.grantType === GRANT_TYPES_ID[GRANT_TYPES.INVITEE];\n const isActive = rewardItem.active;\n const isTrialType = rewardItem.type === TYPES_ID[TYPES.TRIAL];\n const isRetentionType = rewardItem.type === TYPES_ID[TYPES.RETENTION];\n return !isInviteeGrantType && isActive && !isTrialType && !isRetentionType;\n};\n\n/**\n * Dates received from server do not contain timezone information and should be considered as UTC.\n * Dates received from admin tool (beta flow only) have information about timezone, so moment.utc(...) will still work\n */\nexport const isBeforeExpiration = (date?: string | null) => {\n const expirationTime: moment.Moment = moment.utc(date);\n\n if (!date || !expirationTime.isValid()) {\n return true;\n }\n\n const localTime: moment.Moment = moment();\n return localTime.isBefore(expirationTime);\n};\n","import IDictionaries from '../localization/dictionaries';\nimport { LANGUAGE_REGION } from '../localization/language-regions';\nimport { ENV } from './environments';\nimport { WIDGET_NAME } from './widgets';\nimport { IContentPackItem } from '../types/content-packs';\nimport { PLAYER_SOURCE_TYPE } from './player-sources';\nimport { IRedeemCodeFormat } from '../types/redemption.types';\nimport { PLATFORM_TYPES } from './platforms';\nimport { IRewardTierItem } from '../types/rewards-tiers';\nimport { ICategory } from '../types/faq';\nimport { IAgeRatings } from './age-ratings';\nimport { IDataFormat } from '../classes/friends-referral-api';\nimport { IEntitlement } from '../types/entitlements';\n\nexport enum WEBSITE_MODE {\n EMBEDDED = 'embedded',\n STANDALONE = 'standalone'\n}\n\ninterface IInitialConfig {\n envName: ENV;\n applicationId: string;\n genomeId: string;\n microId?: boolean;\n twitchOfferID: string;\n urlPath: string;\n shouldInheritStyles: boolean;\n mode: WEBSITE_MODE;\n widgetName: WIDGET_NAME;\n maintenanceMode: boolean;\n platformSelection: Array;\n isAnalyticsEnabled: boolean;\n analyticsFlowType?: string;\n analyticsBrand: string;\n analyticsGame: string;\n analyticsMDMBrandId: string;\n analyticsMDMInstallmentId: string;\n analyticsSiteName: string;\n contentPath: string;\n links: {\n faq: string\n };\n RSCodeFormat: IRedeemCodeFormat;\n eventCode: string;\n ageRatings: IAgeRatings;\n availableLanguages: { [key in LANGUAGE_REGION]: string[] };\n datesSettings?: IDatesSettings;\n styles: IStyles;\n websiteAbsolutePath: string;\n}\n\ninterface IConfig extends IInitialConfig {\n readonly selectedPackItemId: string;\n readonly contentPackItems?: IContentPackItem[];\n readonly betaRegistration?: IBetaRegistration & IBetaRegistrationV2;\n readonly freeContent?: IFreeContent;\n readonly rewardsTiers?: IRewardTierItem[];\n readonly friendsReferral?: IFriendsReferral;\n readonly entitlements?: IEntitlement[];\n}\n\nexport interface IWebsiteSettings {\n readonly contentPackItems?: IContentPackItem[];\n readonly friendsReferral?: IFriendsReferral;\n}\n\nexport interface IFreeContent {\n readonly useBrandedInstallerUrl: boolean;\n readonly brandedInstallerUrl: string;\n readonly source?: string;\n}\n\nexport interface IFriendsReferral {\n readonly showGameLogo: boolean;\n readonly campaignId: string;\n readonly rewardsImageSrc?: string;\n readonly inviteeRewardImageSrc?: string;\n readonly dataFormat: IDataFormat[];\n readonly faq: Array;\n}\n\ninterface IInitialBetaRegistration {\n code: string;\n nda: boolean;\n ndaContent?: string;\n adminConnectURL?: string | null;\n internalBeta: Boolean;\n friendInvite: {\n enabled: boolean,\n number: number\n };\n friendsInviteFriends?: {\n enabled: boolean\n };\n excludedCountries?: string[];\n restrictedPlayerSources: PLAYER_SOURCE_TYPE[];\n isPlatformChangeAllowed: boolean;\n multiplePlatform: boolean;\n autoPush: {\n enabled: boolean,\n tag: string\n };\n}\n\nexport interface IBetaRegistration extends IInitialBetaRegistration{\n readonly phaseId: number;\n readonly spaceId: string;\n readonly survey: boolean;\n}\n\nexport interface IBetaRegistrationV2 extends IInitialBetaRegistration{\n readonly phaseCode: string;\n readonly spaceId: string;\n readonly survey: boolean;\n readonly packageId?: string;\n}\n\nexport interface IDatesSettings {\n readonly startDate?: string;\n readonly endDate?: string;\n readonly shouldDisplayInUTC?: boolean;\n}\n\nexport interface IStyles {\n areStylesAlreadyApplied: false;\n custom: string;\n default: string[];\n assets: string;\n /** Colors and styling is provided as CSS content rather then link */\n readonly colorsAndStylingContent?: string;\n}\n\nexport interface IBootstrapConfig extends IConfig {\n dictionaries: IDictionaries;\n}\n\nexport interface IEmbeddedAppConfig {\n readonly initialLanguage?: string;\n}\n\nexport default IConfig;\n","export enum ENV {\n QC = 'QC',\n UAT = 'UAT',\n DEV = 'DEV',\n PREPROD = 'PREPROD',\n PROD = 'PROD'\n}\n","import { keyBy } from 'lodash';\nimport { WEBSITE_FLOW } from './website-flow';\n\nexport interface IPlatform {\n id: string;\n displayName: string;\n}\n\n/* TODO: Delete PS3, X360 and Wii U after ~2.7.2 */\nexport enum PLATFORM_TYPES {\n PC = 'PC',\n PS4 = 'PS4',\n XONE = 'XONE',\n SWITCH = 'SWITCH',\n PS3 = 'PS3',\n X360 = 'X360',\n WIIU = 'WIIU',\n WEB = 'WEB',\n MOBILE = 'MOBILE',\n IOS = 'IOS',\n ANDROID = 'ANDROID',\n OCULUSVR = 'OCULUSVR',\n STEAMVR = 'STEAMVR',\n STEAM = 'STEAM',\n EPIC = 'EPIC',\n STADIA = 'STADIA',\n PS5 = 'PS5',\n XSX = 'XSX',\n LUNA = 'LUNA',\n AMAZON = 'AMAZON'\n}\n\nexport const LINKABLE_PLATFORMS = [PLATFORM_TYPES.PS4, PLATFORM_TYPES.XONE];\n\nexport const PLATFORM_XBOX_ONE = 'XboxOne';\nexport const PLATFORM_XBOX_SERIES = 'XboxSeriesX';\n\nconst PLATFORMS: Array = [\n {\n id: PLATFORM_TYPES.PC,\n displayName: PLATFORM_TYPES.PC\n },\n {\n id: PLATFORM_TYPES.PS4,\n displayName: PLATFORM_TYPES.PS4\n },\n {\n id: PLATFORM_TYPES.XONE,\n displayName: PLATFORM_TYPES.XONE\n },\n {\n id: PLATFORM_TYPES.SWITCH,\n displayName: PLATFORM_TYPES.SWITCH\n },\n {\n id: PLATFORM_TYPES.XSX,\n displayName: PLATFORM_TYPES.XSX\n },\n {\n id: PLATFORM_TYPES.PS5,\n displayName: PLATFORM_TYPES.PS5\n }\n];\n\nconst REDEEM_PLATFORMS: Array = [\n ...PLATFORMS,\n {\n id: PLATFORM_TYPES.EPIC,\n displayName: PLATFORM_TYPES.EPIC\n },\n {\n id: PLATFORM_TYPES.STADIA,\n displayName: PLATFORM_TYPES.STADIA\n },\n {\n id: PLATFORM_TYPES.LUNA,\n displayName: PLATFORM_TYPES.LUNA\n }\n];\n\nconst REDEEM_PLATFORMS_V1: Array = [\n ...REDEEM_PLATFORMS,\n {\n id: PLATFORM_TYPES.IOS,\n displayName: PLATFORM_TYPES.IOS\n },\n {\n id: PLATFORM_TYPES.ANDROID,\n displayName: PLATFORM_TYPES.ANDROID\n }\n];\n\nconst PYC_REDEEM_PLATFORMS: Array = [\n {\n id: PLATFORM_TYPES.PC,\n displayName: PLATFORM_TYPES.PC\n },\n {\n id: PLATFORM_TYPES.EPIC,\n displayName: PLATFORM_TYPES.EPIC\n }\n];\n\nexport const BETA_PLATFORMS_V2: Array = [\n ...PLATFORMS,\n {\n id: PLATFORM_TYPES.LUNA,\n displayName: PLATFORM_TYPES.LUNA\n },\n {\n id: PLATFORM_TYPES.IOS,\n displayName: PLATFORM_TYPES.IOS\n },\n {\n id: PLATFORM_TYPES.ANDROID,\n displayName: PLATFORM_TYPES.ANDROID\n },\n {\n id: PLATFORM_TYPES.OCULUSVR,\n displayName: PLATFORM_TYPES.OCULUSVR\n },\n {\n id: PLATFORM_TYPES.STEAMVR,\n displayName: PLATFORM_TYPES.STEAMVR\n },\n {\n id: PLATFORM_TYPES.EPIC,\n displayName: PLATFORM_TYPES.EPIC\n }\n];\n\nexport const BETA_PLATFORMS: Array = [\n ...BETA_PLATFORMS_V2,\n {\n id: PLATFORM_TYPES.STADIA,\n displayName: PLATFORM_TYPES.STADIA\n },\n {\n id: PLATFORM_TYPES.WEB,\n displayName: PLATFORM_TYPES.WEB\n },\n {\n id: PLATFORM_TYPES.MOBILE,\n displayName: PLATFORM_TYPES.MOBILE\n },\n {\n id: PLATFORM_TYPES.AMAZON,\n displayName: PLATFORM_TYPES.AMAZON\n }\n];\n\nconst FRIENDS_REFERRAL_PLATFORMS: Array = [\n ...PLATFORMS,\n {\n id: PLATFORM_TYPES.STADIA,\n displayName: PLATFORM_TYPES.STADIA\n }\n];\n\nconst DEFAULT_PLATFORMS: Array = [\n ...PLATFORMS,\n {\n id: PLATFORM_TYPES.LUNA,\n displayName: PLATFORM_TYPES.LUNA\n }\n];\n\nexport const PLATFORMS_BY_WEBSITE_FLOW = (flow?: WEBSITE_FLOW): Array => {\n switch (flow) {\n case WEBSITE_FLOW.BETA_REGISTRATION:\n case WEBSITE_FLOW.BETA_APPROVAL:\n return BETA_PLATFORMS;\n case WEBSITE_FLOW.BETA_REGISTRATION_V2:\n case WEBSITE_FLOW.BETA_APPROVAL_V2:\n case WEBSITE_FLOW.BETA_GUARANTEED_ACCESS_V2:\n return BETA_PLATFORMS_V2;\n case WEBSITE_FLOW.ULC_REDEEM:\n case WEBSITE_FLOW.CF_REDEEM:\n return REDEEM_PLATFORMS_V1;\n case WEBSITE_FLOW.CF_REDEEM_V2:\n return REDEEM_PLATFORMS;\n case WEBSITE_FLOW.PYC_REDEEM:\n return PYC_REDEEM_PLATFORMS;\n case WEBSITE_FLOW.FRIENDS_REFERRAL:\n return FRIENDS_REFERRAL_PLATFORMS;\n default:\n return DEFAULT_PLATFORMS;\n }\n};\n\nexport const DEFAULT_WEBSITE_PLATFORM_SELECTION_ENUM = [\n PLATFORM_TYPES.PC,\n PLATFORM_TYPES.PS4,\n PLATFORM_TYPES.XONE\n];\n\nexport const DEFAULT_PYC_REDEEM_PLATFORM_SELECTION_ENUM = [ PLATFORM_TYPES.PC ];\n\nexport const DEFAULT_CF_REDDEM_PLATFORM_SELECTION_ENUM = [\n ...DEFAULT_WEBSITE_PLATFORM_SELECTION_ENUM,\n PLATFORM_TYPES.STADIA,\n PLATFORM_TYPES.PS5,\n PLATFORM_TYPES.XSX\n];\nexport const WEBSITE_PLATFORM_SELECTION_ENUM = DEFAULT_PLATFORMS.map(({ id }) => id);\nexport const PLATFORMS_BY_PLATFORM_ID: { [id: string]: IPlatform } = keyBy(BETA_PLATFORMS, 'id');\n\n/* It's Used as attribute on Platform selection screen */\nexport const DATA_PLATFORMS_AMOUNT = 'data-platforms-amount';\n","/** Available types of event flows in all application */\nexport enum WEBSITE_FLOW {\n BETA_REGISTRATION = 'BETA_REGISTRATION',\n BETA_APPROVAL = 'BETA_APPROVAL',\n BETA_REGISTRATION_V2 = 'BETA_REGISTRATION_V2',\n BETA_APPROVAL_V2 = 'BETA_APPROVAL_V2',\n BETA_GUARANTEED_ACCESS_V2 = 'BETA_GUARANTEED_ACCESS_V2',\n OPEN_BETA = 'OPEN_BETA',\n ULC_REDEEM = 'ULC_REDEEM',\n CF_REDEEM = 'CF_REDEEM',\n CF_REDEEM_V2 = 'CF_REDEEM_V2',\n PYC_REDEEM = 'PYC_REDEEM',\n TWITCH_PRIME = 'TWITCH_PRIME',\n STANDARD_REGISTRATION = 'STANDARD_REGISTRATION',\n FREE_WEEKEND = 'FREE_WEEKEND',\n TRIALS = 'TRIALS',\n DEMO = 'DEMO',\n FRIENDS_REFERRAL = 'FRIENDS_REFERRAL',\n GIVEAWAY = 'GIVEAWAY',\n PROMOTAB = 'PROMOTAB'\n}\n","import { IWebsiteSubdomain } from '../types';\nimport { ENV } from './environments';\n\nexport const REGISTER_DOMAIN = 'register';\nexport const FREE_WEEKEND_DOMAIN = 'freeweekend';\nexport const TWITCH_PRIME_DOMAIN = 'twitchprime';\nexport const REDEEM_DOMAIN = 'redeem';\nexport const PC_PROMO = 'pc-promo';\nexport const STANDARD_REGISTRATION_DOMAIN = 'standard-registration';\nexport const FRIENDS_REFERRAL_DOMAIN = 'referral';\n\nexport type IWebsiteDomain = typeof REGISTER_DOMAIN\n | typeof FREE_WEEKEND_DOMAIN\n | typeof TWITCH_PRIME_DOMAIN\n | typeof REDEEM_DOMAIN\n | typeof PC_PROMO\n | typeof STANDARD_REGISTRATION_DOMAIN\n | typeof FRIENDS_REFERRAL_DOMAIN;\n\nexport const formWebsiteSubdomain = (subdomain: IWebsiteDomain): IWebsiteSubdomain => ({\n [ENV.DEV]: `https://dev-${subdomain}.ubisoft.com`,\n [ENV.QC]: `https://qc-${subdomain}.ubisoft.com`,\n [ENV.UAT]: `https://uat-${subdomain}.ubisoft.com`,\n [ENV.PREPROD]: `https://preprod-${subdomain}.ubisoft.com`,\n [ENV.PROD]: `https://${subdomain}.ubisoft.com`\n});\n\nexport const DEFAULT_CDN_URL = 'https://static-live.ubisoft.com/';\n\nexport const formWebsiteCDNUrl = ({ env, flow = null }: { env: ENV, flow?: IWebsiteDomain | null}): string => {\n let result = `${DEFAULT_CDN_URL}sitegen/${env}/FO/`;\n if (flow) {\n result = `${result}${flow}`;\n }\n return result;\n};\n\nexport const formCDNCachedTranslationFileUrl = ({ flow }: { flow: string }): string => {\n let result = `${DEFAULT_CDN_URL}sitegen/oasis/translations/${flow}.json`;\n return result;\n};\n","import { IWebsiteSubdomain } from '../types';\nimport {\n formWebsiteSubdomain,\n FREE_WEEKEND_DOMAIN,\n FRIENDS_REFERRAL_DOMAIN,\n IWebsiteDomain,\n PC_PROMO,\n REDEEM_DOMAIN,\n REGISTER_DOMAIN,\n STANDARD_REGISTRATION_DOMAIN,\n TWITCH_PRIME_DOMAIN\n} from './website.domains';\nimport { WEBSITE_FLOW } from './website-flow';\nimport { WIDGET_NAME } from './widgets';\n\nexport const WEBSITE_DEFAULT_ANALYTIC_NAME = 'site gen';\n\n/**\n * flow id: the name of a directory where a website is deployed during publication\n */\nexport const WEBSITES_FLOW_SUFFIX: { [key: string]: IWebsiteDomain } = {\n [WEBSITE_FLOW.BETA_REGISTRATION]: REGISTER_DOMAIN,\n [WEBSITE_FLOW.BETA_APPROVAL]: REGISTER_DOMAIN,\n [WEBSITE_FLOW.BETA_REGISTRATION_V2]: REGISTER_DOMAIN,\n [WEBSITE_FLOW.BETA_APPROVAL_V2]: REGISTER_DOMAIN,\n [WEBSITE_FLOW.BETA_GUARANTEED_ACCESS_V2]: REGISTER_DOMAIN,\n [WEBSITE_FLOW.OPEN_BETA]: REGISTER_DOMAIN,\n [WEBSITE_FLOW.ULC_REDEEM]: REDEEM_DOMAIN,\n [WEBSITE_FLOW.CF_REDEEM]: REDEEM_DOMAIN,\n [WEBSITE_FLOW.CF_REDEEM_V2]: REDEEM_DOMAIN,\n [WEBSITE_FLOW.PYC_REDEEM]: REDEEM_DOMAIN,\n [WEBSITE_FLOW.TWITCH_PRIME]: TWITCH_PRIME_DOMAIN,\n [WEBSITE_FLOW.STANDARD_REGISTRATION]: STANDARD_REGISTRATION_DOMAIN,\n [WEBSITE_FLOW.FREE_WEEKEND]: FREE_WEEKEND_DOMAIN,\n [WEBSITE_FLOW.TRIALS]: REGISTER_DOMAIN,\n [WEBSITE_FLOW.DEMO]: REGISTER_DOMAIN,\n [WEBSITE_FLOW.FRIENDS_REFERRAL]: FRIENDS_REFERRAL_DOMAIN,\n [WEBSITE_FLOW.GIVEAWAY]: REGISTER_DOMAIN,\n [WEBSITE_FLOW.PROMOTAB]: PC_PROMO\n};\n\n/**\n * flow id: widget directory in the CORE package\n */\nexport const WEBSITES_WIDGET_NAME_BY_FLOW_ID: { [key: string]: WIDGET_NAME } = {\n [WEBSITE_FLOW.BETA_REGISTRATION]: WIDGET_NAME.BETA_REGISTRATION,\n [WEBSITE_FLOW.BETA_APPROVAL]: WIDGET_NAME.BETA_APPROVAL,\n [WEBSITE_FLOW.BETA_REGISTRATION_V2]: WIDGET_NAME.BETA_REGISTRATION_V2,\n [WEBSITE_FLOW.BETA_APPROVAL_V2]: WIDGET_NAME.BETA_APPROVAL_V2,\n [WEBSITE_FLOW.BETA_GUARANTEED_ACCESS_V2]: WIDGET_NAME.BETA_GUARANTEED_ACCESS_V2,\n [WEBSITE_FLOW.OPEN_BETA]: WIDGET_NAME.OPEN_BETA,\n [WEBSITE_FLOW.ULC_REDEEM]: WIDGET_NAME.ULC_REDEEM,\n [WEBSITE_FLOW.CF_REDEEM]: WIDGET_NAME.CF_REDEEM,\n [WEBSITE_FLOW.CF_REDEEM_V2]: WIDGET_NAME.CF_REDEEM_V2,\n [WEBSITE_FLOW.PYC_REDEEM]: WIDGET_NAME.PYC_REDEEM,\n [WEBSITE_FLOW.TWITCH_PRIME]: WIDGET_NAME.TWITCH_PRIME,\n [WEBSITE_FLOW.STANDARD_REGISTRATION]: WIDGET_NAME.STANDARD_REGISTRATION,\n [WEBSITE_FLOW.FREE_WEEKEND]: WIDGET_NAME.FREE_WEEKEND,\n [WEBSITE_FLOW.TRIALS]: WIDGET_NAME.TRIALS,\n [WEBSITE_FLOW.DEMO]: WIDGET_NAME.DEMO,\n [WEBSITE_FLOW.FRIENDS_REFERRAL]: WIDGET_NAME.FRIENDS_REFERRAL,\n [WEBSITE_FLOW.GIVEAWAY]: WIDGET_NAME.GIVEAWAY,\n [WEBSITE_FLOW.PROMOTAB]: WIDGET_NAME.PROMOTAB\n};\n\nexport const WEBSITES_FLOW_ID_BY_WIDGET_NAME: { [key: string]: WEBSITE_FLOW } = {\n [WIDGET_NAME.BETA_REGISTRATION]: WEBSITE_FLOW.BETA_REGISTRATION,\n [WIDGET_NAME.BETA_APPROVAL]: WEBSITE_FLOW.BETA_APPROVAL,\n [WIDGET_NAME.BETA_REGISTRATION_V2]: WEBSITE_FLOW.BETA_REGISTRATION_V2,\n [WIDGET_NAME.BETA_APPROVAL_V2]: WEBSITE_FLOW.BETA_APPROVAL,\n [WIDGET_NAME.BETA_GUARANTEED_ACCESS_V2]: WEBSITE_FLOW.BETA_GUARANTEED_ACCESS_V2,\n [WIDGET_NAME.OPEN_BETA]: WEBSITE_FLOW.OPEN_BETA,\n [WIDGET_NAME.ULC_REDEEM]: WEBSITE_FLOW.ULC_REDEEM,\n [WIDGET_NAME.CF_REDEEM]: WEBSITE_FLOW.CF_REDEEM,\n [WIDGET_NAME.CF_REDEEM_V2]: WEBSITE_FLOW.CF_REDEEM_V2,\n [WIDGET_NAME.PYC_REDEEM]: WEBSITE_FLOW.PYC_REDEEM,\n [WIDGET_NAME.TWITCH_PRIME]: WEBSITE_FLOW.TWITCH_PRIME,\n [WIDGET_NAME.STANDARD_REGISTRATION]: WEBSITE_FLOW.STANDARD_REGISTRATION,\n [WIDGET_NAME.FREE_WEEKEND]: WEBSITE_FLOW.FREE_WEEKEND,\n [WIDGET_NAME.TRIALS]: WEBSITE_FLOW.TRIALS,\n [WIDGET_NAME.DEMO]: WEBSITE_FLOW.DEMO,\n [WIDGET_NAME.FRIENDS_REFERRAL]: WEBSITE_FLOW.FRIENDS_REFERRAL,\n [WIDGET_NAME.GIVEAWAY]: WEBSITE_FLOW.GIVEAWAY,\n [WIDGET_NAME.PROMOTAB]: WEBSITE_FLOW.PROMOTAB\n};\n\n/**\n * flow id: website display name\n */\nexport const WEBSITE_DISPLAY_NAME_BY_FLOW_ID: { [key: string]: string } = {\n [WEBSITE_FLOW.BETA_REGISTRATION]: 'Beta registration',\n [WEBSITE_FLOW.BETA_APPROVAL]: 'Beta approval',\n [WEBSITE_FLOW.BETA_REGISTRATION_V2]: 'Beta Registration v2',\n [WEBSITE_FLOW.BETA_APPROVAL_V2]: 'Beta approval v2',\n [WEBSITE_FLOW.BETA_GUARANTEED_ACCESS_V2]: 'Guaranteed access v2',\n [WEBSITE_FLOW.OPEN_BETA]: 'Open Beta',\n [WEBSITE_FLOW.ULC_REDEEM]: 'Platform-first Redeem',\n [WEBSITE_FLOW.CF_REDEEM]: 'Code-first Redeem',\n [WEBSITE_FLOW.CF_REDEEM_V2]: 'Code-first Redeem v2',\n [WEBSITE_FLOW.PYC_REDEEM]: 'Pick-Your-Content Redeem',\n [WEBSITE_FLOW.TWITCH_PRIME]: 'Twitch Prime',\n [WEBSITE_FLOW.STANDARD_REGISTRATION]: 'Standard registration',\n [WEBSITE_FLOW.FREE_WEEKEND]: 'Free week-end',\n [WEBSITE_FLOW.TRIALS]: 'Free trial',\n [WEBSITE_FLOW.DEMO]: 'Demo',\n [WEBSITE_FLOW.FRIENDS_REFERRAL]: 'Friends Referral',\n [WEBSITE_FLOW.GIVEAWAY]: 'Giveaway',\n [WEBSITE_FLOW.PROMOTAB]: 'Promo Tab'\n};\n\n/**\n * widget name: website display name\n */\nconst WEBSITE_DISPLAY_NAME_BY_WIDGET_NAME: { [key: string]: string } = {};\nObject.values(WEBSITE_FLOW).forEach((flowId: WEBSITE_FLOW) => {\n const widgetName: WIDGET_NAME = WEBSITES_WIDGET_NAME_BY_FLOW_ID[flowId];\n WEBSITE_DISPLAY_NAME_BY_WIDGET_NAME[widgetName] = WEBSITE_DISPLAY_NAME_BY_FLOW_ID[flowId];\n});\n\n/**\n * widget name: flow suffix\n */\nconst WEBSITE_FLOW_SUFFIX_BY_WIDGET_NAME: { [key: string]: string } = {};\nObject.values(WEBSITE_FLOW).forEach((flowId: WEBSITE_FLOW) => {\n const widgetName: WIDGET_NAME = WEBSITES_WIDGET_NAME_BY_FLOW_ID[flowId];\n WEBSITE_FLOW_SUFFIX_BY_WIDGET_NAME[widgetName] = WEBSITES_FLOW_SUFFIX[flowId];\n});\n\nexport { WEBSITE_DISPLAY_NAME_BY_WIDGET_NAME, WEBSITE_FLOW_SUFFIX_BY_WIDGET_NAME };\n\nexport const WEBSITE_FLOW_SUBDOMAIN: { [key: string]: IWebsiteSubdomain } = {\n [WEBSITES_FLOW_SUFFIX[WEBSITE_FLOW.TWITCH_PRIME]]: formWebsiteSubdomain(TWITCH_PRIME_DOMAIN),\n [WEBSITES_FLOW_SUFFIX[WEBSITE_FLOW.ULC_REDEEM]]: formWebsiteSubdomain(REDEEM_DOMAIN),\n [WEBSITES_FLOW_SUFFIX[WEBSITE_FLOW.CF_REDEEM]]: formWebsiteSubdomain(REDEEM_DOMAIN),\n [WEBSITES_FLOW_SUFFIX[WEBSITE_FLOW.CF_REDEEM_V2]]: formWebsiteSubdomain(REDEEM_DOMAIN),\n [WEBSITES_FLOW_SUFFIX[WEBSITE_FLOW.PYC_REDEEM]]: formWebsiteSubdomain(REDEEM_DOMAIN),\n [WEBSITES_FLOW_SUFFIX[WEBSITE_FLOW.FREE_WEEKEND]]: formWebsiteSubdomain(FREE_WEEKEND_DOMAIN),\n [WEBSITES_FLOW_SUFFIX[WEBSITE_FLOW.GIVEAWAY]]: formWebsiteSubdomain(REGISTER_DOMAIN),\n [WEBSITES_FLOW_SUFFIX[WEBSITE_FLOW.OPEN_BETA]]: formWebsiteSubdomain(REGISTER_DOMAIN),\n [WEBSITES_FLOW_SUFFIX[WEBSITE_FLOW.TRIALS]]: formWebsiteSubdomain(REGISTER_DOMAIN),\n [WEBSITES_FLOW_SUFFIX[WEBSITE_FLOW.DEMO]]: formWebsiteSubdomain(REGISTER_DOMAIN),\n [WEBSITES_FLOW_SUFFIX[WEBSITE_FLOW.BETA_REGISTRATION]]: formWebsiteSubdomain(REGISTER_DOMAIN),\n [WEBSITES_FLOW_SUFFIX[WEBSITE_FLOW.BETA_APPROVAL]]: formWebsiteSubdomain(REGISTER_DOMAIN),\n [WEBSITES_FLOW_SUFFIX[WEBSITE_FLOW.BETA_REGISTRATION_V2]]: formWebsiteSubdomain(REGISTER_DOMAIN),\n [WEBSITES_FLOW_SUFFIX[WEBSITE_FLOW.BETA_APPROVAL_V2]]: formWebsiteSubdomain(REGISTER_DOMAIN),\n [WEBSITES_FLOW_SUFFIX[WEBSITE_FLOW.BETA_GUARANTEED_ACCESS_V2]]: formWebsiteSubdomain(REGISTER_DOMAIN),\n [WEBSITES_FLOW_SUFFIX[WEBSITE_FLOW.PROMOTAB]]: formWebsiteSubdomain(PC_PROMO),\n [WEBSITES_FLOW_SUFFIX[WEBSITE_FLOW.FRIENDS_REFERRAL]]: formWebsiteSubdomain(FRIENDS_REFERRAL_DOMAIN)\n};\n","import { LOCALE } from './locales';\n\nexport interface IMomentSettings {\n date: string;\n time: string;\n month?: string;\n isMonthDeclensionNeeded?: boolean;\n}\n\nexport const DEFAULT_MOMENT_MONTH_FORMAT = 'MMMM';\nexport const DEFAULT_MONTH_DECLENSION = true;\n\nexport const LANGUAGES_MOMENT_FORMAT: {[key: string]: IMomentSettings} = {\n [LOCALE.AR_AE]: {\n date: 'Do',\n time: 'HH:mm'\n },\n [LOCALE.CS_CZ]: {\n date: 'Do',\n time: 'HH:mm'\n },\n [LOCALE.DA_DK]: {\n date: 'Do',\n time: 'HH:mm'\n },\n [LOCALE.DE_DE]: {\n date: 'Do',\n time: 'HH:mm'\n },\n [LOCALE.EN_AU]: {\n date: 'Do',\n time: 'hh:mm a'\n },\n [LOCALE.EN_CA]: {\n date: 'Do',\n time: 'hh:mm a'\n },\n [LOCALE.EN_GB]: {\n date: 'Do',\n time: 'HH:mm'\n },\n [LOCALE.EN_US]: {\n date: 'Do',\n time: 'hh:mm a'\n },\n [LOCALE.ES_ES]: {\n date: 'D',\n time: 'HH:mm'\n },\n [LOCALE.ES_MX]: {\n date: 'D',\n time: 'HH:mm'\n },\n [LOCALE.FI_FI]: {\n date: 'Do',\n time: 'HH:mm'\n },\n [LOCALE.FR_CA]: {\n date: 'D',\n time: 'HH:mm'\n },\n [LOCALE.FR_FR]: {\n date: 'Do',\n time: 'HH:mm'\n },\n [LOCALE.HU_HU]: {\n date: 'Do',\n time: 'HH:mm'\n },\n [LOCALE.IT_IT]: {\n date: 'D',\n time: 'HH:mm'\n },\n [LOCALE.JA_JP]: {\n date: 'Do',\n time: 'HH:mm'\n },\n [LOCALE.KO_KR]: {\n date: 'Do',\n time: 'hh:mm a'\n },\n [LOCALE.NB_NO]: {\n date: 'Do',\n time: 'HH:mm'\n },\n [LOCALE.NL_NL]: {\n date: 'D',\n time: 'HH:mm'\n },\n [LOCALE.NN_NO]: {\n date: 'Do',\n time: 'HH:mm'\n },\n [LOCALE.PL_PL]: {\n date: 'D',\n time: 'HH:mm'\n },\n [LOCALE.PT_BR]: {\n date: 'D',\n time: 'HH:mm'\n },\n [LOCALE.PT_PT]: {\n date: 'D',\n time: 'HH:mm'\n },\n [LOCALE.RU_RU]: {\n date: 'D',\n time: 'HH:mm'\n },\n [LOCALE.SV_SE]: {\n date: 'D',\n time: 'HH:mm'\n },\n [LOCALE.TH_TH]: {\n date: 'Do',\n time: 'HH:mm'\n },\n [LOCALE.TR_TR]: {\n date: 'Do',\n time: 'HH:mm'\n },\n [LOCALE.UK_UA]: {\n date: 'D',\n time: 'HH:mm'\n },\n [LOCALE.ZH_CN]: {\n date: 'Do',\n time: 'HH:mm',\n month: 'MMM'\n },\n [LOCALE.ZH_TW]: {\n date: 'Do',\n time: 'HH:mm',\n month: 'MMM'\n }\n};\n","import { isUndefined } from 'lodash';\n\nimport {\n DEFAULT_MOMENT_MONTH_FORMAT,\n DEFAULT_MONTH_DECLENSION,\n IMomentSettings,\n LANGUAGES_MOMENT_FORMAT\n} from './moment';\n\nimport { LOCALE } from './locales';\nimport { IAvailableLanguages, LANGUAGE_REGION, LANGUAGE_REGION as REGION } from './language-regions';\n\n// TODO: in case of extending, consider to use https://www.npmjs.com/package/language-tags or other data libs\n/* eslint-disable max-len */\nexport const LANGUAGES_DATA = [\n { languageVariantTag: LOCALE.AR_AE, languageCode: 'ar', region: REGION.EMEA, languageVariantCode: 'ARA', languageName: 'عربى' },\n { languageVariantTag: LOCALE.CS_CZ, languageCode: 'cs', region: REGION.EMEA, languageVariantCode: 'CZE', languageName: 'Česky' },\n { languageVariantTag: LOCALE.DA_DK, languageCode: 'da', region: REGION.EMEA, languageVariantCode: 'DAN', languageName: 'Dansk' },\n { languageVariantTag: LOCALE.DE_DE, languageCode: 'de', region: REGION.EMEA, languageVariantCode: 'GER', languageName: 'Deutsch' },\n { languageVariantTag: LOCALE.EN_AU, languageCode: 'en', region: REGION.EMEA, languageVariantCode: 'AUS', languageName: 'English (Australia)' },\n { languageVariantTag: LOCALE.EN_CA, languageCode: 'en', region: REGION.NCSA, languageVariantCode: 'CAE', languageName: 'English (Canada)' },\n { languageVariantTag: LOCALE.EN_GB, languageCode: 'en', region: REGION.EMEA, languageVariantCode: 'ENG', languageName: 'English' },\n { languageVariantTag: LOCALE.EN_US, languageCode: 'en', region: REGION.NCSA, languageVariantCode: 'AME', languageName: 'English (US)' },\n { languageVariantTag: LOCALE.ES_ES, languageCode: 'es', region: REGION.EMEA, languageVariantCode: 'SPA', languageName: 'Español' },\n { languageVariantTag: LOCALE.ES_MX, languageCode: 'es', region: REGION.NCSA, languageVariantCode: 'MEX', languageName: 'Español (México)' },\n { languageVariantTag: LOCALE.FI_FI, languageCode: 'fi', region: REGION.EMEA, languageVariantCode: 'FIN', languageName: 'Suomi' },\n { languageVariantTag: LOCALE.FR_CA, languageCode: 'fr', region: REGION.NCSA, languageVariantCode: 'CAF', languageName: 'Français (Canada)' },\n { languageVariantTag: LOCALE.FR_FR, languageCode: 'fr', region: REGION.EMEA, languageVariantCode: 'FRE', languageName: 'Français' },\n { languageVariantTag: LOCALE.HU_HU, languageCode: 'hu', region: REGION.EMEA, languageVariantCode: 'HUN', languageName: 'Magyar' },\n { languageVariantTag: LOCALE.IT_IT, languageCode: 'it', region: REGION.EMEA, languageVariantCode: 'ITA', languageName: 'Italiano' },\n { languageVariantTag: LOCALE.JA_JP, languageCode: 'ja', region: REGION.EMEA, languageVariantCode: 'JPN', languageName: '日本語' },\n { languageVariantTag: LOCALE.KO_KR, languageCode: 'ko', region: REGION.EMEA, languageVariantCode: 'KOR', languageName: '한국어' },\n { languageVariantTag: LOCALE.NB_NO, languageCode: 'nb', region: REGION.EMEA, languageVariantCode: 'NBO', languageName: 'Norsk (Bokmål)' },\n { languageVariantTag: LOCALE.NL_NL, languageCode: 'nl', region: REGION.EMEA, languageVariantCode: 'DUT', languageName: 'Nederlands' },\n { languageVariantTag: LOCALE.NN_NO, languageCode: 'nn', region: REGION.EMEA, languageVariantCode: 'NNO', languageName: 'Norsk (Nynorsk)' },\n { languageVariantTag: LOCALE.PL_PL, languageCode: 'pl', region: REGION.EMEA, languageVariantCode: 'POL', languageName: 'Polski' },\n { languageVariantTag: LOCALE.PT_BR, languageCode: 'pt', region: REGION.NCSA, languageVariantCode: 'BRA', languageName: 'Português (Brasil)' },\n { languageVariantTag: LOCALE.PT_PT, languageCode: 'pt', region: REGION.EMEA, languageVariantCode: 'POR', languageName: 'Português' },\n { languageVariantTag: LOCALE.RU_RU, languageCode: 'ru', region: REGION.EMEA, languageVariantCode: 'RUS', languageName: 'Pусский' },\n { languageVariantTag: LOCALE.SV_SE, languageCode: 'sv', region: REGION.EMEA, languageVariantCode: 'SWE', languageName: 'Svenska' },\n { languageVariantTag: LOCALE.TH_TH, languageCode: 'th', region: REGION.EMEA, languageVariantCode: 'THA', languageName: 'ไทย' },\n { languageVariantTag: LOCALE.TR_TR, languageCode: 'tr', region: REGION.EMEA, languageVariantCode: 'TUR', languageName: 'Türkçe' },\n { languageVariantTag: LOCALE.UK_UA, languageCode: 'uk', region: REGION.EMEA, languageVariantCode: 'UKR', languageName: 'Українська' },\n { languageVariantTag: LOCALE.ZH_CN, languageCode: 'zh', region: REGION.EMEA, languageVariantCode: 'CHS', languageName: '简体中文' },\n { languageVariantTag: LOCALE.ZH_TW, languageCode: 'zh', region: REGION.EMEA, languageVariantCode: 'CHT', languageName: '繁體中文' }\n];\n\n/** Promo tabs have different available sets locales per region */\nexport const PROMOTAB_LANGUAGES = {\n [REGION.NCSA]: [LOCALE.EN_CA, LOCALE.EN_US, LOCALE.ES_MX, LOCALE.PT_BR],\n [REGION.EMEA]: [\n LOCALE.CS_CZ, LOCALE.DA_DK, LOCALE.DE_DE, LOCALE.EN_GB, LOCALE.ES_ES, LOCALE.FI_FI, LOCALE.FR_FR, LOCALE.HU_HU, LOCALE.IT_IT,\n LOCALE.JA_JP, LOCALE.KO_KR, LOCALE.NB_NO, LOCALE.NL_NL, LOCALE.PL_PL, LOCALE.PT_PT, LOCALE.RU_RU, LOCALE.SV_SE, LOCALE.TR_TR,\n LOCALE.ZH_CN, LOCALE.ZH_TW, LOCALE.TH_TH\n ]\n};\n\nexport const getRegionLanguageTags = (region: LANGUAGE_REGION): string[] => {\n return LANGUAGES_DATA.filter(language => language.region === region).map(language => language.languageVariantTag);\n};\nexport const EMEALanguages = getRegionLanguageTags(LANGUAGE_REGION.EMEA);\nexport const NCSALanguages = getRegionLanguageTags(LANGUAGE_REGION.NCSA);\n\nexport const ALL_DEFAULT_LANGUAGES: IAvailableLanguages = {\n [LANGUAGE_REGION.EMEA]: EMEALanguages,\n [LANGUAGE_REGION.NCSA]: NCSALanguages\n};\n\n/** Friends Referral sites have different initial locales */\nexport const FRIENDS_REFERRAL_DEFAULT_LANGUAGES: IAvailableLanguages = {\n [REGION.NCSA]: [LOCALE.EN_US, LOCALE.FR_CA, LOCALE.ES_MX, LOCALE.PT_BR],\n [REGION.EMEA]: [\n LOCALE.AR_AE, LOCALE.DE_DE, LOCALE.EN_GB, LOCALE.ES_ES, LOCALE.FR_FR, LOCALE.IT_IT,\n LOCALE.JA_JP, LOCALE.KO_KR, LOCALE.PL_PL, LOCALE.RU_RU, LOCALE.ZH_TW,\n ]\n};\n\n/*\n * 'ubisoft language variant code' : 'language variant tag'\n */\nexport const UBISOFT_LANGUAGES_MAP = LANGUAGES_DATA.reduce((result, item) => {\n result[item.languageVariantCode] = item.languageVariantTag;\n return result;\n}, {});\n\n/*\n * 'language variant tag': 'language code (iso 639-1)'\n */\nexport const LANGUAGES_MAP = LANGUAGES_DATA.reduce((result, item) => {\n result[item.languageVariantTag] = item.languageCode;\n return result;\n}, {});\n\n/*\n * 'language variant tag': 'language name (human readable)'\n */\nexport const LANGUAGE_NAMES_MAP = LANGUAGES_DATA.reduce((result, item) => {\n result[item.languageVariantTag] = item.languageName;\n return result;\n}, {});\n\n/*\n * 'language variant tag': 'language region'\n */\nexport const LANGUAGE_TO_REGION_MAP = LANGUAGES_DATA.reduce((result, item) => {\n result[item.languageVariantTag] = item.region;\n return result;\n}, {});\n\n/*\n * In case Moment doesn't understand locales in the format such as 'en-GB',\n * it will get the locale format by 'language code', such as 'en'.\n *\n * @returns\n * 'language code': 'moment format'\n * 'locale': 'moment format'\n * */\nexport const LANGUAGE_FORMAT_MAP: {[key: string]: IMomentSettings} = Object.entries(LANGUAGES_MOMENT_FORMAT)\n .reduce((result, [localeKey, momentFormat]) => {\n if (!momentFormat.month) {\n momentFormat.month = DEFAULT_MOMENT_MONTH_FORMAT;\n }\n\n if (isUndefined(momentFormat.isMonthDeclensionNeeded)) {\n momentFormat.isMonthDeclensionNeeded = DEFAULT_MONTH_DECLENSION;\n }\n\n const languageCode = LANGUAGES_MAP[localeKey];\n result[localeKey] = result[languageCode] = momentFormat;\n return result;\n }, {});\n\nexport default LANGUAGES_DATA;\n","import { LOCALE } from './locales';\n\nexport enum LANGUAGE_REGION {\n EMEA = 'EMEA',\n NCSA = 'NCSA'\n}\n\nexport const REGION_TO_DEFAULT_LANGUAGE = {\n [LANGUAGE_REGION.EMEA]: LOCALE.EN_GB,\n [LANGUAGE_REGION.NCSA]: LOCALE.EN_US\n};\n\nexport type IAvailableLanguages = { [key in LANGUAGE_REGION]: string[] };\n","export enum LOCALE {\n EN_GB = 'en-GB',\n EN_CA = 'en-CA',\n EN_AU = 'en-AU',\n EN_US = 'en-US',\n FR_FR = 'fr-FR',\n FR_CA = 'fr-CA',\n ES_ES = 'es-ES',\n ES_MX = 'es-MX',\n PT_PT = 'pt-PT',\n PT_BR = 'pt-BR',\n ZH_CN = 'zh-CN',\n ZH_TW = 'zh-TW',\n NB_NO = 'nb-NO',\n DA_DK = 'da-DK',\n DE_DE = 'de-DE',\n FI_FI = 'fi-FI',\n HU_HU = 'hu-HU',\n IT_IT = 'it-IT',\n NL_NL = 'nl-NL',\n PL_PL = 'pl-PL',\n RU_RU = 'ru-RU',\n SV_SE = 'sv-SE',\n TR_TR = 'tr-TR',\n UK_UA = 'uk-UA',\n AR_AE = 'ar-AE',\n JA_JP = 'ja-JP',\n KO_KR = 'ko-KR',\n TH_TH = 'th-TH',\n CS_CZ = 'cs-CZ',\n NN_NO = 'nn-NO'\n}\n\n/** Locale order for operations like \"Text Export\" */\nexport const LOCALE_ORDER: { readonly [locale: string]: number } = [\n LOCALE.EN_GB, LOCALE.EN_US, LOCALE.EN_CA, LOCALE.EN_AU, LOCALE.FR_FR, LOCALE.FR_CA, LOCALE.ES_ES,\n LOCALE.ES_MX, LOCALE.PT_PT, LOCALE.PT_BR, LOCALE.DE_DE, LOCALE.IT_IT, LOCALE.NL_NL, LOCALE.PL_PL,\n LOCALE.RU_RU, LOCALE.CS_CZ, LOCALE.HU_HU, LOCALE.DA_DK, LOCALE.SV_SE, LOCALE.FI_FI, LOCALE.NB_NO,\n LOCALE.NN_NO, LOCALE.TR_TR, LOCALE.UK_UA, LOCALE.JA_JP, LOCALE.KO_KR, LOCALE.ZH_CN, LOCALE.ZH_TW,\n LOCALE.TH_TH, LOCALE.AR_AE\n].reduce((result: object, locale: LOCALE, index: number): object => ({ ...result, [locale]: index }), {});\n\n/** Sort output of operations like \"Text Export\" based on \"Text Import\" spec */\nexport const sortLocalesByOrder = (locales: LOCALE[]): LOCALE[] => {\n const byOrder = (a: LOCALE, b: LOCALE): number => {\n return LOCALE_ORDER[a] - LOCALE_ORDER[b];\n };\n\n return locales.sort(byOrder);\n};\n","export enum LOCATION_REGION {\n EMEA = 'EMEA',\n NCSA = 'NCSA',\n MENA = 'MENA',\n ANZ = 'ANZ',\n EE = 'easternEurope',\n CN = 'china',\n RU = 'russia',\n JP = 'japan',\n FR = 'france'\n}\n\nexport interface ICountry {\n code: string;\n name: string;\n region?: string;\n subregion?: string;\n}\n\nexport enum COUNTRY {\n // --- NCSA Region ---\n AI = 'Anguilla',\n AG = 'Antigua and Barbuda',\n AR = 'Argentina',\n AQ = 'Antarctica',\n AW = 'Aruba',\n BS = 'Bahamas',\n BB = 'Barbados',\n BZ = 'Belize',\n BM = 'Bermuda',\n BO = 'Bolivia (Plurinational State of)',\n BQ = 'Bonaire, Sint Eustatius and Saba',\n BR = 'Brazil',\n CA = 'Canada',\n KY = 'Cayman Islands',\n CL = 'Chile',\n CO = 'Colombia',\n CR = 'Costa Rica',\n CU = 'Cuba',\n CX = 'Christmas Island',\n CW = 'Curaçao',\n DM = 'Dominica',\n DO = 'Dominican Republic',\n EC = 'Ecuador',\n SV = 'El Salvador',\n GF = 'French Guiana',\n GD = 'Grenada',\n GP = 'Guadeloupe',\n GT = 'Guatemala',\n GY = 'Guyana',\n HT = 'Haiti',\n HN = 'Honduras',\n HM = 'Heard and McDonald Islands',\n JM = 'Jamaica',\n MQ = 'Martinique',\n MX = 'Mexico',\n MS = 'Montserrat',\n NI = 'Nicaragua',\n PA = 'Panama',\n PY = 'Paraguay',\n PE = 'Peru',\n PR = 'Puerto Rico',\n BL = 'Saint Barthélemy',\n KN = 'Saint Kitts And Nevis',\n LC = 'Saint Lucia',\n MF = 'Saint Martin',\n PM = 'Saint Pierre and Miquelon',\n VC = 'Saint Vincent and The Grenadines',\n SX = 'Sint Maarten (Dutch part)',\n SR = 'Suriname',\n TT = 'Trinidad and Tobago',\n TC = 'Turks and Caicos Islands',\n TF = 'French Southern and Antarctic Lands',\n US = 'United States',\n UY = 'Uruguay',\n VE = 'Venezuela',\n VG = 'Virgin Islands (British)',\n VI = 'Virgin Islands (U.S.)',\n // --- EMEA Region ---\n AF = 'Afghanistan',\n AX = 'Åland Islands',\n AL = 'Albania',\n DZ = 'Algeria',\n AD = 'Andorra',\n AO = 'Angola',\n AM = 'Armenia',\n AT = 'Austria',\n AZ = 'Azerbaijan',\n BH = 'Bahrain',\n BY = 'Belarus',\n BE = 'Belgium',\n BJ = 'Benin',\n BA = 'Bosnia and Herzegovina',\n BW = 'Botswana',\n BV = 'Bouvet Island',\n BG = 'Bulgaria',\n BF = 'Burkina Faso',\n BI = 'Burundi',\n CM = 'Cameroon',\n CV = 'Cabo Verde',\n CF = 'Central African Republic',\n TD = 'Chad',\n KM = 'Comoros',\n CD = 'Congo (Democratic Republic of the)',\n CG = 'Congo',\n CI = 'Côte d’Ivoire',\n HR = 'Croatia',\n CY = 'Cyprus',\n CZ = 'Czech Republic',\n DK = 'Denmark',\n DJ = 'Djibouti',\n EG = 'Egypt',\n GQ = 'Equatorial Guinea',\n ER = 'Eritrea',\n EE = 'Estonia',\n ET = 'Ethiopia',\n FK = 'Falkland Islands',\n FO = 'Faroe Islands',\n FI = 'Finland',\n GA = 'Gabon',\n GM = 'Gambia',\n GE = 'Georgia',\n DE = 'Germany',\n GH = 'Ghana',\n GI = 'Gibraltar',\n GR = 'Greece',\n GL = 'Greenland',\n GG = 'Guernsey',\n GN = 'Guinea',\n GW = 'Guinea-Bissau',\n VA = 'Vatican City',\n HU = 'Hungary',\n IS = 'Iceland',\n IR = 'Iran',\n IQ = 'Iraq',\n IE = 'Ireland',\n IM = 'Isle of Man',\n IL = 'Israel',\n IT = 'Italy',\n IO = 'British Indian Ocean Territory',\n JE = 'Jersey',\n JP = 'Japan',\n JO = 'Jordan',\n KZ = 'Kazakhstan',\n KE = 'Kenya',\n KV = 'Korea (Democratic People’s Republic of)',\n KR = 'Korea (Republic of)',\n KW = 'Kuwait',\n KG = 'Kyrgyzstan',\n LV = 'Latvia',\n LB = 'Lebanon',\n LS = 'Lesotho',\n LR = 'Liberia',\n LY = 'Libya',\n LI = 'Liechtenstein',\n LT = 'Lithuania',\n LU = 'Luxembourg',\n MK = 'Macedonia',\n MG = 'Madagascar',\n MW = 'Malawi',\n ML = 'Mali',\n MT = 'Malta',\n MR = 'Mauritania',\n MU = 'Mauritius',\n YT = 'Mayotte',\n MD = 'Moldova',\n MC = 'Monaco',\n ME = 'Montenegro',\n MA = 'Morocco',\n MZ = 'Mozambique',\n NA = 'Namibia',\n NL = 'Netherlands',\n NE = 'Niger',\n NG = 'Nigeria',\n NO = 'Norway',\n OM = 'Oman',\n PS = 'Palestine',\n PL = 'Poland',\n PT = 'Portugal',\n QA = 'Qatar',\n RE = 'Réunion',\n RO = 'Romania',\n RU = 'Russia',\n RW = 'Rwanda',\n SH = 'Saint Helena',\n SM = 'San Marino',\n ST = 'Sao Tome and Principe',\n SA = 'Saudi Arabia',\n SN = 'Senegal',\n RS = 'Serbia',\n SC = 'Seychelles',\n SL = 'Sierra Leone',\n SK = 'Slovakia',\n SI = 'Slovenia',\n SO = 'Somalia',\n ZA = 'South Africa',\n GS = 'South Georgia and the South Sandwich Islands',\n ES = 'Spain',\n SD = 'Sudan',\n SJ = 'Svalbard',\n SZ = 'Swaziland',\n SE = 'Sweden',\n CH = 'Switzerland',\n SY = 'Syria',\n TZ = 'Tanzania',\n TG = 'Togo',\n TN = 'Tunisia',\n TR = 'Turkey',\n TW = 'Taiwan',\n TJ = 'Tajikistan',\n TH = 'Thailand',\n TM = 'Turkmenistan',\n UG = 'Uganda',\n UZ = 'Uzbekistan',\n UA = 'Ukraine',\n AE = 'United Arab Emirates',\n GB = 'United Kingdom',\n EH = 'Western Sahara',\n YE = 'Yemen',\n ZM = 'Zambia',\n ZW = 'Zimbabwe',\n // --- ANZ (Australia + New Zealand) Region ---\n AU = 'Australia',\n NZ = 'New Zealand',\n AS = 'American Samoa',\n CK = 'Cook Islands',\n FJ = 'Fiji',\n FM = 'Micronesia, Federal States of',\n GU = 'Guam',\n KI = 'Kiribati',\n MH = 'Marshall Islands',\n MP = 'Northern Mariana Islands',\n NC = 'New Caledonia',\n NF = 'Norfolk Island',\n NR = 'Nauru',\n NU = 'Niue',\n PF = 'French Polynesia',\n PG = 'Papua New Guinea',\n PN = 'Pitcairn',\n PW = 'Palau',\n SB = 'Solomon Islands',\n TK = 'Tokelau',\n TO = 'Tonga',\n TV = 'Tuvalu',\n UM = 'United States Minor Outlying Islands',\n VU = 'Vanuatu',\n WF = 'Wallis and Futuna',\n WS = 'Samoa',\n // --- CN (China) Region ---\n CN = 'China',\n // --- FR (France) Region ---\n FR = 'France'\n}\n\nexport const COUNTRIES: ICountry[] = [\n { name: 'Afghanistan', code: 'AF', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Åland Islands', code: 'AX', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Albania', code: 'AL', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Algeria', code: 'DZ', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Andorra', code: 'AD', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Angola', code: 'AO', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Armenia', code: 'AM', subregion: '', region: LOCATION_REGION.EE },\n { name: 'Austria', code: 'AT', subregion: 'Central-West Europe', region: LOCATION_REGION.EMEA },\n { name: 'Australia', code: 'AU', subregion: '' },\n { name: 'Azerbaijan', code: 'AZ', subregion: '', region: LOCATION_REGION.EE },\n { name: 'Bahrain', code: 'BH', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Belarus', code: 'BY', subregion: '', region: LOCATION_REGION.EE },\n { name: 'Belgium', code: 'BE', subregion: 'West Europe', region: LOCATION_REGION.EMEA },\n { name: 'Benin', code: 'BJ', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Bosnia and Herzegovina', code: 'BA', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Botswana', code: 'BW', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Bouvet Island', code: 'BV', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Bulgaria', code: 'BG', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Burkina Faso', code: 'BF', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Burundi', code: 'BI', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Cameroon', code: 'CM', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Cabo Verde', code: 'CV', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Central African Republic', code: 'CF', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Chad', code: 'TD', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'China', code: 'CN', subregion: '', region: LOCATION_REGION.CN },\n { name: 'Comoros', code: 'KM', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Congo (Democratic Republic of the)', code: 'CD', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Congo', code: 'CG', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Côte d’Ivoire', code: 'CI', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Croatia', code: 'HR', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Cyprus', code: 'CY', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Czech Republic', code: 'CZ', subregion: 'Central-East Europe', region: LOCATION_REGION.EMEA },\n { name: 'Denmark', code: 'DK', subregion: 'North West Europe', region: LOCATION_REGION.EMEA },\n { name: 'Djibouti', code: 'DJ', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Egypt', code: 'EG', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Equatorial Guinea', code: 'GQ', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Eritrea', code: 'ER', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Estonia', code: 'EE', subregion: 'North East Europe', region: LOCATION_REGION.EMEA },\n { name: 'Ethiopia', code: 'ET', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Falkland Islands', code: 'FK', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Faroe Islands', code: 'FO', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Finland', code: 'FI', subregion: 'North West Europe', region: LOCATION_REGION.EMEA },\n { name: 'France', code: 'FR', subregion: '', region: LOCATION_REGION.FR },\n { name: 'Gabon', code: 'GA', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Gambia', code: 'GM', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Georgia', code: 'GE', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Germany', code: 'DE', subregion: 'Central-West Europe', region: LOCATION_REGION.EMEA },\n { name: 'Ghana', code: 'GH', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Gibraltar', code: 'GI', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Greece', code: 'GR', subregion: 'South West Europe', region: LOCATION_REGION.EMEA },\n { name: 'Greenland', code: 'GL', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Guernsey', code: 'GG', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Guinea', code: 'GN', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Guinea-Bissau', code: 'GW', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Vatican City', code: 'VA', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Hungary', code: 'HU', subregion: 'Central-East Europe', region: LOCATION_REGION.EMEA },\n { name: 'Iceland', code: 'IS', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Iran', code: 'IR', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Iraq', code: 'IQ', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Ireland', code: 'IE', subregion: 'West Europe', region: LOCATION_REGION.EMEA },\n { name: 'Isle of Man', code: 'IM', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Israel', code: 'IL', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Italy', code: 'IT', subregion: 'South West Europe', region: LOCATION_REGION.EMEA },\n { name: 'Jersey', code: 'JE', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Jordan', code: 'JO', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Japan', code: 'JP', subregion: '', region: LOCATION_REGION.JP },\n { name: 'Kazakhstan', code: 'KZ', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Kenya', code: 'KE', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Korea (Democratic People’s Republic of)', code: 'KV', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Korea (Republic of)', code: 'KR', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Kuwait', code: 'KW', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Kyrgyzstan', code: 'KG', subregion: '', region: LOCATION_REGION.EE },\n { name: 'Latvia', code: 'LV', subregion: 'North East Europe', region: LOCATION_REGION.EMEA },\n { name: 'Lebanon', code: 'LB', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Lesotho', code: 'LS', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Liberia', code: 'LR', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Libya', code: 'LY', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Liechtenstein', code: 'LI', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Lithuania', code: 'LT', subregion: 'North East Europe', region: LOCATION_REGION.EMEA },\n { name: 'Luxembourg', code: 'LU', subregion: 'Central-West Europe', region: LOCATION_REGION.EMEA },\n { name: 'Macedonia', code: 'MK', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Madagascar', code: 'MG', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Malawi', code: 'MW', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Mali', code: 'ML', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Malta', code: 'MT', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Mauritania', code: 'MR', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Mauritius', code: 'MU', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Mayotte', code: 'YT', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Moldova', code: 'MD', subregion: '', region: LOCATION_REGION.EE },\n { name: 'Monaco', code: 'MC', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Montenegro', code: 'ME', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Morocco', code: 'MA', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Mozambique', code: 'MZ', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Namibia', code: 'NA', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Netherlands', code: 'NL', subregion: 'West Europe', region: LOCATION_REGION.EMEA },\n { name: 'Niger', code: 'NE', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Nigeria', code: 'NG', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Norway', code: 'NO', subregion: 'North West Europe', region: LOCATION_REGION.EMEA },\n { name: 'New Zealand', code: 'NZ', subregion: '' },\n { name: 'Oman', code: 'OM', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Palestine', code: 'PS', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Poland', code: 'PL', subregion: 'Central-East Europe', region: LOCATION_REGION.EMEA },\n { name: 'Portugal', code: 'PT', subregion: 'South West Europe', region: LOCATION_REGION.EMEA },\n { name: 'Qatar', code: 'QA', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Réunion', code: 'RE', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Romania', code: 'RO', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Russia', code: 'RU', subregion: '', region: LOCATION_REGION.RU },\n { name: 'Rwanda', code: 'RW', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Saint Helena', code: 'SH', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'San Marino', code: 'SM', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Sao Tome and Principe', code: 'ST', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Saudi Arabia', code: 'SA', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Senegal', code: 'SN', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Serbia', code: 'RS', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Seychelles', code: 'SC', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Sierra Leone', code: 'SL', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Slovakia', code: 'SK', subregion: 'Central-East Europe', region: LOCATION_REGION.EMEA },\n { name: 'Slovenia', code: 'SI', subregion: 'Central-East Europe', region: LOCATION_REGION.EMEA },\n { name: 'Somalia', code: 'SO', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'South Africa', code: 'ZA', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'South Georgia and the South Sandwich Islands', code: 'GS', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Spain', code: 'ES', subregion: 'South West Europe', region: LOCATION_REGION.EMEA },\n { name: 'Sudan', code: 'SD', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Svalbard', code: 'SJ', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Swaziland', code: 'SZ', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Sweden', code: 'SE', subregion: 'North West Europe', region: LOCATION_REGION.EMEA },\n { name: 'Switzerland', code: 'CH', subregion: 'Central-West Europe', region: LOCATION_REGION.EMEA },\n { name: 'Syria', code: 'SY', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Tanzania', code: 'TZ', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Taiwan', code: 'TW', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Togo', code: 'TG', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Tunisia', code: 'TN', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Turkey', code: 'TR', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Thailand', code: 'TH', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Tajikistan', code: 'TJ', subregion: '', region: LOCATION_REGION.EE },\n { name: 'Turkmenistan', code: 'TM', subregion: '', region: LOCATION_REGION.EE },\n { name: 'Uganda', code: 'UG', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Ukraine', code: 'UA', subregion: '', region: LOCATION_REGION.EE },\n { name: 'Uzbekistan', code: 'UZ', subregion: '', region: LOCATION_REGION.EE },\n { name: 'United Arab Emirates', code: 'AE', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'United Kingdom', code: 'GB', subregion: 'West Europe', region: LOCATION_REGION.EMEA },\n { name: 'Western Sahara', code: 'EH', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Yemen', code: 'YE', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Zambia', code: 'ZM', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'Zimbabwe', code: 'ZW', subregion: '', region: LOCATION_REGION.EMEA },\n { name: 'American Samoa', code: 'AS', subregion: '' },\n { name: 'Cook Islands', code: 'CK', subregion: '' },\n { name: 'Fiji', code: 'FJ', subregion: '' },\n { name: 'Micronesia, Federal States of', code: 'FM', subregion: '' },\n { name: 'Guam', code: 'GU', subregion: '' },\n { name: 'Kiribati', code: 'KI', subregion: '' },\n { name: 'Marshall Islands', code: 'MH', subregion: '' },\n { name: 'Northern Mariana Islands', code: 'MP', subregion: '' },\n { name: 'New Caledonia', code: 'NC', subregion: '' },\n { name: 'Norfolk Island', code: 'NF', subregion: '' },\n { name: 'Nauru', code: 'NR', subregion: '' },\n { name: 'Niue', code: 'NU', subregion: '' },\n { name: 'French Polynesia', code: 'PF', subregion: '' },\n { name: 'Papua New Guinea', code: 'PG', subregion: '' },\n { name: 'Pitcairn', code: 'PN', subregion: '' },\n { name: 'Palau', code: 'PW', subregion: '' },\n { name: 'Solomon Islands', code: 'SB', subregion: '' },\n { name: 'Tokelau', code: 'TK', subregion: '' },\n { name: 'Tonga', code: 'TO', subregion: '' },\n { name: 'Tuvalu', code: 'TV', subregion: '' },\n { name: 'United States Minor Outlying Islands', code: 'UM', subregion: '' },\n { name: 'Vanuatu', code: 'VU', subregion: '' },\n { name: 'Wallis and Futuna', code: 'WF', subregion: '' },\n { name: 'Samoa', code: 'WS', subregion: '' },\n { name: 'United States', code: 'US', subregion: LOCATION_REGION.NCSA },\n { name: 'Canada', code: 'CA', subregion: LOCATION_REGION.NCSA },\n { name: 'Brazil', code: 'BR', subregion: LOCATION_REGION.NCSA },\n { name: 'Mexico', code: 'MX', subregion: LOCATION_REGION.NCSA }\n];\n\nexport const COUNTRIES_BY_REGION: { [key: string]: COUNTRY[] } = {\n [LOCATION_REGION.NCSA]: [\n COUNTRY.AI,\n COUNTRY.AG,\n COUNTRY.AR,\n COUNTRY.AW,\n COUNTRY.BS,\n COUNTRY.BB,\n COUNTRY.BZ,\n COUNTRY.BM,\n COUNTRY.BO,\n COUNTRY.BQ,\n COUNTRY.BR,\n COUNTRY.CA,\n COUNTRY.KY,\n COUNTRY.CL,\n COUNTRY.CO,\n COUNTRY.CR,\n COUNTRY.CU,\n COUNTRY.CW,\n COUNTRY.DM,\n COUNTRY.DO,\n COUNTRY.EC,\n COUNTRY.SV,\n COUNTRY.GF,\n COUNTRY.GD,\n COUNTRY.GP,\n COUNTRY.GT,\n COUNTRY.GY,\n COUNTRY.HT,\n COUNTRY.HN,\n COUNTRY.JM,\n COUNTRY.MQ,\n COUNTRY.MX,\n COUNTRY.MS,\n COUNTRY.NI,\n COUNTRY.PA,\n COUNTRY.PY,\n COUNTRY.PE,\n COUNTRY.PR,\n COUNTRY.BL,\n COUNTRY.KN,\n COUNTRY.LC,\n COUNTRY.MF,\n COUNTRY.PM,\n COUNTRY.VC,\n COUNTRY.SX,\n COUNTRY.SR,\n COUNTRY.TT,\n COUNTRY.TC,\n COUNTRY.US,\n COUNTRY.UY,\n COUNTRY.VE,\n COUNTRY.VG,\n COUNTRY.VI,\n ],\n [LOCATION_REGION.EMEA]: [\n COUNTRY.AF,\n COUNTRY.AX,\n COUNTRY.AL,\n COUNTRY.DZ,\n COUNTRY.AD,\n COUNTRY.AO,\n COUNTRY.AT,\n COUNTRY.BH,\n COUNTRY.BE,\n COUNTRY.BJ,\n COUNTRY.BA,\n COUNTRY.BW,\n COUNTRY.BV,\n COUNTRY.BG,\n COUNTRY.BF,\n COUNTRY.BI,\n COUNTRY.CM,\n COUNTRY.CV,\n COUNTRY.CF,\n COUNTRY.TD,\n COUNTRY.KM,\n COUNTRY.CD,\n COUNTRY.CG,\n COUNTRY.CI,\n COUNTRY.HR,\n COUNTRY.CY,\n COUNTRY.CZ,\n COUNTRY.DK,\n COUNTRY.DJ,\n COUNTRY.EG,\n COUNTRY.GQ,\n COUNTRY.ER,\n COUNTRY.EE,\n COUNTRY.ET,\n COUNTRY.FK,\n COUNTRY.FO,\n COUNTRY.FI,\n COUNTRY.GA,\n COUNTRY.GM,\n COUNTRY.GE,\n COUNTRY.DE,\n COUNTRY.GH,\n COUNTRY.GI,\n COUNTRY.GR,\n COUNTRY.GL,\n COUNTRY.GG,\n COUNTRY.GN,\n COUNTRY.GW,\n COUNTRY.VA,\n COUNTRY.HU,\n COUNTRY.IS,\n COUNTRY.IR,\n COUNTRY.IQ,\n COUNTRY.IE,\n COUNTRY.IM,\n COUNTRY.IL,\n COUNTRY.IT,\n COUNTRY.JE,\n COUNTRY.JO,\n COUNTRY.KZ,\n COUNTRY.KE,\n COUNTRY.KV,\n COUNTRY.KR,\n COUNTRY.KW,\n COUNTRY.LV,\n COUNTRY.LB,\n COUNTRY.LS,\n COUNTRY.LR,\n COUNTRY.LY,\n COUNTRY.LI,\n COUNTRY.LT,\n COUNTRY.LU,\n COUNTRY.MK,\n COUNTRY.MG,\n COUNTRY.MW,\n COUNTRY.ML,\n COUNTRY.MT,\n COUNTRY.MR,\n COUNTRY.MU,\n COUNTRY.YT,\n COUNTRY.MC,\n COUNTRY.ME,\n COUNTRY.MA,\n COUNTRY.MZ,\n COUNTRY.NA,\n COUNTRY.NL,\n COUNTRY.NE,\n COUNTRY.NG,\n COUNTRY.NO,\n COUNTRY.OM,\n COUNTRY.PS,\n COUNTRY.PL,\n COUNTRY.PT,\n COUNTRY.QA,\n COUNTRY.RE,\n COUNTRY.RO,\n COUNTRY.RW,\n COUNTRY.SH,\n COUNTRY.SM,\n COUNTRY.ST,\n COUNTRY.SA,\n COUNTRY.SN,\n COUNTRY.RS,\n COUNTRY.SC,\n COUNTRY.SL,\n COUNTRY.SK,\n COUNTRY.SI,\n COUNTRY.SO,\n COUNTRY.ZA,\n COUNTRY.GS,\n COUNTRY.ES,\n COUNTRY.SD,\n COUNTRY.SJ,\n COUNTRY.SZ,\n COUNTRY.SE,\n COUNTRY.CH,\n COUNTRY.SY,\n COUNTRY.TZ,\n COUNTRY.TG,\n COUNTRY.TN,\n COUNTRY.TR,\n COUNTRY.TH,\n COUNTRY.UG,\n COUNTRY.AE,\n COUNTRY.GB,\n COUNTRY.EH,\n COUNTRY.YE,\n COUNTRY.ZM,\n COUNTRY.ZW,\n ],\n [LOCATION_REGION.MENA]: [\n COUNTRY.BH,\n COUNTRY.CY,\n COUNTRY.EG,\n COUNTRY.IR,\n COUNTRY.IQ,\n COUNTRY.IL,\n COUNTRY.JO,\n COUNTRY.KW,\n COUNTRY.LB,\n COUNTRY.OM,\n ],\n [LOCATION_REGION.ANZ]: [\n COUNTRY.AS,\n COUNTRY.AU,\n COUNTRY.CK,\n COUNTRY.FJ,\n COUNTRY.FM,\n COUNTRY.GU,\n COUNTRY.KI,\n COUNTRY.MH,\n COUNTRY.MP,\n COUNTRY.NC,\n COUNTRY.NF,\n COUNTRY.NR,\n COUNTRY.NU,\n COUNTRY.NZ,\n COUNTRY.PF,\n COUNTRY.PG,\n COUNTRY.PN,\n COUNTRY.PW,\n COUNTRY.SB,\n COUNTRY.TK,\n COUNTRY.TO,\n COUNTRY.TV,\n COUNTRY.UM,\n COUNTRY.VU,\n COUNTRY.WF,\n COUNTRY.WS\n ],\n [LOCATION_REGION.EE]: [\n COUNTRY.UA,\n COUNTRY.AM,\n COUNTRY.AZ,\n COUNTRY.BY,\n COUNTRY.KG,\n COUNTRY.MD,\n COUNTRY.TJ,\n COUNTRY.TM,\n COUNTRY.UZ\n ],\n [LOCATION_REGION.JP]: [COUNTRY.JP],\n [LOCATION_REGION.RU]: [COUNTRY.RU],\n [LOCATION_REGION.CN]: [COUNTRY.CN],\n [LOCATION_REGION.FR]: [COUNTRY.FR]\n};\n\nexport const COUNTRIES_BY_UBI_PLUS: { [key: string]: COUNTRY[] } = {\n noUbiPlus: [\n COUNTRY.RE,\n COUNTRY.GP,\n COUNTRY.AX,\n COUNTRY.AQ,\n COUNTRY.AZ,\n COUNTRY.IO,\n COUNTRY.BV,\n COUNTRY.CX,\n COUNTRY.CK,\n COUNTRY.FO,\n COUNTRY.TF,\n COUNTRY.GH,\n COUNTRY.GI,\n COUNTRY.GL,\n COUNTRY.GG,\n COUNTRY.HM,\n COUNTRY.JE,\n COUNTRY.KZ,\n COUNTRY.KI,\n COUNTRY.KG,\n COUNTRY.MH,\n COUNTRY.MQ,\n COUNTRY.YT,\n COUNTRY.FM,\n COUNTRY.MD,\n COUNTRY.NU,\n COUNTRY.PW,\n COUNTRY.PS,\n COUNTRY.PN,\n COUNTRY.SH,\n COUNTRY.MF,\n COUNTRY.PM,\n COUNTRY.WS,\n COUNTRY.SJ,\n COUNTRY.TJ,\n COUNTRY.TK,\n COUNTRY.TO,\n COUNTRY.TM,\n COUNTRY.UA,\n COUNTRY.UZ,\n COUNTRY.WF,\n COUNTRY.TR,\n COUNTRY.CN,\n COUNTRY.JP,\n COUNTRY.KR,\n COUNTRY.RU,\n COUNTRY.AM,\n COUNTRY.BY,\n COUNTRY.IM,\n COUNTRY.BQ\n ]\n};\n\nexport const COUNTRIES_BY_AUDIENCE_TYPE: { [key: string]: COUNTRY[] } = {\n ...COUNTRIES_BY_REGION,\n ...COUNTRIES_BY_UBI_PLUS\n};\n\nexport const NO_UBI_PLUS_COUNTRIES_CODES = [\n 'RE', 'GP', 'AX', 'AQ', 'AZ', 'IO',\n 'BV', 'CX', 'CK', 'FO', 'TF', 'GH',\n 'GI', 'GL', 'GG', 'HM', 'JE', 'KZ',\n 'KI', 'KG', 'MH', 'MQ', 'YT', 'FM',\n 'MD', 'NU', 'PW', 'PS', 'PN', 'SH',\n 'MF', 'PM', 'WS', 'SJ', 'TJ', 'TK',\n 'TO', 'TM', 'UA', 'UZ', 'WF', 'TR',\n 'CN', 'JP', 'KR', 'RU', 'AM', 'BY',\n 'IM', 'BQ'\n];\n\nexport const ANZ_COUNTRIES_CODES = [\n 'AU', 'NZ', 'AS', 'CK', 'FJ',\n 'FM', 'GU', 'KI', 'MH', 'MP',\n 'NC', 'NF', 'NR', 'NU', 'PF',\n 'PG', 'PN', 'PW', 'SB', 'TK',\n 'TO', 'TV', 'UM', 'VU', 'WF', 'WS'\n];\n\nexport const EE_COUNTRIES_CODES = [\n 'UA', 'AM', 'AZ', 'BY', 'KG',\n 'MD', 'TJ', 'TM', 'UZ'\n];\n","export function delay(ms: number) {\n return new Promise(resolve => setTimeout(resolve, ms));\n}\n","import { ENV } from './environments';\n\nexport enum Regions {\n WORLD = 'WORLD',\n CHINA = 'CHINA'\n}\n\nexport const UBI_SERVICES_ENDPOINT = {\n [ENV.DEV]: 'https://uat-public-ubiservices.ubi.com',\n [ENV.PROD]: 'https://public-ubiservices.ubi.com'\n};\n\nexport const UBI_EVENTS_ENDPOINT = {\n [ENV.DEV]: 'https://uat-beta.ubi.com',\n [ENV.PROD]: 'https://beta.ubi.com'\n};\n\nexport const FRIENDS_REFERRAL_ENDPOINT = {\n [ENV.DEV]: 'https://uat-referral.ubi.com',\n [ENV.PROD]: 'https://referral.ubi.com'\n};\n\nexport const UPLAY_CLIENT_ENDPOINT = {\n [Regions.WORLD]: {\n [ENV.DEV]: 'https://uat-redeemstarter-public.ubi.com',\n [ENV.PROD]: 'https://redeemstarter-public.ubi.com'\n },\n [Regions.CHINA]: {\n [ENV.DEV]: 'https://uat-redeemstarter-public.ubi.cn',\n [ENV.PROD]: 'https://redeemstarter-public.ubi.cn'\n }\n};\n","import { ENV } from '../constants/environments';\nimport {\n UBI_EVENTS_ENDPOINT,\n UBI_SERVICES_ENDPOINT,\n FRIENDS_REFERRAL_ENDPOINT,\n UPLAY_CLIENT_ENDPOINT,\n Regions\n} from '../constants/ubi-services.constants';\n\nexport const getEnvDependentEndpoint = ({\n envName,\n source,\n countryCode\n}: {\n envName: string,\n source: Object,\n countryCode?: string\n}): string => {\n let instance = envName;\n\n if (isProd(envName)) {\n instance = ENV.PROD; // should use stable instance of API services on PROD & PREPROD\n }\n\n if (countryCode) {\n const region = checkRegions(countryCode);\n return source[region][instance] || source[region][ENV.DEV];\n }\n\n return source[instance] || source[ENV.DEV];\n};\n\nexport const getUbiServicesEndpoint = (envName: string): string => {\n return getEnvDependentEndpoint({ envName, source: UBI_SERVICES_ENDPOINT });\n};\n\nexport const getUbiEventsEndpoint = (envName: string): string => {\n return getEnvDependentEndpoint({ envName, source: UBI_EVENTS_ENDPOINT });\n};\n\nexport const getFriendsReferralEndpoint = (envName: string): string => {\n return getEnvDependentEndpoint({ envName, source: FRIENDS_REFERRAL_ENDPOINT });\n};\n\nexport const getUplayClientEndpoint = (envName: string, countryCode: string): string => {\n return getEnvDependentEndpoint({ envName, countryCode, source: UPLAY_CLIENT_ENDPOINT });\n};\n\nexport function isProd(envName: string): boolean {\n const prodOptions = {\n [ENV.PROD]: ENV.PROD,\n [ENV.PREPROD]: ENV.PREPROD\n };\n\n return prodOptions[envName] ? true : false;\n}\n\nexport const checkRegions = (countryCode: string) => {\n // check for china region\n if (countryCode === 'CN') {\n return Regions.CHINA;\n }\n\n return Regions.WORLD;\n};\n","import { WIDGET_NAME } from '../constants';\n\nexport const isBetaV2Widget = (widgetName: WIDGET_NAME) =>\n [WIDGET_NAME.BETA_REGISTRATION_V2, WIDGET_NAME.BETA_APPROVAL_V2, WIDGET_NAME.BETA_GUARANTEED_ACCESS_V2].includes(widgetName);\n\nexport const isBetaRegistrationV2Widget = (widgetName: WIDGET_NAME) =>\n widgetName === WIDGET_NAME.BETA_REGISTRATION_V2;\nexport const isBetaApprovalV2Widget = (widgetName: WIDGET_NAME) =>\n widgetName === WIDGET_NAME.BETA_APPROVAL_V2;\n\nexport const isBetaApprovalWidget = (widgetName: WIDGET_NAME) =>\n widgetName === WIDGET_NAME.BETA_APPROVAL;\n\nexport const isBetaGuaranteedAccessV2Widget = (widgetName: WIDGET_NAME) =>\n widgetName === WIDGET_NAME.BETA_GUARANTEED_ACCESS_V2;\n\nexport const isBetaRegistrationWidget = (widgetName: WIDGET_NAME) =>\n widgetName === WIDGET_NAME.BETA_REGISTRATION;\n\nexport const isRedeemV2Widget = (widgetName: WIDGET_NAME) =>\n widgetName === WIDGET_NAME.CF_REDEEM_V2;","import IConfig from '@sitegen/common/constants/config';\n\nexport const reducerHOF = (initialState: IConfig) => (state: IConfig = initialState): IConfig => {\n return state;\n};\n\nexport const reducerKey = 'config';\n\nexport default reducerHOF;\n","import IDictionaries from '@sitegen/common/localization/dictionaries';\n\nexport const reducerHOF = (initialState: IDictionaries) => (state: IDictionaries = initialState): IDictionaries => {\n return state;\n};\n\nexport const reducerKey = 'dictionaries';\n\nexport default reducerHOF;\n","import { IEmbeddedAppConfig } from '@sitegen/common/constants/config';\n\nexport const reducerHOF = (initialState: IEmbeddedAppConfig = {}) => (state: IEmbeddedAppConfig = initialState): IEmbeddedAppConfig => {\n return state;\n};\n\nexport const reducerKey = 'embeddedAppConfig';\n\nexport default reducerHOF;\n","import thunk from 'redux-thunk';\nimport { createLogger } from 'redux-logger';\nimport { combineEpics, createEpicMiddleware } from 'redux-observable';\nimport {\n createStore,\n applyMiddleware,\n combineReducers,\n compose,\n Middleware,\n Store,\n Reducer\n} from 'redux';\n\n// constants\nimport { DEV_TOOLS_CONFIG } from '@sitegen/build/config/env/dev-tools';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const createApplicationStore = (reducers: Reducer[], rootEpics: any[]): Store => {\n const middleware: Middleware[] = [thunk];\n const epicMiddleware = createEpicMiddleware();\n\n const rootReducer = combineReducers(reducers);\n\n let composeEnhancers = compose;\n\n if (DEV_TOOLS_CONFIG.REDUX_LOGGER) {\n middleware.push(\n createLogger({\n collapsed: true\n })\n );\n }\n\n if (DEV_TOOLS_CONFIG.REDUX_EXTENTION) {\n composeEnhancers = window['__REDUX_DEVTOOLS_EXTENSION_COMPOSE__'] || compose;\n }\n\n const store = createStore(rootReducer, composeEnhancers(applyMiddleware(...middleware, epicMiddleware)));\n epicMiddleware.run(combineEpics(...rootEpics));\n\n return store;\n};\n\nexport default createApplicationStore;\n","import * as React from 'react';\nimport { createRoot, Root } from 'react-dom/client';\nimport { Provider } from 'react-redux';\nimport { Store, Reducer } from 'redux';\n// types\nimport { IBootstrapAPI } from '@sitegen/common/types';\n// configs\nimport { createApplicationStore } from './store-config/store.config';\n\nexport default class BootstrapAPI implements IBootstrapAPI {\n public store: Store | null;\n public mount: (node: HTMLElement, callback?: () => void) => void;\n private mounted: boolean = false;\n\n private targetNode: HTMLElement | null;\n private root: Root | null = null;\n\n constructor(widgetConfig: IWidgetConfig) {\n this.mount = this.prepareMount(widgetConfig);\n }\n\n public unmount = () => {\n this.store = null;\n this.mounted = false;\n\n if (this.root) {\n this.root.unmount();\n this.targetNode = null;\n }\n };\n\n private prepareMount = ({ widgetsComponents, widgetsRootEpics, widgetsReducers }: IWidgetConfig) => {\n // TODO: looks like after transpiling&minification Edge v<17 loses context in resulting code making 'this'='undefined'\n // TODO: not reproducible for Edge 18, so should be deprecated in future\n const self = this;\n return (node: HTMLElement, callback?: () => void): void => {\n if (self.mounted) {\n throw new Error('Website is already mounted!');\n }\n\n self.mounted = true;\n self.targetNode = node;\n self.store = createApplicationStore(widgetsReducers, widgetsRootEpics);\n const root = createRoot(self.targetNode);\n self.root = root;\n root.render(\n \n <>{widgetsComponents}\n \n );\n if (callback) {\n callback();\n }\n };\n };\n}\n\ninterface IWidgetConfig {\n readonly widgetsComponents: JSX.Element[];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n readonly widgetsRootEpics: any[];\n readonly widgetsReducers: Reducer[];\n}\n","// constants\nimport { IS_DEVELOPMENT_MODE } from '@sitegen/build/config/env/node';\n// import { LOCAL_FO_CONFIG } from '@sitegen/build/config/fo';\n// types\nimport { IBootstrapConfig } from '@sitegen/common/constants/config';\n// services\nimport { WindowHistoryService } from 'utils/window-history.service';\nimport i18nService from 'modules/language-provider/i18n.service';\nimport { UbisoftConnectService } from 'modules/ubisoft-connect-service/service';\nimport ubisoftOverlayService from 'modules/ubisoft-overlay-service/service';\nimport { UbisoftAPIService } from 'modules/ubisoft-api';\nimport { BetaManagerAPIService } from '../widgets/beta-registration/modules/beta-manager/beta-manager-api';\nimport { FriendsReferralApiService } from '@sitegen/common/classes/friends-referral-api';\nimport { DEFAULT_LANGUAGE } from 'constants/locales';\n\n/**\n * A function to configure common-to-all-widgets services\n */\nexport const configureServices = async (\n bootstrapConfig: IBootstrapConfig,\n isPreviewMode: boolean\n): Promise => {\n WindowHistoryService.configure({ preview: isPreviewMode, mode: bootstrapConfig.mode });\n /* Return mock data from services when in preview mode. Components should not be aware of these changes */\n if (isPreviewMode) {\n ubisoftOverlayService.configureFakeAPI();\n await UbisoftAPIService.configureFakeAPI();\n await BetaManagerAPIService.configureFakeAPI();\n await FriendsReferralApiService.configureFakeAPI();\n i18nService.setCaching(false);\n }\n\n configureUbisoftConnectService(bootstrapConfig);\n await configureI18n(bootstrapConfig);\n};\n\n/**\n * Configure the i18nService based on the provided widget\n */\nconst configureI18n = async (config: IBootstrapConfig): Promise => {\n let initialTranslations = {};\n try {\n initialTranslations = await fetch(config.dictionaries[DEFAULT_LANGUAGE] ?? '');\n } finally {\n i18nService.init({\n env: config.envName,\n initialTranslations\n });\n }\n};\n\nconst getWebsiteURL = (websiteAbsolutePath: string): string => {\n return IS_DEVELOPMENT_MODE\n ? 'https://local-sitegen.ubisoft.com'// LOCAL_FO_CONFIG.WHITE_LIST_LOCAL_DOMAIN\n : websiteAbsolutePath;\n};\n\nconst configureUbisoftConnectService = (bootstrapConfig: IBootstrapConfig) => {\n UbisoftConnectService.configure({\n websiteAbsolutePath: getWebsiteURL(bootstrapConfig.websiteAbsolutePath)\n });\n};\n","import * as React from 'react';\nimport { Reducer } from 'redux';\n// reducers\nimport { ConfigReducer, DictionariesReducer, EmbeddedAppConfigReducer } from './reducers';\n// types\nimport IConfig, { IBootstrapConfig } from '@sitegen/common/constants/config';\nimport { IBootstrap, IBootstrapAPI, IBootstrapOptions } from '@sitegen/common/types';\nimport { IWidgetExports } from 'types/widgets';\n// services\nimport BootstrapAPI from './bootstrap-api.service';\nimport { configureServices } from './bootstrap-configure';\n\nimport { WIDGET_NAME, WIDGET_CONFIG, WIDGET_TYPE } from '@sitegen/common/constants';\n\nconst { reducerKey: configReducerKey, reducerHOF: configReducerHOF } = ConfigReducer;\nconst { reducerKey: dictionariesReducerKey, reducerHOF: dictionariesReducerHOF } = DictionariesReducer;\nconst { reducerKey: embeddedAppConfigReducerKey, reducerHOF: embeddedAppConfigReducerHOF } = EmbeddedAppConfigReducer;\n\nconst bootstrap: IBootstrap = async (\n bootstrapConfig: IBootstrapConfig,\n bootstrapOptions: IBootstrapOptions = {}\n): Promise => {\n const { dictionaries, ...applicationConfig } = bootstrapConfig;\n const isPreviewMode: boolean = !!bootstrapOptions.previewMode;\n\n let initialReducers: object = {\n [configReducerKey]: configReducerHOF(applicationConfig),\n [dictionariesReducerKey]: dictionariesReducerHOF(dictionaries),\n [embeddedAppConfigReducerKey]: embeddedAppConfigReducerHOF(bootstrapOptions.embeddedAppConfig)\n };\n\n const modules: IWidgetExports[] = await loadAndConfigureWidgets(applicationConfig);\n await configureServices(bootstrapConfig, isPreviewMode);\n\n /* Preparing widgets components, epics and reducers */\n const widgetsComponents: JSX.Element[] = modules.map((module, key) => );\n const widgetsRootEpics = modules.map(({ RootEpic }) => RootEpic);\n const widgetsReducers: Reducer[] = modules\n .map(({ Reducers, ReducersMock }) => (isPreviewMode ? ReducersMock : Reducers))\n .reduce((reducers, widgetReducers) => {\n return {\n ...reducers,\n ...widgetReducers\n };\n }, initialReducers) as Reducer[];\n\n return new BootstrapAPI({\n widgetsComponents,\n widgetsRootEpics,\n widgetsReducers\n });\n};\n\n/** Load widget code and perform basic configuration */\nconst loadAndConfigureWidgets = async (config: IConfig): Promise => {\n const widgets: Promise[] = [config.widgetName].map((name: WIDGET_NAME): Promise => {\n const widgetType: WIDGET_TYPE = WIDGET_CONFIG[name].widgetType;\n return import(\n /* webpackExclude: /promotab/ */\n /* webpackChunkName: \"[request]\" */ `../widgets/${widgetType}/root/index`\n );\n });\n\n const modules: IWidgetExports[] = await Promise.all(widgets);\n const configureAll: Promise[] = modules.map((module: IWidgetExports): Promise => {\n return module.configureWidget(config.widgetName);\n });\n await Promise.all(configureAll);\n\n return modules;\n};\n\nexport default bootstrap;\n","import bootstrap from './bootstrap';\n\nexport default bootstrap;\n","import { PLATFORM_TYPES } from '@sitegen/common/constants/platforms';\nimport { PLATFORM_DISPLAY_NAMES } from 'constants/platforms-display-props';\n\nexport const defaultTranslationKeyOptions = {\n gameName: 'gameName',\n GameName: 'GameName',\n PhaseName: 'PhaseName'\n};\n\nexport enum MODIFIED_TRANSLATION_KEYS_OPTION_NAMES {\n PLATFORM = 'platform'\n}\n\nexport const MODIFIED_TRANSLATION_KEYS_OPTIONS: { [key in string]: { [key2 in string]: string }} = {\n [MODIFIED_TRANSLATION_KEYS_OPTION_NAMES.PLATFORM]: {\n [PLATFORM_TYPES.PC]: PLATFORM_DISPLAY_NAMES[PLATFORM_TYPES.PC],\n [PLATFORM_TYPES.XONE]: PLATFORM_DISPLAY_NAMES[PLATFORM_TYPES.XONE],\n [PLATFORM_TYPES.PS4]: PLATFORM_DISPLAY_NAMES[PLATFORM_TYPES.PS4],\n [PLATFORM_TYPES.SWITCH]: PLATFORM_DISPLAY_NAMES[PLATFORM_TYPES.SWITCH],\n [PLATFORM_TYPES.WEB]: PLATFORM_DISPLAY_NAMES[PLATFORM_TYPES.WEB],\n [PLATFORM_TYPES.MOBILE]: PLATFORM_DISPLAY_NAMES[PLATFORM_TYPES.MOBILE],\n [PLATFORM_TYPES.IOS]: PLATFORM_DISPLAY_NAMES[PLATFORM_TYPES.IOS],\n [PLATFORM_TYPES.ANDROID]: PLATFORM_DISPLAY_NAMES[PLATFORM_TYPES.ANDROID],\n [PLATFORM_TYPES.OCULUSVR]: PLATFORM_DISPLAY_NAMES[PLATFORM_TYPES.OCULUSVR],\n [PLATFORM_TYPES.STEAMVR]: PLATFORM_DISPLAY_NAMES[PLATFORM_TYPES.STEAMVR],\n [PLATFORM_TYPES.STEAM]: PLATFORM_DISPLAY_NAMES[PLATFORM_TYPES.STEAM],\n [PLATFORM_TYPES.STADIA]: PLATFORM_DISPLAY_NAMES[PLATFORM_TYPES.STADIA],\n [PLATFORM_TYPES.EPIC]: PLATFORM_DISPLAY_NAMES[PLATFORM_TYPES.EPIC],\n [PLATFORM_TYPES.XSX]: PLATFORM_DISPLAY_NAMES[PLATFORM_TYPES.XSX],\n [PLATFORM_TYPES.PS5]: PLATFORM_DISPLAY_NAMES[PLATFORM_TYPES.PS5],\n [PLATFORM_TYPES.LUNA]: PLATFORM_DISPLAY_NAMES[PLATFORM_TYPES.LUNA],\n [PLATFORM_TYPES.AMAZON]: PLATFORM_DISPLAY_NAMES[PLATFORM_TYPES.AMAZON],\n }\n};\n","import { TOptions } from 'i18next';\nimport { merge } from 'lodash';\nimport { defaultTranslationKeyOptions } from './translate-hoc.constants';\nimport { DELIMITER } from 'constants/platform';\nimport { MODIFIED_TRANSLATION_KEYS_OPTIONS } from './translate-hoc.constants';\n\nexport const addDefaultTextKeysOptions = (translationOptions: TOptions = {}) => {\n return merge(translationOptions, defaultTranslationKeyOptions);\n};\n\nexport const modifyTranslationKeysOptions = ([name, value]: [string, string]): string[] => {\n const modifiedList = MODIFIED_TRANSLATION_KEYS_OPTIONS[name];\n\n if (modifiedList) {\n const valuesList = value.split(DELIMITER);\n const modifiedValue = valuesList.map(val => modifiedList[val] ?? val).join(DELIMITER);\n return [name, modifiedValue];\n }\n return [name, value];\n};\n","import * as React from 'react';\nimport { ReactElement } from 'react';\nimport { toPairs, fromPairs } from 'lodash';\nimport {\n withTranslation as i18nTranslate,\n WithTranslation,\n} from 'react-i18next';\nimport { TOptions } from 'i18next';\nimport { translationNameSpaces } from 'constants/app.constants';\nimport { ITranslationProps } from 'types/translation';\n\nimport './translate.styles.less';\nimport { addDefaultTextKeysOptions } from './translate-hoc.utils';\nimport { modifyTranslationKeysOptions } from './translate-hoc.utils';\n\n// Custom Subtract type\ntype Subtract = Omit;\n\n// Custom Namespace type (you can adjust this based on your needs)\ntype CustomNamespace = string | string[];\n\nexport const translate = (\n namespaces: CustomNamespace = translationNameSpaces,\n options?: TOptions & { withRef?: boolean | undefined; keyPrefix?: undefined; }\n) =>

(Component: React.ComponentType

):\nReact.ComponentType> => {\n function translateHOC(props: P) {\n const { t, ...propsWithoutT } = props;\n return React.createElement>>(\n Component, {\n ...propsWithoutT,\n /* We still might require original translation methods, when JSX element can't be used, like placeholders */\n originalTranslateKey: t,\n dangerouslyTranslateWithHTML(key: string | string[], translationOptions?: TOptions): ReactElement {\n const translationOptionsWithDefault = addDefaultTextKeysOptions(translationOptions);\n const translatedOptions = fromPairs(\n toPairs(translationOptionsWithDefault)\n .map(modifyTranslationKeysOptions)\n .map((pair) => [pair[0], t(pair[1])])\n );\n return (\n \n );\n }\n }\n );\n }\n translateHOC.displayName = Component.displayName;\n\n return i18nTranslate(namespaces, options)(translateHOC) as React.ComponentType>;\n};\n","import { TRANSLATION_NAME_SPACES } from 'modules/language-provider/i18n.constants';\n\nexport const translationNameSpaces = [\n TRANSLATION_NAME_SPACES.TRANSLATIONS,\n TRANSLATION_NAME_SPACES.FALLBACK_TRANSLATIONS\n];\n\nexport const ERROR_KEYS = {\n WIDGET_ERROR_TITLE: 'error-page__title',\n WIDGET_ERROR_MESSAGE: 'error-page__something-wrong',\n WIDGET_ERROR_NOT_ELIGIBLE: 'error-page__not-eligible',\n WIDGET_ERROR_UNDERAGE: 'error-page__underage',\n WIDGET_ERROR_INVITE_EXCEEDED_TITLE: 'error-page__invite_exceeded_title',\n WIDGET_ERROR_INVITE_EXCEEDED_DESCRIPTION: 'error-page__invite_exceeded_description'\n};\n\nexport const SUPPORT_TEXT_KEYS = {\n FAQ: 'support-text',\n FAQ_V2: 'support_contact_baseline',\n NO_FAQ: 'support-text-no-faq',\n FAQ_FORMAT: 'support-format-text'\n};\n","export const DEFAULT_LANGUAGE: string = 'en-GB';\n","import { PLATFORM_TYPES } from '@sitegen/common/constants/platforms';\n\nexport const PLATFORM_URL_PARAMETER = 'platform';\nexport const DELIMITER: string = ', ';\nexport const DELIMITER_V2: string = ',';\n\n// this platforms should be first in the list of platforms \nexport const PLATFORMS_ORDER = [PLATFORM_TYPES.PC, PLATFORM_TYPES.EPIC];\n","import { PLATFORM_TYPES } from '@sitegen/common/constants/platforms';\n\nimport { UBISOFT_CONNECT_PLATFORM_TYPES } from 'modules/ubisoft-connect-service/constants';\nimport { IPlatformDisplayProps } from 'types/platforms';\n\nexport const PLATFORM_DISPLAY_NAMES: { [key in string]: string } = {\n [PLATFORM_TYPES.PC]: 'Ubisoft Connect PC',\n [PLATFORM_TYPES.XONE]: 'Xbox One',\n [PLATFORM_TYPES.PS4]: 'PlayStation 4',\n [PLATFORM_TYPES.SWITCH]: 'Nintendo Switch',\n [PLATFORM_TYPES.WEB]: 'Web',\n [PLATFORM_TYPES.MOBILE]: 'Mobile',\n [PLATFORM_TYPES.IOS]: 'iOS',\n [PLATFORM_TYPES.ANDROID]: 'Android',\n [PLATFORM_TYPES.OCULUSVR]: 'Oculus VR',\n [PLATFORM_TYPES.STEAMVR]: 'Steam VR',\n [PLATFORM_TYPES.STEAM]: 'Steam',\n [PLATFORM_TYPES.STADIA]: 'Google Stadia',\n [PLATFORM_TYPES.EPIC]: 'Epic Games Store',\n [PLATFORM_TYPES.XSX]: 'Xbox Series X | S',\n [PLATFORM_TYPES.PS5]: 'PlayStation 5',\n [PLATFORM_TYPES.LUNA]: 'Amazon Luna',\n [PLATFORM_TYPES.AMAZON]: 'Amazon AppStore'\n};\n\nexport const PLATFORM_DISPLAY_PROPS: { [key: string]: IPlatformDisplayProps} = {\n [PLATFORM_TYPES.PC]: {\n name: PLATFORM_DISPLAY_NAMES[PLATFORM_TYPES.PC],\n isLinkable: true,\n iconClass: UBISOFT_CONNECT_PLATFORM_TYPES.UPLAY\n },\n [PLATFORM_TYPES.XONE]: {\n name: PLATFORM_DISPLAY_NAMES[PLATFORM_TYPES.XONE],\n linkAppText: 'platform-selection__link-xbox-account',\n isLinkable: true,\n iconClass: UBISOFT_CONNECT_PLATFORM_TYPES.XBL\n },\n [PLATFORM_TYPES.PS4]: {\n name: PLATFORM_DISPLAY_NAMES[PLATFORM_TYPES.PS4],\n linkAppText: 'platform-selection__link-psn-account',\n isLinkable: true,\n iconClass: UBISOFT_CONNECT_PLATFORM_TYPES.PSN\n },\n [PLATFORM_TYPES.SWITCH]: {\n name: PLATFORM_DISPLAY_NAMES[PLATFORM_TYPES.SWITCH],\n isLinkable: false,\n iconClass: UBISOFT_CONNECT_PLATFORM_TYPES.SWITCH\n },\n [PLATFORM_TYPES.WEB]: {\n name: PLATFORM_DISPLAY_NAMES[PLATFORM_TYPES.WEB],\n isLinkable: false,\n iconClass: UBISOFT_CONNECT_PLATFORM_TYPES.WEB\n },\n [PLATFORM_TYPES.MOBILE]: {\n name: PLATFORM_DISPLAY_NAMES[PLATFORM_TYPES.MOBILE],\n isLinkable: false,\n iconClass: UBISOFT_CONNECT_PLATFORM_TYPES.MOBILE\n },\n [PLATFORM_TYPES.IOS]: {\n name: PLATFORM_DISPLAY_NAMES[PLATFORM_TYPES.IOS],\n isLinkable: false,\n iconClass: UBISOFT_CONNECT_PLATFORM_TYPES.IOS\n },\n [PLATFORM_TYPES.ANDROID]: {\n name: PLATFORM_DISPLAY_NAMES[PLATFORM_TYPES.ANDROID],\n isLinkable: false,\n iconClass: UBISOFT_CONNECT_PLATFORM_TYPES.ANDROID\n },\n [PLATFORM_TYPES.OCULUSVR]: {\n name: PLATFORM_DISPLAY_NAMES[PLATFORM_TYPES.OCULUSVR],\n isLinkable: false,\n iconClass: UBISOFT_CONNECT_PLATFORM_TYPES.OCULUSVR\n },\n [PLATFORM_TYPES.STEAM]: {\n name: PLATFORM_DISPLAY_NAMES[PLATFORM_TYPES.STEAM],\n isLinkable: false,\n iconClass: String(PLATFORM_TYPES.STEAM).toLowerCase()\n },\n [PLATFORM_TYPES.STEAMVR]: {\n name: PLATFORM_DISPLAY_NAMES[PLATFORM_TYPES.STEAMVR],\n isLinkable: false,\n iconClass: UBISOFT_CONNECT_PLATFORM_TYPES.STEAMVR\n },\n [PLATFORM_TYPES.STADIA]: {\n name: PLATFORM_DISPLAY_NAMES[PLATFORM_TYPES.STADIA],\n isLinkable: true,\n iconClass: String(PLATFORM_TYPES.STADIA).toLowerCase()\n },\n [PLATFORM_TYPES.EPIC]: {\n name: PLATFORM_DISPLAY_NAMES[PLATFORM_TYPES.EPIC],\n isLinkable: false,\n iconClass: UBISOFT_CONNECT_PLATFORM_TYPES.EPIC\n },\n [PLATFORM_TYPES.XSX]: {\n name: PLATFORM_DISPLAY_NAMES[PLATFORM_TYPES.XSX],\n isLinkable: true,\n linkAppText: 'platform-selection__link-xbox-account',\n iconClass: String(PLATFORM_TYPES.XSX).toLowerCase()\n },\n [PLATFORM_TYPES.PS5]: {\n name: PLATFORM_DISPLAY_NAMES[PLATFORM_TYPES.PS5],\n isLinkable: true,\n linkAppText: 'platform-selection__link-psn-account',\n iconClass: String(PLATFORM_TYPES.PS5).toLowerCase()\n },\n [PLATFORM_TYPES.LUNA]: {\n name: PLATFORM_DISPLAY_NAMES[PLATFORM_TYPES.LUNA],\n isLinkable: false,\n iconClass: String(PLATFORM_TYPES.LUNA).toLowerCase()\n },\n [PLATFORM_TYPES.AMAZON]: {\n name: PLATFORM_DISPLAY_NAMES[PLATFORM_TYPES.AMAZON],\n isLinkable: false,\n iconClass: String(PLATFORM_TYPES.AMAZON).toLowerCase()\n }\n};\n","import { ILoginSession } from 'types/session';\nimport { LOGIN_TYPE } from 'modules/login/login.constants';\n\nexport const loginSessionMock: ILoginSession = {\n type: LOGIN_TYPE.NEW_LOGIN,\n sessionId: '740ab387-b4a5-45fd-bfae-bd61b8dbccdc',\n isUbisoftConnectAuthenticated: true,\n UbisoftConnectProfile: {\n op: 'getProfiles',\n status: 'OK',\n ref: '12f7f27b-e4ef-4a29-9fe3-a9712d0db247_530',\n user: {\n profileId: '9d7dab4d-0403-4838-9aed-10b9b77591b5',\n userId: '9d7dab4d-0403-4838-9aed-10b9b77591b5',\n platformType: 'uplay',\n idOnPlatform: '9D7DAB4D-0403-4838-9AED-10B9B77591B5',\n nameOnPlatform: 'ulgui-ubi4'\n }\n },\n UbisoftConnectProfiles: [\n {\n profileId: '9d7dab4d-0403-4838-9aed-10b9b77591b5',\n userId: '9d7dab4d-0403-4838-9aed-10b9b77591b5',\n platformType: 'uplay',\n idOnPlatform: '9D7DAB4D-0403-4838-9AED-10B9B77591B5',\n nameOnPlatform: 'ulgui-ubi4'\n },\n {\n profileId: '2b204df2-75e3-400b-bbd4-0ba28c8eae77',\n userId: '9d7dab4d-0403-4838-9aed-10b9b77591b5',\n platformType: 'psn',\n idOnPlatform: '6808430300154271139',\n nameOnPlatform: 'qwerty12345qaz'\n },\n {\n profileId: 'ba6f9c51-3a7d-4d59-9a8a-259d8f336048',\n userId: '9d7dab4d-0403-4838-9aed-10b9b77591b5',\n platformType: 'twitch',\n idOnPlatform: '145698663',\n nameOnPlatform: 'ubitestaccount2'\n },\n {\n profileId: '-----',\n userId: '-----',\n platformType: 'wrongPlatform',\n idOnPlatform: '145698663',\n nameOnPlatform: '-----'\n }\n ],\n UbisoftConnectTicket: 'ew0KICAidmVyIjogIjEiLA0KICAiYWlkIjogIjEyZjdmMjdiLWU0ZWYtNGEyOS05ZmUzLWE5NzEyZDBkYjI0NyIsDQogICJlbnYiOiAiVUFUI'\n};\n\nexport const rawUbisoftConnectProfilesMock = {\n op: 'getProfiles',\n status: 'OK',\n ref: '12******-e***-****-****-************_***',\n user: {\n profiles: [\n {\n profileId: '********-****-****-****-************',\n userId: '********-****-****-****-************',\n platformType: 'uplay',\n idOnPlatform: '********-****-****-****-************',\n nameOnPlatform: 'd*******'\n }\n ]\n }\n};\n\nexport const userTicketMock = loginSessionMock.UbisoftConnectTicket;\n","import * as React from 'react';\nimport { translate } from 'components/translate-hoc';\n\nimport Select, { CSSObjectWithLabel, StylesConfig } from 'react-select';\n\nimport { ITranslationProps } from 'types/translation';\nimport { getModeClass } from 'utils/css';\n\nimport { IDropdownField } from './fields.types';\n\ntype IDropdownFieldProps = IDropdownField & ITranslationProps;\n\ninterface IOption {\n value: string;\n label: string;\n}\n\nconst getCustomStyles = (shouldInheritStyles: boolean): StylesConfig => ({\n singleValue: (provided: CSSObjectWithLabel) => ({\n ...provided,\n color: shouldInheritStyles ? 'inherit' : 'var(--content-text-color)'\n }),\n menu: (provided: CSSObjectWithLabel) => ({\n ...provided,\n background: shouldInheritStyles ? '#1a1a1a' : 'var(--subcontent-background-color)',\n border: '1px solid #606060'\n }),\n control: (provided: CSSObjectWithLabel) => ({\n ...provided,\n backgroundColor: 'transparent',\n borderRadius: 0,\n boxShadow: 'none',\n color: shouldInheritStyles ? 'inherit' : 'var(--content-text-color)',\n borderColor: '#606060',\n ':hover': {\n ...provided[':hover'],\n borderColor: '#606060'\n }\n }),\n option: (provided: CSSObjectWithLabel, state) => ({\n ...provided,\n color: shouldInheritStyles ? '#fff' : 'var(--content-text-color)',\n backgroundColor: state.isSelected\n ? '#606060'\n : shouldInheritStyles ? '#1a1a1a' : 'var(--subcontent-background-color)',\n ':hover': {\n ...provided[':hover'],\n backgroundColor: '#606060'\n }\n })\n});\n\nexport class DropdownField extends React.PureComponent {\n public render(): JSX.Element {\n const {\n shouldInheritStyles,\n meta,\n dangerouslyTranslateWithHTML: translateKey,\n translatePrefix\n } = this.props;\n\n const dropdownClassName = getModeClass('sitegen-dropdown', shouldInheritStyles);\n const labelText: string = translateKey(this.getLabelKey());\n const isWarningVisible = meta.error && meta.submitFailed;\n const errorMessage = isWarningVisible ? translateKey(`${translatePrefix}${meta.error.message}`) : '';\n const className: string = isWarningVisible\n ? `${dropdownClassName}__select ${dropdownClassName}__select_has-warnings`\n : `${dropdownClassName}__select`;\n\n return (\n
\n
{labelText}
\n
\n \n
{errorMessage}
\n
\n
\n );\n }\n\n private setFieldInput = (option: IOption): void => {\n // @ts-ignore\n // TODO: remove ignore once issue with typings is resolved:\n // https://github.com/final-form/react-final-form/issues/441\n this.props.input.onChange(option.value);\n };\n\n private getLabelKey(): string {\n const { input, translatePrefix } = this.props;\n return `${translatePrefix}${input.name}`;\n }\n\n private getViewOptions(): IOption[] {\n const {\n fieldValue,\n optionTranslatePrefix,\n dangerouslyTranslateWithHTML: translateKey\n } = this.props;\n return fieldValue.map(\n (item: string, index: number): IOption => {\n const localizedItem = translateKey(\n `${this.getLabelKey()} ${optionTranslatePrefix}${index + 1}`,\n { defaultValue: item }\n );\n return { value: item, label: localizedItem };\n }\n );\n }\n}\n\nexport default translate()(DropdownField) as typeof DropdownField;\n","import * as React from 'react';\nimport { translate } from 'components/translate-hoc';\n\nimport { getModeClass } from 'utils/css';\nimport { ICommonFieldProps } from './fields.types';\nimport { IValidationError } from '../additional-info.types';\n\nexport class StringField extends React.Component {\n public render(): JSX.Element {\n const {\n shouldInheritStyles,\n meta,\n input,\n translatePrefix,\n dangerouslyTranslateWithHTML: translateKey\n } = this.props;\n\n const className = getModeClass('sitegen-string-field', shouldInheritStyles);\n const labelText = translateKey(this.getLabelKey());\n const metaError = meta.error as IValidationError;\n const isWarning = metaError && meta.submitFailed;\n const errorMessage = isWarning\n ? translateKey(`${translatePrefix}${metaError.message}`, { ...(metaError.data ? metaError.data : {})})\n : '';\n\n return (\n
\n
{labelText}
\n
\n \n
{errorMessage}
\n
\n
\n );\n }\n\n private getLabelKey(): string {\n const { input, translatePrefix } = this.props;\n return `${translatePrefix}${input.name}`;\n }\n}\n\nexport default translate()(StringField);\n","import * as React from 'react';\nimport { translate } from 'components/translate-hoc';\nimport { ICommonFieldProps } from './fields.types';\nimport { getModeClass } from 'utils/css';\nimport { IValidationError } from '../additional-info.types';\n\nexport const IntField: React.FC = (props: ICommonFieldProps) => {\n const {\n shouldInheritStyles,\n meta,\n input,\n translatePrefix,\n dangerouslyTranslateWithHTML: translateKey\n } = props;\n\n const className = getModeClass('sitegen-int-field', shouldInheritStyles);\n const labelText = translateKey(`${translatePrefix}${input.name}`);\n const metaError = meta.error as IValidationError;\n const isWarning = metaError && meta.submitFailed;\n const errorMessage = isWarning\n ? translateKey(`${translatePrefix}${metaError.message}`, { ...(metaError.data ? metaError.data : {})})\n : '';\n\n return (\n
\n
{labelText}
\n
\n \n
{errorMessage}
\n
\n
\n );\n};\n\nexport default translate()(IntField);\n","export const EN_US: string = 'en-US';\n\nexport enum DateFormats {\n DDMMYYYY = 'dd/MM/yyyy',\n MMDDYYYY = 'MM/dd/yyyy'\n}\n","import * as React from 'react';\nimport { translate } from 'components/translate-hoc';\nimport DatePicker from 'react-datepicker';\nimport InputMask from 'react-input-mask';\nimport 'react-datepicker/dist/react-datepicker.css';\n\nimport { getModeClass } from 'utils/css';\nimport { ICommonFieldProps } from './fields.types';\nimport { DateFormats, EN_US } from './fields.constants';\n\nexport class DateField extends React.Component {\n private onChange(year: string | number, month: string | number, date: string | number): void {\n this.props.input.onChange(`${year}-${month}-${date}`);\n }\n\n private handleInputChange = (data: Date | null): void => {\n if (!data) {\n return;\n }\n\n const year = data.getFullYear();\n const date: string | number = this.format(data.getDate());\n const month: string | number = this.format(data.getMonth() + 1);\n\n this.onChange(year, month, date);\n };\n\n private format(value: number) {\n return value < 10 ? '0' + value : value;\n }\n\n private getLabelKey(): string {\n const { translatePrefix, input } = this.props;\n return `${translatePrefix}${input.name}`;\n }\n\n private getInputMask = () => {\n const { activeLanguageCode } = this.props;\n return activeLanguageCode === EN_US ? DateFormats.MMDDYYYY : DateFormats.DDMMYYYY;\n }\n\n public render(): JSX.Element {\n const {\n dangerouslyTranslateWithHTML: translateKey,\n translatePrefix,\n input: { value },\n meta,\n shouldInheritStyles\n } = this.props;\n\n const labelText = translateKey(this.getLabelKey());\n const isWarning = meta.error && meta.submitFailed;\n const errorMessage = isWarning ? translateKey(`${translatePrefix}${meta.error.message}`) : '';\n const className = getModeClass('sitegen-date-picker', shouldInheritStyles);\n\n return (\n
\n
{labelText}
\n
\n \n }\n onChange={(date) => this.handleInputChange(date)} />\n
{errorMessage}
\n
\n
\n );\n }\n}\n\nexport default translate()(DateField);\n","import { DateField, DropdownField, IntField, StringField } from './fields';\nimport { IFieldTypes } from './additional-info.types';\n\nexport const TEXT_SUB_KEYS = {\n REQUIRED_ERROR: 'invalid-value-field-required',\n NUMBER_MIN_ERROR: 'invalid-value-min-int',\n NUMBER_MAX_ERROR: 'invalid-value-max-int',\n LENGTH_MIN_ERROR: 'invalid-value-length-min',\n LENGTH_MAX_ERROR: 'invalid-value-length-max',\n IS_NOT_NUMBER_ERROR: 'invalid-value-type-number',\n IS_NOT_DATE_ERROR: 'invalid-value-date-format',\n SUBMIT: 'submit-button'\n};\n\nexport enum FIELD_VIEW_TYPES {\n INT = 'int',\n DATE = 'date',\n STRING = 'string',\n DROPDOWN = 'dropdown'\n}\n\nexport const FIELD_VIEW_COMPONENTS: { [key: string]: IFieldTypes } = {\n [FIELD_VIEW_TYPES.INT]: IntField,\n [FIELD_VIEW_TYPES.DATE]: DateField,\n [FIELD_VIEW_TYPES.STRING]: StringField,\n [FIELD_VIEW_TYPES.DROPDOWN]: DropdownField\n};\n","import { ENV } from '@sitegen/common/constants/environments';\n\nexport const ANALYTICS_SCRIPT_URL = {\n [ENV.DEV]: 'https://ubistatic-a.ubisoft.com/0106/uat/global/tracking/analyticssdk.js',\n [ENV.PROD]: 'https://ubistatic-a.ubisoft.com/0106/prod/global/tracking/analyticssdk.js'\n};\n\nexport const SITE_CATEGORY = 'Responsive Site';\nexport const ANALYTICS_GLOBAL_NS = 'wa_data';\nexport const ANALYTICS_SDK = 'adobeAnalytics';\nexport const ANALYTICS_READY_EVENT = 'S_CODE_READY';\n\nexport enum ANALYTICS_EVENTS {\n FLOW_EVENT = 'flowevent',\n PAGE_EVENT = 'pageevent',\n CLICK_EVENT = 'clickevent',\n ERROR_EVENT = 'clickevent',\n ACCOUNT_EVENT = 'accountevent',\n}\n\nexport const ANALYTICS_ATTRIBUTES = {\n category: 'login',\n action: {\n // when user lands on a page\n signedIn: 'signed in',\n signedOut: 'signed out',\n\n // when login/log out calls\n signingIn: 'signing in',\n signingOut: 'signing out'\n }\n};\n\nexport const DEFAULT_LOCATION = 'page' as const;\n\nexport enum CATEGORY {\n DISPLAY = 'display',\n ACTION = 'action',\n INTERACTION = 'interaction'\n}\n","import { get } from 'lodash';\nimport { ActionsObservable, combineEpics, StateObservable } from 'redux-observable';\nimport { Subject } from 'rxjs/Subject';\nimport { ignoreElements, map, mergeMap } from 'rxjs/operators';\nimport { BehaviorSubject } from 'rxjs/BehaviorSubject';\n\n// services\nimport AnalyticsService from './analytics-provider.service';\n\n// types\nimport { IEpicCreatorCallback } from 'types/analytics';\nimport { IEpic } from 'types/epic';\nimport { IAction } from 'types/action';\nimport { IModule } from '@sitegen/common/types';\n\nexport const initAnalyticsObservable$: Subject = new Subject();\n\nexport const epic$ = new BehaviorSubject(combineEpics(...[]));\n\nexport const createEmptyAnalyticsEpics = (): IEpic => {\n return (action$, store) => epic$.pipe(mergeMap(epic => epic(action$, store, {})));\n};\n\nexport const loadAnalyticsEpicsAsync = (importPromise: Promise): void => {\n importPromise.then(analyticsEpics => {\n epic$.next(analyticsEpics.default);\n });\n};\n\nexport const analyticsEpicCreator = (\n types: string[],\n callback: IEpicCreatorCallback\n) => (\n action$: ActionsObservable,\n /* eslint-disable-next-line*/\n store$: StateObservable\n) =>\n action$\n .ofType(...types)\n .pipe(\n map(action => {\n callback(action, store$);\n })\n )\n .pipe(ignoreElements());\n\nexport const setLanguage = (actionTypes: string[]): IEpic =>\n analyticsEpicCreator(\n actionTypes,\n (action: IAction): void => {\n const language = get(action, 'payload.language', '');\n const country = get(action, 'payload.country', '');\n\n AnalyticsService.updateAnalyticalData({\n language,\n country,\n countryCode: country.toLowerCase()\n });\n }\n );\n\nexport const setUserAnalyticsData = (actionTypes: string[]): IEpic =>\n analyticsEpicCreator(\n actionTypes,\n (action: IAction): void => {\n const userId = get(action, 'payload.UbisoftConnectProfile.user.userId');\n\n AnalyticsService.updateAnalyticalData({\n errorType: '',\n ubisoftId: userId,\n });\n }\n );\n\n// TODO: merge with analyticLogoutEpic\nexport const cleanLoginAnalyticsData = (actionTypes: string[]): IEpic =>\n analyticsEpicCreator(\n actionTypes,\n (): void => {\n AnalyticsService.updateAnalyticalData({\n errorType: '',\n ubisoftId: '',\n });\n }\n );\n\nexport const setPlatformSelection = (actionTypes: string[]): IEpic =>\n analyticsEpicCreator(\n actionTypes,\n (action: IAction): void => {\n const selectedPlatform = get(action, 'payload.platform');\n\n AnalyticsService.updateAnalyticalData({\n platformSelection: selectedPlatform.toUpperCase(),\n errorType: ''\n });\n }\n );\n","import { isFunction } from 'lodash';\n// services\nimport { getCountryFromLanguage, getShortLanguageCode } from 'modules/language-provider/locale';\n// epics\nimport { initAnalyticsObservable$ } from './analytics-provider.epic';\n// utils\nimport { getEnvDependentEndpoint } from '@sitegen/common/utils/ubi-services';\n// constants\nimport {\n ANALYTICS_EVENTS,\n ANALYTICS_GLOBAL_NS,\n ANALYTICS_READY_EVENT,\n ANALYTICS_SCRIPT_URL,\n ANALYTICS_SDK,\n SITE_CATEGORY,\n ANALYTICS_ATTRIBUTES,\n DEFAULT_LOCATION\n} from './analytics-provider.constants';\nimport { COUNTRIES } from '@sitegen/common/localization/locations';\nimport { WEBSITE_DEFAULT_ANALYTIC_NAME } from '@sitegen/common/constants/website';\n// types\nimport {\n IAccountEventData,\n IAnalyticsConfigData,\n IAnalyticsData,\n IFlowEventData,\n IPageEventData,\n ITrackingData,\n ITrackingEvent\n} from 'types/analytics';\n\nclass Analytics {\n public isAuthenticatedUser = false;\n private isEnabled = false;\n private hasUserAllowedTracking = false;\n private flowType: string = '';\n private flowStep: string = '';\n private hostDomain: string = '';\n public platformSelection: string = '';\n private analyticsEnvironment: string;\n private trackingEventsBuffer: ITrackingEvent[] = [];\n\n public initAnalytics = (config: IAnalyticsConfigData): void => {\n if (!config.isAnalyticsEnabled) {\n return;\n }\n\n this.isEnabled = config.isAnalyticsEnabled;\n this.analyticsEnvironment = config.envName;\n this.hostDomain = window.location.hostname || '';\n this.flowType = config.flowType ?? '';\n\n window.addEventListener('message', (event: MessageEvent) => {\n if (ANALYTICS_READY_EVENT === event.data) {\n this.hasUserAllowedTracking = true;\n this.flushTrackingEventsBuffer();\n }\n });\n\n if (!config.embedded) {\n this.assignInitialData(config);\n this.injectAnalyticsScript(config.envName);\n } else {\n this.hasUserAllowedTracking = window[ANALYTICS_SDK]?.config.analyticsAccepted ?? false;\n }\n\n return initAnalyticsObservable$.next(config.isAnalyticsEnabled);\n };\n\n public sendPageEvent = (data: IAnalyticsData) => {\n this.updateAnalyticalData(data);\n\n const websiteData: IAnalyticsData = window[ANALYTICS_GLOBAL_NS];\n\n if (!this.isEnabled || !websiteData) {\n return;\n }\n\n const pageEventData = {\n appId: websiteData.appId,\n brand: websiteData.brand,\n country: websiteData.country,\n countryCode: websiteData.countryCode,\n environment: websiteData.environment,\n game: websiteData.game,\n genomeId: websiteData.genomeId,\n language: websiteData.language,\n region: websiteData.region,\n pageName: websiteData.pageName,\n siteName: websiteData.siteName,\n siteType: websiteData.siteType,\n siteSection: WEBSITE_DEFAULT_ANALYTIC_NAME,\n siteSubSection: websiteData.siteSubSection,\n ubisoftId: websiteData.ubisoftId,\n ...data\n } as IPageEventData;\n\n return this.track(ANALYTICS_EVENTS.PAGE_EVENT, pageEventData);\n };\n\n public sendAccountEvent = (data: IAccountEventData) => {\n const websiteData: IAnalyticsData = window[ANALYTICS_GLOBAL_NS];\n\n if (!websiteData || !this.isEnabled) {\n return;\n }\n\n this.track(ANALYTICS_EVENTS.ACCOUNT_EVENT, {\n ...data,\n action: [\n websiteData.siteName,\n ANALYTICS_ATTRIBUTES.category,\n data.action\n ].join(' - '),\n ubisoftId: websiteData.ubisoftId,\n });\n };\n\n public sendFlowEvent = (data: Omit): void => {\n const websiteData: IAnalyticsData = window[ANALYTICS_GLOBAL_NS];\n\n if (data.platformSelection && this.platformSelection !== data.platformSelection) {\n this.platformSelection = data.platformSelection;\n }\n\n if (data.flowStep && this.flowStep !== data.flowStep) {\n this.flowStep = data.flowStep;\n }\n\n const flowType = this.flowType ?? websiteData?.flowType;\n const flowEvent: IFlowEventData = {\n ...data,\n flowType,\n locationDetail: flowType,\n location: data.location || DEFAULT_LOCATION,\n flowStep: data?.flowStep ?? this.flowStep,\n platformSelection: this.platformSelection || websiteData?.platformSelection || '',\n hostDomain: this.hostDomain,\n };\n\n this.track(ANALYTICS_EVENTS.FLOW_EVENT, flowEvent);\n };\n\n public setPlatformSelection = (platform: string = '') => {\n this.platformSelection = platform;\n };\n\n private bufferizeTrackingEvent = (trackingEvent: ITrackingEvent): void => {\n this.trackingEventsBuffer.push(trackingEvent);\n };\n\n private flushTrackingEventsBuffer = (): void => {\n this.trackingEventsBuffer.map(trackingEvent => this.track(trackingEvent.eventName, trackingEvent.data));\n this.trackingEventsBuffer = [];\n };\n\n public updateAnalyticalData = (data: IAnalyticsData): void => {\n if (window[ANALYTICS_GLOBAL_NS]) {\n window[ANALYTICS_GLOBAL_NS] = {\n ...window[ANALYTICS_GLOBAL_NS],\n ...data\n };\n }\n };\n\n private track(eventName: ANALYTICS_EVENTS, data: ITrackingData): void {\n if (!this.hasUserAllowedTracking) {\n return this.bufferizeTrackingEvent({ eventName, data });\n }\n\n try {\n if (window[ANALYTICS_SDK] && isFunction(window[ANALYTICS_SDK].track)) {\n window[ANALYTICS_SDK].track(eventName, data);\n }\n } catch (err) {\n console.error('Analytics script failed to handle track method call', err); // eslint-disable-line no-console\n }\n }\n\n public initPrivacyOptions(): void {\n try {\n if (window[ANALYTICS_SDK] && isFunction(window[ANALYTICS_SDK].initPrivacyOptions)) {\n window[ANALYTICS_SDK].initPrivacyOptions();\n }\n } catch (err) {\n console.error('Analytics script failed to initialize privacy center', err); // eslint-disable-line no-console\n }\n }\n\n private assignInitialData = (configData: IAnalyticsConfigData): void => {\n const country = getCountryFromLanguage( { useUrl: true });\n const language = getShortLanguageCode({ useUrl: true });\n const region = COUNTRIES.find(c => c.code === country)?.region || '';\n\n window[ANALYTICS_GLOBAL_NS] = {\n siteCategory: SITE_CATEGORY,\n appId: configData.applicationId,\n brand: configData.analyticsBrand || '',\n country,\n countryCode: country.toLowerCase(),\n environment: this.analyticsEnvironment,\n game: configData.analyticsGame || '',\n genomeId: configData.genomeId || '',\n language,\n region,\n siteType: WEBSITE_DEFAULT_ANALYTIC_NAME,\n siteName: configData.analyticsSiteName || '',\n mdmBrand: configData.analyticsMDMBrandId || '',\n mdmInstallmentId: configData.analyticsMDMInstallmentId || '',\n errorType: '',\n pageName: '',\n siteSubSection: '',\n siteSection: '',\n platformSelection: '',\n ubisoftId: '',\n flowType: configData.flowType,\n flowStep: '',\n doNotTrack: 'NOT_ACTIVE',\n } as IAnalyticsData;\n };\n\n private injectAnalyticsScript = (envName: string): void => {\n const script: HTMLScriptElement = document.createElement('script');\n script.setAttribute('type', 'text/javascript');\n script.setAttribute('async', 'true');\n\n script.onload = () => {\n try {\n if (window[ANALYTICS_SDK] && isFunction(window[ANALYTICS_SDK].init)) {\n window[ANALYTICS_SDK].init(window[ANALYTICS_GLOBAL_NS]);\n }\n } catch (err) {\n console.error('Analytics script failed to handle init method call', err); // eslint-disable-line no-console\n }\n };\n\n script.setAttribute('src', getEnvDependentEndpoint({ envName, source: ANALYTICS_SCRIPT_URL }));\n\n document.body.appendChild(script);\n };\n\n public triggerOptIn = () => {\n try {\n if (window[ANALYTICS_SDK] && isFunction(window[ANALYTICS_SDK].triggerOptIn)) {\n window[ANALYTICS_SDK].triggerOptIn();\n }\n } catch (err) {\n console.error('Analytics script failed to handle triggerOptIn method call', err); // eslint-disable-line no-console\n }\n };\n\n public triggerInitialPageEvents({ userId = '', hasLoginSession }: {\n hasLoginSession: boolean,\n userId: string\n }) {\n const analyticsLoginAction = ANALYTICS_ATTRIBUTES.action;\n\n this.sendPageEvent({ pageName: 'main', siteSubSection: '', errorType: '' } as IAnalyticsData);\n userId && this.updateAnalyticalData({ ubisoftId: userId, errorType: '' });\n this.sendAccountEvent({\n action: hasLoginSession\n ? analyticsLoginAction.signedIn\n : analyticsLoginAction.signedOut,\n loggedIn: hasLoginSession.toString(),\n loggedOut: (!hasLoginSession).toString()\n });\n\n this.isAuthenticatedUser = hasLoginSession;\n }\n}\n\nconst analyticsService = new Analytics();\n\nexport default analyticsService;\n","import { get } from 'lodash';\nimport * as React from 'react';\n\n// services\nimport AnalyticsService from 'modules/analytics-provider/analytics-provider.service';\n\n// types\nimport IConfig, { WEBSITE_MODE } from '@sitegen/common/constants/config';\nimport { IAnalyticsConfigData } from 'types/analytics';\nimport { WIDGET_CONFIG } from '@sitegen/common/constants';\n\ninterface IAnalyticsProps {\n config: IConfig;\n}\n\nexport class AnalyticsProvider extends React.Component {\n public componentDidMount() {\n const { config } = this.props;\n const flowType = config.analyticsFlowType || get(\n WIDGET_CONFIG,\n `${config.widgetName}.widgetFlowType`,\n ''\n ) as string;\n const analyticsConfigData: IAnalyticsConfigData = {\n applicationId: config.applicationId,\n widgetName: config.widgetName,\n isAnalyticsEnabled: config.isAnalyticsEnabled,\n analyticsBrand: config.analyticsBrand,\n analyticsGame: config.analyticsGame,\n analyticsMDMBrandId: config.analyticsMDMBrandId,\n analyticsMDMInstallmentId: config.analyticsMDMInstallmentId,\n analyticsSiteName: config.analyticsSiteName,\n genomeId: config.genomeId,\n envName: config.envName,\n flowType,\n embedded: (config.mode === WEBSITE_MODE.EMBEDDED)\n };\n AnalyticsService.initAnalytics(analyticsConfigData);\n }\n\n public render() {\n return null;\n }\n}\n\nexport default AnalyticsProvider;\n","import AnalyticsProvider from './analytics-provider.component';\nimport Service from './analytics-provider.service';\nimport * as Constants from './analytics-provider.constants';\nimport * as Epics from './analytics-provider.epic';\n\nexport { AnalyticsProvider, Service, Constants, Epics };\n\nexport default AnalyticsProvider;\n","export const TRANSLATION_NAME_SPACES = {\n TRANSLATIONS: 'translations',\n FALLBACK_TRANSLATIONS: 'fallback-translations',\n};\n","import * as i18next from 'i18next';\nimport { initReactI18next } from 'react-i18next';\nimport * as moment from 'moment';\nimport { fetchLanguage } from './language-provider.utils';\n// constants\nimport { DEFAULT_LANGUAGE } from 'constants/locales';\nimport { TRANSLATION_NAME_SPACES } from './i18n.constants';\nimport { ENV } from '@sitegen/common/constants/environments';\n\n// types\nimport { IPromisedTranslation, ITranslation } from 'types/translation';\n\ninterface IChangeLanguage {\n languageCode: string;\n translationsPath: string | null;\n fallbackTranslationsPath: string | null;\n}\n\ninterface IInitOptions {\n readonly env: ENV;\n readonly initialTranslations: ITranslation;\n}\n\nclass I18nService {\n private i18nextInstance: i18next.i18n;\n private initialTranslations: ITranslation;\n private fallbackTranslation: ITranslation;\n private useCache: boolean = true;\n\n public async init(options: IInitOptions): Promise {\n const { initialTranslations } = options;\n\n this.initMoment();\n this.i18nextInstance = i18next.createInstance();\n this.initialTranslations = initialTranslations;\n await this.i18nextInstance.use(initReactI18next).init({\n // fallbackLng: 'en-GB', - we changed i18n strategy to fallbackNS change comment below.\n // the issue discussion https://github.com/i18next/i18next-gitbook/issues/49\n resources: {\n [DEFAULT_LANGUAGE]: {\n [TRANSLATION_NAME_SPACES.TRANSLATIONS]: initialTranslations,\n [TRANSLATION_NAME_SPACES.FALLBACK_TRANSLATIONS]: initialTranslations\n }\n },\n ns: [\n TRANSLATION_NAME_SPACES.TRANSLATIONS,\n TRANSLATION_NAME_SPACES.FALLBACK_TRANSLATIONS\n ],\n fallbackNS: [\n TRANSLATION_NAME_SPACES.TRANSLATIONS,\n TRANSLATION_NAME_SPACES.FALLBACK_TRANSLATIONS\n ],\n debug: false,\n react: {\n useSuspense: true,\n nsMode: 'fallback'\n },\n saveMissing: true,\n missingKeyHandler: (...args: any) => {\n /* Most of the time missing keys are either analytics attributes, or custom item names.\n Shouldn't be displayed in production-like environments */\n if (options.env === ENV.DEV) {\n console.warn('MISSING KEY', args);\n }\n }\n });\n this.i18nextInstance.changeLanguage(DEFAULT_LANGUAGE);\n }\n\n public async changeLanguage(options: IChangeLanguage): Promise {\n const { languageCode, translationsPath, fallbackTranslationsPath } = options;\n\n this.configureMoment(languageCode);\n\n const getTranslationsPromise = translationsPath\n ? fetchLanguage(translationsPath, this.useCache).then(response => response.data)\n : Promise.reject();\n\n const getFallbackTranslationsPromise: Promise = (() => {\n // Caching the data, in order to re-use it as custom fallback for other languages\n // The custom fallback language is the same for any language\n if (this.fallbackTranslation) {\n return Promise.resolve(this.fallbackTranslation);\n } else if (!fallbackTranslationsPath) {\n return Promise.reject();\n } else {\n return fetchLanguage(fallbackTranslationsPath).then(response => {\n this.fallbackTranslation = response.data;\n return response.data;\n });\n }\n })();\n\n /*\n * This Promise will be resolved even if all Promises was rejected.\n * */\n return new Promise((resolve, reject) => {\n Promise.all([\n getTranslationsPromise.catch(() => {\n console.warn(`Can't load translations from '${translationsPath}'`);\n }),\n getFallbackTranslationsPromise.catch(() => {\n console.warn(`Can't load fallback translations from '${fallbackTranslationsPath}'`);\n })\n ]).then(\n ([translations, fallbackTranslations]: Array): void => {\n const translationLoadedSuccessful =\n this.initialTranslations || translations || fallbackTranslations;\n\n if (translationLoadedSuccessful) {\n if (fallbackTranslations) {\n this.i18nextInstance.addResourceBundle(\n languageCode,\n TRANSLATION_NAME_SPACES.FALLBACK_TRANSLATIONS,\n fallbackTranslations\n );\n }\n if (translations) {\n this.i18nextInstance.addResourceBundle(languageCode, TRANSLATION_NAME_SPACES.TRANSLATIONS, translations);\n }\n this.i18nextInstance.changeLanguage(languageCode);\n resolve(languageCode);\n } else {\n reject();\n }\n }\n );\n });\n }\n\n /**\n * {@link https://mdc-tomcat-jira35.ubisoft.org/jira/browse/GEN-1824}\n * Configures cache mode for translation's fetching:\n * true (default) - fetch request fires only once for particular locale avoiding redundant downloads on production\n * false - cache's not used; ideal for Preview Mode when translations can be periodically refreshed\n * @access public\n * @param {boolean} useCache @default true\n */\n public setCaching(useCache: boolean = true): void {\n this.useCache = useCache;\n }\n\n private configureMoment(locale: string = DEFAULT_LANGUAGE): void {\n moment.locale(locale);\n }\n\n private initMoment(): void {\n // Determine locale, because we have different rules for them.\n moment.defineLocale('es-MX', { parentLocale: 'es' });\n moment.defineLocale('es-ES', { parentLocale: 'es' });\n }\n\n public getAnalyticsLabel(key: string): string {\n const getAnalyticsLabel = this.i18nextInstance.getFixedT(DEFAULT_LANGUAGE);\n return getAnalyticsLabel(key);\n }\n}\n\nexport const i18nService = new I18nService();\n\nexport default i18nService;\n","import axios, { AxiosResponse } from 'axios';\nimport { memoize } from 'lodash';\n\nconst memoizedGET = memoize(axios.get);\nexport const fetchLanguage = (path: string, cacheResult: boolean = true): Promise =>\n cacheResult ? memoizedGET(path) : axios.get(path);\n\nexport const resolveBasePathname = (configPath: string): string => {\n const lastIndexOfConfigPath = window.location.pathname.lastIndexOf(configPath);\n\n if (configPath === '/' || !(lastIndexOfConfigPath + 1)) {\n return '';\n } else {\n // find index of the end of last entry of configPath\n const substringIndex = lastIndexOfConfigPath + configPath.length;\n // get first part of url, for example: if configPath = 'dist', window.location.pathname = '/dist/en-GB' result will be '/dist'\n return window.location.pathname.substring(0, substringIndex);\n }\n};\n","import { LOCALE } from '@sitegen/common/localization/locales';\n\nimport { ILocaleRules } from './locale.types';\n\nexport const LANGUAGE_CODE_REGEX: RegExp = /^[a-zA-Z]{2}$/;\nexport const LOCALE_SEPARATOR: string = '-';\nexport const URL_PARAM_SEPARATOR: string = '/';\n/* Unique locale that is not supported by our application, has to be supported by Ubisoft */\nexport const EN_NORDIC: string = 'EN_NORDIC';\n\n/**\n * If language short code is present in this mapping we can guarantee complete locale from \"language\" field\n * Example: fr-guinea => fr-FR\n *\n * If there is a special language-to-locale mapping present in \"locales\" field, this is the result\n * Example: en-nz => en-AU\n *\n * If language pattern is successful for some language, first match is the result\n * Example zh-hans-hk => zh-HK\n *\n * If no special locale or pattern is found, locale from \"language\" field is a guaranteed result\n */\nexport const LANGUAGE_TO_LOCALE_MAPPING: { [langugage: string]: ILocaleRules } = {\n /* English */\n en: {\n language: LOCALE.EN_GB,\n locales: {\n 'en-au': LOCALE.EN_AU,\n 'en-nz': LOCALE.EN_AU,\n 'en-ca': LOCALE.EN_CA,\n 'en-us': LOCALE.EN_US,\n [EN_NORDIC]: EN_NORDIC\n }\n },\n\n /* French */\n fr: {\n language: LOCALE.FR_FR,\n locales: {\n 'fr-ca': LOCALE.FR_CA\n }\n },\n\n /* Spanish */\n es: {\n language: LOCALE.ES_ES,\n patterns: [\n { regex: /es-es[a-zA-Z]?/g, locale: LOCALE.ES_ES },\n { regex: /es-[a-zA-Z]+/g, locale: LOCALE.ES_MX }\n ]\n },\n ca: { language: LOCALE.ES_ES },\n\n /* Portuguese */\n pt: {\n language: LOCALE.PT_PT,\n locales: {\n 'pt-br': LOCALE.PT_BR\n }\n },\n\n /* Chinese */\n zh: {\n language: LOCALE.ZH_CN,\n patterns: [\n { regex: /zh-[a-zA-Z]*[-]?tw[a-zA-Z_]*/g, locale: LOCALE.ZH_TW },\n ]\n },\n\n /* Nordic */\n no: { language: LOCALE.NB_NO },\n nb: { language: LOCALE.NB_NO },\n\n /* Other Languages */\n da: { language: LOCALE.DA_DK },\n de: { language: LOCALE.DE_DE },\n fi: { language: LOCALE.FI_FI },\n hu: { language: LOCALE.HU_HU },\n it: { language: LOCALE.IT_IT },\n nl: { language: LOCALE.NL_NL },\n pl: { language: LOCALE.PL_PL },\n ru: { language: LOCALE.RU_RU },\n sv: { language: LOCALE.SV_SE },\n tr: { language: LOCALE.TR_TR },\n uk: { language: LOCALE.UK_UA },\n ar: { language: LOCALE.AR_AE },\n ja: { language: LOCALE.JA_JP },\n ko: { language: LOCALE.KO_KR },\n th: { language: LOCALE.TH_TH },\n cs: { language: LOCALE.CS_CZ },\n nn: { language: LOCALE.NN_NO }\n};\n\nexport const GET_LOCALE_TEXT = {\n LANGUAGE_CODE_LENGTH_ERROR: 'Error: Language Code Should Consist of Two Letters'\n};\n","import { IAvailableLanguages, LANGUAGE_REGION, REGION_TO_DEFAULT_LANGUAGE } from '@sitegen/common/localization/language-regions';\nimport { LANGUAGE_TO_REGION_MAP, LANGUAGES_MAP } from '@sitegen/common/localization';\n\nimport { IGetSafeLocaleOptions, ILocalePattern, ILocaleRules } from './locale.types';\nimport { isLocaleValid, standardizeLocale } from 'utils/localizeTime';\nimport {\n GET_LOCALE_TEXT,\n LANGUAGE_CODE_REGEX,\n LANGUAGE_TO_LOCALE_MAPPING,\n LOCALE_SEPARATOR,\n URL_PARAM_SEPARATOR\n} from './locale.constants';\nimport { DEFAULT_LANGUAGE } from 'constants/locales';\n\n/** Get safe locale based on URL, user input or browser language */\nexport function getSafeLocale(options: IGetSafeLocaleOptions = {}): string {\n let locale: string | undefined;\n if (options.useUrl) {\n locale = getLocaleFromUrl();\n }\n\n if (options.language) {\n try {\n locale = getLocaleFromLanguage(options.language);\n } catch {\n locale = undefined;\n }\n }\n\n /* Use fallback when locale has not been determined */\n if (!locale && options.useBrowserFallback) {\n locale = getLocaleFromBrowserLanguage();\n }\n\n if (locale && options.useAvailableLocales) {\n locale = filterByAvailableLocales({ locale, availableLocales: options.useAvailableLocales });\n }\n\n return locale || DEFAULT_LANGUAGE;\n}\n\n/**\n * Check if locale is present in URL and is valid\n * If locale is not valid => undefined, if valid but not present in list => DEFAULT_LANGUAGE\n */\nexport function getLocaleFromUrl(): string | undefined {\n const param: string | undefined = getUnsafeLocaleFromUrlParam();\n if (!param) {\n return;\n }\n return LANGUAGES_MAP[param as string] ? param : DEFAULT_LANGUAGE;\n}\n\n/** Get complete locale based on any input, like \"en-US\", or \"de-DE\", always return safe value or throw exception */\nexport function getLocaleFromLanguage(input: string): string {\n const language: string = input.toLowerCase();\n const languageCode: string = language.split(LOCALE_SEPARATOR)[0];\n\n /* Input string should start with 2 letters with optional info after hyphen */\n if (!languageCode || !LANGUAGE_CODE_REGEX.test(languageCode)) {\n throw new Error(GET_LOCALE_TEXT.LANGUAGE_CODE_LENGTH_ERROR);\n }\n\n /* If no mapping is provided for given language code, use English */\n if (!LANGUAGE_TO_LOCALE_MAPPING[languageCode]) {\n return DEFAULT_LANGUAGE;\n }\n\n /* If no optional info is provided use basic language mapping */\n const localeFromLanguage: string = LANGUAGE_TO_LOCALE_MAPPING[languageCode].language;\n if (LANGUAGE_CODE_REGEX.test(language)) {\n return localeFromLanguage;\n }\n\n const localeFromRule: string | undefined = checkLocaleRules(language, languageCode);\n if (localeFromRule) {\n return localeFromRule;\n }\n\n const localeFromPattern: string | undefined = checkPatternRules(language, languageCode);\n if (localeFromPattern) {\n return localeFromPattern;\n }\n\n /* Basic language mapping should always be present */\n return localeFromLanguage;\n}\n\n/** If direct locale mapping is present (case-insensitive), use it instantly */\nexport function checkLocaleRules(language: string, code: string): string | undefined {\n const rule: ILocaleRules = LANGUAGE_TO_LOCALE_MAPPING[code];\n return rule.locales && rule.locales[language] ? rule.locales[language] : undefined;\n}\n\n/** Run pattern checks in order, return locale on first match or undefined, if no matches found */\nexport function checkPatternRules(language: string, code: string): string | undefined {\n const rule: ILocaleRules = LANGUAGE_TO_LOCALE_MAPPING[code];\n const patterns: ILocalePattern[] = rule.patterns || [];\n\n for (let i: number = 0; i < patterns.length; i++) {\n const pattern: ILocalePattern = patterns[i];\n if (pattern.regex.test(language)) {\n return pattern.locale;\n }\n }\n\n return;\n}\n\n/**\n * Get valid locale param (possibly non-present in list) from URL or undefined\n * TODO: https://gitlab-ncsa.ubisoft.org/Sitegen/sitegen-main/issues/68\n */\nexport function getUnsafeLocaleFromUrlParam(): string | undefined {\n const params: string[] = window.location.pathname.split(URL_PARAM_SEPARATOR).filter((substring: string): string => substring);\n const locale: string = params[params.length - 1];\n return isLocaleValid(locale) ? standardizeLocale(locale) : undefined;\n}\n\n/** Try to get locale from browser settings */\nexport function getLocaleFromBrowserLanguage(): string | undefined {\n try {\n return getLocaleFromLanguage(window.navigator.language);\n } catch {\n return;\n }\n}\n\n/**\n * Check if locale is listed in available languages\n * If locale is valid, but not listed, use region default language\n */\nexport function filterByAvailableLocales(options: { locale: string, availableLocales: IAvailableLanguages }): string | undefined {\n const region: LANGUAGE_REGION = LANGUAGE_TO_REGION_MAP[options.locale];\n if (!region) {\n return;\n }\n\n const locale: string | undefined = options.availableLocales[region].find((item: string): boolean => item === options.locale);\n if (locale) {\n return locale;\n }\n\n return REGION_TO_DEFAULT_LANGUAGE[region];\n}\n","import { getSafeLocale } from './locale.service';\nimport { LOCALE_SEPARATOR } from './locale.constants';\n\ninterface ILocaleUtilOptions {\n language?: string;\n useUrl?: boolean;\n}\n\n/** Return language code in lower case, like \"en\" or \"de\" */\nexport function getShortLanguageCode(options: ILocaleUtilOptions): string {\n const { language, useUrl } = options;\n\n return getSafeLocale({ language, useUrl, useBrowserFallback: true })\n .split(LOCALE_SEPARATOR)[0]\n .toLowerCase();\n}\n\n/** Return country code in upper case, like \"EN\" or \"ES\" */\nexport function getCountryFromLanguage(options: ILocaleUtilOptions): string {\n const { language, useUrl } = options;\n\n return getSafeLocale({ language, useUrl, useBrowserFallback: true })\n .split(LOCALE_SEPARATOR)[1]\n .toUpperCase();\n}\n","import { IFlowEventData } from 'types/analytics';\n\nexport const LOG_OUT = 'LOG_OUT';\nexport const LOG_OUT_DONE = 'LOG_OUT_DONE';\nexport const LOG_OUT_ERROR = 'LOG_OUT_ERROR';\n\nexport const SET_LOGIN_FETCHING = 'SET_LOGIN_FETCHING' as const;\nexport const HAS_SESSION_ALREADY = 'HAS_SESSION_ALREADY' as const;\n\nexport const SET_LOGIN_SESSION = 'SET_LOGIN_SESSION' as const;\nexport const REMOVE_LOGIN_SESSION = 'REMOVE_LOGIN_SESSION' as const;\n\nexport const SET_TPC_ENABLED = 'SET_TPC_ENABLED' as const;\n\nexport enum LOGIN_TYPE {\n /* User was not logged in before */\n NEW_LOGIN = 'NEW_LOGIN',\n /* User was logged in and confirmed his account */\n CONFIRM_ACCOUNT = 'CONFIRM_ACCOUNT',\n /* User was logged in as account A, but chose account B during Connect phase */\n RESELECT_ACCOUNT = 'RESELECT_ACCOUNT'\n}\n\nexport const STYLES = {\n CONTENT: 'sitegen-login-page'\n};\n\nexport const TEXT_KEYS = {\n BUTTON_LOGIN: 'header__login',\n POPIN_SUBTEXT: 'login_error_copy'\n};\n\nexport const LOGIN_FLOW_STEP: Pick = {\n flowStep: 'login'\n};\n\nexport enum LOGIN_FLOW_ACTIONS {\n DISPLAY = 'login page',\n LOGIN = 'log in'\n}\n","import URI from 'urijs';\nimport 'urijs/src/URITemplate';\nimport axios, { AxiosError, AxiosInstance, AxiosRequestConfig, AxiosResponse } from 'axios';\nimport { mapValues } from 'lodash';\n\nimport { getUbiServicesEndpoint } from '@sitegen/common/utils/ubi-services';\nimport {\n IConfigureUbisoftAPIServiceOptions,\n ISessionHeadersOptions,\n IStat,\n IStats,\n IUserFriend,\n ICountryCode,\n IUserProducts,\n IUserProduct\n} from './ubisoft-api.types';\nimport {\n USER_FRIEND_LIST_URL,\n USER_FRIEND_PROFILE_URL,\n USER_PROFILE_STAT_TEMPLATE,\n USER_DETAIL_INFO_URL,\n USER_PRODUCTS_URL,\n IP_LOCATION_URL\n} from './ubisoft-api.constants';\n\nimport { IProfilePlatform, IUserDetailInfo } from 'types/profiles';\n\n/**\n * Provides collection of requests to Ubisoft Services API http://doc-ubiservices.ubisoft.org/public-docs/\n */\nexport class UbisoftAPIService {\n private static AXIOS_INSTANCE: AxiosInstance;\n private static session: ISessionHeadersOptions;\n\n /** Provide headers and other options to each request */\n public static configure(options: IConfigureUbisoftAPIServiceOptions): void {\n const headers: object = {\n 'Ubi-AppId': options.appId\n };\n\n const baseURL = getUbiServicesEndpoint(options.env);\n\n this.AXIOS_INSTANCE = axios.create({ headers, baseURL });\n if (options.session) {\n this.configureSession(options.session);\n }\n }\n\n public static configureSession(session: ISessionHeadersOptions): void {\n this.session = session;\n this.AXIOS_INSTANCE.interceptors.request.use((config: AxiosRequestConfig) => {\n if (this.session) {\n config.headers['Ubi-SessionId'] = this.session.sessionId;\n config.headers['Authorization'] = `ubi_v1 t=${this.session.ticket}`;\n }\n return config;\n });\n }\n\n public static configureFakeAPI(): Promise {\n /* eslint-disable-next-line*/\n return import('./__mocks__/ubisoft-api.service.mocks').then((module: any): void => {\n this.getFriendList = module.getFriendList;\n this.getFriendProfile = module.getFriendProfile;\n this.getIPLocation = module.getIPLocation;\n this.getUserProducts = module.getUserProducts;\n });\n }\n\n /** Return list of user's friends as map */\n public static async getFriendList(): Promise {\n const url: string = new URI(USER_FRIEND_LIST_URL).href();\n const response: { friends: IUserFriend[] } = await this.request({ url, method: 'GET' });\n return response.friends;\n }\n\n /** Return stat value by its name */\n public static async getStatByName(options: {\n readonly userId: string,\n readonly spaceId: string,\n readonly statName: string\n }): Promise<{[name: string]: string}> {\n const values: object = { userId: options.userId };\n const template: string = URI.expand!(USER_PROFILE_STAT_TEMPLATE, values);\n const url: string = new URI(template)\n .segment(template)\n .setQuery({ spaceId: options.spaceId, statName: options.statName })\n .href();\n\n const response: IStats = await this.request({ url, method: 'GET' });\n\n return mapValues(response.stats, (stat: IStat, _name) => stat.value );\n }\n\n public static async getFriendProfile(options: { readonly UbiAccountId: string, readonly platformType?: string}): Promise {\n const url = new URI(USER_FRIEND_PROFILE_URL).segment(options.UbiAccountId);\n if (options.platformType) {\n url.setQuery({ platformType: options.platformType });\n }\n return await this.request({ url: url.href(), method: 'GET' });\n }\n\n public static async getUserInfo(): Promise {\n const url: string = new URI(USER_DETAIL_INFO_URL).href();\n return await this.request({ url, method: 'GET' });\n }\n\n public static async getUserProducts(): Promise {\n const url: string = new URI(USER_PRODUCTS_URL).href();\n const { products} = await this.request({ url, method: 'GET' });\n return products;\n }\n\n public static async getIPLocation(): Promise {\n const url: string = new URI(IP_LOCATION_URL).href();\n return await this.request({ url, method: 'GET' });\n }\n\n /** Throw status code as a number because no particular error handling is available */\n private static request(options: AxiosRequestConfig): Promise {\n return this.AXIOS_INSTANCE.request({ ...options, responseType: 'json' })\n .then((response: AxiosResponse): T => {\n return response.data;\n }).catch((e: AxiosError): never => {\n throw e.response!.status;\n });\n }\n}\n","export const USER_FRIEND_LIST_URL: string = '/v2/profiles/me/friends';\nexport const USER_FRIEND_PROFILE_URL: string = '/v2/profiles';\nexport const USER_PRODUCTS_URL: string = '/v1/users/global/webservices/productactivations/api/products';\nexport const USER_PROFILE_STAT_TEMPLATE: string = '/v1/profiles/{userId}/stats';\nexport const USER_DETAIL_INFO_URL: string = '/v3/users/me';\nexport const IP_LOCATION_URL = '/v2/profiles/me/iplocation';\n\nexport enum USER_FRIEND_STATUS {\n FRIEND = 'Friends',\n PENDING_SENT_INVITE = 'PendingSentInvite',\n}\n","import { invert } from 'lodash';\n\nimport { ENV } from '@sitegen/common/constants/environments';\nimport { PLATFORM_TYPES } from '@sitegen/common/constants/platforms';\n\nexport enum UBISOFT_CONNECT_PLATFORM_TYPES {\n UPLAY = 'uplay',\n XBL = 'xbl',\n PSN = 'psn',\n SWITCH = 'switch',\n WEB = 'web',\n MOBILE = 'mobile',\n IOS = 'ios',\n ANDROID = 'android',\n OCULUSVR = 'oculusvr',\n STEAMVR = 'steamvr',\n STADIA = 'googlestream',\n EPIC = 'epic',\n LUNA = 'luna'\n}\n\nexport const PLATFORMS_TO_UBISOFT_PROFILE_PLATFORMS = {\n [PLATFORM_TYPES.PC]: UBISOFT_CONNECT_PLATFORM_TYPES.UPLAY,\n [PLATFORM_TYPES.XONE]: UBISOFT_CONNECT_PLATFORM_TYPES.XBL,\n [PLATFORM_TYPES.PS4]: UBISOFT_CONNECT_PLATFORM_TYPES.PSN,\n [PLATFORM_TYPES.SWITCH]: UBISOFT_CONNECT_PLATFORM_TYPES.SWITCH,\n [PLATFORM_TYPES.STADIA]: UBISOFT_CONNECT_PLATFORM_TYPES.STADIA,\n [PLATFORM_TYPES.XSX]: UBISOFT_CONNECT_PLATFORM_TYPES.XBL,\n [PLATFORM_TYPES.PS5]: UBISOFT_CONNECT_PLATFORM_TYPES.PSN,\n [PLATFORM_TYPES.LUNA]: UBISOFT_CONNECT_PLATFORM_TYPES.LUNA\n};\n\nexport const UBISOFT_PROFILE_PLATFORMS_TO_PLATFORMS = invert(PLATFORMS_TO_UBISOFT_PROFILE_PLATFORMS);\n\nexport const PLATFORM_TO_EXTERNAL_LOGIN_OPTION = {\n [PLATFORM_TYPES.PC]: 'login',\n [PLATFORM_TYPES.XONE]: 'xbox-external',\n [PLATFORM_TYPES.XSX]: 'xbox-external',\n [PLATFORM_TYPES.PS4]: 'psn-external',\n [PLATFORM_TYPES.PS5]: 'psn-external'\n};\n\nexport type externalLoginOptionType = 'login' | 'xbox' | 'psn' | 'twitch';\n\nexport const EXTERNAL_LOGIN_OPTIONS = {\n UBISOFT: 'login',\n XBOX: 'xbox-external',\n PSN: 'psn-external',\n TWITCH: 'twitch-external'\n};\n\nexport const APPLICATION_ID_PARAM_NAME = 'applicationId';\nexport const GENOME_ID_PARAM_NAME = 'genomeId';\nexport const UBICONNECT_LOGGED_IN = 'UBICONNECT_LOGGED_IN';\n\nexport const CONNECT_LOGIN_LOCATION = {\n [ENV.DEV]: 'https://uat-connect.ubisoft.com',\n [ENV.PROD]: 'https://connect.ubisoft.com'\n};\n\nexport const CONNECT_SDK_LOCATION = {\n [ENV.DEV]: 'https://ubistatic2-a.akamaihd.net/uplay-connect/v3/uat/default/sdk/connectSdkPublic.js',\n [ENV.PROD]: 'https://ubistatic2-a.akamaihd.net/uplay-connect/v3/prod/default/sdk/connectSdkPublic.js'\n};\n\nexport const AUTH_URL_POPUP = 'logged-in.html';\nexport const AUTH_URL = 'auth-url.html';\n","import { Subject } from 'rxjs';\nimport URI from 'urijs';\n\n// types\nimport {\n IUbiConnectConfig,\n IUbisoftConnectService\n} from './types';\n\n// constants\nimport { externalLoginOptionType, AUTH_URL_POPUP } from './constants';\n\n// utils\nimport {\n calculatePopupSize,\n getConnectEndpoint,\n} from './utils';\n\n// service\nimport ubisoftOverlayService from 'modules/ubisoft-overlay-service';\n\n\nexport class UbisoftConnectService implements IUbisoftConnectService {\n private static websiteAbsolutePath: string;\n public sizeSubject: Subject = new Subject();\n private config: IUbiConnectConfig;\n private loginCallback: () => void;\n\n public static configure = ({ websiteAbsolutePath }: {\n websiteAbsolutePath: string\n }): void => {\n UbisoftConnectService.websiteAbsolutePath = websiteAbsolutePath;\n };\n\n public init(config: IUbiConnectConfig) {\n this.config = this.prepareConfig(config);\n\n window.addEventListener('message', this.receiveUbisoftConnectIframeMessage, false);\n }\n\n private isLoginMessage(event: MessageEvent): boolean {\n const isCorrectGenomeId = event.data.genomeId === this.config.genomeId;\n const isCorrectTopic = event.data.topic === this.config.topicOfPostMessage;\n const isCorrectApplicationId = event.data.applicationId === this.config.applicationId;\n\n return isCorrectGenomeId && isCorrectTopic && isCorrectApplicationId;\n }\n\n private isSizeChangedMessage(event: MessageEvent): number | false {\n let data: { connectRoute: string, windowHeight: number };\n\n try {\n data = JSON.parse(event.data);\n } catch (error) {\n return false;\n }\n\n return (data.connectRoute && data.windowHeight) ? data.windowHeight : false;\n }\n\n private receiveUbisoftConnectIframeMessage = (event: MessageEvent) => {\n const isLoginMessage = this.isLoginMessage(event);\n const isSizeChangedMessage = this.isSizeChangedMessage(event);\n\n if (isLoginMessage) {\n ubisoftOverlayService.reInit();\n return this.loginCallback();\n }\n\n if (isSizeChangedMessage) {\n return this.sizeSubject.next(isSizeChangedMessage);\n }\n };\n\n private prepareConfig = (config: IUbiConnectConfig): IUbiConnectConfig => {\n return {\n ...config,\n nextUrl: decodeURIComponent(this.createNextURL(config.nextUrl))\n };\n };\n\n private createNextURL = (nextUrl: string) => {\n return new URI(UbisoftConnectService.websiteAbsolutePath).filename(nextUrl).href();\n };\n\n private generateConnectNextUrl = (hasTPCEnabled: boolean) => {\n return hasTPCEnabled\n ? this.config.nextUrl\n : `${getConnectEndpoint(this.config.envName)}/${AUTH_URL_POPUP}?appId=${\n this.config.applicationId\n }&genomeId=${this.config.genomeId}&lang=en-GB`;\n };\n\n public registerLoginCallback(loginCallback: () => void) {\n this.loginCallback = loginCallback;\n }\n\n public getLoginPopIn = (externalLogin: string, languageCode?: string, size?: { width?: string, height?: string }) => {\n const iframe: HTMLIFrameElement = document.createElement('iframe');\n\n iframe.sandbox.add(\n 'allow-same-origin',\n 'allow-forms',\n 'allow-popups-to-escape-sandbox',\n 'allow-popups',\n 'allow-scripts');\n\n const url = new URI(getConnectEndpoint(this.config.envName))\n .segment([\n externalLogin\n ])\n .query({\n appId: this.config.applicationId,\n genomeId: this.config.genomeId,\n lang: languageCode || this.config.lang,\n nextUrl: decodeURIComponent(this.config.nextUrl)\n })\n .href();\n\n iframe.setAttribute('src', url);\n\n iframe.classList.add('iFrame');\n iframe.setAttribute('width', size && size.width ? size.width : '480');\n iframe.setAttribute('height', size && size.height ? size.height : '720');\n return iframe;\n };\n\n public openLoginPopUp(\n languageCode: string,\n externalLogin: externalLoginOptionType,\n align?: string,\n hasTPCEnabled: boolean = true\n ) {\n const connectNextUrl: string = this.generateConnectNextUrl(hasTPCEnabled);\n\n const url = new URL(`${getConnectEndpoint(this.config.envName)}/${externalLogin}`);\n url.searchParams.set('appId', this.config.applicationId);\n url.searchParams.set('genomeId', this.config.genomeId);\n url.searchParams.set('lang', languageCode || this.config.lang);\n url.searchParams.set('nextUrl', connectNextUrl);\n\n const target = 'Ubisoft Connect';\n const popupSize = calculatePopupSize(align);\n const features = `width=${popupSize.width},height=${popupSize.height},left=${popupSize.left},top=${\n popupSize.top\n },toolbar=no,status=no`;\n\n return window.open(url.toString(), target, features);\n }\n}\n\nconst ubisoftConnectService = new UbisoftConnectService();\n\nexport default ubisoftConnectService;\n","import URI from 'urijs';\nimport {\n APPLICATION_ID_PARAM_NAME,\n CONNECT_LOGIN_LOCATION,\n CONNECT_SDK_LOCATION,\n GENOME_ID_PARAM_NAME,\n AUTH_URL,\n} from './constants';\nimport { getEnvDependentEndpoint } from '@sitegen/common/utils/ubi-services';\nimport { delay } from '@sitegen/common/utils/timer';\nimport { IWindowWithConnect } from './types';\n\nexport function transitionNextUrl(applicationId: string, genomeId: string, topicOfPostMessage: string) {\n if (window.opener) {\n window.opener.postMessage(\n {\n topic: topicOfPostMessage,\n applicationId: applicationId,\n genomeId: genomeId,\n payload: ''\n },\n '*'\n );\n }\n if (window.parent.parent) {\n window.parent.parent.postMessage(\n {\n topic: topicOfPostMessage,\n applicationId: applicationId,\n genomeId: genomeId,\n payload: ''\n },\n '*'\n );\n }\n if (window.parent) {\n window.parent.postMessage(\n {\n topic: topicOfPostMessage,\n applicationId: applicationId,\n genomeId: genomeId,\n payload: ''\n },\n '*'\n );\n }\n}\n\n// SUCCESS_NEXT_URL: should be the function,\n// because window location href can be changed by router (which invoke re-render), so we need to recalculate this value\nexport const SUCCESS_NEXT_URL = (applicationId: string, genomeId: string) => {\n return new URI('')\n .segment([AUTH_URL])\n .search({\n [APPLICATION_ID_PARAM_NAME]: applicationId,\n [GENOME_ID_PARAM_NAME]: genomeId,\n })\n .href();\n};\n\nexport const calculatePopupSize = (align?: string) => {\n const defaultPopupWidth = 400;\n const defaultPopupHeight = 600;\n\n if (align === 'center') {\n // handle case when several monitors\n const dualScreenLeft = typeof window.screenLeft !== 'undefined' ? window.screenLeft : window.screenX;\n const dualScreenTop = typeof window.screenTop !== 'undefined' ? window.screenTop : window.screenY;\n const width = window.innerWidth\n ? window.innerWidth\n : document.documentElement!.clientWidth\n ? document.documentElement!.clientWidth\n : screen.width;\n const height = window.innerHeight\n ? window.innerHeight\n : document.documentElement!.clientHeight\n ? document.documentElement!.clientHeight\n : screen.height;\n const top = height / 2 - defaultPopupHeight / 2 + dualScreenTop;\n const left = width / 2 - defaultPopupWidth / 2 + dualScreenLeft;\n\n return {\n top,\n left,\n width: defaultPopupWidth,\n height: defaultPopupHeight\n };\n } else {\n return {\n top: 0,\n left: 0,\n width: defaultPopupWidth,\n height: defaultPopupHeight\n };\n }\n};\n\nexport const getConnectEndpoint = (envName: string): string => {\n return getEnvDependentEndpoint({ envName, source: CONNECT_LOGIN_LOCATION });\n};\n\nexport const getSDKEndpoint = (envName: string): string => {\n return getEnvDependentEndpoint({ envName, source: CONNECT_SDK_LOCATION });\n};\n\nexport const isSafari = typeof navigator !== 'undefined' && /.*Version.*Safari.*/.test(navigator.userAgent);\n\nexport const fallbackConnectInit = (subscriber: Function, maxAttempts: number = 10) => {\n async function reserve(value: number = 0) {\n const overlayConnectSDK = (window as IWindowWithConnect).overlayConnectSDK;\n\n if (value === maxAttempts) {\n return Promise.reject('Connect couldn\\'t be initialized!');\n }\n\n if (overlayConnectSDK) {\n return subscriber(overlayConnectSDK);\n }\n\n await delay(1000);\n\n reserve(++value);\n };\n\n return reserve();\n};\n","import { ENV } from '@sitegen/common/constants/environments';\n\nexport const OVERLAY_SDK_LOCATION = {\n [ENV.DEV]: 'https://uat-overlay.ubisoft.com/overlay-connect-integration/widget.js',\n [ENV.PROD]: 'https://overlay.ubisoft.com/overlay-connect-integration/widget.js'\n};\n\nexport const HEADER_HEIGHT = 51.7;\n\nexport const INTEGRATOR_TRIGGER_LOGOUT = 'INTEGRATOR_TRIGGER_LOGOUT';\nexport const INTEGRATOR_TRIGGER_USER_DATA = 'INTEGRATOR_TRIGGER_USER_DATA';\n\nexport const OVERLAY_INIT_ERROR_MESSAGE = '[UbisoftOverlayService] [ERR] Couldn\\'t found Overlay!';\n","import * as Service from './service';\nimport * as Constants from './constants';\n\nexport { Service, Constants };\n\nexport default Service.default;\n","import { getEnvDependentEndpoint } from '@sitegen/common/utils/ubi-services';\nimport { delay } from '@sitegen/common/utils/timer';\nimport { OVERLAY_SDK_LOCATION, OVERLAY_INIT_ERROR_MESSAGE } from './constants';\nimport { IWindowWithOverlay } from './types';\n\nexport const getOverlaySDKEndpoint = (envName: string) => {\n return getEnvDependentEndpoint({ envName, source: OVERLAY_SDK_LOCATION });\n};\n\nexport const getEmbeddedOverlay = (\n onError: Function,\n onSuccess: Function,\n // for Safari case the overlay initializing can be more than 10 seconds\n maxAttempts: number = 20\n) => {\n async function reserve(value: number = 0) {\n const overlayWidget = (window as IWindowWithOverlay).overlayWidget || {};\n const overlayConnectSDK = (window as IWindowWithOverlay).overlayConnectSDK;\n\n if (value === maxAttempts) {\n // eslint-disable-next-line no-console\n console.error(OVERLAY_INIT_ERROR_MESSAGE);\n return onError();\n }\n\n if (overlayWidget.hasInitialized && overlayConnectSDK) {\n return onSuccess();\n }\n\n await delay(1000);\n\n reserve(++value);\n };\n\n return reserve();\n};","import { cloneDeep } from 'lodash';\nimport { loginSessionMock } from 'modules/__mocks__/login-session.mock';\n\nimport {\n IGeneralUserData,\n IGetProfilesResponse,\n} from 'modules/ubisoft-connect-service/types';\n\nexport class OverlayServiceMock {\n public static hasInitialized = true;\n\n public static init() {}\n public static reInit() {}\n public static openLoginPopup() {}\n public static changeLocale(locale: string) {\n return locale;\n }\n \n public static async triggerEmailActivation(callback: Function) {\n return callback && callback();\n }\n\n public static async getUserStatus(_userData: IGeneralUserData, callback: Function) {\n return callback && callback();\n }\n\n public static async getThirdPartyStatus() {\n return true;\n }\n\n public static async getTicket() {\n return {\n sessionId: '87942374-****-418c-****-edf0ecb3556e',\n ticket: '****.LONP2H-ESqR-A6meV1s_Ud9RIjYen3Ewa-_L_fWjRNA.****',\n userId: '****b2b9-0ba7-41f2-adca-e62d136e****',\n };\n }\n\n public static async getProfiles() {\n return {\n payload: {\n profiles: cloneDeep(loginSessionMock.UbisoftConnectProfiles)\n }\n } as IGetProfilesResponse;\n } \n}\n\n","import $script from 'loadjs';\nimport { Subject } from 'rxjs';\nimport { get } from 'lodash';\n\n// services\nimport { Service as AnalyticsService } from 'modules/analytics-provider';\n\n// constants\nimport {\n HEADER_HEIGHT,\n INTEGRATOR_TRIGGER_USER_DATA,\n INTEGRATOR_TRIGGER_LOGOUT\n} from './constants';\n\n// utils\nimport { getEmbeddedOverlay, getOverlaySDKEndpoint } from './utils';\nimport { isEmbedded } from 'utils/css';\nimport { OverlayServiceMock } from './service.mock';\n\n// types\nimport {\n IConnectSDK,\n IGetProfilesResponse,\n IGetTicketResponse,\n IGetThirdPartyStatusResponse,\n IGetUserStatusResponse,\n IGeneralUserData\n} from 'modules/ubisoft-connect-service/types';\nimport {\n IUbiOverlayServiceConfig,\n IUbiOverlayWidget,\n IUbiOverlayWidgetConfig,\n IWindowWithOverlay\n} from 'modules/ubisoft-overlay-service/types';\nimport { WEBSITE_MODE } from '@sitegen/common/constants/config';\n\nexport class UbisoftOverlayService {\n public overlaySDK: IUbiOverlayWidget;\n private overlayConnectSDK: IConnectSDK;\n private config: IUbiOverlayWidgetConfig;\n private onInitCallback: Function;\n\n public overlayLoginTriggerSubject: Subject = new Subject();\n public overlayLogoutTriggerSubject: Subject = new Subject();\n\n public install = async ({ mode, envName }: {\n mode: WEBSITE_MODE,\n envName: string\n },\n onSuccess: Function,\n onInitDone: Function,\n ) => {\n window.addEventListener('message', this.receiveUbisoftOverlayMessage, false);\n this.onInitCallback = onInitDone;\n\n return isEmbedded(mode)\n ? await this.initEmbeddedFlow(onSuccess, onInitDone)\n : await UbisoftOverlayService.loadSDKScript(envName, () => {\n const { overlayWidget } = window as IWindowWithOverlay;\n this.overlaySDK = overlayWidget;\n onSuccess();\n });\n };\n\n public init(containerSelector: string) {\n if (!containerSelector) {\n return;\n }\n\n const { overlayWidget } = window as IWindowWithOverlay;\n this.overlaySDK = overlayWidget;\n\n const options = {\n ...this.config,\n container: `#${containerSelector}`,\n };\n\n return this.overlaySDK.init(options);\n }\n\n public initEmbeddedFlow(onInstallDone: Function, onInitDone: Function): Promise {\n return new Promise((resolve, onError) => {\n const onSuccess = () => {\n const { overlayWidget, overlayConnectSDK } = window as IWindowWithOverlay;\n this.overlaySDK = overlayWidget;\n this.overlayConnectSDK = overlayConnectSDK;\n onInstallDone();\n onInitDone();\n return resolve();\n };\n\n return getEmbeddedOverlay(onError, onSuccess);\n });\n }\n\n public configure(config: IUbiOverlayServiceConfig) {\n this.config = {\n appId: config.appId,\n genomeId: config.genomeId,\n locale: config.locale,\n loginType: 'modal',\n height: HEADER_HEIGHT,\n showSignInText: 'DEFAULT',\n onConnect: (action: string, response: IGetProfilesResponse) => {\n if (action === 'init') {\n const userId = get(response, 'payload.userId') as unknown as string;\n const hasLoginSession = Boolean(response.status === 'ok' && userId);\n\n AnalyticsService.triggerInitialPageEvents({ userId, hasLoginSession });\n\n this.overlayConnectSDK = (window as IWindowWithOverlay).overlayConnectSDK;\n this.onInitCallback();\n\n if (hasLoginSession) {\n return this.overlayLoginTriggerSubject.next();\n }\n }\n }\n };\n }\n\n public getConfig() {\n return this.config;\n }\n\n public reInit() {\n if (this.overlaySDK) {\n this.overlaySDK.reInit();\n }\n }\n\n public static changeLocale(locale: string) {\n const { overlayWidget } = window as IWindowWithOverlay;\n if (!get(overlayWidget, 'hasInitialized', false)) {\n return;\n }\n\n return overlayWidget.changeLocale(locale);\n }\n\n public static loadSDKScript(envName: string, callback: Function): Promise {\n return new Promise(resolve => {\n if ((window as IWindowWithOverlay).overlayWidget) {\n return resolve(callback());\n }\n\n const scriptId = 'overlaySDK';\n const scriptUrl = getOverlaySDKEndpoint(envName);\n\n $script(scriptUrl, scriptId);\n $script.ready(scriptId, () => {\n return resolve(callback());\n });\n });\n }\n\n public receiveUbisoftOverlayMessage = (event: MessageEvent) => {\n if (!this.overlaySDK) {\n return;\n }\n\n if (this.isLoginEvent(event)) {\n return this.overlayLoginTriggerSubject.next();\n }\n\n if (this.isLogoutEvent(event)) {\n return this.overlayLogoutTriggerSubject.next();\n }\n };\n\n public isLoginEvent(event: MessageEvent) {\n return event.data.topic === INTEGRATOR_TRIGGER_USER_DATA;\n }\n\n public isLogoutEvent(event: MessageEvent) {\n return event.data.topic === INTEGRATOR_TRIGGER_LOGOUT;\n }\n\n public openLoginPopup() {\n return this.overlaySDK.login();\n }\n\n public getTicket() {\n return new Promise<{\n ticket: string,\n sessionId: string,\n userId: string\n }>((resolve, reject) => {\n if (!this.overlaySDK.hasInitialized) {\n return reject();\n }\n\n return this.overlaySDK.getTicket((getTicketResponse: IGetTicketResponse) => {\n if (getTicketResponse.status !== 'ok') {\n return reject();\n }\n\n const { payload: { ticket, userId, sessionId } } = getTicketResponse;\n return resolve({ ticket, userId, sessionId });\n });\n });\n }\n\n public getProfiles() {\n return new Promise((resolve, reject) => {\n return this.overlaySDK.getProfiles((getProfilesResponse: IGetProfilesResponse) => {\n if (getProfilesResponse.status !== 'ok') {\n return this.overlayConnectSDK\n ? this.getProfilesFallback(resolve, reject)\n : reject();\n }\n\n return resolve(getProfilesResponse);\n });\n });\n }\n\n public getProfilesFallback = async (resolve: Function, reject: Function) => {\n let gotProfiles = false;\n const timeoutId = setTimeout(function() {\n if (!gotProfiles) {\n console.warn('[Ubisoft Overlay] Get profiles timeout.');\n return reject();\n }\n }, 10 * 1000);\n\n try {\n const { ticket, userId, sessionId } = await this.getTicket();\n\n return this.overlayConnectSDK\n .getProfiles(ticket, sessionId, userId)\n .subscribe((getProfilesResponse: IGetProfilesResponse) => {\n gotProfiles = true;\n clearTimeout(timeoutId);\n return resolve(getProfilesResponse);\n });\n } catch {\n return reject();\n }\n };\n\n public triggerEmailActivation(callback: Function) {\n return this.overlaySDK.triggerEmailActivation(callback);\n }\n\n public getUserStatus(userData: IGeneralUserData, callback: Function) {\n return this.overlaySDK.getUserStatus((response: IGetUserStatusResponse) => response.status === 'ok'\n ? callback(response)\n : this.overlayConnectSDK.getUserStatus(userData.ticket, userData.sessionId, userData.userId).subscribe(callback));\n }\n\n public getThirdPartyStatus() {\n return new Promise((resolve, reject) => {\n let gotTPS = false;\n const timeoutId = setTimeout(function() {\n if (!gotTPS) {\n console.warn('[Ubisoft Overlay] getthirdPartyStatus timeout.');\n return reject();\n }\n }, 10 * 1000);\n\n return this.overlayConnectSDK.getThirdPartyStatus()\n .subscribe((getThirdPartyStatusResponse: IGetThirdPartyStatusResponse) => {\n gotTPS = true;\n clearTimeout(timeoutId);\n\n return resolve(getThirdPartyStatusResponse.status === 'ok');\n });\n });\n }\n\n public logout(ticket: string, sessionId: string) {\n return new Promise((resolve, _reject) => {\n this.overlayConnectSDK.logout(ticket, sessionId);\n return resolve();\n });\n }\n\n public configureFakeAPI = () => {\n UbisoftOverlayService.changeLocale = OverlayServiceMock.changeLocale;\n\n this.init = OverlayServiceMock.init;\n this.reInit = OverlayServiceMock.reInit;\n this.getTicket = OverlayServiceMock.getTicket;\n this.getProfiles = OverlayServiceMock.getProfiles;\n this.getUserStatus = OverlayServiceMock.getUserStatus;\n this.openLoginPopup = OverlayServiceMock.openLoginPopup;\n this.getThirdPartyStatus = OverlayServiceMock.getThirdPartyStatus;\n this.triggerEmailActivation = OverlayServiceMock.triggerEmailActivation;\n };\n}\n\nconst ubisoftOverlayService = new UbisoftOverlayService();\n\nexport default ubisoftOverlayService;\n","import { WEBSITE_MODE } from '@sitegen/common/constants';\n\nexport const isCSSVariableSet = (variable: string): boolean => {\n const value: string = getComputedStyle(document.body).getPropertyValue(variable);\n /* There can be extra spaces in variable value */\n return !!value && !value.includes('none');\n};\n\nexport const getModeClass = (className: string, shouldInheritStyles?: boolean) =>\n `${className}${shouldInheritStyles ? '-embedded' : ''}`;\n\nexport const isEmbedded = (mode: WEBSITE_MODE = WEBSITE_MODE.STANDALONE) => (mode === WEBSITE_MODE.EMBEDDED);\n","import * as moment from 'moment';\n\nimport { LANGUAGE_FORMAT_MAP } from '@sitegen/common/localization';\n\nexport const formatHours = (timeMoment: moment.Moment): string => {\n const locale = standardizeLocale(timeMoment.locale());\n const timeFormat = LANGUAGE_FORMAT_MAP[locale].time;\n\n return timeMoment.format(timeFormat);\n};\n\nexport const localizeDate = (timeMoment: moment.Moment): string => {\n const locale = standardizeLocale(timeMoment.locale());\n const dateFormat = LANGUAGE_FORMAT_MAP[locale].date;\n\n return timeMoment.format(dateFormat);\n};\n\n/**\n * The function formats a month depending on the format settings specified for a locale. For example, given the date\n * '01/01/2019' and 'ru-RU' locale and 'MMMM' format, the return value is either 'январь' (the base form of the word)\n * or 'января' (the declined form of the word) depending on the declension flag in the settings.\n * @param timeMoment - a moment.js object\n */\nexport const localizeMonth = (timeMoment: moment.Moment): string => {\n const locale = standardizeLocale(timeMoment.locale());\n const { isMonthDeclensionNeeded, month } = LANGUAGE_FORMAT_MAP[locale];\n\n if (isMonthDeclensionNeeded) {\n return timeMoment.format(`D ${month}`).split(' ')[1];\n }\n\n return timeMoment.format(month);\n};\n\nexport function standardizeLocale(locale: string): string {\n let [prefix, suffix = ''] = locale.split('-');\n suffix = suffix ? `-${suffix.toUpperCase()}` : '';\n\n return `${prefix}${suffix}`;\n}\n\nexport function isLocaleValid(locale: string) {\n return RegExp(/[a-z]{2}[-]{1}([a-z]{2}|[A-Z]{2})$/g).test(locale);\n}\n","export default (): URLSearchParams => new URLSearchParams(window.location.search);\n","import URI from 'urijs';\nimport { WEBSITE_MODE } from '@sitegen/common/constants';\nimport { isEmbedded } from './css';\n\n/** Window history should behave differently in certain application modes, like \"Preview\" */\nexport class WindowHistoryService {\n private static updateHistory: boolean = true;\n\n public static configure(options: { preview?: boolean, mode?: WEBSITE_MODE }): void {\n const disableHistoryUpdates: boolean = options.preview || isEmbedded(options.mode);\n WindowHistoryService.updateHistory = !disableHistoryUpdates;\n }\n\n public static pushState(basePath: string, path: string): void {\n if (!WindowHistoryService.updateHistory) {\n return; \n }\n\n const url: string = new URI(window.location.origin)\n .segment([basePath, path])\n .search(window.location.search)\n .href();\n window.history.pushState({}, '', url);\n }\n}\n","import * as lodash from 'lodash';\nimport { PLATFORM_TYPES } from '@sitegen/common/constants/platforms';\n\nexport const SITEGEN_CTA_DEFAULT_VALUE = 'sitegen';\nexport const SITEGEN_CTA_URL_PARAMETER = 'source';\n\nexport const PLAYER_PROFILE_URL: string = '/api/v1/{code}/phases/{phaseId}/players/{userId}';\nexport const PLAYER_BETA_GROUP_URL: string = '/api/v1/{code}/phases/{phaseId}/players/{userId}/playerGroups/{playerGroupId}';\nexport const PLATFORM_PLAYER_GROUPS_URL: string = '/api/v1/{code}/phases/{phaseId}/playergroups';\nexport const PLAYER_INVITE_FRIEND_URL: string = 'api/v1/{code}/phases/{phaseId}/players/{userId}/friends';\nexport const PLAYER_FRIENDS_STATUS_URL: string = 'api/v1/{code}/phases/{phaseId}/friends';\nexport const PLAYER_BETA_KEYS_URL: string = 'api/v1/{code}/phases/{phaseId}/players/{userId}/keys';\nexport const CUSTOM_FIELDS_URL: string = 'api/v1/{code}/phases/{phaseId}';\nexport const INVITATION_INFO_URL: string = 'api/v1/{code}/phases/{phaseId}/players/{userId}/invite_info';\nexport const ACCEPT_INVITATION_URL: string = 'api/v1/{code}/phases/{phaseId}/players/{userId}/accept_invite';\n\nexport const IN_BETA_FRIENDS_REQUEST_LIMIT: number = 50;\nexport const IN_BETA_FRIENDS_REQUESTS_API_LIMIT: number = 9;\nexport const IN_BETA_FRIENDS_REQUESTS_TIMEOUT: number = 1000;\n\nexport enum BETA_API_ERROR {\n INVALID_REQUEST = 'INVALID_REQUEST',\n INVALID_INTEGRATION_TYPE = 'INVALID_INTEGRATION_TYPE',\n INVALID_AUTH_INFO = 'INVALID_AUTH_INFO',\n INVALID_CREDENTIALS = 'INVALID_CREDENTIALS',\n INVALID_PLAYER_GROUP_PLAYER = 'INVALID_PLAYER_GROUP_PLAYER',\n UNEXPECTED_ERROR = 'UNEXPECTED_ERROR'\n}\n\nexport enum NDA_STATUS {\n SIGNED = 'SIGNED',\n NOT_SIGNED = 'NOT_SIGNED',\n NOT_SPECIFIED = 'NOT_SPECIFIED'\n}\n\nexport const PLATFORM_TO_BETA_PLATFORM_ID: { readonly [key: string]: number } = {\n [PLATFORM_TYPES.PC]: 1,\n [PLATFORM_TYPES.PS3]: 2,\n [PLATFORM_TYPES.PS4]: 3,\n [PLATFORM_TYPES.XONE]: 4,\n [PLATFORM_TYPES.X360]: 5,\n [PLATFORM_TYPES.WIIU]: 6,\n [PLATFORM_TYPES.WEB]: 7,\n [PLATFORM_TYPES.MOBILE]: 8,\n [PLATFORM_TYPES.IOS]: 9,\n [PLATFORM_TYPES.ANDROID]: 10,\n [PLATFORM_TYPES.OCULUSVR]: 11,\n [PLATFORM_TYPES.STEAMVR]: 12,\n [PLATFORM_TYPES.SWITCH]: 13,\n [PLATFORM_TYPES.STADIA]: 15,\n [PLATFORM_TYPES.EPIC]: 16,\n [PLATFORM_TYPES.PS5]: 17,\n [PLATFORM_TYPES.XSX]: 18,\n [PLATFORM_TYPES.LUNA]: 19,\n [PLATFORM_TYPES.AMAZON]: 20\n};\n\nexport const BETA_PLATFORM_ID_TO_PLATFORM: { readonly [key: string]: PLATFORM_TYPES }\n = lodash.invert(PLATFORM_TO_BETA_PLATFORM_ID) as { readonly [key: string]: PLATFORM_TYPES };\n\nexport const REGION_MATCH_ONLY_PLATFORMS = [\n PLATFORM_TYPES.PS4,\n PLATFORM_TYPES.PS5,\n PLATFORM_TYPES.XONE,\n PLATFORM_TYPES.XSX\n];\n","import { IBetaPhaseSystemField } from './beta-manager-api.types';\nimport { IFieldRenderParams } from 'modules/additional-info-common/fields/fields.types';\nimport { FIELD_VIEW_TYPES } from 'modules/additional-info-common/additional-info.constants';\n\nconst getFieldValue = (fieldDefinition: IBetaPhaseSystemField): string | string[] | null => {\n if (fieldDefinition.Value) {\n if (Array.isArray(fieldDefinition.Value.split(','))) {\n return fieldDefinition.Value.split(',');\n } else {\n return fieldDefinition.Value;\n }\n }\n return null;\n};\n\nconst getFieldType = (fieldDefinition: IBetaPhaseSystemField): FIELD_VIEW_TYPES => {\n if (fieldDefinition.Value && Array.isArray(fieldDefinition.Value.split(','))) {\n return FIELD_VIEW_TYPES.DROPDOWN;\n }\n\n return FIELD_VIEW_TYPES.STRING;\n};\n\nexport const betaCustomFieldsAdapter = (customFields: IBetaPhaseSystemField[]): IFieldRenderParams[] => {\n return customFields\n .filter(field => field.UsedForPlayerRegistration)\n .sort((a, b) => a.OrderNumber - b.OrderNumber)\n .map(field => {\n const fieldValue = getFieldValue(field);\n const fieldType = getFieldType(field);\n return {\n name: field.Name,\n value: fieldValue,\n defaultValue: field.DefaultValue,\n isRequired: field.IsMandatory,\n type: fieldType,\n };\n });\n};\n","import { chunk, flatten, groupBy, isEmpty } from 'lodash';\nimport URI, { QueryDataMap } from 'urijs';\nimport 'urijs/src/URITemplate';\nimport axios, { AxiosError, AxiosInstance, AxiosRequestConfig, AxiosResponse } from 'axios';\n\nimport { getUbiEventsEndpoint } from '@sitegen/common/utils/ubi-services';\nimport { delay } from '@sitegen/common/utils/timer';\nimport URLParams from 'utils/url-params';\n\nimport {\n IAcceptInvitationResponse,\n IBetaAPIError,\n IBetaCustomFieldsResponse,\n IBetaError,\n IBetaFriend,\n IBetaFriendsResponse,\n IBetaKey,\n IConfigureBetaManagerServiceOptions,\n IGetBetaCustomFieldsOptions,\n IGetFriendListForBetaOptions,\n IGetPlatformPlayerGroupsFromResponse,\n IGetPlatformPlayerGroupsOptions,\n IGetPlayerBetaKeysResponse,\n IGetPlayerProfileOptions,\n IGetPlayerProfileResponse,\n IInvitationInfo,\n IInviteFriendToBetaOptions,\n IPlatformPlayerGroupResponse,\n IPlatformPlayerGroups,\n IPlatformPlayerGroupsResponse,\n IPlayerBetaFriendsOptions,\n IPlayerGroup,\n IPlayerGroupResponse,\n IPlayerInvitationInfoOptions,\n IPlayerProfile,\n IRegisterForBetaRequest,\n IRegisterPlayerForBetaOptions,\n IRegisterPlayerInBetaGroupOptions\n} from './beta-manager-api.types';\nimport {\n ACCEPT_INVITATION_URL,\n BETA_PLATFORM_ID_TO_PLATFORM,\n CUSTOM_FIELDS_URL,\n IN_BETA_FRIENDS_REQUEST_LIMIT,\n IN_BETA_FRIENDS_REQUESTS_API_LIMIT,\n IN_BETA_FRIENDS_REQUESTS_TIMEOUT,\n INVITATION_INFO_URL,\n NDA_STATUS,\n PLATFORM_PLAYER_GROUPS_URL,\n PLATFORM_TO_BETA_PLATFORM_ID,\n PLAYER_BETA_GROUP_URL,\n PLAYER_BETA_KEYS_URL,\n PLAYER_FRIENDS_STATUS_URL,\n PLAYER_INVITE_FRIEND_URL,\n PLAYER_PROFILE_URL,\n REGION_MATCH_ONLY_PLATFORMS,\n SITEGEN_CTA_DEFAULT_VALUE,\n SITEGEN_CTA_URL_PARAMETER,\n} from './beta-manager-api.constants';\nimport { IBetaPhaseSystemFieldValue } from '../beta-manager-store';\nimport { IFieldRenderParams } from 'modules/additional-info-common/fields/fields.types';\nimport { betaCustomFieldsAdapter } from './beta-custom-fields.adapter';\nimport {\n isBetaApprovalWidget,\n isBetaApprovalV2Widget,\n isBetaGuaranteedAccessV2Widget\n} from '@sitegen/common/utils/widgets';\n\n/**\n * Collection of requests to \"beta.ubi.com\"\n */\nexport class BetaManagerAPIService {\n private static AXIOS_INSTANCE: AxiosInstance;\n\n /** Provide headers and other options to each request */\n public static configure(options: IConfigureBetaManagerServiceOptions): void {\n const headers: object = {\n 'Ubi-AppId': options.appId,\n 'Ubi-GenomeId': options.genomeId,\n 'Ubi-Ticket': options.ticket,\n 'Ubi-SessionId': options.sessionId\n };\n\n this.AXIOS_INSTANCE = axios.create({ headers });\n }\n\n public static configureFakeAPI(): Promise {\n /* eslint-disable-next-line*/\n return import('./__mocks__/beta-manager-api.service.mocks').then((module: any): void => {\n this.getFriendListForBeta = module.getFriendListForBeta;\n this.getPlayerBetaKeys = module.getPlayerBetaKeys;\n this.inviteFriendToBeta = module.inviteFriendToBeta;\n this.getInvitedFriends = module.getInvitedFriends;\n });\n }\n\n /** Get information about player registration in given beta phase */\n public static async getPlayerProfile(options: IGetPlayerProfileOptions): Promise {\n const url: string = this.getPlayerProfileURL(options).href();\n const response: IGetPlayerProfileResponse = await this.request({ url, method: 'GET' });\n\n return this.getPlayerProfileFromResponse(response);\n }\n\n public static async getCustomFields(options: IGetBetaCustomFieldsOptions): Promise {\n const url: string = this.getCustomFieldsURL(options).href();\n const response: IBetaCustomFieldsResponse = await this.request({ url, method: 'GET' });\n return this.getCustomFieldsFromResponse(response);\n }\n\n public static async getPlatformPlayerGroups(options: IGetPlatformPlayerGroupsOptions): Promise {\n const url: URI = this.getPlatformPlayerGroupsURL(options);\n const response: IPlatformPlayerGroupsResponse = await this.request({ url: url.href(), method: 'GET' });\n\n return this.getPlatformPlayerGroupsFromResponse({\n groups: response.PlayerGroups,\n tag: options.tag,\n widgetName: options.widgetName\n });\n }\n\n /** Try to sign up player for beta on given platform. Response should contain new information about player groups */\n public static async setPlayerBetaProfile(options: IRegisterPlayerForBetaOptions): Promise {\n const url: URI = this.getPlayerProfileURL(options)\n .query({ platformId: PLATFORM_TO_BETA_PLATFORM_ID[options.platform].toString() });\n\n if (options.newPlatform && options.alreadyRegisteredForBeta && options.platform !== options.newPlatform) {\n url.addQuery({ newPlatformId: PLATFORM_TO_BETA_PLATFORM_ID[options.newPlatform] });\n }\n\n /* Send PUT request with updated NDA value or new platform if user is already registered */\n const method: string = options.alreadyRegisteredForBeta ? 'PUT' : 'POST';\n const data: object = this.getRegisterForBetaInfo(options);\n\n const response: IGetPlayerProfileResponse = await this.request({ url: url.href(), method, data });\n return this.getPlayerProfileFromResponse(response);\n }\n\n /** Register a new player for a given beta/player group or update it if user is already registered */\n public static async setPlayerActiveBetaGroup(options: IRegisterPlayerInBetaGroupOptions): Promise {\n const url: URI = this.setPlayerBetaGroupURL(options);\n\n const method: string = options.alreadyRegisteredForBeta ? 'PUT' : 'POST';\n const data: object = this.getRegisterForBetaInfo(options);\n\n const response: IGetPlayerProfileResponse = await this.request({ url: url.href(), method, data });\n return this.getPlayerProfileFromResponse(response);\n }\n\n /** Invite friends to Beta for given platform (platform ID is required for this method) */\n public static async inviteFriendToBeta(options: IInviteFriendToBetaOptions): Promise {\n const url: URI = this.getFriendListForBetaURL(options);\n const data: IBetaFriendsResponse = { Friends: [] };\n for (const friend of options.friends) {\n data.Friends.push({ FriendId: friend });\n }\n\n return this.request({ url: url.href(), method: 'POST', data });\n }\n\n /** Get list of friends invited by the current player */\n public static async getInvitedFriends(options: IGetPlayerProfileOptions): Promise {\n const url: URI = this.getFriendListForBetaURL(options);\n const response: IBetaFriendsResponse = await this.request({ url: url.href(), method: 'GET' });\n return response.Friends;\n }\n\n /** Get beta keys available for player, for all platforms */\n public static async getPlayerBetaKeys(options: IGetPlayerProfileOptions): Promise {\n const host: string = getUbiEventsEndpoint(options.env);\n const values: object = {\n code: options.code,\n phaseId: options.phaseId.toString(),\n userId: options.userId\n };\n const template: string = URI.expand!(PLAYER_BETA_KEYS_URL, values).toString();\n const url: string = new URI(host).segment(template).href();\n\n const response: IGetPlayerBetaKeysResponse = await this.request({ url, method: 'GET' });\n const result: IBetaKey[] = [];\n\n for (const key of response.PlayerKeys) {\n result.push({\n key: key.PlayerKey,\n platformId: BETA_PLATFORM_ID_TO_PLATFORM[key.PlatformId],\n playerGroupId: key.PlayerGroupId\n });\n }\n\n return result;\n }\n\n /** Get list of friend objects already invited to beta */\n public static async getFriendListForBeta(options: IGetFriendListForBetaOptions): Promise {\n // We have to request beta status list in chunks due to API limitations\n return options.friendIdList.length > IN_BETA_FRIENDS_REQUEST_LIMIT\n ? this.getFriendListForBetaInChunks(options)\n : this.getFriendListForBetaRequest(options);\n }\n\n /** Gets information for a given invitation code */\n public static async getInvitationInfo(options: IPlayerInvitationInfoOptions): Promise {\n const host: string = getUbiEventsEndpoint(options.env);\n const values: object = { code: options.code, phaseId: options.phaseId.toString(), userId: options.userId };\n const template: string = URI.expand!(INVITATION_INFO_URL, values).toString();\n const url: string = new URI(host).segment(template).query({ invitation: options.invitation }).href();\n\n const response: IInvitationInfo = await this.request({ url });\n return response;\n }\n\n public static async acceptInvitation(options: IPlayerInvitationInfoOptions): Promise {\n const host: string = getUbiEventsEndpoint(options.env);\n const values: object = { code: options.code, phaseId: options.phaseId.toString(), userId: options.userId };\n const template: string = URI.expand!(ACCEPT_INVITATION_URL, values).toString();\n const url: string = new URI(host).segment(template).query({ invitation: options.invitation }).href();\n const response: IAcceptInvitationResponse = await this.request({ url, method: 'POST' });\n return response;\n }\n\n /** API Request to get list of friend objects already invited to beta */\n private static async getFriendListForBetaRequest(options: IGetFriendListForBetaOptions): Promise {\n const host: string = getUbiEventsEndpoint(options.env);\n const values: object = { code: options.code, phaseId: options.phaseId.toString() };\n const template: string = URI.expand!(PLAYER_FRIENDS_STATUS_URL, values).toString();\n const url: string = new URI(host).segment(template).href();\n\n const response: IBetaFriendsResponse = await this.request({ url, method: 'POST', data: options.friendIdList });\n return response.Friends;\n }\n\n /** Method to split getting list of friend objects invited to beta due to API limitations */\n private static async getFriendListForBetaInChunks(options: IGetFriendListForBetaOptions): Promise {\n const requests: Promise[] = [];\n const friendIdListChunks: string[][] = chunk(options.friendIdList, IN_BETA_FRIENDS_REQUEST_LIMIT);\n\n let requestsFired = 0;\n // We send requests until we reach API limit per second.\n // Then we wait required time and continue sending requests.\n for (const friendIdList of friendIdListChunks) {\n if (requestsFired === IN_BETA_FRIENDS_REQUESTS_API_LIMIT) {\n await delay(IN_BETA_FRIENDS_REQUESTS_TIMEOUT);\n requestsFired = 0;\n }\n const request: Promise = this.getFriendListForBetaRequest({\n ...options,\n friendIdList\n });\n requestsFired += 1;\n requests.push(request);\n }\n const result: IBetaFriend[][] = await Promise.all(requests);\n return flatten(result);\n }\n\n /** Data that is send to RS API when registering user */\n private static getRegisterForBetaInfo(options: {\n isNDASignedByUser: boolean,\n ubiMail?: string,\n customFieldValues?: IBetaPhaseSystemFieldValue[],\n cta: string | null\n }): IRegisterForBetaRequest {\n const data: IRegisterForBetaRequest = {\n PlayerSystemInfo: {\n Components: {\n CTA: this.getRegisterForBetaCTA(options.cta)\n }\n }\n };\n\n if (options.isNDASignedByUser) {\n data.PlayerSystemInfo.Components.NDA = 'true';\n }\n\n if (options.ubiMail) {\n data.PlayerSystemInfo.Components.Ubimail = options.ubiMail;\n }\n\n if (options.customFieldValues && !isEmpty(options.customFieldValues)) {\n options.customFieldValues.forEach(field => {\n data.PlayerSystemInfo.Components[field.key] = field.value;\n });\n }\n\n return data;\n }\n\n public static getRegisterForBetaCTA(cta: string | null) {\n if (cta) {\n return cta;\n }\n\n const ctaFromUrl = URLParams().get(SITEGEN_CTA_URL_PARAMETER);\n\n return encodeURIComponent(\n `${SITEGEN_CTA_DEFAULT_VALUE}${ctaFromUrl ? `-${ctaFromUrl}` : ''}`\n .trim()\n .toLowerCase()\n );\n }\n\n /** Get URL for retrieving player profile as well as sign player for beta */\n private static getPlayerProfileURL(options: IGetPlayerProfileOptions): URI {\n const host: string = getUbiEventsEndpoint(options.env);\n const values: object = { code: options.code, phaseId: options.phaseId.toString(), userId: options.userId };\n const template: string = URI.expand!(PLAYER_PROFILE_URL, values).toString();\n return new URI(host).segment(template);\n }\n\n private static getCustomFieldsURL(options: IGetBetaCustomFieldsOptions): URI {\n const host: string = getUbiEventsEndpoint(options.env);\n const values: object = { code: options.code, phaseId: options.phaseId.toString() };\n const template: string = URI.expand!(CUSTOM_FIELDS_URL, values).toString();\n return new URI(host).segment(template);\n }\n\n /** Get URL for retrieving or updating friend invitations to beta */\n private static getFriendListForBetaURL(options: IPlayerBetaFriendsOptions): URI {\n const host: string = getUbiEventsEndpoint(options.env);\n const values: object = { code: options.code, phaseId: options.phaseId.toString(), userId: options.userId };\n const template: string = URI.expand!(PLAYER_INVITE_FRIEND_URL, values).toString();\n\n const query: QueryDataMap = (options.platform) ? { platformId: PLATFORM_TO_BETA_PLATFORM_ID[options.platform].toString() } : {};\n return new URI(host).segment(template).query(query);\n }\n\n private static setPlayerBetaGroupURL(options: IRegisterPlayerInBetaGroupOptions) {\n const host: string = getUbiEventsEndpoint(options.env);\n const values: object = {\n code: options.code,\n phaseId: options.phaseId.toString(),\n userId: options.userId,\n playerGroupId: options.playerGroupId\n };\n const template: string = URI.expand!(PLAYER_BETA_GROUP_URL, values).toString();\n return new URI(host).segment(template);\n }\n\n private static getPlatformPlayerGroupsURL(options: IGetPlatformPlayerGroupsOptions) {\n const host: string = getUbiEventsEndpoint(options.env);\n const values: object = { code: options.code, phaseId: options.phaseId.toString() };\n const template: string = URI.expand!(PLATFORM_PLAYER_GROUPS_URL, values).toString();\n return new URI(host).segment(template);\n }\n\n private static getCustomFieldsFromResponse(response: IBetaCustomFieldsResponse): IFieldRenderParams[] {\n if (response.SystemFields && !isEmpty(response.SystemFields)) {\n return betaCustomFieldsAdapter(response.SystemFields);\n }\n\n return [];\n }\n\n /** Convert response to object used in application */\n private static getPlayerProfileFromResponse(response: IGetPlayerProfileResponse): IPlayerProfile {\n const groups: IPlayerGroup[] = [];\n for (const group of response.PlayerGroups) {\n groups.push({\n id: group.PlayerGroupId,\n approved: group.IsApproved,\n platform: BETA_PLATFORM_ID_TO_PLATFORM[group.PlatformId],\n sourceIdList: group.PlayerSourceIds\n });\n }\n\n return {\n userId: response.UserId,\n banned: response.BannedInBeta,\n groups,\n nda: this.getNDAStatus(response),\n cta: this.getCTA(response),\n invitation: response.Invitation\n };\n }\n\n public static getPlatformPlayerGroupsFromResponse: IGetPlatformPlayerGroupsFromResponse = ({\n groups,\n tag: tagFromConfig,\n widgetName\n }) => {\n let platforms: IPlatformPlayerGroups = {};\n /**\n * A group is eligible if, for a specific Beta:\n * - only one group exists for a given platform\n * OR\n * - only one group with a \"regionMatch\": true if multiple groups exists for a same platform.\n * The \"regionMatch\" is a exclusive for consoles (PS4, PS5, XSX, XONE), all other platforms normally return an empty value.\n *\n * If no or multiple groups exists for a given platform (without exactly one of these groups having a\n * regionMatch: true property), it is considered this Beta has no eligible group for this platform.\n *\n * If, from the admin, a tag has been configured for the auto-push feature, the group eligibility criteria changes :\n * it is no longer a unique group for a platform, but the group for a platform matching the tag.\n * If no or multiple groups (or more than one group with regionMatch: true)\n * match the tag for a same platform - it is considered this Beta has no eligible group for this platform.\n */\n // We need to define one eligible group per platform, so grouping them for further processing\n const groupsByPlatform = groupBy(groups, (group) => group.PlatformId);\n\n Object.entries(groupsByPlatform).forEach(([betaPlatformId, responsePlatformGroups]) => {\n // Transform Beta API ids into internal Sitegen platformId\n const platformId = BETA_PLATFORM_ID_TO_PLATFORM[betaPlatformId];\n let platformGroups: IPlatformPlayerGroupResponse[] = responsePlatformGroups;\n let isOnlyOneGroup = platformGroups.length === 1;\n\n if (widgetName && (\n isBetaApprovalWidget(widgetName) ||\n isBetaApprovalV2Widget(widgetName) ||\n isBetaGuaranteedAccessV2Widget(widgetName)) && isOnlyOneGroup) {\n return platforms[platformId] = platformGroups[0].PlayerGroupId;\n }\n\n // Filter groups by tag name if provided\n if (!isEmpty(tagFromConfig)) {\n const tagMatchedGroups = responsePlatformGroups.filter((group) => {\n return group.Tags && group.Tags.split(',').includes(tagFromConfig as string);\n });\n platformGroups = tagMatchedGroups;\n isOnlyOneGroup = platformGroups.length === 1;\n }\n /**\n * For the \"non region match only\" platforms, the group is eligible if it is the only\n * available group for the platform\n */\n const isNonRegionMatchOnlyPlatform = !REGION_MATCH_ONLY_PLATFORMS.includes(platformId);\n if (isNonRegionMatchOnlyPlatform) {\n if (isOnlyOneGroup) {\n return platforms[platformId] = platformGroups[0].PlayerGroupId;\n }\n }\n /**\n * For the case when multiple groups available for the platform,\n * the only single group with regionMatch: true is considered as eligible.\n * In case if several groups has regionMatch: true, it is considered there is no eligible groups at all.\n */\n const regionMatchedGroups = platformGroups.filter((group) => group.RegionMatch);\n const isOnlyOneRegionMatchedGroup = regionMatchedGroups.length === 1;\n if (isOnlyOneRegionMatchedGroup) {\n return platforms[platformId] = regionMatchedGroups[0].PlayerGroupId;\n }\n\n return;\n });\n\n return platforms;\n };\n\n /** At the moment we consider that response can have only one group */\n private static getNDAStatus(response: IGetPlayerProfileResponse): NDA_STATUS {\n const group: IPlayerGroupResponse = response.PlayerGroups[0];\n switch (group?.PlayerSystemInfo?.Components?.NDA) {\n case 'true':\n return NDA_STATUS.SIGNED;\n case 'false':\n return NDA_STATUS.NOT_SIGNED;\n case '':\n default:\n return NDA_STATUS.NOT_SPECIFIED;\n }\n }\n\n private static getCTA(response: IGetPlayerProfileResponse): string | null {\n const group: IPlayerGroupResponse = response.PlayerGroups[0];\n return group?.PlayerSystemInfo?.Components?.CTA ?? null;\n }\n\n /** Convert Beta API error to application-specific error */\n private static getBetaErrorFromResponse(error: AxiosError): IBetaError {\n const result: IBetaAPIError = error.response!.data as IBetaAPIError;\n return {\n code: result.ErrorCode,\n description: result.ErrorDescription,\n message: result.ErrorMessage\n };\n }\n\n private static request(options: AxiosRequestConfig): Promise {\n return this.AXIOS_INSTANCE.request({ ...options, responseType: 'json' })\n .then((response: AxiosResponse): T => {\n return response.data;\n }).catch((e: AxiosError): never => {\n throw this.getBetaErrorFromResponse(e);\n });\n }\n}\n","const { IS_DEVELOPMENT_ENV } = require('./sitegen');\n\n/** @type {string} */\nconst { ENABLE_DEV_TOOLS } = process.env;\n/** @type {boolean} */\nconst ARE_DEV_TOOLS_ENABLED = !!ENABLE_DEV_TOOLS || IS_DEVELOPMENT_ENV;\n\nmodule.exports.ARE_DEV_TOOLS_ENABLED = ARE_DEV_TOOLS_ENABLED;\n\n// This object can be adjusted in the future for fine-grained control over development tools in different SiteGen environments\nmodule.exports.DEV_TOOLS_CONFIG = {\n SOURCE_MAPS: ARE_DEV_TOOLS_ENABLED,\n REDUX_EXTENTION: ARE_DEV_TOOLS_ENABLED,\n REDUX_LOGGER: ARE_DEV_TOOLS_ENABLED\n};\n\nmodule.exports.ENABLE_DEV_TOOLS = ENABLE_DEV_TOOLS;\n","/** @type {string} */\nconst UAT = 'uat';\n/** @type {string} */\nconst QC = 'qc';\n/** @type {string} */\nconst PRODUCTION = 'production';\n/** @type {string} */\nconst PREPROD = 'preproduction';\n/** @type {string} */\nconst DEVELOPMENT = 'development';\n\n/** @type {string} */\nconst SITEGEN_ENV = process.env.SITEGEN_ENV || DEVELOPMENT;\n\n/** @type {boolean} */\nconst IS_QC_ENV = SITEGEN_ENV === QC;\n/** @type {boolean} */\nconst IS_UAT_ENV = SITEGEN_ENV === UAT;\n/** @type {boolean} */\nconst IS_PRODUCTION_ENV = SITEGEN_ENV === PRODUCTION;\n/** @type {boolean} */\nconst IS_PREPROD_ENV = SITEGEN_ENV === PREPROD;\n/** @type {boolean} */\nconst IS_DEVELOPMENT_ENV = SITEGEN_ENV === DEVELOPMENT;\n\nmodule.exports = {\n QC,\n UAT,\n PRODUCTION,\n PREPROD,\n DEVELOPMENT,\n IS_QC_ENV,\n IS_UAT_ENV,\n IS_PRODUCTION_ENV,\n IS_PREPROD_ENV,\n IS_DEVELOPMENT_ENV,\n SITEGEN_ENV\n};\n","var map = {\n\t\"./beta-registration/root/index\": [\n\t\t28384,\n\t\t5269,\n\t\t6480,\n\t\t1752,\n\t\t6385,\n\t\t967\n\t],\n\t\"./beta-v2/root/index\": [\n\t\t71146,\n\t\t5269,\n\t\t6480,\n\t\t4120,\n\t\t1878\n\t],\n\t\"./free-content/root/index\": [\n\t\t71730,\n\t\t5269,\n\t\t4418\n\t],\n\t\"./friends-referral/root/index\": [\n\t\t44519,\n\t\t5269,\n\t\t1752,\n\t\t7504,\n\t\t2740\n\t],\n\t\"./redeem/root/index\": [\n\t\t78176,\n\t\t5269,\n\t\t6480,\n\t\t6385,\n\t\t3178\n\t]\n};\nfunction webpackAsyncContext(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\treturn Promise.resolve().then(() => {\n\t\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\t\te.code = 'MODULE_NOT_FOUND';\n\t\t\tthrow e;\n\t\t});\n\t}\n\n\tvar ids = map[req], id = ids[0];\n\treturn Promise.all(ids.slice(1).map(__webpack_require__.e)).then(() => {\n\t\treturn __webpack_require__(id);\n\t});\n}\nwebpackAsyncContext.keys = () => (Object.keys(map));\nwebpackAsyncContext.id = 43502;\nmodule.exports = webpackAsyncContext;"],"names":["map","webpackContext","req","id","webpackContextResolve","__webpack_require__","o","e","Error","code","keys","Object","resolve","module","exports","CHECK_REFERRER_ELIGIBILITY_URL","FRIEND_INVITEES_URL","REGISTER_PLAYER_URL","GET_CAMPAIGN_INFO_URL","GET_INVITE_INFO_URL","ACCEPT_INVITATION_URL","GET_REWARDS_INFO_URL","GET_CAMPAIGN_STATUS_URL","GET_PLAYERS_ELIGIBILITY_URL","GET_PLAYERS_URL","GET_INVITEE_CONVERSION_STATUS","GRANT_TYPES","TYPES","CONJUNCTION_TYPES","CONVERSION_RULES_TYPES","CONVERSION_RULES_TYPES_ID","STAT_API_CALL","STAT_NOTIFICATION","STAT_MATCH_NOTIFICATION","CONVERSION_RULES_ID_TO_TYPES","invert","CONJUNCTION_TYPES_ID","AND","OR","CONJUNCTION_ID_TO_TYPES","GRANT_TYPES_ID","BOTH","REFERRER","INVITEE","TYPES_ID","TRIAL","RETENTION","ERROR_TYPE","PLAYER_ERRORS_CODES","PLAYER_IS_NOT_REGISTERED","PLATFORM_TO_REFERRAL_PLATFORM_ID","PC","PS4","XONE","XSX","PS5","SWITCH","STADIA","REFERRAL_PLATFORM_ID_TO_PLATFORM","FriendsReferralApiService","configureSession","options","this","AXIOS_INSTANCE","defaults","headers","ticket","USER_ID","userId","SESSION_CONFIGURED","configureAPI","ENV","env","CAMPAIGN_ID","campaignId","API_CONFIGURED","configureFakeAPI","then","getInvitees","inviteFriends","Promise","getRewardsInfo","request","checkIfApiConfigured","responseType","response","data","isSuccessful","success","catch","error","getNetworkErrorFromResponse","getFriendsReferralErrorFromResponse","failure","register","platform","url","getRegisterURL","href","method","getPrivateKey","key","acceptInvitation","getAcceptInvitationUrl","setQuery","invitationId","getEligibilityInfo","getReferrerEligibilityURL","eligibilityResponse","platformEligibility","reduce","result","item","platformId","isEligible","getPlayersEligibility","ids","checkIfSessionConfigured","getPlayersEligibilityUrl","getPlayers","getPlayersUrl","getCampaignInfo","getCampaignInfoURL","campaignSpaces","conversionConfig","conjunction","rules","name","crossPlatform","softClosingDate","endDate","platformLock","spaces","acc","space","spaceIdStats","conversion","filter","rule","type","softCloseMode","getPlayerInfo","playerInfos","isEmpty","isReferrer","referrerUbiAccountId","referrerId","isConverted","API_ERROR","getInviteesURL","ubiIdList","length","requests","chunk","idsChunk","all","getRewardsInfoURL","rewardsResponse","rewardItem","levelNumber","rewardsIds","levelLimit","push","levelRepeat","getCampaignStatus","getCampaignStatusUrl","getInviteInfo","getInviteInfoUrl","invitationInfo","getInviteeConversionStatus","host","template","toString","segment","values","pageIndex","page","pageSize","size","parseInt","errorCode","message","errorMessage","status","NETWORK_ERROR","checkRewardEligible","isInviteeGrantType","grantType","isActive","active","isTrialType","isRetentionType","isBeforeExpiration","date","expirationTime","isValid","isBefore","WEBSITE_MODE","PLATFORM_TYPES","PLATFORM_XBOX_ONE","PLATFORM_XBOX_SERIES","PLATFORMS","displayName","REDEEM_PLATFORMS","EPIC","LUNA","BETA_PLATFORMS_V2","IOS","ANDROID","OCULUSVR","STEAMVR","BETA_PLATFORMS","WEB","MOBILE","AMAZON","DEFAULT_PLATFORMS","DEFAULT_WEBSITE_PLATFORM_SELECTION_ENUM","DATA_PLATFORMS_AMOUNT","keyBy","WEBSITE_FLOW","REGISTER_DOMAIN","FREE_WEEKEND_DOMAIN","TWITCH_PRIME_DOMAIN","REDEEM_DOMAIN","PC_PROMO","FRIENDS_REFERRAL_DOMAIN","formWebsiteSubdomain","subdomain","DEV","QC","UAT","PREPROD","PROD","WEBSITE_DEFAULT_ANALYTIC_NAME","WEBSITES_FLOW_SUFFIX","BETA_REGISTRATION","BETA_APPROVAL","BETA_REGISTRATION_V2","BETA_APPROVAL_V2","BETA_GUARANTEED_ACCESS_V2","OPEN_BETA","ULC_REDEEM","CF_REDEEM","CF_REDEEM_V2","PYC_REDEEM","TWITCH_PRIME","STANDARD_REGISTRATION","FREE_WEEKEND","TRIALS","DEMO","FRIENDS_REFERRAL","GIVEAWAY","PROMOTAB","WEBSITES_WIDGET_NAME_BY_FLOW_ID","WEBSITES_FLOW_ID_BY_WIDGET_NAME","WEBSITE_DISPLAY_NAME_BY_FLOW_ID","WEBSITE_DISPLAY_NAME_BY_WIDGET_NAME","forEach","flowId","WEBSITE_FLOW_SUFFIX_BY_WIDGET_NAME","LANGUAGES_MOMENT_FORMAT","AR_AE","time","CS_CZ","DA_DK","DE_DE","EN_AU","EN_CA","EN_GB","EN_US","ES_ES","ES_MX","FI_FI","FR_CA","FR_FR","HU_HU","IT_IT","JA_JP","KO_KR","NB_NO","NL_NL","NN_NO","PL_PL","PT_BR","PT_PT","RU_RU","SV_SE","TH_TH","TR_TR","UK_UA","ZH_CN","month","ZH_TW","LANGUAGES_DATA","languageVariantTag","languageCode","region","EMEA","languageVariantCode","languageName","NCSA","getRegionLanguageTags","language","EMEALanguages","NCSALanguages","LANGUAGES_MAP","LANGUAGE_NAMES_MAP","LANGUAGE_TO_REGION_MAP","LANGUAGE_FORMAT_MAP","entries","localeKey","momentFormat","isUndefined","isMonthDeclensionNeeded","LANGUAGE_REGION","REGION_TO_DEFAULT_LANGUAGE","LOCALE","locale","index","LOCATION_REGION","COUNTRY","COUNTRIES","subregion","EE","CN","FR","JP","RU","COUNTRIES_BY_REGION","AI","AG","AR","AW","BS","BB","BZ","BM","BO","BQ","BR","CA","KY","CL","CO","CR","CU","CW","DM","DO","EC","SV","GF","GD","GP","GT","GY","HT","HN","JM","MQ","MX","MS","NI","PA","PY","PE","PR","BL","KN","LC","MF","PM","VC","SX","SR","TT","TC","US","UY","VE","VG","VI","AF","AX","AL","DZ","AD","AO","AT","BH","BE","BJ","BA","BW","BV","BG","BF","BI","CM","CV","CF","TD","KM","CD","CG","CI","HR","CY","CZ","DK","DJ","EG","GQ","ER","ET","FK","FO","FI","GA","GM","GE","DE","GH","GI","GR","GL","GG","GN","GW","VA","HU","IS","IR","IQ","IE","IM","IL","IT","JE","JO","KZ","KE","KV","KR","KW","LV","LB","LS","LR","LY","LI","LT","LU","MK","MG","MW","ML","MT","MR","MU","YT","MC","ME","MA","MZ","NA","NL","NE","NG","NO","OM","PS","PL","PT","QA","RE","RO","RW","SH","SM","ST","SA","SN","RS","SC","SL","SK","SI","SO","ZA","GS","ES","SD","SJ","SZ","SE","CH","SY","TZ","TG","TN","TR","TH","UG","AE","GB","EH","YE","ZM","ZW","MENA","ANZ","AS","AU","CK","FJ","FM","GU","KI","MH","MP","NC","NF","NR","NU","NZ","PF","PG","PN","PW","SB","TK","TO","TV","UM","VU","WF","WS","UA","AM","AZ","BY","KG","MD","TJ","TM","UZ","COUNTRIES_BY_UBI_PLUS","noUbiPlus","AQ","IO","CX","TF","HM","delay","ms","setTimeout","Regions","UBI_SERVICES_ENDPOINT","UBI_EVENTS_ENDPOINT","FRIENDS_REFERRAL_ENDPOINT","getEnvDependentEndpoint","WORLD","CHINA","envName","source","countryCode","instance","isProd","checkRegions","getUbiServicesEndpoint","getUbiEventsEndpoint","getFriendsReferralEndpoint","isBetaV2Widget","widgetName","includes","isBetaRegistrationV2Widget","isBetaApprovalV2Widget","isBetaApprovalWidget","isBetaGuaranteedAccessV2Widget","isBetaRegistrationWidget","isRedeemV2Widget","reducerHOF","initialState","state","reducerKey","createApplicationStore","reducers","rootEpics","middleware","epicMiddleware","createEpicMiddleware","rootReducer","composeEnhancers","REDUX_LOGGER","createLogger","collapsed","REDUX_EXTENTION","window","store","run","combineEpics","BootstrapAPI","constructor","widgetConfig","mounted","root","unmount","targetNode","prepareMount","widgetsComponents","widgetsRootEpics","widgetsReducers","self","node","callback","render","mount","configureI18n","config","initialTranslations","fetch","dictionaries","init","configureUbisoftConnectService","bootstrapConfig","websiteAbsolutePath","configure","IS_DEVELOPMENT_MODE","configReducerKey","configReducerHOF","dictionariesReducerKey","dictionariesReducerHOF","embeddedAppConfigReducerKey","embeddedAppConfigReducerHOF","loadAndConfigureWidgets","widgets","widgetType","modules","configureAll","configureWidget","bootstrapOptions","applicationConfig","isPreviewMode","previewMode","initialReducers","embeddedAppConfig","preview","mode","setCaching","configureServices","Container","RootEpic","Reducers","ReducersMock","widgetReducers","defaultTranslationKeyOptions","gameName","GameName","PhaseName","MODIFIED_TRANSLATION_KEYS_OPTION_NAMES","MODIFIED_TRANSLATION_KEYS_OPTIONS","PLATFORM","STEAM","modifyTranslationKeysOptions","value","modifiedList","split","val","join","translate","namespaces","Component","translateHOC","props","propsWithoutT","originalTranslateKey","t","dangerouslyTranslateWithHTML","translationOptions","translationOptionsWithDefault","merge","addDefaultTextKeysOptions","translatedOptions","fromPairs","toPairs","pair","className","dangerouslySetInnerHTML","__html","translationNameSpaces","TRANSLATIONS","FALLBACK_TRANSLATIONS","ERROR_KEYS","WIDGET_ERROR_TITLE","WIDGET_ERROR_MESSAGE","WIDGET_ERROR_NOT_ELIGIBLE","WIDGET_ERROR_UNDERAGE","WIDGET_ERROR_INVITE_EXCEEDED_TITLE","WIDGET_ERROR_INVITE_EXCEEDED_DESCRIPTION","SUPPORT_TEXT_KEYS","FAQ","FAQ_V2","NO_FAQ","FAQ_FORMAT","DEFAULT_LANGUAGE","PLATFORM_URL_PARAMETER","DELIMITER","DELIMITER_V2","PLATFORMS_ORDER","PLATFORM_DISPLAY_NAMES","PLATFORM_DISPLAY_PROPS","isLinkable","iconClass","UPLAY","linkAppText","XBL","PSN","String","toLowerCase","loginSessionMock","NEW_LOGIN","sessionId","isUbisoftConnectAuthenticated","UbisoftConnectProfile","op","ref","user","profileId","platformType","idOnPlatform","nameOnPlatform","UbisoftConnectProfiles","UbisoftConnectTicket","getCustomStyles","shouldInheritStyles","singleValue","provided","color","menu","background","border","control","backgroundColor","borderRadius","boxShadow","borderColor","option","isSelected","DropdownField","setFieldInput","input","onChange","meta","translateKey","translatePrefix","dropdownClassName","labelText","getLabelKey","isWarningVisible","submitFailed","placeholder","closeMenuOnSelect","getViewOptions","classNamePrefix","styles","fieldValue","optionTranslatePrefix","label","defaultValue","StringField","metaError","DateFormats","DateField","handleInputChange","year","getFullYear","format","getDate","getMonth","getInputMask","activeLanguageCode","MMDDYYYY","DDMMYYYY","dateFormat","selected","Date","customInput","alwaysShowMask","mask","maskPlaceholder","toUpperCase","TEXT_SUB_KEYS","REQUIRED_ERROR","NUMBER_MIN_ERROR","NUMBER_MAX_ERROR","LENGTH_MIN_ERROR","LENGTH_MAX_ERROR","IS_NOT_NUMBER_ERROR","IS_NOT_DATE_ERROR","SUBMIT","FIELD_VIEW_TYPES","FIELD_VIEW_COMPONENTS","INT","DATE","STRING","DROPDOWN","ANALYTICS_SCRIPT_URL","SITE_CATEGORY","ANALYTICS_GLOBAL_NS","ANALYTICS_SDK","ANALYTICS_READY_EVENT","ANALYTICS_EVENTS","ANALYTICS_ATTRIBUTES","category","action","signedIn","signedOut","signingIn","signingOut","DEFAULT_LOCATION","CATEGORY","initAnalyticsObservable$","Subject","epic$","BehaviorSubject","createEmptyAnalyticsEpics","action$","pipe","mergeMap","epic","loadAnalyticsEpicsAsync","importPromise","analyticsEpics","next","default","analyticsEpicCreator","types","store$","ofType","ignoreElements","setLanguage","actionTypes","get","country","updateAnalyticalData","setUserAnalyticsData","errorType","ubisoftId","cleanLoginAnalyticsData","setPlatformSelection","selectedPlatform","platformSelection","isAuthenticatedUser","isEnabled","hasUserAllowedTracking","flowType","flowStep","hostDomain","trackingEventsBuffer","initAnalytics","isAnalyticsEnabled","analyticsEnvironment","location","hostname","addEventListener","event","flushTrackingEventsBuffer","embedded","analyticsAccepted","assignInitialData","injectAnalyticsScript","sendPageEvent","websiteData","pageEventData","appId","brand","environment","game","genomeId","pageName","siteName","siteType","siteSection","siteSubSection","track","PAGE_EVENT","sendAccountEvent","ACCOUNT_EVENT","sendFlowEvent","flowEvent","locationDetail","FLOW_EVENT","bufferizeTrackingEvent","trackingEvent","eventName","configData","useUrl","find","c","siteCategory","applicationId","analyticsBrand","analyticsGame","analyticsSiteName","mdmBrand","analyticsMDMBrandId","mdmInstallmentId","analyticsMDMInstallmentId","doNotTrack","script","document","createElement","setAttribute","onload","isFunction","err","console","body","appendChild","triggerOptIn","initPrivacyOptions","triggerInitialPageEvents","hasLoginSession","analyticsLoginAction","loggedIn","loggedOut","AnalyticsProvider","componentDidMount","analyticsFlowType","analyticsConfigData","EMBEDDED","TRANSLATION_NAME_SPACES","i18nService","useCache","initMoment","i18nextInstance","use","resources","ns","fallbackNS","debug","react","useSuspense","nsMode","saveMissing","missingKeyHandler","args","warn","changeLanguage","translationsPath","fallbackTranslationsPath","configureMoment","getTranslationsPromise","reject","getFallbackTranslationsPromise","fallbackTranslation","translations","fallbackTranslations","addResourceBundle","parentLocale","getAnalyticsLabel","getFixedT","memoizedGET","memoize","fetchLanguage","path","cacheResult","resolveBasePathname","configPath","lastIndexOfConfigPath","pathname","lastIndexOf","substringIndex","substring","LANGUAGE_CODE_REGEX","LOCALE_SEPARATOR","URL_PARAM_SEPARATOR","EN_NORDIC","LANGUAGE_TO_LOCALE_MAPPING","en","locales","fr","es","patterns","regex","ca","pt","zh","no","nb","da","de","fi","hu","it","nl","pl","ru","sv","tr","uk","ar","ja","ko","th","cs","nn","GET_LOCALE_TEXT","LANGUAGE_CODE_LENGTH_ERROR","getSafeLocale","param","params","undefined","getUnsafeLocaleFromUrlParam","getLocaleFromUrl","getLocaleFromLanguage","useBrowserFallback","navigator","getLocaleFromBrowserLanguage","useAvailableLocales","availableLocales","filterByAvailableLocales","test","localeFromLanguage","localeFromRule","checkLocaleRules","localeFromPattern","i","pattern","checkPatternRules","getShortLanguageCode","getCountryFromLanguage","LOG_OUT_DONE","LOG_OUT_ERROR","SET_LOGIN_FETCHING","HAS_SESSION_ALREADY","SET_LOGIN_SESSION","REMOVE_LOGIN_SESSION","SET_TPC_ENABLED","LOGIN_TYPE","STYLES","CONTENT","TEXT_KEYS","BUTTON_LOGIN","POPIN_SUBTEXT","LOGIN_FLOW_STEP","LOGIN_FLOW_ACTIONS","UbisoftAPIService","baseURL","session","interceptors","getFriendList","getFriendProfile","getIPLocation","getUserProducts","friends","getStatByName","spaceId","statName","mapValues","stats","stat","_name","UbiAccountId","getUserInfo","products","USER_FRIEND_LIST_URL","USER_FRIEND_PROFILE_URL","USER_PRODUCTS_URL","USER_PROFILE_STAT_TEMPLATE","USER_DETAIL_INFO_URL","IP_LOCATION_URL","USER_FRIEND_STATUS","UBISOFT_CONNECT_PLATFORM_TYPES","PLATFORMS_TO_UBISOFT_PROFILE_PLATFORMS","PLATFORM_TO_EXTERNAL_LOGIN_OPTION","EXTERNAL_LOGIN_OPTIONS","UBISOFT","XBOX","TWITCH","APPLICATION_ID_PARAM_NAME","GENOME_ID_PARAM_NAME","UBICONNECT_LOGGED_IN","CONNECT_LOGIN_LOCATION","AUTH_URL_POPUP","AUTH_URL","UbisoftConnectService","sizeSubject","receiveUbisoftConnectIframeMessage","isLoginMessage","isSizeChangedMessage","reInit","loginCallback","prepareConfig","nextUrl","decodeURIComponent","createNextURL","filename","generateConnectNextUrl","hasTPCEnabled","getLoginPopIn","externalLogin","iframe","sandbox","add","query","lang","classList","width","height","isCorrectGenomeId","isCorrectTopic","topic","topicOfPostMessage","isCorrectApplicationId","JSON","parse","connectRoute","windowHeight","registerLoginCallback","openLoginPopUp","align","connectNextUrl","URL","searchParams","set","popupSize","features","left","top","open","SUCCESS_NEXT_URL","search","calculatePopupSize","dualScreenLeft","screenLeft","screenX","dualScreenTop","screenTop","screenY","innerWidth","documentElement","clientWidth","screen","innerHeight","clientHeight","defaultPopupHeight","defaultPopupWidth","getConnectEndpoint","isSafari","userAgent","OVERLAY_SDK_LOCATION","HEADER_HEIGHT","INTEGRATOR_TRIGGER_LOGOUT","INTEGRATOR_TRIGGER_USER_DATA","OVERLAY_INIT_ERROR_MESSAGE","getEmbeddedOverlay","onError","onSuccess","maxAttempts","reserve","overlayWidget","overlayConnectSDK","hasInitialized","OverlayServiceMock","openLoginPopup","changeLocale","triggerEmailActivation","getUserStatus","_userData","getThirdPartyStatus","getTicket","getProfiles","payload","profiles","cloneDeep","UbisoftOverlayService","overlayLoginTriggerSubject","overlayLogoutTriggerSubject","install","onInitDone","receiveUbisoftOverlayMessage","onInitCallback","initEmbeddedFlow","loadSDKScript","overlaySDK","isLoginEvent","isLogoutEvent","getProfilesFallback","gotProfiles","timeoutId","subscribe","getProfilesResponse","clearTimeout","containerSelector","container","onInstallDone","loginType","showSignInText","onConnect","Boolean","getConfig","scriptId","scriptUrl","getOverlaySDKEndpoint","login","getTicketResponse","userData","gotTPS","getThirdPartyStatusResponse","logout","_reject","isCSSVariableSet","variable","getComputedStyle","getPropertyValue","getModeClass","isEmbedded","STANDALONE","formatHours","timeMoment","standardizeLocale","timeFormat","localizeDate","localizeMonth","prefix","suffix","isLocaleValid","RegExp","URLSearchParams","WindowHistoryService","disableHistoryUpdates","updateHistory","pushState","basePath","origin","history","BETA_API_ERROR","NDA_STATUS","PLATFORM_TO_BETA_PLATFORM_ID","PS3","X360","WIIU","BETA_PLATFORM_ID_TO_PLATFORM","lodash","REGION_MATCH_ONLY_PLATFORMS","betaCustomFieldsAdapter","customFields","field","UsedForPlayerRegistration","sort","a","b","OrderNumber","fieldDefinition","Value","Array","isArray","fieldType","getFieldType","Name","DefaultValue","isRequired","IsMandatory","BetaManagerAPIService","getFriendListForBeta","getPlayerBetaKeys","inviteFriendToBeta","getInvitedFriends","getPlayerProfile","getPlayerProfileURL","getPlayerProfileFromResponse","getCustomFields","getCustomFieldsURL","getCustomFieldsFromResponse","getPlatformPlayerGroups","getPlatformPlayerGroupsURL","getPlatformPlayerGroupsFromResponse","groups","PlayerGroups","tag","setPlayerBetaProfile","newPlatform","alreadyRegisteredForBeta","addQuery","newPlatformId","getRegisterForBetaInfo","setPlayerActiveBetaGroup","setPlayerBetaGroupURL","getFriendListForBetaURL","Friends","friend","FriendId","phaseId","PlayerKeys","PlayerKey","PlatformId","playerGroupId","PlayerGroupId","friendIdList","getFriendListForBetaInChunks","getFriendListForBetaRequest","getInvitationInfo","invitation","friendIdListChunks","requestsFired","flatten","PlayerSystemInfo","Components","CTA","getRegisterForBetaCTA","cta","isNDASignedByUser","NDA","ubiMail","Ubimail","customFieldValues","ctaFromUrl","encodeURIComponent","trim","SystemFields","group","approved","IsApproved","sourceIdList","PlayerSourceIds","UserId","banned","BannedInBeta","nda","getNDAStatus","getCTA","Invitation","SIGNED","NOT_SIGNED","NOT_SPECIFIED","getBetaErrorFromResponse","ErrorCode","description","ErrorDescription","ErrorMessage","tagFromConfig","platforms","groupsByPlatform","groupBy","betaPlatformId","responsePlatformGroups","platformGroups","isOnlyOneGroup","Tags","regionMatchedGroups","RegionMatch","IS_DEVELOPMENT_ENV","ENABLE_DEV_TOOLS","ARE_DEV_TOOLS_ENABLED","SOURCE_MAPS","PRODUCTION","DEVELOPMENT","SITEGEN_ENV","IS_QC_ENV","IS_UAT_ENV","IS_PRODUCTION_ENV","IS_PREPROD_ENV","webpackAsyncContext","slice"],"sourceRoot":""}