# Nestuite Rest API v2

A wrapper to make REST API request to Netsuite.

### Notable Changes

- Netsuite configuration paramaters are no longer pulled from `process.env`. They need to be passed in.
- Body will now returned as parsed object rather than a JSON string

## Required Config values

```js
{
  netsuiteApiHost: 'netsuite host',
  consumerKey: 'netsuite consumer key',
  consumerSecret: 'nesuite consumer secret',
  netsuiteAccountId: 'netsuite account id',
  netsuiteTokenKey: 'netsuite token key',
  netsuiteTokenSecret: 'netsuite token secret',
}
```

## Other gotchas

- Query parameters must be passed in with path. This may be changed at a future time just not now.
- `requestType` must be either `suiteql`, `workbook` or `record`

## Available convenience values
- `suitesqlPath = services/rest/query/v1/suiteql`
- `workbookPath = services/rest/query/v1/workbook`
- `salesOrderPath = services/rest/record/v1/salesOrder`
- `purchaseOrderPath = services/rest/record/v1/purchaseOrder`
- `cashSalePath = services/rest/record/v1/cashSale`
- `expandAbleSubResourcesQueryParam = expandSubResources=true`

## Examples

#### Get Request

```js
const { makeRequest, expandAbleSubResourcesQueryParam, suitesqlPath } = require('@fye/netsuite-rest-api');

async () => {
  const config = {
    netsuiteApiHost: 'netsuite host',
    consumerKey: 'netsuite consumer key',
    consumerSecret: 'nesuite consumer secret',
    netsuiteAccountId: 'netsuite account id',
    netsuiteTokenKey: 'netsuite token key',
    netsuiteTokenSecret: 'netsuite token secret',
  };
  const requestData = {
    method: 'GET',
    requestType: 'record',
    path: `${s}/1234?${expandAbleSubResourcesQueryParam}`,
  };
  const response = await makeRequest(config, requestData);
};
```

#### Update/Patch Request

```js
const { makeRequest } = require('@fye/netsuite-rest-api');

( async () => {
  const config = {...};
  const requestData = {
    method: 'PATCH',
    requestType: 'record',
    path: 'salesorder/1234',
    query: { foo: 'bar' },
  }
  const response = await makeRequest(config, requestData)
})
```

#### Suitesql Request

```js
const { makeRequest } = require('@fye/netsuite-rest-api');

( async () => {
  const config = {...};
  const requestData = {
    method: 'POST',
    requestType: 'suitesql',
    query: 'select foo from bar;',
  }
  const response = await makeRequest(config, requestData)
})
```

#### Suitesql Request with next URL

```js
const { makeRequest } = require('@fye/netsuite-rest-api');

( async () => {
  const config = {...};
  const requestData = {
    method: 'POST',
    requestType: 'suitesql',
    query: 'select foo from bar;',
    nextUrl: 'https://endpoint.com/services/rest/query/v1/suiteql?limit=10&offset=10'
  }
  const response = await makeRequest(config, requestData)
})
```


#### Workbook Request with next URL

```js
const { makeRequest } = require('@fye/netsuite-rest-api');

( async () => {
  const config = {...};
  const requestData = {
    method: 'POST',
    requestType: 'workbook',
    query: 'workbook999',
    nextUrl: 'https://endpoint.com/services/rest/query/v1/workbook/workbook999/result?limit=10&offset=10'
  }
  const response = await makeRequest(config, requestData)
})
```
