is_wpcom_simple()
|| ! ( new Status() )->is_offline_mode()
) && apply_filters( 'jetpack_ai_enabled', true )
) {
Blocks::jetpack_register_block(
__DIR__,
array( 'render_callback' => __NAMESPACE__ . '\load_assets' )
);
}
}
add_action( 'init', __NAMESPACE__ . '\register_block' );
/**
* Jetpack AI Assistant block registration/dependency declaration.
*
* @param array $attr Array containing the Jetpack AI Assistant block attributes.
* @param string $content String containing the Jetpack AI Assistant block content.
*
* @return string
*/
function load_assets( $attr, $content ) {
/*
* Enqueue necessary scripts and styles.
*/
Jetpack_Gutenberg::load_assets_as_required( __DIR__ );
return sprintf(
'
%2$s
',
esc_attr( Blocks::classes( Blocks::get_block_feature( __DIR__ ), $attr ) ),
$content
);
}
/**
* Retrieve the Chrome trial AI token for use with the Chrome AI feature.
* This ultimately sets an Origin-Trial header with the token.
*/
function add_chrome_ai_token_headers() {
$token_transient_names = array( 'jetpack-ai-chrome-ai-translation-token', 'jetpack-ai-chrome-ai-summarization-token' );
foreach ( $token_transient_names as $token_transient_name ) {
$cached_token = get_transient( $token_transient_name );
if ( ! $cached_token ) {
$blog_id = \Jetpack_Options::get_option( 'id' );
// get the token from wpcom
$wpcom_request = Client::wpcom_json_api_request_as_user(
sprintf( '/sites/%d/jetpack-ai/ai-assistant-feature', $blog_id ),
'v2',
array(
'method' => 'GET',
'headers' => array(
'X-Forwarded-For' => ( new Visitor() )->get_ip( true ),
),
'timeout' => 30,
),
null,
'wpcom'
);
$response_code = wp_remote_retrieve_response_code( $wpcom_request );
if ( 200 === $response_code ) {
$ai_assistant_feature_data = json_decode( wp_remote_retrieve_body( $wpcom_request ), true );
if ( ! empty( $ai_assistant_feature_data['chrome-ai-token'] ) ) {
set_transient(
$token_transient_name,
$ai_assistant_feature_data['chrome-ai-token'],
3600 // cache for an hour, but this can probably be longer
);
$cached_token = $ai_assistant_feature_data['chrome-ai-token'];
}
}
}
if ( $cached_token ) {
echo '';
}
}
}
/**
* Register extensions.
*/
add_action(
'jetpack_register_gutenberg_extensions',
function () {
if ( apply_filters( 'jetpack_ai_enabled', true ) ) {
Jetpack_Gutenberg::set_extension_available( 'ai-assistant-support' );
Jetpack_Gutenberg::set_extension_available( 'ai-assistant-form-support' );
Jetpack_Gutenberg::set_extension_available( 'ai-content-lens' );
Jetpack_Gutenberg::set_extension_available( 'ai-assistant-backend-prompts' );
Jetpack_Gutenberg::set_extension_available( 'ai-assistant-usage-panel' );
Jetpack_Gutenberg::set_extension_available( 'ai-featured-image-generator' );
Jetpack_Gutenberg::set_extension_available( 'ai-title-optimization' );
Jetpack_Gutenberg::set_extension_available( 'ai-assistant-experimental-image-generation-support' );
Jetpack_Gutenberg::set_extension_available( 'ai-general-purpose-image-generator' );
Jetpack_Gutenberg::set_extension_available( 'ai-assistant-site-logo-support' );
Jetpack_Gutenberg::set_extension_available( 'ai-title-optimization-keywords-support' );
Jetpack_Gutenberg::set_extension_available( 'ai-assistant-image-extension' );
if ( apply_filters( 'breve_enabled', true ) ) {
Jetpack_Gutenberg::set_extension_available( 'ai-proofread-breve' );
}
if ( apply_filters( 'ai_seo_enhancer_enabled_unrestricted', false ) ) {
Jetpack_Gutenberg::set_extension_available( 'ai-seo-enhancer-enabled-unrestricted' );
Jetpack_Gutenberg::set_extension_available( 'ai-seo-enhancer' );
} elseif ( apply_filters( 'ai_seo_enhancer_enabled', false ) ) {
Jetpack_Gutenberg::set_availability_for_plan( 'ai-seo-enhancer' );
}
}
}
);
/**
* Register the `ai-list-to-table-transform` extension.
*/
add_action(
'jetpack_register_gutenberg_extensions',
function () {
if ( apply_filters( 'jetpack_ai_enabled', true ) &&
apply_filters( 'list_to_table_transform_enabled', false )
) {
\Jetpack_Gutenberg::set_extension_available( 'ai-list-to-table-transform' );
}
}
);
/**
* Register the `ai-response-feedback` extension.
*/
add_action(
'jetpack_register_gutenberg_extensions',
function () {
if ( apply_filters( 'jetpack_ai_enabled', true ) &&
apply_filters( 'ai_response_feedback_enabled', true )
) {
\Jetpack_Gutenberg::set_extension_available( 'ai-response-feedback' );
}
}
);
/**
* Register the `ai-seo-assistant` extension.
*/
add_action(
'jetpack_register_gutenberg_extensions',
function () {
if ( apply_filters( 'jetpack_ai_enabled', true ) &&
apply_filters( 'ai_seo_assistant_enabled', false )
) {
\Jetpack_Gutenberg::set_extension_available( 'ai-seo-assistant' );
}
}
);
/**
* Register the `ai-use-chrome-ai-sometimes` extension.
*/
add_action(
'jetpack_register_gutenberg_extensions',
function () {
if ( apply_filters( 'jetpack_ai_enabled', true ) &&
apply_filters( 'ai_chrome_ai_enabled', false )
) {
\Jetpack_Gutenberg::set_extension_available( 'ai-use-chrome-ai-sometimes' );
add_chrome_ai_token_headers();
}
}
);