@mntm/stats
Version:
A package for integrating analytics tools
41 lines (40 loc) • 1.24 kB
JavaScript
import { loadScript, thenable } from '../utils.js';
import { launchParams } from '../launch.js';
import { safeWindow } from '../dom.js';
/**
* Implements Yandex Metrika
*
* @param code XXXXXXX
*/
export const createProviderYM = (code, init) => {
const context = safeWindow;
context.ym = Object.assign(function ym() {
// eslint-disable-next-line prefer-rest-params
const args = arguments;
context.ym.a.push(args);
}, {
a: [],
l: Date.now()
});
context.ym(code, 'init', init);
context.ym(code, 'setUserID', launchParams.vk_user_id);
// Use a CDN because it seems faster
const load = loadScript('https://cdn.jsdelivr.net/npm/yandex-metrica-watch/tag.js');
const ready = load.then(() => {
if (!context.Ya) {
throw new Error('net::ERR_BLOCKED_BY_CLIENT');
}
});
const provider = {
send(event, params) {
return thenable(ready, () => {
context.ym(code, 'reachGoal', event, {
category: params.category,
label: params.label,
screen: params.screen || 'unknown'
});
});
}
};
return provider;
};