# Работа скриптов

Базовая интеграция интеграция включает в себя подключение двух скриптов:
   - **Core.js**: основная библиотека системы.
   - **Dynamic.js**: хранит информацию о кампаниях, эвалюаторах, стратегиях, настройках. Может вызываться из core и это будет асинхронная загрузка, а может быть встроен в код и загружаться синхронно через Sync load
     - Асинхронно (ускоряет загрузку, но повышает вероятность фликера).
     - Синхронно (уменьшает фликер, но снижает скорость загрузки).

## ⚙️ Работа скриптов

1. В админ-панели создаётся секция с уникальным ID и пустым `dynamic.js`.
2. Устанавливается сниппет для загрузки `core.js`:

```jsx
<script>
window.GF = window.GF || {};
GF.section = "[SECTION_ID]";
GF.pageContext = { type: "OTHER", data: [] };
</script>
<script type="text/javascript" src="//cdn-01.gravityfield.ai/core/core.js"></script>
```

Скрипт `core.js` загружает соответствующий `dynamic.js`. Для минимизации фликера можно использовать синхронную загрузку:

```jsx
<script>
window.GF = window.GF || {};
GF.section = "[SECTION_ID]";
GF.pageContext = { type: "OTHER", data: [] };
GF.syncLoad = true;
</script>
<script type="text/javascript" src="//cdn-01.gravityfield.ai/core/core.js"></script>
<script type="text/javascript" src="//cdn-01.gravityfield.ai/sections/[SECTION_ID]/dynamic.js"></script>
```

## 📡 Порядок вызовов
`Core.js` и `Dynamic.js` отправляют запрос к `evs-01.gravityfield.ai` для получения данных пользователя. События, настроенные при интеграции, отправляются на сервер.

📖 Подробнее: [Настройка передачи событий](./events.md)

## ⏩ Скрипты prefetch и preconnect

Для уменьшения времени ответа DNS используйте теги Dns-prefetch. Они должны быть размещены перед скриптом.

Preconnect теги позволяют браузеру настроить соединение еще до отправки http запроса к серверу. Это позволяет избежать задержек и сэкономить время для пользователей.

```jsx
<link rel="preconnect" href="//cdn-01.gravityfield.ai">
<link rel="preconnect" href="//evs-01.gravityfield.ai">
<link rel="dns-prefetch" href="//cdn-01.gravityfield.ai">
<link rel="dns-prefetch" href="//evs-01.gravityfield.ai">
```

!!!
Некоторые браузеры, такие как Safari и IE, могут игнорировать `preconnect`.
!!!

## 🌐 Домены
В системе используются два домена:
- `evs-01.gravityfield.ai` — запросы к серверу.
- `cdn-01.gravityfield.ai` — CDN.

Все серверы размещены в России и соответствуют требованиям законодательства РФ (152-ФЗ, СТО БР ИББС).

!!! Ранние интеграции
Более ранние интеграции использует домены:
- `ev.stellarlabs.ai` — запросы к серверу.
- `cdn01.stellarlabs.ai` — CDN.
!!!

!!! [Gravity Ads](../../retail_media/retail_media.md)
Также используется домен для запросов к серверу Gravity Ads – `srv.gravityads.ai`
!!!

## 🕒 Зависимость запуска скриптов
Скрипты запускаются после получения всех данных о пользователе. В будущем возможен сценарий, где кампании запускаются поэтапно. 

![Диаграмма данных](./dataflow.drawio.png)

**Обновления:**
- `Dynamic.js`: обновляется при сохранении кампаний, аудиторий и других компонентов.
- `Core.js`: обновляется при релизах системы.

**Кэширование:**
- `Dynamic.js`: 5 минут.
- `Core.js`: 1 час.

## 🍪 Cookie-файлы

{.compact}
| Cookie          | Функционал               | Домен      | Пример                                    | TTL      |
|------------------|--------------------------|------------|-------------------------------------------|----------|
| `_slid`         | ID пользователя          | .site.net  | 6343ff0e728f987d7c02325a                 | 365 дней |
| `_slid_server`  | ID пользователя (клиент) | .site.net  | 6343ff0e728f987d7c02325a                 | 365 дней |
| `_slsession`    | ID сессии                | .site.net  | C2A1D08D-BA49-43CF-9BB3-047030084FCF     | 365 дней |
| `_slfreq`       | Данные о кампаниях. Запускается раз в указанный период времени (1 день, 7 дней, 30 дней и др)        | .site.net  | 6347f312d9062ed0380b52dc%3A6347f38c...   | 365 дней |
