<?php
|
namespace JVBase\rest\routes;
|
|
use JVBase\rest\Response;
|
use JVBase\rest\Rest;
|
use JVBase\rest\Route;
|
use WP_REST_Request;
|
use WP_REST_Response;
|
|
if (!defined('ABSPATH')) {
|
exit; // Exit if accessed directly
|
}
|
class ErrorRoutes extends Rest
|
{
|
/**
|
* Registers error routes
|
* @return void
|
*/
|
public function registerRoutes():void
|
{
|
Route::for('errors/log')
|
->post([$this, 'handleErrorLog'])
|
->args([
|
'error_type' => 'string|required|enum:network,timeout,offline,auth,rate_limit,server,client,unknown',
|
'message' => 'string|required',
|
'context' => 'string',
|
])
|
->auth('public')
|
->rateLimit(10);
|
}
|
|
/**
|
* @param WP_REST_Request $request
|
*
|
* @return WP_REST_Response
|
*/
|
public function handleErrorLog(WP_REST_Request $request): WP_REST_Response
|
{
|
$error_type = sanitize_text_field($request->get_param('error_type'));
|
$message = sanitize_text_field($request->get_param('message'));
|
$context = $request->get_param('context');
|
|
// Parse context JSON if provided
|
$contextData = [];
|
if (!empty($context)) {
|
$decoded = json_decode($context, true);
|
$contextData = is_array($decoded) ? $decoded : [];
|
}
|
|
// Determine severity based on error type
|
$severity = $this->getSeverityFromType($error_type);
|
|
JVB()->error()->log(
|
$contextData['component'] ?? 'client-js',
|
$message,
|
$contextData,
|
$severity
|
);
|
|
return Response::success(['message'=>'Error logged']);
|
}
|
|
/**
|
* @param string $type
|
*
|
* @return string
|
*/
|
private function getSeverityFromType(string $type):string
|
{
|
$severity_map = [
|
'network' => 'warning',
|
'timeout' => 'warning',
|
'offline' => 'info',
|
'auth' => 'warning',
|
'rate_limit' => 'warning',
|
'server' => 'error',
|
'client' => 'error',
|
'unknown' => 'error'
|
];
|
|
return $severity_map[$type] ?? 'error';
|
}
|
}
|