| | |
| | | <?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.) |
| | |
| | | * 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 |
| | | { |
| | |
| | | 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); |
| | | } |
| | | |