转盘抽奖
This commit is contained in:
parent
e4a2f913bb
commit
53fdaa24e8
@ -33,7 +33,7 @@
|
||||
<script src="vendor/vue-router.min.js"></script>
|
||||
<script src="vendor/vue-lazyload.js"></script>
|
||||
<script src="vendor/svga.lite.min.js"></script>
|
||||
<script src="js/api_bridge.js?v=2026051508"></script>
|
||||
<script src="js/api_bridge.js?v=20260519-idempotency"></script>
|
||||
<script>
|
||||
_hash = {"arcss":"5ad945a2","arjs":"dfdcd2f3","encss":"f82f3966","enjs":"4449b2e0","idcss":"dd3e2a9c","idjs":"e5c1c281","ptcss":"6bdd5fc3","ptjs":"d65c8bb1","rucss":"32a5b8c8","rujs":"5a9689d5","trcss":"92877d34","trjs":"7bf64c5a","vendorjs":"9d74e93a","vicss":"8395579b","vijs":"295b368f","zhcss":"c8078dd0","zhjs":"3049d299"}
|
||||
</script>
|
||||
|
||||
@ -33,7 +33,7 @@
|
||||
<script src="vendor/vue-router.min.js"></script>
|
||||
<script src="vendor/vue-lazyload.js"></script>
|
||||
<script src="vendor/svga.lite.min.js"></script>
|
||||
<script src="js/api_bridge.js?v=2026051508"></script>
|
||||
<script src="js/api_bridge.js?v=20260519-idempotency"></script>
|
||||
<script>
|
||||
_hash = {"arcss":"5ad945a2","arjs":"dfdcd2f3","encss":"f82f3966","enjs":"4449b2e0","idcss":"dd3e2a9c","idjs":"e5c1c281","ptcss":"6bdd5fc3","ptjs":"d65c8bb1","rucss":"32a5b8c8","rujs":"5a9689d5","trcss":"92877d34","trjs":"7bf64c5a","vendorjs":"9d74e93a","vicss":"8395579b","vijs":"295b368f","zhcss":"c8078dd0","zhjs":"3049d299"}
|
||||
</script>
|
||||
|
||||
@ -266,6 +266,32 @@
|
||||
url.searchParams.set(key, value)
|
||||
}
|
||||
|
||||
function hasIdempotencyKey(url) {
|
||||
return !!(
|
||||
url.searchParams.get('idempotencyKey') ||
|
||||
url.searchParams.get('idempotency_key') ||
|
||||
url.searchParams.get('requestId') ||
|
||||
url.searchParams.get('request_id') ||
|
||||
url.searchParams.get('nonce')
|
||||
)
|
||||
}
|
||||
|
||||
function randomPart() {
|
||||
try {
|
||||
if (window.crypto && window.crypto.getRandomValues) {
|
||||
var values = new Uint32Array(2)
|
||||
window.crypto.getRandomValues(values)
|
||||
return values[0].toString(16) + values[1].toString(16)
|
||||
}
|
||||
} catch (error) {}
|
||||
return Math.floor(Math.random() * 0x100000000).toString(16) +
|
||||
Math.floor(Math.random() * 0x100000000).toString(16)
|
||||
}
|
||||
|
||||
function createIdempotencyKey(activity) {
|
||||
return ['h5', activity, resolveUID() || 'guest', Date.now(), randomPart()].join('-').slice(0, 128)
|
||||
}
|
||||
|
||||
function isLegacySmashUrl(url) {
|
||||
return (
|
||||
url.pathname === '/index.php' &&
|
||||
@ -280,6 +306,19 @@
|
||||
)
|
||||
}
|
||||
|
||||
function isSmashDrawUrl(url) {
|
||||
return (
|
||||
(url.pathname === '/index.php' && url.searchParams.get('action') === 'Action/TreasureHunt.startHunt') ||
|
||||
url.pathname === '/app/smash-golden-egg/draw' ||
|
||||
url.pathname === '/h5/smash-golden-egg/draw'
|
||||
)
|
||||
}
|
||||
|
||||
function ensureDrawIdempotency(url) {
|
||||
if (!isSmashDrawUrl(url) || hasIdempotencyKey(url)) return
|
||||
url.searchParams.set('idempotencyKey', createIdempotencyKey('smash-egg'))
|
||||
}
|
||||
|
||||
function rewriteLegacyActionToSemanticPath(url) {
|
||||
var action = String(url.searchParams.get('action') || '')
|
||||
var pathname = legacySemanticRoutes[action]
|
||||
@ -423,6 +462,7 @@
|
||||
rewriteSemanticPathToLegacyAction(parsed)
|
||||
}
|
||||
replaceQueryPlaceholders(parsed)
|
||||
ensureDrawIdempotency(parsed)
|
||||
|
||||
return gatewayBase + gatewayPrefix + parsed.pathname + parsed.search
|
||||
}
|
||||
|
||||
@ -1 +1 @@
|
||||
<!DOCTYPE html><html><head><meta charset=utf-8><meta name=viewport content="width=device-width,user-scalable=no,initial-scale=1,maximum-scale=1,minimum-scale=1"><meta name=viewport content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no"><meta name=apple-mobile-web-app-capable content=yes><meta name=apple-mobile-web-app-status-bar-style content=black><title>Yumi</title><link rel=icon href=./src/assets/logoFavicon.ico><link href=/agencypanel/static/css/app.a5e99046d79db05830c062cb43887024.css rel=stylesheet></head><body><div id=app></div><script type=text/javascript src=/agencypanel/static/js/wheel-gateway-api.js?v=20260515-prod-api></script><script type=text/javascript src=/agencypanel/static/js/wheel-target-fix.js?v=20260515-target></script><script type=text/javascript src=/agencypanel/static/js/wheel-tab-filter.js></script><script type=text/javascript src=/agencypanel/static/js/manifest.50b03fb9228447d5e5bd.js></script><script type=text/javascript src=/agencypanel/static/js/vendor.26202bf12488c03c4627.js></script><script type=text/javascript src=/agencypanel/static/js/app.114c97eb0e121b96529d.js></script></body></html>
|
||||
<!DOCTYPE html><html><head><meta charset=utf-8><meta name=viewport content="width=device-width,user-scalable=no,initial-scale=1,maximum-scale=1,minimum-scale=1"><meta name=viewport content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no"><meta name=apple-mobile-web-app-capable content=yes><meta name=apple-mobile-web-app-status-bar-style content=black><title>Yumi</title><link rel=icon href=./src/assets/logoFavicon.ico><link href=/agencypanel/static/css/app.a5e99046d79db05830c062cb43887024.css rel=stylesheet></head><body><div id=app></div><script type=text/javascript src=/agencypanel/static/js/wheel-gateway-api.js?v=20260519-idempotency></script><script type=text/javascript src=/agencypanel/static/js/wheel-target-fix.js?v=20260515-target></script><script type=text/javascript src=/agencypanel/static/js/wheel-tab-filter.js></script><script type=text/javascript src=/agencypanel/static/js/manifest.50b03fb9228447d5e5bd.js></script><script type=text/javascript src=/agencypanel/static/js/vendor.26202bf12488c03c4627.js></script><script type=text/javascript src=/agencypanel/static/js/app.114c97eb0e121b96529d.js></script></body></html>
|
||||
|
||||
@ -1 +1 @@
|
||||
<!DOCTYPE html><html><head><meta charset=utf-8><meta name=viewport content="width=device-width,user-scalable=no,initial-scale=1,maximum-scale=1,minimum-scale=1"><meta name=viewport content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no"><meta name=apple-mobile-web-app-capable content=yes><meta name=apple-mobile-web-app-status-bar-style content=black><title>Yumi Wheel Local</title><link rel=icon href=./src/assets/logoFavicon.ico><link href=static/css/app.a5e99046d79db05830c062cb43887024.css rel=stylesheet></head><body><div id=app></div><script type=text/javascript src=static/js/wheel-gateway-api.js?v=20260514-gateway-headers></script><script type=text/javascript src=static/js/wheel-target-fix.js?v=20260515-target></script><script type=text/javascript src=static/js/wheel-tab-filter.js></script><script type=text/javascript src=static/js/manifest.local.js></script><script type=text/javascript src=static/js/vendor.26202bf12488c03c4627.js></script><script type=text/javascript src=static/js/app.114c97eb0e121b96529d.js></script></body></html>
|
||||
<!DOCTYPE html><html><head><meta charset=utf-8><meta name=viewport content="width=device-width,user-scalable=no,initial-scale=1,maximum-scale=1,minimum-scale=1"><meta name=viewport content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no"><meta name=apple-mobile-web-app-capable content=yes><meta name=apple-mobile-web-app-status-bar-style content=black><title>Yumi Wheel Local</title><link rel=icon href=./src/assets/logoFavicon.ico><link href=static/css/app.a5e99046d79db05830c062cb43887024.css rel=stylesheet></head><body><div id=app></div><script type=text/javascript src=static/js/wheel-gateway-api.js?v=20260519-idempotency></script><script type=text/javascript src=static/js/wheel-target-fix.js?v=20260515-target></script><script type=text/javascript src=static/js/wheel-tab-filter.js></script><script type=text/javascript src=static/js/manifest.local.js></script><script type=text/javascript src=static/js/vendor.26202bf12488c03c4627.js></script><script type=text/javascript src=static/js/app.114c97eb0e121b96529d.js></script></body></html>
|
||||
|
||||
@ -329,6 +329,85 @@
|
||||
return '';
|
||||
}
|
||||
|
||||
function randomPart() {
|
||||
try {
|
||||
if (window.crypto && window.crypto.getRandomValues) {
|
||||
var values = new Uint32Array(2);
|
||||
window.crypto.getRandomValues(values);
|
||||
return values[0].toString(16) + values[1].toString(16);
|
||||
}
|
||||
} catch (error) {}
|
||||
return Math.floor(Math.random() * 0x100000000).toString(16) +
|
||||
Math.floor(Math.random() * 0x100000000).toString(16);
|
||||
}
|
||||
|
||||
function createIdempotencyKey(activity) {
|
||||
var uid = String(params._login_uid || params.uid || params.userId || params.loginUid || 'guest').trim();
|
||||
return ['h5', activity, uid || 'guest', Date.now(), randomPart()].join('-').slice(0, 128);
|
||||
}
|
||||
|
||||
function queryHasIdempotencyKey(url) {
|
||||
try {
|
||||
var parsed = new URL(url, window.location.href);
|
||||
return !!(
|
||||
parsed.searchParams.get('idempotencyKey') ||
|
||||
parsed.searchParams.get('idempotency_key') ||
|
||||
parsed.searchParams.get('requestId') ||
|
||||
parsed.searchParams.get('request_id') ||
|
||||
parsed.searchParams.get('nonce')
|
||||
);
|
||||
} catch (error) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
function bodyHasIdempotencyKey(body) {
|
||||
if (!body) return false;
|
||||
if (typeof FormData !== 'undefined' && body instanceof FormData) {
|
||||
return !!(
|
||||
body.get('idempotencyKey') ||
|
||||
body.get('idempotency_key') ||
|
||||
body.get('requestId') ||
|
||||
body.get('request_id') ||
|
||||
body.get('nonce')
|
||||
);
|
||||
}
|
||||
if (typeof URLSearchParams !== 'undefined' && body instanceof URLSearchParams) {
|
||||
return !!(
|
||||
body.get('idempotencyKey') ||
|
||||
body.get('idempotency_key') ||
|
||||
body.get('requestId') ||
|
||||
body.get('request_id') ||
|
||||
body.get('nonce')
|
||||
);
|
||||
}
|
||||
if (typeof body === 'string') {
|
||||
try {
|
||||
var payload = JSON.parse(body);
|
||||
if (payload && typeof payload === 'object') {
|
||||
return !!(
|
||||
payload.idempotencyKey ||
|
||||
payload.idempotency_key ||
|
||||
payload.requestId ||
|
||||
payload.request_id ||
|
||||
payload.nonce
|
||||
);
|
||||
}
|
||||
} catch (error) {}
|
||||
try {
|
||||
var params = new URLSearchParams(body);
|
||||
return !!(
|
||||
params.get('idempotencyKey') ||
|
||||
params.get('idempotency_key') ||
|
||||
params.get('requestId') ||
|
||||
params.get('request_id') ||
|
||||
params.get('nonce')
|
||||
);
|
||||
} catch (innerError) {}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
function firstDrawReward(drawResult) {
|
||||
drawResult = drawResult || {};
|
||||
if (Array.isArray(drawResult.records) && drawResult.records.length > 0) {
|
||||
@ -445,6 +524,7 @@
|
||||
var nextUrl = rewriteUrl(url);
|
||||
this.__wheelGatewayRequest = nextUrl !== url && isWheelApiPath(originalPath);
|
||||
this.__wheelGatewayDrawRequest = this.__wheelGatewayRequest && isWheelDrawPath(originalPath);
|
||||
this.__wheelGatewayUrl = nextUrl;
|
||||
this.__wheelGatewayHeaders = {};
|
||||
this.__wheelGatewayHeaderValues = {};
|
||||
if (this.__wheelGatewayRequest) {
|
||||
@ -498,6 +578,13 @@
|
||||
nativeSetRequestHeader.call(this, 'req-version', this.__wheelGatewayHeaderValues['req-version'] || params.reqVersion || defaultReqVersion);
|
||||
nativeSetRequestHeader.call(this, 'req-zone', resolveReqZone(this.__wheelGatewayHeaderValues['req-zone']));
|
||||
nativeSetRequestHeader.call(this, 'req-lang', resolveReqLang(this.__wheelGatewayHeaderValues['req-lang']));
|
||||
if (this.__wheelGatewayDrawRequest &&
|
||||
!this.__wheelGatewayHeaders['idempotency-key'] &&
|
||||
!this.__wheelGatewayHeaders['x-idempotency-key'] &&
|
||||
!queryHasIdempotencyKey(this.__wheelGatewayUrl) &&
|
||||
!bodyHasIdempotencyKey(arguments[0])) {
|
||||
nativeSetRequestHeader.call(this, 'Idempotency-Key', createIdempotencyKey('wheel'));
|
||||
}
|
||||
if (explicitAuthorization) {
|
||||
try {
|
||||
window.sessionStorage.setItem('Authorization', explicitAuthorization);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user