mws-sdk-async
Version:
A simple class based approach to work with Amazon's Merchant Web Services APIs.
128 lines (103 loc) • 4.01 kB
JavaScript
const _ = require('lodash');
const MWS = require('../MWS');
const parsers = require('./parsers');
class Orders extends MWS {
constructor(options) {
super(options);
this.BASE_REQUEST = {
method: 'POST',
path: 'Orders',
version: '2013-09-01',
query: {},
};
/** Bind Context */
this.listOrders = this.listOrders.bind(this);
this.listOrderItems = this.listOrderItems.bind(this);
}
/**
* Gets a list of orders from the mws orders api
* @param {object} params - object that contains the details of the request
* @param {array} params.MarketplaceId - array of relevant marketplaceIDs
* @param {array} params.OrderStatus - array of order statuses
* @param {array} params.FulfillmentChannel - array of Fulfillment Channels
* @param {string} params.CreatedAfter - optional ISO timestamp
* @param {string} params.CreatedBefore - optional ISO timestamp
* @param {string} params.LastUpdatedAfter - optional ISO timestamp
* @param {string} params.LastUpdatedBefore - optional ISO timestamp
*/
async listOrders(params) {
const request = { ...this.BASE_REQUEST };
request.query.Action = 'ListOrders';
/** Assign Marketplace Id(s) */
if (!params.MarketplaceId) {
request.query['MarketplaceId.Id.1'] = this.marketplaceId;
} else if (typeof params.MarketplaceId !== 'object' || _.keys(params.MarketplaceId)[0] !== '0') {
throw new Error('params.MarketplaceId must be an array');
} else {
params.MarketplaceId.forEach((marketPlace, id) => {
const num = id + 1;
request.query[`MarketplaceId.Id.${num}`] = marketPlace;
});
delete params.MarketplaceId;
}
/** Assign the Order Status(es) */
if (params.OrderStatus) {
if (typeof params.OrderStatus !== 'object' || _.keys(params.OrderStatus)[0] !== '0') {
throw new Error('params.OrderStatus must be an array');
} else {
params.OrderStatus.forEach((status, id) => {
const num = id + 1;
request.query[`OrderStatus.Status.${num}`] = status;
});
delete params.OrderStatus;
}
}
/** Assign the Fulfillment Channel(s) */
if (params.FulfillmentChannel) {
if (typeof params.FulfillmentChannel !== 'object' || _.keys(params.FulfillmentChannel)[0] !== '0') {
throw new Error('params.FulfillmentChannel must be an array');
} else {
params.FulfillmentChannel.forEach((channel, id) => {
const num = id + 1;
request.query[`FulfillmentChannel.Channel.${num}`] = channel;
});
delete params.FulfillmentChannel;
}
}
/** Assign params to query */
_.keys(params).forEach((key) => {
if (typeof params[key] === 'string' || typeof params[key] === 'number') {
request.query[key] = params[key];
}
});
/** Make the Call */
let response = await this.makeCall(request);
/** Convert the XML to JSON */
response = await Orders.XMLToJSON(response);
/** Return the parsed response */
return parsers.listOrders(response);
}
async listOrdersByNextToken(token) {
const request = Object.assign({}, this.BASE_REQUEST);
request.query.Action = 'ListOrdersByNextToken';
request.query.NextToken = token;
/** Make the Call */
let response = await this.makeCall(request);
/** Convert the XML to JSON */
response = await Orders.XMLToJSON(response);
/** Return the parsed response */
return parsers.listOrders(response);
}
async listOrderItems(AmazonOrderId) {
const request = Object.assign({}, this.BASE_REQUEST);
request.query.Action = 'ListOrderItems';
request.query.AmazonOrderId = AmazonOrderId;
/** Make the Call */
let response = await this.makeCall(request);
/** Convert the XML to JSON */
response = await Orders.XMLToJSON(response);
/** Return the parsed response */
return parsers.listOrderItems(response);
}
}
module.exports = Orders;