Skip to content

Instantly share code, notes, and snippets.

@thyngster
Created February 6, 2026 02:31
Show Gist options
  • Select an option

  • Save thyngster/f1a9db70012e6ded2a7d00c2b0b6e387 to your computer and use it in GitHub Desktop.

Select an option

Save thyngster/f1a9db70012e6ded2a7d00c2b0b6e387 to your computer and use it in GitHub Desktop.
dataLayer Integrity Monitor
(function protectDataLayer() {
window._internalDataLayer = window.dataLayer || [];
// Wrap the array in a Proxy to detect internal changes
const dataLayerProxy = new Proxy(window._internalDataLayer, {
set(target, prop, value, receiver) {
console.log(`[dataLayer] Change detected: "${prop}" set to`, value);
return Reflect.set(target, prop, value, receiver);
},
get(target, prop, receiver) {
const value = Reflect.get(target, prop, receiver);
// Detect mutating methods like push, pop, splice, etc.
if (typeof value === 'function' && ['pop','shift','unshift','splice','sort','reverse'].includes(prop)) {
return function (...args) {
console.log(`[dataLayer] Method "${prop}" called with`, args);
return value.apply(target, args);
};
}
return value;
}
});
// 3️⃣ Protect the variable itself from being overwritten
Object.defineProperty(window, 'dataLayer', {
configurable: true,
enumerable: true,
get() {
return dataLayerProxy;
},
set(newValue) {
console.log('[dataLayer] Attempt to overwrite/reinitialize detected!', newValue);
console.log('Stack trace:\n', new Error().stack);
}
});
console.log('✅ dataLayer monitoring active');
})();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment