feat(pulse): make heartbeat opt-in with transparency toggle

Heartbeat telemetry (домен, имя бота, версии PHP/модуля/OpenCart) больше не
отправляется скрытно. Добавлен отдельный флаг pulse.heartbeat_enabled
(по умолчанию выключен, opt-in), независимый от pulse.api_key:

- ранний return в handleHeartbeat() при выключенном флаге (не трогает кэш/getMe);
- провайдер читает флаг и инжектит в сервис;
- в админке — переключатель с честным раскрытием состава данных;
- debug-лог факта отправки в pushHeartbeat().

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-06-30 15:08:04 +03:00
parent 24075dceb7
commit 0198c8fcf2
5 changed files with 27 additions and 1 deletions

View File

@@ -88,6 +88,7 @@ export const useSettingsStore = defineStore('settings', {
pulse: {
api_key: '',
heartbeat_enabled: false,
batch_size: 50,
},

View File

@@ -96,6 +96,16 @@
При малом значении нагрузка ниже, но обработка занимает больше времени.
Рекомендуемое значение: 50.
</ItemInput>
<ItemBool label="Отправка технических данных разработчику"
v-model="settings.items.pulse.heartbeat_enabled"
>
Чтобы улучшать продукт и быстрее помогать в поддержке, модуль отправляет разработчику
минимальный набор технических данных: домен магазина, имя бота и версии PHP, модуля и
OpenCart. <strong>Персональные данные покупателей и информация о заказах не
передаются.</strong> По умолчанию отправка отключена; включить или отключить её можно
в любой момент на работу магазина это не влияет.
</ItemBool>
</div>
</template>
@@ -103,6 +113,7 @@
import {onMounted, ref} from "vue";
import {useSettingsStore} from "@/stores/settings.js";
import ItemInput from "@/components/Settings/ItemInput.vue";
import ItemBool from "@/components/Settings/ItemBool.vue";
import {apiGet} from "@/utils/http.js";
import SettingsItem from "@/components/SettingsItem.vue";