File: /wordpress/plugins/wp-cloud-client/1.1.5/src/Api/RestRouter.php
<?php
declare(strict_types=1);
namespace VPlugins\WPCloudClient\Api;
use VPlugins\WPCloudClient\Api\Controller\ActionController;
use VPlugins\WPCloudClient\Api\Controller\MailController;
use VPlugins\WPCloudClient\Api\Controller\WooCommerceController;
use VPlugins\WPCloudClient\Auth\AuthMiddleware;
final readonly class RestRouter {
private const NAMESPACE = 'wp-cloud/v1';
/**
* Construct the REST router.
*
* @param AuthMiddleware $auth Authentication middleware instance.
* @param ActionController $controller Action controller instance.
* @param WooCommerceController $wooCommerce WooCommerce controller instance.
* @param MailController $mail Mail controller instance.
*/
public function __construct(
private AuthMiddleware $auth,
private ActionController $controller,
private WooCommerceController $wooCommerce,
private MailController $mail,
) {}
/**
* Register the REST API routes for the plugin.
*
* @return void
*/
public function register(): void {
// Authenticated dispatch endpoint
register_rest_route(
self::NAMESPACE,
'/actions',
[
'methods' => 'POST',
'callback' => [ $this->controller, 'dispatch' ],
'permission_callback' => [ $this->auth, 'check' ],
]
);
// Public health endpoint (no auth for uptime monitoring)
register_rest_route(
self::NAMESPACE,
'/health',
[
'methods' => 'GET',
'callback' => [ $this->controller, 'health' ],
'permission_callback' => '__return_true',
]
);
// WooCommerce entity retrieval endpoint
register_rest_route(
self::NAMESPACE,
'/woocommerce',
[
'methods' => 'GET',
'callback' => [ $this->wooCommerce, 'fetch' ],
'permission_callback' => [ $this->auth, 'check' ],
]
);
// Mail list endpoint — returns pending (unnotified) emails
register_rest_route(
self::NAMESPACE,
'/mail',
[
'methods' => 'GET',
'callback' => [ $this->mail, 'list' ],
'permission_callback' => [ $this->auth, 'check' ],
]
);
// Mail single-record endpoint
register_rest_route(
self::NAMESPACE,
'/mail/(?P<id>\d+)',
[
'methods' => 'GET',
'callback' => [ $this->mail, 'fetch' ],
'permission_callback' => [ $this->auth, 'check' ],
]
);
}
}