API 레퍼런스
CLI 및 Node.js 빌드에는 공개 javascript-obfuscator 패키지를 사용하세요. 이 패키지는 스트리밍과 대용량 업로드를 처리합니다. REST를 직접 호출하는 클라이언트는 아래 프로토콜을 구현해야 합니다.
시청
Using the Obfuscator.io API: API Keys, npm Package, CLI and Custom Presets
설정 → API 키에서 API 키를 만드세요. Pro, Team 또는 Business 플랜이 필요합니다. 키는 서버나 CI 시크릿 저장소에 보관하고, 절대 브라우저 코드에 넣지 마세요. javascript-obfuscator 패키지는 키를 apiToken으로 받으며(CLI에서는 --pro-api-token), REST를 직접 호출하는 요청은 Authorization: Bearer 헤더에 키를 담아 보냅니다. Team 또는 Business 플랜에서는 팀 소유자가 API 키 생성 대화 상자에서 팀 서비스 키를 선택할 수 있습니다. 그렇게 만든 키는 개인이 아니라 팀에 속하므로 구성원이 떠나도 계속 동작합니다.
요청
POST https://obfuscator.io/api/v1/obfuscate
code와 options를 담은 JSON을 보내세요. 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? } 형태로 나열하며, 경고가 없으면 생략되므로 필드가 없으면 빈 목록으로 취급하세요. VM 빌드와 HTML 입력에는 소스 맵이 생성되지 않습니다. 일반 JavaScript를 sourceMap: true로 parseHtml 빌드하면 종료 메시지의 sourceMap 필드로, 크기가 크면 sourceMap 청크로 소스 맵이 반환됩니다.
애플리케이션 오류는 스트림 안의 error 메시지로 전달되며, 대개 HTTP 상태는 200입니다. HTTP 상태와 스트림으로 전달되는 오류를 모두 확인하세요. 인프라 및 업로드 엔드포인트는 2xx가 아닌 HTTP 응답을 반환할 수 있습니다.
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만큼 계산됩니다. 출력 크기는 계산되지 않습니다. parseHtml로 빌드하는 HTML 파일은 난독화 대상으로 선택된 스크립트만 계산됩니다. 실행하려는 빌드를 모두 더한 뒤 그 합계를 remainingBytes와 비교하세요.
한도를 모두 사용해 빌드가 거부되면, 스트림의 error 메시지에 errorCode가 포함됩니다.
errorCode | 의미 |
|---|---|
dailyLimit | 일일 한도를 모두 사용했습니다. daily.resetsAt 이후에 다시 시도하세요. |
monthlyLimit | 월간 한도를 모두 사용했습니다. monthly.resetsAt 이후에 다시 시도하거나 플랜을 업그레이드하세요. |
usageCheckFailed | 사용량을 확인할 수 없었습니다. 잠시 후 다시 시도하세요. |
이 세 코드는 안정적으로 유지됩니다. 다른 오류에도 errorCode가 포함될 수 있지만, 그 값에 의존하지 마세요.
| 상태 | 의미 |
|---|---|
| 200 | 할당량입니다. |
| 401 | API 키가 없거나, 유효하지 않거나, 만료되었습니다. |
| 403 | 계정이 정지되었거나, 활성 구독이 없거나, API 접근이 포함되지 않은 플랜입니다. |
| 429 | 요청 한도를 초과했습니다. 이 요청은 제한 및 실패에 설명된 사용자별 및 IP별 한도를 함께 사용합니다. |
| 500 | 사용량을 읽을 수 없었습니다. 나중에 다시 시도하세요. |
제한 및 실패
소스 크기와 사용량에는 플랜 한도가 적용됩니다. 이스케이프와 옵션을 포함해 직렬화된 JSON 본문 전체를 4.4 MB 미만으로 유지하세요. 이보다 큰 소스에는 임시 업로드가 필요하며, 임시 업로드는 Team 및 Business에서 javascript-obfuscator 패키지를 통해서만 사용할 수 있습니다. 현재 한도와 사용량은 대시보드나 할당량 엔드포인트에서 확인하세요. 사용량에는 난독화된 코드를 반환한 빌드만 포함되며, 오류로 끝난 요청은 포함되지 않습니다.
API는 사용자당 분당 30개 요청(해당 사용자의 모든 키가 함께 사용)과 IP당 분당 100개 요청을 허용합니다. 프리셋 요청과 할당량 요청은 난독화 요청과 같은 한도에 포함됩니다.
요청 한도 초과, 할당량 실패, 중단된 스트림이 발생하면 빌드를 중단해야 합니다. 재시도는 신중하게 하세요. 반복된 요청은 사용량을 추가로 소모할 수 있습니다. 일부만 생성된 출력은 배포하지 마세요.
