PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 14.5.1
Jetpack – WP Security, Backup, Speed, & Growth v14.5.1
12.0.3 12.1.3 12.2.3 12.3.2 12.4.2 12.5.2 12.6.4 12.7.3 12.8.3 12.9.5 13.0.2 13.1.5 13.2.4 13.3.3 13.4.5 13.5.2 13.6.2 13.7.2 13.8.3 13.9.2 14.0.1 14.1.1 14.2.2 14.3.1 14.4.2 14.5.1 14.6.1 14.7.1 14.8.1 14.9.2 15.0.3 15.1.2 15.2.1 15.3.2 15.4.1 15.5.1 15.6.1 15.7.2 15.8.1 15.9.2 16.0.2 16.1.3 16.2-a.5 16.2-a.3 16.1.2 16.2-a.1 16.1.1 16.1 16.1-beta 16.1-beta.2 16.1-beta.3 16.1-a.5 16.1-a.3 16.0.1 16.1-a.1 16.0 16.0-beta 16.0-a.7 16.0-a.5 15.9.1 16.0-a.3 16.0-a.1 15.9 15.9-beta 15.9-a.7 15.9-a.5 15.9-a.3 15.9-a.1 15.8 15.8-beta 15.8-a.7 15.8-a.5 5.2.5 5.3.4 5.4.4 5.5.5 5.6.5 5.7.5 5.8.4 5.9.4 6.0.4 6.1 6.1.1 6.1.2 6.1.3 6.1.4 6.1.5 6.2 6.2.1 6.2.2 6.2.3 6.2.4 6.2.5 6.3 6.3.1 6.3.2 6.3.3 6.3.4 6.3.5 6.3.6 6.3.7 6.4 6.4.1 6.4.2 6.4.3 6.4.4 6.4.5 6.4.6 6.5 6.5.1 6.5.2 6.5.3 6.5.4 6.6 6.6.1 6.6.2 6.6.3 6.6.4 6.6.5 6.7 6.7.1 6.7.2 6.7.3 6.7.4 6.8 6.8.1 6.8.2 6.8.3 6.8.4 6.8.5 6.9 6.9.1 6.9.2 6.9.3 6.9.4 7.0 7.0.1 7.0.2 7.0.3 7.0.4 7.0.5 7.1 7.1.1 7.1.2 7.1.3 7.1.4 7.1.5 7.2 7.2.1 7.2.1.1 7.2.2 7.2.3 7.2.4 7.2.5 7.3 7.3.0.1 7.3.1 7.3.1.1 7.3.2 7.3.3 7.3.4 7.3.5 7.4 7.4.1 7.4.2 7.4.3 7.4.4 7.4.5 7.5 7.5.0.1 7.5.1 7.5.2 7.5.3 7.5.4 7.5.5 7.5.6 7.5.7 7.6 7.6.1 7.6.2 7.6.3 7.6.4 7.7 7.7.1 7.7.2 7.7.3 7.7.4 7.7.5 7.7.6 7.8 7.8.1 7.8.2 7.8.3 7.8.4 7.9 7.9.1 7.9.2 7.9.3 7.9.4 8.0 8.0.1 8.0.2 8.0.3 8.1 8.1.1 8.1.2 8.1.3 8.1.4 8.2 8.2.0.1 8.2.1 8.2.2 8.2.3 8.2.4 8.2.5 8.2.6 8.3 8.3.1 8.3.2 8.3.3 8.4 8.4.1 8.4.2 8.4.3 8.4.4 8.4.5 8.5 8.5.1 8.5.2 8.5.3 8.6 8.6.1 8.6.2 8.6.3 8.6.4 8.7 8.7.0.1 8.7.1 8.7.2 8.7.3 8.7.4 8.8 8.8.1 8.8.2 8.8.3 8.8.4 8.8.5 8.9 8.9.1 8.9.2 8.9.3 8.9.4 9.0 9.0.1 9.0.2 9.0.3 9.0.4 9.0.5 9.1 9.1.1 9.1.2 9.1.3 9.2 9.2.1 9.2.2 9.2.3 9.2.4 9.3 9.3.1 9.3.2 9.3.3 9.3.4 9.3.5 9.4 9.4.1 9.4.2 9.4.3 9.4.4 9.5 9.5.1 9.5.2 9.5.3 9.5.4 9.5.5 9.6 9.6.1 9.6.2 9.6.3 9.6.4 9.7 9.7.1 9.7.2 15.7-beta.2 9.7.3 15.7.1 9.8 15.8-a.1 9.8.1 15.8-a.3 9.8.2 2.0.9 9.8.3 2.1.7 9.9 2.2.10 9.9.1 2.3.10 9.9.2 2.4.7 9.9.3 2.5.5 2.6.6 2.7.5 2.8.5 2.9.6 3.0.6 3.1.5 3.2.5 3.3.6 3.4.6 3.5.6 3.6.4 3.7.5 3.8.5 3.9.10 4.0.7 4.1.4 4.2.5 4.3.5 4.4.5 4.5.3 4.6.3 4.7.4 4.8.5 4.9.3 5.0.3 5.1.4 trunk 10.0 10.0.1 10.0.2 10.1 10.1.1 10.1.2 10.2 10.2.1 10.2.2 10.2.3 10.3 10.3.1 10.3.2 10.4 10.4.1 10.4.2 10.5 10.5.1 10.5.2 10.5.3 10.6 10.6.1 10.6.2 10.7 10.7.1 10.7.2 10.8 10.8.1 10.8.2 10.9 10.9.1 10.9.2 10.9.3 11.0 11.0.1 11.0.2 11.1 11.1.1 11.1.2 11.1.3 11.1.4 11.2 11.2.1 11.2.2 11.3 11.3.1 11.3.2 11.3.3 11.3.4 11.4 11.4.1 11.4.2 11.5 11.5.1 11.5.2 11.5.3 11.6 11.6.1 11.6.2 11.7 11.7.1 11.7.2 11.7.3 11.8 11.8.3 11.8.4 11.8.5 11.8.6 11.9 11.9.1 11.9.2 11.9.3 12.0 12.0.1 12.0.2 12.1 12.1.1 12.1.2 12.2 12.2.1 12.2.2 12.3 12.3.1 12.4 12.4.1 12.5 12.5.1 12.6 12.6.1 12.6.2 12.6.3 12.7 12.7.1 12.7.2 12.8 12.8.1 12.8.2 12.9 12.9.1 12.9.2 12.9.3 12.9.4 13.0 13.0.1 13.1 13.1.1 13.1.2 13.1.3 13.1.4 13.2 13.2.1 13.2.2 13.2.3 13.3 13.3.1 13.3.2 13.4 13.4.1 13.4.2 13.4.3 13.4.4 13.5 13.5.1 13.6 13.6.1 13.7 13.7.1 13.8 13.8.1 13.8.2 13.9 13.9.1 14.0 14.1 14.2 14.2.1 14.3 14.4 14.4.1 14.5 14.6 14.7 14.8 14.9 14.9.1 15.0 15.0.1 15.0.2 15.1 15.1.1 15.2 15.3 15.3.1 15.4 15.5 15.6 15.7 15.7-a.1 15.7-a.3 15.7-a.5 15.7-a.7 15.7-beta
jetpack / extensions / blocks / ai-assistant / ai-assistant.php
jetpack / extensions / blocks / ai-assistant Last commit date
ai-assistant.php 1 year ago
ai-assistant.php
199 lines
1 <?php
2 /**
3 * Jetpack AI Assistant Block.
4 *
5 * @since 12.2
6 *
7 * @package automattic/jetpack
8 */
9
10 namespace Automattic\Jetpack\Extensions\AIAssistant;
11
12 use Automattic\Jetpack\Blocks;
13 use Automattic\Jetpack\Connection\Client;
14 use Automattic\Jetpack\Status;
15 use Automattic\Jetpack\Status\Host;
16 use Automattic\Jetpack\Status\Visitor;
17 use Jetpack_Gutenberg;
18
19 /**
20 * Registers our block for use in Gutenberg
21 * This is done via an action so that we can disable
22 * registration if we need to.
23 */
24 function register_block() {
25 if (
26 ( ( new Host() )->is_wpcom_simple()
27 || ! ( new Status() )->is_offline_mode()
28 ) && apply_filters( 'jetpack_ai_enabled', true )
29 ) {
30 Blocks::jetpack_register_block(
31 __DIR__,
32 array( 'render_callback' => __NAMESPACE__ . '\load_assets' )
33 );
34 }
35 }
36 add_action( 'init', __NAMESPACE__ . '\register_block' );
37
38 /**
39 * Jetpack AI Assistant block registration/dependency declaration.
40 *
41 * @param array $attr Array containing the Jetpack AI Assistant block attributes.
42 * @param string $content String containing the Jetpack AI Assistant block content.
43 *
44 * @return string
45 */
46 function load_assets( $attr, $content ) {
47 /*
48 * Enqueue necessary scripts and styles.
49 */
50 Jetpack_Gutenberg::load_assets_as_required( __DIR__ );
51
52 return sprintf(
53 '<div class="%1$s">%2$s</div>',
54 esc_attr( Blocks::classes( Blocks::get_block_feature( __DIR__ ), $attr ) ),
55 $content
56 );
57 }
58
59 /**
60 * Retrieve the Chrome trial AI token for use with the Chrome AI feature.
61 * This ultimately sets an Origin-Trial header with the token.
62 */
63 function add_chrome_ai_token_headers() {
64 $token_transient_names = array( 'jetpack-ai-chrome-ai-translation-token', 'jetpack-ai-chrome-ai-summarization-token' );
65
66 foreach ( $token_transient_names as $token_transient_name ) {
67 $cached_token = get_transient( $token_transient_name );
68
69 if ( ! $cached_token ) {
70 $blog_id = \Jetpack_Options::get_option( 'id' );
71
72 // get the token from wpcom
73 $wpcom_request = Client::wpcom_json_api_request_as_user(
74 sprintf( '/sites/%d/jetpack-ai/ai-assistant-feature', $blog_id ),
75 'v2',
76 array(
77 'method' => 'GET',
78 'headers' => array(
79 'X-Forwarded-For' => ( new Visitor() )->get_ip( true ),
80 ),
81 'timeout' => 30,
82 ),
83 null,
84 'wpcom'
85 );
86
87 $response_code = wp_remote_retrieve_response_code( $wpcom_request );
88 if ( 200 === $response_code ) {
89 $ai_assistant_feature_data = json_decode( wp_remote_retrieve_body( $wpcom_request ), true );
90
91 if ( ! empty( $ai_assistant_feature_data['chrome-ai-token'] ) ) {
92 set_transient(
93 $token_transient_name,
94 $ai_assistant_feature_data['chrome-ai-token'],
95 3600 // cache for an hour, but this can probably be longer
96 );
97
98 $cached_token = $ai_assistant_feature_data['chrome-ai-token'];
99 }
100 }
101 }
102
103 if ( $cached_token ) {
104 echo '<meta http-equiv="origin-trial" content="' . esc_attr( $cached_token ) . '">';
105 }
106 }
107 }
108
109 /**
110 * Register extensions.
111 */
112 add_action(
113 'jetpack_register_gutenberg_extensions',
114 function () {
115 if ( apply_filters( 'jetpack_ai_enabled', true ) ) {
116 Jetpack_Gutenberg::set_extension_available( 'ai-assistant-support' );
117 Jetpack_Gutenberg::set_extension_available( 'ai-assistant-form-support' );
118 Jetpack_Gutenberg::set_extension_available( 'ai-content-lens' );
119 Jetpack_Gutenberg::set_extension_available( 'ai-assistant-backend-prompts' );
120 Jetpack_Gutenberg::set_extension_available( 'ai-assistant-usage-panel' );
121 Jetpack_Gutenberg::set_extension_available( 'ai-featured-image-generator' );
122 Jetpack_Gutenberg::set_extension_available( 'ai-title-optimization' );
123 Jetpack_Gutenberg::set_extension_available( 'ai-assistant-experimental-image-generation-support' );
124 Jetpack_Gutenberg::set_extension_available( 'ai-general-purpose-image-generator' );
125 Jetpack_Gutenberg::set_extension_available( 'ai-assistant-site-logo-support' );
126 Jetpack_Gutenberg::set_extension_available( 'ai-title-optimization-keywords-support' );
127 Jetpack_Gutenberg::set_extension_available( 'ai-assistant-image-extension' );
128
129 if ( apply_filters( 'breve_enabled', true ) ) {
130 Jetpack_Gutenberg::set_extension_available( 'ai-proofread-breve' );
131 }
132
133 if ( apply_filters( 'ai_seo_enhancer_enabled_unrestricted', false ) ) {
134 Jetpack_Gutenberg::set_extension_available( 'ai-seo-enhancer-enabled-unrestricted' );
135 Jetpack_Gutenberg::set_extension_available( 'ai-seo-enhancer' );
136 } elseif ( apply_filters( 'ai_seo_enhancer_enabled', false ) ) {
137 Jetpack_Gutenberg::set_availability_for_plan( 'ai-seo-enhancer' );
138 }
139 }
140 }
141 );
142
143 /**
144 * Register the `ai-list-to-table-transform` extension.
145 */
146 add_action(
147 'jetpack_register_gutenberg_extensions',
148 function () {
149 if ( apply_filters( 'jetpack_ai_enabled', true ) &&
150 apply_filters( 'list_to_table_transform_enabled', false )
151 ) {
152 \Jetpack_Gutenberg::set_extension_available( 'ai-list-to-table-transform' );
153 }
154 }
155 );
156
157 /**
158 * Register the `ai-response-feedback` extension.
159 */
160 add_action(
161 'jetpack_register_gutenberg_extensions',
162 function () {
163 if ( apply_filters( 'jetpack_ai_enabled', true ) &&
164 apply_filters( 'ai_response_feedback_enabled', true )
165 ) {
166 \Jetpack_Gutenberg::set_extension_available( 'ai-response-feedback' );
167 }
168 }
169 );
170
171 /**
172 * Register the `ai-seo-assistant` extension.
173 */
174 add_action(
175 'jetpack_register_gutenberg_extensions',
176 function () {
177 if ( apply_filters( 'jetpack_ai_enabled', true ) &&
178 apply_filters( 'ai_seo_assistant_enabled', false )
179 ) {
180 \Jetpack_Gutenberg::set_extension_available( 'ai-seo-assistant' );
181 }
182 }
183 );
184
185 /**
186 * Register the `ai-use-chrome-ai-sometimes` extension.
187 */
188 add_action(
189 'jetpack_register_gutenberg_extensions',
190 function () {
191 if ( apply_filters( 'jetpack_ai_enabled', true ) &&
192 apply_filters( 'ai_chrome_ai_enabled', false )
193 ) {
194 \Jetpack_Gutenberg::set_extension_available( 'ai-use-chrome-ai-sometimes' );
195 add_chrome_ai_token_headers();
196 }
197 }
198 );
199