# oAuth

vendor/Oauth.js

## new Oauth(grantType, tokenKey)

Class containing methods to authenticate and make authenticated requests with a third party API

**Parameters**

| Name      | Type     | Description                                                         |   |
| --------- | -------- | ------------------------------------------------------------------- | - |
| grantType | `string` | Oauth grant type. One of: `refresh_token`, `password`, or `custom`. |   |
| tokenKey  | `string` | The key of the secret containing the oAuth token information.       |   |

**Examples**

```javascript
// Refresh token flow.
const Oauth = require('vendor/Oauth.js');
const oauth = new Oauth('refresh_token', 'service.oauth');
```

```javascript
// Username password flow.
const Oauth = require('vendor/Oauth.js');
// Save username and password from external standalone secrets.
let token = JSON.decode(Mesa.secret.get('service.oauth', '{}'));
token.username = Mesa.secret.get('service-username');
token.password = Mesa.secret.get('service-password');
Mesa.secret.set('service.oauth', JSON.stringify(token));
const oauth = new Oauth('password', 'service.oauth');
```

```javascript
// Skubana flow (access_token that does not expire)
const Oauth = require('vendor/Oauth.js');
const oauth = new Oauth('custom', 'skubana.oauth');
const getResponse = oauth.get('https://dev.skubana.com/v1/orders');
Mesa.log.info('Get Response: ', getResponse);
```

```javascript
// Oauth Usage
const getResponse = oauth.get('https://example.com/products.json');
const postResponse = oauth.post('https://example.com/products.json', {});
Mesa.log.info('Get Response: ', getResponse);
Mesa.log.info('Post Response: ', postResponse);
```

**Returns**

* `Void`

## constructor(grantType, tokenKey, hasHeaders)

**Parameters**

| Name       | Type      | Description |   |
| ---------- | --------- | ----------- | - |
| grantType  | `string`  |             |   |
| tokenKey   | `string`  |             |   |
| hasHeaders | `boolean` |             |   |

**Returns**

* `Void`

## init()

Init the access token

**Returns**

* `Void`

## request(method, path, data, options)

Request method with the refresh token retry if fails.

**Parameters**

| Name    | Type                   | Description                              |   |
| ------- | ---------------------- | ---------------------------------------- | - |
| method  | `string`               | Request method.                          |   |
| path    | `string`               | Request path.                            |   |
| data    | `object`               |                                          |   |
| options | `Types.RequestOptions` | Additional configuration for Oauth calls |   |

**Returns**

* `object`

## get(path\[, options])

Make a GET request to an external Rest API

**Parameters**

| Name    | Type                   | Description                              |            |
| ------- | ---------------------- | ---------------------------------------- | ---------- |
| path    | `string`               | Request path                             |            |
| options | `Types.RequestOptions` | Additional configuration for Oauth calls | *Optional* |

**Returns**

* `object`

## post(path, data\[, options])

Make a POST request to an external Rest API.

**Parameters**

| Name    | Type                   | Description                              |            |
| ------- | ---------------------- | ---------------------------------------- | ---------- |
| path    | `string`               | Request path                             |            |
| data    | `object`               | Request payload                          |            |
| options | `Types.RequestOptions` | Additional configuration for Oauth calls | *Optional* |

**Returns**

* `object`

## put(path, data\[, options])

Make a PUT request to an external Rest API.

**Parameters**

| Name    | Type                   | Description                              |            |
| ------- | ---------------------- | ---------------------------------------- | ---------- |
| path    | `string`               | Request path                             |            |
| data    | `object`               | Request payload                          |            |
| options | `Types.RequestOptions` | Additional configuration for Oauth calls | *Optional* |

**Returns**

* `object`

## patch(path, data\[, options])

Make a PATCH request to an external Rest API.

**Parameters**

| Name    | Type                   | Description                              |            |
| ------- | ---------------------- | ---------------------------------------- | ---------- |
| path    | `string`               | Request path                             |            |
| data    | `object`               | Request payload                          |            |
| options | `Types.RequestOptions` | Additional configuration for Oauth calls | *Optional* |

**Returns**

* `object`

## delete(path\[, options])

Make a DELETE request to an external Rest API.

**Parameters**

| Name    | Type                   | Description                              |            |
| ------- | ---------------------- | ---------------------------------------- | ---------- |
| path    | `string`               | Request path                             |            |
| options | `Types.RequestOptions` | Additional configuration for Oauth calls | *Optional* |

**Returns**

* `object`


---

# 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.getmesa.com/tools/custom-code/libraries/oauth.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.
