403] ); } return true; } protected function success(mixed $data, int $status = 200, array $meta = []): \WP_REST_Response { $payload = [ 'success' => true, 'data' => $data, ]; if (!empty($meta)) { $payload['meta'] = $meta; } return new \WP_REST_Response($payload, $status); } protected function error(string $message, int $status = 400, string $code = 'arrayfunnel_error', array $details = []): \WP_REST_Response { $error = [ 'code' => $code, 'message' => $message, 'status' => $status, ]; if (!empty($details)) { $error['details'] = $details; } return new \WP_REST_Response([ 'success' => false, 'error' => $error, ], $status); } }