Справочник 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 встроенный пресет, например vm-default (см. Выбор пресета), или псевдоним для API пользовательского пресета. Встроенный пресет применяется так, как его определяет запрошенная версия обфускатора, а псевдоним разрешается с той же видимостью, что и в эндпоинте пресетов. Пресет служит основой, а все остальные опции запроса переопределяют его значения. Если имя не является ни тем, ни другим, запрос завершается ошибкой.
Если владелец команды принудительно задаёт версию или пресет, они заменяют 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-пакета.
Квота
GET https://obfuscator.io/api/v1/quota
Возвращает, сколько ещё можно использовать на вашем тарифе, чтобы сборка могла заранее проверить, уложится ли набор файлов в остаток, а не прерваться на полпути. Передайте тот же заголовок Authorization: Bearer. Ответ приходит одним JSON-объектом, а не потоком, и сам запрос квоту не расходует.
remainingBytes: сколько ещё можно использовать прямо сейчас, то есть меньшее из двух значений: остатка на сегодня и остатка на этот месяц.null, если у вашего тарифа нет лимита.minBytesPerBuild: минимальный объём, который засчитывается за одну сборку.dailyиmonthly: использованные байты и лимит каждого окна илиnull, если у вашего тарифа нет такого лимита.resetsAtпоказывает, когда окно начинается заново, в формате ISO 8601 UTC: дневное окно обнуляется в 00:00 UTC, месячное обнуляется каждый месяц в дату списания оплаты.- В команде ключ участника показывает общий месячный объём использования команды и собственный дневной объём участника. Сервисный ключ команды показывает объём использования владельца команды.
За сборку засчитывается размер её исходного кода в байтах (UTF-8): один раз, с любыми опциями и не меньше minBytesPerBuild. Размер результата не учитывается. Для HTML-файла, собранного с parseHtml, учитываются только скрипты, выбранные для обфускации. Сложите объёмы сборок, которые собираетесь запустить, и сравните сумму с remainingBytes.
Если сборка отклонена из-за исчерпанного лимита, сообщение error в потоке содержит errorCode:
errorCode | Значение |
|---|---|
dailyLimit | Дневной лимит исчерпан. Повторите попытку после daily.resetsAt. |
monthlyLimit | Месячный лимит исчерпан. Повторите попытку после monthly.resetsAt или перейдите на более высокий тариф. |
usageCheckFailed | Не удалось проверить объём использования. Повторите попытку чуть позже. |
Эти три кода стабильны. Другие ошибки тоже могут содержать errorCode, но полагаться на него не стоит.
| Статус | Значение |
|---|---|
| 200 | Квота. |
| 401 | API-ключ отсутствует, недействителен или истёк. |
| 403 | Аккаунт заблокирован, нет активной подписки или тариф не включает доступ к API. |
| 429 | Превышен лимит частоты запросов; запрос расходует общие лимиты на пользователя и на IP, описанные в разделе Лимиты и сбои. |
| 500 | Не удалось прочитать данные об использовании. Повторите попытку позже. |
Лимиты и сбои
Лимиты тарифа распространяются на размер исходного кода и на объём использования. Всё сериализованное JSON-тело, включая экранирование и опции, должно быть меньше 4.4 МБ. Для более крупного исходного кода нужна временная загрузка файлов, доступная на тарифах Team и Business только через пакет javascript-obfuscator. Текущие лимиты и объём использования смотрите в панели управления или через эндпоинт квоты. Квоту расходуют только сборки, которые вернули обфусцированный код; запрос, завершившийся ошибкой, её не расходует.
API допускает 30 запросов в минуту на пользователя (общий лимит для всех его ключей) и 100 запросов в минуту с одного IP-адреса. Запросы пресетов и квоты расходуют те же лимиты, что и запросы на обфускацию.
Превышение лимита частоты запросов, исчерпание квоты и прерванный поток должны останавливать сборку. Повторяйте запросы осознанно: повторный запрос может расходовать квоту заново. Не публикуйте неполный результат.
