Jake Vanderwerf
2025-09-30 19d20832e881112d197254b1c41edc4c0f03758e
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
<?php
namespace JVBase\rest\routes;
 
use JVBase\JVB;
use JVBase\rest\RestRouteManager;
use WP_REST_Request;
use WP_REST_Response;
 
if (!defined('ABSPATH')) {
    exit; // Exit if accessed directly
}
class ErrorRoutes extends RestRouteManager
{
    /**
     * Registers error routes
     * @return void
     */
    public function registerRoutes():void
    {
        register_rest_route($this->namespace, '/errors/log', [
            [
                'methods' => 'POST',
                'callback' => [$this, 'handleErrorLog'],
                'permission_callback' => '__return_true', // Allow anyone to log errors
            ]
        ]);
    }
 
    /**
     * @param WP_REST_Request $request
     *
     * @return WP_REST_Response
     */
    public function handleErrorLog(WP_REST_Request$request):WP_REST_Response
    {
        $error_type = $request->get_param('error_type');
        $message = $request->get_param('message');
        $context = json_decode($request->get_param('context'), true);
 
        // Determine severity based on error type
        $severity = $this->getSeverityFromType($error_type);
 
        JVB()->error()->log(
            $context['component'] ?? 'client-js',
            $message,
            $context,
            $severity
        );
 
        return new WP_REST_Response([
            'success' => true,
            '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';
    }
}