Jake Vanderwerf
2026-08-28 a9654f00c8fbc9934289d761843ddd071025013f
inc/integrations/Requests.php
@@ -1,18 +1,20 @@
<?php
namespace JVBase\integrations;
use WP_Error;
if (!defined('ABSPATH')) {
   exit;
}
trait Requests
{
   protected bool $hasRequests = true;
   /**
    * Child classes must set this (e.g. 'https://api.example.com/v1/')
    */
   protected ?string $baseUrl = null;
   protected int $ttl = 300; //5 minutes default
   protected ?RateLimits $requestLimiter = null;
   /**
    * Child classes define their auth headers (Bearer token, API key, etc.)
@@ -23,7 +25,16 @@
    * Child classes inspect the wp_remote_request response,
    * decode it, and handle/log errors as needed
    */
   abstract protected function handleResponse(array|\WP_Error $response, string $method, string $endpoint): array;
   abstract protected function handleResponse(array|WP_Error $response, string $method, string $endpoint): array;
   protected function initializeRequestLimiter():void
   {
      $key = $this->service_name;
      if (!is_null($this->userID)) {
         $key .= '_'.$this->userID;
      }
      $this->requestLimiter = new RateLimits($key);
   }
   public function getRequest(string $endpoint, array $data = [], bool $force = false, ?int $ttl = null): array
   {
@@ -66,7 +77,7 @@
         return [];
      }
      if ($this->requestLimiter && !$this->awaitRateLimit($endpoint)) {
         $error = new \WP_Error('rate_limit_exceeded', "Rate limit exceeded for {$endpoint}");
         $error = new WP_Error('rate_limit_exceeded', "Rate limit exceeded for {$endpoint}");
         return $this->handleResponse($error, $method, $endpoint);
      }