vendor/Shopify.js

## Shopify()

Interact with the Shopify Admin API.

**Returns**

- `Void`

## request()

Make a request to a Shopify site.

This is just a wrapper to Mesa.shopify.request.

**Returns**

- `Void`

## Shopify.get(path[, options, connectionInfo])

Make a GET request to a Shopify site.

**Parameters**

| Name           | Type    | Description                                                                                           |
|----------------|---------|-------------------------------------------------------------------------------------------------------|
| path           | `string`|                                                                                                       |
| options        | [Options](https://docs.getmesa.com/tools/custom-code/libraries/shopify#object-options) | Additional configuration for Shopify calls _Optional_                               |
| connectionInfo | [ConnectionInfo](https://docs.getmesa.com/tools/custom-code/libraries/shopify#object-connectioninfo) | If you would like to connect to a separate Shopify website that Mesa is not installed on, create a Custom App and include a `connectionInfo` object. _Optional_ |

**Returns**

- `object`

## handleImageList(path, options, connectionInfo)

Handles listing of images with pagination.

**Parameters**

| Name           | Type    | Description                                |
|----------------|---------|--------------------------------------------|
| path           | `string`| Shopify REST endpoint path.               |
| options        | `Object`| Query options.                             |
| connectionInfo | `Object`| Connection info for external Shopify sites.|

**Returns**

- `Array` Array of images in REST format.

## handleImage(originalPath, options, connectionInfo)

Handles retrieval of a single image by its ID for a specific product.

**Parameters**

| Name           | Type    | Description                                |
|----------------|---------|--------------------------------------------|
| originalPath   | `string`| Original API endpoint path.                |
| options        | [Options](https://docs.getmesa.com/tools/custom-code/libraries/shopify#object-options)| Query options (not used in this implementation).  
| connectionInfo | [ConnectionInfo](https://docs.getmesa.com/tools/custom-code/libraries/shopify#object-connectioninfo)| Connection information for Shopify.

**Returns**

- `Object` Processed image data in REST format.

## handleProductCount(options, connectionInfo)

Handles the product count query.

**Parameters**

| Name           | Type    | Description                                |
|----------------|---------|--------------------------------------------|
| options        | `Object`| Query options.                             |
| connectionInfo | `Object`| Connection info for external Shopify sites.|

**Returns**

## handlePaginatedGraphQLQuery(queryFunction, options, transformFunction, connectionInfo)

Handles paginated GraphQL queries for products or variants.

**Parameters**

| Name           | Type    | Description                                |
|----------------|---------|--------------------------------------------|
| queryFunction  | `Function`| Function that generates a GraphQL query. |
| options        | `Object`| Query options, including filters and limits.|
| transformFunction| `Function`| Function to transform the returned data into the desired REST format. | 
| connectionInfo | `Object`| Optional connection info for external Shopify sites.|

**Returns**

- `Array` Array of transformed paginated results.

## handleProductList(path, options, connectionInfo)

Handles listing of products with pagination.

**Parameters**

**Returns**

- `Array` Array of products in REST format.

## Shopify.handleProduct(originalPath, options, connectionInfo)

Retrieve a single product by ID using GraphQL and convert it to REST format.

**Parameters**

| Name           | Type    | Description                                |
|----------------|---------|--------------------------------------------|
| originalPath   | `string`| Original API endpoint path.                |
| options        | [Options](https://docs.getmesa.com/tools/custom-code/libraries/shopify#object-options)| Options containing query parameters.        |
| connectionInfo | [ConnectionInfo](https://docs.getmesa.com/tools/custom-code/libraries/shopify#object-connectioninfo)| Connection information for a separate Shopify store.|

**Returns**

- `object` Product data in REST format.

## Shopify.handleProductPost(data[, connectionInfo])

Handles the creation of a product and its variants, if provided. Converts the REST payload into the appropriate GraphQL format.

**Parameters**

| Name           | Type    | Description                                |
|----------------|---------|--------------------------------------------|
| data           | `Object`| The product data in REST API format.     |
| connectionInfo | [ConnectionInfo](https://docs.getmesa.com/tools/custom-code/libraries/shopify#object-connectioninfo)| Connection information for Shopify.        |

**Returns**

- `Object` The product payload in REST API format.

## handleVariantList(path, options, connectionInfo)

Handles listing of variants with pagination.

**Parameters**

**Returns**

- `Array` Array of variants in REST format.

## Shopify.handleVariant(originalPath, options, connectionInfo)

Retrieve a specific variant by product ID and variant ID using GraphQL and convert it to REST format.

**Parameters**

**Returns**

- `object` Variant data in REST format.

## handleImagePost(data, connectionInfo)

Handles the creation of a product image. Converts the REST payload to GraphQL format and returns the response in REST format.

**Parameters**

| Name           | Type    | Description                                |
|----------------|---------|--------------------------------------------|
| data           | `Object`| The REST image payload.                  |
| connectionInfo | [ConnectionInfo](https://docs.getmesa.com/tools/custom-code/libraries/shopify#object-connectioninfo)| Shopify connection info.                  |

**Returns**

- `Object` The image payload in REST format.

## send(query, variables, connectionInfo, endpoint)

Send a GraphQL query to Shopify.

**Parameters**

| Name           | Type    | Description                                |
|----------------|---------|--------------------------------------------|
| query          | `string`| The GraphQL query string.                 |
| variables      | `object`| The variables to be included in the query.| 
| connectionInfo | `Object`| Additional connection configuration.       | 
| endpoint       | `string`| The endpoint to send the request to.      |

**Returns**

- `object`

## Shopify.post(path, data[, options, connectionInfo])

Make a POST request to a Shopify site.

By default Shopify calls will auto-wrap any outgoing JSON data, e.g. Shopify.post('/admin/products.json', data) will result in { "product": { data } } use options.skipJsonWrap=true to override this behavior.

**Parameters**

| Name           | Type    | Description                                |
|----------------|---------|--------------------------------------------|
| path           | `string`| Shopify REST endpoint path.               |
| data           | `object`| Data to send to the Shopify endpoint.     |
| options        | [Options](https://docs.getmesa.com/tools/custom-code/libraries/shopify#object-options)| Additional configuration for Shopify calls _Optional_  |
| connectionInfo | [ConnectionInfo](https://docs.getmesa.com/tools/custom-code/libraries/shopify#object-connectioninfo)| Connection information for Shopify _Optional_.|

**Returns**

- `object`

## handleVariantPut(productId, variantId, data, connectionInfo)

Handles updating a single variant for a specific product.

**Parameters**

| Name           | Type    | Description                                |
|----------------|---------|--------------------------------------------|
| productId      | `string`| The ID of the product.                     |
| variantId      | `string`| The ID of the variant.                     |
| data           | `Object`| The variant data to update.                 |
| connectionInfo | [ConnectionInfo](https://docs.getmesa.com/tools/custom-code/libraries/shopify#object-connectioninfo)| Shopify connection details.                 |

**Returns**

- `Object` The updated variant in REST format.

## handleProductPut(productId, data, connectionInfo)

Handles the updating of a product and its related entities (variants, images, etc.).

**Parameters**

| Name           | Type    | Description                                |
|----------------|---------|--------------------------------------------|
| productId      | `string`| The ID of the product to update.          |
| data           | `Object`| The product data to update.                |
| connectionInfo | [ConnectionInfo](https://docs.getmesa.com/tools/custom-code/libraries/shopify#object-connectioninfo)| Shopify connection details.                 |

**Returns**

- `Object` The updated product in REST format.

## Shopify.put(path, data[, options, connectionInfo])

Make a PUT request to a Shopify site.

By default Shopify calls will auto-wrap any outgoing JSON data, e.g. Shopify.put('/admin/products.json', data) will result in { "product": { data } } use options.skipJsonWrap=true to override this behavior.

**Parameters**

**Returns**

- `object`

## Shopify.patch(path, data[, options, connectionInfo])

Make a PATCH request to a Shopify site.

By default Shopify calls will auto-wrap any outgoing JSON data, e.g. Shopify.patch('/admin/products.json', data) will result in { "product": { data } } use options.skipJsonWrap=true to override this behavior.

**Parameters**

**Returns**

- `object`

## Shopify.delete(path[, options, connectionInfo])

Make a DELETE request to a Shopify site.

**Parameters**

| Name           | Type    | Description                                |
|----------------|---------|--------------------------------------------|
| path           | `string`| Shopify REST endpoint path.               |
| options        | [Options](https://docs.getmesa.com/tools/custom-code/libraries/shopify#object-options)| Additional configuration for Shopify calls _Optional_|
| connectionInfo | [ConnectionInfo](https://docs.getmesa.com/tools/custom-code/libraries/shopify#object-connectioninfo)| Connection information for Shopify _Optional_.|

**Returns**

- `object`

## getMyshopifyDomain(context)

Returns myshopify domain from the connection.

**Parameters**

| Name    | Type    | Description                                                      |
|---------|---------|------------------------------------------------------------------|
| context | `Object`| Context containing connection information.                       |

**Returns**

- `string` The myshopify domain. Ex: mystore.myshopify.com

## getShopifyAdminUrl(context)

Returns myshopify domain from the connection.

**Parameters**

**Returns**

- `string` The Shopify admin url, including https://. Ex: https://admin.shopify.com/store/mystore

## getShopifyUuid(context)

Returns the subdomain part of the myshopify domain from the connection.

**Parameters**

**Returns**

- `string` The subdomain part of the myshopify domain. Ex: mystore

## deleteProduct(path, options, connectionInfo)

Delete a product by ID.

**Parameters**

| Name           | Type    | Description               |
|----------------|---------|---------------------------|
| path           | `string`| Shopify REST endpoint path.|
| options        | `Object`| Query options.            |
| connectionInfo | `Object`| Connection info for external Shopify sites.|

**Returns**

- `Void`

## deleteVariant(path, options, connectionInfo)

Delete a variant by ID.

**Parameters**

**Returns**

- `Void`

## deleteImage(path, options, connectionInfo)

Delete a product image by ID.

**Parameters**

**Returns**

- `Void`

## getAllProducts([query={}, limit=250])

Make consecutive calls to Shopify in order to retrieve all products. https://help.shopify.com/en/api/reference/products/product

**Parameters**

| Name    | Type    | Description                                     |
|---------|---------|-------------------------------------------------|
| query   | `object`| Parameters to append to the Shopify querystring. _Optional_  |
| limit   | `number`| Result count for Shopify query. _Optional_       |

**Examples**

```javascript
// returns array of all products
const Shopify = require('vendor/Shopify.js');
Shopify.getAllProducts();
```

**Returns**

- `array`

## appendToArray([data], The)

Update a value if it already exists, or append it to the array if it does not exist. The example routine below should be every time we are updating `tags` or `note_attributes` to ensure that multiple Automations will work nicely with each other and not overwrite values set in other Automations.

**Parameters**

| Name    | Type    | Description                                   |
|---------|---------|-----------------------------------------------|
| data    | `array` | An array of values that you would like to append a value to _Optional_|
| The     | `string`/`object`| value to append to the array. For `tags`, this would be a `string`. For `note_attributes`, this would be an object.

**Examples**

```javascript
Mesa.log.debug('Calling shopify to get the latest order note_attributes');
const order = Shopify.get(`admin/orders/${payload.id}.json`);
let noteAttributes = order.order.note_attributes;
noteAttributes = Shopify.appendToArray(noteAttributes, {
  name: 'dob',
  value: 'Jan 1 2000',
});
```

**Returns**

- `array`

## getVariantInventoryData(variantId)

Get inventory location information for a Shopify variant. https://help.shopify.com/en/api/reference/inventory/inventorylevel

**Parameters**

| Name       | Type    | Description                 |
|------------|---------|-----------------------------|
| variantId  | `number`| Shopify variant id.         |

**Examples**

```javascript
// returns { inventory_item_id: {number}, [ { inventory_levels: { inventory_item_id: {number}, location_id: {number}, available: {number}, updated_at: {string} } ] }
const Shopify = require('vendor/Shopify.js');
Shopify.getVariantInventoryData(123456);
```

**Returns**

- `&lt;a href&#x3D;&quot;#object-inventorydata&quot;&gt;InventoryData&lt;/a&gt;`

## buildVariantInventoryUpdate(variantId, inventoryCount[, adjust=true, fulfillableAlter])

Build InventoryLevel update information for a Shopify variant. https://help.shopify.com/en/api/reference/inventory/inventorylevel

**Parameters**

| Name          | Type    | Description                                                   |
|---------------|---------|---------------------------------------------------------------|
| variantId     | `number`| Shopify variant id.                                          |
| inventoryCount | `number`| Value to set as inventory.                                   |
| adjust=true   | `bool`  | Switch for available_adjustment vs available. _Optional_     |
| fulfillableAlter| [fulfillableAlter](https://docs.getmesa.com/tools/custom-code/libraries/shopify#fulfillablealter) | Callback function allows fulfillment location to be altered. _Optional_|

**Examples**

```javascript
// note string for location_id, as it is required by Shopify API post
// returns { inventory_item_id: {number}, location_id: {string}, available|available_adjustment: {number} }
const Shopify = require('vendor/Shopify.js');
Shopify.buildVariantInventoryUpdate(123456, 10, true | false);
```

**Returns**

- `&lt;a href&#x3D;&quot;#object-inventoryupdatedata&quot;&gt;InventoryUpdateData&lt;/a&gt;`

## {Object} Options()

options parameter for Shopify calls

By default Shopify calls will auto-wrap any outgoing JSON data, e.g. Shopify.post('/admin/products.json', data) will result in { "product": { data } } use skipJsonWrap=true to override this behavior.

**Properties**

**Returns**

- `Void`

## {Object} ConnectionInfo()

connectionInfo parameter for Shopify calls

**Properties**

**Returns**

- `Void`

## {Object} FulfillableLocation()

Fulfillable location shape returned by fulfillableAlter https://help.shopify.com/en/api/reference/inventory/location

**Parameters**

| Name       | Type    | Description                               |
|------------|---------|-------------------------------------------|
| location_id| `number`| The ID of the location that the inventory level belongs to.|

**Returns**

- `Void`

## {Function} fulfillableAlter(inventoryLevels)

Callback allows buildVariantInventoryUpdate fulfillment location to be altered. https://help.shopify.com/en/api/reference/inventory/inventorylevel

**Parameters**

| Name            | Type                      | Description                                               |
|-----------------|--------------------------|-----------------------------------------------------------|
| inventoryLevels  | `Array.<Object>`         | Inventory levels for the variant at different locations.  |
| inventoryLevels.inventory_item_id| `number`| Inventory item id for variant                            |
| inventoryLevels.location_id| `number`| Location id                                             |
| inventoryLevels.available| `number`| Inventory count                                       |
| inventoryLevels.updated_at| `string`| Last updated                                          |

**Returns**

- `&lt;a href&#x3D;&quot;#object-fulfillablelocation&quot;&gt;FulfillableLocation&lt;/a&gt;` fulfillableLocation

## {Object} InventoryData()

Return from getVariantInventoryData.

**Properties**

**Returns**

- `Void`

## {Object} InventoryUpdateData()

Return from buildVariantInventoryUpdate. Will either have available or available_adjustment depending on adjust param. https://help.shopify.com/en/api/reference/inventory/inventorylevel

**Properties**

**Returns**

- `Void`
