Jake Vanderwerf
2026-08-25 3d25ad7de4fdbb3eba2cde2a62422e6be5d79a0a
inc/rest/Rest.php
@@ -1,10 +1,12 @@
<?php
namespace JVBase\rest;
use JVBase\Instance;
use JVBase\integrations\services\Cloudflare;
use JVBase\managers\Cache;
use JVBase\meta\Meta;
use JVBase\registrar\Registrar;
use JVBase\utility\Features;
use JVBase\base\Site;
use WP_REST_Request;
use WP_REST_Response;
use Exception;
@@ -30,7 +32,7 @@
   protected string $namespace = 'jvb/v1';
   protected ?Cache $cache = null;
   protected string $cacheName = '';
   protected int $cacheTtl = 3600;
   protected int $cacheTtl = HOUR_IN_SECONDS;
   protected static ?string $action;
   public function __construct()
@@ -39,9 +41,15 @@
         $this->cache = Cache::for($this->cacheName, $this->cacheTtl);
      }
      add_action('rest_api_init', [$this, 'registerRoutes']);
      add_action('rest_api_init', [$this, 'registerRoutes'], 10);
      add_action('rest_api_init', [$this, 'ensureDefinitions'], 9);
   }
   public function ensureDefinitions():void
   {
      Site::getInstance();
      Registrar::ensureInstanced();
   }
   /**
    * Register routes - implement using Route builder
    */
@@ -174,7 +182,7 @@
   /**
    * Convert MySQL datetime to ISO 8601 timestamp
    */
   protected function formatTimestamp(?string $mysqlDatetime): ?string
   public function formatTimestamp(?string $mysqlDatetime): ?string
   {
      return Response::formatTimestamp($mysqlDatetime);
   }
@@ -224,7 +232,7 @@
      // Keep existing author filtering logic
      $authorQuery = [];
      foreach (Registrar::getFeatured('can_create', 'user') as $type) {
      foreach (Registrar::withFeature('can_create', 'user') as $type) {
         if (array_key_exists($type, $data)) {
            $artist_ids = array_map(
               'absint',
@@ -537,7 +545,7 @@
         return false;
      }
      $post_types = is_array($args['post_type']) ? $args['post_type'] : [$args['post_type']];
      $hasTimeline = array_map(function($item) { return jvbCheckBase($item); },Registrar::getFeatured('is_timeline', 'post'));
      $hasTimeline = array_map(function($item) { return jvbCheckBase($item); },Registrar::withFeature('is_timeline', 'post'));
      return !empty(array_intersect($post_types, $hasTimeline));
   }
   // =========================================================================
@@ -549,11 +557,11 @@
    */
   protected function verifyTurnstile(string $token): bool
   {
      if (!Features::hasIntegration('cloudflare') || !JVB()->connect('cloudflare')->isSetUp()) {
      if (!Site::hasIntegration('cloudflare') || !Cloudflare::getInstance()->isSetUp()) {
         return true;
      }
      return !empty($token) && JVB()->connect('cloudflare')->verifyTurnstile($token);
      return !empty($token) && Cloudflare::getInstance()->verifyTurnstile($token);
   }
   /**