Loading...
Loading...
Use when integrating the Lagged JavaScript SDK into an HTML5 game published on Lagged.com, adding Lagged leaderboards, handling Lagged ad placements, or setting up user authentication via the Lagged API. Initializes the Lagged SDK (window.LaggedAPI), retrieves player profile data, submits scores to native leaderboards, unlocks achievements, and integrates interstitial and rewarded ads for games on the Lagged.com game portal.
npx skill4agent add hungify/playables-skills lagged-js-sdkwindow.LaggedAPILaggedAPIlagged.jswindow.LaggedAPIsdk.init(devId, publisherId)sdk.User.getid > 0id = 0sdk.Scores.savesdk.Achievements.savehttps://lagged.com/api/rev-share/lagged.jswindow.LaggedAPIconst SDK_URL = 'https://lagged.com/api/rev-share/lagged.js';
async function loadLaggedSDK(timeoutMs = 10000) {
await new Promise((resolve, reject) => {
const s = Object.assign(document.createElement('script'), {
src: SDK_URL,
async: true,
onload: resolve,
onerror: () => reject(new Error('Failed to load Lagged SDK'))
});
document.head.appendChild(s);
});
const started = Date.now();
while (typeof window.LaggedAPI === 'undefined') {
if (Date.now() - started > timeoutMs)
throw new Error('LaggedAPI did not appear within ' + timeoutMs + 'ms');
await new Promise((r) => setTimeout(r, 50));
}
return window.LaggedAPI;
}LaggedAPI.initinitinitLaggedasync function initLagged(devId, publisherId) {
if (!devId || !publisherId) throw new Error('devId and publisherId are required');
const sdk = await loadLaggedSDK();
sdk.init(devId, publisherId);
const player = await new Promise((resolve) => {
sdk.User.get((response) => {
resolve(response && response.user ? response.user : {});
});
});
// id > 0 = signed-in player; id = 0 = guest
const profile = {
isAuthorized: player.id > 0,
id: player.id || null,
name: player.name || null,
avatar: player.avatar || null
};
console.debug('[Lagged] init complete', profile);
return { sdk, profile };
}LaggedAPI.User.get(callback){ user: { id, name, avatar } }initLaggedlocalStorageLaggedAPI.APIAds.show(onClosed)onClosedfunction showInterstitial(sdk, { onOpened, onClosed } = {}) {
onOpened?.();
sdk.APIAds.show(() => {
onClosed?.();
});
}LaggedAPI.GEvents.reward(canShowReward, rewardSuccess)canShowReward(success, showAdFn)successtrueshowAdFn()rewardSuccess(success)truefalsefunction showRewarded(sdk, { onOpened, onRewarded, onClosed, onFailed } = {}) {
onOpened?.();
sdk.GEvents.reward(
(success, showAdFn) => {
if (success) showAdFn();
else onFailed?.('unavailable');
},
(success) => {
if (success) {
onRewarded?.();
onClosed?.();
} else onFailed?.('not_completed');
}
);
}function submitScore(sdk, boardId, score) {
return new Promise((resolve, reject) => {
sdk.Scores.save({ score, board: boardId }, (response) => {
if (response && response.success) resolve(response);
else reject((response && response.errormsg) || 'leaderboard_failed');
});
});
}LaggedAPI.Achievements.save(achievements, callback)function unlockAchievement(sdk, achievement) {
if (!achievement) return Promise.reject(new Error('achievement is required'));
return new Promise((resolve, reject) => {
const payload = Array.isArray(achievement) ? achievement : [achievement];
sdk.Achievements.save(payload, (response) => {
if (response && response.success) resolve(response);
else reject((response && response.errormsg) || 'achievement_failed');
});
});
}