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 の機能を少なくとも 1 つ、直接またはプリセット経由で有効にしてください(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)として読み取ります。ネットワークからの 1 回の読み取りで、JSON の行や UTF-8 の文字が途中で分割されることがあります。進捗は完了を意味しません。result または chunk_end メッセージを受け取ったことを必ず確認し、warnings を保持してください。
小さな出力は 1 つの 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: 1 回のビルドで計上される最小量です。dailyとmonthly: 各期間の使用済みバイト数と上限です。プランにその上限がない場合はnullです。resetsAtは期間がリセットされる日時で、ISO 8601 形式の UTC で示されます。日次の期間は 00:00 UTC に、月次の期間は毎月の請求日にリセットされます。- チームでは、メンバーのキーはチームで共有する月次の使用量と、そのメンバー自身の日次の使用量を返します。チームサービスキーはチームオーナーの使用量を返します。
ビルドは、どのオプションを使用するかにかかわらず、ソースのサイズをバイト単位(UTF-8)で 1 回だけ計上し、計上量は最低でも minBytesPerBuild になります。出力のサイズは計上されません。parseHtml でビルドする HTML ファイルでは、難読化の対象として選択されたスクリプトだけが計上されます。これから実行するビルドの量を合計し、その合計を remainingBytes と比較してください。
上限に達したためにビルドが拒否された場合、ストリームの error メッセージに errorCode が含まれます。
errorCode | 意味 |
|---|---|
dailyLimit | 日次の上限に達しました。daily.resetsAt 以降に再試行してください。 |
monthlyLimit | 月次の上限に達しました。monthly.resetsAt 以降に再試行するか、プランをアップグレードしてください。 |
usageCheckFailed | 使用量を確認できませんでした。少し待ってから再試行してください。 |
これら 3 つのコードは今後も変わりません。ほかのエラーにも errorCode が含まれることがありますが、それには依存しないでください。
| ステータス | 意味 |
|---|---|
| 200 | クォータ。 |
| 401 | API キーがない、無効、または期限切れです。 |
| 403 | アカウントが停止されている、有効なサブスクリプションがない、または API アクセスのないプランです。 |
| 429 | レート制限に達しました。このリクエストは、制限と失敗に記載のユーザー単位および IP 単位の上限を共有します。 |
| 500 | 使用量を読み取れませんでした。後で再試行してください。 |
制限と失敗
ソースのサイズと使用量にはプランの制限が適用されます。エスケープやオプションを含む、シリアライズされた JSON 本文全体を 4.4 MB 未満に収めてください。それより大きなソースには一時アップロードが必要です。一時アップロードは Team と Business で、javascript-obfuscator パッケージを通じてのみ利用できます。現在の制限と使用量は、ダッシュボードまたはクォータのエンドポイントで確認してください。使用量に計上されるのは、難読化されたコードを返したビルドだけです。エラーで終了したリクエストは計上されません。
API のリクエスト数の上限は、ユーザーごとに毎分 30 件(そのユーザーのすべてのキーで共有)、IP ごとに毎分 100 件です。プリセットとクォータのリクエストも、難読化リクエストと同じ上限に含まれます。
レート制限、使用量上限による失敗、ストリームの中断が起きた場合は、ビルドを停止する必要があります。再試行は意図的に行ってください。リクエストを繰り返すと、追加の使用量が消費されることがあります。不完全な出力を公開しないでください。
