255 || !preg_match('/^[A-Za-z0-9._~-]{20,8192}$/D', $token)) { wp_send_json_error(['message' => 'Enter a valid AISmart account email and the token copied from Studio.'], 422); } $detected = aismart_onboarding_detect_multilang_provider(); $provider = (string) ($detected['primary'] ?? 'none'); $result = aismart_plugin_api_request('POST', 'api/plugin/v1/onboarding/connect-token', [ 'email' => $email, 'site_url' => home_url('/'), 'site_domain' => wp_parse_url(home_url('/'), PHP_URL_HOST), 'plugin_version' => aismart_plugin_get_version(), 'multilang_provider' => $provider, ], false, '', $token); if (is_wp_error($result)) { $details = $result->get_error_data(); $status = is_array($details) && isset($details['status']) ? (int) $details['status'] : 502; $message = is_array($details) && isset($details['response']['message']) ? (string) $details['response']['message'] : 'Unable to reach AISmartContent. Please retry.'; wp_send_json_error(['message' => $message], $status >= 400 && $status <= 599 ? $status : 502); } if (!is_array($result) || empty($result['user_id']) || empty($result['workspace_id']) || strtolower((string) ($result['email'] ?? '')) !== $email || !preg_match('/^[a-f0-9]{64}$/i', (string) ($result['site_signing_secret'] ?? ''))) { wp_send_json_error(['message' => 'The connection service returned an incomplete identity. Nothing was saved.'], 502); } $previous = aismart_onboarding_state_get(); $result = aismart_onboarding_capture_site_signing_secret($result); $state = [ 'access_token' => $token, 'token_type' => 'Bearer', 'user_id' => (int) $result['user_id'], 'workspace_id' => (int) $result['workspace_id'], 'workspace_name' => (string) ($result['workspace_name'] ?? ''), 'connected_email' => $email, 'token_expires_at' => $result['expires_at'] ?? null, 'connection_source' => 'studio_token', 'exchange_at' => gmdate('c'), 'site_registered_at' => gmdate('c'), 'multilang_provider' => $provider, ]; aismart_onboarding_state_set($state); update_option('aismart_workspace_id', $state['workspace_id'], false); update_option('aismart_workspace_name', $state['workspace_name'], false); delete_option('aismart_credit_balance'); delete_option('aismart_credits_available'); $state = aismart_onboarding_connect_wp7_connector($state, (string) ($previous['access_token'] ?? '')); aismart_onboarding_state_set($state); wp_send_json_success([ 'message' => 'Connected successfully to ' . $state['workspace_name'] . '.', 'state' => aismart_onboarding_public_state($state), ]); }