Skip to content

Commit 03ac404

Browse files
authored
feat: cloud calls default to in.webdecoy.com, the fronted ingest address (#83)
Every server-to-server call the plugin makes (detections, page-serve, violations, IP enrichment, actor feed and intel, entitlements, the bundled SDK client) moves behind Cloudflare fronting (app repo #833). These connections carry no fingerprint telemetry, so the proxy costs nothing and buys DDoS absorption in front of ingest. Sites that set a custom API URL are unaffected. 2.8.0.
1 parent bfb7f4a commit 03ac404

10 files changed

Lines changed: 19 additions & 13 deletions

‎changelog.txt‎

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
*** WebDecoy Bot Detection Changelog ***
22

3+
= 2.8.0 - 2026-08-28 =
4+
* Changed: the plugin's cloud calls now go to in.webdecoy.com, WebDecoy's DDoS-protected ingest address. Same service, sturdier front door. If your firewall allows outbound requests by hostname, allow in.webdecoy.com. Sites that set a custom API URL are unaffected.
5+
36
= 2.7.1 - 2026-08-18 =
47
* Removed: the canary trip email introduced in 2.7.0. The canary link sits on every public page, so busy sites would receive an email every hour, forever. Detections belong on the Detections page, not in your inbox. Everything else from 2.7.0 stays: the canary URL in settings, the trip-it-yourself prompt, and the Detections page recording every hit.
58

‎includes/class-webdecoy-actor-feed.php‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ class WebDecoy_Actor_Feed
5757
public const CRON_HOOK = 'webdecoy_sync_actor_feed';
5858

5959
/** Shared actor feed endpoint (Bearer API key; same auth as entitlements). */
60-
private const FEED_ENDPOINT = 'https://ingest.webdecoy.com/api/v1/sdk/actor-feed';
60+
private const FEED_ENDPOINT = 'https://in.webdecoy.com/api/v1/sdk/actor-feed';
6161

6262
/** Option persisting the delta cursor (`since`) between syncs. */
6363
private const CURSOR_OPTION = 'webdecoy_actor_feed_cursor';

‎includes/class-webdecoy-actor-intel.php‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@
3232
class WebDecoy_Actor_Intel
3333
{
3434
/** Batched intel endpoint (Bearer API key). */
35-
private const ENDPOINT = 'https://ingest.webdecoy.com/api/v1/sdk/detections/intel';
35+
private const ENDPOINT = 'https://in.webdecoy.com/api/v1/sdk/detections/intel';
3636

3737
/** Per-IP transient cache prefix. */
3838
private const CACHE_PREFIX = 'webdecoy_intel_';

‎includes/class-webdecoy-cloud-connect.php‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ class WebDecoy_Cloud_Connect
4545
* {@see WebDecoy_Violation_Reporter} authenticates the violations batch:
4646
* an `Authorization: Bearer <api_key>` header against the ingest service.
4747
*/
48-
private const ENTITLEMENTS_ENDPOINT = 'https://ingest.webdecoy.com/api/v1/sdk/entitlements';
48+
private const ENTITLEMENTS_ENDPOINT = 'https://in.webdecoy.com/api/v1/sdk/entitlements';
4949

5050
/** Where the generic "Upgrade" link points once connected. */
5151
private const BILLING_URL = 'https://app.webdecoy.com/billing';

‎includes/class-webdecoy-ip-enrichment.php‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
*/
2525
class WebDecoy_IP_Enrichment
2626
{
27-
private const ENDPOINT_BASE = 'https://ingest.webdecoy.com/api/v1/sdk/ip/';
27+
private const ENDPOINT_BASE = 'https://in.webdecoy.com/api/v1/sdk/ip/';
2828

2929
/** Cache TTL — 1 hour, matching node's ttlMs default. */
3030
private const TTL = HOUR_IN_SECONDS;

‎includes/class-webdecoy-violation-reporter.php‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@
3131
class WebDecoy_Violation_Reporter
3232
{
3333
/** Ingest batch endpoint. */
34-
private const ENDPOINT = 'https://ingest.webdecoy.com/api/v1/sdk/violations/batch';
34+
private const ENDPOINT = 'https://in.webdecoy.com/api/v1/sdk/violations/batch';
3535

3636
/** Max events per POST body, matching node's batch size. */
3737
private const BATCH_SIZE = 100;

‎includes/class-webdecoy-woocommerce.php‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -459,7 +459,7 @@ private function forward_to_webdecoy(string $ip, string $source, int $score, arr
459459
}
460460

461461
$ingest_url = rtrim($this->options['api_url'] ?? 'https://api.webdecoy.com', '/');
462-
$ingest_url = str_replace('api.webdecoy.com', 'ingest.webdecoy.com', $ingest_url);
462+
$ingest_url = str_replace('api.webdecoy.com', 'in.webdecoy.com', $ingest_url);
463463
$ingest_url .= '/api/v1/detect';
464464

465465
$collector = new \WebDecoy\SignalCollector();

‎readme.txt‎

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ Donate link: https://webdecoy.com
44
Tags: bot detection, security, spam protection, woocommerce, ai bots
55
Requires at least: 6.1
66
Tested up to: 7.0
7-
Stable tag: 2.7.1
7+
Stable tag: 2.8.0
88
Requires PHP: 7.4
99
License: GPLv2 or later
1010
License URI: https://www.gnu.org/licenses/gpl-2.0.html
@@ -284,6 +284,9 @@ The bundled good-bot list (sdk/src/GoodBotList.php) stores a documentation URL f
284284

285285
== Changelog ==
286286

287+
= 2.8.0 =
288+
* Changed: the plugin's cloud calls now go to in.webdecoy.com, WebDecoy's DDoS-protected ingest address. Same service, sturdier front door. If your firewall allows outbound requests by hostname, allow in.webdecoy.com. Sites that set a custom API URL are unaffected.
289+
287290
= 2.7.1 =
288291
* Removed: the canary trip email introduced in 2.7.0. The canary link sits on every public page, so busy sites would receive an email every hour, forever. Detections belong on the Detections page, not in your inbox. Everything else from 2.7.0 stays: the canary URL in settings, the trip-it-yourself prompt, and the Detections page recording every hit.
289292

‎sdk/src/Client.php‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
class Client
1616
{
1717
private const DEFAULT_BASE_URL = 'https://api.webdecoy.com';
18-
private const DEFAULT_INGEST_URL = 'https://ingest.webdecoy.com';
18+
private const DEFAULT_INGEST_URL = 'https://in.webdecoy.com';
1919
private const DEFAULT_TIMEOUT = 10;
2020

2121
/**
@@ -43,7 +43,7 @@ private static function userAgent(): string
4343
* - api_key: (required) Your WebDecoy API key
4444
* - organization_id: (optional) Your organization UUID - will be auto-fetched if not provided
4545
* - base_url: (optional) API base URL, defaults to https://api.webdecoy.com
46-
* - ingest_url: (optional) Ingest service URL, defaults to https://ingest.webdecoy.com
46+
* - ingest_url: (optional) Ingest service URL, defaults to https://in.webdecoy.com
4747
* - timeout: (optional) Request timeout in seconds, defaults to 10
4848
* - verify_ssl: (optional) Verify SSL certificates, defaults to true
4949
* @throws WebDecoyException If required configuration is missing

‎webdecoy.php‎

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
* Plugin Name: WebDecoy Bot Detection
44
* Plugin URI: https://webdecoy.com/wordpress
55
* Description: Protect your WordPress site from bots, spam, and carding attacks with WebDecoy's advanced threat detection.
6-
* Version: 2.7.1
6+
* Version: 2.8.0
77
* Requires at least: 6.1
88
* Requires PHP: 7.4
99
* Author: WebDecoy
@@ -41,7 +41,7 @@ function str_starts_with(string $haystack, string $needle): bool
4141
}
4242

4343
// Plugin constants
44-
define('WEBDECOY_VERSION', '2.7.1');
44+
define('WEBDECOY_VERSION', '2.8.0');
4545
define('WEBDECOY_PLUGIN_FILE', __FILE__);
4646
define('WEBDECOY_PLUGIN_DIR', plugin_dir_path(__FILE__));
4747
define('WEBDECOY_PLUGIN_URL', plugin_dir_url(__FILE__));
@@ -2662,7 +2662,7 @@ public function inject_js_verification_token(): void
26622662
'user_agent' => $user_agent,
26632663
];
26642664

2665-
wp_remote_post('https://ingest.webdecoy.com/api/v1/page-serve', [
2665+
wp_remote_post('https://in.webdecoy.com/api/v1/page-serve', [
26662666
'timeout' => 1,
26672667
'blocking' => false,
26682668
'headers' => [
@@ -2811,7 +2811,7 @@ private function log_client_detection(array $detection, string $ip): void
28112811
*/
28122812
private function forward_to_ingest(array $detection, string $ip): void
28132813
{
2814-
$ingest_url = 'https://ingest.webdecoy.com/api/v1/detect';
2814+
$ingest_url = 'https://in.webdecoy.com/api/v1/detect';
28152815

28162816
// Get API key (decrypt if needed)
28172817
$api_key = $this->options['api_key'];

0 commit comments

Comments
 (0)