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

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

Нижче описано, як продукт обфускації AfterPack поводиться з вашим кодом і даними облікового запису. Файли cookie та аналітику цього сайту описано окремо, у Політиці конфіденційності.

Коротко

Локальна збірка (Free) ніколи нікуди не надсилає ваш вихідний код. Хмарна збірка (Pro) обфускує в пам'яті й відкидає вихідний код наприкінці запиту. Зберігається один артефакт: Protection Map для дашборду. Вона прив'язана до робочого простору, має термін зберігання, і її можна вимкнути для кожного проєкту. Телеметрія увімкнена за замовчуванням, надсилає звіт, коли збірка повідомляє діагностику рівня error (відхилена або часткова збірка), ніколи не надсилає його для чистої збірки і вимикається через AFTERPACK_telemetry_enabled=false. DPA і повний список субпроцесорів доступні на запит.

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

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

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

Коли збірка Pro надсилає вихідний код на api.afterpack.dev для обфускації, він обробляється лише в пам'яті, протягом цього одного запиту, а потім відкидається:

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

Це однаково справджується, викликаєте ви API напряму, через CLI із заданим AFTERPACK_key чи через плагін для фреймворку. Усі вони працюють за протоколом, описаним у довіднику Cloud API.

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

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

ЗаписуєтьсяНіколи не записується
Позначки часу (запит отримано, відповідь закрито)Вміст файлів
Коди статусу HTTPІмена ідентифікаторів
Ідентифікатор збірки, кількість файлів, сумарні вхідні/вихідні обсяги в байтахЗначення констант, зокрема секрети, які випадково опинилися у вихідному коді
Діагностичні коди (DIAG_*)Текст повідомлень діагностики з телеметрії
IP-адреса клієнта, для лімітів запитівsources / sourcesContent із source map
Тариф робочого простору, для облікуБудь-що, що могло б розкрити вашу бізнес-логіку

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

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

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

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

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

  • Код, рівень серйозності та діапазон зміщень у байтах діагностики, що спричинила збій, плюс короткий список типізованих полів, вибраних для кожного виду діагностики, але ніколи не її текстове повідомлення
  • Версії рушія, клієнта та Node, ОС/архітектура і виявлений фреймворк
  • Чи виконувалася збірка в CI
  • Рівень складності: назва пресету або custom для сирого значення complexity
  • Кількість файлів і тривалість збірки, згруповані в діапазони (5-20, 1-5s), а не точні; точне число дозволяє ідентифікувати конкретний проєкт
  • Випадковий ідентифікатор встановлення, що змінюється кожні 30 днів і ніколи не виводиться з вашої машини чи проєкту

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

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

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

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

Protection Map і є вашим оригінальним вихідним кодом, розфарбованим за тим, скільки трансформацій зазнав кожен токен. Для хмарної збірки AfterPack генерує її на сервері, який виконував обфускацію, і зберігає, тож ви можете відкрити мапу будь-якої нещодавньої збірки з дашборду.

Це єдине місце, де ваш вихідний код зберігається

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

  • Що зберігається: дані мапи для кожної збірки, тобто ваш оригінальний вихідний код плюс метрики для кожного токена, на яких ґрунтуються кольори, стиснуті й запаковані gzip у Cloudflare R2, зашифровані під час зберігання, плюс рядок підсумкових чисел для дашборду. Ваш обфускований результат не зберігається.
  • Прив'язано до одного проєкту, того, до якого прив'язаний ключ збірки.
  • Доступно лише учасникам цього робочого простору. Не публічно, не індексується, без посилання для поширення.
  • Зберігання: один рік і останні 500 збірок на проєкт, залежно від того, що настане раніше. Щогодинне завдання видаляє все, що вийшло за будь-яку з цих меж. Для проєкту, який часто збирається, першою спрацьовує межа кількості. Вона обмежує, скільки копій вашого вихідного коду існує в будь-який момент.
  • Мапу може бути збережено частково. Коли збірка триває довго, збирання даних для мапи припиняється раніше за обфускацію. Збережений запис показує, які чанки пропущено і чому.
  • Вимкнення зупиняє збереження будь-чого для цього проєкту в нових збірках. Уже збережені мапи видаляються за правилами зберігання вище, а не одразу. Локальних збірок це не стосується: Protection Map, яку локальна збірка записує в .afterpack/, ніколи не залишає вашої машини.
  • Що записується навіть із вимкненим зберіганням: числа збірки (покриття, роздування, складність, тривалості), тож графіки в дашборді проєкту продовжують працювати. Це агреговані дані, отримані зі збірки. Вони не містять коду, і нічого з них не можна прочитати назад як код.

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

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

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

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

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

Ні те, ні інше не прив'язане до регіону. Cloudflare спрямовує хмарну збірку до найближчого регіону, а в разі перемикання на резерв або навантаження вона може потрапити деінде. Прив'язки регіону для окремого запиту немає, і сховище R2 не закріплене за регіоном. Якщо вам потрібна тверда гарантія розташування даних, використовуйте локальну збірку. AfterPack працює повністю на вашій власній інфраструктурі, тож питання розташування не виникає.

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

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

Далі