namespace, '/' . $this->rest_base . '/poll', array( array( 'methods' => WP_REST_Server::CREATABLE, 'callback' => array( $this, 'poll' ), 'permission_callback' => array( $this, 'kick_permissions_check' ), ), ) ); } /** * Permission check: a valid X-Kick-Token header, compared in constant time. * * @param WP_REST_Request $request Full details about the request. * @return true|WP_Error True when the token matches. */ public function kick_permissions_check( $request ) { if ( Schema_AI_Bulk_Generator::verify_kick_token( $request->get_header( 'X-Kick-Token' ) ) ) { return true; } return new WP_Error( 'schema_ai_bad_kick_token', __( 'Invalid or missing kick token.', 'ai-schema-gen' ), array( 'status' => 403 ) ); } /** * Queue an immediate next-page run. No input, no meaningful output. * * @param WP_REST_Request $request Full details about the request. * @return WP_REST_Response */ public function poll( $request ) { $result = Schema_AI_Bulk_Generator::handle_kick(); return $this->success_response( array( 'result' => $result ), 202 ); } }