- // ==UserScript==
- // @name Bonk.io - Disable P2P
- // @description Disables peer-to-peer connections on bonk.io and supercarstadium.com to hide your IP address
- // @version 0.4
- // @author kklkkj
- // @license MIT
- // @namespace https://github.com/kklkkj/
- // @match http*://bonk.io/*
- // @match http*://supercarstadium.com/*
- // @run-at document-body
- // @grant none
- // ==/UserScript==
-
- // RequireJS loads PeerJS by appending a script to <head>, thanks to Excigma for
- // some of this code
- const _appendChild = document.head.appendChild;
-
- document.head.appendChild = function () {
- if (arguments?.[0]?.src?.includes("peer.min.js")) {
- // Replace peer.min.js with a fake version that doesn't do anything
- arguments[0].textContent = `
-
- parcelRequire = function (e, r, t, n) {
- var i,
- o = 'function' == typeof parcelRequire && parcelRequire,
- u = 'function' == typeof require && require;
- function f(t, n) {
- if (!r[t]) {
- if (!e[t]) {
- var i = 'function' == typeof parcelRequire && parcelRequire;
- if (!n && i) return i(t, !0);
- if (o) return o(t, !0);
- if (u && 'string' == typeof t) return u(t);
- var c = new Error('Cannot find module \\'' + t + '\\'');
- throw c.code = 'MODULE_NOT_FOUND',
- c
- }
- p.resolve = function (r) {
- return e[t][1][r] || r
- },
- p.cache = {
- };
- var l = r[t] = new f.Module(t);
- e[t][0].call(l.exports, p, l, l.exports, this)
- }
- return r[t].exports;
- function p(e) {
- return f(p.resolve(e))
- }
- }
- f.isParcelRequire = !0,
- f.Module = function (e) {
- this.id = e,
- this.bundle = f,
- this.exports = {
- }
- },
- f.modules = e,
- f.cache = r,
- f.parent = o,
- f.register = function (r, t) {
- e[r] = [
- function (e, r) {
- r.exports = t
- },
- {
- }
- ]
- };
- for (var c = 0; c < t.length; c++) try {
- f(t[c])
- } catch (e) {
- i || (i = e)
- }
- if (t.length) {
- var l = f(t[t.length - 1]);
- 'object' == typeof exports && 'undefined' != typeof module ? module.exports = l : 'function' == typeof define && define.amd ? define(function () {
- return l
- }) : n && (this[n] = l)
- }
- if (parcelRequire = f, i) throw i;
- return f
- }({
- // Deleted other properties and modified the one below
- 'iTK6': [
- function (require, module, exports) {
- 'use strict';
- Object.defineProperty(exports, '__esModule', {
- value: !0
- });
-
- exports.peerjs = {
- // Fake PeerJS API
- Peer: function () {
- this.destroy = function(){};
- this.on = function(eventName, callback) {
- if (eventName == "open") setTimeout(()=>{ callback("LOOL1"+Math.random().toString(36).substring(2,13)) }, 0);
- }
- this.connect = function(peerID) {
- return {
- on: function() {},
- open: false
- };
- }
- }
- // util: e.util
- },
- exports.default = exports.Peer
- window.peerjs = exports.peerjs,
- window.Peer = exports.Peer;
- },
- {}
- ]
- }, {
- }, [
- 'iTK6'
- ], null)
-
- `;
- arguments[0].removeAttribute("src");
- const res = _appendChild.apply(document.head, arguments);
- arguments[0].dispatchEvent(new Event("load"));
- return res;
- } else return _appendChild.apply(document.head, arguments);
- };
-
- // Delete some WebRTC things in case replacing PeerJS fails
- // If replacing PeerJS fails, Bonk will just show "Still waiting for P2P..."
- const webrtcThings = [
- "RTCCertificate",
- "RTCDataChannel",
- "RTCIceCandidate",
- "RTCIceTransport",
- "RTCPeerConnection",
- "RTCRtpReceiver",
- "RTCSessionDescription",
- "mozRTCIceCandidate",
- "mozRTCPeerConnection",
- "mozRTCSessionDescription",
- "webkitRTCPeerConnection",
- ];
-
- for (const t of webrtcThings) delete window[t];
-
- console.log("Disable P2P script run");