@stylusapparel/stylusop-api-node-wrapper
Version:
This is the official NodeJs wrapper for connecting to the StylusOP API
299 lines (234 loc) • 11.6 kB
Markdown
# StylusOP API wrapper for Node.js (Official Module)
A NodeJS wrapper for connecting to Stylus order processing system using an authenticated token provided from Stylus. You can also view the full documentation of Stylus APIs
[here](https://stylusopapi-docs.stylusapparel.com/?version=latest#c7389e8b-7626-bdaf-4a30-2b8d1916c37e)
## Installing
```bash
$ npm install @stylusapparel/stylusop-api-node-wrapper --save
```
OR
```bash
$ yarn add @stylusapparel/stylusop-api-node-wrapper
```
## Usage
Create a wrapper client for connecting to stylus:
```js
const stylusWrapper = require("@stylusapparel/stylusop-api-node-wrapper");
const stylusClient = stylusWrapper.createClient("YOUR_API_SECRET_TOKEN",{ // client configurations
"username": "YOUR_USERNAME", // Required, your stylus provided "username"
"sandBox": true, // Optional, enable only if you are working in development mode
"apiVersion": "v2", // Optional, by default client connects to latest api version,
"tokenType": "basic" // Optional, You can use the JWT token or Basic Auth token. Allowed values: "basic", "jwt", Default is "basic"
});
```
-- Note: If a STYLUSOP_API_URL environment variable is found set, it will use that as the API endpoint and the "sandBox" setting will be ignored... --
## Validate Secret Token
Check the validity of your secret token if needed before connecting to stylus processing functions:
```js
stylusClient.isTokenValid()
.then((response) => {
console.log("success",response); // true
// Continue...
})
.catch((error) => {
console.log("error",error.errorCode,error.message);
});
OR
const response = await stylusClient.isTokenValid();
```
## Push Order
Push an order to Stylus for production
```js
stylusClient.orders.create({"ORDER_OBJECT"})
.then( (response) => {
console.log("order reference id",response.reference_id); // Very important! Store this 'reference_id' for future reference
})
.catch( (error) => {
console.log("error",error.errorCode,error.message,error.status);
});
// OR
const response = await stylusClient.orders.create({"ORDER_OBJECT"});
```
More information on the format of order object can be view [here](https://stylusopapi-docs.stylusapparel.com/?version=latest#c7389e8b-7626-bdaf-4a30-2b8d1916c37e)
Note:- **Store the `reference_id` in your side for the future referencing this order from Stylus API**
## Fetch Orders
Fetch the previous orders details based on pagination or if no filter is provided this will return all the orders in descending order:
```js
stylusClient.orders.list({
offset:0, // optional
limit:15, // optional,
dateRange:{ // optional, fetch orders created between the start and end date
start:"2020-07-03T00:00:00.130Z", // Follow the date format
end:"2020-08-03T00:00:00.130Z"
},
sort : 'created_date', //optional
sortOrder : 'DESC', //optional
orderId: 'ORDER_ID', //optional
orderStatus: "printed,shipped" // optional, comma saperated order status
})
.then( (orders) => {
console.log("orders",orders); // Array of order objects
})
.catch( (error) => {
console.log("error",error.errorCode,error.message,error.status);
});
// OR
const orders = await stylusClient.orders.list({
offset:0, // optional
limit:15, // optional
dateRange:{ // optional, fetch orders created between the start and end date
start:"2020-07-03T00:00:00.130Z",
end:"2020-08-03T00:00:00.130Z"
},
sort : 'created_date', //optional
sortOrder : 'DESC', //optional
orderId: 'ORDER_ID', //optional
orderStatus: "printed,shipped" // optional, comma saperated order status
});
```
## Fetch Order Details
Fetch the details of an order by its reference id:
```js
stylusClient.orders.get("ORDER_REFERENCE_ID") // ORDER_REFERENCE_ID will be got from 'pushOrder' response
.then( (orderDetail) => {
console.log("order Detail",orderDetail); // Order detail object
})
.catch( (error) => {
console.log("error",error.errorCode,error.message,error.status);
});
// OR
const orderDetail = await stylusClient.orders.get('ORDER_REFERENCE_ID');
```
## Fetch Order Status
Fetch the status of an order by its reference id
```js
client.orders.status("ORDER_REFERENCE_ID") // ORDER_REFERENCE_ID will be got from 'pushOrder' response
.then( (orderStatusDetails) => {
console.log("order status details",orderStatusDetails); // Order status details object
})
.catch( (error) => {
console.log("error",error.errorCode,error.message,error.status);
});
// OR
const orderStatusDetails = await stylusClient.orders.status("ORDER_REFERENCE_ID");
```
## Fetch Status of Multiple Orders
Fetch the status of mutiple orders by its reference id
```js
client.orders.bulkStatus("ORDER_REFERENCE_ID1,ORDER_REFERENCE_ID3,ORDER_REFERENCE_ID3") // comma saperated ORDER_REFERENCE_ID
.then( (orderStatusDetails) => {
console.log("order status details",orderStatusDetails); // Order status details object
})
.catch( (error) => {
console.log("error",error.errorCode,error.message,error.status);
});
// OR
const orderStatusDetails = await stylusClient.orders.bulkStatus("ORDER_REFERENCE_ID1,ORDER_REFERENCE_ID3,ORDER_REFERENCE_ID3");
```
## Cancel Order
Cancel an exisitng order, which is already pushed to Stylus for production
```js
stylusClient.orders.cancel("ORDER_REFERENCE_ID", { // ORDER_REFERENCE_ID will be got from 'pushOrder' response
"items": [ // optional, if you want to cancel the entire order pass 'items' as []
100001, // itemNumber of the order to cancel in case of partial order cancellation
100003 // itemNumber of the order to cancel in case of partial order cancellation
],
"reason": "Customer requested chargeback" // Optional, reason for cancelling the order
})
.then( (cancelStatus) => {
console.log("order activities",cancelStatus); // true, when cancellation success
})
.catch( (error) => {
console.log("error",error.errorCode,error.message,error.status);
});
// OR
const cancelStatus = await stylusClient.orders.cancel("ORDER_REFERENCE_ID", { // ORDER_REFERENCE_ID will be got from 'pushOrder' response
"items": [ // optional, if you want to cancel the entire order pass 'items' as []
100001, // itemNumber of the order to cancel in case of partial order cancellation
100003 // itemNumber of the order to cancel in case of partial order cancellation
],
"reason": "Customer requested chargeback" // Optional, reason for cancelling the order
});
```
More information on the format of order cancel object can be view [here](https://stylusopapi-docs.stylusapparel.com/?version=latest#fbe3ff1c-c179-4c84-a9b3-a549b4ed0dc4)
## Update Order
Update an existing order, which is already pushed to Stylus for production
```js
stylusClient.orders.update("ORDER_REFERENCE_ID",{"ORDER_UPDATE_OBJECT"}) // ORDER_REFERENCE_ID will be got from 'pushOrder' response
.then( (updateStatus) => {
console.log("order updated status",updateStatus); // true, when updation success
})
.catch( (error) => {
console.log("error",error.errorCode,error.message,error.status);
});
// OR
const updateStatus = await stylusClient.orders.update("ORDER_REFERENCE_ID",{"ORDER_UPDATE_OBJECT"});
```
More information on the format of order update object can be view [here](https://stylusopapi-docs.stylusapparel.com/?version=latest#3d581a33-7ade-4121-929f-9383cd8f43b8)
## Fetch Order Activities
Fetch the activities of an order by its reference id
```js
stylusClient.orders.activities("ORDER_REFERENCE_ID") // ORDER_REFERENCE_ID will be got from 'pushOrder' response
.then( (response) => {
console.log("order activities",response); // Array of order activity objects
})
.catch( (error) => {
console.log("error",error.errorCode,error.message,error.status);
});
// OR
const response = await stylusClient.orders.activities("ORDER_REFERENCE_ID");
```
## Search Products
Full/partial text based search for your products on its title, name, or skucode. If no search keyword is provided it will fetch all the products:
```js
stylusClient.products.search({
offset:0, // optional, offset value for pagination implementation
limit:15, // optional, if not provided fetch all matching result
keyword : 'leggings', // optional, text for searching products
productIds: ['MERMTN1a70', 'MERMTN1a71'] // optional, select products based on array of product ids
})
.then( (products) => {
console.log("products",products); // Array of products
})
.catch( (error) => {
console.log("error",error.errorCode,error.message,error.status);
});
// OR
const products = await stylusClient.products.search({
offset:0, // optional, offset value for pagination implementation
limit:15, // optional, if not provided fetch all matching result
keyword : 'leggings', // optional, string for search
productIds: ['MERMTN1a70', 'MERMTN1a71'] // optional, Array of productids
});
```
## Find Variants
Fetch details of variant(s) by sku:
```js
stylusClient.products.variants.find({
variantIds: ['B150_BK_OS', 'B150_BK_MD'] // optional, select variants based on array of variant ids
})
.then( (variants) => {
console.log("variants",variants); // Array of variants
})
.catch( (error) => {
console.log("error",error.errorCode,error.message,error.status);
});
// OR
const variants = await stylusClient.products.variants.find({
variantIds: ['B150_BK_OS', 'B150_BK_MD'] // optional, select variants based on array of variant ids
});
```
## COMMON ERROR CODES
- **TOKEN_MISSING** - Secret token is missing in client config.
- **USER_MISSING** - Username is missing in client config.
- **VERSION_ISSUE** - apiVersion provided in the client config is not a valid/supported one.
- **TOKEN_EXPIRE** - Your token has been expired and can't access stylus service(s).
- **TOKEN_INVALID** - Your token is not valid or you dont have the access to stylus service(s).
- **UNKNOWN_ERROR** - Error occured due to internal connectivity issues at Stylus. side.
- **PAGINATION_LIMIT_ERROR** - When pass an unprocessable value for 'limit' in 'getOrders' function.
- **ORDER_ID_INVALID** - When pass an invalid order id in 'getOrder', 'updateOrder', or 'cancelOrder' function.
- **ORDER_PAYLOAD_INVALID** - When push an invalid order payload to Stylus for creating order.
- **ORDER_PRODUCT_INVALID** - When push an order payload with item(s) which is not mapped to Stylus.
- **ORDER_ITEM_PROPERTY_INVALID** - When push an order payload with item(s) having properties which is unknown to Stylus.
- **ORDER_DUPLICATE** - When push same order again or order contains item number of previous order.
- **ORDER_STATUS_ISSUE** - When try to change the status of an order which is already in a non-updatable status. For eg:- Tries to cancel an order which is already printed / shipped
- **PRODUCT_NOT_FOUND** - Product not found in our database or not found under the client's account.