# Mesa.log.info(message\[, meta\])

Log info to Mesa Logs.

**Parameters**  
| Name    | Type   | Description  |
|---------|--------|--------------|
| message | `string` |              |
| meta    | `object` | _Optional_    |

---

# Mesa.log.warn(message\[, meta\])

Log a warning to Mesa Logs.

**Parameters**  
| Name    | Type   | Description  |
|---------|--------|--------------|
| message | `string` |              |
| meta    | `object` | _Optional_    |

---

# Mesa.log.error(message\[, meta\])

Log an error to Mesa Logs.

**Parameters**  
| Name    | Type   | Description  |
|---------|--------|--------------|
| message | `string` |              |
| meta    | `object` | _Optional_    |

---

# Mesa.log.debug(message\[, meta\])

Log info to Mesa Logs only if the Automation is in Debug Mode.

**Parameters**  
| Name    | Type   | Description  |
|---------|--------|--------------|
| message | `string` |              |
| meta    | `object` | _Optional_    |

---

# Mesa.request.get(path, options)

Make a GET request to an external Rest API.

**Parameters**  
| Name   | Type   | Description  |
|--------|--------|--------------|
| path   | `string` |              |
| options | [RequestOptions](https://docs.getmesa.com/tools/custom-code/libraries/sdk#object-requestoptions) |  |

**Returns**  
- [Response](https://docs.getmesa.com/tools/custom-code/libraries/sdk#object-or-string-response)

---

# Mesa.request.post(path, data, options)

Make a POST request to an external Rest API.

**Parameters**  
| Name    | Type   | Description  |
|---------|--------|--------------|
| path    | `string` |              |
| data    | `object` |              |
| options | [RequestOptions](https://docs.getmesa.com/tools/custom-code/libraries/sdk#object-requestoptions) |  |

**Returns**  
- [Response](https://docs.getmesa.com/tools/custom-code/libraries/sdk#object-or-string-response)

---

# Mesa.request.put(path, data, options)

Make a PUT request to an external Rest API.

**Returns**  
- [Response](https://docs.getmesa.com/tools/custom-code/libraries/sdk#object-or-string-response)

---

# Mesa.request.patch(path, data, options)

Make a PATCH request to an external Rest API.

**Returns**  
- [Response](https://docs.getmesa.com/tools/custom-code/libraries/sdk#object-or-string-response)

---

# Mesa.request.delete(path, options)

Make a DELETE request to an external Rest API.

**Parameters**  
| Name    | Type   | Description  |
|---------|--------|--------------|
| path    | `string` |              |
| options | [RequestOptions](https://docs.getmesa.com/tools/custom-code/libraries/sdk#object-requestoptions) |  |

**Returns**  
- [Response](https://docs.getmesa.com/tools/custom-code/libraries/sdk#object-or-string-response)

---

# Mesa.request.send(method, path, data, options)

Make a request to an external Rest API.

**Parameters**  
| Name    | Type   | Description  |
|---------|--------|--------------|
| method  | `string` | One of `GET`, `POST`, `PUT`, `PATCH`, or `DELETE` |
| path    | `string` |              |
| data    | `object` |              |
| options | [RequestOptions](https://docs.getmesa.com/tools/custom-code/libraries/sdk#object-requestoptions) |  |

**Returns**  
- [Response](https://docs.getmesa.com/tools/custom-code/libraries/sdk#object-or-string-response)

---

# Mesa.request.base64_encode(string)

Base-64 encode a string. This is helpful when building an `Authorization` header for basic auth requests.

**Parameters**  
| Name   | Type   | Description  |
|--------|--------|--------------|
| string | `string` | The string to encode |

**Returns**  
- `string` The base-64 encoded version of the input string parameter.

---

# Mesa.request.base64_decode(string\[, strict\])

Base64 decode a string. Decodes data encoded with MIME base64.

**Parameters**  
| Name    | Type   | Description  |
|---------|--------|--------------|
| string  | `string` | The base-64 encoded version of the input string parameter. |
| strict   | `bool` | If the strict parameter is set to TRUE then the base64_decode() function will return FALSE if the input contains character from outside the base64 alphabet. Defaults to FALSE. _Optional_ |

**Returns**  
- `string` The decoded string.

---

# Mesa.request.hash(algorithm, string\[, base64encode\])

Generate a hash of a string. This is helpful when creating signed requests.

**Parameters**  
| Name       | Type   | Description  |
|------------|--------|--------------|
| algorithm  | `string` | The algorithm to use. Options: `sha1`, `sha256`, `md5` |
| string     | `string` | The string to create the hash from |
| base64encode | `string` | Should we base64-encode the raw value of the hash? _Optional_ |

**Returns**  
- `string` The raw binary data of the hash.

---

# Mesa.request.hashHmac(algorithm, string, string\[, base64encode\])

Generate a keyed hash value using the HMAC method. This is helpful when creating signed requests.

**Parameters**  
| Name       | Type   | Description  |
|------------|--------|--------------|
| algorithm  | `string` | The algorithm to use. Options: `sha1`, `sha256`, `md5` |
| string     | `string` | The string to create the hash from |
| string     | `string` | Shared secret key used for generating the HMAC variant of the message digest |
| base64encode | `string` | Should we base64-encode the raw value of the hash? _Optional_ |

**Returns**  
- `string` The raw binary data of the hash.

---

# Mesa.request.sleep($seconds)

Pauses execution.

**Parameters**  
| Name     | Type   | Description  |
|----------|--------|--------------|
| $seconds | `int`  |              |

**Returns**

---

# Mesa.credential.get(key\[, defaultValue\])

Get a secret.

**Parameters**  
| Name           | Type    | Description  |
|----------------|---------|--------------|
| key            | `string` |              |
| defaultValue   | `string` | A default value to use if the secret cannot be found. If `defaultValue` is empty, the script will throw a fatal error if the secret is not found. _Optional_ |

**Returns**  
- `string` The secret value.

---

# Mesa.credential.set(key, value\[, options\])

Save a secret value.

**Parameters**  
| Name    | Type   | Description  |
|---------|--------|--------------|
| key     | `string` | The credential key or id. |
| value   | `string` | The value to save. This will be encrypted at rest, and can contained a stringified JSON array. |
| options | `object` | _Optional_ |

---

# Mesa.database.query(sql)

Get a storage item.

**Parameters**  
| Name  | Type   | Description  |
|-------|--------|--------------|
| sql   | `string` | The SQL query to run |

**Returns**  
- `array` The result of the query.

---

# Mesa.storage.get(key\[, defaultValue\])

Get a storage item.

**Parameters**  
| Name         | Type    | Description  |
|--------------|---------|--------------|
| key          | `string` |              |
| defaultValue | `string` | A default value to use if the storage key cannot be found. If `defaultValue` is empty, the script will throw a fatal error if the storage key is not found. _Optional_ |

**Returns**  
- `string` The storage value.

---

# Mesa.storage.set(key, value)

Set a storage item.

**Parameters**  
| Name  | Type   | Description  |
|-------|--------|--------------|
| key   | `string` |              |
| value | `string` |              |

---

# Mesa.liquid.render(template, params)

Render a liquid template with the `params` passed.

**Parameters**  
| Name    | Type   | Description  |
|---------|--------|--------------|
| template | `string` | String representing a liquid template. |
| params   | `object` | A keyed object of parameters to replace. |

**Returns**  
- `string` The rendered template code.

---

# Mesa.input.getWebhookUrl(type, format, automationId, key)

Generates the URL for input webhooks.

**Parameters**  
| Name         | Type   | Description  |
|--------------|--------|--------------|
| type         | `string` | Type of webhook: `json`, `shopify` |
| format       | `string` | Format of the returned data: `string` or `array`. If string, a full URL is returned. If `array`, URL will comprise two fields `suffix` and `prefix` |
| automationId | `string` | ID of the Automation |
| key          | `string` | The key of the trigger |

**Returns** 
- `string``array` The rendered template code.

---

# Mesa.output.next(payload, params)

Pass a payload to the service and call the next step in this Automation.

**Parameters**  
| Name    | Type   | Description  |
|---------|--------|--------------|
| payload  | `object` |              |
| params   | `object` | Parameters to send to the output, such as tokens to construct a Shopify API url |
| params.enqueue | `bool` | Defaults to false. Set to true if you are exploding multiple tasks that can be run in parallel. _Optional_ |

---

# Mesa.output.send(outputKey, payload, enqueue)

Call an arbitrary output from a Mesa Script.

**Parameters**  
| Name     | Type   | Description  |
|----------|--------|--------------|
| outputKey| `string` |              |
| payload  | `object` |              |
| enqueue  | `bool` | Defaults to false. Set to true if you are exploding multiple tasks that can be run in parallel. |

---

# Mesa.automation.send(automationKey, payload)

Call another automation from a Mesa Script.

**Parameters**  
| Name          | Type    | Description  |
|---------------|---------|--------------|
| automationKey | `string` | In the form `${automationKey}`, this will trigger the first input in the Automation. In the form `${automationKey}/${inputKey}`, this will trigger a specific input in the automation. |
| payload       | `object` |              |

---

# Mesa.ftp.deleteFile(filename)

Delete the file loaded by the Input.

**Parameters**  
| Name     | Type   | Description  |
|----------|--------|--------------|
| filename | `string` | Typically passed from `context.filename`. |

---

# Mesa.ftp.moveFile(filename, destinationFilenameAndPath)

Move the file loaded by the Input to a new location.

**Parameters**  
| Name                  | Type   | Description  |
|-----------------------|--------|--------------|
| filename              | `string` | Typically passed from `context.filename`. |
| destinationFilenameAndPath | `string` |              |

---

# Mesa.xml.decode(xmlString\[, namespaceSep='_'\])

Convert an XML file into an {object}. This function will condense XML namespaces into {namespaceSep = '_'} separated values: [soapenv:Body](soapenv:Body) becomes { soapenv_Body: {} }

**Parameters**  
| Name           | Type   | Description  |
|----------------|--------|--------------|
| xmlString      | `string` | The xml file to be decoded |
| namespaceSep='_' | `string` | Namespace separator for replacing [soapenv:Body](soapenv:Body) type values with soapenv_Body _Optional_ |

**Returns**  
- `object`

---

# Mesa.xml.encode(xmlObject\[, wrapReplace, namespaceSep='_'\])

Convert an object into an XML string.

**Parameters**  
| Name              | Type   | Description  |
|-------------------|--------|--------------|
| xmlObject         | `object` | The object to be turned into xml. |
| wrapReplace       | `string` | Replace the default wrapping provided with another value _Optional_ |
| namespaceSep='_' | `string` | Namespace separator for replacing soapenv_Body: {} values with [soapenv:Body](soapenv:Body) _Optional_ |

**Returns**  
- `string`

---

# Mesa.xml.valid(xmlString)

Check if xml is valid.

**Parameters**  
| Name      | Type   | Description  |
|-----------|--------|--------------|
| xmlString | `string` |              |

**Returns**  
- `bool`

---

# Mesa.csv.decode(data\[, returnObject, options\])

Convert a CSV file into an object. Keys will be matched from the first header row of the CSV file.

**Parameters**  
| Name         | Type    | Description  |
|--------------|---------|--------------|
| data         | `string` |              |
| returnObject | `bool`  | Defaults to `true`, which will return an object keyed by the first row in the CSV content. Set to `false` to return an array. _Optional_ |
| options      | `object` | _Optional_ |

**Returns**  
- `object``array`

---

# Mesa.csv.encode(data\[, headerRow\])

Convert an object a CSV string.

**Parameters**  
| Name       | Type   | Description  |
|------------|--------|--------------|
| data       | `object` |              |
| headerRow  | `bool`  | Defaults to `true`. Set to `false` to skip the header row when returning CSV. _Optional_ |

**Returns**  
- `string`

---

# Mesa.vo.push(outputKey, payload)

Push to a Virtual Output.

**Parameters**  
| Name      | Type   | Description  |
|-----------|--------|--------------|
| outputKey | `string` |              |
| payload    | `mixed` |              |

---

# Mesa.vo.clear(outputKey)

Mark the matching Virtual Output records as cleared by the current Mesa Script.

**Parameters**  
| Name      | Type   | Description  |
|-----------|--------|--------------|
| outputKey | `string` |              |

---

# Mesa.vo.clearOne(outputKey, mesaId)

Mark a single Virtual Output record as cleared by the current Mesa Script.

**Parameters**  
| Name     | Type   | Description  |
|----------|--------|--------------|
| outputKey | `string` |              |
| mesaId    | `string` | The ID of the record to clear (returned as mesa_id in the Virtual Output). |

---

# Mesa.date.setTimezone(timezone)

Set the timezone to use to execute all script commands.

**Parameters**  
| Name      | Type   | Description  |
|-----------|--------|--------------|
| timezone  | `string` | The timezone identifier, like UTC or America/Los_Angeles. [See a full list of TZ Database names](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones). |

**Returns**  
- `string` The timezone identifier, like UTC or Europe/Lisbon.

---

# {Object} RequestOptions()

Request options.

**Parameters**  
| Name    | Type   | Description  |
|---------|--------|--------------|
| json    | `bool` | Automatically add JSON Content-Type headers and decode the response. Defaults to `true`. _Optional_ |
| query   | `object` | Parameters to append to the querystring. |
| headers | `object` | Headers to send to the request. |
| debug   | `bool` | Log request information and response headers. Defaults to `context.automation.debug` (`false`). _Optional_ |
| skipJsonWrap | `bool` | Skip the named auto wrapping of outgoing data. Defaults to `false`. _Optional_ |
| include_headers | `bool` | Include headers in the response. The response format will be [ResponseRaw](https://docs.getmesa.com/tools/custom-code/libraries/sdk#object-responseraw). _Optional_ |
| options.debug_exclude_headers | `array` | Exclude headers from debugging information to keep secret keys a secret. An array of header keys (example: `Content-Type`). _Optional_ |
| stringify_large_ints | `bool` | If JSON response, and response has ints over the JS max int, will traverse entire payload and cast long ints to strings. Defaults to `false`. _Optional_ |

---

# {Object|String} Response()

Request response:

- [ResponseRaw](https://docs.getmesa.com/tools/custom-code/libraries/sdk#object-responseraw) if `options.include_headers` is `true`,  
- `object` if `options.json` is `true`,  
- `string` if `options.json` is `false`.

---

# {Object} ResponseRaw()

Request response with headers when `options.include_headers` is `true`.

**Parameters**  
| Name            | Type   | Description  |
|-----------------|--------|--------------|
| body            | [Response](https://docs.getmesa.com/tools/custom-code/libraries/sdk#object-or-string-response) | Response from the server |
| headers         | `object` | Headers to from response. |
| request_method  | `string` | The method used to create the response: `GET`, `POST`, etc. |
| request_url     | `string` | The URL used to create the response. |
