@anonympins/fingerprint 0.7.5 → 0.8.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (68) hide show
  1. package/CHANGELOG.md +57 -0
  2. package/README.md +1 -1
  3. package/package.json +3 -2
  4. package/public/anonympins-bot-mitigation-pow.zip +0 -0
  5. package/src/js/asn-lookup.js +223 -0
  6. package/src/js/fingerprint.client.js +1784 -1772
  7. package/src/js/fingerprint.client.obfuscated.js +1 -1
  8. package/src/js/fingerprint.js +236 -40
  9. package/src/js/fingerprint.utils.js +252 -2
  10. package/src/js/pow.worker.js +2 -2
  11. package/src/js/tests/asn-lookup.test.js +57 -0
  12. package/src/js/tests/cross_parity.test.js +3 -3
  13. package/src/js/tests/dns-circuit-breaker.test.js +6 -6
  14. package/src/js/tests/fingerprint.builder.test.js +76 -78
  15. package/src/js/tests/fingerprint.client.test.js +16 -17
  16. package/src/js/tests/fingerprint.test.js +19 -12
  17. package/src/js/tests/ja3AnomalyDetector.test.js +135 -136
  18. package/src/js/tests/library.test.js +94 -95
  19. package/src/js/tests/obfuscation.test.js +8 -8
  20. package/src/js/tests/quicFingerprint.test.js +47 -0
  21. package/src/js/tests/tcpFingerprint.test.js +4 -4
  22. package/src/js/upow-model-task.js +155 -112
  23. package/src/php/AsnLookupEngine.php +173 -0
  24. package/src/php/Challenge/ChallengeUtils.php +430 -117
  25. package/src/php/Config/SecurityProfiles.php +75 -62
  26. package/src/php/DirectFingerprint.php +80 -13
  27. package/src/php/FingerprintBuilder.php +13 -13
  28. package/src/php/FingerprintClient.php +6 -6
  29. package/src/php/FingerprintEngine.php +2141 -1837
  30. package/src/php/Ja3AnomalyDetector.php +22 -22
  31. package/src/php/NetworkProfile.php +68 -0
  32. package/src/php/Optimization/FunctionRegistry.php +4 -4
  33. package/src/php/Optimization/Optimization.php +6 -6
  34. package/src/php/ProblemManager.php +12 -2
  35. package/src/php/RequestContext.php +11 -11
  36. package/src/php/Store/InMemoryStore.php +96 -66
  37. package/src/php/Store/MongoDbStore.php +2 -2
  38. package/src/php/Store/RedisStore.php +1 -1
  39. package/src/php/Store/StoreManager.php +48 -35
  40. package/src/php/Tests/AsnLookupTest.php +61 -0
  41. package/src/php/Tests/ChallengeUtilsTest.php +31 -0
  42. package/src/php/Tests/DnsCircuitBreakerTest.php +105 -105
  43. package/src/php/Tests/FingerprintClientTest.php +70 -70
  44. package/src/php/Tests/FingerprintEngineTest.php +4 -2
  45. package/src/php/Tests/PowTest.php +37 -39
  46. package/src/php/Tests/QuicFingerprintTest.php +115 -53
  47. package/src/php/Tests/ThreatIntelTest.php +2 -2
  48. package/src/php/Utils/BigInt.php +202 -202
  49. package/src/php/Utils/BlockList.php +13 -13
  50. package/src/php/Utils/Env.php +7 -2
  51. package/src/php/Utils/Logger.php +19 -1
  52. package/src/php/Utils/MaliciousPatterns.php +6 -6
  53. package/src/php/Utils/MetricsManager.php +209 -209
  54. package/src/php/Utils/RequestUtils.php +348 -18
  55. package/src/php/Utils/TLSClientHelloParser.php +385 -369
  56. package/src/php/WordPress/WpDbStore.php +34 -7
  57. package/src/php/WordPress/anonympins-bot-mitigation-pow.php +1222 -0
  58. package/src/php/WordPress/fingerprint-anti-bot.php +0 -559
  59. package/src/php/WordPress/languages/anonympins-bot-mitigation-pow-fr_FR.mo +0 -0
  60. package/src/php/WordPress/languages/anonympins-bot-mitigation-pow-fr_FR.po +232 -0
  61. package/src/php/WordPress/languages/fingerprint-wordpress-de_DE.mo +0 -0
  62. package/src/php/WordPress/languages/fingerprint-wordpress-de_DE.po +297 -261
  63. package/src/php/WordPress/languages/fingerprint-wordpress-fr_FR.mo +0 -0
  64. package/src/php/WordPress/languages/fingerprint-wordpress-fr_FR.po +348 -267
  65. package/src/php/WordPress/package.php +88 -99
  66. package/src/php/WordPress/readme.txt +28 -6
  67. package/src/php/bin/auto-tune.php +1 -1
  68. package/public/fingerprint-anti-bot.zip +0 -0
@@ -10,15 +10,15 @@ if (!defined('ABSPATH')) {
10
10
 
11
11
  use Anonympins\Fingerprint\Store\IStore;
12
12
 
13
- // Polyfill pour ARRAY_A si chargé hors du cycle de vie standard de WordPress
13
+ // Polyfill for ARRAY_A if loaded outside standard WordPress lifecycle
14
14
  if (!defined('ARRAY_A')) {
15
15
  define('ARRAY_A', 'ARRAY_A');
16
16
  }
17
17
 
18
18
  /**
19
- * Adaptateur IStore persistant pour WordPress exploitant l'objet $wpdb.
20
- * Permet de stocker les sessions d'appareils, nonces et états de PoW
21
- * sans dépendre d'une extension mémoire comme Redis ou APCu.
19
+ * Persistent IStore adapter for WordPress backed by the global $wpdb database object.
20
+ * Stores device sessions, challenge nonces, and PoW states without
21
+ * requiring external memory stores such as Redis or APCu.
22
22
  */
23
23
  class WpDbStore implements IStore
24
24
  {
@@ -35,7 +35,7 @@ class WpDbStore implements IStore
35
35
  }
36
36
 
37
37
  /**
38
- * Crée la table de stockage si elle n'existe pas encore.
38
+ * Creates the storage table if it does not exist yet.
39
39
  */
40
40
  public function ensureTable(): void
41
41
  {
@@ -52,7 +52,7 @@ class WpDbStore implements IStore
52
52
  KEY `expires_idx` (`expires_at`)
53
53
  ) {$charsetCollate};";
54
54
 
55
- // Chargement sécurisé de dbDelta si ABSPATH est présent
55
+ // Safely load dbDelta if ABSPATH is defined
56
56
  if (!function_exists('dbDelta') && defined('ABSPATH')) {
57
57
  $upgradeFile = ABSPATH . 'wp-admin/includes/upgrade.php';
58
58
  if (file_exists($upgradeFile)) {
@@ -142,7 +142,7 @@ class WpDbStore implements IStore
142
142
  }
143
143
 
144
144
  /**
145
- * Nettoie les lignes expirées (appelé par le WP-Cron périodique).
145
+ * Purges expired records (invoked by periodic WP-Cron).
146
146
  */
147
147
  public function pruneExpired(): int
148
148
  {
@@ -156,4 +156,31 @@ class WpDbStore implements IStore
156
156
  );
157
157
  return is_numeric($deleted) ? (int)$deleted : 0;
158
158
  }
159
+
160
+ /**
161
+ * Returns the total number of records currently stored.
162
+ */
163
+ public function getTotalCount(): int
164
+ {
165
+ if (!$this->db || !method_exists($this->db, 'get_var')) {
166
+ return 0;
167
+ }
168
+ $count = $this->db->get_var("SELECT COUNT(*) FROM `{$this->table}`");
169
+ return is_numeric($count) ? (int)$count : 0;
170
+ }
171
+
172
+ /**
173
+ * Returns the number of expired records awaiting cron deletion.
174
+ */
175
+ public function getExpiredCount(): int
176
+ {
177
+ if (!$this->db || !method_exists($this->db, 'get_var') || !method_exists($this->db, 'prepare')) {
178
+ return 0;
179
+ }
180
+ $now = time();
181
+ $count = $this->db->get_var(
182
+ $this->db->prepare("SELECT COUNT(*) FROM `{$this->table}` WHERE expires_at IS NOT NULL AND expires_at < %d", $now)
183
+ );
184
+ return is_numeric($count) ? (int)$count : 0;
185
+ }
159
186
  }