Документация
/

Справочник API

Справочник API

Для сборок через CLI и Node.js используйте публичный пакет javascript-obfuscator. Он сам обрабатывает потоковые ответы и загрузку больших файлов. REST-клиенты, работающие с API напрямую, должны реализовать описанный ниже протокол.

Смотреть

Using the Obfuscator.io API: API Keys, npm Package, CLI and Custom Presets

Смотреть на YouTube

Создайте 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 встроенный пресет, например vm-default (см. Выбор пресета), или псевдоним для API пользовательского пресета. Встроенный пресет применяется так, как его определяет запрошенная версия обфускатора, а псевдоним разрешается с той же видимостью, что и в эндпоинте пресетов. Пресет служит основой, а все остальные опции запроса переопределяют его значения. Если имя не является ни тем, ни другим, запрос завершается ошибкой.

Если владелец команды принудительно задаёт версию или пресет, они заменяют version или options из запроса для участников команды и сервисных ключей команды. См. Принудительная версия для команды и Общие пресеты.

ЗаголовокЗначение
Content-Typeapplication/json
AuthorizationBearer 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.

Код

Код

JSON

Node.js (.mjs)

JavaScript

Код

Пресеты

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

JSON

GET https://obfuscator.io/api/v1/presets/production

JSON

СтатусЗначение
200Пресет.
400Некорректное имя (от 1 до 20 символов: латинские буквы a-z, цифры, дефисы или подчёркивания; первым символом должна быть буква или цифра) или неподдерживаемая version.
401API-ключ отсутствует, недействителен или истёк.
403Аккаунт заблокирован, нет активной подписки или тариф не включает доступ к API.
404Встроенного пресета с таким именем в запрошенной версии нет, и пользовательский пресет с таким псевдонимом недоступен для этого ключа.
429Превышен лимит частоты запросов; запрос расходует общие лимиты на пользователя и на IP, описанные в разделе Лимиты и сбои.
500Поиск пресета завершился ошибкой на сервере. Повторите попытку позже.

Ошибки возвращаются в виде {"error": "..."}. Примеры использования пакета javascript-obfuscator и его CLI приведены в разделе Использование NPM-пакета.

Квота

GET https://obfuscator.io/api/v1/quota

Возвращает, сколько ещё можно использовать на вашем тарифе, чтобы сборка могла заранее проверить, уложится ли набор файлов в остаток, а не прерваться на полпути. Передайте тот же заголовок Authorization: Bearer. Ответ приходит одним JSON-объектом, а не потоком, и сам запрос квоту не расходует.

JSON

  • remainingBytes: сколько ещё можно использовать прямо сейчас, то есть меньшее из двух значений: остатка на сегодня и остатка на этот месяц. null, если у вашего тарифа нет лимита.
  • minBytesPerBuild: минимальный объём, который засчитывается за одну сборку.
  • daily и monthly: использованные байты и лимит каждого окна или null, если у вашего тарифа нет такого лимита. resetsAt показывает, когда окно начинается заново, в формате ISO 8601 UTC: дневное окно обнуляется в 00:00 UTC, месячное обнуляется каждый месяц в дату списания оплаты.
  • В команде ключ участника показывает общий месячный объём использования команды и собственный дневной объём участника. Сервисный ключ команды показывает объём использования владельца команды.

За сборку засчитывается размер её исходного кода в байтах (UTF-8): один раз, с любыми опциями и не меньше minBytesPerBuild. Размер результата не учитывается. Для HTML-файла, собранного с parseHtml, учитываются только скрипты, выбранные для обфускации. Сложите объёмы сборок, которые собираетесь запустить, и сравните сумму с remainingBytes.

Если сборка отклонена из-за исчерпанного лимита, сообщение error в потоке содержит errorCode:

JSON

errorCodeЗначение
dailyLimitДневной лимит исчерпан. Повторите попытку после daily.resetsAt.
monthlyLimitМесячный лимит исчерпан. Повторите попытку после monthly.resetsAt или перейдите на более высокий тариф.
usageCheckFailedНе удалось проверить объём использования. Повторите попытку чуть позже.

Эти три кода стабильны. Другие ошибки тоже могут содержать errorCode, но полагаться на него не стоит.

СтатусЗначение
200Квота.
401API-ключ отсутствует, недействителен или истёк.
403Аккаунт заблокирован, нет активной подписки или тариф не включает доступ к API.
429Превышен лимит частоты запросов; запрос расходует общие лимиты на пользователя и на IP, описанные в разделе Лимиты и сбои.
500Не удалось прочитать данные об использовании. Повторите попытку позже.

Лимиты и сбои

Лимиты тарифа распространяются на размер исходного кода и на объём использования. Всё сериализованное JSON-тело, включая экранирование и опции, должно быть меньше 4.4 МБ. Для более крупного исходного кода нужна временная загрузка файлов, доступная на тарифах Team и Business только через пакет javascript-obfuscator. Текущие лимиты и объём использования смотрите в панели управления или через эндпоинт квоты. Квоту расходуют только сборки, которые вернули обфусцированный код; запрос, завершившийся ошибкой, её не расходует.

API допускает 30 запросов в минуту на пользователя (общий лимит для всех его ключей) и 100 запросов в минуту с одного IP-адреса. Запросы пресетов и квоты расходуют те же лимиты, что и запросы на обфускацию.

Превышение лимита частоты запросов, исчерпание квоты и прерванный поток должны останавливать сборку. Повторяйте запросы осознанно: повторный запрос может расходовать квоту заново. Не публикуйте неполный результат.

Тестирование и CI