rustenium-identity 0.1.2

A versatile stealth overlay for rustenium
Documentation
// Navigator overrides
Object.defineProperty(navigator, 'webdriver', { get: () => undefined });

PropertyModifier.spoofProperty(Navigator.prototype, 'platform', "{{NAVIGATOR_PLATFORM}}");
PropertyModifier.spoofProperty(Navigator.prototype, 'hardwareConcurrency', {{HARDWARE_CONCURRENCY}});
PropertyModifier.spoofProperty(Navigator.prototype, 'deviceMemory', {{MEMORY}});
PropertyModifier.spoofProperty(Navigator.prototype, 'languages', {{LANGUAGES_JSON}});
PropertyModifier.spoofProperty(Navigator.prototype, 'language', "{{LANGUAGE_0}}");
PropertyModifier.spoofProperty(Navigator.prototype, 'maxTouchPoints', {{MAX_TOUCH_POINTS}});

// Screen available size
Object.defineProperty(screen, 'availWidth', { get: () => {{LOGICAL_WIDTH}} });
Object.defineProperty(screen, 'availHeight', { get: () => {{AVAIL_HEIGHT}} });

// WebGL parameter spoofing
(function() {
  var webglParam37445 = "{{WEBGL_VENDOR}}";
  var webglParam37446 = "{{WEBGL_RENDERER}}";

  var webglParameterSpoof = function(target) {
    var proto = target.prototype;
    var getParameter = proto.getParameter;
    Object.defineProperty(proto, 'getParameter', {
      value: function() {
        switch (arguments[0]) {
          case 37445: return webglParam37445;
          case 37446: return webglParam37446;
          default: return getParameter.apply(this, arguments);
        }
      }
    });
  };
  webglParameterSpoof(WebGLRenderingContext);
  if (typeof WebGL2RenderingContext !== 'undefined') {
    webglParameterSpoof(WebGL2RenderingContext);
  }
})();

// History count spoofing
{{HISTORY_BLOCK}}

// Battery status
navigator.getBattery = () => Promise.resolve({
  charging: {{CHARGING}},
  chargingTime: {{CHARGING_TIME}},
  dischargingTime: {{DISCHARGING_TIME}},
  level: {{BATTERY_PERCENTAGE}} / 100,
  addEventListener: () => {},
  removeEventListener: () => {},
  dispatchEvent: () => true,
});

// Browser-specific overrides
{{BROWSER_BLOCK}}