Ліміти планів, пороги квот і правила фіче-флагів зазвичай потрапляють у клієнтський бандл, де конкурент або клієнт може прочитати їх прямо з файлу.
У звичайному JavaScript ваша таблиця цін читається як специфікація
Таблиця цін, карта квот і список фіче-флагів у звичайному JavaScript читаються як документація вашої комерційної моделі. Будь-хто може відкрити бандл і побачити, де проходять межі ваших тарифів, що запускає пропозицію апгрейду і які флаги відкривають які функції.
Один прохід AI-агента для програмування по такому бандлу перетворює розрізнені значення на впорядковану специфікацію. Цю специфікацію можна скопіювати, використати як аргумент у зверненні до підтримки або обійти з її допомогою ліміт ще до того, як ви щось помітите.
Закодовані значення, переписана структура
Рядкові літерали кодуються за будь-якого додатного цільового значення complexity, тож таблиці та пороги більше не є читабельним текстом у файлі, який ви роздаєте. Структуру навколо них теж переписано. Читач, який продереться через результат, відновить еквівалентне обчислення і муситиме сам реконструювати з нього, що означали ваші правила.
Саме ротація не дає відновленій копії залишатися корисною. Новий сід на кожному релізі означає, що все, що хтось реконструював минулого разу, описує збірку, яку ви вже не роздаєте.
Підвищте цільове значення для модуля з вашими правилами
Підніміть увесь бандл на щабель вище за пресетами або задайте цільове значення напряму, коли точність пресету не підходить:
{
"preset": "medium",
"complexity": 40
}Щоб позначити лише модуль із вашими правилами, використайте директиву. Директиви діють у збірках Pro.
/* @afterpack preset=extreme */
export function resolveQuota(plan: Plan, usage: Usage): number {
return TIER_LIMITS[plan.tier] - usage.consumed;
}
/* @afterpack end */strings.leaks.max перетворює «жоден читабельний літерал не вцілів» на ворота збірки замість того, що ви перевіряєте на око. Помилка називає DIAG_SURVIVING_READABLE_LITERAL і вказує на літерал, що проскочив.
Зупиняйте збірку, коли літерал уцілів
У CI збирайте з --strings.leaks.max=0 і вважайте ненульовий код виходу невдалою збіркою. Потім відкрийте Protection Map і перевірте, що модуль із правилами розфарбовано відповідно до заданого для нього цільового значення.
Що залишається видимим, хоч би що ви випускали
Ротація збірки робить витягнуту копію ваших правил застарілою з наступним релізом, і саме це варто мати. Тут ідеться про значення, які існують лише для того, щоб їх читали всередині бандла; ціна, яку показує ваш інтерфейс, або ліміт, який повертає ваш API, видимі незалежно від того, як виглядає бандл, тож вважайте все, що показує сторінка, публічним і забезпечуйте кожен ліміт на сервері.
Далі
- Модель загроз: що статичний читач може і чого не може відновити.
- Пресети: повна драбина і цільова складність кожного рівня.
- Protection Map: переконайтеся, що модуль із правилами отримав налаштований вами захист.