[A-Z0-9]{26})/product-stats', [ 'methods' => 'GET', 'callback' => [$this, 'read'], 'permission_callback' => [Routes::class, 'canManage'], 'args' => ReportWindow::args(), ]); } public function read(WP_REST_Request $request): WP_REST_Response|\WP_Error { try { $range = ReportWindow::read($request); } catch (\InvalidArgumentException $refusal) { return ReportWindow::error($refusal); } $id = (string) $request->get_param('id'); $since = get_option(ProductStats::PREFIX . $id, null); return new WP_REST_Response($this->stats->report($id, $range, StatDay::today(), is_string($since) ? $since : null)); } }