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) ->register(); } /** * @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'; } }