1
0
forked from sent/waves
waves/public/assets/g/ovo/websdkwrapper.js
2025-04-09 17:11:14 -05:00

560 lines
16 KiB
JavaScript

globalThis.WebSdkWrapper = (function () {
function addScript(src, id, onload) {
if (document.getElementById(id)) return;
let fjs = document.getElementsByTagName("script")[0];
let js = document.createElement("script");
js.id = id;
fjs.parentNode.insertBefore(js, fjs);
js.onload = onload;
js.src = src;
}
window.addEventListener("keydown", (ev) => {
if (["ArrowDown", "ArrowUp", " "].includes(ev.key)) {
ev.preventDefault();
}
});
window.addEventListener("wheel", (ev) => ev.preventDefault(), {
passive: false,
});
/*
============== EVENT DISPATCHER =================
vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
*/
const events = {};
function listen(event, fn, { once = false } = {}) {
events[event] = events[event] || [];
events[event].push({
fn,
once,
});
}
function listenOnce(event, fn) {
listen(event, fn, { once: true });
}
function dispatch(event, ...data) {
(events[event] || []).forEach((fnObj) => {
fnObj.fn(...data);
});
events[event] = (events[event] || []).filter((fnObj) => !fnObj.once);
}
/*
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
============== EVENT DISPATCHER =================
*/
let sdk;
const sdkContext = {};
let supportedNetworks = [
{
name: "Poki",
get sdk() {
return globalThis.PokiSDK;
},
scriptSrc: "//game-cdn.poki.com/scripts/v2/poki-sdk.js",
hasAds: true,
hasBanner: false,
enableOnlyInProduction: false,
implementation: {
//async preInit(debug = false) {},
init(debug = false) {
return new Promise((resolve) => {
sdk
.init()
.then(() => {
sdkContext.hasAdblock = false;
resolve();
})
.catch(() => {
sdkContext.hasAdblock = true;
resolve();
});
sdk.setDebug(debug);
});
},
setUpEventListeners() {
listen("loadingStart", () => {
sdk.gameLoadingStart();
});
listen("loadingEnd", () => {
sdk.gameLoadingFinished();
});
listen("gameplayStart", () => {
if (sdkContext.gameplayStarted) return;
sdkContext.gameplayStarted = true;
sdk.gameplayStart();
});
listen("gameplayStop", () => {
if (!sdkContext.gameplayStarted) return;
sdkContext.gameplayStarted = false;
sdk.gameplayStop();
});
listen("interstitial", () => {
dispatch("adStarted", sdkContext.lastRequestedAd);
sdk.commercialBreak().then(() => {
dispatch("interstitialEnd", true);
});
});
listen("rewarded", () => {
dispatch("adStarted", sdkContext.lastRequestedAd);
sdk.rewardedBreak().then((success) => {
dispatch("rewardedEnd", success);
});
});
listen("happyTime", (scale) => {
sdk.happyTime(scale);
});
},
hasAdblock() {
return !!sdkContext.hasAdblock;
},
},
},
{
name: "CrazyGames",
get sdk() {
if (!sdkContext.crazysdk)
sdkContext.crazysdk = globalThis?.CrazyGames?.CrazySDK?.getInstance();
return sdkContext.crazysdk;
},
scriptSrc: "//sdk.crazygames.com/crazygames-sdk-v1.js",
hasAds: true,
enableOnlyInProduction: false,
hasBanner: true,
implementation: {
//async preInit(debug = false) {},
init() {
return new Promise((resolve) => {
sdk.addEventListener("adblockDetectionExecuted", (event) => {
sdkContext.hasAdblock = event.hasAdblock;
resolve();
});
sdk.init();
});
},
setUpEventListeners() {
sdk.addEventListener("adStarted", () => {
dispatch("adStarted", sdkContext.lastRequestedAd);
});
sdk.addEventListener("adFinished", () => {
if (sdkContext.lastRequestedAd === "interstitial")
dispatch("interstitialEnd", true);
else dispatch("rewardedEnd", true);
});
sdk.addEventListener("adFinished", () => {
if (sdkContext.lastRequestedAd === "interstitial")
dispatch("interstitialEnd", true);
else dispatch("rewardedEnd", true);
});
sdk.addEventListener("adError", () => {
if (sdkContext.lastRequestedAd === "interstitial")
dispatch("interstitialEnd", false);
else dispatch("rewardedEnd", false);
});
listen("gameplayStart", () => {
if (sdkContext.gameplayStarted) return;
sdkContext.gameplayStarted = true;
sdk.gameplayStart();
});
listen("gameplayStop", () => {
if (!sdkContext.gameplayStarted) return;
sdkContext.gameplayStarted = false;
sdk.gameplayStop();
});
listen("interstitial", () => {
sdkContext.lastRequestedAd = "interstitial";
sdk.requestAd("midgame");
});
listen("rewarded", () => {
sdkContext.lastRequestedAd = "rewarded";
sdk.requestAd("rewarded");
});
listen("happyTime", () => {
sdk.happytime();
});
listen("banner", (data) => {
sdk.requestBanner(data);
});
},
hasAdblock() {
return !!sdkContext.hasAdblock;
},
},
},
{
name: "GamePix",
get sdk() {
return globalThis.GamePix;
},
scriptSrc: "//integration.gamepix.com/sdk/v3/gamepix.sdk.js",
hasAds: true,
enableOnlyInProduction: true,
hasBanner: false,
implementation: {
//async preInit(debug = false) {},
//init() {},
setUpEventListeners() {
listen("loadingProgress", (progress) => {
sdk.loading(progress);
});
listen("loadingEnd", () => {
sdk.loaded();
});
sdk.pause = () => {
dispatch("pause");
};
sdk.resume = () => {
dispatch("resume");
};
listen("levelStart", (level) => {
sdk.updateLevel(level);
});
listen("score", (score) => {
sdk.updateScore(score);
});
listen("interstitial", () => {
dispatch("adStarted", sdkContext.lastRequestedAd);
sdk.interstitialAd().then(() => {
dispatch("interstitialEnd", true);
});
});
listen("rewarded", () => {
dispatch("adStarted", sdkContext.lastRequestedAd);
sdk.rewardAd().then((res) => {
dispatch("rewardedEnd", res.success);
});
});
listen("happyTime", () => {
sdk.happyMoment();
});
},
hasAdblock() {
return false;
},
},
},
{
name: "GameDistribution",
get sdk() {
return globalThis.gdsdk;
},
scriptSrc: "//html5.api.gamedistribution.com/main.min.js",
hasAds: true,
enableOnlyInProduction: true,
hasBanner: false,
implementation: {
async preInit(debug = false, data) {
sdkContext.errors = 0;
window["GD_OPTIONS"] = {
gameId: data.gameId,
debug,
testing: debug,
onEvent: function (event) {
switch (event.name) {
case "SDK_GAME_START":
sdkContext.errors = 0;
// if (sdkContext.lastRequestedAd === "interstitial")
// dispatch("interstitialEnd", true);
// else dispatch("rewardedEnd", true);
break;
case "SDK_GAME_PAUSE":
dispatch("pause");
break;
case "SDK_GDPR_TRACKING":
// this event is triggered when your user doesn't want to be tracked
break;
case "SDK_GDPR_TARGETING":
// this event is triggered when your user doesn't want personalised targeting of ads and such
break;
case "AD_ERROR":
sdkContext.errors += 1;
// if (sdkContext.errors >= 2) {
// if (sdkContext.lastRequestedAd === "interstitial")
// dispatch("interstitialEnd", false);
// else dispatch("rewardedEnd", false);
// } else {
// dispatch(sdkContext.lastRequestedAd);
// }
break;
}
},
};
},
//init() {},
setUpEventListeners() {
listen("interstitial", () => {
sdkContext.lastRequestedAd = "interstitial";
dispatch("adStarted", sdkContext.lastRequestedAd);
sdk
.showAd()
.then((response) => {
dispatch("interstitialEnd", true);
})
.catch((error) => {
dispatch("interstitialEnd", false);
});
});
listen("rewarded", () => {
sdkContext.lastRequestedAd = "rewarded";
dispatch("adStarted", sdkContext.lastRequestedAd);
sdk
.showAd("rewarded")
.then((response) => {
dispatch("rewardedEnd", true);
})
.catch((error) => {
dispatch("rewardedEnd", false);
});
});
},
hasAdblock() {
return false;
},
},
},
{
name: "GameMonetize",
get sdk() {
return globalThis.sdk;
},
scriptSrc: "//html5.api.gamedistribution.com/main.min.js",
hasAds: true,
enableOnlyInProduction: true,
hasBanner: false,
implementation: {
async preInit(debug = false, data) {
window["SDK_OPTIONS "] = {
gameId: data.gameId,
debug,
testing: debug,
onEvent: function (event) {
switch (event.name) {
case "SDK_GAME_START":
if (sdkContext.lastRequestedAd === "interstitial")
dispatch("interstitialEnd", true);
else dispatch("rewardedEnd", true);
break;
case "SDK_GAME_PAUSE":
dispatch("pause");
break;
case "SDK_GDPR_TRACKING":
// this event is triggered when your user doesn't want to be tracked
break;
case "SDK_GDPR_TARGETING":
// this event is triggered when your user doesn't want personalised targeting of ads and such
break;
case "AD_ERROR":
sdkContext.errors += 1;
if (sdkContext.errors >= 2) {
if (sdkContext.lastRequestedAd === "interstitial")
dispatch("interstitialEnd", false);
else dispatch("rewardedEnd", false);
} else {
dispatch(sdkContext.lastRequestedAd);
}
break;
}
},
};
},
//init() {},
setUpEventListeners() {
listen("interstitial", () => {
dispatch("adStarted", sdkContext.lastRequestedAd);
sdk.showBanner();
});
listen("rewarded", () => {
dispatch("adStarted", sdkContext.lastRequestedAd);
sdk.showBanner();
});
},
hasAdblock() {
return false;
},
},
},
{
name: "CoolMathGames",
get sdk() {
return null;
},
scriptSrc: null,
hasAds: false,
enableOnlyInProduction: true,
hasBanner: false,
implementation: {
//async preInit(debug = false, data) {},
init() {},
setUpEventListeners() {
listen("replayLevel", (level) => {
parent.cmgGameEvent("replay", level.toString());
});
listen("gameplayStart", () => {
parent.cmgGameEvent("start");
});
listen("levelStart", (level) => {
parent.cmgGameEvent("start", level.toString());
});
},
hasAdblock() {
return false;
},
},
},
];
let currentSdk = null;
let enabled = false;
const Wrapper = {
get enabled() {
return enabled;
},
get currentSdk() {
return currentSdk;
},
async init(name, debug = false, data = {}) {
return new Promise(async (resolve) => {
currentSdk = supportedNetworks.find(
(x) => x.name.toLowerCase() === name.toLowerCase()
);
if (currentSdk) {
enabled = true;
if (currentSdk.enableOnlyInProduction && debug) {
enabled = false;
resolve();
} else {
if (currentSdk.implementation.preInit)
await currentSdk.implementation.preInit(debug, data);
if (currentSdk.scriptSrc) {
addScript(
currentSdk.scriptSrc,
currentSdk.name + "-jssdk",
async () => {
sdk = currentSdk.sdk;
currentSdk.implementation.setUpEventListeners();
if (currentSdk.implementation.init)
await currentSdk.implementation.init(debug, data);
resolve();
}
);
} else {
resolve();
}
}
} else {
resolve();
}
});
},
onPause(fn) {
listen("pause", fn);
},
pause() {
dispatch("pause");
},
onResume(fn) {
listen("resume", fn);
},
resume() {
dispatch("resume");
},
onMute(fn) {
listen("mute", fn);
},
mute() {
dispatch("mute");
},
onUnmute(fn) {
listen("unmute", fn);
},
unmute() {
dispatch("unmute");
},
onUnlockAllLevels(fn) {
window.unlockAllLevels = fn;
},
hasAdblock() {
if (currentSdk && currentSdk.implementation.hasAdblock)
return currentSdk.implementation.hasAdblock();
return false;
},
loadingStart() {
dispatch("loadingStart");
},
loadingProgress(progress) {
progress = Math.min(Math.max(0, progress), 100);
dispatch("loadingProgress", progress);
},
loadingEnd() {
dispatch("loadingEnd");
},
gameplayStart() {
dispatch("gameplayStart");
},
gameplayStop() {
dispatch("gameplayStop");
},
happyTime() {
dispatch("happyTime");
},
levelStart(level) {
dispatch("levelStart", level);
},
replayLevel(level) {
dispatch("replayLevel", level);
},
score(score) {
dispatch("score", score);
},
banner(data) {
dispatch("banner", data);
},
interstitial() {
sdkContext.lastRequestedAd = "interstitial";
if (!currentSdk || !currentSdk.hasAds) {
dispatch("adStarted", sdkContext.lastRequestedAd);
return Promise.resolve(false);
}
return new Promise((resolve) => {
let gameplayStarted = sdkContext.gameplayStarted;
if (gameplayStarted) Wrapper.gameplayStop();
Wrapper.mute();
dispatch("interstitial");
listenOnce("interstitialEnd", (...args) => {
if (gameplayStarted) Wrapper.gameplayStart();
Wrapper.unmute();
resolve(...args);
});
});
},
rewarded() {
sdkContext.lastRequestedAd = "rewarded";
if (!currentSdk || !currentSdk.hasAds) {
dispatch("adStarted", sdkContext.lastRequestedAd);
return Promise.resolve(false);
}
return new Promise((resolve) => {
let gameplayStarted = sdkContext.gameplayStarted;
if (gameplayStarted) Wrapper.gameplayStop();
Wrapper.mute();
dispatch("rewarded");
listenOnce("rewardedEnd", (...args) => {
if (gameplayStarted) Wrapper.gameplayStart();
Wrapper.unmute();
resolve(...args);
});
});
},
onAdStarted(fn) {
listen("adStarted", fn);
},
hasAds() {
return currentSdk && currentSdk.hasAds ? 1 : 0;
},
};
return Wrapper;
})();