# 애드온

> Base64, MD5/SHA 해싱, UUID, JWT 디코딩, GZip 등 Proxyman Scripting의 내장 애드온을 살펴보고, 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/ko/scripting/use-npm-install)을 참고하세요.

## 2. 내장 애드온 {#2-built-in-addons}

모든 애드온의 샘플 코드는 [애드온 샘플 코드](https://proxyman.com/docs/ko/scripting/snippet-code)에서 확인할 수 있습니다.

| 이름                                                                  | 설명                                                                          |
| ------------------------------------------------------------------------- | ----------------------------------------------------------------------------- |
| [Base64.js](https://proxyman.com/docs/ko/scripting/snippet-code#use-base64-addon)                             | Base64 인코딩/디코딩. 네이티브 atob/btoa 함수를 지원합니다                    |
| CamelCase.js                                                              | 텍스트를 Camel Case로 변환                                                    |
| 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/ko/scripting/snippet-code#jwt-decode)                                | JWT 토큰 디코딩                                                               |
| KebabCase.js                                                              | Kebab Case로 변환                                                             |
| [MD5.js](https://proxyman.com/docs/ko/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/ko/scripting/snippet-code#deflateinflate-and-gzipungzip)                  | Deflate/Inflate 및 GZip/UnGZip                                                |
| [SHA1.js](https://proxyman.com/docs/ko/scripting/snippet-code#use-hashing-addon-md5-sha1-sha256-sha512)       | SHA1 해시 생성                                                                |
| [SHA256.js](https://proxyman.com/docs/ko/scripting/snippet-code#use-hashing-addon-md5-sha1-sha256-sha512)     | SHA256 해시 생성                                                              |
| [SHA512.js](https://proxyman.com/docs/ko/scripting/snippet-code#use-hashing-addon-md5-sha1-sha256-sha512)     | SHA512 해시 생성                                                              |
| SnakeCase.js                                                              | Snake Case로 변환                                                             |
| StartCase.js                                                              | Start Case로 변환                                                             |
| [UUID.js](https://proxyman.com/docs/ko/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) 님께 감사드립니다.

> **노트:** addons 폴더는 Proxyman 업데이트마다 덮어쓰이므로, 그 안의 애드온은 편집하지 마세요. 애드온을 변경하려면 먼저 **users** 폴더로 복사하세요. [나만의 애드온 작성하기](https://proxyman.com/docs/ko/scripting/write-your-own-addons)를 참고하세요.
