# 内置插件（Addons）

> 浏览 Proxyman Scripting 内置的插件，包括 Base64、MD5/SHA 哈希、UUID、JWT 解码、GZip 等，并使用 require() 导入。

## 1. 这是什么？ {#1-whats-it}

Proxyman 内置了一些实用插件，用于完成常见任务，例如 MD5 和 SHA1 哈希、Base64 编码/解码，以及 XML 和 JSON 的美化。

> **提示:** 从 macOS 版 Proxyman 6.10.0 开始，你可以使用 \`npm install\` 安装第三方库。请参阅 [use-npm-install.md](https://proxyman.com/docs/zh-cn/scripting/use-npm-install)。

## 2. 内置插件 {#2-built-in-addons}

所有插件的示例代码都可以在 [插件代码片段](https://proxyman.com/docs/zh-cn/scripting/snippet-code) 中找到。

| 名称                                                                      | 说明                                                                          |
| ------------------------------------------------------------------------- | ----------------------------------------------------------------------------- |
| [Base64.js](https://proxyman.com/docs/zh-cn/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                                                              | 解码 URL 百分号编码的字符串                                                   |
| EncodeURI.js                                                              | 编码为 URL 百分号编码的字符串                                                 |
| 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/zh-cn/scripting/snippet-code#jwt-decode)                                | 解码 JWT Token                                                                |
| KebabCase.js                                                              | 转换为 Kebab Case（短横线命名）                                               |
| [MD5.js](https://proxyman.com/docs/zh-cn/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/zh-cn/scripting/snippet-code#deflateinflate-and-gzipungzip)                  | Deflate/Inflate 及 GZip/UnGZip 压缩与解压                                     |
| [SHA1.js](https://proxyman.com/docs/zh-cn/scripting/snippet-code#use-hashing-addon-md5-sha1-sha256-sha512)       | 计算 SHA1 哈希值                                                              |
| [SHA256.js](https://proxyman.com/docs/zh-cn/scripting/snippet-code#use-hashing-addon-md5-sha1-sha256-sha512)     | 计算 SHA256 哈希值                                                            |
| [SHA512.js](https://proxyman.com/docs/zh-cn/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/zh-cn/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 提供的自定义函数，方便你导入插件和库。
>
> 感谢 [Ivan Mathy](https://github.com/IvanMathy) 开发了 Boop 应用，它为 Proxyman 的内置插件提供了便利。

> **备注:** 每次更新 Proxyman 都会覆盖 addons 文件夹，因此请不要直接修改其中的插件。如需修改某个插件，请先将其复制到 **users** 文件夹。请参阅 [编写自定义插件](https://proxyman.com/docs/zh-cn/scripting/write-your-own-addons)。
