{"version":3,"sources":["common/utils/env.ts","common/polyfill.ts","index/Container.less","components/Loading/index.less","index/Container.tsx","common/utils/loadScript.ts","common/utils/index.ts","config.ts","common/consts.ts","common/sendLogV3/index.ts","common/sendLogV3/export.ts","index/App.tsx","common/services/index.ts","components/Loading/index.tsx"],"names":["isNode","window","isBrowser","isBoe","process","env","LOAD_SERVICE_PSM","TCE_PSM","endsWith","TCE_HOST_ENV","isIOS","document","cookie","includes","test","navigator","userAgent","isAndroid","isWeixin","isQQ","console","info","module","exports","Container","Map","titleWithI18n","de","en","es","fr","id","ja","ko","pt","th","descWithI18n","BE_NULL","getAppType","UA","LAUNCH_FROM","OS","HAS_FETCHED_GEO","HAS_START_FETCH_GEO","geoInfo","city","continent","country","subdivisions","HAS_INITED_APP_ID","APP_ID","runtime","appId","HAS_INITED_ACTIVITY_ID","ACTIVITY_ID","actId","AREA_SIGNAL","DEFAULT_DATA","QUERY","Object","create","matches","location","search","match","length","query","forEach","str","idx","indexOf","substr","decodeURIComponent","parseQuery","genRandomStr","re","charLen","i","Math","floor","random","EVENT_ID","getSessionId","sessionid","sessionStorage","getItem","setItem","getOS","HAS_CONFIG_CUS_HEADER","getCustomsHeader","hostname","defaultLogMessageFn","event","params","log","Date","toLocaleString","JSON","stringify","initSendLogV3","app_id","activity_id","default_data","zone","Error","keys","key","getGeoCount","getGeoInfo","a","fetch","origin","res","json","jsonData","data","timeGroups","getPassportId","ppuid_for_tea_gamesdk","_","setLogParam","sendLogV3","group_data","name","type","beconEvent","collectEvent","environment","duration_json","getTime","open_id","role_id","device_id","server_id","from_source","token","scenese","actForms","_params","aid","String","user_unique_id","os","launch_from","launch_way","activity_type","activity_link_id","is_share","href","event_id","session_id","timestamp","now","activity_form","join","params_for_special","url","pathname","full_url","page_id","refer_url","referrer","passport_id","Tea","_Tea","shareImageMap","start","App","props","_ssrData","prefetchData","language","isInit","code","index","renderTDK","title","replace","description","posterList","posterImage","useEffect","pageConfig","page_text","duration","Helmet","property","content","disableStream","init","context","level","request","targetRenderLevel","Number","prefetch","imageUrl","shareImageUrl","config","features","ssr","customPrefetch","LoadingComponent"],"mappings":"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","file":"static/js/index.f986f6f498e963c2.chunk.js","sourcesContent":["export const isNode = typeof window === 'undefined';\nexport const isBrowser = !isNode;\n\nconst getPSM = () => {\n if (isBrowser || typeof process === 'undefined') {\n return '-';\n }\n const psm = process.env.LOAD_SERVICE_PSM || process.env.TCE_PSM || '-';\n return psm;\n};\n\nexport const isInternal = getPSM().endsWith('_internal');\n\nexport const emptyFn = () => {\n //\n};\nexport const isDev = process.env.NODE_ENV === 'development';\nexport const isBoe = process.env.TCE_HOST_ENV === 'boe';\nexport const isTestEnv =\n (isBrowser && document.cookie.includes('env=test')) || (isNode && isBoe);\n\nconst publicPath = isTestEnv\n ? '//p1.dailygn.com/obj/'\n : '//s16b.tiktokcdn.com/toutiao/fe/long_cache/';\nexport const baseUrl = isDev ? '/' : publicPath;\nexport const isIOS = isBrowser && /iPhone/i.test(window.navigator.userAgent);\nexport const isAndroid =\n isBrowser && /Android/i.test(window.navigator.userAgent);\n\nexport const isByte =\n isBrowser &&\n (/(NewsArticle)[\\s/_](\\d.\\d.\\d)/i.test(window.navigator.userAgent) ||\n /aweme_\\d+/i.test(window.navigator.userAgent) ||\n /live_stream_\\d+/i.test(window.navigator.userAgent) ||\n /VideoArticle/i.test(window.navigator.userAgent) ||\n /Super \\d.\\d.\\d/i.test(window.navigator.userAgent));\nexport const isGSDK =\n isBrowser && /BDGameSDK/i.test(window.navigator.userAgent);\nexport const isWeixin =\n isBrowser && /micromessenger/i.test(window.navigator.userAgent);\nexport const isQQ =\n isBrowser && /QQ\\/([\\d.]+)/.test(window.navigator.userAgent) && !isWeixin;\nexport const isQQBrowser =\n isBrowser &&\n /MQQBrowser/i.test(window.navigator.userAgent) &&\n !isWeixin &&\n !isQQ;\nexport const isQzone = isBrowser && /Qzone/i.test(window.navigator.userAgent);\nexport const isUcAndroidBrowser =\n isBrowser && /UCBrowser/i.test(window.navigator.userAgent) && isAndroid;\nexport const isUcIosBrowser =\n isBrowser && /UCBrowser/i.test(window.navigator.userAgent) && isIOS;\n\nexport function getServicePSM() {\n return `ttgame.platform.gms_act_gateway${isInternal ? '_internal' : ''}`;\n}\n\nexport function getCgameShiftServicePSM() {\n return isInternal\n ? 'ttgame.platform.gactivity_sandbox'\n : 'ttgame.platform.gactivity';\n}\n","import 'whatwg-fetch';\n\nconsole.info('--polyfill--');\n","// extracted by mini-css-extract-plugin\nmodule.exports = {\"error\":\"Container__error--2_x9_\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"mask\":\"index__mask--3e9BQ\",\"loading\":\"index__loading--3vACX\",\"flip\":\"index__flip--1pTGB\"};","import React from 'react';\nimport './Container.less';\n\nexport default function Container() {\n return <>;\n}\n","/* eslint-disable eslint-comments/disable-enable-pair */\n/* eslint-disable promise/param-names */\nconst scriptsMap = new Map();\nexport function loadScript(url: string, checkFn: () => boolean) {\n if (scriptsMap.get(url)) {\n return scriptsMap.get(url);\n }\n const script = document.createElement('script');\n script.src = url;\n document.head.appendChild(script);\n let resolve: any = null;\n let reject: any = null;\n let checking = true;\n const tick = () => {\n if (!checkFn) {\n return;\n }\n if (checkFn()) {\n resolve();\n } else if (checking) {\n setTimeout(() => tick, 50);\n }\n };\n\n script.onload = () => {\n script.onerror = null;\n script.onload = null;\n if (!checkFn) {\n checking = false;\n resolve();\n } else {\n tick();\n }\n };\n script.onerror = () => {\n script.onerror = null;\n script.onload = null;\n reject();\n };\n tick();\n scriptsMap.set(\n url,\n new Promise((r, j) => {\n resolve = r;\n reject = j;\n }),\n );\n return scriptsMap.get(url);\n}\n","import { isBrowser } from './env';\n\nexport * from './loadScript';\nexport { default as http } from './http';\n\nexport function parseQuery(): { [key: string]: any } {\n const { search } = location;\n const r = /([^=&?#]+)=([^&#]*)/g;\n const matches = search.match(r);\n if (!matches || !matches.length) {\n return {};\n }\n const query = {};\n matches.forEach(str => {\n const idx = str.indexOf('=');\n query[str.substr(0, idx)] = decodeURIComponent(str.substr(idx + 1));\n });\n return query;\n}\n\nexport const isSandbox = () => {\n if (!isBrowser) {\n return false;\n }\n\n const { hostname } = location;\n\n return (\n hostname.includes('.bytedance.net') || hostname === 'act-sandbox.snssdk.com'\n );\n};\n","// eslint-disable-next-line eslint-comments/disable-enable-pair\n/* eslint-disable import/no-anonymous-default-export */\nexport default {\n appId: 262304,\n actId: 30111563,\n appName: '',\n region: 'SG',\n enableShark: false,\n title: '赛季回顾中转页',\n description: '描述',\n image: '',\n ppe: ''\n};\n","export const langMap = {\n en: 'en-US',\n 'zh-Hant': 'zh-TW',\n de: 'de_DE',\n th: 'th-TH',\n fr: 'fr_FR',\n id: 'id-ID',\n ja: 'ja-JP',\n ko: 'ko_KR',\n pt: 'pt_BR',\n es: 'es'\n};\n\nexport const titleWithI18n: Record = {\n de:\n 'Verbinde dich mit mir im MARVEL SNAP Webshop, indem du den {{ReferralCode}} eingibst. Lass uns gemeinsam noch mehr Belohnungen sichern!',\n en:\n 'Connect with me on the MARVEL SNAP Webshop by inputting {{ReferralCode}} and we will earn more rewards together!',\n es:\n 'Conéctate conmigo en la tienda web de MARVEL SNAP introduciendo el {{ReferralCode}} y obtengamos más recompensas juntos.',\n fr: `Connecte-toi avec moi sur la boutique en ligne de MARVEL SNAP en saisissant {{ReferralCode}} et nous gagnerons plus de récompenses ensemble !`,\n id:\n 'Terhubunglah denganku di Toko Web MARVEL SNAP dengan memasukkan {{ReferralCode}} dan kita akan mendapatkan lebih banyak hadiah bersama!',\n ja:\n 'MARVEL SNAPウェブショップに {{ReferralCode}} を入力して私のアカウントと接続し、一緒にもっとたくさんの報酬を獲得しましょう!',\n ko:\n '{{ReferralCode}} 코드를 입력하고 마블스냅 웹 상점에서 연동해 주세요. 함께 더 풍성한 보상을 얻을 수 있어요!',\n pt:\n 'Conecte-se comigo na loja virtual do MARVEL SNAP inserindo {{ReferralCode}} e vamos ganhar mais recompensas juntos!',\n th:\n 'เชื่อมต่อกับฉันในร้านค้าบนเว็บ MARVEL SNAP โดยการใส่รหัส {{ReferralCode}} แล้วเราจะได้รับรางวัลร่วมกัน!',\n 'zh-Hant': '在《漫威:瞬戰超能》網路商店與我連結,輸入{{ReferralCode}}攜手贏得豐厚獎勵!'\n};\n\nexport const descWithI18n: Record = {\n de:\n 'MARVEL SNAP ist ein rasanter Card Battler. Im Spiel kannst du dein eigenes Superheldenteam aus Charaktere aus dem Marvel-Multiversum aufbauen. Das Spiel ist einfach und unkompliziert, ohne numerisches Wachstum. Lade einfach das Spiel herunter! Und genieße ein 5-minütiges spannendes PVP-Duell, in dem es um Intelligenz, Mut und Glück geht.',\n en:\n 'MARVEL SNAP is a fast-paced card battle game. In the game, you will be able to choose members from the Marvel multiverse to build your own super hero team.The game is simple and straightforward, with no numerical growth. Just download the game! And enjoy a 5-minute exciting PVP duel of intelligence, courage and luck.',\n es:\n 'MARVEL SNAP es un juego de batalla de cartas superrápido en el que podrás elegir miembros del multiverso de Marvel para crear tu propio equipo de superhéroes. El juego es simple y directo, sin crecimiento numérico. ¡Descárgalo ya! Y disfruta de un emocionante duelo JcJ de 5 minutos de inteligencia, valor y suerte.',\n fr: `MARVEL SNAP est un jeu de bataille de cartes palpitant. Choisissez parmi les personnages du multivers Marvel pour constituer votre propre équipe de super-héros. Le jeu est simple et facile à prendre en main. Téléchargez-le et vous ferez l'expérience de duels JcJ de 5 minutes mettant votre intelligence, votre courage et votre chance à l'épreuve.`,\n id:\n 'MARVEL SNAP adalah battle game dengan ritme cepat. Di game ini, kamu bisa memilih karakter dari multiverse Marvel untuk membentuk tim super hero favoritmu. Game ini sangat simple dan mudah tanpa penghitungan angka yang rumit. Download game-nya sekarang dan nikmati duel PVP 5 menit yang melibatkan kecerdasan, keberanian dan keberuntungan!',\n ja:\n 'MARVEL SNAP は極めて速いペースで行われるカードバトルゲームです。ゲーム内ではマーベルの世界からヒーローたちを選び抜いて自分だけのチームを構成できます。ゲーム自体は至極単純で、面倒な数式も演算も必要ありません。ダウンロードしてすぐ遊べます!5分あれば楽しめる運と勇気と頭脳をぶつける PVP デュエルを堪能しましょう!',\n ko:\n '마블스냅은 빠르게 진행되는 카드 배틀 게임입니다. 게임 내에서 마블 멀티버스의 캐릭터들을 선택하여 나만의 슈퍼히어로 팀을 구성할 수 있습니다. 수치적 성장이 없어 간단하고 직관적입니다. 지금 바로 게임을 다운로드하고 5분간 진행되는 치열한 PVP 결투를 즐겨 보세요! 지력, 용기, 운을 시험해 볼 시간입니다.',\n pt:\n 'MARVEL SNAP é um jogo frenético de batalha com cartas. Nele, você poderá escolher membros do Multiverso da Marvel para montar sua própria equipe de super-heróis. O jogo é simples, direto e balanceado — é só baixar! E divirta-se com um emocionante duelo de 5 minutos que coloca sua inteligência, coragem e sorte contra outro jogador à prova.',\n th:\n 'MARVEL SNAP เป็นเกมดวลการ์ดที่เดินเกมอย่างรวดเร็ว ในเกมนี้ คุณจะได้เลือกสมาชิกจากมาร์เวลมัลติเวิร์สเพื่อสร้างทีมซูเปอร์ฮีโร่ของคุณเอง เกมมีรูปแบบเข้าใจง่ายและตรงไปตรงมาโดยไม่ต้องพึ่งการเติบโตของตัวเลข เพียงแค่ดาวน์โหลดเกม! และสนุกไปกับการต่อสู้แบบ PVP อันน่าตื่นเต้นนาน 5 นาทีเพื่อประลองไหวพริบ ความกล้า และดวง',\n 'zh-Hant':\n '《漫威:瞬戰超能》,節奏明快的卡牌對戰遊戲。在遊戲中,玩家會挑選來自漫威多重宇宙的成員,打造專屬自己的超級英雄團隊。遊玩機制簡單直白,沒有戰力養成要素。立即下載遊戲!享受鬥智鬥勇鬥運氣的5分鐘精彩PVP對決。'\n};\n\nexport const posterImageWithI18n: Record = {\n en:\n 'https://p19-marketing-va.bytedgame.com/obj/g-marketing-assets-va/2024_10_22_09_42_19/poster-en_s516042.jpg',\n ja:\n 'https://p19-marketing-va.bytedgame.com/obj/g-marketing-assets-va/2024_10_22_09_42_19/poster-ja_s514246.jpg',\n ko:\n 'https://p19-marketing-va.bytedgame.com/obj/g-marketing-assets-va/2024_10_22_09_42_20/poster-ko_s512367.jpg',\n 'zh-Hant':\n 'https://p19-marketing-va.bytedgame.com/obj/g-marketing-assets-va/2024_10_22_09_42_22/poster-tw_s514362.jpg',\n de:\n 'https://p19-marketing-va.bytedgame.com/obj/g-marketing-assets-va/2024_10_22_09_42_21/poster-de_s515757.jpg',\n es:\n 'https://p19-marketing-va.bytedgame.com/obj/g-marketing-assets-va/2024_10_22_09_42_19/poster-es-LA_s514353.jpg',\n fr:\n 'https://p19-marketing-va.bytedgame.com/obj/g-marketing-assets-va/2024_10_22_09_42_20/poster-fr_s514097.jpg',\n id:\n 'https://p19-marketing-va.bytedgame.com/obj/g-marketing-assets-va/2024_10_22_09_42_19/poster-id_s515038.jpg',\n pt:\n 'https://p19-marketing-va.bytedgame.com/obj/g-marketing-assets-va/2024_10_22_09_42_23/poster-pt_s517073.jpg',\n th:\n 'https://p19-marketing-va.bytedgame.com/obj/g-marketing-assets-va/2024_10_22_09_42_23/poster-th_s505086.jpg'\n};\n","// tea参数默认值\nconst BE_NULL = 'be_null';\n\nconst getAppType = () => {\n const UA = navigator.userAgent;\n switch (true) {\n case /(NewsArticle)[\\s/_](\\d.\\d.\\d)/i.test(UA):\n return 'toutiao';\n case /aweme/i.test(UA):\n return 'douyin';\n case /live_stream_\\d+/i.test(UA):\n return 'huoshan';\n case /VideoArticle/i.test(UA):\n return 'xigua';\n case /Super \\d.\\d.\\d/i.test(UA):\n return 'pipixia';\n case /BDGameSDK/i.test(UA):\n return 'game';\n case /MicroMessenger/i.test(UA):\n return 'wechat';\n case / QQ/i.test(UA):\n return 'qq';\n case /-bcy\\/\\d.\\d.\\d/.test(UA):\n return 'banciyuan';\n default:\n return 'unknow';\n }\n};\n\nfunction parseQuery(): { [key: string]: any } {\n const { search } = location;\n const r = /([^=&?#]+)=([^&#]*)/g;\n const matches = search.match(r);\n if (!matches || !matches.length) {\n return {};\n }\n const query = {};\n matches.forEach(str => {\n const idx = str.indexOf('=');\n query[str.substr(0, idx)] = decodeURIComponent(str.substr(idx + 1));\n });\n return query;\n}\n\n// 地理位置信息\nlet HAS_FETCHED_GEO = false;\nlet HAS_START_FETCH_GEO = false;\nlet geoInfo = {\n city: BE_NULL,\n continent: BE_NULL,\n country: BE_NULL,\n subdivisions: BE_NULL,\n};\n\nlet isNode = typeof window === 'undefined';\n\n// app_id\nlet HAS_INITED_APP_ID = false;\nlet APP_ID = (function () {\n // 如是在红砖模版,直接取window.runtime\n if (!isNode && window.runtime) {\n const { appId } = window.runtime;\n HAS_INITED_APP_ID = true;\n return appId;\n }\n // 如果在game-tool-cli模版,没有预留占位符,需要用户初始化\n return null;\n})();\n\n// activity_id\nlet HAS_INITED_ACTIVITY_ID = false;\nlet ACTIVITY_ID = (function () {\n // 如是在红砖模版,直接取window.runtime\n if (!isNode && window.runtime) {\n const { actId } = window.runtime;\n HAS_INITED_ACTIVITY_ID = true;\n return actId;\n }\n // 如果在game-tool-cli模版,没有预留占位符,需要用户初始化\n return null;\n})();\n\n// 区域\nlet AREA_SIGNAL = 'cn';\nlet DEFAULT_DATA = {};\n\n// URL query参数\nconst QUERY = (function () {\n return isNode ? Object.create(null) : parseQuery();\n})();\n\n// event_id\nconst RANDOM_CHARS = '0123456789abcdefghijkABCDEFGHIJK';\nconst genRandomStr = (length) => {\n let re = '';\n const charLen = RANDOM_CHARS.length;\n for (let i = 0; i < length; i++) {\n re += RANDOM_CHARS[Math.floor(Math.random() * charLen)];\n }\n return re;\n};\nconst EVENT_ID = genRandomStr(32) || '';\n\n// get session_id\nconst getSessionId = () => {\n let sessionid = sessionStorage.getItem('SESSION_ID');\n if (!sessionid) {\n sessionid = genRandomStr(32);\n sessionStorage.setItem('SESSION_ID', sessionid);\n }\n return sessionid;\n};\n\n// 获取页面打开来源\nlet LAUNCH_FROM;\n\n// 系统\nlet OS;\nconst getOS = () => {\n if (/iPhone/i.test(navigator.userAgent)) {\n return 'ios';\n } else if (/Android/i.test(navigator.userAgent)) {\n return 'android';\n } else {\n return 'pc';\n }\n};\n\n// 是否初始化header头信息\nlet HAS_CONFIG_CUS_HEADER = false;\nconst getCustomsHeader = () => {\n // 1. 正式环境:environment ='product'\n // 2. 沙箱环境:environment ='sandbox'\n // 3. BOE正式环境:environment ='boe-product'\n // 4. BOE沙箱环境:environment ='boe-sandbox'\n const hostname = location.hostname;\n if (hostname.indexOf('boe-act.bytedance.net') > -1) {\n return 'boe-sandbox';\n }\n if (hostname.indexOf('boe-act-internal.bytedance.net') > -1) {\n return 'boe-product';\n }\n if (\n hostname.indexOf('.bytedance.net') > -1 ||\n hostname.indexOf('sandbox') > -1 ||\n hostname.indexOf('localhost') > -1\n ) {\n return 'sandbox';\n }\n return 'product';\n};\n\nconst defaultLogMessageFn = (event, params) => {\n params = params || {};\n console.log('');\n console.log('========= 埋点上报 =========');\n console.log('上报时间:', new Date().toLocaleString());\n console.log('事件名称:', event);\n console.log('事件参数:', JSON.stringify(params, null, 2));\n console.log('');\n};\n\nconst preInstallTeaSdk = (zone) => {\n return new Promise((resolve) => {\n const teaPre = document.createElement('script');\n const teaSdk = document.createElement('script');\n teaPre.innerHTML = `\n (function (win, export_obj) {\n win['TeaAnalyticsObject'] = export_obj;\n if (!win[export_obj]) {\n function _collect() {\n _collect.q.push(arguments);\n }\n _collect.q = _collect.q || [];\n win.TEA = win[export_obj] = _collect;\n }\n win[export_obj].l = +new Date();\n })(window, 'collectEvent');\n `;\n teaSdk.src =\n zone === 'cn'\n ? 'https://lf1-cdn-tos.bytescm.com/obj/static/log-sdk/collect/collect.js'\n : 'https://sf16-scmcdn-sg.ibytedtos.com/obj/static-sg/log-sdk/collect/collect.js';// sg\n // va:https://sf16-scmcdn-va.ibytedtos.com/obj/static-us/log-sdk/collect/collect.js\n document.body.appendChild(teaPre);\n setTimeout(() => {\n document.body.appendChild(teaSdk);\n }, 50);\n setTimeout(() => {\n resolve(true);\n }, 100);\n });\n};\n\ninterface InitLogOptions {\n app_id: number;\n activity_id: number;\n default_data?: { [key: string]: any };\n zone?: string;\n}\n\n\n// let startTime = 0;\n// 初始化APP_ID,ACTIVITY_ID\nexport const initSendLogV3 = ({ app_id, activity_id, default_data = {}, zone }: InitLogOptions) => {\n if (!zone) {\n throw new Error('gameSDK.Tea.initSendLogV3:\\n初始化缺少zone(区域)字段,请根据业务地区来指定一个zone,中国:cn,海外地区:sg')\n }\n // 设置默认数据\n APP_ID = app_id;\n ACTIVITY_ID = activity_id;\n AREA_SIGNAL = zone;\n\n // 设置已初始化\n HAS_INITED_APP_ID = true;\n HAS_INITED_ACTIVITY_ID = true;\n\n // 添加默认通参\n let deafultKeys = Object.keys(default_data);\n deafultKeys.forEach(key => {\n DEFAULT_DATA[key] = default_data[key];\n });\n\n // 判断是否有tea sdk\n // if (!window.collectEvent && (!window.GameTool || !window.GameTool.collectEvent)) {\n // console.log('***=== auto inject tea sdk ===***')\n // await preInstallTeaSdk(zone);\n // }\n console.log('***=== sendLogV3 inited ===***');\n};\n\n// 获取地理位置信息,只在正式环境有效\nlet getGeoCount = 0;\nconst getGeoInfo = async () => {\n // 只获取三次\n if (getGeoCount >= 3) {\n return;\n }\n try {\n const res = await window.fetch(\n `${location.origin ||\n ''}/act/${APP_ID}/location/geonameids?activity_id=${ACTIVITY_ID}&type=1`\n );\n const jsonData = await res.json();\n if (jsonData.data) {\n geoInfo = jsonData.data;\n }\n } catch (e) { }\n getGeoCount += 1;\n};\n\n// 时间分组\nconst timeGroups = {};\n\n// 获取PassportV2放置在全局变量的passport_id\nlet getPassportId = () => {\n try {\n if ((window as any).ppuid_for_tea_gamesdk) {\n return (window as any).ppuid_for_tea_gamesdk\n }\n return BE_NULL;\n } catch (_) {\n return BE_NULL;\n }\n}\n\n// 设置通参参数,可动态新增/修改tea通参\nexport const setLogParam = (params) => {\n let keys = Object.keys(params);\n keys.forEach(key => {\n if (params[key]) {\n // 有值才赋值\n DEFAULT_DATA[key] = params[key]\n } else {\n // 无值删除,防止覆盖有值的默认参数\n delete DEFAULT_DATA[key];\n }\n });\n}\n\nexport const sendLogV3 = async (event: string, params = {}, group_data = { name: \"\", type: 1 }, beconEvent = false) => {\n if (!HAS_INITED_APP_ID || !HAS_INITED_ACTIVITY_ID) {\n throw new Error(`\n 请先调用gameSDK.Tea.initSendLogV3方法初始化app_id和activity_id.\n 例如:\n gameSDK.Tea.initSendLogV3({app_id: 1781, activity_id: 123});\n 注意: app_id和activity_id可询问相关对接人获取。\n `);\n }\n\n // 获取地理位置信息\n if (!HAS_FETCHED_GEO && !HAS_START_FETCH_GEO) {\n HAS_START_FETCH_GEO = true;\n await getGeoInfo();\n HAS_FETCHED_GEO = true;\n }\n\n const collectEvent = window.collectEvent || defaultLogMessageFn;\n\n // 设置header\n if (!HAS_CONFIG_CUS_HEADER) {\n const environment = getCustomsHeader();\n HAS_CONFIG_CUS_HEADER = true;\n collectEvent('config', {\n environment,\n });\n }\n\n let duration_json = {};\n if (group_data.name) {\n if (group_data.type === 2 && timeGroups[group_data.name]) {\n duration_json[\"duration\"] = new Date().getTime() - timeGroups[group_data.name];\n } else {\n timeGroups[group_data.name] = new Date().getTime();\n }\n }\n\n // 获取URL query 参数\n let { open_id, role_id, device_id, server_id, from_source, token } = QUERY;\n let scenese = /BDGameSDK/i.test(navigator.userAgent);\n let actForms;\n if (!!window.runtime) {\n actForms = window.runtime.actForms;\n }\n if (!LAUNCH_FROM) {\n LAUNCH_FROM = getAppType();\n }\n if (!OS) {\n OS = getOS();\n }\n\n // 拼接公参数\n let _params = {\n aid: String(APP_ID),\n user_unique_id: open_id || BE_NULL,\n role_id: role_id || BE_NULL,\n device_id: device_id || BE_NULL,\n os: OS,\n launch_from: LAUNCH_FROM || BE_NULL,\n launch_way: BE_NULL,\n server_id: server_id ? +server_id : BE_NULL,\n activity_type: '2', // 活动类型:1:静态部署,2:红砖,3:非系统生成\n activity_id: String(ACTIVITY_ID),\n activity_link_id: from_source || BE_NULL,\n is_share: token ? location.href : BE_NULL,\n scenese: scenese ? '2' : '1',\n event_id: EVENT_ID,\n session_id: getSessionId(),\n timestamp: String(Date.now()),\n activity_form: (actForms || []).join(',') || BE_NULL,\n params_for_special: AREA_SIGNAL === 'cn' ? 'xuanwu' : 'xuanwu_overseas',\n url: location.origin + location.pathname,\n full_url: location.href,\n page_id: location.origin + location.pathname,\n refer_url: document.referrer || BE_NULL,\n passport_id: getPassportId(),\n ...duration_json,\n ...geoInfo,\n ...DEFAULT_DATA,\n ...params,\n };\n if (beconEvent) {\n return collectEvent('beconEvent', event, _params);\n }\n return collectEvent(event, _params);\n};\n","import * as _Tea from './index';\nexport const Tea = _Tea;\n","import React, { useEffect } from 'react';\nimport { Helmet } from 'react-helmet';\nimport AppContainer from './Container';\nimport Loading from '~/components/Loading';\nimport { PrefetchData, prefetchData } from '~/common/services';\nimport { descWithI18n, titleWithI18n } from '~/common/consts';\nimport pageConfig from '~/config';\nimport { Tea } from '~/common/sendLogV3/export';\n\nconst shareImageMap: Record = {\n en: [\n 'https://p19-marketing-va.bytedgame.com/obj/g-marketing-assets-va/2024_12_25_09_01_51/EN1_s1956957.jpg',\n 'https://p19-marketing-va.bytedgame.com/obj/g-marketing-assets-va/2024_12_25_09_01_48/EN2_s2172285.jpg',\n 'https://p19-marketing-va.bytedgame.com/obj/g-marketing-assets-va/2024_12_25_09_01_46/EN3_s1145656.jpg'\n ],\n ja: [\n 'https://p19-marketing-va.bytedgame.com/obj/g-marketing-assets-va/2024_12_25_09_01_49/JA1_s1911921.jpg',\n 'https://p19-marketing-va.bytedgame.com/obj/g-marketing-assets-va/2024_12_25_09_01_48/JA2_s2087135.jpg',\n 'https://p19-marketing-va.bytedgame.com/obj/g-marketing-assets-va/2024_12_25_09_01_44/JA3_s1115948.jpg'\n ],\n ko: [\n 'https://p19-marketing-va.bytedgame.com/obj/g-marketing-assets-va/2024_12_25_09_01_39/KR1_s1914899.jpg',\n 'https://p19-marketing-va.bytedgame.com/obj/g-marketing-assets-va/2024_12_25_09_01_37/KR2_s2115278.jpg',\n 'https://p19-marketing-va.bytedgame.com/obj/g-marketing-assets-va/2024_12_25_09_01_44/KR3_s1104856.jpg'\n ],\n 'zh-Hant': [\n 'https://p19-marketing-va.bytedgame.com/obj/g-marketing-assets-va/2024_12_25_09_01_49/ZH1_s1946451.jpg',\n 'https://p19-marketing-va.bytedgame.com/obj/g-marketing-assets-va/2024_12_25_09_01_42/ZH2_s2150117.jpg',\n 'https://p19-marketing-va.bytedgame.com/obj/g-marketing-assets-va/2024_12_25_09_01_40/ZH3_s1133586.jpg'\n ],\n de: [\n 'https://p19-marketing-va.bytedgame.com/obj/g-marketing-assets-va/2024_12_25_09_01_54/DE1_s1917666.jpg',\n 'https://p19-marketing-va.bytedgame.com/obj/g-marketing-assets-va/2024_12_25_09_01_50/DE2_s2090091.jpg',\n 'https://p19-marketing-va.bytedgame.com/obj/g-marketing-assets-va/2024_12_25_09_01_51/DE3_s1123086.jpg'\n ],\n es: [\n 'https://p19-marketing-va.bytedgame.com/obj/g-marketing-assets-va/2024_12_25_09_01_44/ES1_s1914475.jpg',\n 'https://p19-marketing-va.bytedgame.com/obj/g-marketing-assets-va/2024_12_25_09_01_46/ES2_s2098030.jpg',\n 'https://p19-marketing-va.bytedgame.com/obj/g-marketing-assets-va/2024_12_25_09_01_44/ES3_s1117609.jpg'\n ],\n fr: [\n 'https://p19-marketing-va.bytedgame.com/obj/g-marketing-assets-va/2024_12_25_09_02_04/FR_s1892486.jpg',\n 'https://p19-marketing-va.bytedgame.com/obj/g-marketing-assets-va/2024_12_25_09_02_00/FR2_s2063134.jpg',\n 'https://p19-marketing-va.bytedgame.com/obj/g-marketing-assets-va/2024_12_25_09_01_54/FR3_s1106710.jpg'\n ],\n id: [\n 'https://p19-marketing-va.bytedgame.com/obj/g-marketing-assets-va/2024_12_25_09_02_09/ID_s1894137.jpg',\n 'https://p19-marketing-va.bytedgame.com/obj/g-marketing-assets-va/2024_12_25_09_02_01/ID2_s2061463.jpg',\n 'https://p19-marketing-va.bytedgame.com/obj/g-marketing-assets-va/2024_12_25_09_01_52/ID3_s1118010.jpg'\n ],\n pt: [\n 'https://p19-marketing-va.bytedgame.com/obj/g-marketing-assets-va/2024_12_25_09_02_10/PT_s1905468.jpg',\n 'https://p19-marketing-va.bytedgame.com/obj/g-marketing-assets-va/2024_12_25_09_02_05/PT2_s2075685.jpg',\n 'https://p19-marketing-va.bytedgame.com/obj/g-marketing-assets-va/2024_12_25_09_02_01/PT3_s1112505.jpg'\n ],\n th: [\n 'https://p19-marketing-va.bytedgame.com/obj/g-marketing-assets-va/2024_12_25_09_02_13/TH_s1928819.jpg',\n 'https://p19-marketing-va.bytedgame.com/obj/g-marketing-assets-va/2024_12_25_09_01_57/TH2_s2109038.jpg',\n 'https://p19-marketing-va.bytedgame.com/obj/g-marketing-assets-va/2024_12_25_09_01_56/TH3_s1122214.jpg'\n ]\n};\n\nconst start = Date.now();\nexport default function App(props: any) {\n const { data } = props._ssrData;\n\n const { language, isInit, code, index } = (data?.prefetchData as PrefetchData) || {};\n\n const renderTDK = () => {\n return {\n title: (titleWithI18n[language] || titleWithI18n.en).replace('{{ReferralCode}}', code),\n description: descWithI18n[language] || descWithI18n.en\n };\n };\n\n const posterList = shareImageMap[language] || shareImageMap.en;\n const posterImage = posterList[index] || posterList[0];\n\n useEffect(() => {\n if (!isInit) {\n return;\n }\n location.href = posterImage;\n }, [isInit, posterImage]);\n useEffect(() => {\n Tea.initSendLogV3({\n app_id: pageConfig.appId,\n activity_id: pageConfig.actId,\n zone: pageConfig.region,\n // 非必传参数,这个字段可以自定义通用参数,并且会在所有埋点事件里统一传参\n default_data: {\n page_text: pageConfig.title,\n activity_form: '1'\n }\n });\n\n Tea.sendLogV3('acv_pageview', {\n index: 1\n });\n Tea.sendLogV3('acv_pageload', {\n index: 1,\n duration: Date.now() - start\n });\n }, []);\n return (\n <>\n \n \n \n \n \n \n \n \n \n {renderTDK().title}\n \n \n \n );\n}\n\n// 支持 react-helmet\nApp.disableStream = true;\n\nApp.init = (context) => {\n const { level } = context.request.query;\n if (['0', '1', '2'].includes(level)) {\n // 2 表示服务器渲染,1表示服务端预取数据,0表示客户端渲染\n context.targetRenderLevel = Number(level);\n }\n // 2 表示服务器渲染,1表示服务端预取数据,0表示客户端渲染\n};\n\nApp.prefetch = prefetchData;\n\nApp.config = {\n features: {\n ssr: {\n customPrefetch: {\n LoadingComponent: Loading\n }\n }\n }\n};\n","import { http } from '../utils';\nimport config from '~/config';\n\nexport type PrefetchData = {\n imageUrl: string;\n shareImageUrl?: string;\n language: string;\n code?: number;\n message?: string;\n isInit?: boolean;\n index?: number;\n};\n\nconst defaultData: PrefetchData = {\n imageUrl: '',\n language: '',\n isInit: false\n};\n\ntype FuncPreFetch = (context: any) => PrefetchData;\n\ntype FuncQueryShareInfo = (key: string, isSandbox?: boolean) => Promise;\n\nexport const sandboxStr = ['sandbox', 'localhost'];\n\n// 获取key对应的内容\nexport const queryShareInfo: FuncQueryShareInfo = async (key: string, isSandbox = false) => {\n const host = isSandbox ? 'https://act-sandbox.vasnssdk.com' : 'https://www.marvelsnap.com';\n const originResult = await http(`${host}/act/${config.appId}/process/exec/v2`, {\n method: 'post',\n body: JSON.stringify({\n front_params: JSON.stringify({ key }),\n login_type: 'no_login',\n channel_app_id: String(config.appId),\n activity_id: String(config.actId),\n process_id: '7312278496405969670'\n })\n });\n const result = await originResult.json();\n const { code, data = {} } = result;\n if (code !== 0) {\n return {\n ...defaultData,\n code: -2\n };\n }\n const { process_exec_code, copywriting } = data;\n if (process_exec_code !== 0) {\n return {\n ...defaultData,\n code: -3,\n message: copywriting\n };\n }\n const value = data?.get?.value?.value || '';\n const valueArr = value.split(',');\n if (valueArr?.length < 2) {\n return {\n ...defaultData,\n code: -4,\n message: `array length or type error: ${valueArr.length}/${valueArr[0]}`\n };\n }\n const imageUrl = valueArr[0] || '';\n const language = valueArr[1] || '';\n const shareImageUrl = valueArr[2] || '';\n\n return {\n language,\n imageUrl,\n shareImageUrl\n };\n};\n\n// 预取数据\nexport const prefetchData: FuncPreFetch = (context) => {\n const query = context.request.query || {};\n return {\n imageUrl:\n 'https://p19-marketing-va.bytedgame.com/obj/g-marketing-assets-va/2024_10_14_09_05_04/switch-inviter_s21627.png',\n shareImageUrl:\n 'https://p19-marketing-va.bytedgame.com/obj/g-marketing-assets-va/2024_10_14_09_05_04/switch-inviter_s21627.png',\n isInit: true,\n language: query.language || 'en',\n code: query.code || 'referral code',\n index: query.index || 0\n };\n // const data = defaultData;\n // try {\n // let q: Record = {};\n // let isSandbox = false;\n // try {\n // // 判断是否沙箱\n // const host = context?.request?.host || context?.request?.url || '';\n // isSandbox = sandboxStr.some((str) => host.includes(str));\n // } catch (_) {}\n // if (context.request) {\n // // 获取query\n // q = context.request.query || {};\n // }\n // if (!q.id) {\n // return {\n // ...defaultData,\n // isInit: true,\n // code: -1\n // };\n // }\n // const content = await queryShareInfo(q.id, isSandbox);\n // return {\n // ...content,\n // isInit: true\n // };\n // } catch (e) {\n // data.code = -9999;\n // data.message = e.message;\n // data.isInit = true;\n // }\n\n // return data;\n};\n","/**\n * @file 加载提示动画\n * @author lupengyu@bytedance.com\n */\n\nimport React from 'react';\nimport './index.less';\n\nexport default function Loading() {\n return (\n
\n
Loading...
\n
\n );\n}\n"],"sourceRoot":""}