@lynxflow/seo-engine 1.8.2 → 1.8.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -135,6 +135,31 @@
135
135
  saveStatus && el('div', { style: { background: '#dcfce7', color: '#166534', padding: '6px 16px', borderRadius: '999px', fontSize: '12px', fontWeight: '700' } }, saveStatus)
136
136
  ),
137
137
 
138
+ // 1-Click Connect to LynxSEO Studio SaaS Banner
139
+ (typeof window !== 'undefined' && window.lynxSeoAdminConfig) && (
140
+ window.lynxSeoAdminConfig.isConnected
141
+ ? el('div', { style: { background: '#f0fdf4', border: '1px solid #bbf7d0', borderRadius: '12px', padding: '16px 20px', marginBottom: '24px', display: 'flex', justifyContent: 'space-between', alignItems: 'center' } },
142
+ el('div', { style: { display: 'flex', alignItems: 'center', gap: '12px' } },
143
+ el('span', { style: { fontSize: '24px' } }, '🟢'),
144
+ el('div', null,
145
+ el('strong', { style: { color: '#166534', fontSize: '14px', display: 'block' } }, 'Connecté à LynxSEO Studio Cloud'),
146
+ el('span', { style: { color: '#15803d', fontSize: '12px', fontFamily: 'monospace' } }, 'Clé Active : ' + (window.lynxSeoAdminConfig.apiKey ? window.lynxSeoAdminConfig.apiKey.slice(0, 16) + '...' : 'lynx_live_verified') + ' • Google Search Console & IndexNow Activés')
147
+ )
148
+ ),
149
+ el('a', { href: window.lynxSeoAdminConfig.connectUrl, style: { background: '#16a34a', color: '#fff', padding: '8px 16px', borderRadius: '8px', textDecoration: 'none', fontWeight: '700', fontSize: '12px' } }, '🔄 Resynchroniser')
150
+ )
151
+ : el('div', { style: { background: 'linear-gradient(135deg, #0f172a 0%, #1e1b4b 100%)', border: '1px solid #3b82f6', borderRadius: '14px', padding: '20px 24px', marginBottom: '24px', display: 'flex', justifyContent: 'space-between', alignItems: 'center', boxShadow: '0 10px 25px -5px rgba(37,99,235,0.2)' } },
152
+ el('div', { style: { display: 'flex', alignItems: 'center', gap: '14px' } },
153
+ el('span', { style: { fontSize: '32px' } }, '⚡'),
154
+ el('div', null,
155
+ el('strong', { style: { color: '#ffffff', fontSize: '15px', display: 'block', marginBottom: '2px' } }, 'Connectez votre site à LynxSEO Studio en 1 Clic'),
156
+ el('p', { style: { color: '#93c5fd', fontSize: '12px', margin: 0 } }, 'Liaison automatique Google Search Console (OAuth 2.0), Indexation Instantanée et 16 Schémas JSON-LD.')
157
+ )
158
+ ),
159
+ el('a', { href: window.lynxSeoAdminConfig.connectUrl, style: { background: '#2563eb', color: '#ffffff', padding: '12px 22px', borderRadius: '10px', textDecoration: 'none', fontWeight: '800', fontSize: '13px', display: 'inline-flex', alignItems: 'center', gap: '6px', boxShadow: '0 4px 14px rgba(37,99,235,0.4)' } }, '🚀 Connecter en 1 Clic →')
160
+ )
161
+ ),
162
+
138
163
  // Modules Grid Cards (Toggle switches)
139
164
  el('div', { style: { display: 'grid', gridTemplateColumns: 'repeat(auto-fit, minmax(280px, 1fr))', gap: '16px', marginBottom: '28px' } },
140
165
  [
@@ -109,6 +109,16 @@ class LynxSeoUltimateEnterprisePlugin {
109
109
  }
110
110
 
111
111
  public function init_plugin() {
112
+ // Handle 1-Click OAuth Connect Callback from LynxSEO Studio SaaS
113
+ if (is_admin() && isset($_GET['lynxseo_connected']) && $_GET['lynxseo_connected'] == '1' && !empty($_GET['api_key'])) {
114
+ $settings = get_option($this->option_name, array());
115
+ $settings['api_key'] = sanitize_text_field($_GET['api_key']);
116
+ $settings['is_connected'] = true;
117
+ $settings['connected_at'] = current_time('mysql');
118
+ update_option($this->option_name, $settings);
119
+ update_option('lynxseo_api_key', sanitize_text_field($_GET['api_key']));
120
+ }
121
+
112
122
  add_rewrite_rule('^sitemap_index\.xml$', 'index.php?lynx_sitemap=index', 'top');
113
123
  add_rewrite_rule('^sitemap-pseo\.xml$', 'index.php?lynx_sitemap=pseo', 'top');
114
124
  add_rewrite_rule('^llms\.txt$', 'index.php?lynx_llms=1', 'top');
@@ -132,6 +142,20 @@ class LynxSeoUltimateEnterprisePlugin {
132
142
  if (strpos($hook, 'lynxseo') !== false) {
133
143
  wp_enqueue_script('chart-js', 'https://cdn.jsdelivr.net/npm/chart.js', array(), '4.4.0', true);
134
144
  wp_enqueue_script('lynxseo-admin-react', plugins_url('lynxseo-admin-app.js', __FILE__), array('wp-element', 'wp-components'), $this->version, true);
145
+
146
+ $settings = get_option($this->option_name, array());
147
+ $site_url = get_site_url();
148
+ $return_url = admin_url('admin.php?page=lynxseo-dashboard');
149
+ $connect_url = 'https://lynxseo.studio/connect/wordpress?site_url=' . urlencode($site_url) . '&return_url=' . urlencode($return_url);
150
+
151
+ wp_localize_script('lynxseo-admin-react', 'lynxSeoAdminConfig', array(
152
+ 'siteUrl' => $site_url,
153
+ 'returnUrl' => $return_url,
154
+ 'connectUrl' => $connect_url,
155
+ 'isConnected' => !empty($settings['is_connected']) || !empty($settings['api_key']),
156
+ 'apiKey' => $settings['api_key'] ?? '',
157
+ 'connectedAt' => $settings['connected_at'] ?? '',
158
+ ));
135
159
  }
136
160
  }
137
161
 
@@ -104,7 +104,7 @@ export declare class ExtendedSchemaGraphBuilder {
104
104
  url: string;
105
105
  }[]): Record<string, unknown>;
106
106
  /**
107
- * 7. AggregateRating (Google Gold Stars in SERPs) - Inspired by santifer-irepair
107
+ * 7. AggregateRating (Google Gold Stars in SERPs) - Strictly Dynamic (No Fake Defaults)
108
108
  */
109
109
  static buildAggregateRating(opts: {
110
110
  ratingValue?: number;
@@ -112,7 +112,7 @@ export declare class ExtendedSchemaGraphBuilder {
112
112
  bestRating?: number;
113
113
  worstRating?: number;
114
114
  itemReviewedName: string;
115
- }): Record<string, unknown>;
115
+ }): Record<string, unknown> | null;
116
116
  /**
117
117
  * 8. AggregateOffer (Price Ranges & Tiers) - Inspired by santifer-irepair
118
118
  */