# アドオン

> Proxyman Scripting の組み込みアドオン（Base64、MD5/SHA ハッシュ、UUID、JWT デコード、GZip など）を一覧で確認し、require() でインポートする方法を紹介します。

## 1. 概要 {#1-whats-it}

Proxyman には、MD5 や SHA1 のハッシュ計算、Base64 のエンコード/デコード、XML や JSON の整形など、よく使う処理のための組み込みアドオンが用意されています。

> **ヒント:** Proxyman macOS 6.10.0 以降では、ネイティブの \`npm install\` を使ってサードパーティのライブラリをインストールできます。[use-npm-install.md](https://proxyman.com/docs/ja/scripting/use-npm-install) を参照してください。

## 2. 組み込みアドオン {#2-built-in-addons}

すべてのアドオンのサンプルコードは [アドオンのスニペットコード](https://proxyman.com/docs/ja/scripting/snippet-code) にあります。

| 名前                                                                      | 説明                                                                          |
| ------------------------------------------------------------------------- | ----------------------------------------------------------------------------- |
| [Base64.js](https://proxyman.com/docs/ja/scripting/snippet-code#use-base64-addon)                             | Base64 のエンコード/デコード。ネイティブの atob/btoa 関数に対応                |
| CamelCase.js                                                              | テキストをキャメルケースに変換                                                |
| CryptoJS.js                                                               | DES、AES、Rabbit の暗号化/復号アルゴリズム。CryptoJS の小さなラッパー         |
| DateToTimestamp.js                                                        | 文字列の日付をタイムスタンプに変換                                            |
| DateToUTC.js                                                              | 文字列の日付を UTC 文字列に変換                                               |
| DecodeURI.js                                                              | パーセントエンコードされた文字列をデコード                                    |
| EncodeURI.js                                                              | 文字列をパーセントエンコードされた文字列に変換                                |
| FormatCSS.js                                                              | CSS 文字列を整形                                                              |
| FormatJSON.js                                                             | JSON 文字列を整形                                                             |
| BeautifyJSON.js                                                           | JSON オブジェクトを整形された JSON 文字列に変換                               |
| UglifyJSON.js                                                             | JSON オブジェクトを圧縮された JSON 文字列に変換                               |
| FormatXML.js                                                              | XML 文字列を整形                                                              |
| HelloWorld.js                                                             | Hello World のサンプル                                                        |
| Hex2rgb.js                                                                | #000000 形式の文字列を RGB 文字列に変換                                       |
| JsonToQuery.js                                                            | JSON オブジェクトをクエリ文字列に変換                                         |
| JSONValidator.js                                                          | JSON 文字列を検証                                                             |
| [JWTDecode.js](https://proxyman.com/docs/ja/scripting/snippet-code#jwt-decode)                                | JWT トークンをデコード                                                        |
| KebabCase.js                                                              | ケバブケースに変換                                                            |
| [MD5.js](https://proxyman.com/docs/ja/scripting/snippet-code#use-hashing-addon-md5-sha1-sha256-sha512)        | MD5 ハッシュを計算                                                            |
| MinifyCSS.js                                                              | CSS 文字列を圧縮                                                              |
| MinifyJSON.js                                                             | JSON 文字列を圧縮                                                             |
| MinifyXML.js                                                              | XML 文字列を圧縮                                                              |
| QueryToJson.js                                                            | クエリ文字列を JSON オブジェクトに変換                                        |
| [Pako.js](https://proxyman.com/docs/ja/scripting/snippet-code#deflateinflate-and-gzipungzip)                  | Deflate/Inflate と GZip/UnGZip                                                |
| [SHA1.js](https://proxyman.com/docs/ja/scripting/snippet-code#use-hashing-addon-md5-sha1-sha256-sha512)       | SHA1 ハッシュを計算                                                           |
| [SHA256.js](https://proxyman.com/docs/ja/scripting/snippet-code#use-hashing-addon-md5-sha1-sha256-sha512)     | SHA256 ハッシュを計算                                                         |
| [SHA512.js](https://proxyman.com/docs/ja/scripting/snippet-code#use-hashing-addon-md5-sha1-sha256-sha512)     | SHA512 ハッシュを計算                                                         |
| SnakeCase.js                                                              | スネークケースに変換                                                          |
| StartCase.js                                                              | Start Case に変換                                                             |
| [UUID.js](https://proxyman.com/docs/ja/scripting/snippet-code#use-uuid-v4-addon)                              | 一意な UUID-v4 形式の文字列を生成                                             |

## 3. アドオンの使い方 {#3-how-to-use-addons}

各アドオンは関数をエクスポートしており、`require` 関数を使ってインポートできます。

たとえば、Base64.js アドオンは次のような内容です。

```javascript
// Base64.js
const Base64 = require('@libs/base64.js');
const { atob } = require("@libs/atob.js");
const { btoa } = require("@libs/btoa.js");

// atob / btoa
// They're equivalent with window.atob and window.btoa

exports.atob = atob;
exports.btoa = btoa;

// Basic Base64
exports.base64Decode = (input) => {
    return Base64.decode(input)
};

exports.base64Encode = (input) => {
    return Base64.encode(input);
};
```

そのうえで、スクリプト内から次のように使用できます。

```javascript
const { atob, btoa } = require("@addons/Base64.js")

function onRequest(context, url, request) {

    // Encode base64 by using the export function
    var text = btoa("Hello World");
    
    console.log(text)
    // => SGVsbG8gV29ybGQ=
}
```

> **備考:** すべてのアドオンのコードは **\~/Library/Application\ Support/com.proxyman.NSProxy/addons** にあります。

## 4. 注意事項 {#4-notes}

> **備考:** `require` 関数は、[JavascriptCore フレームワーク](https://developer.apple.com/documentation/javascriptcore) の組み込み関数ではありません。アドオンやライブラリを簡単にインポートできるように、Proxyman が独自に提供している関数です。
>
> Proxyman の組み込みアドオンの実現につながった Boop アプリを開発した [Ivan Mathy](https://github.com/IvanMathy) 氏に感謝します。

> **備考:** アドオンのフォルダは Proxyman の更新のたびに上書きされるため、そのフォルダ内のアドオンは編集しないでください。アドオンを変更するには、まず **users** フォルダにコピーしてください。詳しくは [独自のアドオンを作成](https://proxyman.com/docs/ja/scripting/write-your-own-addons) を参照してください。
