Справочник API
Для сборок через CLI и Node.js используйте публичный пакет javascript-obfuscator. Он сам обрабатывает потоковые ответы и загрузку больших файлов. REST-клиенты, работающие с API напрямую, должны реализовать описанный ниже протокол.
Смотреть
Using the Obfuscator.io API: API Keys, npm Package, CLI and Custom Presets
Создайте API-ключ в разделе Настройки → API-ключи. Для этого нужен тариф Pro, Team или Business. Храните ключ на своём сервере или в хранилище секретов CI и никогда не помещайте его в браузерный код. Пакет javascript-obfuscator принимает ключ в параметре apiToken (--pro-api-token в CLI); прямой REST-запрос передаёт его в заголовке Authorization: Bearer. На тарифе Team или Business владелец команды может отметить Сервисный ключ команды в диалоге Создать API-ключ; такой ключ принадлежит команде, а не конкретному человеку, поэтому продолжает работать после ухода участников.
API-ключи · Использование NPM-пакета
Запрос
POST https://obfuscator.io/api/v1/obfuscate
Отправьте JSON с полями code и options. Включите хотя бы одну функцию Pro: vmObfuscation: true или parseHtml: true. Для воспроизводимых сборок зафиксируйте параметр запроса version; без него используется последняя версия. Параметр принимает точную версию, например 8.0.0, или диапазон: ^8.0.0 следует за новыми минорными и патч-релизами 8.x, ~8.0.0 - за патч-релизами 8.0.x, а диапазон разрешается в наибольший подходящий релиз. Диапазоны доступны только на тарифе Team или Business.
options перечисляет сами опции; имя пресета в optionsPreset не применяется. Чтобы собрать код с пресетом, встроенным или пользовательским, получите его опции из эндпоинта пресетов отдельным запросом и отправьте их в options.
Если владелец команды принудительно задаёт версию или пресет, они заменяют version или options из запроса для участников команды и сервисных ключей команды. См. Принудительная версия для команды и Общие пресеты.
| Заголовок | Значение |
|---|---|
Content-Type | application/json |
Authorization | Bearer YOUR_API_KEY |
Ответ
Читайте тело ответа как JSON с разделением по строкам (NDJSON). Одна сетевая операция чтения может разрезать строку JSON или символ UTF-8. Сообщение о прогрессе не означает завершения: дождитесь сообщения result или chunk_end и сохраните warnings.
Небольшой результат приходит одним сообщением result. Большой результат приходит сообщениями chunk, за которыми следует chunk_end. Оба завершающих сообщения содержат version - конкретную версию обфускатора, которая создала результат (это полезно, если вы запросили диапазон или команда принудительно задаёт версию). warnings перечисляет нефатальные предупреждения обфускации в виде { type, message, functionName? } и отсутствует, если предупреждений нет, поэтому считайте отсутствующее поле пустым списком. Source maps не создаются для VM-сборок и для HTML на входе. Сборка parseHtml обычного JavaScript с sourceMap: true возвращает карту в поле sourceMap завершающего сообщения или, если она большая, чанками sourceMap.
Ошибки приложения приходят внутри потока как сообщения error, обычно при HTTP-статусе 200. Проверяйте и HTTP-статус, и ошибки в потоке. Инфраструктура и эндпоинты загрузки могут возвращать HTTP-ответы с кодом вне диапазона 2xx.
Node.js (.mjs)
Пресеты
GET https://obfuscator.io/api/v1/presets/{name}
Возвращает опции пресета, которые можно сразу передать как options запроса на обфускацию. Передайте тот же заголовок Authorization: Bearer. Имя сравнивается без учёта регистра, а ответ - один JSON-объект, а не поток. Примеры ниже сокращены.
- Встроенные пресеты:
{name}- встроенный пресет, напримерvm-default(см. Выбор пресета). Параметр запросаversionвыбирает версию обфускатора, пресет которой возвращается; он принимает те же значения, что и эндпоинт обфускации, и по умолчанию указывает на последнюю версию.descriptionиupdatedAtравныnull. - Пользовательские пресеты:
{name}- псевдоним для API, заданный в диалоге сохранения пользовательского пресета в панели управления, аoptions- сохранённая конфигурация (все опции, а не только изменённые относительно пресета). Видимость такая же, как в панели управления: API-ключ находит собственные пресеты своего пользователя и пресеты, которыми поделился владелец его команды, а сервисный ключ команды находит пресеты владельца.
GET https://obfuscator.io/api/v1/presets/vm-default
GET https://obfuscator.io/api/v1/presets/production
| Статус | Значение |
|---|---|
| 200 | Пресет. |
| 400 | Некорректное имя (от 1 до 20 символов: латинские буквы a-z, цифры, дефисы или подчёркивания; первым символом должна быть буква или цифра) или неподдерживаемая version. |
| 401 | API-ключ отсутствует, недействителен или истёк. |
| 403 | Аккаунт заблокирован, нет активной подписки или тариф не включает доступ к API. |
| 404 | Встроенного пресета с таким именем в запрошенной версии нет, и пользовательский пресет с таким псевдонимом недоступен для этого ключа. |
| 429 | Превышен лимит частоты запросов; запрос расходует общие лимиты на пользователя и на IP, описанные в разделе Лимиты и сбои. |
| 500 | Поиск пресета завершился ошибкой на сервере. Повторите попытку позже. |
Ошибки возвращаются в виде {"error": "..."}. Примеры использования пакета javascript-obfuscator и его CLI приведены в разделе Использование NPM-пакета.
Лимиты и сбои
Лимиты тарифа распространяются на размер исходного кода и на объём использования. Всё сериализованное JSON-тело, включая экранирование и опции, должно быть меньше 4.4 МБ. Для более крупного исходного кода нужна временная загрузка файлов, доступная на тарифах Team и Business только через пакет javascript-obfuscator. Текущие лимиты своего тарифа смотрите в панели управления.
API допускает 30 запросов в минуту на пользователя (общий лимит для всех его ключей) и 100 запросов в минуту с одного IP-адреса. Запросы пресетов расходуют те же лимиты, что и запросы на обфускацию.
Превышение лимита частоты запросов, исчерпание квоты и прерванный поток должны останавливать сборку. Повторяйте запросы осознанно: повторный запрос может расходовать квоту заново. Не публикуйте неполный результат.
