Merge branch 'immediate-finds' into immediate-finds-modules-proxy
This commit is contained in:
commit
2f55c7b126
|
@ -78,8 +78,7 @@ export default definePlugin({
|
||||||
// Because of that, its WebpackInstance doesnt export wreq.m or wreq.c
|
// Because of that, its WebpackInstance doesnt export wreq.m or wreq.c
|
||||||
|
|
||||||
// To circuvent this and disable Sentry we are gonna hook when wreq.g of its WebpackInstance is set.
|
// To circuvent this and disable Sentry we are gonna hook when wreq.g of its WebpackInstance is set.
|
||||||
// When that happens we are gonna obtain a reference to its internal module cache (wreq.c) and proxy its prototype,
|
// When that happens we are gonna forcefully throw an error and abort everything.
|
||||||
// so, when the first require to initialize the Sentry is attempted, we are gonna forcefully throw an error and abort everything.
|
|
||||||
Object.defineProperty(Function.prototype, "g", {
|
Object.defineProperty(Function.prototype, "g", {
|
||||||
configurable: true,
|
configurable: true,
|
||||||
|
|
||||||
|
@ -94,36 +93,30 @@ export default definePlugin({
|
||||||
// Ensure this is most likely the Sentry WebpackInstance.
|
// Ensure this is most likely the Sentry WebpackInstance.
|
||||||
// Function.g is a very generic property and is not uncommon for another WebpackInstance (or even a React component: <g></g>) to include it
|
// Function.g is a very generic property and is not uncommon for another WebpackInstance (or even a React component: <g></g>) to include it
|
||||||
const { stack } = new Error();
|
const { stack } = new Error();
|
||||||
if (!(stack?.includes("discord.com") || stack?.includes("discordapp.com")) || this.c != null || !String(this).includes("exports:{}")) {
|
if (!(stack?.includes("discord.com") || stack?.includes("discordapp.com")) || !String(this).includes("exports:{}") || this.c != null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const cacheExtractSym = Symbol("vencord.cacheExtract");
|
const assetPath = stack?.match(/\/assets\/.+?\.js/)?.[0];
|
||||||
Object.defineProperty(Object.prototype, cacheExtractSym, {
|
if (!assetPath) {
|
||||||
configurable: true,
|
return;
|
||||||
|
|
||||||
get(this: WebpackRequire["c"]) {
|
|
||||||
// One more condition to check if this is the Sentry WebpackInstance
|
|
||||||
if (Array.isArray(this)) {
|
|
||||||
return { exports: {} };
|
|
||||||
}
|
}
|
||||||
|
|
||||||
new Logger("NoTrack", "#8caaee").info("Disabling Sentry by proxying its WebpackInstance cache");
|
const srcRequest = new XMLHttpRequest();
|
||||||
Object.setPrototypeOf(this, new Proxy(this, {
|
srcRequest.open("GET", assetPath, false);
|
||||||
get() {
|
srcRequest.send();
|
||||||
throw new Error("Sentry successfully disabled");
|
|
||||||
|
// Final condition to see if this is the Sentry WebpackInstance
|
||||||
|
if (!srcRequest.responseText.includes("window.DiscordSentry=")) {
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
}));
|
|
||||||
|
new Logger("NoTrack", "#8caaee").info("Disabling Sentry by erroring its WebpackInstance");
|
||||||
|
|
||||||
Reflect.deleteProperty(Function.prototype, "g");
|
Reflect.deleteProperty(Function.prototype, "g");
|
||||||
Reflect.deleteProperty(Object.prototype, cacheExtractSym);
|
|
||||||
Reflect.deleteProperty(window, "DiscordSentry");
|
Reflect.deleteProperty(window, "DiscordSentry");
|
||||||
return { exports: {} };
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// WebpackRequire our fake module id
|
throw new Error("Sentry successfully disabled");
|
||||||
this(cacheExtractSym);
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue