Jake Vanderwerf
2026-02-04 2127b1bdd73ecd2423e443992da4b442f5a3c1a3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
<?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';
    }
}