# Addons

## 1. What's it?

Proxyman provides a list of handy built-in add-ons that help you to do many common tasks, such as MD5, SHA1 Hashing, Base64 Encode/Decode, Beautify XML, JSON, ....

### 2. Built-in Addons

You can find sample code for all addons at [Addons Snippet Code](https://docs.proxyman.com/scripting/snippet-code)

| Name                                                                                             | Description                                                                   |
| ------------------------------------------------------------------------------------------------ | ----------------------------------------------------------------------------- |
| [Base64.js](https://docs.proxyman.com/snippet-code#use-base64-addon)                             | Base64 Encoding/Decode. Support Native atob/btoa function                     |
| CamelCase.js                                                                                     | Convert text to Camel Case                                                    |
| CryptoJS.js                                                                                      | DES, AES, Rabbit encryption/decryption algorithm. A small wrapper of CryptoJS |
| DateToTimestamp.js                                                                               | Convert String Date to Timestamp                                              |
| DateToUTC.js                                                                                     | Convert String Date to UTC String                                             |
| DecodeURI.js                                                                                     | Decode percent-encoded String                                                 |
| EncodeURI.js                                                                                     | Encode to percent-encoded String                                              |
| FormatCSS.js                                                                                     | Beautify CSS String                                                           |
| FormatJSON.js                                                                                    | Beautify JSON String                                                          |
| BeautifyJSON.js                                                                                  | Convert JSON Obj to beauty JSON String                                        |
| UglifyJSON.js                                                                                    | Convert JSON Obj to ugly JSON String                                          |
| FormatXML.js                                                                                     | Beautify XML String                                                           |
| HelloWorld.js                                                                                    | Hello World                                                                   |
| Hex2rgb.js                                                                                       | Convert #000000 string to RGB string                                          |
| JsonToQuery.js                                                                                   | Convert JSON Objc to Query String                                             |
| JSONValidator.js                                                                                 | Validate JSON String                                                          |
| [JWTDecode.js](https://docs.proxyman.com/snippet-code#jwt-decode)                                | Decode JWT Token                                                              |
| KebabCase.js                                                                                     | Conver to Kebab String                                                        |
| [MD5.js](https://docs.proxyman.com/snippet-code#use-hashing-addon-md-5-sha-1-sha-256-sha-512)    | Hash MD5                                                                      |
| MinifyCSS.js                                                                                     | Minify CSS String                                                             |
| MinifyJSON.js                                                                                    | Minify JSON String                                                            |
| MinifyXML.js                                                                                     | Minify XML String                                                             |
| QueryToJson.js                                                                                   | Convert Query String to JSON Object                                           |
| [Pako.js](https://docs.proxyman.com/snippet-code#deflate-inflate-and-gzip-ungzip)                | Deflate/Inflate and GZip/UnGZip                                               |
| [SHA1.js](https://docs.proxyman.com/snippet-code#use-hashing-addon-md-5-sha-1-sha-256-sha-512)   | Hash SHA1                                                                     |
| [SHA256.js](https://docs.proxyman.com/snippet-code#use-hashing-addon-md-5-sha-1-sha-256-sha-512) | Hash SHA256                                                                   |
| [SHA512.js](https://docs.proxyman.com/snippet-code#use-hashing-addon-md-5-sha-1-sha-256-sha-512) | Hash SHA512                                                                   |
| SnakeCase.js                                                                                     | Convert to Snake Case                                                         |
| StartCase.js                                                                                     | Convert to Start Case                                                         |
| [UUID.js](https://docs.proxyman.com/snippet-code#use-uuid-v4-addon)                              | Generate Unique UUID-v4 string                                                |

## 3. How to use addons?

Each addon will export the function that you can import by using the `require` function

To illustrate, Base64.js addon looks like:

```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);
};
```

Then, you can use it in the script:

```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=
}
```

{% hint style="info" %}
You can find all addons code at **\~/Library/Application\ Support/com.proxyman.NSProxy/addons**
{% endhint %}

## 4. Notes

{% hint style="info" %}
The `require` function is not a built-in function from [JavascriptCore framework](https://developer.apple.com/documentation/javascriptcore), it's a custom function that Proxyman provides to allows the user to import the addons/libs easily.

Thanks to [Ivan Mathy](https://github.com/IvanMathy) for creating Boop app that facilitates Proxyman's built-in add-ons.
{% endhint %}

{% hint style="info" %}
Addons folder will be overridden for every new Proxyman Update. Make sure you don't edit the addon. If need to modify, please copy to the **users** folder
{% endhint %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.proxyman.com/scripting/addons.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
