# Конфіденційність і обробка даних

Локальна збірка нічого не надсилає. Хмарна збірка обфускує в пам'яті й нічого не зберігає, окрім Protection Map, яку ви попросили зберегти і яку можна вимкнути. Телеметрія увімкнена за замовчуванням, надсилає звіт, коли збірка повідомляє діагностику рівня error, ніколи не надсилає його для чистої збірки і вимикається однією змінною середовища.

Source: https://www.afterpack.dev/uk/docs/privacy

Нижче описано, як продукт обфускації AfterPack поводиться з вашим кодом і даними облікового запису. Файли cookie та аналітику цього сайту описано окремо, у [Політиці конфіденційності](https://www.afterpack.dev/uk/privacy).

> **Коротко**
>
> [Локальна збірка (Free)](https://www.afterpack.dev/uk/docs/deployment-modes) ніколи нікуди не надсилає ваш вихідний код. Хмарна збірка (Pro) обфускує в пам'яті й відкидає вихідний код наприкінці запиту. Зберігається один артефакт: **[Protection Map](https://www.afterpack.dev/uk/docs/protection-map)** для [дашборду](https://www.afterpack.dev/uk/docs/dashboard). Вона прив'язана до [робочого простору](https://www.afterpack.dev/uk/docs/dashboard/workspaces), має термін зберігання, і її можна вимкнути для кожного проєкту. Телеметрія увімкнена за замовчуванням, надсилає звіт, коли збірка повідомляє діагностику рівня error (відхилена або часткова збірка), ніколи не надсилає його для чистої збірки і вимикається через [`AFTERPACK_telemetry_enabled=false`](https://www.afterpack.dev/uk/docs/config#telemetry-enabled). DPA і повний список субпроцесорів доступні на запит.

## Локальна збірка нічого не надсилає

[Локальна збірка](https://www.afterpack.dev/uk/docs/deployment-modes) запускає AfterPack як нативний бінарний файл на вашій машині. Ніщо не залишає вашу файлову систему, тож хмарні розділи нижче до нього не стосуються. Єдиний мережевий виклик, який будь-коли робить локальна збірка, — це звіт телеметрії, описаний нижче: він надсилається лише тоді, коли збірка повідомляє діагностику рівня error (відхилена або часткова збірка), не містить вихідного коду і його можна вимкнути.

## Хмарна збірка обфускує в пам'яті й нічого не зберігає

Коли [збірка Pro](https://www.afterpack.dev/uk/docs/pro) надсилає вихідний код на `api.afterpack.dev` для обфускації, він обробляється **лише в пам'яті**, протягом цього одного запиту, а потім відкидається:

- **Запит виконується в ізольованому середовищі Cloudflare Worker (isolate)**, яке знищується на межі запиту. Після відповіді нічого не залишається.
- **Журнали ніколи не містять вихідного коду.** Рядки журналу містять ідентифікатор збірки, кількість файлів, сумарні обсяги в байтах, діагностичні коди та шлях до файлу, на якому сталася помилка. Вони ніколи не містять вмісту файлів, імен ідентифікаторів чи значень констант.

Це однаково справджується, викликаєте ви API напряму, через [CLI](https://www.afterpack.dev/uk/docs/cli) із заданим [`AFTERPACK_key`](https://www.afterpack.dev/uk/docs/config#key) чи через [плагін для фреймворку](https://www.afterpack.dev/uk/docs/frameworks). Усі вони працюють за протоколом, описаним у [довіднику Cloud API](https://www.afterpack.dev/uk/docs/cloud-api).

Зберігається один артефакт: Protection Map, описана нижче, яка записується після завершення обфускації. Вихідний код, який ви завантажуєте на обфускацію, однаково зникає наприкінці запиту.

### Що журнали містять і чого не містять

| Записується | Ніколи не записується |
| --- | --- |
| Позначки часу (запит отримано, відповідь закрито) | Вміст файлів |
| Коди статусу HTTP | Імена ідентифікаторів |
| Ідентифікатор збірки, кількість файлів, сумарні вхідні/вихідні обсяги в байтах | Значення констант, зокрема секрети, які випадково опинилися у вихідному коді |
| [Діагностичні коди](https://www.afterpack.dev/uk/docs/diagnostics) (`DIAG_*`) | *Текст повідомлень* діагностики з телеметрії |
| IP-адреса клієнта, для лімітів запитів | `sources` / `sourcesContent` із source map |
| Тариф робочого простору, для обліку | Будь-що, що могло б розкрити вашу бізнес-логіку |

Агреговані метрики (кількість запитів за день, облікові байти на робочий простір, тривалість збірок) зберігаються як лічильники і не містять коду.

## Телеметрія увімкнена за замовчуванням і звітує лише про діагностику рівня error

Клієнт може надсилати анонімну діагностику збірок, щоб помилки рушія знаходили й виправляли. Вона увімкнена, доки ви її не вимкнете. Чистій збірці нема про що звітувати:

- **Щось надсилає лише збірка, яка видає діагностику рівня `error` або `critical`.** Чиста збірка не надсилає взагалі нічого: жодних періодичних пінгів, жодних тривалостей фаз, жодної статистики використання для збірки, яка просто спрацювала.
- **Вимкніть її через [`AFTERPACK_telemetry_enabled=false`](https://www.afterpack.dev/uk/docs/config#telemetry-enabled)**, [`--telemetry.enabled=false`](https://www.afterpack.dev/uk/docs/config#telemetry-enabled) у CLI або [`telemetry: { enabled: false }`](https://www.afterpack.dev/uk/docs/config#telemetry-enabled) у конфігурації вашої інтеграції. Більше способів немає.
- **У CI вона працює так само.** Жодна перевірка TTY чи CI не змінює значення за замовчуванням і не пропускає звіти; у звіті просто записується `ci: true`, прочитане з тієї самої змінної `CI`, яку ваш конвеєр уже задає.
- **Жодних запитань, ніколи.** Перша збірка після встановлення один раз друкує повідомлення (що збирається, що ні, як це вимкнути) і йде далі. Вона ніколи не зупиняється в очікуванні відповіді. Стан (випадковий ідентифікатор встановлення, що змінюється кожні 30 днів, і позначка, чи повідомлення вже друкувалося) зберігається в `~/.afterpack/telemetry.json`.
- **Тестові запуски звільнено.** `NODE_ENV=test` і власний маркер Vitest `VITEST` вимикають телеметрію.

### Що збирається, коли збірка повідомляє діагностику рівня error

- **Код**, рівень серйозності та діапазон зміщень у байтах діагностики, що спричинила збій, плюс короткий список типізованих полів, вибраних для кожного виду діагностики, але ніколи не її текстове повідомлення
- **Версії** рушія, клієнта та Node, ОС/архітектура і виявлений фреймворк
- Чи виконувалася збірка в **CI**
- Рівень складності: назва [пресету](https://www.afterpack.dev/uk/docs/presets) або `custom` для сирого значення [`complexity`](https://www.afterpack.dev/uk/docs/config#complexity)
- Кількість файлів і тривалість збірки, **згруповані в діапазони** (`5-20`, `1-5s`), а не точні; точне число дозволяє ідентифікувати конкретний проєкт
- Випадковий **ідентифікатор встановлення**, що змінюється кожні 30 днів і ніколи не виводиться з вашої машини чи проєкту

### Що ніколи не збирається, ні телеметрією, ні інакше

- Вихідний код або вміст файлів
- Імена та шляхи файлів у телеметрії. Серверний журнал хмарної збірки містить один шлях, до файлу, на якому сталася помилка всередині пакета, як описано вище
- **Текст повідомлень** діагностики, будь-коли; лише її стабільний `code`
- API-ключі чи інші облікові дані
- Значення констант
- Вибір способів кодування рядків
- Будь-яка інформація, що ідентифікує користувача, понад те, що вже містить ваш обліковий запис

Телеметрія має фіксовану структуру.

## Protection Map для хмарних збірок зберігається, і це можна вимкнути

[Protection Map](https://www.afterpack.dev/uk/docs/protection-map) *і є* вашим оригінальним вихідним кодом, розфарбованим за тим, скільки трансформацій зазнав кожен токен. Для хмарної збірки AfterPack генерує її на сервері, який виконував обфускацію, і зберігає, тож ви можете відкрити мапу будь-якої нещодавньої збірки з [дашборду](https://www.afterpack.dev/uk/docs/dashboard/builds).

> **Це єдине місце, де ваш вихідний код зберігається**
>
> Зберігання Protection Map **увімкнене за замовчуванням, для кожного проєкту**, а збережену мапу може читати **кожен учасник [робочого простору](https://www.afterpack.dev/uk/docs/dashboard/workspaces), якому належить проєкт**. Якщо ваш вихідний код не має бути доступним усьому робочому простору, адміністратор робочого простору [вимикає це налаштування](https://www.afterpack.dev/uk/docs/protection-map#turning-it-off) в налаштуваннях проєкту.

- **Що зберігається:** дані мапи для кожної збірки, тобто ваш оригінальний вихідний код плюс метрики для кожного токена, на яких ґрунтуються кольори, стиснуті й запаковані gzip у Cloudflare R2, зашифровані під час зберігання, плюс рядок підсумкових чисел для дашборду. Ваш обфускований результат не зберігається.
- **Прив'язано до одного проєкту**, того, до якого прив'язаний [ключ](https://www.afterpack.dev/uk/docs/dashboard/api-keys) збірки.
- **Доступно лише учасникам цього робочого простору.** Не публічно, не індексується, без посилання для поширення.
- **Зберігання: один рік і останні 500 збірок на проєкт, залежно від того, що настане раніше.** Щогодинне завдання видаляє все, що вийшло за будь-яку з цих меж. Для проєкту, який часто збирається, першою спрацьовує межа кількості. Вона обмежує, скільки копій вашого вихідного коду існує в будь-який момент.
- **Мапу може бути збережено частково.** Коли збірка триває довго, збирання даних для мапи припиняється раніше за обфускацію. Збережений запис показує, які чанки пропущено і чому.
- **Вимкнення** зупиняє збереження будь-чого для цього проєкту в нових збірках. Уже збережені мапи видаляються за правилами зберігання вище, а не одразу. Локальних збірок це не стосується: Protection Map, яку локальна збірка [записує в `.afterpack/`](https://www.afterpack.dev/uk/docs/cli#files), ніколи не залишає вашої машини.
- **Що записується навіть із вимкненим зберіганням:** числа збірки (покриття, роздування, складність, тривалості), тож [графіки в дашборді](https://www.afterpack.dev/uk/docs/dashboard/builds) проєкту продовжують працювати. Це агреговані дані, отримані зі збірки. Вони не містять коду, і нічого з них не можна прочитати назад як код.

## Субпроцесори

Хмарна збірка проходить через цих обробників. Вихідний код проходить через Cloudflare **лише в пам'яті**, поки його обфускують; Cloudflare також єдиний, хто будь-коли зберігає вихідний код, у вигляді Protection Map, описаної вище:

| Субпроцесор | Роль |
| --- | --- |
| **Cloudflare** | Workers / R2 / D1: периферійні обчислення, маршрутизація, зберігання Protection Map і база даних облікових записів |
| **Creem** | Лише [оплата](https://www.afterpack.dev/uk/docs/dashboard/usage), як продавець (merchant of record); ніколи не отримує вихідного коду |
| **Постачальники email / автентифікації** | Magic-link та транзакційні листи про події облікового запису та життєвого циклу ключів; ніколи не отримують вихідного коду |
| **Anthropic** (через Cloudflare AI Gateway) | Забезпечує роботу вбудованого асистента сайту («Ask AfterPack»); отримує те, що ви в нього вводите, і сторінки документації, які він читає, щоб відповісти, але ніколи не ваш вихідний код |

## Розташування даних

Розділи вище відповідають на питання, чи зберігається вихідний код. Розташування даних є окремим питанням: де код обробляється, поки запит виконується, і де лежить збережена мапа.

Ні те, ні інше не прив'язане до регіону. Cloudflare спрямовує хмарну збірку до найближчого регіону, а в разі перемикання на резерв або навантаження вона може потрапити деінде. Прив'язки регіону для окремого запиту немає, і сховище R2 не закріплене за регіоном. **Якщо вам потрібна тверда гарантія розташування даних, використовуйте [локальну збірку](https://www.afterpack.dev/uk/docs/deployment-modes).** AfterPack працює повністю на вашій власній інфраструктурі, тож питання розташування не виникає.

## DPA і відповідність вимогам

Угода про обробку даних (DPA) доступна на запит. DPA, яку ви підписуєте, є юридичним договором, що має виконавчу силу, і посилається на список субпроцесорів і поведінку щодо розташування даних, описані вище.

## Далі

- [Довідник Cloud API](https://www.afterpack.dev/uk/docs/cloud-api): протокол, до якого застосовуються ці гарантії.
- [Режими розгортання](https://www.afterpack.dev/uk/docs/deployment-modes): локально проти хмари і що надсилає кожен варіант.
- [Protection Map](https://www.afterpack.dev/uk/docs/protection-map): що показує збережена мапа і де розташований перемикач для проєкту.
- [Pro](https://www.afterpack.dev/uk/docs/pro): що насправді дає робота в хмарі.
- [Робочі простори та проєкти](https://www.afterpack.dev/uk/docs/dashboard/workspaces): хто що може читати і як обмежується ключ.
- [Дашборд](https://www.afterpack.dev/uk/docs/dashboard): де показано збережену мапу та запис про її збірку.
