get($key); $bucket = is_array($stored) ? $stored : null; $decision = (new RateLimitWindow(self::LIMIT, self::WINDOW))->hit($bucket, time()); $cache->set($key, $decision['bucket'], $decision['ttl']); if ($decision['allowed']) { return true; } return new WP_Error( 'SENTINELO_rate_limited', __('Too many requests. Please try again later.', 'sentinelo'), [ 'status' => 429, 'retry_after' => $decision['retryAfter'], ] ); } }